otsdaq_utilities  v2_05_02_indev
themeSelector.js
1 (
2  function()
3  {
4  function getQueryParam(name, queryString)
5  {
6  var match = RegExp(name + '=([^&]*)').exec(queryString || location.search);
7  return match && decodeURIComponent(match[1]);
8  }
9 
10  function hasOption(opt)
11  {
12  var s = window.location.search;
13  var re = new RegExp('(?:^|[&?])' + opt + '(?:[=]([^&]*))?(?:$|[&])', 'i');
14  var m = re.exec(s);
15  return m ? (m[1] === undefined ? true : m[1]) : false;
16  }
17 
18  var scriptTags = document.getElementsByTagName('script'),
19  defaultTheme = 'triton',
20  defaultRtl = false,
21  i = scriptTags.length,
22  requires = [
23  'Ext.window.MessageBox',
24  'Ext.toolbar.Toolbar',
25  'Ext.form.field.ComboBox',
26  'Ext.form.FieldContainer',
27  'Ext.form.field.Radio'
28  ],
29  comboWidth = {
30  'classic' : 160,
31  'gray' : 160,
32  'neptune' : 180,
33  'triton' : 180,
34  'crisp' : 180,
35  'neptune-touch': 220,
36  'crisp-touch' : 220
37  },
38  labelWidth = {
39  'classic' : 40,
40  'gray' : 40,
41  'neptune' : 45,
42  'triton' : 45,
43  'crisp' : 45,
44  'neptune-touch': 55,
45  'crisp-touch' : 55
46  },
47  defaultQueryString,
48  src,
49  theme,
50  rtl,
51  toolbar;
52 
53  while (i--)
54  {
55  src = scriptTags[i].src;
56  if (src.indexOf('include-ext.js') !== -1)
57  {
58  defaultQueryString = src.split('?')[1];
59  if (defaultQueryString)
60  {
61  defaultTheme = getQueryParam('theme', defaultQueryString) || defaultTheme;
62  defaultRtl = getQueryParam('rtl' , defaultQueryString) || defaultRtl;
63  }
64  break;
65  }
66  }
67 
68  Ext.themeName = theme = getQueryParam('theme') || defaultTheme;
69 
70  rtl = getQueryParam('rtl') || defaultRtl;
71 
72  if (rtl.toString() === 'true')
73  {
74  requires.unshift('Ext.rtl.*');
75  Ext.define('Ext.examples.RtlComponent',
76  {
77  override: 'Ext.Component',
78  rtl: true
79  });
80  }
81 
82  Ext.require(requires);
83 
84  Ext.onReady(function()
85  {
86  var toolbar ;
87  Ext.getBody().addCls(Ext.baseCSSPrefix + 'theme-' + Ext.themeName);
88 
89  // prevent touchmove from panning the viewport in mobile safari
90  if (Ext.supports.TouchEvents)
91  {
92  Ext.getDoc().on({
93  touchmove: function(e)
94  {
95  // If within a scroller, don't let the document use it
96  if (Ext.scroll.Scroller.isTouching)
97  {
98  e.preventDefault();
99  }
100  },
101  translate: false,
102  delegated: false
103  });
104  }
105 
106  if (hasOption('nocss3'))
107  {
108  Ext.supports.CSS3BorderRadius = false;
109  Ext.getBody().addCls('x-nbr x-nlg');
110  }
111 
112  if (hasOption('nlg'))
113  {
114  Ext.getBody().addCls('x-nlg');
115  }
116 
117  function setParam(param)
118  {
119  var queryString = Ext.Object.toQueryString(Ext.apply(Ext.Object.fromQueryString(location.search), param));
120  console.log("queryString: "+queryString) ;
121  location.search = queryString;
122  console.log("Done ") ;
123  }
124 
125  function removeParam(paramName)
126  {
127  var params = Ext.Object.fromQueryString(location.search);
128  delete params[paramName];
129  location.search = Ext.Object.toQueryString(params);
130  }
131 
132  if (hasOption('no-toolbar') || /no-toolbar/.test(document.cookie))
133  {
134  return;
135  }
136 
137  setTimeout(function()
138  {
139  toolbar = Ext.widget(
140  {
141  xtype : 'toolbar' ,
142  border : true ,
143  height : 25 ,
144  rtl : false ,
145  id : 'options-toolbar' ,
146  floating : true ,
147  fixed : true ,
148  defaultAlign : Ext.optionsToolbarAlign || 'tr-tr' ,
149  alignOffset : [-(Ext.getScrollbarSize().width + 5), 0],
150  preventFocusOnActivate: true ,
151  draggable : {
152  constrain: true
153  },
154  defaults : { rtl : false },
155  items : [
156  {
157  xtype : 'combo',
158  width : comboWidth[Ext.themeName],
159  labelWidth : labelWidth[Ext.themeName],
160  fieldLabel : 'Theme' ,
161  displayField: 'name' ,
162  valueField : 'value' ,
163  labelStyle : 'cursor:move;' ,
164  margin : '0 5 0 0' ,
165  queryMode : 'local' ,
166  store : Ext.create(
167  'Ext.data.Store',
168  {
169  fields: ['value', 'name'],
170  data : [
171  {value: 'triton' , name: 'Triton' },
172  {value: 'neptune' , name: 'Neptune' },
173  {value: 'neptune-touch', name: 'Neptune Touch'},
174  {value: 'crisp' , name: 'Crisp' },
175  {value: 'crisp-touch' , name: 'Crisp Touch' },
176  {value: 'classic' , name: 'Classic' },
177  {value: 'gray' , name: 'Gray' },
178  {value: 'aria' , name: 'ARIA' }
179  ]
180  }
181  ),
182  value : theme,
183  listeners : {
184  select: function(combo)
185  {
186  var theme = combo.getValue();
187  console.log("Select") ;
188  if (theme !== defaultTheme)
189  {
190  setParam({ theme: theme });
191  } else {
192  removeParam('theme');
193  }
194  }
195  }
196  },
197  {
201  xtype : 'button',
202  hidden : !(Ext.devMode === 2 ||
203  location.href.indexOf('qa.sencha.com') !== -1),
204  enableToggle: true,
205  pressed : rtl,
206  text : 'RTL',
207  margin : '0 5 0 0',
208  listeners : {
209  toggle: function(btn, pressed)
210  {
211  if (pressed) {
212  setParam({ rtl: true });
213  } else {
214  removeParam('rtl');
215  }
216  }
217  }
218  },
219  {
220  xtype : 'tool',
221  type : 'close',
222  handler: function()
223  {
224  toolbar.destroy();
225  }
226  }
227  ]
228  }
229  );
230  toolbar.show();
231  },
232  100
233  );
234  });
235 })();