rsence-pre 3.0.0.8 → 3.0.0.9

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/client/conf/client_pkg.yaml +6 -2
  4. data/client/js/comm/queue/queue.js +32 -44
  5. data/client/js/comm/transporter/transporter.js +24 -16
  6. data/client/js/comm/values/values.js +27 -15
  7. data/client/js/controls/button/button.coffee +14 -5
  8. data/client/js/controls/button/themes/default/button.css +4 -2
  9. data/client/js/controls/checkbox/checkbox.js +4 -4
  10. data/client/js/controls/dialogs/sheet/sheet.js +11 -11
  11. data/client/js/controls/dialogs/sheet/themes/default/sheet.html +1 -1
  12. data/client/js/controls/imageview/imageview.js +15 -15
  13. data/client/js/controls/numerictextcontrol/numerictextcontrol.coffee +32 -10
  14. data/client/js/controls/onoffbutton/onoffbutton.coffee +5 -5
  15. data/client/js/controls/progress/progressbar/progressbar.js +6 -7
  16. data/client/js/controls/progress/progressbar/themes/default/progressbar.css +4 -4
  17. data/client/js/controls/progress/progressbar/themes/default/progressbar.html +1 -2
  18. data/client/js/controls/sliders/slider/slider.js +74 -79
  19. data/client/js/controls/stepper/stepper.js +31 -31
  20. data/client/js/controls/stringview/stringview.js +20 -8
  21. data/client/js/controls/tab/tab.js +57 -63
  22. data/client/js/controls/tab/themes/default/tab.html +4 -1
  23. data/client/js/controls/textcontrol/textcontrol.coffee +13 -3
  24. data/client/js/controls/validatorview/validatorview.js +4 -4
  25. data/client/js/controls/window/window.js +43 -56
  26. data/client/js/core/class/class.js +25 -23
  27. data/client/js/core/elem/elem.coffee +8 -1
  28. data/client/js/core/rsence_ns/rsence_ns.coffee +6 -2
  29. data/client/js/core/util/util_methods/util_methods.coffee +57 -15
  30. data/client/js/datetime/calendar/calendar.coffee +196 -199
  31. data/client/js/datetime/calendar/themes/default/calendar.css +81 -159
  32. data/client/js/datetime/calendar/themes/default/calendar.html +9 -18
  33. data/client/js/datetime/datepicker/datepicker.coffee +18 -3
  34. data/client/js/datetime/datetimepicker/datetimepicker.coffee +6 -1
  35. data/client/js/datetime/datetimevalue/datetimevalue.coffee +194 -0
  36. data/client/js/datetime/momentjs/momentjs.js +310 -76
  37. data/client/js/datetime/timepicker/timepicker.coffee +6 -1
  38. data/client/js/datetime/timesheet/timesheet.js +59 -61
  39. data/client/js/foundation/control/control.js +45 -44
  40. data/client/js/foundation/control/controldefaults/controldefaults.js +13 -9
  41. data/client/js/foundation/control/dyncontrol/dyncontrol.js +45 -57
  42. data/client/js/foundation/control/eventresponder/eventresponder.js +97 -97
  43. data/client/js/foundation/control/valuematrix/valuematrix.js +13 -13
  44. data/client/js/foundation/eventmanager/eventmanager.coffee +50 -32
  45. data/client/js/foundation/geom/rect/rect.js +43 -32
  46. data/client/js/foundation/locale_settings/locale_settings.js +36 -25
  47. data/client/js/foundation/system/system.js +79 -67
  48. data/client/js/foundation/thememanager/thememanager.coffee +11 -1
  49. data/client/js/foundation/value/pullvalue/pullvalue.coffee +7 -0
  50. data/client/js/foundation/value/pushvalue/pushvalue.coffee +25 -0
  51. data/client/js/foundation/value/value.js +22 -15
  52. data/client/js/foundation/view/view.js +94 -55
  53. data/client/js/foundation/view/viewdefaults/viewdefaults.js +5 -1
  54. data/client/js/lists/listitems/listitems.js +26 -4
  55. data/client/js/menus/combobox/combobox.coffee +55 -0
  56. data/client/js/menus/minimenu/minimenu.js +61 -30
  57. data/client/js/menus/minimenu/themes/default/minimenu.css +1 -6
  58. data/client/js/menus/minimenu/themes/default/minimenu.html +5 -4
  59. data/client/js/menus/minimenuitem/minimenuitem.js +6 -6
  60. data/client/js/menus/popupmenu/themes/default/popupmenu.css +1 -6
  61. data/client/js/menus/popupmenu/themes/default/popupmenu.html +5 -4
  62. data/client/js/tables/table/table.coffee +109 -64
  63. data/client/js/tables/table/themes/default/table.css +4 -0
  64. data/lib/rsence/msg.rb +64 -64
  65. data/lib/rsence/plugins/plugin.rb +68 -52
  66. data/lib/rsence/session/sequel_sessionstorage.rb +5 -5
  67. data/lib/rsence/value.rb +79 -59
  68. data/plugins/client_pkg/lib/client_pkg_build.rb +5 -1
  69. data/plugins/client_pkg/lib/client_pkg_serve.rb +40 -32
  70. data/plugins/main/js/main.js +46 -28
  71. metadata +6 -8
  72. data/client/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  73. data/client/js/datetime/calendar/themes/default/calendar_bg.png +0 -0
  74. data/client/js/datetime/calendar/themes/default/calendar_parts1.png +0 -0
  75. data/client/js/datetime/calendar/themes/default/calendar_parts2.png +0 -0
  76. data/client/js/datetime/datetimepicker/datetimepicker.js +0 -210
  77. data/client/js/datetime/datetimevalue/datetimevalue.js +0 -265
