rsence 2.0.0.pre → 2.0.0.1.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. data/INSTALL.rdoc +295 -0
  2. data/LICENSE +622 -0
  3. data/README.rdoc +87 -0
  4. data/VERSION +1 -0
  5. data/bin/rsence +5 -101
  6. data/conf/config.yaml +4 -0
  7. data/conf/default_conf.yaml +6 -4
  8. data/conf/{local_conf.yaml → local_conf.yaml.devel} +2 -1
  9. data/js/comm/comm/autosync/autosync.js +0 -1
  10. data/js/comm/comm/queue/queue.js +1 -1
  11. data/js/comm/comm/urlresponder/urlresponder.js +58 -35
  12. data/js/comm/comm/values/values.js +13 -3
  13. data/js/comm/jsloader/jsloader.js +29 -12
  14. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  15. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  16. data/js/controls/datetime/timesheet/timesheet.js +2 -2
  17. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  18. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  19. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  20. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  21. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +1 -1
  22. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  23. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  24. data/js/controls/sliders/slider/themes/default/slider.css +2 -0
  25. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  26. data/js/controls/sliders/vslider/themes/default/vslider.css +2 -0
  27. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  28. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  29. data/js/controls/tab/tab.js +2 -6
  30. data/js/controls/tab/themes/default/tab.css +1 -0
  31. data/js/controls/tab/themes/default/tab.html +1 -1
  32. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  33. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  34. data/js/controls/textarea/themes/default/textarea.css +21 -0
  35. data/js/controls/textarea/themes/default/textarea.html +2 -2
  36. data/js/controls/textcontrol/textcontrol.js +56 -69
  37. data/js/controls/textcontrol/themes/default/textcontrol.css +23 -20
  38. data/js/controls/textcontrol/themes/default/textcontrol.html +1 -1
  39. data/js/controls/window/themes/default/window.css +1 -0
  40. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  41. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  42. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  43. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  44. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  45. data/js/controls/window/window.js +28 -7
  46. data/js/core/class/class.js +31 -30
  47. data/js/core/elem/elem.js +94 -71
  48. data/js/core/event/event.js +34 -26
  49. data/js/core/iefix/iefix.js +46 -31
  50. data/js/debugg/debugg.js +43 -0
  51. data/js/debugg/js.inc +0 -0
  52. data/js/foundation/application/application.js +3 -1
  53. data/js/foundation/control/dyncontrol/dyncontrol.js +1 -0
  54. data/js/foundation/control/eventresponder/eventresponder.js +1 -1
  55. data/js/foundation/json_renderer/json_renderer.js +1 -3
  56. data/js/foundation/system/system.js +4 -4
  57. data/js/foundation/thememanager/thememanager.js +3 -3
  58. data/js/foundation/view/view.js +71 -1
  59. data/lib/conf/argv.rb +664 -0
  60. data/lib/conf/default.rb +51 -52
  61. data/lib/daemon/daemon.rb +281 -195
  62. data/lib/plugins/plugin_plugins.rb +47 -0
  63. data/lib/plugins/pluginmanager.rb +17 -12
  64. data/lib/transporter/transporter.rb +6 -9
  65. data/plugins/client_pkg/client_pkg.rb +12 -9
  66. data/plugins/client_pkg/lib/client_pkg_build.rb +1 -1
  67. data/plugins/index_html/tmpl/index.html +3 -3
  68. data/plugins/main/main.rb +1 -0
  69. metadata +16 -14
  70. data/bin/build_client.rb +0 -254
  71. data/bin/help +0 -6
  72. data/bin/launch.rb +0 -120
  73. data/bin/rdoc.sh +0 -2
  74. data/bin/restart +0 -6
  75. data/bin/run +0 -6
  76. data/bin/run.rb +0 -6
  77. data/bin/save +0 -6
  78. data/bin/start +0 -6
  79. data/bin/status +0 -6
  80. data/bin/stop +0 -6
