rsence-pre 3.0.0.9 → 3.0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/client/ext/Rakefile +18 -0
  4. data/client/js/controls/button/themes/default/button.html +1 -1
  5. data/client/js/controls/checkbox/checkbox.js +9 -4
  6. data/client/js/controls/checkbox/themes/default/checkbox.css +19 -29
  7. data/client/js/controls/checkbox/themes/default/checkbox.html +8 -6
  8. data/client/js/controls/dialogs/sheet/themes/default/sheet.css +25 -30
  9. data/client/js/controls/dialogs/sheet/themes/default/sheet.html +10 -10
  10. data/client/js/controls/numerictextcontrol/numerictextcontrol.coffee +7 -14
  11. data/client/js/controls/passwordcontrol/passwordcontrol.js +1 -5
  12. data/client/js/controls/radiobutton/themes/default/radiobutton.css +21 -31
  13. data/client/js/controls/radiobutton/themes/default/radiobutton.html +8 -6
  14. data/client/js/controls/searchfield/themes/default/searchfield.css +1 -1
  15. data/client/js/controls/sliders/slider/themes/default/slider.css +3 -3
  16. data/client/js/controls/sliders/vslider/themes/default/vslider.css +3 -3
  17. data/client/js/controls/stepper/themes/default/stepper.css +1 -1
  18. data/client/js/controls/stringview/stringview.js +9 -16
  19. data/client/js/controls/stringview/themes/default/stringview.css +10 -2
  20. data/client/js/controls/tab/themes/default/tab.css +3 -3
  21. data/client/js/controls/textarea/textarea.js +1 -3
  22. data/client/js/controls/textcontrol/textcontrol.coffee +173 -36
  23. data/client/js/controls/textcontrol/themes/default/textcontrol.css +64 -100
  24. data/client/js/controls/textcontrol/themes/default/textcontrol.html +14 -19
  25. data/client/js/controls/uploader/themes/default/uploader.css +1 -1
  26. data/client/js/controls/window/themes/default/window.css +8 -8
  27. data/client/js/core/elem/elem.coffee +6 -4
  28. data/client/js/core/event/event.js +6 -0
  29. data/client/js/datetime/datepicker/datepicker.coffee +7 -3
  30. data/client/js/foundation/eventmanager/eventmanager.coffee +9 -4
  31. data/client/js/foundation/thememanager/thememanager.coffee +8 -1
  32. data/client/js/foundation/view/view.js +19 -4
  33. data/client/js/menus/combobox/combobox.coffee +2 -2
  34. data/client/js/menus/menuitem/themes/default/menuitem.css +15 -27
  35. data/client/js/menus/menuitem/themes/default/menuitem.html +2 -4
  36. data/client/js/menus/minimenu/minimenu.js +11 -3
  37. data/client/js/menus/minimenu/themes/default/minimenu.css +23 -18
  38. data/client/js/menus/minimenu/themes/default/minimenu.html +6 -8
  39. data/client/js/menus/minimenuitem/minimenuitem.js +1 -1
  40. data/client/js/menus/minimenuitem/themes/default/minimenuitem.css +15 -27
  41. data/client/js/menus/minimenuitem/themes/default/minimenuitem.html +2 -4
  42. data/client/js/menus/popupmenu/themes/default/popupmenu.css +27 -19
  43. data/client/js/menus/popupmenu/themes/default/popupmenu.html +6 -8
  44. data/plugins/client_pkg/lib/client_pkg_build.rb +33 -4
  45. metadata +3 -7
  46. data/client/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
  47. data/client/js/controls/passwordcontrol/themes/default/passwordcontrol.html +0 -18
  48. data/client/js/controls/stringview/themes/default/stringview.html +0 -1
  49. data/client/js/controls/textarea/themes/default/textarea.css +0 -36
  50. data/client/js/controls/textarea/themes/default/textarea.html +0 -20
@@ -20,17 +20,21 @@ HTextControl = HControl.extend
20
20
  click: true
21
21
  contextMenu: true
22
22
 
23
+ multiline: false
23
24
  controlDefaults: HControlDefaults.extend
25
+ labelPadding: 2
24
26
  labelStyle:
25
27
  textIndent: 0
26
28
  fontSize: '10px'
29
+ lineHeight: '14px'
27
30
  color: '#666'