@@ -4,9 +4,9 @@
4
4
  ***/
5
5
  var//RSence.Menus
6
6
  HMiniMenuItem = HRadioButton.extend({
7
-
7
+
8
8
  componentName: 'minimenuitem',
9
-
9
+
10
10
  defaultEvents: {
11
11
  click: true,
12
12
  mouseUp: true,
@@ -24,7 +24,7 @@ HMiniMenuItem = HRadioButton.extend({
24
24
 
25
25
  _parentLastActivation: 0,
26
26
  click: function(){
27
- var _now = new Date().getTime();
27
+ var _now = this.msNow();
28
28
  if( _now - this._parentLastActivation > 200 ){
29
29
  this.base();
30
30
  this._parentLastActivation = _now;
@@ -32,17 +32,17 @@ HMiniMenuItem = HRadioButton.extend({
32
32
  }
33
33
  return true;
34
34
  },
35
-
35
+
36
36
  mouseDown: function(){
37
37
  this.base();
38
38
  this.click();
39
39
  return true;
40
40
  },
41
-
41
+
42
42
  mouseUp: function(){
43
43
  this.base();
44
44
  this.click();
45
45
  return true;
46
46
  }
47
-
47
+
48
48
  });
@@ -3,8 +3,7 @@
3
3
  .popupmenu_edge_left,
4
4
  .popupmenu_center,
5
5
  .popupmenu_edge_right,
6
- .popupmenu_label,
7
- .popupmenu_antiselect {
6
+ .popupmenu_label {
8
7
  position: absolute;
9
8
  top: 0px; height: 23px;
10
9
  }
@@ -60,7 +59,3 @@
60
59
  .disabled .popupmenu_control {
61
60
  opacity: 0.6;
62
61
  }
63
-
64
- .popupmenu_antiselect {
65
- left: 0px; right: 0px;
66
- }
@@ -1,7 +1,8 @@
1
1
  <div class="popupmenu_control" id="control]I[">
2
- <div class="popupmenu_edge_left"></div>
3
- <div class="popupmenu_center"></div>
4
- <div class="popupmenu_edge_right"></div>
2
+ <span id="bg]I[">
3
+ <div class="popupmenu_edge_left"></div>
4
+ <div class="popupmenu_center"></div>
5
+ <div class="popupmenu_edge_right"></div>
6
+ </span>
5
7
  <div class="popupmenu_label" id="label]I[">#{this.label}</div>
6
- <div class="popupmenu_antiselect"></div>
7
8
  </div>
@@ -5,20 +5,20 @@ HTable = HControl.extend
5
5
  resize: true
6
6
  controlDefaults: HControlDefaults.extend
7
7
  tableType: 'rows' # 'cols' not supported yet
8
- constructor: (_view)->
9
- @headerCols = false unless @headerCols? # array of strings
10
- @sortDescending = [] unless @sortDescending? # column sorting by index; true for descending; false for ascending
11
- @colWidths = [] unless @colWidths? # widths by column index; default 'auto'
12
- @colClasses = {} unless @colClasses? # class by column index
13
- @defaultColOptions = {} unless @defaultColOptions? # fallback default column options
14
- @colOptions = {} unless @colOptions? # column class constructor options by column index
15
- @defaultColClass = HStringView unless @defaultColClass? # fallback default column class
16
8
  sortCol: 0 # the default sort column
17
9
  useCellGrid: false # whether to use colored cells or not
18
10
  cellBgColor: '#eee' # the average bg color
19
11
  cellBgColorDiff: '#080808' # color to add/subtract for even/odd col/row
20
12
  cellBorderWidth: 1 # cell border width in pixels
21
13
  cellBorderColor: '#fff' # cell border color
14
+ customOptions: (_options)->
15
+ _options.headerCols = false unless _options.headerCols? # array of strings
16
+ _options.sortDescending = [] unless _options.sortDescending? # column sorting by index; true for descending; false for ascending
17
+ _options.colWidths = [] unless _options.colWidths? # widths by column index; default 'auto'
18
+ _options.colClasses = {} unless _options.colClasses? # class by column index
19
+ _options.defaultColOptions = {} unless _options.defaultColOptions? # fallback default column options
20
+ _options.colOptions = {} unless _options.colOptions? # column class constructor options by column index
21
+ _options.defaultColClass = HStringView unless _options.defaultColClass? # fallback default column class
22
22
  _destroyHeader: ->
23
23
  if @headerCols?
24
24
  _table = @
@@ -36,6 +36,10 @@ HTable = HControl.extend
36
36
  @options.sortDescending[_col] = false
37
37
  else
38
38
  @options.sortCol = _col
39
+ if @_sortColElem?
40
+ ELEM.del(@_sortColElem)
41
+ @_sortColElem = null
42
+ delete @_sortColElem
39
43
  @drawHeader()
40
44
  @refreshTable()
41
45
  # if @colViews?
@@ -77,7 +81,7 @@ HTable = HControl.extend
77
81
  _height = 24-_heightOffset
78
82
  _topAdd = 24
79
83
  _halfBorderWidth = Math.floor(_borderSize*0.5)
80
- _widthOffset = 6-_borderSize-_halfBorderWidth
84
+ _widthOffset = _borderSize-_halfBorderWidth - 2
81
85
  _borderLeftOffset = 0-_halfBorderWidth
82
86
  for _colView, _colNum in @colViews
83
87
  [ _left, _width ] = @headerSizes[_colNum]
@@ -87,12 +91,12 @@ HTable = HControl.extend
87
91
  _width -= _halfBorderWidth if _borderSize % 2 == 1
88
92
  else
89
93
  _left += _borderLeftOffset-_widthOffset
90
- _left -= _borderSize if _borderSize > 1
94
+ #_left -= _borderSize if _borderSize > 1
91
95
  _width += _widthOffset
92
96
  _width += _halfBorderWidth
93
97
  _top = _borderLeftOffset
94
98
  for _row, _rowNum in @_rows
95
- @_bgCells << ELEM.make(
99
+ @_bgCells.push ELEM.make(
96
100
  _parent, 'div',
97
101
  styles:
98
102
  backgroundColor: @_cellBgColorOf(_rowNum,_colNum)
@@ -108,25 +112,21 @@ HTable = HControl.extend
108
112
  _sizes = []
109
113
  _autoWidths = []
110
114
  _sortFns = []
111
- _left = 6
115
+ _left = 0
112
116
  _table = @
117
+ _sortColElem = null
118
+ _sortColClassName = (_styles)->
119
+ if _styles.textAlign? and _styles.textAlign == 'right'
120
+ ELEM.delClassName(_sortColElem,'sort')
121
+ ELEM.addClassName(_sortColElem,'sort_left')
122
+ else
123
+ ELEM.delClassName(_sortColElem,'sort_left')
124
+ ELEM.addClassName(_sortColElem,'sort')
113
125
  for _headerCol, i in @options.headerCols
114
- _left += 6
115
126
  _elemId = ELEM.make( @markupElemIds.header, 'div' )
116
127
  @options.sortDescending[i] = false unless @options.sortDescending[i]?
117
128
  ELEM.addClassName(_elemId,'table_header_column')
118
- ELEM.flush()
119
- if @options.sortCol == i
120
- _headerCol += '<div class="sort">'
121
- if @options.sortDescending[i]
122
- _headerCol += '&#9660;'
123
- else
124
- _headerCol += '&#9650;'
125
- _headerCol += '</div>'
126
- _width = -6 #26
127
- else
128
- _width = -6 #26
129
- # ELEM.setStyle(_elemId,'font-weight','normal',true)
129
+ _width = 0
130
130
  if @options.colWidths[i]?
131
131
  if @options.colWidths[i] == 'auto'
132
132
  _autoWidths.push(i)
@@ -137,6 +137,18 @@ HTable = HControl.extend
137
137
  _sizes.push([_left,_width])
138
138
  ELEM.setAttr(_elemId,'sortcol',i)
139
139
  ELEM.setHTML(_elemId,_headerCol)
140
+ if @options.sortCol == i
141
+ _sortColElem = ELEM.make( _elemId, 'div' )
142
+ if @options.headerStyles? and @options.headerStyles[i]?
143
+ _sortColClassName( @options.headerStyles[i] )
144
+ else if @options.defaultHeaderStyle
145
+ _sortColClassName( @options.defaultHeaderStyle )
146
+ else
147
+ ELEM.addClassName( _sortColElem, 'sort' )
148
+ if @options.sortDescending[i]
149
+ ELEM.setHTML( _sortColElem, '&#9660;' )
150
+ else
151
+ ELEM.setHTML( _sortColElem, '&#9650;' )
140
152
  _sortFns.push((e)->
141
153
  _table.sortByCol(@sortcol)
142
154
  e.preventDefault()
@@ -153,20 +165,24 @@ HTable = HControl.extend
153
165
  ELEM.setStyle(_elemId,'left',_left+_plusLeft+'px')
154
166
  _sizes[i][0] = _left+_plusLeft
155
167
  if _autoWidths.indexOf(i) != -1
156
- _width = _autoWidth - 6
168
+ _width = _autoWidth
157
169
  # _width += 20 if i == @options.sortCol
158
170
  _sizes[i][1] = _width
159
171
  _plusLeft += _autoWidth
160
172
  ELEM.setStyle(_elemId,'width',_width+'px')
173
+ if @options.headerStyles? and @options.headerStyles[i]?
174
+ ELEM.setStyles( _elemId, @options.headerStyles[i] )
175
+ else if @options.defaultHeaderStyle
176
+ ELEM.setStyles( _elemId, @options.defaultHeaderStyle )
161
177
  @_destroyHeader()
162
- ELEM.flush()
163
178
  @headerCols = _elemIds
164
179
  @headerSizes = _sizes
180
+ @_sortColElem = _sortColElem
165
181
  @sortFns = _sortFns
166
182
  resize: ->
167
183
  @drawHeader()
168
184
  for _colNum in [0..@headerCols.length-1]
169
- _left = @headerSizes[_colNum][0]
185
+ _left = @headerSizes[_colNum][0] + 1
170
186
  _width = @headerSizes[_colNum][1]
171
187
  @colViews[_colNum].rect.offsetTo( _left, 0 )
172
188
  @colViews[_colNum].rect.setWidth( _width )
@@ -176,7 +192,7 @@ HTable = HControl.extend
176
192
  if @options.headerCols
177
193
  @drawHeader()
178
194
  else
179
- @setStyleOfPart('body','top',0)
195
+ @setStyleOfPart('subview','top',0)
180
196
  _findClassInNameSpace: (_className)->
181
197
  if typeof _className == 'function' and _className.hasAncestor? and _className.hasAncestor( HControl )
182
198
  return _className
@@ -186,7 +202,7 @@ HTable = HControl.extend
186
202
  return @options.defaultColClass
187
203
  _getClassNameAndValueOfCol: (_col, _colNum)->
188
204
  if @options.colOptions[_colNum]?
189
- _colOption = @options.colOptions[_colNum]
205
+ _colOption = @cloneObject( @options.colOptions[_colNum] )
190
206
  else
191
207
  _colOption = @cloneObject( @options.defaultColOptions )
192
208
  if @options.colClasses[_colNum]?
@@ -206,8 +222,10 @@ HTable = HControl.extend
206
222
  _row[_colNum]
207
223
  @_rows = []
208
224
  @_rowsDrawn = false
209
- filterRow: (_value)->
210
- return false
225
+ filterRow: (_value)-> false
226
+ sortEq: (a, b, _col)-> a == b
227
+ sortLt: (a, b, _col)-> a < b
228
+ sortGt: (a, b, _col)-> a > b
211
229
  sortTableRows: ->
212
230
  _rowsVisible = 0
213
231
  _col = @options.sortCol
@@ -224,19 +242,22 @@ HTable = HControl.extend
224
242
  _nextCols = [ @options.sortOrder[_col] ]
225
243
  else
226
244
  _nextCols = []
245
+ _sortEq = @sortEq
246
+ _sortLt = @sortLt
247
+ _sortGt = @sortGt
227
248
  _rowSorter = (_row1, _row2, _col, _nextCols, _desc)->
228
249
  _r1 = _row1[0][_col]
229
250
  _r2 = _row2[0][_col]
230
- while _r1 == _r2 and _nextCols.length > 0
251
+ while _sortEq( _r1, _r2, _col ) and _nextCols.length > 0
231
252
  _nextCol = _nextCols.shift()
232
253
  _desc = _sortDescending[_nextCol]
233
254
  _r1 = _row1[0][_nextCol]
234
255
  _r2 = _row2[0][_nextCol]
235
- return 0 if _r1 == _r2
256
+ return 0 if _sortEq( _r1, _r2, _col )
236
257
  if _desc
237
- return 1 if _r1 < _r2
258
+ return 1 if _sortLt( _r1, _r2, _col )
238
259
  else
239
- return 1 if _r1 > _r2
260
+ return 1 if _sortGt( _r1, _r2, _col )
240
261
  return -1
241
262
  _rowSort.sort( (_row1,_row2)->
242
263
  _rowSorter(_row1, _row2, _col, HVM.clone(_nextCols), _desc)
@@ -257,14 +278,11 @@ HTable = HControl.extend
257
278
  @_rowsVisible = _rowsVisible
258
279
  refreshTableRows: (_newData)->
259
280
  return unless @headerCols?
260
- _top = 0
261
- _rowHeight = 24
262
- if @colViews?
263
- _colViews = @colViews
264
- else
281
+ _colViews = @colViews
282
+ unless _colViews
265
283
  _colViews = []
266
284
  for _colNum in [0..@headerCols.length-1]
267
- _left = @headerSizes[_colNum][0]
285
+ _left = @headerSizes[_colNum][0] + 1
268
286
  _width = @headerSizes[_colNum][1]
269
287
  _colViews[_colNum] = HView.nu( [ _left, 0, _width, 1 ], @ )
270
288
  @colViews = _colViews
@@ -277,38 +295,65 @@ HTable = HControl.extend
277
295
  _ctrl.setValue( _col )
278
296
  @sortTableRows()
279
297
  else
280
- if @_rowsDrawn
281
- @_destroyRows()
282
- _rows = []
283
- for _row, _rowNum in @value
284
- _rows[_rowNum] = []
285
- for _col, _colNum in _row
286
- [ _colClass, _colOpts ] = @_getClassNameAndValueOfCol(_col, _colNum)
287
- _colOpts.value = _col
288
- _colOpts.tableRow = _rowNum
289
- _colOpts.tableCol = _colNum
290
- _ctrl = _colClass.new(
291
- [ 0, _top, null, _rowHeight, 0, null ],
292
- @colViews[_colNum],
293
- _colOpts
294
- )
295
- _rows[_rowNum][_colNum] = _ctrl
296
- _top += _rowHeight
297
- for _colView in _colViews
298
- _colView.rect.setHeight(_top)
299
- _colView.drawRect()
298
+ @createTableRows()
299
+ createTableRows: ->
300
+ @_destroyRows() if @_rowsDrawn
301
+ _start = new Date().getTime()
302
+ _top = 0
303
+ _rowHeight = 24
304
+ _rows = []
305
+ _viewDefs = []
306
+ _colViews = @colViews
307
+ for _row, _rowNum in @value
308
+ _rows[_rowNum] = []
309
+ for _col, _colNum in _row
310
+ [ _colClass, _colOpts ] = @_getClassNameAndValueOfCol(_col, _colNum)
311
+ _colOpts.value = _col
312
+ _colOpts.tableRow = _rowNum
313
+ _colOpts.tableCol = _colNum
314
+ _colOpts.autoDraw = false unless _colOpts.autoDraw?
315
+ _viewDefs.push( [_colClass,_rowNum,_colNum,_top,_rowHeight,_colViews[_colNum],_colOpts] )
316
+ _top += _rowHeight
317
+ for _colView in _colViews
318
+ _colView.rect.setHeight(_top)
319
+ _colView.drawRect()
320
+ _finishDraw = =>
300
321
  @_rows = _rows
301
322
  @_rowsDrawn = true
302
323
  @sortTableRows()
324
+ if @options.useCellGrid
325
+ @pushTask => @_drawCellStyles()
326
+ if _viewDefs.length > 0
327
+ @pushTask =>
328
+ _viewsToDraw = []
329
+ _count = _viewDefs.length
330
+ _progress = HProgressBar.new([0,0,@rect.width,24],@,visible:false)
331
+ setTimeout( ->
332
+ _progress.show()
333
+ , 100 )
334
+ _itemNum = 0
335
+ for i in [0.._count-1]
336
+ @pushTask =>
337
+ _itemNum+=1
338
+ [_colClass,_rowNum,_colNum,y,h,_parent,_colOpts] = _viewDefs.shift()
339
+ _view = _colClass.new( [ 0,y,null,h,0,null ], _parent, _colOpts )
340
+ _rows[_rowNum][_colNum] = _view
341
+ _progress.setValue(_itemNum/_count)
342
+ _viewsToDraw.push(_view)
343
+ @pushTask =>
344
+ _colView.draw() for _colView in _viewsToDraw
345
+ @pushTask( _finishDraw )
346
+ _progress.die()
347
+ # console.log('table render took:',@msNow()-_start,'ms') if !@isProduction
348
+ else _finishDraw()
303
349
  refreshTableCols: (_newData)->
304
350
  console.warn('HTable#refreshTableCols is not implemented yet!')
305
351
  refreshTable: (_newData)->
306
352
  if @options.tableType == 'rows'
307
353
  @refreshTableRows(_newData)
308
354
  else if @options.tableType == 'cols'
309
- console.log('ERROR; refreshTable: tableType \'cols\' not supported!')
355
+ console.warn('ERROR; refreshTable: tableType \'cols\' not supported!')
310
356
  @refreshTableCols(_newData)
311
- @_drawCellStyles() if @options.useCellGrid and _newData
312
357
  refreshValue: ->
313
358
  if @value instanceof Array
314
359
  @refreshTable( true )
@@ -15,10 +15,14 @@
15
15
  top: 1px; height: 20px; position: absolute;
16
16
  cursor: pointer; border-right: 1px solid #ccc;
17
17
  font-weight: bold;
18
+ text-indent: 6px;
18
19
  }
19
20
  .default > .table_header > .table_header_column > .sort {
20
21
  position: absolute; top: 1px; right: 2px;
21
22
  }
23
+ .default > .table_header > .table_header_column > .sort_left {
24
+ position: absolute; top: 1px; left: 2px;
25
+ }
22
26
  .default > .table_body {
23
27
  position: absolute; top: 24px; left: 0; right: 0; bottom: 0;
24
28
  overflow: auto; overflow-x: hidden;