gridx-rails 1.1.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +3 -3
- data/app/assets/javascripts/gridx/Grid.js +3 -2
- data/app/assets/javascripts/gridx/core/model/cache/_Cache.js +25 -8
- data/app/assets/javascripts/gridx/modules/Bar.js +1 -2
- data/app/assets/javascripts/gridx/modules/Body.js +15 -7
- data/app/assets/javascripts/gridx/modules/CellWidget.js +8 -4
- data/app/assets/javascripts/gridx/modules/ColumnLock.js +12 -12
- data/app/assets/javascripts/gridx/modules/ColumnResizer.js +9 -10
- data/app/assets/javascripts/gridx/modules/Dod.js +1 -0
- data/app/assets/javascripts/gridx/modules/Edit.js +18 -15
- data/app/assets/javascripts/gridx/modules/Filter.js +7 -3
- data/app/assets/javascripts/gridx/modules/Focus.js +45 -36
- data/app/assets/javascripts/gridx/modules/GroupHeader.js +2 -1
- data/app/assets/javascripts/gridx/modules/HLayout.js +1 -0
- data/app/assets/javascripts/gridx/modules/HScroller.js +1 -0
- data/app/assets/javascripts/gridx/modules/Header.js +8 -1
- data/app/assets/javascripts/gridx/modules/HeaderMenu.js +1 -0
- data/app/assets/javascripts/gridx/modules/HeaderRegions.js +2 -1
- data/app/assets/javascripts/gridx/modules/IndirectSelect.js +7 -34
- data/app/assets/javascripts/gridx/modules/IndirectSelectColumn.js +4 -13
- data/app/assets/javascripts/gridx/modules/Menu.js +5 -1
- data/app/assets/javascripts/gridx/modules/NavigableCell.js +3 -1
- data/app/assets/javascripts/gridx/modules/NestedSort.js +4 -1
- data/app/assets/javascripts/gridx/modules/Pagination.js +1 -0
- data/app/assets/javascripts/gridx/modules/Persist.js +1 -0
- data/app/assets/javascripts/gridx/modules/RowHeader.js +11 -10
- data/app/assets/javascripts/gridx/modules/SingleSort.js +1 -0
- data/app/assets/javascripts/gridx/modules/SummaryBar.js +1 -0
- data/app/assets/javascripts/gridx/modules/ToolBar.js +3 -0
- data/app/assets/javascripts/gridx/modules/TouchScroll.js +1 -0
- data/app/assets/javascripts/gridx/modules/TouchVScroller.js +28 -5
- data/app/assets/javascripts/gridx/modules/Traverse.js +1 -0
- data/app/assets/javascripts/gridx/modules/Tree.js +2 -1
- data/app/assets/javascripts/gridx/modules/VLayout.js +1 -0
- data/app/assets/javascripts/gridx/modules/VScroller.js +22 -11
- data/app/assets/javascripts/gridx/modules/View.js +11 -6
- data/app/assets/javascripts/gridx/modules/VirtualVScroller.js +8 -4
- data/app/assets/javascripts/gridx/modules/dnd/Column.js +3 -4
- data/app/assets/javascripts/gridx/modules/dnd/Row.js +3 -4
- data/app/assets/javascripts/gridx/modules/dnd/_Dnd.js +1 -0
- data/app/assets/javascripts/gridx/modules/extendedSelect/Cell.js +4 -3
- data/app/assets/javascripts/gridx/modules/extendedSelect/Column.js +6 -7
- data/app/assets/javascripts/gridx/modules/extendedSelect/Row.js +33 -15
- data/app/assets/javascripts/gridx/modules/filter/FilterBar.js +9 -7
- data/app/assets/javascripts/gridx/modules/filter/FilterDialog.js +1 -1
- data/app/assets/javascripts/gridx/modules/filter/FilterPane.js +1 -1
- data/app/assets/javascripts/gridx/modules/filter/QuickFilter.js +1 -0
- data/app/assets/javascripts/gridx/modules/move/Column.js +2 -1
- data/app/assets/javascripts/gridx/modules/move/Row.js +2 -1
- data/app/assets/javascripts/gridx/modules/pagination/PaginationBar.js +1 -0
- data/app/assets/javascripts/gridx/modules/pagination/PaginationBarDD.js +2 -0
- data/app/assets/javascripts/gridx/modules/select/Cell.js +10 -7
- data/app/assets/javascripts/gridx/modules/select/Column.js +3 -2
- data/app/assets/javascripts/gridx/modules/select/Row.js +27 -13
- data/app/assets/javascripts/gridx/support/QuickFilter.js +7 -2
- data/lib/gridx-rails/version.rb +1 -1
- data/test/dummy/log/test.log +5 -0
- metadata +2 -2
@@ -11,6 +11,7 @@ define([
|
|
11
11
|
/*=====
|
12
12
|
var Filter = declare(_Module, {
|
13
13
|
// summary:
|
14
|
+
// module name: filter.
|
14
15
|
// This module makes it possible for user to set arbitrary filter condition to grid.
|
15
16
|
|
16
17
|
serverMode: false,
|
@@ -53,7 +54,7 @@ define([
|
|
53
54
|
}
|
54
55
|
});
|
55
56
|
|
56
|
-
Filter.__FilterExpressionTools = {
|
57
|
+
Filter.__FilterExpressionTools = declare([], {
|
57
58
|
// summary:
|
58
59
|
// A filter expression is just a function returning TRUE/FALSE.
|
59
60
|
// Here provides a set of useful expression tools to help construct complicated filter expressions for grid.
|
@@ -243,7 +244,7 @@ define([
|
|
243
244
|
// return: Function
|
244
245
|
// A filter expression.
|
245
246
|
}
|
246
|
-
};
|
247
|
+
});
|
247
248
|
|
248
249
|
return Filter;
|
249
250
|
=====*/
|
@@ -256,6 +257,9 @@ define([
|
|
256
257
|
|
257
258
|
constructor: function(){
|
258
259
|
this.setFilter(this.arg('preCondition'), 1);
|
260
|
+
this.aspect(this.grid.model, 'setStore', function(){
|
261
|
+
this._checker = null;
|
262
|
+
});
|
259
263
|
},
|
260
264
|
|
261
265
|
serverMode: false,
|
@@ -324,7 +328,7 @@ define([
|
|
324
328
|
d.setFullYear(2000);
|
325
329
|
return d.getTime();
|
326
330
|
default: //string
|
327
|
-
return d === null || d === undefined ? '' : String(d);
|
331
|
+
return (d === null || d === undefined) ? '' : String(d);
|
328
332
|
}
|
329
333
|
}
|
330
334
|
|
@@ -13,6 +13,7 @@ define([
|
|
13
13
|
/*=====
|
14
14
|
var Focus = declare(_Module, {
|
15
15
|
// summary
|
16
|
+
// module name: focus.
|
16
17
|
// This module controls the TAB sequence of all the UI modules.
|
17
18
|
// But this module is (or at least can be) a non-UI module, because it does not handle the actual focus job.
|
18
19
|
|
@@ -162,7 +163,9 @@ define([
|
|
162
163
|
|
163
164
|
return declare(_Module, {
|
164
165
|
name: 'focus',
|
165
|
-
|
166
|
+
|
167
|
+
enabled: !has('ios') && !has('android'),
|
168
|
+
|
166
169
|
constructor: function(){
|
167
170
|
var t = this,
|
168
171
|
g = t.grid;
|
@@ -360,7 +363,7 @@ define([
|
|
360
363
|
_stackIdx: 0,
|
361
364
|
|
362
365
|
_onTabDown: function(evt){
|
363
|
-
if(evt.keyCode === keys.TAB){
|
366
|
+
if(this.arg('enabled') && evt.keyCode === keys.TAB){
|
364
367
|
this.tab(evt.shiftKey ? -1 : 1, evt);
|
365
368
|
}
|
366
369
|
},
|
@@ -371,54 +374,60 @@ define([
|
|
371
374
|
dn = t.grid.domNode,
|
372
375
|
n = evt.target,
|
373
376
|
currentArea = t._areas[t.currentArea()];
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
if(
|
382
|
-
currentArea.
|
383
|
-
|
377
|
+
if(t.arg('enabled')){
|
378
|
+
while(n && n !== dn){
|
379
|
+
i = array.indexOf(t._focusNodes, n);
|
380
|
+
if(i >= 0){
|
381
|
+
stack = t._tabQueue[i].stack;
|
382
|
+
for(j = 0; j < stack.length; ++j){
|
383
|
+
area = t._areas[stack[j]];
|
384
|
+
if(area.onFocus(evt)){
|
385
|
+
if(currentArea && currentArea.name !== area.name){
|
386
|
+
currentArea.onBlur(evt);
|
387
|
+
t.onBlurArea(currentArea.name);
|
388
|
+
}
|
389
|
+
t.onFocusArea(area.name);
|
390
|
+
t._queueIdx = i;
|
391
|
+
t._stackIdx = j;
|
392
|
+
return;
|
384
393
|
}
|
385
|
-
t.onFocusArea(area.name);
|
386
|
-
t._queueIdx = i;
|
387
|
-
t._stackIdx = j;
|
388
|
-
return;
|
389
394
|
}
|
395
|
+
return;
|
390
396
|
}
|
391
|
-
|
397
|
+
n = n.parentNode;
|
398
|
+
}
|
399
|
+
if(n == dn && currentArea){
|
400
|
+
t._doBlur(evt, currentArea);
|
392
401
|
}
|
393
|
-
n = n.parentNode;
|
394
|
-
}
|
395
|
-
if(n == dn && currentArea){
|
396
|
-
t._doBlur(evt, currentArea);
|
397
402
|
}
|
398
403
|
},
|
399
404
|
|
400
405
|
_focus: function(evt){
|
401
406
|
var t = this;
|
402
|
-
if(t.
|
403
|
-
t._tabingOut
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
407
|
+
if(t.arg('enabled')){
|
408
|
+
if(t._tabingOut){
|
409
|
+
t._tabingOut = 0;
|
410
|
+
}else if(evt.target == t.grid.domNode){
|
411
|
+
t._queueIdx = -1;
|
412
|
+
t.tab(1);
|
413
|
+
}else if(evt.target === t.grid.lastFocusNode){
|
414
|
+
t._queueIdx = t._tabQueue.length;
|
415
|
+
t.tab(-1);
|
416
|
+
}
|
410
417
|
}
|
411
418
|
},
|
412
419
|
|
413
420
|
_doBlur: function(evt, area){
|
414
421
|
var t = this;
|
415
|
-
if(
|
416
|
-
area
|
417
|
-
|
418
|
-
|
419
|
-
area
|
420
|
-
|
421
|
-
|
422
|
+
if(t.arg('enabled')){
|
423
|
+
if(!area && t.currentArea()){
|
424
|
+
area = t._areas[t.currentArea()];
|
425
|
+
}
|
426
|
+
if(area){
|
427
|
+
area.onBlur(evt);
|
428
|
+
t.onBlurArea(area.name);
|
429
|
+
t._updateCurrentArea();
|
430
|
+
}
|
422
431
|
}
|
423
432
|
},
|
424
433
|
|
@@ -14,6 +14,7 @@ define([
|
|
14
14
|
/*=====
|
15
15
|
var GroupHeader = declare(Header, {
|
16
16
|
// summary:
|
17
|
+
// module name: header.
|
17
18
|
// The header UI of grid. This implementation supports header groups (also called "column groups").
|
18
19
|
// This module is not compatible with IE7 and below.
|
19
20
|
// This module is not compatible with ColumnLock and HiddenColumns.
|
@@ -409,7 +410,7 @@ define([
|
|
409
410
|
_onKeyDown: function(evt){
|
410
411
|
var t = this, g = t.grid, col,
|
411
412
|
node = t._curNode;
|
412
|
-
if(!evt
|
413
|
+
if(!g._isCtrlKey(evt) && !evt.altKey &&
|
413
414
|
(evt.keyCode == keys.LEFT_ARROW || evt.keyCode == keys.RIGHT_ARROW)){
|
414
415
|
//Prevent scrolling the whole page.
|
415
416
|
g.focus.stopEvent(evt);
|
@@ -10,6 +10,7 @@ define([
|
|
10
10
|
/*=====
|
11
11
|
return declare(_Module, {
|
12
12
|
// summary:
|
13
|
+
// module name: hLayout.
|
13
14
|
// This module manages the horizontal layout of all grid UI parts.
|
14
15
|
// description:
|
15
16
|
// When a user creates a grid with a given width, it means the width of the whole grid,
|
@@ -22,6 +22,7 @@ define([
|
|
22
22
|
|
23
23
|
return declare(_Module, {
|
24
24
|
// summary:
|
25
|
+
// module name: header.
|
25
26
|
// The header UI of grid
|
26
27
|
// description:
|
27
28
|
// This module is in charge of the rendering of the grid header. But it should not manage column width,
|
@@ -105,6 +106,12 @@ define([
|
|
105
106
|
});
|
106
107
|
t.aspect(g, 'onHeaderCellMouseOut', function(){
|
107
108
|
g.vLayout.reLayout();
|
109
|
+
//When mouse leave a very narrow nested sorting header, sometimes this reLayout happens before the header height change.
|
110
|
+
//So set a timeout to ensure this gets relayout.
|
111
|
+
//FIXME: need investigate why
|
112
|
+
setTimeout(function(){
|
113
|
+
g.vLayout.reLayout();
|
114
|
+
}, 0);
|
108
115
|
});
|
109
116
|
t._initFocus();
|
110
117
|
},
|
@@ -273,7 +280,7 @@ define([
|
|
273
280
|
var t = this, g = t.grid, col,
|
274
281
|
dir = g.isLeftToRight() ? 1 : -1,
|
275
282
|
delta = evt.keyCode == keys.LEFT_ARROW ? -dir : dir;
|
276
|
-
if(t._focusHeaderId && !evt
|
283
|
+
if(t._focusHeaderId && !g._isCtrlKey(evt) && !evt.altKey &&
|
277
284
|
(evt.keyCode == keys.LEFT_ARROW || evt.keyCode == keys.RIGHT_ARROW)){
|
278
285
|
//Prevent scrolling the whole page.
|
279
286
|
g.focus.stopEvent(evt);
|
@@ -12,6 +12,7 @@ define([
|
|
12
12
|
/*=====
|
13
13
|
var HeaderMenu = declare(_Module, {
|
14
14
|
// summary:
|
15
|
+
// module name: headerMenu.
|
15
16
|
// Add a dropdown menu button on header cell.
|
16
17
|
// description:
|
17
18
|
// Add a dropdown menu button on the header of any column that has a "menu" defined in structure.
|
@@ -14,6 +14,7 @@ define([
|
|
14
14
|
/*=====
|
15
15
|
return declare(_Module, {
|
16
16
|
// summary:
|
17
|
+
// module name: headerRegions.
|
17
18
|
// This module makes it easy to add custom contents to column header.
|
18
19
|
// Other modules such as NestedSort or HeaderMenu can be based upon this module.
|
19
20
|
|
@@ -172,7 +173,7 @@ declare(_Module, {
|
|
172
173
|
},
|
173
174
|
|
174
175
|
_onKey: function(e){
|
175
|
-
if(!e
|
176
|
+
if(!this.grid._isCtrlKey(e) && !e.shiftKey && !e.altKey){
|
176
177
|
var ltr = this.grid.isLeftToRight(),
|
177
178
|
nextKey = ltr ? keys.RIGHT_ARROW : keys.LEFT_ARROW,
|
178
179
|
prevKey = ltr ? keys.LEFT_ARROW : keys.RIGHT_ARROW;
|
@@ -16,6 +16,7 @@ define([
|
|
16
16
|
/*=====
|
17
17
|
return declare(_Module, {
|
18
18
|
// summary:
|
19
|
+
// module name: indirectSelect.
|
19
20
|
// This module shows a checkbox(or radiobutton) on the row header when row selection is used.
|
20
21
|
// description:
|
21
22
|
// This module depends on "rowHeader" and "selectRow" modules.
|
@@ -49,24 +50,11 @@ define([
|
|
49
50
|
[sr,'onHighlightChange', '_onHighlightChange' ],
|
50
51
|
[sr,'clear', '_onClear' ],
|
51
52
|
[sr, 'onSelectionChange', '_onSelectionChange'],
|
52
|
-
[g, '
|
53
|
-
[g, 'onRowMouseOut', '_onMouseOut'],
|
53
|
+
[g.body, 'onRender', '_onSelectionChange'],
|
54
54
|
[g, 'onRowKeyDown', '_onKeyDown'],
|
55
55
|
[g, 'onHeaderKeyDown', '_onKeyDown'],
|
56
|
-
g.filter && [g.filter, 'onFilter', '_onSelectionChange']
|
57
|
-
|
58
|
-
g.pagination && [g.pagination, 'setPageSize', '_onSelectionChange'],
|
59
|
-
g.pagination && [g.pagination, 'gotoPage', '_onSelectionChange'],
|
60
|
-
focus && [focus, 'onFocusArea', function(name){
|
61
|
-
if(name == 'rowHeader'){
|
62
|
-
t._onMouseOver();
|
63
|
-
}
|
64
|
-
}],
|
65
|
-
focus && [focus, 'onBlurArea', function(name){
|
66
|
-
if(name == 'rowHeader'){
|
67
|
-
t._onMouseOut();
|
68
|
-
}
|
69
|
-
}]);
|
56
|
+
g.filter && [g.filter, 'onFilter', '_onSelectionChange']);
|
57
|
+
g.select.row.holdingCtrl = true;
|
70
58
|
if(sr.selectByIndex && t.arg('all')){
|
71
59
|
t._allSelected = {};
|
72
60
|
rowHeader.headerProvider = lang.hitch(t, t._createSelectAllBox);
|
@@ -165,21 +153,6 @@ define([
|
|
165
153
|
node.firstChild.innerHTML = selected ? '✓' : partial ? '▮' : '☐';
|
166
154
|
}
|
167
155
|
},
|
168
|
-
|
169
|
-
_onMouseOver: function(){
|
170
|
-
var sr = this.grid.select.row;
|
171
|
-
if(!sr.holdingCtrl){
|
172
|
-
this._holdingCtrl = false;
|
173
|
-
sr.holdingCtrl = true;
|
174
|
-
}
|
175
|
-
},
|
176
|
-
|
177
|
-
_onMouseOut: function(){
|
178
|
-
if(this.hasOwnProperty('_holdingCtrl')){
|
179
|
-
this.grid.select.row.holdingCtrl = false;
|
180
|
-
delete this._holdingCtrl;
|
181
|
-
}
|
182
|
-
},
|
183
156
|
|
184
157
|
_getDijitClass: function(){
|
185
158
|
return this._isSingle() ? 'dijitRadio' : 'dijitCheckBox';
|
@@ -199,7 +172,7 @@ define([
|
|
199
172
|
]([0, g.view.visualCount - 1]);
|
200
173
|
},
|
201
174
|
|
202
|
-
_onSelectionChange: function(
|
175
|
+
_onSelectionChange: function(){
|
203
176
|
var t = this, d,
|
204
177
|
g = t.grid,
|
205
178
|
allSelected,
|
@@ -208,7 +181,7 @@ define([
|
|
208
181
|
start = view.rootStart,
|
209
182
|
count = view.rootCount;
|
210
183
|
if(g.select.row.selectByIndex && t.arg('all')){
|
211
|
-
var selectedRoot = array.filter(
|
184
|
+
var selectedRoot = array.filter(g.select.row.getSelected(), function(id){
|
212
185
|
return !model.parentId(id);
|
213
186
|
});
|
214
187
|
var unselectableRows = g.select.row._getUnselectableRows();
|
@@ -276,7 +249,7 @@ define([
|
|
276
249
|
},
|
277
250
|
_onKeyDown: function(evt){
|
278
251
|
// CTRL - A
|
279
|
-
if(evt.keyCode == 65 && evt
|
252
|
+
if(evt.keyCode == 65 && this.grid._isCtrlKey(evt) && !evt.shiftKey){
|
280
253
|
if(!this._allSelected[this._getPageId()]){
|
281
254
|
this._onSelectAll();
|
282
255
|
}
|
@@ -62,14 +62,14 @@ define([
|
|
62
62
|
declaredWidth: w,
|
63
63
|
width: w
|
64
64
|
};
|
65
|
+
sr.holdingCtrl = true;
|
65
66
|
t.batchConnect(
|
66
67
|
[g, 'setColumns', '_onSetColumns'],
|
67
68
|
[sr, 'onHighlightChange', '_onHighlightChange' ],
|
68
69
|
[sr, 'onSelectionChange', '_onSelectionChange'],
|
69
70
|
[sr, 'clear', '_onClear'],
|
71
|
+
[g.body, 'onRender', '_onSelectionChange'],
|
70
72
|
g.filter && [g.filter, 'onFilter', '_onSelectionChange'],
|
71
|
-
g.pagination && [g.pagination, 'setPageSize', '_onSelectionChange'],
|
72
|
-
g.pagination && [g.pagination, 'gotoPage', '_onSelectionChange'],
|
73
73
|
[g.body, 'onMoveToCell', function(r, c, e){
|
74
74
|
var evt = {
|
75
75
|
columnId: indirectSelectColumnId
|
@@ -80,7 +80,6 @@ define([
|
|
80
80
|
t._onMouseOut();
|
81
81
|
}
|
82
82
|
}],
|
83
|
-
[g.body, 'onRender', '_updateSelectAll'],
|
84
83
|
[g, 'onCellMouseOver', '_onMouseOver'],
|
85
84
|
[g, 'onCellMouseOut', '_onMouseOut']);
|
86
85
|
t._onSetColumns();
|
@@ -200,10 +199,6 @@ define([
|
|
200
199
|
this._triggerOnCell = false;
|
201
200
|
sr.triggerOnCell = true;
|
202
201
|
}
|
203
|
-
if(!sr.arg('holdingCtrl')){
|
204
|
-
this._holdingCtrl = false;
|
205
|
-
sr.holdingCtrl = true;
|
206
|
-
}
|
207
202
|
}else{
|
208
203
|
this._onMouseOut();
|
209
204
|
}
|
@@ -215,10 +210,6 @@ define([
|
|
215
210
|
sr.triggerOnCell = false;
|
216
211
|
delete this._triggerOnCell;
|
217
212
|
}
|
218
|
-
if(this.hasOwnProperty('_holdingCtrl')){
|
219
|
-
sr.holdingCtrl = false;
|
220
|
-
delete this._holdingCtrl;
|
221
|
-
}
|
222
213
|
},
|
223
214
|
|
224
215
|
_onSelectAll: function(){
|
@@ -230,7 +221,7 @@ define([
|
|
230
221
|
]([0, g.view.visualCount - 1]);
|
231
222
|
},
|
232
223
|
|
233
|
-
_onSelectionChange: function(
|
224
|
+
_onSelectionChange: function(){
|
234
225
|
var t = this, d,
|
235
226
|
g = t.grid,
|
236
227
|
allSelected,
|
@@ -239,7 +230,7 @@ define([
|
|
239
230
|
start = view.rootStart,
|
240
231
|
count = view.rootCount;
|
241
232
|
if(g.select.row.selectByIndex && t.arg('all')){
|
242
|
-
var selectedRoot = array.filter(
|
233
|
+
var selectedRoot = array.filter(g.select.row.getSelected(), function(id){
|
243
234
|
return !model.treePath(id).pop();
|
244
235
|
});
|
245
236
|
var unselectableRows = g.select.row._getUnselectableRows();
|
@@ -11,7 +11,11 @@ define([
|
|
11
11
|
|
12
12
|
/*=====
|
13
13
|
var Menu = declare(_Module, {
|
14
|
-
//
|
14
|
+
// summary:
|
15
|
+
// module name: menu.
|
16
|
+
// Manage context menu for grid.
|
17
|
+
|
18
|
+
// context: [readonly] __MenuContext
|
15
19
|
// An object representing the current context when user triggers a context menu.
|
16
20
|
// This property is updated everytime a menu of grid is popped up.
|
17
21
|
// Users can refer to this in their menu action handlers by grid.menu.context.
|
@@ -11,6 +11,7 @@ define([
|
|
11
11
|
/*=====
|
12
12
|
return declare(_Module, {
|
13
13
|
// summary:
|
14
|
+
// module name: navigableCell.
|
14
15
|
// This module allow the elements in grid cell be focusable.
|
15
16
|
// description:
|
16
17
|
// When focus is on a cell, press F2 to focus the first focusable element in that cell.
|
@@ -85,7 +86,8 @@ define([
|
|
85
86
|
colIndex = g._columnsById[t._focusColId].index,
|
86
87
|
dir = step > 0 ? 1 : -1,
|
87
88
|
checker = function(r, c){
|
88
|
-
|
89
|
+
//If there's no decorator, we assume there's no focusable elements in this column
|
90
|
+
return t._isNavigable(g._columns[c].id) && g._columns[c].decorator;
|
89
91
|
};
|
90
92
|
body._nextCell(rowIndex, colIndex, dir, checker).then(function(obj){
|
91
93
|
t._focusColId = g._columns[obj.c].id;
|
@@ -18,6 +18,7 @@ define([
|
|
18
18
|
/*=====
|
19
19
|
return declare(_Module, {
|
20
20
|
// summary:
|
21
|
+
// module name: sort.
|
21
22
|
// Sort multiple columns in a nested way.
|
22
23
|
|
23
24
|
getSortData: function(){
|
@@ -208,7 +209,9 @@ define([
|
|
208
209
|
nls = t._nls,
|
209
210
|
g = t.grid,
|
210
211
|
dn = g.domNode,
|
211
|
-
sortData = t._sortData
|
212
|
+
sortData = array.filter(t._sortData, function(s){
|
213
|
+
return g._columnsById[s.colId];
|
214
|
+
});
|
212
215
|
removeClass(dn, 'gridxSingleSorted');
|
213
216
|
removeClass(dn, 'gridxNestedSorted');
|
214
217
|
if(sortData.length == 1){
|