(function() { function getQueryParam(name, queryString) { var match = RegExp(name + '=([^&]*)').exec(queryString || location.search); return match && decodeURIComponent(match[1]); } function hasOption(opt) { var s = window.location.search; var re = new RegExp('(?:^|[&?])' + opt + '(?:[=]([^&]*))?(?:$|[&])', 'i'); var m = re.exec(s); return m ? (m[1] === undefined ? true : m[1]) : false; } var scriptTags = document.getElementsByTagName('script'), defaultTheme = 'neptune', defaultRtl = false, i = scriptTags.length, requires = [ 'Ext.toolbar.Toolbar', 'Ext.form.field.ComboBox', 'Ext.form.FieldContainer', 'Ext.form.field.Radio' ], defaultQueryString, src, theme, rtl; while (i--) { src = scriptTags[i].src; if (src.indexOf('include-ext.js') !== -1) { defaultQueryString = src.split('?')[1]; if (defaultQueryString) { defaultTheme = getQueryParam('theme', defaultQueryString) || defaultTheme; defaultRtl = getQueryParam('rtl', defaultQueryString) || defaultRtl; } break; } } Ext.themeName = theme = getQueryParam('theme') || defaultTheme; rtl = getQueryParam('rtl') || defaultRtl; if (rtl.toString() === 'true') { requires.push('Ext.rtl.*'); Ext.define('Ext.GlobalRtlComponent', { override: 'Ext.AbstractComponent', rtl: true }); } Ext.require(requires); Ext.onReady(function() { Ext.getBody().addCls(Ext.baseCSSPrefix + 'theme-' + Ext.themeName); if (Ext.isIE6 && theme === 'neptune') { Ext.Msg.show({ title: 'Browser Not Supported', msg: 'The Neptune theme is not supported in IE6.', buttons: Ext.Msg.OK, icon: Ext.Msg.WARNING }); } if (hasOption('nocss3')) { Ext.supports.CSS3BorderRadius = false; Ext.getBody().addCls('x-nbr x-nlg'); } function setParam(param) { var queryString = Ext.Object.toQueryString( Ext.apply(Ext.Object.fromQueryString(location.search), param) ); location.search = queryString; } function removeParam(paramName) { var params = Ext.Object.fromQueryString(location.search); delete params[paramName]; location.search = Ext.Object.toQueryString(params); } var toolbar; setTimeout(function() { toolbar = Ext.widget({ xtype: 'toolbar', border: true, rtl: false, id: 'options-toolbar', floating: true, fixed: true, preventFocusOnActivate: true, draggable: { constrain: true }, items: [{ xtype: 'combo', rtl: false, width: 170, labelWidth: 45, fieldLabel: 'Theme', displayField: 'name', valueField: 'value', labelStyle: 'cursor:move;', margin: '0 5 0 0', store: Ext.create('Ext.data.Store', { fields: ['value', 'name'], data : [ { value: 'access', name: 'Accessibility' }, { value: 'classic', name: 'Classic' }, { value: 'gray', name: 'Gray' }, { value: 'neptune', name: 'Neptune' } ] }), value: theme, listeners: { select: function(combo) { var theme = combo.getValue(); if (theme !== defaultTheme) { setParam({ theme: theme }); } else { removeParam('theme'); } } } }, { xtype: 'button', rtl: false, hidden: !(Ext.repoDevMode || location.href.indexOf('qa.sencha.com') !== -1), enableToggle: true, pressed: rtl, text: 'RTL', margin: '0 5 0 0', listeners: { toggle: function(btn, pressed) { if (pressed) { setParam({ rtl: true }); } else { removeParam('rtl'); } } } }, { xtype: 'tool', type: 'close', rtl: false, handler: function() { toolbar.destroy(); } }], // Extra constraint margins within default constrain region of parentNode constraintInsets: '0 -' + (Ext.getScrollbarSize().width + 4) + ' 0 0' }); toolbar.show(); toolbar.alignTo( document.body, Ext.optionsToolbarAlign || 'tr-tr', [ (Ext.getScrollbarSize().width + 4) * (Ext.rootHierarchyState.rtl ? 1 : -1), -(document.body.scrollTop || document.documentElement.scrollTop) ] ); var constrainer = function() { toolbar.doConstrain(); }; Ext.EventManager.onWindowResize(constrainer); toolbar.on('destroy', function() { Ext.EventManager.removeResizeListener(constrainer); }); }, 100); }); })();