28
- labelWidth: 'auto'
31
+ labelWidth: 'auto'
29
32
  refreshAfter: 0.0 # amount of milliseconds to wait for a refresh from the input field
30
33
  refreshOnBlur: true
31
34
  refreshOnInput: true
32
- refreshOnIdle: true
35
+ refreshOnIdle: false
33
36
  focusOnCreate: false
37
+ unit: false # unit suffix
34
38
 
35
39
  ## This flag is true, when the text input field has focus.
36
40
  hasTextFocus: false
@@ -40,16 +44,17 @@ HTextControl = HControl.extend
40
44
  ###
41
45
  contextMenu: -> true
42
46
 
47
+ markupElemNames: ['value','invalid','label','subview','bg']
48
+
43
49
  ### = Description
44
50
  ## The refreshLabel method sets the title property of the text
45
51
  ## field, essentially creating a tooltip using the label.
46
52
  ###
53
+ labelPadding: 2
47
54
  refreshLabel: ->
48
55
  return unless @label
49
- if @markupElemIds? and @markupElemIds.label?
50
- @setAttrOfPart( 'label', 'title', @label )
51
- else
52
- return
56
+ return unless @markupElemIds? and @markupElemIds.label?
57
+ @setAttrOfPart( 'label', 'title', @label )
53
58
  if @_labelView?
54
59
  @_labelView.setLabel( @label )
55
60
  else
@@ -58,25 +63,94 @@ HTextControl = HControl.extend
58
63
  style: @options.labelStyle
59
64
  )
60
65
  if @options.labelWidth == 'auto'
61
- _labelWidth = @_labelView.stringWidth( @label, null, @_labelView.markupElemIds.value )+4
66
+ ELEM.flushElem([@_labelView.elemId])
67
+ _labelWidth = @_labelView.stringWidth( @label )
62
68
  else
63
69
  _labelWidth = @options.labelWidth
70
+ _labelWidth += @options.labelPadding || @labelPadding
64
71
  @_labelView.rect.setWidth( _labelWidth )
65
72
  @_labelView.drawRect()
66
- if @componentName == 'textarea'
73
+ if @multiline
67
74
  @setStyleOfPart('value','textIndent',_labelWidth+'px')
68
75
  else
69
76
  @setStyleOfPart('label','left',_labelWidth+'px')
70
77
 
71
- drawSubviews: ->
72
- ELEM.setStyle(@elemId,'overflow','visible')
78
+ _clearFocusBlurEvent: ->
79
+ _elemId = @markupElemIds.value
80
+ Event.stopObserving(_elemId,'focus',=>@textFocus())
81
+ Event.stopObserving(_elemId,'blur',=>@textBlur())
82
+
83
+ _invalidChar: '〰'
84
+ _setInvalidMarker: ->
85
+ _str = @getInputElement().value
86
+ _strLen = _str.length
87
+ if @fieldType == 'password'
88
+ _str = ''
89
+ for i in [1.._strLen]
90
+ _str += '•'
91
+ w = @stringWidth(_str,null,@markupElemIds.label,{
92
+ fontFamily: @styleOfPart('value','fontFamily')
93
+ fontSize: @styleOfPart('value','fontSize')
94
+ fontWeight: @styleOfPart('value','fontWeight')
95
+ whiteSpace: 'pre'
96
+ })
97
+ _invaCount = Math.ceil(w/@_invalidCharWidth)+1
98
+ _istr = ''
99
+ _align = @styleOfPart('value','textAlign')
100
+ @setStyleOfPart('invalid','textAlign',_align)
101
+ [ _left, _right ] = [
102
+ parseInt( @styleOfPart('value','left'), 10 ),
103
+ parseInt( @styleOfPart('value','right'), 10 )
104
+ ]
105
+ [ _pLeft, _pRight ] = [
106
+ parseInt( @styleOfPart('value','paddingLeft'), 10 ),
107
+ parseInt( @styleOfPart('value','paddingRight'), 10 )
108
+ ]
109
+ [ _mLeft, _mRight ] = [
110
+ parseInt( @styleOfPart('value','marginLeft'), 10 ),
111
+ parseInt( @styleOfPart('value','marginRight'), 10 )
112
+ ]
113
+ if _align == 'right'
114
+ @setStyleOfPart('invalid','left','auto')
115
+ @setStyleOfPart('invalid','right',(_right+_pRight)+'px')
116
+ else
117
+ @setStyleOfPart('invalid','right','auto')
118
+ @setStyleOfPart('invalid','left',(_left+_pLeft+_mLeft)+'px')
119
+ @setStyleOfPart('invalid','width',w+'px')
120
+ @setStyleOfPart('invalid','visibility','inherit')
121
+ _istr += @_invalidChar for [0.._invaCount]
122
+ @setMarkupOfPart('invalid',_istr)
123
+ _unsetInvalidMarker: ->
124
+ @setMarkupOfPart('invalid','')
125
+ @setStyleOfPart('invalid','visibility','hidden')
126
+
127
+ setValid: (_state)-> # true == valid, false == invalid
128
+ @_isValid = _state
129
+ if _state
130
+ @_unsetInvalidMarker()
131
+ else
132
+ @_setInvalidMarker()
133
+
134
+ fieldType: 'text'
135
+ drawMarkup: ->
73
136
  @base()
