rsence-pre 2.3.0.2 → 2.3.0.3

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.0.2.pre
1
+ 2.3.0.3.pre
@@ -774,18 +774,18 @@ HEventResponder = HClass.extend({
774
774
  **/
775
775
  selected: false,
776
776
  select: function(){
777
- this.selected = true;
778
- console.warn("HControl#select not supported yet.");
777
+ // console.warn("HControl#select not supported yet.");
779
778
  },
780
779
  deSelect: function(){
781
- this.selected = false;
782
- console.warn("HControl#deSelect not supported yet.");
780
+ // console.warn("HControl#deSelect not supported yet.");
783
781
  },
784
782
  setSelected: function(_state){
785
783
  if( _state ){
784
+ this.selected = true;
786
785
  this.select();
787
786
  }
788
787
  else {
788
+ this.selected = false;
789
789
  this.deSelect();
790
790
  }
791
791
  }
@@ -10,6 +10,73 @@ var
10
10
  HLocale = {
11
11
  components: {
12
12
 
13
+ },
14
+ compUnits: {
15
+ strings: {
16
+ bit: ' b',
17
+ 'byte': ' B',
18
+ kilobyte: ' kB',
19
+ kibibyte: ' KiB',
20
+ megabyte: ' MB',
21
+ mebibyte: ' MiB',
22
+ gigabyte: ' GB',
23
+ gibibyte: ' GiB',
24
+ terabyte: ' TB',
25
+ tebibyte: ' TiB',
26
+ petabyte: ' PB',
27
+ pebibyte: ' PiB'//,
28
+ // exabyte: ' EB',
29
+ // ebibyte: ' EiB',
30
+ // zettabyte: ' ZB',
31
+ // zebibyte: ' ZiB',
32
+ // yottabyte: ' YB',
33
+ // yobibyte: ' YiB'
34
+ },
35
+ units: {
36
+ SI: [
37
+ [ 1000, 'byte' ],
38
+ [ 1000000, 'kilobyte' ],
39
+ [ 1000000000, 'megabyte' ],
40
+ [ 1000000000000, 'gigabyte' ],
41
+ [ 1000000000000000, 'terabyte' ],
42
+ [ 1000000000000000000, 'petabyte' ]
43
+ ],
44
+ IEC: [
45
+ [ 1024, 'byte' ],
46
+ [ 1048576, 'kibibyte' ],
47
+ [ 1073741824, 'mebibyte' ],
48
+ [ 1099511627776, 'gibibyte' ],
49
+ [ 1125899906842624, 'tebibyte' ],
50
+ [ 1152921504606846976, 'pebibyte' ]
51
+ ]
52
+ },
53
+ defaultUnitSystem: 'SI',
54
+ formatBytes: function( _value, _decimals, _unitSystem ){
55
+ var _this = HLocale.compUnits;
56
+ if(!_decimals){ _decimals = 0; }
57
+ if(!_unitSystem){ _unitSystem = _this.defaultUnitSystem; }
58
+ var
59
+ _strings = _this.strings,
60
+ _decMul = Math.pow(10,_decimals),
61
+ _conv = _this.units[_unitSystem],
62
+ i = 0,
63
+ _lim, _div=1, _num, _suffix;
64
+ for( ; i < _conv.length; i++ ){
65
+ _lim = _conv[i][0];
66
+ _suffix = _strings[_conv[i][1]];
67
+ if( _value < _lim ){
68
+ break;
69
+ }
70
+ _div = _lim;
71
+ }
72
+ if( i && _decimals ){
73
+ _num = Math.round((_value*_decMul)/_div)/_decMul;
74
+ }
75
+ else {
76
+ _num = Math.round(_value/_div);
77
+ }
78
+ return _num+_suffix;
79
+ }
13
80
  },
14
81
  dateTime: {
15
82
  strings: {
@@ -1,19 +1,237 @@
1
- HTable = HControl.extend({
1
+ HTable = HControl.extend
2
2
  componentName: 'table'
3
- markupElemNames: ['bg','header','content','header-columns']
4
- _resetElements: ->
5
- if @_tableElements
6
- ELEM.del( _id ) for _id in @_tableElements
7
- @_tableElements = []
8
- @_rowElements = []
9
- @_colElements = []
10
- _createTableRow: ( _row, i )->
11
- console.log( 'row:', _row, ', i:',i )
12
-
13
- _refreshTableContents: ->
14
- _value = @value
15
- @_createTableRow( _row, i ) for _row, i in _value
3
+ markupElemNames: [ 'header', 'subview' ]
4
+ defaultEvents:
5
+ resize: true
6
+ controlDefaults: HControlDefaults.extend
7
+ tableType: 'rows'
8
+ constructor: (_opt)->
9
+ @headerCols = false unless @headerCols?
10
+ @sortDescending = [] unless @sortDescending?
11
+ @colWidths = [] unless @colWidths?
12
+ @colOptions = {} unless @colOptions?
13
+ sortCol: 0
14
+ _destroyHeader: ->
15
+ if @headerCols?
16
+ _table = @
17
+ for _elemId, i in @headerCols
18
+ Event.stopObserving(ELEM.get(_elemId),'click',@sortFns[i])
19
+ ELEM.del(_elemId)
20
+ delete @headerCols
21
+ delete @headerSizes
22
+ delete @sortFns
23
+ sortByCol: (_col)->
24
+ if @options.sortCol == _col
25
+ if @options.sortDescending[_col]?
26
+ @options.sortDescending[_col] = !@options.sortDescending[_col]
27
+ else
28
+ @options.sortDescending[_col] = false
29
+ else
30
+ @options.sortCol = _col
31
+ @drawHeader()
32
+ @refreshTable()
33
+ # if @colViews?
34
+ # for _size, i in @headerSizes
35
+ # _colView = @colViews[i]
36
+ # _colView.rect.setLeft(_size[0])
37
+ # _colView.rect.setWidth(_size[1])
38
+ # _colView.drawRect()
39
+ drawHeader: ->
40
+ _elemIds = []
41
+ _sizes = []
42
+ _autoWidths = []
43
+ _sortFns = []
44
+ _left = 6
45
+ _table = @
46
+ for _headerCol, i in @options.headerCols
47
+ _left += 6
48
+ _elemId = ELEM.make( @markupElemIds.header, 'div' )
49
+ @options.sortDescending[i] = false unless @options.sortDescending[i]?
50
+ ELEM.addClassName(_elemId,'table_header_column')
51
+ ELEM.flush()
52
+ if @options.sortCol == i
53
+ _headerCol += '<div class="sort">'
54
+ if @options.sortDescending[i]
55
+ _headerCol += '&#9660;'
56
+ else
57
+ _headerCol += '&#9650;'
58
+ _headerCol += '</div>'
59
+ _width = -6 #26
60
+ else
61
+ _width = -6 #26
62
+ # ELEM.setStyle(_elemId,'font-weight','normal',true)
63
+ if @options.colWidths[i]?
64
+ if @options.colWidths[i] == 'auto'
65
+ _autoWidths.push(i)
66
+ else
67
+ _width += @options.colWidths[i]
68
+ else
69
+ _width += @stringWidth(_headerCol, null, _elemId)
70
+ _sizes.push([_left,_width])
71
+ ELEM.setAttr(_elemId,'sortcol',i)
72
+ ELEM.setHTML(_elemId,_headerCol)
73
+ _sortFns.push((e)->
74
+ _table.sortByCol(@sortcol)
75
+ e.preventDefault()
76
+ true
77
+ )
78
+ Event.observe(ELEM.get(_elemId),'click',_sortFns[i])
79
+ _left += _width
80
+ _elemIds.push( _elemId )
81
+ if _autoWidths.length > 0
82
+ _autoWidth = Math.floor(( @rect.width - _left )/_autoWidths.length)
83
+ _plusLeft = 0
84
+ for [_left, _width], i in _sizes
85
+ _elemId = _elemIds[i]
86
+ ELEM.setStyle(_elemId,'left',_left+_plusLeft+'px')
87
+ _sizes[i][0] = _left+_plusLeft
88
+ if _autoWidths.indexOf(i) != -1
89
+ _width = _autoWidth - 6
90
+ # _width += 20 if i == @options.sortCol
91
+ _sizes[i][1] = _width
92
+ _plusLeft += _autoWidth
93
+ ELEM.setStyle(_elemId,'width',_width+'px')
94
+ @_destroyHeader()
95
+ ELEM.flush()
96
+ @headerCols = _elemIds
97
+ @headerSizes = _sizes
98
+ @sortFns = _sortFns
99
+ resize: ->
100
+ @drawHeader()
101
+ for _colNum in [0..@headerCols.length-1]
102
+ _left = @headerSizes[_colNum][0]
103
+ _width = @headerSizes[_colNum][1]
104
+ @colViews[_colNum].rect.offsetTo( _left, 0 )
105
+ @colViews[_colNum].rect.setWidth( _width )
106
+ @colViews[_colNum].drawRect()
107
+ drawSubviews: ->
108
+ if @options.headerCols
109
+ @drawHeader()
110
+ else
111
+ @setStyleOfPart('body','top',0)
112
+ _findClassInNameSpace: (_className)->
113
+ if typeof _className == 'function' and _className.hasAncestor? and _className.hasAncestor( HControl )
114
+ return _className
115
+ else if typeof _className == 'string' and window[_className]?
116
+ return window[_className] # should have more elegant lookup
117
+ console.warn( 'HTable#'+'_'+'findClassNameInNamespace: No such className => ', _className, ', using default => ',@options.defaultColClass )
118
+ return @options.defaultColClass
119
+ _getClassNameAndValueOfCol: (_col, _colNum)->
120
+ if @options.colOptions[_colNum]?
121
+ _colOption = @options.colOptions[_colNum]
122
+ else
123
+ _colOption = {}
124
+ if @options.colClasses[_colNum]?
125
+ _colClass = @options.colClasses[_colNum]
126
+ if typeof _colClass == 'function' and _colClass.hasAncestor? and _colClass.hasAncestor( HControl )
127
+ return [ _colClass, _colOption ]
128
+ else if _colClass instanceof Object and not _colClass.hasAncestor?
129
+ for _className of _colClass
130
+ if typeof _className == 'string'
131
+ return [ @_findClassInNameSpace( _className ), _colClass[_className] ]
132
+ else if typeof _colClass == 'string'
133
+ return [ @_findClassInNameSpace( _colClass ), _colOption ]
134
+ return [ @_findClassInNameSpace( @options.defaultColClass ), _colOption ]
135
+ _destroyRows: ->
136
+ for _row, _rowNum in @_rows
137
+ for _col, _colNum in _row
138
+ _col.die()
139
+ _row[_colNum]
140
+ @_rows = []
141
+ @_rowsDrawn = false
142
+ filterRow: (_value)->
143
+ return false
144
+ sortTableRows: ->
145
+ _rowsVisible = 0
146
+ _col = @options.sortCol
147
+ _sortDescending = @options.sortDescending
148
+ _desc = _sortDescending[_col]
149
+ _rowSort = []
150
+ for _row, i in @_rows
151
+ _rowSort.push( [ @value[i], _row ] )
152
+ _nextCols = []
153
+ if @options.sortOrder[_col]?
154
+ if @options.sortOrder[_col] instanceof Array
155
+ _nextCols = HVM.clone( @options.sortOrder[_col] )
156
+ else
157
+ _nextCols = [ @options.sortOrder[_col] ]
158
+ else
159
+ _nextCols = []
160
+ _rowSorter = (_row1, _row2, _col, _nextCols, _desc)->
161
+ _r1 = _row1[0][_col]
162
+ _r2 = _row2[0][_col]
163
+ while _r1 == _r2 and _nextCols.length > 0
164
+ _nextCol = _nextCols.shift()
165
+ _desc = _sortDescending[_nextCol]
166
+ _r1 = _row1[0][_nextCol]
167
+ _r2 = _row2[0][_nextCol]
168
+ return 0 if _r1 == _r2
169
+ if _desc
170
+ return 1 if _r1 < _r2
171
+ else
172
+ return 1 if _r1 > _r2
173
+ return -1
174
+ _rowSort.sort( (_row1,_row2)->
175
+ _rowSorter(_row1, _row2, _col, HVM.clone(_nextCols), _desc)
176
+ )
177
+ _top = 0
178
+ _rowHeight = 24
179
+ for [ _value, _row ], _rowNum in _rowSort
180
+ if @filterRow(_value)
181
+ for _col in _row
182
+ _col.hide()
183
+ else
184
+ _rowsVisible += 1
185
+ for _col in _row
186
+ _col.show()
187
+ _col.rect.offsetTo( 0, _top )
188
+ _col.drawRect()
189
+ _top += _rowHeight
190
+ @_rowsVisible = _rowsVisible
191
+ refreshTableRows: (_newData)->
192
+ return unless @headerCols?
193
+ _top = 0
194
+ _rowHeight = 24
195
+ if @colViews?
196
+ _colViews = @colViews
197
+ else
198
+ _colViews = []
199
+ for _colNum in [0..@headerCols.length-1]
200
+ _left = @headerSizes[_colNum][0]
201
+ _width = @headerSizes[_colNum][1]
202
+ _colViews[_colNum] = HView.nu( [ _left, 0, _width, 1 ], @ )
203
+ @colViews = _colViews
204
+ if @_rowsDrawn and not _newData
205
+ @sortTableRows()
206
+ else if @_rowsDrawn and _newData and @_rows.length == @value.length
207
+ for _row, _rowNum in @value
208
+ for _col, _colNum in _row
209
+ @_rows[_rowNum][_colNum].setValue( _col )
210
+ @sortTableRows()
211
+ else
212
+ if @_rowsDrawn
213
+ @_destroyRows()
214
+ _rows = []
215
+ for _row, _rowNum in @value
216
+ _rows[_rowNum] = []
217
+ for _col, _colNum in _row
218
+ [ _colClass, _colOpts ] = @_getClassNameAndValueOfCol(_col, _colNum)
219
+ _colOpts.value = _col
220
+ _rows[_rowNum][_colNum] = _colClass.nu( [0,_top,null,_rowHeight,0,null], @colViews[_colNum], _colOpts )
221
+ _top += _rowHeight
222
+ for _colView in _colViews
223
+ _colView.rect.setHeight(_top)
224
+ _colView.drawRect()
225
+ @_rows = _rows
226
+ @_rowsDrawn = true
227
+ @sortTableRows()
228
+ refreshTableCols: (_newData)->
229
+ console.warn('HTable#refreshTableCols is not implemented yet!')
230
+ refreshTable: (_newData)->
231
+ if @options.tableType == 'rows'
232
+ @refreshTableRows(_newData)
233
+ else if @options.tableType == 'cols'
234
+ @refreshTableCols(_newData)
16
235
  refreshValue: ->
17
- @_refreshTableContents() if @drawn and ( @value.constructor == Array )
18
- })
19
-
236
+ if @value instanceof Array
237
+ @refreshTable( true )
@@ -0,0 +1,25 @@
1
+ .default > .table_header {
2
+ position:absolute;
3
+ left: 0; top: 0; right: 0; height: 22px;
4
+ border: 1px solid #333;
5
+ background: #eee;
6
+ font-family: Helvetica, Arial, sans-serif;
7
+ font-size: 13px; line-height: 20px;
8
+ vertical-align: middle;
9
+ color: #000;
10
+ -webkit-user-select: none;
11
+ -moz-user-select: none;
12
+ -khtml-user-select: none;
13
+ }
14
+ .default > .table_header > .table_header_column {
15
+ top: 1px; height: 20px; position: absolute;
16
+ cursor: pointer; border-right: 1px solid #ccc;
17
+ font-weight: bold;
18
+ }
19
+ .default > .table_header > .table_header_column > .sort {
20
+ position: absolute; top: 1px; right: 2px;
21
+ }
22
+ .default > .table_body {
23
+ position: absolute; top: 24px; left: 0; right: 0; bottom: 0;
24
+ overflow: auto; overflow-x: hidden;
25
+ }
@@ -1,19 +1,2 @@
1
- <div id="bg#{_ID}" class="table_bg">
2
- <div class="table_nw"></div>
3
- <div class="table_n"></div>
4
- <div class="table_ne"></div>
5
- <div class="table_w"></div>
6
- <div class="table_c"></div>
7
- <div class="table_e"></div>
8
- <div class="table_sw"></div>
9
- <div class="table_s"></div>
10
- <div class="table_se"></div>
11
- </div>
12
- <div id="header#{_ID}" class="table_header">
13
- <div class="table_header_left"></div>
14
- <div class="table_header_middle"></div>
15
- <div class="table_header_right"></div>
16
- <div id="header_columns#{_ID}" class="table_columns"></div>
17
- </div>
18
- <div id="content#{_ID}" class="table_content"></div>
19
- </div>
1
+ <div id="header#{_ID}" class="table_header"></div>
2
+ <div id="subview#{_ID}" class="table_body"></div>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsence-pre
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0.2
4
+ version: 2.3.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-08 00:00:00.000000000 Z
13
+ date: 2012-08-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rsence-deps