rsence-pre 2.2.0.38 → 2.2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/INSTALL.rdoc +1 -1
  2. data/VERSION +1 -1
  3. data/conf/default_conf.yaml +0 -4
  4. data/conf/rsence_command_strings.yaml +1 -1
  5. data/js/comm/queue/queue.js +17 -8
  6. data/js/comm/transporter/transporter.js +117 -93
  7. data/js/comm/values/values.js +2 -2
  8. data/js/controls/button/themes/bright/button_parts1.png +0 -0
  9. data/js/controls/button/themes/default/button_parts1.png +0 -0
  10. data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
  11. data/js/controls/dialogs/sheet/sheet.js +1 -1
  12. data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
  13. data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
  14. data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
  15. data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
  16. data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
  17. data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
  18. data/js/controls/searchfield/themes/default/searchfield.css +3 -3
  19. data/js/controls/searchfield/themes/default/searchfield_parts1.png +0 -0
  20. data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
  21. data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
  22. data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
  23. data/js/controls/tab/tab.js +4 -3
  24. data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
  25. data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
  26. data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
  27. data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
  28. data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
  29. data/js/controls/tab/themes/default/tab_parts1.png +0 -0
  30. data/js/controls/textcontrol/textcontrol.js +3 -1
  31. data/js/controls/textcontrol/themes/default/textcontrol.css +1 -1
  32. data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
  33. data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
  34. data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
  35. data/js/controls/validatorview/themes/default/validator.png +0 -0
  36. data/js/controls/window/themes/default/window.css +66 -54
  37. data/js/controls/window/themes/default/window.html +6 -2
  38. data/js/controls/window/themes/default/window_bg_active.png +0 -0
  39. data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
  40. data/js/controls/window/themes/default/window_buttons.png +0 -0
  41. data/js/controls/window/themes/default/window_parts1.png +0 -0
  42. data/js/controls/window/themes/default/window_parts2.png +0 -0
  43. data/js/controls/window/window.js +167 -40
  44. data/js/core/class/class.js +10 -0
  45. data/js/core/elem/elem.coffee +54 -27
  46. data/js/core/event/event.js +2 -2
  47. data/js/datetime/calendar/calendar.coffee +24 -8
  48. data/js/datetime/calendar/themes/default/calendar.html +2 -2
  49. data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  50. data/js/datetime/calendar/themes/default/calendar_bg.png +0 -0
  51. data/js/datetime/calendar/themes/default/calendar_parts1.png +0 -0
  52. data/js/datetime/calendar/themes/default/calendar_parts2.png +0 -0
  53. data/js/datetime/timesheet_item/themes/default/timesheet_item_icons.png +0 -0
  54. data/js/datetime/timesheet_item/timesheet_item.js +1 -1
  55. data/js/foundation/application/application.js +28 -7
  56. data/js/foundation/control/eventresponder/eventresponder.js +7 -4
  57. data/js/foundation/eventmanager/eventmanager.js +28 -3
  58. data/js/foundation/geom/rect/rect.js +83 -46
  59. data/js/foundation/json_renderer/json_renderer.js +5 -5
  60. data/js/foundation/thememanager/thememanager.js +3 -0
  61. data/js/foundation/view/markupview/markupview.js +13 -13
  62. data/js/foundation/view/view.js +209 -56
  63. data/js/lists/propertylist/propertylist.js +33 -31
  64. data/js/menus/minimenu/minimenu.js +23 -6
  65. data/js/menus/minimenu/themes/default/minimenu.png +0 -0
  66. data/js/menus/minimenuitem/minimenuitem.js +11 -1
  67. data/js/menus/minimenuitem/themes/default/minimenuitem_checkmark.png +0 -0
  68. data/js/menus/popupmenu/themes/default/popupmenu.png +0 -0
  69. data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
  70. data/lib/rsence/argv/startup_argv.rb +1 -1
  71. data/lib/rsence/daemon.rb +2 -2
  72. data/lib/rsence/default_config.rb +2 -2
  73. data/lib/rsence/http/broker.rb +2 -4
  74. data/lib/rsence/msg.rb +1 -0
  75. data/lib/rsence/plugins/plugin.rb +11 -4
  76. data/lib/rsence/sessionmanager.rb +99 -37
  77. data/lib/rsence/sessionstorage.rb +29 -15
  78. data/lib/rsence/transporter.rb +3 -5
  79. data/plugins/client_pkg/client_pkg.rb +7 -8
  80. data/plugins/client_pkg/lib/client_pkg_build.rb +212 -95
  81. data/plugins/client_pkg/lib/client_pkg_cache.rb +1 -1
  82. data/plugins/main/main.rb +5 -1
  83. data/plugins/ticket/ticket.rb +9 -1
  84. metadata +72 -66