137
+ @_invalidCharWidth = @stringWidth(@_invalidChar,null,@markupElemIds.invalid)
138
+ _parentId = @markupElemIds.label
139
+ if @multiline
140
+ _elemId = ELEM.make(_parentId,'textarea')
141
+ else
142
+ _elemId = ELEM.make(_parentId,'input',{attr:{type:@fieldType,value:@value}})
143
+ @markupElemIds.value = _elemId
144
+ @setCSSClass('value','input')
145
+ Event.observe(_elemId,'focus',=>@textFocus())
146
+ Event.observe(_elemId,'blur',=>@textBlur())
74
147
  if @options.focusOnCreate
75
148
  @getInputElement().focus()
76
149
  @setSelectionRange( @value.length, @value.length ) if @typeChr(@value) == 's'
77
150
 
78
- lostActiveStatus: ->
79
- if @markupElemIds? && @markupElemIds.value?
151
+ lostActiveStatus: (_prevActive)->
152
+ @base(_prevActive)
153
+ if @markupElemIds? and @markupElemIds.value? and _prevActive != @
80
154
  ELEM.get( @markupElemIds.value ).blur()
81
155
  @textBlur()
82
156
 
@@ -86,12 +160,14 @@ HTextControl = HControl.extend
86
160
  @setStyleOfPart('value', _name, _value, _cacheOverride)
87
161
 
88
162
  click: ->
89
- @getInputElement().focus()
163
+ @getInputElement().focus() unless @hasTextFocus
90
164
 
91
165
  setEnabled: (_flag)->
92
166
  @base(_flag)
93
167
  if @markupElemIds? and @markupElemIds.value?
94
168
  ELEM.get(@markupElemIds.value).disabled = !@enabled
169
+ else
170
+ @pushTask => @setEnabled(_flag)
95
171
 
96
172
  _clipboardEventTimer: null
97
173
  _getChangeEventFn: ->
@@ -130,6 +206,7 @@ HTextControl = HControl.extend
130
206
  ##
131
207
  ###
132
208
  textFocus: ->
209
+ return if @hasTextFocus
133
210
  EVENT.changeActiveControl( @ )
134
211
  @hasTextFocus = true
135
212
  @_setChangeEventFn()
@@ -140,6 +217,7 @@ HTextControl = HControl.extend
140
217
  ## Called when the input field loses focus.
141
218
  ###
142
219
  textBlur: ->
220
+ return unless @hasTextFocus
143
221
  @hasTextFocus = false
144
222
  @_clearChangeEventFn()
145
223
  if @options.refreshOnBlur
@@ -147,8 +225,8 @@ HTextControl = HControl.extend
147
225
  @refreshValue()
148
226
  true
149
227
 
150
- idle: ->
151
- @refreshAfter() if @hasTextFocus and @options.refreshOnIdle and @options.refreshOnInput
228
+ # idle: ->
229
+ # @refreshAfter() if @hasTextFocus and @options.refreshOnIdle and @options.refreshOnInput
152
230
 
153
231
  refreshValue: ->
154
232
  @setTextFieldValue( @value )
@@ -157,8 +235,7 @@ HTextControl = HControl.extend
157
235
  ## Placeholder method for validation of the value.