@@ -46,7 +46,7 @@ Event = {
46
46
  **/
47
47
  isLeftClick: function(e) {
48
48
  // IE: left 1, middle 4, right 2
49
- if (ELEM._is_ie || ELEM._is_safari) {
49
+ if (BROWSER_TYPE.ie || BROWSER_TYPE.safari) {
50
50
  return (e.button === 1);
51
51
  }
52
52
  else {
@@ -141,7 +141,7 @@ Event = {
141
141
 
142
142
  // Activates the garbage collector of Internet Explorer
143
143
  // when the document is unloaded:
144
- if (ELEM._is_ie) {
144
+ if (BROWSER_TYPE.ie) {
145
145
  Event.observe(window, "unload", Event.unloadCache, false);
146
146
  }
147
147
 
@@ -262,24 +262,24 @@ EVENT = {
262
262
  /** Starts event listening.
263
263
  **/
264
264
  start: function() {
265
- var _globalEventTargetElement = ELEM._is_ie?document:window,
266
- _this = EVENT,
267
- _eventMap = [
268
- ['mousemove', _this.mouseMove],
269
- ['mouseup', _this.mouseUp],
270
- ['mousedown', _this.mouseDown],
271
- ['click', _this.click],
272
- ['keyup', _this.keyUp],
273
- ['keydown', _this.keyDown],
274
- ['keypress', _this.keyPress],
275
- ['contextmenu', _this.contextMenu],
276
- ['resize', _this.resize],
277
- ['mousewheel', _this.mouseWheel]
278
- ],
279
- i = 0;
280
- for (; i !== _eventMap.length; i++) {
281
- Event.observe(_globalEventTargetElement, _eventMap[i][0], _eventMap[i][1]);
282
- }
265
+ var _globalEventTargetElement = BROWSER_TYPE.ie?document:window,
266
+ _this = EVENT;
267
+ // _eventMap = [
268
+ Event.observe( _globalEventTargetElement, 'mousemove', _this.mouseMove );
269
+ Event.observe( _globalEventTargetElement, 'mouseup', _this.mouseUp );
270
+ Event.observe( _globalEventTargetElement, 'mousedown', _this.mouseDown );
271
+ Event.observe( _globalEventTargetElement, 'click', _this.click );
272
+ Event.observe( _globalEventTargetElement, 'keyup', _this.keyUp );
273
+ Event.observe( _globalEventTargetElement, 'keydown', _this.keyDown );
274
+ Event.observe( _globalEventTargetElement, 'keypress', _this.keyPress );
275
+ Event.observe( _globalEventTargetElement, 'contextmenu', _this.contextMenu );
276
+ Event.observe( _globalEventTargetElement, 'resize', _this.resize );
277
+ Event.observe( _globalEventTargetElement, 'mousewheel', _this.mouseWheel );
278
+ // ],
279
+ // i = 0;
280
+ // for (; i !== _eventMap.length; i++) {
281
+ // Event.observe(_globalEventTargetElement, _eventMap[i][0], _eventMap[i][1]);
282
+ // }
283
283
  if (window.addEventListener) {
284
284
  window.addEventListener('DOMMouseScroll', EVENT.mouseWheel, false);
285
285
  window.addEventListener('resize', EVENT.resize, false);
@@ -338,7 +338,7 @@ EVENT = {
338
338
  // Binds the class to the element (so it can be called on the event)
339
339
  _elemId = _ctrl.elemId;
340
340
  _elem = ELEM.get(_elemId);
341
- if (ELEM._is_ie) {
341
+ if (BROWSER_TYPE.ie) {
342
342
  _elem.setAttribute('ctrl', _ctrl);
343
343
  }
344
344
  else {
@@ -380,16 +380,24 @@ EVENT = {
380
380
  **/
381
381
  unreg: function(_ctrl) {
382
382
  var _this = EVENT,
383
- _elemId,
384
- _elem;
383
+ _elemId,
384
+ _elem;
385
385
  if (_ctrl === this.activeControl) {
386
386
  _this.changeActiveControl(null);
387
387
  }
388
388
  _elemId = _ctrl.elemId;
389
389
  _elem = ELEM.get(_elemId);
390
- this.listeners[_elemId] = false;
391
- this.focused[_elemId] = false;
392
- this._coordCache[_elemId] = null;
390
+
391
+ _this._coordCache[_elemId] = null;
392
+
393
+ _this.listeners[_elemId] = false;
394
+ _this.focused[_elemId] = false;
395
+ _this.focusOptions[_elemId] = { ctrl: _ctrl };
396
+ var _coordListenIdx = _this.coordListeners.indexOf(_elemId);
397
+ if (_coordListenIdx !== -1) {
398
+ _this.coordListeners.splice(_coordListenIdx, 1);
399
+ }
400
+
393
401
  var _textEnterIndex = _this.textEnterCtrls.indexOf(_ctrl.viewId);
394
402
  if (_textEnterIndex !== -1) {
395
403
  _this.textEnterCtrls.splice(_textEnterIndex, 1);
@@ -41,13 +41,17 @@ iefix = {
41
41
  // finds the next parent with fixed or absolute positioning:
42
42
  // NOTICE: .init() makes ._layoutHeight() from this by replacing width with height
43
43
  layoutWidth: function(_element) {
44
- var _this=iefix,_parent,i=0,
44
+ var _this=iefix,
45
+ _parent,
46
+ i=0,
45
47
  // gets the parent from which the width is calculated
46
48
  _layoutParent=_element.offsetParent;
47
49
  while(_layoutParent&&!_this._hasLayout(_layoutParent)){
48
50
  _layoutParent=_layoutParent.offsetParent;
49
51
  }
50
- if(!_layoutParent._resizewidthElements){_layoutParent._resizewidthElements=[];}
52
+ if(!_layoutParent._resizewidthElements){
53
+ _layoutParent._resizewidthElements=[];
54
+ }
51
55
  if(!_element._addedResizewidthFix){
52
56
  _layoutParent._resizewidthElements.push(_element);
53
57
  _parent=_layoutParent;
@@ -71,11 +75,11 @@ iefix = {
71
75
  return (_layoutParent||document.documentElement).clientWidth;
72
76
  },
73
77
 
74
- // calculates the border width of the _element:
75
- // NOTICE: .init() makes ._getBorderHeight() from this by replacing Width with Height
76
- getBorderWidth: function(_element){
77
- return _element.offsetWidth-_element.clientWidth;
78
- },
78
+ // // calculates the border width of the _element:
79
+ // // NOTICE: .init() makes ._getBorderHeight() from this by replacing Width with Height
80
+ // getBorderWidth: function(_element){
81
+ // return _element.offsetWidth-_element.clientWidth;
82
+ // },
79
83
 
80
84
  // calculates the actual value in pixels from _value:
81
85
  getPixelValue: function(_element,_value) {
@@ -103,13 +107,13 @@ iefix = {
103
107
  return _this.getPixelValue(_element, _value);
104
108
  },
105
109
 
106
- // calculates padding width of the _element:
107
- // NOTICE: .init() makes .getPaddingHeight() from this by replacing Left/Right/Width with Top/Bottom/Height
108
- // NOTICE: .init() also makes ._getMarginWidth() and ._getMarginHeight from this.
109
- getPaddingWidth: function(_element) {
110
- var _this=iefix;
111
- return _this.getPixelWidth(_element,_element.currentStyle.paddingLeft)+_this.getPixelWidth(_element,_element.currentStyle.paddingRight);
112
- },
110
+ // // calculates padding width of the _element:
111
+ // // NOTICE: .init() makes .getPaddingHeight() from this by replacing Left/Right/Width with Top/Bottom/Height
112
+ // // NOTICE: .init() also makes ._getMarginWidth() and ._getMarginHeight from this.
113
+ // getPaddingWidth: function(_element) {
114
+ // var _this=iefix;
115
+ // return _this.getPixelWidth(_element,_element.currentStyle.paddingLeft)+_this.getPixelWidth(_element,_element.currentStyle.paddingRight);
116
+ // },
113
117
 
114
118
  // calculates element's position from the right edge of the parent:
115
119
  // NOTICE: .init() makes _resizeBottom() from this by replacing left/width with top/height
@@ -122,7 +126,8 @@ iefix = {
122
126
  if(parseInt(_element.runtimeStyle.width,10)===_width){return;}
123
127
  _element.runtimeStyle.width="";
124
128
  if(_element.offsetWidth<_width){
125
- _width-=_this.getBorderWidth(_element)+_this.getPaddingWidth(_element);
129
+ // Disabled, because no-one uses quirks mode anymore, right?
130
+ // _width-=_this.getBorderWidth(_element)+_this.getPaddingWidth(_element);
126
131
  if(_width<0){_width=0;}
127
132
  _element.runtimeStyle.width=_width;
128
133
  }
@@ -185,29 +190,39 @@ iefix = {
185
190
  }
186
191
  },
187
192
 
188
- _noStyleTagNames: ['PARAM'],
193
+ _noStyleTagNames: ['PARAM','HTML'],
189
194
  // applies fixes to the _element
190
195
  inlineStyleChanged: function(_element){
191
- var _this=iefix,_currentStyle;
192
- _currentStyle=_element.currentStyle;
193
- if(_this._noStyleTagNames.indexOf(_element.tagName)!==-1){ return; }
196
+ var _this=iefix,
197
+ _currentStyle=_element.currentStyle;
198
+ if(_this._noStyleTagNames.indexOf(_element.tagName)!==-1){
199
+ return;
200
+ }
194
201
  // check if element needs to be positioned from the right
195
202
  try{
196
- if((_currentStyle.position==="absolute"||_currentStyle.position==="fixed")&&_currentStyle.left!=="auto"&&_currentStyle.right!=="auto"&&_currentStyle.width==="auto"){
203
+ var _posMatch = (_currentStyle.position==="absolute"||_currentStyle.position==="fixed"),
204
+ _resizeWidth = _element._resizewidth,
205
+ _resizeHeight = _element._resizeheight,
206
+ _autoRight = _currentStyle.right==="auto",
207
+ _autoBottom = _currentStyle.bottom==="auto";
208
+ if(_resizeWidth||(_posMatch&&!_autoRight)){
197
209
  _this.resizeRight(_element);
198
210
  }
199
-
200
211
  // check if element needs to be positioned from the bottom
201
- if((_currentStyle.position==="absolute"||_currentStyle.position==="fixed")&&_currentStyle.top!=="auto"&&_currentStyle.bottom!=="auto"&&_currentStyle.height==="auto"){
212
+ if(_resizeHeight||(_posMatch&&!_autoBottom)){
202
213
  _this.resizeBottom(_element);
203
- // TODO: needs line height calculation here too for elements smaller than the line height or font size
214
+ if(parseInt(_element.height)>parseInt(_element.fontSize,10)){
215
+ // TODO: needs line height calculation here too for elements smaller than the line height or font size
216
+ _element.fontSize = _element.height;
217
+ _element.lineHeight = _element.height;
218
+ }
204
219
  }
205
220
 
206
221
  // check if opacity needs to be fixed:
207
222
  if(_element.currentStyle.opacity){_this.fixOpacity(_element);}
208
223
 
209
224
  } catch(e) {
210
- alert("iefix error! element:"+_element.tagName+" e:"+e.description);
225
+ console.log("iefix error! element:",_element);
211
226
  }
212
227
 
213
228
  // check if background image needs to be fixed:
@@ -228,7 +243,7 @@ iefix = {
228
243
  _traverseTree: function(_element){
229
244
  var _this=iefix;
230
245
  _this._traverseCount++;
231
- //window.status = 'traversecount: '+_this._traverseCount;
246
+ // console.log( 'traversecount: '+_this._traverseCount );
232
247
  _element=_element||document.documentElement;
233
248
  while(_element){
234
249
  if(_element.nodeType===1){
@@ -259,10 +274,10 @@ iefix = {
259
274
  //this.pngCheck = new RegExp("((\.gif)|(\.jpg))$", "i"); // needs more work
260
275
  // needed for png hack
261
276
  _this.blankGifPath=ie_htc_path+"0.gif";
262
- eval("_this.getMarginWidth="+String(_this.getPaddingWidth).replace(/padding/g,"margin"));
263
- eval("_this.getPaddingHeight="+String(_this.getPaddingWidth).replace(/Width/g,"Height").replace(/Left/g,"Top").replace(/Right/g,"Bottom"));
264
- eval("_this.getMarginHeight="+String(_this.getPaddingHeight).replace(/padding/g,"margin"));
265
- eval("_this.getBorderHeight="+String(_this.getBorderWidth).replace(/Width/g,"Height"));
277
+ // eval("_this.getMarginWidth="+String(_this.getPaddingWidth).replace(/padding/g,"margin"));
278
+ // eval("_this.getPaddingHeight="+String(_this.getPaddingWidth).replace(/Width/g,"Height").replace(/Left/g,"Top").replace(/Right/g,"Bottom"));
279
+ // eval("_this.getMarginHeight="+String(_this.getPaddingHeight).replace(/padding/g,"margin"));
280
+ // eval("_this.getBorderHeight="+String(_this.getBorderWidth).replace(/Width/g,"Height"));
266
281
  eval("_this.layoutHeight="+String(_this.layoutWidth).replace(/Width/g,"Height").replace(/width/g,"height").replace(/Right/g,"Bottom"));
267
282
  eval("_this.getPixelHeight="+String(_this.getPixelWidth).replace(/Width/g,"Height"));
268
283
  eval("_this.resizeBottom="+String(_this.resizeRight).replace(/Width/g,"Height").replace(/width/g,"height").replace(/left/g,"top").replace(/right/g,"bottom"));
@@ -277,7 +292,7 @@ iefix = {
277
292
  }
278
293
  },
279
294
 
280
- _traverseStyleProperties: ['width','height','left','top','right','bottom','display','position'],
295
+ _traverseStyleProperties: ['width','height','left','top','right','bottom','display','position','visibility'],
281
296
  //_traverseStyleProperties: ['right','bottom','width','height'],
282
297
 
283
298
  //_elemEntryCount: 0,
@@ -338,7 +353,7 @@ ie_fixes=function(){
338
353
  }
339
354
  };
340
355
  ie_fixes();
341
- window.onresize=function(){iefix.setWinSize();iefix._traverseTree();};
356
+ // window.onresize=function(){iefix.setWinSize();iefix._traverseTree();};
342
357
 
343
358
 
344
359
 
@@ -0,0 +1,43 @@
1
+ LOAD(function(){
2
+ debugg = HApplication.extend({
3
+ constructor: function(){
4
+ this.base(20,'Debugg');
5
+ this.view = HScrollView.extend({
6
+ onIdle: function(){
7
+ this.base();
8
+ this.bringToFront();
9
+ }
10
+ }).nu(
11
+ [0,720,null,400,0,null],
12
+ this
13
+ // , {
14
+ // // styles: [
15
+ // // ['background-color','#ccc']
16
+ // // ]
17
+ // }
18
+ );
19
+ this.debugHtml = '';
20
+ },
21
+ log: function(){
22
+ if(arguments.length === 1){
23
+ this.debugHtml += '<br>'+this.view.escapeHTML(arguments[0]);
24
+ }
25
+ else {
26
+ this.debugHtml += '<br>'+this.view.escapeHTML(COMM.Values.encode(arguments));
27
+ }
28
+ this.view.setHTML(this.debugHtml);
29
+ },
30
+ obj_log: function(_obj){
31
+ var _html = '{<br>';
32
+ for(var o in _obj){
33
+ _html += o+': '+_obj[o]+'<br>';
34
+ }
35
+ _html += '}';
36
+ this.log(_html);
37
+ }
38
+ }).nu();
39
+ if(window['console'] === undefined){
40
+ console = debugg;
41
+ }
42
+ debugg.log('Debugg start.');
43
+ });
data/js/debugg/js.inc ADDED
File without changes
@@ -35,6 +35,8 @@ HApplication = HClass.extend({
35
35
 
36
36
  componentBehaviour: ['app'],
37
37
 
38
+ elemId: 0,
39
+
38
40
  /** = Description
39
41
  *
40
42
  * = Parameters
@@ -204,4 +206,4 @@ HApplication = HClass.extend({
204
206
  /* Your code here */
205
207
  }
206
208
  });
207
-
209
+ HApplication.implement(HValueResponder.nu());
@@ -488,6 +488,7 @@ HDynControl = HControl.extend({
488
488
  }
489
489
  this.setStyle('cursor','default');
490
490
  this._initActionFlag();
491
+ EVENT.resize(); // Triggers the window resize event (automatic event for the browser's window).
491
492
  return true; // prevents text selection
492
493
  }
493
494
  });
@@ -207,7 +207,7 @@ HEventResponder = HClass.extend({
207
207
  EVENT.reg(_this, _this.events);
208
208
  }
209
209
  else {
210
- EVENT.unreg(this);
210
+ EVENT.unreg(_this);
211
211
  }
212
212
 
213
213
  // Toggle the CSS class: enabled/disabled
@@ -48,7 +48,6 @@ COMM.JSONRenderer = HClass.extend({
48
48
  this.view = this.renderNode( this.data, this.parent );
49
49
  },
50
50
  defineInScope: function( _definition ){
51
- console.log('definedInScope(',_definition,')');
52
51
  var _isArr = (_definition instanceof Array),
53
52
  _isObj = (_definition instanceof Object);
54
53
  if( _isArr || !_isObj ){
@@ -132,7 +131,7 @@ COMM.JSONRenderer = HClass.extend({
132
131
  // Currently only HView -derived classes are supported, so
133
132
  // the rect is mandatory.
134
133
  _rect = _dataNode['rect'],
135
- _hasRect = (_rect !== undefined) && (_rect instanceof Array),
134
+ _hasRect = (_rect !== undefined) && (_rect instanceof Array || typeof _rect === 'string'),
136
135
 
137
136
  // Checks, if any sub-views are defined.
138
137
  _hasSubviews = _dataNode['subviews'] !== undefined,
@@ -157,7 +156,6 @@ COMM.JSONRenderer = HClass.extend({
157
156
 
158
157
  _subView;
159
158
  // console.log('className:',_className,' class:',_class);
160
-
161
159
  this.scopeDepth ++;
162
160
  this.scopes.push({});
163
161
  try{
@@ -16,7 +16,7 @@
16
16
  ** so there is no real need to access +HSystem+ directly from user-level code.
17
17
  **
18
18
  ***/
19
- HSystem = HClass.extend({
19
+ HSystem = {
20
20
 
21
21
  /** When the focus behaviour is 1, clicking on any subview brings
22
22
  * the window to front, if attached to a HWindow instance.
@@ -27,7 +27,7 @@ HSystem = HClass.extend({
27
27
  windowFocusBehaviour: 1,
28
28
 
29
29
  /** Singleton class; has no constructor **/
30
- constructor: null,
30
+ // constructor: null,
31
31
 
32
32
  /** An array of HApplication instances, index is the appId **/
33
33
  apps: [],
@@ -357,9 +357,9 @@ HSystem = HClass.extend({
357
357
  }
358
358
  }
359
359
  }
360
-
360
+ };
361
361
 
362
- });
362
+ // });
363
363
 
364
364
  // Starts the ticking, when the document is loaded:
365
365
  LOAD(
@@ -132,7 +132,7 @@ HThemeManager = HClass.extend({
132
132
  **/
133
133
  getCssFilePath: function( _fileName ){
134
134
  var _themeName = this._cssEvalParams[0];
135
- if((HThemeHasIE6GifsInsteadOfPng.indexOf(_themeName)!==-1) && ELEM._is_ie6){
135
+ if((HThemeHasIE6GifsInsteadOfPng.indexOf(_themeName)!==-1) && (BROWSER_TYPE.ie6 || BROWSER_TYPE.symbian) ){
136
136
  return "url('"+this._joinPath( this.getThemeGfxPath(), _fileName.replace('.png','-ie6.gif') )+"')";
137
137
  }
138
138
  else {
@@ -171,7 +171,7 @@ HThemeManager = HClass.extend({
171
171
 
172
172
  var _style, _styleSheet, _head;
173
173
 
174
- if(ELEM._is_ie) {
174
+ if(BROWSER_TYPE.ie) {
175
175
  // Internet Explorer (at least 6.x; check what 7.x does)
176
176
  _style = document.createStyleSheet();
177
177
  _style.cssText = _cssText;
@@ -331,7 +331,7 @@ HThemeManager = HClass.extend({
331
331
  return _url;
332
332
  },
333
333
  _componentGfxFile: function( _themeName, _componentName, _themePath, _fileName ){
334
- if((HThemeHasIE6GifsInsteadOfPng.indexOf(_themeName)!==-1) && ELEM._is_ie6){
334
+ if((HThemeHasIE6GifsInsteadOfPng.indexOf(_themeName)!==-1) && BROWSER_TYPE.ie6){
335
335
  return this._joinPath( this._componentGfxPath(_themeName, _componentName, _themePath), _fileName.replace('.png','-ie6.gif') );
336
336
  }
337
337
  return this._joinPath( this._componentGfxPath(_themeName, _componentName, _themePath), _fileName );
@@ -57,6 +57,10 @@ HView = HClass.extend({
57
57
  **/
58
58
  refreshOnLabelChange: true,
59
59
 
60
+ /** Escapes HTML in the label when true.
61
+ **/
62
+ escapeLabelHTML: false,
63
+
60
64
  /** True, if the coordinates are right-aligned.
61
65
  * False, if the coordinates are left-aligned.
62
66
  * Uses flexRightOffset if true. Defined with 6-item arrays
@@ -692,6 +696,7 @@ HView = HClass.extend({
692
696
  var _isDrawn = this.drawn;
693
697
  this.drawRect();
694
698
  if(!_isDrawn){
699
+ this.firstDraw();
695
700
  if(this['componentName']!==undefined){
696
701
  this.drawMarkup();
697
702
  }
@@ -707,6 +712,9 @@ HView = HClass.extend({
707
712
  this.setStyle(_styleKey,_styleValue);
708
713
  }
709
714
  }
715
+ if(this.options.html){
716
+ this.setHTML(this.options.html);
717
+ }
710
718
  if(!this.isHidden){
711
719
  this.show();
712
720
  }
@@ -715,6 +723,14 @@ HView = HClass.extend({
715
723
  return this;
716
724
  },
717
725
 
726
+ /** = Description
727
+ * Called once, before the layout of the view is initially drawn.
728
+ * Doesn't do anything by itself, but provides an extension point.
729
+ *
730
+ **/
731
+ firstDraw: function(){
732
+ },
733
+
718
734
  /** = Description
719
735
  * Called once, when the layout of the view is initially drawn.
720
736
  * Doesn't do anything by itself, but provides an extension point for making
@@ -791,6 +807,34 @@ HView = HClass.extend({
791
807
  return this;
792
808
  },
793
809
 
810
+ /** = Description
811
+ * Wrapper for setHTML, sets escaped html, if tags and such are present.
812
+ *
813
+ * = Parameters
814
+ * +_text+:: The text to set. If it contains any html, it's escaped.
815
+ *
816
+ * = Returns
817
+ * +self+
818
+ **/
819
+ setText: function( _text ) {
820
+ return this.setHTML( this.escapeHTML( _text ) );
821
+ },
822
+
823
+ /** = Description
824
+ * Method to escape HTML from text.
825
+ *
826
+ * Converts < to &lt; and > to &gt; and & to &amp;
827
+ *
828
+ * = Parameters
829
+ * +_html+:: The html to escape.
830
+ *
831
+ * = Returns
832
+ * A string with the html escaped.
833
+ **/
834
+ escapeHTML: function( _html ) {
835
+ return _html.replace(/&/gmi, '&amp;').replace(/>/gmi, '&gt;').replace(/</gmi, '&lt;');
836
+ },
837
+
794
838
  /** = Description
795
839
  *
796
840
  * This method should be extended in order to redraw only specific parts. The
@@ -815,7 +859,27 @@ HView = HClass.extend({
815
859
  }
816
860
  return this;
817
861
  },
818
-
862
+
863
+ /** Gets the size of the parent. If the parent is the document body, uses the browser window size.
864
+ **/
865
+ parentSize: function(){
866
+ if(this.parent.elemId === 0){
867
+ var _winSize = ELEM.windowSize();
868
+ return [ _winSize[0], _winSize[1] ];
869
+ }
870
+ else{
871
+ var _rect = this.parent.rect;
872
+ return [ _rect.width, _rect.height ];
873
+ }
874
+ },
875
+
876
+ /** Returns the maximum rect using the #parentSize.
877
+ **/
878
+ maxRect: function(){
879
+ var _parentSize = this.parentSize();
880
+ return [ 0, 0, _parentSize[0], _parentSize[1] ];
881
+ },
882
+
819
883
  /** = Description
820
884
  * Replaces the rect of the component with a new HRect instance and
821
885
  * then refreshes the display.
@@ -832,6 +896,9 @@ HView = HClass.extend({
832
896
  if (this.rect) {
833
897
  this.rect.release(this);
834
898
  }
899
+ if(typeof _rect === 'string'){
900
+ _rect = this[_rect]();
901
+ }
835
902
  if(_rect instanceof Array){
836
903
  var _arrLen = _rect.length,
837
904
  _throwPrefix = 'HView.setRect: If the HRect instance is replaced by an array, ';
@@ -1605,6 +1672,9 @@ HView = HClass.extend({
1605
1672
  *
1606
1673
  **/
1607
1674
  setLabel: function(_label) {
1675
+ if(this.escapeLabelHTML){
1676
+ _label = this.escapeHTML( _label );
1677
+ }
1608
1678
  var _this = this,
1609
1679
  _differs = (_label !== _this.label);
1610
1680
  if(_differs){