data/INSTALL.rdoc CHANGED
@@ -132,7 +132,7 @@ This not only enables SessionStorage (persistent sessions between RSence restart
132
132
  * *json*[http://flori.github.com/json]:: Library for bi-directional JSON[http://json.org] conversion.
133
133
  * *yaml*[http://yaml4r.sourceforge.net/doc]:: Library for handling YAML[http://www.yaml.org] files
134
134
  * *randgen*:: C-optimized random string generator developed for RSence specifically
135
- * *jsmin_c*:: C-optimized Javascript whitespace removal library; Ruby wrapper developed for RSence specifically; based on the original JSMin[http://www.crockford.com/javascript/jsmin.html]
135
+ * *jsminc*:: C-optimized Javascript whitespace removal library; Ryan Fitzgerald's Ruby wrapper for Douglas Crockford's jsmin.c
136
136
  * *jscompress*:: C-optimized Javascript compression and obfuscation library developed for RSence specifically
137
137
  * *html_min*:: C-optimized HTML whitespace removal library developed for RSence specifically
138
138
  * *cssmin*:: CSS whitespace removal library
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.0.38.pre
1
+ 2.2.2.0.pre
@@ -154,10 +154,6 @@
154
154
  # Defaults to false, will be the default in a future version.
155
155
  :clone_cookie_sessions: true
156
156
  #
157
- # This limits the amount of cloned targets of a source session.
158
- # NOTE: This has no effect yet, the code is not implemented.
159
- :max_cloned_sessions: 10
160
- #
161
157
  # This option overrides the default session timeout.
162
158
  # Don't set this to less than the expected poll interval,
163
159
  # otherwise the session might expire before the previous
@@ -39,7 +39,7 @@
39
39
  :plugin_directory_not_a_directory: |
40
40
  Plugin directory not a directory, expected:
41
41
  <%%= plugin_path.inspect %>
42
- :warn_no_plugin_directory_in_project: |
42
+ :warn_no_directory_creating: |
43
43
  Warning! No <%%= dir_name %> directory in project, creating:
44
44
  <%%= dir_path.inspect %>
45
45
  :invalid_environment: |
@@ -72,6 +72,22 @@ COMM.Queue = HApplication.extend({
72
72
  JS_EXEC_FAIL: 'Failed to execute the Javascript function: ',
73
73
  REASON: ' Reason:'
74
74
  },
75
+
76
+ /** Basic queue item exception reporter. Override with your own, if needed.
77
+ **/
78
+ clientException: function( _exception, _item ){
79
+ var
80
+ _strs = this.STRINGS,
81
+ _errorText = [
82
+ _strs.ERR_PREFIX,
83
+ _strs.JS_EXEC_FAIL,
84
+ _exception.name+'->'+_exception.message,
85
+ _strs.REASON,
86
+ _exception
87
+ ].join('');
88
+ console.log( _errorText );
89
+ return _errorText;
90
+ },
75
91
 
76
92
  /** = Description
77
93
  * Flushes the queue until stopped.
@@ -112,14 +128,7 @@ COMM.Queue = HApplication.extend({
112
128
 
113
129
  // Displays an error message in the Javascript console, if failure.
114
130
  catch(e){
115
- var _strs = this.STRINGS;
116
- console.log([
117
- _strs.ERR_PREFIX,
118
- _strs.JS_EXEC_FAIL,
119
- _item,
120
- _strs.REASON,
121
- e
122
- ].join(''));
131
+ this.clientException( e, _item );
123
132
  }
124
133
  }
125
134
  },
@@ -116,7 +116,7 @@ COMM.Transporter = HApplication.extend({
116
116
  _valueId = _values['del'][i];
117
117
  _valueManager.del( _valueId );
118
118
  }
119
- }
119
+ }
120
120
  },
121
121
 
122
122
  /** = Description
@@ -138,13 +138,15 @@ COMM.Transporter = HApplication.extend({
138
138
  _this.failure(resp);
139
139
  return;
140
140
  }
141
- var _responseArray = _this.parseResponseArray(resp.X.responseText),
142
- i = 2,
143
- _responseArrayLen = _responseArray.length,
144
- _sesKey = _responseArray[0],
145
- _values = _responseArray[1],
146
- _session = COMM.Session,
147
- _queue = COMM.Queue;
141
+ var
142
+ _responseArray = _this.parseResponseArray(resp.X.responseText),
143
+ i = 2,
144
+ _responseArrayLen = _responseArray.length,
145
+ _sesKey = _responseArray[0],
146
+ _values = _responseArray[1],
147
+ _session = COMM.Session,
148
+ _queue = COMM.Queue,
149
+ _errorText;
148
150
  if(_sesKey === ''){
149
151
  console.log('Invalid session, error message should follow...');
150
152
  }
@@ -157,11 +159,10 @@ COMM.Transporter = HApplication.extend({
157
159
  _queue.pushEval( _responseArray[i] );
158
160
  }
159
161
  catch(e) {
160
- console.log( 'clientError:'+e+" - "+e.description+' - '+_responseArray[i]);
161
- _this._clientEvalError = e+" - "+e.description+' - '+_responseArray[i];
162
+ _this._clientEvalError = _queue.clientException( e, _responseArray[i] );
162
163
  }
163
164
  }
164
- if(_this._serverInterruptView){
165
+ if(_this._serverInterruptView && _sesKey !== '' ){
165
166
  _this._serverInterruptView.die();
166
167
  _this._serverInterruptView = false;
167
168
  }
@@ -187,6 +188,110 @@ COMM.Transporter = HApplication.extend({
187
188
  _queue.push(function(){jsLoader.load('servermessage');});
188
189
  _queue.push(function(){ReloadApp.nu(_title,_message);});
189
190
  },
191
+
192
+ setInterruptAnim: function(_customMessage,_customColor){
193
+ var _this = COMM.Transporter;
194
+ if(!_this._serverInterruptView){
195
+ _this._serverInterruptView = HView.extend({
196
+ _setCustomMessage: function(_text){
197
+ ELEM.setHTML(this._messageDiv,_text);
198
+ },
199
+ _setCustomColor: function(_color){
200
+ this.setStyle('background-color',_color);
201
+ },
202
+ _setFailedResp: function(_resp){
203
+ if( _resp !== undefined && typeof _resp !== 'string' ){
204
+ this._failedResp = _resp;
205
+ }
206
+ this._errorIndex++;
207
+ return this;
208
+ },
209
+ _retry: function(){
210
+ this._retryIndex++;
211
+ var _resp = this._failedResp;
212
+ COMM.request(
213
+ _resp.url,
214
+ _resp.options
215
+ );
216
+ },
217
+ onIdle: function(){
218
+ var _currentDate = new Date().getTime();
219
+ this.bringToFront();
220
+ if( this._errorIndex > 0 &&
221
+ (this._retryIndex !== this._errorIndex) &&
222
+ (this._lastError + 2000 < _currentDate) &&
223
+ this._failedResp ){
224
+ this._lastError = _currentDate;
225
+ this._retry();
226
+ }
227
+ this.base();
228
+ },
229
+ _errorIndex: 0,
230
+ _retryIndex: 0,
231
+ _lastError: new Date().getTime(),
232
+ die: function(){
233
+ var _app = this.app;
234
+ HSystem.reniceApp(_app.appId,this._origPriority);
235
+ this.base();
236
+ _app.sync();
237
+ },
238
+ drawSubviews: function(){
239
+ var _style = [
240
+ ['padding-left', '8px'],
241
+ ['background-color', '#600'],
242
+ ['text-align','center'],
243
+ ['color', '#fff'],
244
+ ['font-size', '16px'],
245
+ ['opacity', 0.85]
246
+ ], i = 0;
247
+ for( ; i<_style.length; i++ ){
248
+ this.setStyle( _style[i][0], _style[i][1] );
249
+ }
250
+ this._messageDiv = ELEM.make(this.elemId);
251
+ ELEM.setHTML(this._messageDiv,this.app.serverLostMessage);
252
+ this._origPriority = HSystem.appPriorities[this.appId];
253
+ if(HSystem.appPriorities[this.appId]<10){
254
+ HSystem.reniceApp(this.appId,10);
255
+ }
256
+ this._anim = HView.extend({
257
+ _animIndex: 0,
258
+ _anim: function(){
259
+ var _targetRect,
260
+ _width = ELEM.getSize(this.parent.elemId)[0];
261
+ this._animIndex++;
262
+ if(this._animIndex%2===0){
263
+ _targetRect = HRect.nu(0,0,80,20);
264
+ }
265
+ else {
266
+ _targetRect = HRect.nu(_width-80,0,_width,20);
267
+ }
268
+ this.animateTo(_targetRect,2000);
269
+ },
270
+ onAnimationEnd: function(){
271
+ if(this.drawn){
272
+ this._anim();
273
+ }
274
+ }
275
+ }
276
+ ).nu( [0,0,80,20], this ).setStyle('background-color','#fff').setStyle('opacity',0.8)._anim();
277
+ }
278
+ }).nu([0,0,200,20,0,null],_this);
279
+ if( typeof _customMessage !== 'string' ){
280
+ _this._serverInterruptView._setFailedResp(_customMessage);
281
+ }
282
+ }
283
+ if( _customMessage !== undefined ) {
284
+ if( typeof _customMessage === 'string' ){
285
+ _this._serverInterruptView._setCustomMessage(_customMessage);
286
+ }
287
+ }
288
+ if( !_this.stop ){
289
+ _this._serverInterruptView._setFailedResp();
290
+ }
291
+ if( _customColor !== undefined ){
292
+ _this._serverInterruptView._setCustomColor(_customColor);
293
+ }
294
+ },
190
295
 
191
296
  /** Called by the XMLHttpRequest, when there was a failure in communication.
192
297
  **/
@@ -195,88 +300,7 @@ COMM.Transporter = HApplication.extend({
195
300
  // server didn't respond, likely network issue.. retry.
196
301
  if(_resp.X.status===0){
197
302
  console.log(_this.serverLostMessage);
198
- if(!_this._serverInterruptView){
199
- _this._serverInterruptView = HView.extend({
200
- _setFailedResp: function(_resp){
201
- if(_resp!==undefined){
202
- this._failedResp = _resp;
203
- }
204
- this._errorIndex++;
205
- return this;
206
- },
207
- _retry: function(){
208
- this._retryIndex++;
209
- var _resp = this._failedResp;
210
- COMM.request(
211
- _resp.url,
212
- _resp.options
213
- );
214
- },
215
- onIdle: function(){
216
- var _currentDate = new Date().getTime();
217
- this.bringToFront();
218
- if( this._errorIndex > 0 &&
219
- (this._retryIndex !== this._errorIndex) &&
220
- (this._lastError + 2000 < _currentDate) &&
221
- this._failedResp ){
222
- this._lastError = _currentDate;
223
- this._retry();
224
- }
225
- this.base();
226
- },
227
- _errorIndex: 0,
228
- _retryIndex: 0,
229
- _lastError: new Date().getTime(),
230
- die: function(){
231
- var _app = this.app;
232
- HSystem.reniceApp(_app.appId,this._origPriority);
233
- this.base();
234
- _app.sync();
235
- },
236
- drawSubviews: function(){
237
- var _style = [
238
- ['padding-left', '8px'],
239
- ['background-color', '#600'],
240
- ['text-align','center'],
241
- ['color', '#fff'],
242
- ['font-size', '16px'],
243
- ['opacity', 0.85]
244
- ], i = 0;
245
- for( ; i<_style.length; i++ ){
246
- this.setStyle( _style[i][0], _style[i][1] );
247
- }
248
- this.setHTML(this.app.serverLostMessage);
249
- this._origPriority = HSystem.appPriorities[this.appId];
250
- if(HSystem.appPriorities[this.appId]<10){
251
- HSystem.reniceApp(this.appId,10);
252
- }
253
- this._anim = HView.extend({
254
- _animIndex: 0,
255
- _anim: function(){
256
- var _targetRect,
257
- _width = ELEM.getSize(this.parent.elemId)[0];
258
- this._animIndex++;
259
- if(this._animIndex%2===0){
260
- _targetRect = HRect.nu(0,0,80,20);
261
- }
262
- else {
263
- _targetRect = HRect.nu(_width-80,0,_width,20);
264
- }
265
- this.animateTo(_targetRect,2000);
266
- },
267
- onAnimationEnd: function(){
268
- if(this.drawn){
269
- this._anim();
270
- }
271
- }
272
- }
273
- ).nu( [0,0,80,20], this ).setStyle('background-color','#fff').setStyle('opacity',0.8)._anim();
274
- }
275
- }).nu([0,0,200,20,0,null],_this)._setFailedResp(_resp);
276
- }
277
- else {
278
- _this._serverInterruptView._setFailedResp();
279
- }
303
+ _this.setInterruptAnim(_resp);
280
304
  }
281
305
  else {
282
306
  _this.failMessage('Transporter Error','Transporter was unable to complete the synchronization request.');
@@ -66,7 +66,7 @@ COMM.Values = HClass.extend({
66
66
  },
67
67
 
68
68
  /** = Description
69
- * Sets and decodes the +_data+. Main value setter interface
69
+ * Sets and decodes the +_data+. Main value setter interface
70
70
  * for the server representation of +HValue+.
71
71
  *
72
72
  * = Parameters
@@ -328,7 +328,7 @@ COMM.Values = HClass.extend({
328
328
  }
329
329
  catch(e){
330
330
  console.log('invalid json:',_obj);
331
- return "{}"
331
+ return "{}";
332
332
  }
333
333
  },
334
334
 
@@ -68,7 +68,7 @@ HSheet = HControl.extend({
68
68
  'min-width', _width+'px',
69
69
  'min-height', _height+'px'
70
70
  ],
71
- i = 0, _len;;
71
+ i = 0, _len;
72
72
  for( _len = _styles.length; i < _len; i+=2 ){
73
73
  ELEM.setStyle( _elemId, _styles[i], _styles[i+1] );
74
74
  }
@@ -8,12 +8,12 @@
8
8
  background-color: transparent;
9
9
  vertical-align: middle;
10
10
  border: 0px;
11
- left: 18px; top: 4px;
11
+ left: 18px; top: 0px;
12
12
  line-height: 18px;
13
13
  text-overflow: ellipsis;
14
14
  white-space: nowrap;
15
15
  overflow: hidden;
16
- #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.opera)?'padding-left:2px;width:100% !important;height:90% !important;':BROWSER_TYPE.ie6?'right:3px;height:16px;':'padding:2px;padding-top:4px;right:3px;height:16px;width:auto;'}
16
+ #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.opera)?'padding-left:2px;width:85% !important;height:90% !important;':BROWSER_TYPE.ie6?'right:3px;height:16px;':'padding:2px;padding-top:4px;right:3px;height:22px;width:auto;'}
17
17
  }
18
18
 
19
19
  .default .searchfield_input:focus {
@@ -27,7 +27,7 @@
27
27
 
28
28
  .default .searchfield_input_parent {
29
29
  position: absolute;
30
- #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.opera)?'left:0;padding-left:1px;top:0;right:4px;bottom:0;':BROWSER_TYPE.ie6?'left:2px;top:1px;right:1px;height:20px;':'left:-2px;top:-2px;right:-2px;height:20px;'}
30
+ #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.opera)?'left:0;padding-left:1px;top:0;right:4px;bottom:0;':BROWSER_TYPE.ie6?'left:2px;top:1px;right:1px;height:20px;':'left:-2px;top:-2px;right:-2px;height:24px;'}
31
31
  }
32
32
 
33
33
  .default .searchfield_fade,
@@ -120,14 +120,14 @@ HTab = HControl.extend({
120
120
  if(this.selectIdx!==-1){
121
121
  var _tabSelectElemId = this.tabLabels[this.selectIdx],
122
122
  _tabSelectViewId = this.tabs[this.selectIdx];
123
- ELEM.removeClassName(_tabSelectElemId,'item-fg');
123
+ ELEM.delClassName(_tabSelectElemId,'item-fg');
124
124
  ELEM.addClassName(_tabSelectElemId,'item-bg');
125
125
  HSystem.views[_tabSelectViewId].hide();
126
126
  }
127
127
  if(_tabIdx!==-1){
128
128
  var _tabLabelElemId = this.tabLabels[_tabIdx],
129
129
  _tabViewId = this.tabs[_tabIdx];
130
- ELEM.removeClassName(_tabLabelElemId,'item-bg');
130
+ ELEM.delClassName(_tabLabelElemId,'item-bg');
131
131
  ELEM.addClassName(_tabLabelElemId,'item-fg');
132
132
  HSystem.views[_tabViewId].show();
133
133
  }
@@ -174,7 +174,8 @@ HTab = HControl.extend({
174
174
  ELEM.setAttr(_tabLabelElemId,'href','javascript:HSystem.views['+this.viewId+'].selectTab('+_tabIdx+');');
175
175
  }
176
176
  else if (this.tabTriggerLink && !(BROWSER_TYPE.ie7 || BROWSER_TYPE.ie6)){
177
- ELEM.setAttr(_tabLabelElemId,'onclick','HSystem.views['+this.viewId+'].selectTab('+_tabIdx+');');
177
+ var _this = this;
178
+ Event.observe( ELEM.get(_tabLabelElemId), 'click', function(){ _this.selectTab(_tabIdx); } );
178
179
  }
179
180
  else {
180
181
  this.tabTriggerLink = false;
@@ -29,6 +29,7 @@ HTextControl = HControl.extend({
29
29
  controlDefaults: (HControlDefaults.extend({
30
30
  refreshOnBlur: true,
31
31
  refreshOnInput: true,
32
+ refreshOnIdle: true,
32
33
  focusOnCreate: false
33
34
  })),
34
35
 
@@ -158,7 +159,8 @@ HTextControl = HControl.extend({
158
159
  return true;
159
160
  },
160
161
 
161
- onIdle: function(){
162
+ idle: function(){
163
+ if( !this.options.refreshOnIdle ){ return; }
162
164
  this.hasTextFocus && this._updateValueFromField();
163
165
  try{
164
166
  this.base();
@@ -9,7 +9,7 @@
9
9
  vertical-align: middle;
10
10
  border: 0px;
11
11
  left: 0px; top: 0px;
12
- #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.opera)?'padding-left:2px;width:100% !important;height:90% !important;':BROWSER_TYPE.ie6?'right:4px;bottom:2px;':'padding:2px;right:0px;bottom:0px;width:auto;height:auto;'}
12
+ #{(BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.opera)?'padding-left:2px;width:100% !important;height:90% !important;':BROWSER_TYPE.ie6?'right:4px;bottom:2px;':'padding:2px;right:0px;bottom:0px;width:auto;height:auto;'}
13
13
  }
14
14
 
15
15
  .default .textcontrol_input:focus {