158
236
  ##
159
237
  ###
160
- validateText: (_value)->
161
- @fieldToValue(_value)
238
+ validateText: (_value)-> @fieldToValue(_value)
162
239
 
163
240
  ### = Description
164
241
  ## Returns the input element or null, if no input element created (yet).
@@ -172,10 +249,8 @@ HTextControl = HControl.extend
172
249
  ###
173
250
  getTextFieldValue: ->
174
251
  _inputElement = @getInputElement()
175
- if _inputElement?
176
- return _inputElement.value
177
- else
178
- return ''
252
+ return _inputElement.value if _inputElement?
253
+ ''
179
254
 
180
255
  valueToField: (_value)-> _value
181
256
  fieldToValue: (_value)-> _value
@@ -191,8 +266,11 @@ HTextControl = HControl.extend
191
266
  return unless _inputElement?
192
267
  [ _selectionStart, _selectionEnd ] = @getSelectionRange()
193
268
  _value = @valueToField(_value)
194
- _inputElement.value = _value if _inputElement.value != _value.toString()
195
- @setSelectionRange( _selectionStart, _selectionEnd )
269
+ @_lastFieldValue = _value
270
+ unless @hasTextFocus
271
+ _inputElement.value = _value if _inputElement.value != _value.toString()
272
+ @setSelectionRange( _selectionStart, _selectionEnd )
273
+ @setValid(true) if _inputElement.value == _value
196
274
 
197
275
  # returns a random number prefixed and suffixed with '---'
198
276
  _randomMarker: -> '---'+Math.round((1+Math.random())*10000)+'---'
@@ -202,13 +280,14 @@ HTextControl = HControl.extend
202
280
  clearTimeout(@_refreshTimer) if @_refreshTimer
203
281
  @_refreshTimer = null
204
282
  @_clearChangeEventFn()
283
+ @_clearFocusBlurEvent()
205
284
  @base()
206
285
 
207
286
  ### = Description
208
287
  ## Returns the selection (or text cursor position) of the input element
209
288
  ## as an +Array+ like +[ startOffset, endOffset ]+.
210
289
  ###
211
- getSelectionRange: ->
290
+ _getLeftAlignedSelectionRange: ->
212
291
  _inputElement = @getInputElement()
213
292
  if _inputElement == null or @hasTextFocus == false
214
293
  _rangeArr = [ 0, 0 ]
@@ -239,25 +318,52 @@ HTextControl = HControl.extend
239
318
  else
240
319
  _rangeArr = [ 0, 0 ]
241
320
  return _rangeArr
242
-
321
+ _getRightAlignedSelectionRange: ->
322
+ _inputElement = @getInputElement()
323
+ _inputValue = _inputElement.value
324
+ _valueLength = _inputValue.length
325
+ if _inputElement == null or @hasTextFocus == false
326
+ _rangeArr = [ 0, 0 ]
327
+ ## Other browsers
328
+ else if _inputElement.selectionStart
329
+ _rangeArr = [ _valueLength-_inputElement.selectionStart, _valueLength-_inputElement.selectionEnd ]
330
+ ## Internet Explorer:
331
+ else if document.selection
332
+ # create a range object
333
+ _range = document.selection.createRange()
334
+ # original range text
335
+ _rangeText = _range.text
336
+ _rangeLength = _rangeText.length
337
+ # make a copy of the text and replace \r\n with \n
338
+ _origValue = _inputElement.value.replace(/\r\n/g, "\n")
339
+ # create random marker to replace the text with
340
+ _marker = @_randomMarker()
341
+ # re-generate marker if it's found in the text.
342
+ _marker = @_randomMarker() while ~_origValue.indexOf( _marker )
343
+ _markerLength = _marker.length
344
+ # temporarily set the text of the selection to the unique marker
345
+ _range.text = _marker
346
+ _markerValue = _inputElement.value.replace(/\r\n/g, "\n")
347
+ _range.text = _rangeText
348
+ _markerIndex = _markerValue.indexOf( _marker )
349
+ _rangeArr = [ _valueLength-_markerIndex, _valueLength-_markerIndex + _rangeLength ]
350
+ ## No support:
351
+ else
352
+ _rangeArr = [ 0, 0 ]
353
+ return _rangeArr
354
+ getSelectionRange: ->
355
+ return @_getRightAlignedSelectionRange() if @styleOfPart('value','textAlign') == 'right'
356
+ @_getLeftAlignedSelectionRange()
243
357
  _refreshTimer: null
244
358
  _lastFieldValue: null
245
359
  refreshAfter: ->
246
360
  _fieldValue = @getTextFieldValue()
247
- if @_lastFieldValue == null or _fieldValue != @_lastFieldValue
361
+ if not @_lastFieldValue? or _fieldValue != @_lastFieldValue
248
362
  @_lastFieldValue = _fieldValue
249
363
  if @_refreshTimer
250
364
  clearTimeout( @_refreshTimer )
251
365
  @_refreshTimer = null
252
- if @options.refreshAfter and @options.refreshAfter > 0
253
- _this = @
254
- @_refreshTimer = setTimeout( (->
255
- _this._updateValueFromField()
256
- ), @options.refreshAfter*1000 )
257
- else
258
- @_updateValueFromField()
259
- # @setValue( @validateText( @getTextFieldValue() ) )
260
- # @refreshValue()
366
+ @pushTask => @_updateValueFromField()
261
367
 
262
368
  ### = Description
263
369
  ## Sets the selection (or text cursor position) of the input element.
@@ -281,6 +387,10 @@ HTextControl = HControl.extend
281
387
  _selectionEnd = _selectionStart
282
388
  _inputElement = @getInputElement()
283
389
  return if _inputElement == null or @hasTextFocus == false
390
+ if @styleOfPart('value','textAlign') == 'right'
391
+ _len = _inputElement.value.length
392
+ _selectionStart = _len - _selectionStart
393
+ _selectionEnd = _len - _selectionEnd
284
394
  # Internet Explorer
285
395
  if _inputElement.createTextRange
286
396
  _range = _inputElement.createTextRange()
@@ -300,6 +410,33 @@ HTextControl = HControl.extend
300
410
  ###
301
411
  textEnter: ->
302
412
  @refreshAfter() if @options.refreshOnInput
303
- false
413
+ true
414
+
415
+ drawSubviews: ->
416
+ @drawUnit()
417
+
418
+ _extraLabelRight: 0
419
+ drawUnit: ->
420
+ if @options.unit
421
+ _style =
422
+ fontSize: @styleOfPart('value','fontSize')
423
+ fontFamily: @styleOfPart('value','fontFamily')
424
+ fontWeight: @styleOfPart('value','fontWeight')
425
+ color: @styleOfPart('value','color')
426
+ whiteSpace: 'pre'
427
+ textAlign: 'right'
428
+ verticalAlign: 'middle'
429
+ lineHeight: '100%'
430
+ ELEM.flush()
431
+ [ w, h ] = @stringSize(@options.unit,null,@markupElemIds.label,true,_style)
432
+ h = ELEM.getSize(@markupElemIds.label)[1]
433
+ _style.lineHeight = h+'px'
434
+ _unitRect = [null,1,w+4,h-2,4,1]
435
+ @unitSuffix = HLabel.new(_unitRect,@,
436
+ label: @options.unit
437
+ style: _style
438
+ )
439
+ @_extraLabelRight += @unitSuffix.rect.width
440
+ @setStyleOfPart('label','right',this._extraLabelRight+'px')
304
441
 
305
442
  HTextField = HTextControl
@@ -1,137 +1,101 @@
1
-
2
- .default .textcontrol_input {
3
- position: absolute;
4
- display: block;
1
+ .default.textcontrol {
2
+ overflow: visible;
3
+ }
4
+ .default.textcontrol > .input_parent {
5
+ position: absolute; z-index: 2;
6
+ left: 1px; top: 1px; right: 1px; bottom: 1px;
7
+ }
8
+ .default.textcontrol > .input_parent > .input {
9
+ position: absolute; display: block;
5
10
  font-family: Helvetica, Arial, sans-serif;
6
- font-size: 13px;
7
- color: #000;
11
+ font-size: 13px; color: #000; resize: none;
8
12
  background-color: transparent;
9
13
  vertical-align: middle;
10
- border: 0;
11
- left: 0; top: 0;
12
- #{(
13
- (BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.ie10||BROWSER_TYPE.opera)?
14
- 'padding-left:2px;width:100% !important;height:90% !important;':
15
- 'padding:2px;right:0px;bottom:0px;width:auto;height:auto;'
16
- )}
14
+ border: 0; left: 0; top: 0;
15
+ right: 0; bottom: 0;
16
+ width: 100%; height: 100%;
17
+ -moz-box-sizing: border-box;
18
+ -webkit-box-sizing: border-box;
19
+ box-sizing: border-box;
17
20
  }
18
-
19
- .default .textcontrol_input:focus {
20
- outline-color: transparent;
21
- outline-style: none;
21
+ .default.textcontrol > .input_parent > .input::-ms-clear {
22
+ display: none;
22
23
  }
23
-
24
- .default .disabled .textcontrol_input {
25
- color: #333;
24
+ .default.textcontrol.disabled > .input_parent > .input { color: #333; }
25
+ .default.textcontrol > .input_parent > .input:focus {
26
+ outline-color: transparent; outline-style: none;
27
+ }
28
+ .default.textcontrol > .input_parent > .input_invalid {
29
+ position: absolute; white-space: nowrap; overflow: hidden;
30
+ vertical-align: bottom; visibility: hidden;
31
+ bottom: 1px; font-size: 10px; line-height: 6px;
32
+ color: #c00; z-index: 0; font-weight: bold;
26
33
  }
27
34
 
28
- .default .textcontrol_subview {
35
+
36
+
37
+ .default.textcontrol > .subview {
29
38
  position: absolute;
30
39
  left: 0; top: 0; right: 0; bottom: 0;
31
40
  z-index: 1;
32
41
  }
42
+ .default.textcontrol.active > .subview { display: none; }
33
43
 
34
- .default .active>.textcontrol_subview {
35
- display: none;
36
- }
37
44
 
38
- .default .textcontrol_input_parent {
39
- position: absolute;
40
- z-index: 2;
41
- #{(
42
- ((BROWSER_TYPE.chrome && BROWSER_TYPE.mac)||BROWSER_TYPE.firefox||BROWSER_TYPE.ie7||BROWSER_TYPE.ie8||BROWSER_TYPE.ie9||BROWSER_TYPE.ie10||BROWSER_TYPE.opera)?
43
- 'left:0;padding-left:1px;top:0;right:4px;bottom:0;':
44
- 'left:-2px;top:-2px;right:-2px;bottom:-2px;'
45
- )}
46
- #{(BROWSER_TYPE.chrome && BROWSER_TYPE.mac)?'top:1px;':''}
47
- }
48
45
 
49
- .default .textcontrol_bg {
46
+ .default.textcontrol > .bg > .c {
50
47
  position: absolute;
51
48
  left: 2px; top: 2px; right: 2px; bottom: 2px;
52
49
  background-color: #fff;
53
50
  }
54
-
55
- .default .active>.textcontrol_bg {
51
+ .default.textcontrol.active > .bg > .c {
56
52
  left: 0; top: 0; right: 0; bottom: 0;
57
53
  -webkit-box-shadow: 0 0 3px #333;
58
54
  box-shadow: 0 0 3px #333;
59
55
  }
56
+ .default.textcontrol.disabled > .bg > .c { background-color: #eee; }
60
57
 
61
- .default .disabled .textcontrol_bg {
62
- background-color: #eee;
63
- }
64
-
65
-
66
- .default .textcontrol_ne,
67
- .default .textcontrol_nw,
68
- .default .textcontrol_se,
69
- .default .textcontrol_sw {
70
- position: absolute;
71
- width: 7px; height: 7px;
58
+ .default.textcontrol > .bg > .ne,
59
+ .default.textcontrol > .bg > .nw,
60
+ .default.textcontrol > .bg > .se,
61
+ .default.textcontrol > .bg > .sw {
62
+ position: absolute; width: 7px; height: 7px;
72
63
  background-repeat: no-repeat;
73
- background-image: #{this.getCssFilePath('textcontrol_parts1.png')};
64
+ background-image: #url(textcontrol_parts1.png);
74
65
  }
75
-
76
- .default .textcontrol_nw {
77
- left: 0; top: 0;
78
- background-position: 0 0;
66
+ .default.textcontrol > .bg > .nw {
67
+ left: 0; top: 0; background-position: 0 0;
79
68
  }
80
-
81
- .default .textcontrol_ne {
82
- right: 0; top: 0;
83
- background-position: -7px 0;
69
+ .default.textcontrol > .bg > .ne {
70
+ right: 0; top: 0; background-position: -7px 0;
84
71
  }
85
-
86
- .default .textcontrol_sw {
87
- left: 0; bottom: 0;
88
- background-position: 0 -7px;
72
+ .default.textcontrol > .bg > .sw {
73
+ left: 0; bottom: 0; background-position: 0 -7px;
89
74
  }
90
-
91
- .default .textcontrol_se {
92
- right: 0; bottom: 0;
93
- background-position: -7px -7px;
75
+ .default.textcontrol > .bg > .se {
76
+ right: 0; bottom: 0; background-position: -7px -7px;
94
77
  }
95
-
96
-
97
-
98
- .default .textcontrol_w,
99
- .default .textcontrol_e {
100
- position: absolute;
101
- width: 7px; top: 7px; bottom: 7px;
78
+ .default.textcontrol > .bg > .w,
79
+ .default.textcontrol > .bg > .e {
80
+ position: absolute; width: 7px; top: 7px; bottom: 7px;
102
81
  background-repeat: repeat-y;
103
- background-image: #{this.getCssFilePath('textcontrol_parts3.png')};
82
+ background-image: #url(textcontrol_parts3.png);
104
83
  }
105
-
106
- .default .textcontrol_w {
107
- left: 0;
108
- background-position: 0 0;
84
+ .default.textcontrol > .bg > .w {
85
+ left: 0; background-position: 0 0;
109
86
  }
110
-
111
- .default .textcontrol_e {
112
- right: 0;
113
- background-position: -7px 0;
87
+ .default.textcontrol > .bg > .e {
88
+ right: 0; background-position: -7px 0;
114
89
  }
115
-
116
-
117
-
118
- .default .textcontrol_n,
119
- .default .textcontrol_s {
120
- position: absolute;
121
- height: 7px; left: 7px; right: 7px;
90
+ .default.textcontrol > .bg > .n,
91
+ .default.textcontrol > .bg > .s {
92
+ position: absolute; height: 7px; left: 7px; right: 7px;
122
93
  background-repeat: repeat-x;
123
- background-image: #{this.getCssFilePath('textcontrol_parts2.png')};
94
+ background-image: #url(textcontrol_parts2.png);
124
95
  }
125
-
126
- .default .textcontrol_n {
127
- top: 0;
128
- background-position: 0 0;
96
+ .default.textcontrol > .bg > .n {
97
+ top: 0; background-position: 0 0;
129
98
  }
130
-
131
- .default .textcontrol_s {
132
- bottom: 0;
133
- background-position: 0 -7px;
99
+ .default.textcontrol > .bg > .s {
100
+ bottom: 0; background-position: 0 -7px;
134
101
  }
135
-
136
-
137
-
@@ -1,20 +1,15 @@
1
- <div class="textcontrol_bg" id="bg]I["></div>
2
-
3
- <div class="textcontrol_n"></div>
4
- <div class="textcontrol_s"></div>
5
- <div class="textcontrol_w"></div>
6
- <div class="textcontrol_e"></div>
7
-
8
- <div class="textcontrol_nw"></div>
9
- <div class="textcontrol_ne"></div>
10
- <div class="textcontrol_se"></div>
11
- <div class="textcontrol_sw"></div>
12
-
13
- <div id="subview]I[" class="textcontrol_subview"></div>
14
-
15
- <div id="label]I[" title="#{this.label}" class="textcontrol_input_parent">
16
- <input type="text" class="textcontrol_input" #{this.enabled?'':'disabled'}
17
- onfocus="HSystem.views[#{this.viewId}].textFocus();"
18
- onblur="HSystem.views[#{this.viewId}].textBlur();"
19
- id="value]I[" value="#{this.value}" />
1
+ <div class="bg" id="bg]I[">
2
+ <div class="n"></div>
3
+ <div class="s"></div>
4
+ <div class="w"></div>
5
+ <div class="e"></div>
6
+ <div class="c"></div>
7
+ <div class="nw"></div>
8
+ <div class="ne"></div>
9
+ <div class="se"></div>
10
+ <div class="sw"></div>
11
+ </div>
12
+ <div id="subview]I[" class="subview"></div>
13
+ <div id="label]I[" title="#{this.label}" class="input_parent">
14
+ <div class="input_invalid" id="invalid]I["></div>
20
15
  </div>
@@ -52,5 +52,5 @@
52
52
  .upload_progress .progress_indicator {
53
53
  position: absolute;
54
54
  right: 0px; top: 4px; width: 16px; height: 16px;
55
- background-image: #{this.getCssFilePath('upload_progress.gif')};
55
+ background-image: #url(upload_progress.gif);
56
56
  }
@@ -54,7 +54,7 @@
54
54
  }
55
55
 
56
56
  .window_titlebar * {
57
- background-image: #{this.getCssFilePath('window_parts1.png')};
57
+ background-image: #url(window_parts1.png);
58
58
  }
59
59
 
60
60
  .window_titlebar_edge_left {
@@ -80,7 +80,7 @@
80
80
  left: 24px; top: 0; right: 24px; height: 24px;
81
81
  background-position: 0 0;
82
82
  background-repeat: repeat-x;
83
- background-image: #{this.getCssFilePath('window_parts2.png')};
83
+ background-image: #url(window_parts2.png);
84
84
  }
85
85
 
86
86
  .inactive > .window_titlebar > .window_titlebar_center {
@@ -90,11 +90,11 @@
90
90
  .window_bg {
91
91
  left: 24px; top: 24px; right: 24px; bottom: 24px;
92
92
  background-repeat: repeat;
93
- background-image: #{this.getCssFilePath('window_bg_active.png')};
93
+ background-image: #url(window_bg_active.png);
94
94
  }
95
95
 
96
96
  .inactive > .window_bg {
97
- background-image: #{this.getCssFilePath('window_bg_inactive.png')};
97
+ background-image: #url(window_bg_inactive.png);
98
98
  }
99
99
 
100
100
  .window_body {
@@ -102,7 +102,7 @@
102
102
  }
103
103
 
104
104
  .window_body * {
105
- background-image: #{this.getCssFilePath('window_parts1.png')};
105
+ background-image: #url(window_parts1.png);
106
106
  }
107
107
 
108
108
  .window_body_edge_left {
@@ -146,7 +146,7 @@
146
146
  left: 24px; bottom: 0; right: 24px; height: 24px;
147
147
  background-repeat: repeat-x;
148
148
  background-position: 0 -24px;
149
- background-image: #{this.getCssFilePath('window_parts2.png')};
149
+ background-image: #url(window_parts2.png);
150
150
  }
151
151
 
152
152
  .inactive > .window_body > .window_body_edge_bottom {
@@ -183,7 +183,7 @@
183
183
  z-index: 10000;
184
184
  background-position: -59px -35px;
185
185
  font-size: 0;
186
- background-image: #{this.getCssFilePath('window_parts1.png')};
186
+ background-image: #url(window_parts1.png)
187
187
  }
188
188
 
189
189
  .inactive > .window_resize_se {
@@ -194,7 +194,7 @@
194
194
  .window_controls_collapse,
195
195
  .window_controls_zoom {
196
196
  top: 6px; width: 15px; height: 15px;
197
- background-image: #{this.getCssFilePath('window_buttons.png')};
197
+ background-image: #url(window_buttons.png)
198
198
  }
199
199
 
200
200
  .window_controls_close {
@@ -677,12 +677,14 @@ ELEM = HClass.extend
677
677
  _id = @_add( _elem )
678
678
  @_initCache( _id )
679
679
  if _options?
680
- if _options.attrs?
681
- if _options.attrs instanceof Array
682
- for _attr in _options.attrs
680
+ _attrs = _options.attrs if _options.attrs?
681
+ _attrs = _options.attr if _options.attr? and not _attr?
682
+ if _attrs?
683
+ if _attrs instanceof Array
684
+ for _attr in _attrs
683
685
  @setAttr( _id, _attr[0], _attr[1], true )
684
686
  else
685
- for _attrName, _attrValue of _options.attrs
687
+ for _attrName, _attrValue of _attrs
686
688
  @setAttr( _id, _attrName, _attrValue, true )
687
689
  if _options.styles
688
690
  @setStyles( _id, _options.styles )