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
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzkzMDJiMGUwN2VhZWYwYTE0NzVhMzQ1YWEzY2I0ZDlhNzBjYWEyNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzVkMzJmMzkwMjcxOGFjMzg1ZTAyNjgwYzQ3ZWJlZWY5ZDc2OTY5Zg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjhiNjRiMDZlYjZhODFiMGZiMTJiMDc0ODgwZmIxNWI0NjNlNmVmZDRiYTQw
|
10
|
+
ZTdlMDFjZmFmYjZlZmM0YjgzMGJhMGQzNjJlMzI4OWUwNGEzNmZkMzBjMTg3
|
11
|
+
NTNiYzU4NjQxN2M2MDdmYzYwNDVlZTdhYTEyN2U4OTU4ZTk3ZjY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDk4NWE1ZmU2YjM2ZWM0ZjQ4ZDcwYzY0MTM0ZWNkZTYyOTU1NGYzMGQyZWE0
|
14
|
+
OTI2NzlkNjAyODQ2ZmVkMjU2NjcyZDY3ZWZkNDA4YzBiMWVhYWMzMzMzMzBi
|
15
|
+
YTM0ZDgwNmJkYTY5ZmRjNmI3ODE5YmIwN2U4NzNlY2VjNmU3ZTk=
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# gridx-rails
|
2
2
|
|
3
|
-
This gem
|
3
|
+
This gem prepares [GridX](http://oria.github.io/gridx/) assets (JavaScripts, stylesheets,
|
4
4
|
templates and and images) for the Rails 3.1+ [asset
|
5
5
|
pipeline](http://guides.rubyonrails.org/asset_pipeline.html).
|
6
6
|
|
7
7
|
GridX is designed to load modules using Dojo AMD, so the files are not
|
8
|
-
packaged together in the typical asset pipeline style,
|
9
|
-
|
8
|
+
packaged together in a single file, in the typical asset pipeline style,
|
9
|
+
they are instead precompiled separately.
|
10
10
|
|
11
11
|
## Usage
|
12
12
|
|
@@ -180,7 +180,8 @@ define([
|
|
180
180
|
_compNames: ['Cell', 'HeaderCell', 'Row', 'Header'],
|
181
181
|
|
182
182
|
_eventNames: [
|
183
|
-
'
|
183
|
+
'TouchStart', 'TouchEnd',
|
184
|
+
'Click', 'DblClick',
|
184
185
|
'MouseDown', 'MouseUp',
|
185
186
|
'MouseOver', 'MouseOut',
|
186
187
|
'MouseMove', 'ContextMenu',
|
@@ -214,7 +215,7 @@ define([
|
|
214
215
|
},
|
215
216
|
//event handling end
|
216
217
|
|
217
|
-
|
218
|
+
_isCtrlKey: function(evt){
|
218
219
|
// summary:
|
219
220
|
// On Mac Ctrl+click also opens a context menu. So call this to check ctrlKey instead of directly call evt.ctrlKey
|
220
221
|
// if you need to implement some handler for Ctrl+click.
|
@@ -68,6 +68,7 @@ define([
|
|
68
68
|
//virtual root node, with id ''.
|
69
69
|
t._struct[''] = [];
|
70
70
|
t._size[''] = -1;
|
71
|
+
t.totalSize = undefined;
|
71
72
|
},
|
72
73
|
|
73
74
|
byIndex: function(index, parentId){
|
@@ -163,7 +164,7 @@ define([
|
|
163
164
|
c = t._cache[id];
|
164
165
|
for(colId in columns){
|
165
166
|
col = columns[colId];
|
166
|
-
c.data[colId] = t._formatCell(
|
167
|
+
c.data[colId] = t._formatCell(c.rawData, id, col.id);
|
167
168
|
}
|
168
169
|
}
|
169
170
|
},
|
@@ -181,15 +182,15 @@ define([
|
|
181
182
|
return item;
|
182
183
|
},
|
183
184
|
|
184
|
-
_formatCell: function(
|
185
|
+
_formatCell: function(rawData, rowId, colId){
|
185
186
|
var col = this.columns[colId];
|
186
|
-
return col.formatter ? col.formatter(rawData) : rawData[col.field || colId];
|
187
|
+
return col.formatter ? col.formatter(rawData, rowId) : rawData[col.field || colId];
|
187
188
|
},
|
188
189
|
|
189
|
-
_formatRow: function(rowData){
|
190
|
+
_formatRow: function(rowData, rowId){
|
190
191
|
var cols = this.columns, res = {}, colId;
|
191
192
|
for(colId in cols){
|
192
|
-
res[colId] = this._formatCell(
|
193
|
+
res[colId] = this._formatCell(rowData, rowId, colId);
|
193
194
|
}
|
194
195
|
return res;
|
195
196
|
},
|
@@ -218,7 +219,7 @@ define([
|
|
218
219
|
pr.push(id);
|
219
220
|
}
|
220
221
|
t._cache[id] = {
|
221
|
-
data: t._formatRow(rowData),
|
222
|
+
data: t._formatRow(rowData, id),
|
222
223
|
rawData: rowData,
|
223
224
|
item: item
|
224
225
|
};
|
@@ -244,6 +245,15 @@ define([
|
|
244
245
|
t._size[parentId] = parseInt(size, 10);
|
245
246
|
}
|
246
247
|
function onComplete(items){
|
248
|
+
//FIXME: store does not support getting total size after filter/query, so we must change the protocal a little.
|
249
|
+
if(items.ioArgs && items.ioArgs.xhr){
|
250
|
+
var range = results.ioArgs.xhr.getResponseHeader("Content-Range");
|
251
|
+
if(range && (range = range.match(/(.+)\//))){
|
252
|
+
t.totalSize = +range[1];
|
253
|
+
}else{
|
254
|
+
t.totalSize = undefined;
|
255
|
+
}
|
256
|
+
}
|
247
257
|
try{
|
248
258
|
var start = options.start || 0,
|
249
259
|
i = 0,
|
@@ -308,15 +318,19 @@ define([
|
|
308
318
|
row = t._itemToObject(item),
|
309
319
|
parentItem = parentInfo && parentInfo[s.fetch ? 'item' : 'parent'],
|
310
320
|
parentId = parentItem ? s.getIdentity(parentItem) : '',
|
321
|
+
id = s.getIdentity(item),
|
311
322
|
size = t._size[''];
|
312
323
|
t.clear();
|
313
|
-
t.onNew(
|
314
|
-
data: t._formatRow(row),
|
324
|
+
t.onNew(id, 0, {
|
325
|
+
data: t._formatRow(row, id),
|
315
326
|
rawData: row,
|
316
327
|
item: item
|
317
328
|
});
|
318
329
|
if(!parentItem && size >= 0){
|
319
330
|
t._size[''] = size + 1;
|
331
|
+
if(t.totalSize >= 0){
|
332
|
+
t.totalSize = size + 1;
|
333
|
+
}
|
320
334
|
t.model._onSizeChange();
|
321
335
|
}
|
322
336
|
},
|
@@ -359,6 +373,9 @@ define([
|
|
359
373
|
t.onDelete(id, index - 1, path);
|
360
374
|
if(!parentId && size >= 0){
|
361
375
|
sz[''] = size - 1;
|
376
|
+
if(t.totalSize >= 0){
|
377
|
+
t.totalSize = size - 1;
|
378
|
+
}
|
362
379
|
t.model._onSizeChange();
|
363
380
|
}
|
364
381
|
}else{
|
@@ -11,9 +11,8 @@ define([
|
|
11
11
|
|
12
12
|
/*=====
|
13
13
|
var Bar = declare(_Module, {
|
14
|
-
// module:
|
15
|
-
// gridx/modules/Bar
|
16
14
|
// summary:
|
15
|
+
// module name: bar.
|
17
16
|
// This is a general-purpose bar for gridx.
|
18
17
|
// description:
|
19
18
|
// This module can be configured to hold various plugins, such as pager, pageSizer, gotoPageButton, summary, quickFilter, toobar, etc.
|
@@ -43,6 +43,7 @@ define([
|
|
43
43
|
|
44
44
|
var Body = declare(_Module, {
|
45
45
|
// summary:
|
46
|
+
// module name: body.
|
46
47
|
// The body UI of grid.
|
47
48
|
// description:
|
48
49
|
// This module is in charge of row rendering. It should be compatible with virtual/non-virtual scroll,
|
@@ -250,7 +251,7 @@ define([
|
|
250
251
|
query('> .gridxRowOver', t.domNode).removeClass('gridxRowOver');
|
251
252
|
}
|
252
253
|
});
|
253
|
-
t.aspect(g, 'setStore', function(){
|
254
|
+
t.aspect(g.model, 'setStore', function(){
|
254
255
|
t.refresh();
|
255
256
|
});
|
256
257
|
},
|
@@ -544,7 +545,10 @@ define([
|
|
544
545
|
var scrollTop = isRefresh ? n.scrollTop : 0;
|
545
546
|
n.scrollTop = 0;
|
546
547
|
//unrender before destroy nodes, so that other modules have a chance to detach nodes.
|
547
|
-
t.
|
548
|
+
if(!t._skipUnrender){
|
549
|
+
//only when we do have something to unrender
|
550
|
+
t.onUnrender();
|
551
|
+
}
|
548
552
|
n.innerHTML = str;
|
549
553
|
if(scrollTop){
|
550
554
|
n.scrollTop = scrollTop;
|
@@ -565,7 +569,10 @@ define([
|
|
565
569
|
}else if(!{top: 1, bottom: 1}[position]){
|
566
570
|
n.scrollTop = 0;
|
567
571
|
//unrender before destroy nodes, so that other modules have a chance to detach nodes.
|
568
|
-
t.
|
572
|
+
if(!t._skipUnrender){
|
573
|
+
//only when we do have something to unrender
|
574
|
+
t.onUnrender();
|
575
|
+
}
|
569
576
|
n.innerHTML = '';
|
570
577
|
en.innerHTML = emptyInfo;
|
571
578
|
en.style.zIndex = '';
|
@@ -919,16 +926,17 @@ define([
|
|
919
926
|
});
|
920
927
|
t.connect(g.mainNode, 'onkeydown', function(evt){
|
921
928
|
if(focus.currentArea() == 'body'){
|
922
|
-
var dk = keys
|
923
|
-
|
929
|
+
var dk = keys,
|
930
|
+
ctrlKey = g._isCtrlKey(evt);
|
931
|
+
if(evt.keyCode == dk.HOME && !ctrlKey){
|
924
932
|
t._focusCellCol = 0;
|
925
933
|
t._focusCell();
|
926
934
|
focus.stopEvent(evt);
|
927
|
-
}else if(evt.keyCode == dk.END && !
|
935
|
+
}else if(evt.keyCode == dk.END && !ctrlKey){
|
928
936
|
t._focusCellCol = g._columns.length - 1;
|
929
937
|
t._focusCell();
|
930
938
|
focus.stopEvent(evt);
|
931
|
-
}else if(!g.tree || !
|
939
|
+
}else if(!g.tree || !ctrlKey){
|
932
940
|
focus._noBlur = 1; //1 as true
|
933
941
|
var arr = {}, dir = g.isLeftToRight() ? 1 : -1;
|
934
942
|
arr[dk.LEFT_ARROW] = [0, -dir, evt];
|
@@ -25,6 +25,7 @@ define([
|
|
25
25
|
|
26
26
|
var CellWidget = declare(_Module, {
|
27
27
|
// summary:
|
28
|
+
// module name: cellWidget.
|
28
29
|
// This module makes it possible to efficiently show widgets within a grid cell.
|
29
30
|
// description:
|
30
31
|
// Since widget declarations need to be parsed by dojo.parser, it can NOT be directly
|
@@ -110,6 +111,8 @@ define([
|
|
110
111
|
// CellWidget module reuses widgets in cell, so if there is no widgets in cell, you don't need this module at all.
|
111
112
|
widgetsInCell: false,
|
112
113
|
|
114
|
+
allowEventBubble: false,
|
115
|
+
|
113
116
|
decorator: function(){
|
114
117
|
// summary:
|
115
118
|
// This decorator function is slightly different from the one when this module is not used.
|
@@ -203,13 +206,14 @@ define([
|
|
203
206
|
},
|
204
207
|
|
205
208
|
postCreate: function(){
|
206
|
-
var
|
207
|
-
|
208
|
-
|
209
|
+
var t = this,
|
210
|
+
dn = t.domNode;
|
211
|
+
t.connect(dn, 'onmousedown', function(e){
|
212
|
+
if(e.target != dn && !t.cell.column.allowEventBubble){
|
209
213
|
e.cancelBubble = true;
|
210
214
|
}
|
211
215
|
});
|
212
|
-
|
216
|
+
t._cellCnnts = [];
|
213
217
|
},
|
214
218
|
|
215
219
|
startup: function(){
|
@@ -14,6 +14,7 @@ define([
|
|
14
14
|
/*=====
|
15
15
|
return declare(_Module, {
|
16
16
|
// summary:
|
17
|
+
// module name: columnLock.
|
17
18
|
// Column lock machinery.
|
18
19
|
// description:
|
19
20
|
// This module provides a way to lock consecutive leading columns.
|
@@ -64,15 +65,16 @@ define([
|
|
64
65
|
_this.connect(g.body, 'onAfterRow', function(row){
|
65
66
|
_this._lockColumns(row.node());
|
66
67
|
});
|
67
|
-
|
68
|
-
_this.connect(g.header, 'onRender', '_updateHeader');
|
69
68
|
_this.connect(g.columnWidth, 'onUpdate', '_updateHeader');
|
70
|
-
_this.connect(g, '
|
69
|
+
_this.connect(g.header, 'onRender', '_updateHeader');
|
71
70
|
if(g.columnResizer){
|
72
71
|
//make it compatible with column resizer
|
73
72
|
_this.connect(g.columnResizer, 'onResize', '_updateHeader');
|
74
73
|
_this.connect(g.columnResizer, 'onResize', '_updateBody');
|
75
74
|
}
|
75
|
+
|
76
|
+
_this.connect(g, '_onResizeEnd', '_updateHeader');
|
77
|
+
_this.connect(g, '_onResizeEnd', '_updateBody');
|
76
78
|
if(g.header){
|
77
79
|
g.header.loaded.then(function(){
|
78
80
|
_this._updateHeader();
|
@@ -130,6 +132,7 @@ define([
|
|
130
132
|
}
|
131
133
|
rowNode.style[ltr ? 'paddingLeft' : 'paddingRight'] = '0px';
|
132
134
|
rowNode.style.width = 'auto';
|
135
|
+
rowNode.firstChild.style.height = 'auto';
|
133
136
|
},
|
134
137
|
|
135
138
|
_updateUI: function(){
|
@@ -152,6 +155,7 @@ define([
|
|
152
155
|
var isHeader = domClass.contains(rowNode, 'gridxHeaderRowInner');
|
153
156
|
var ltr = this.grid.isLeftToRight();
|
154
157
|
var r = rowNode.firstChild.rows[0], i;
|
158
|
+
rowNode.firstChild.style.height = 'auto'; //Remove the height of the last locked state.
|
155
159
|
for(i = 0; i < this.count; i++){
|
156
160
|
domStyle.set(r.cells[i], 'height', 'auto');
|
157
161
|
}
|
@@ -159,17 +163,16 @@ define([
|
|
159
163
|
var h1 = domGeometry.getContentBox(r.cells[r.cells.length - 1]).h,
|
160
164
|
h2 = domGeometry.getMarginBox(r.cells[r.cells.length - 1]).h;
|
161
165
|
|
162
|
-
if(has('ie') > 8){
|
166
|
+
if(has('ie') > 8){
|
163
167
|
//in IE 9 +, sometimes computed height will contain decimal pixels like 34.4 px,
|
164
168
|
//so that the locked cells will have different height with the unlocked ones.
|
165
169
|
//plus the height by 1 can force IE to ceil the decimal to integer like from 34.4px to 35px
|
166
|
-
|
167
|
-
h3 = domStyle.getComputedStyle(rowNode.firstChild).height;
|
170
|
+
var h3 = domStyle.getComputedStyle(rowNode.firstChild).height;
|
168
171
|
if(String(h3).toString().indexOf('.') >= 0){ //decimal
|
169
172
|
h2++;
|
170
173
|
h1++;
|
171
174
|
}
|
172
|
-
}
|
175
|
+
}
|
173
176
|
domStyle.set(rowNode.firstChild, 'height', h2 + 'px');
|
174
177
|
|
175
178
|
var lead = isHeader ? this.grid.hLayout.lead : 0,
|
@@ -179,11 +182,8 @@ define([
|
|
179
182
|
var cell = r.cells[i],
|
180
183
|
s;
|
181
184
|
domClass.add(cell, 'gridxLockedCell');
|
182
|
-
|
183
|
-
|
184
|
-
// }else{
|
185
|
-
s = {height: h1 + 'px'};
|
186
|
-
// }
|
185
|
+
|
186
|
+
s = {height: h1 + 'px'};
|
187
187
|
s[ltr ? 'left' : 'right'] = pl + 'px';
|
188
188
|
domStyle.set(cell, s);
|
189
189
|
|
@@ -9,10 +9,10 @@ define([
|
|
9
9
|
"dojo/dom-geometry",
|
10
10
|
"dojo/keys",
|
11
11
|
"dojo/query",
|
12
|
-
|
12
|
+
"dojo/_base/sniff",
|
13
13
|
"../core/_Module"
|
14
14
|
// "dojo/NodeList-traverse"
|
15
|
-
], function(declare, win, event, dom, domStyle, domClass, domConstruct, domGeometry, keys, query,
|
15
|
+
], function(declare, win, event, dom, domStyle, domClass, domConstruct, domGeometry, keys, query, has, _Module){
|
16
16
|
|
17
17
|
/*=====
|
18
18
|
Column.setWidth = function(width){
|
@@ -22,6 +22,7 @@ define([
|
|
22
22
|
|
23
23
|
return declare(_Module, {
|
24
24
|
// summary:
|
25
|
+
// module name: columnResizer.
|
25
26
|
// Column Resizer machinery.
|
26
27
|
// description:
|
27
28
|
// This module provides a way to resize column width.
|
@@ -108,10 +109,8 @@ define([
|
|
108
109
|
cs.maxWidth = width + 'px';
|
109
110
|
});
|
110
111
|
g.body.onRender();
|
112
|
+
g.hLayout.reLayout();
|
111
113
|
g.vLayout.reLayout();
|
112
|
-
if(g.autoWidth){
|
113
|
-
g.hLayout.reLayout();
|
114
|
-
}
|
115
114
|
t.onResize(colId, width, oldWidth);
|
116
115
|
}
|
117
116
|
},
|
@@ -157,7 +156,7 @@ define([
|
|
157
156
|
_mouseout: function(e){
|
158
157
|
if(!this._resizing){
|
159
158
|
var pos = domGeometry.position(this.grid.header.domNode);
|
160
|
-
if(
|
159
|
+
if(has('chrome')){
|
161
160
|
for(var i in pos){
|
162
161
|
pos[i] = Math.floor(pos[i]);
|
163
162
|
}
|
@@ -262,11 +261,11 @@ define([
|
|
262
261
|
},
|
263
262
|
|
264
263
|
_keydown: function(evt){
|
264
|
+
var t = this,
|
265
|
+
g = t.grid;
|
265
266
|
//support keyboard to resize a column
|
266
|
-
if((evt.keyCode == keys.LEFT_ARROW || evt.keyCode == keys.RIGHT_ARROW) && evt
|
267
|
-
var
|
268
|
-
g = t.grid,
|
269
|
-
colId = evt.columnId,
|
267
|
+
if((evt.keyCode == keys.LEFT_ARROW || evt.keyCode == keys.RIGHT_ARROW) && g._isCtrlKey(evt) && evt.shiftKey){
|
268
|
+
var colId = evt.columnId,
|
270
269
|
cellNode = query('[colid="' + g._escapeId(colId) + '"].gridxCell', g.header.innerNode)[0],
|
271
270
|
step = t.arg('step');
|
272
271
|
step = evt.keyCode == keys.LEFT_ARROW ^ !!g.isLeftToRight() ? step : -step;
|
@@ -415,7 +415,12 @@ define([
|
|
415
415
|
t.connect(g.body, 'onAfterCell', _onAftercell);
|
416
416
|
}
|
417
417
|
g.domNode.removeAttribute('aria-readonly');
|
418
|
-
t.connect(g, 'onCellDblClick',
|
418
|
+
t.connect(g, 'onCellDblClick', function(evt){
|
419
|
+
if(!domClass.contains(evt.target, 'gridxTreeExpandoIcon') &&
|
420
|
+
!domClass.contains(evt.target, 'gridxTreeExpandoInner')){
|
421
|
+
t._onUIBegin(evt);
|
422
|
+
}
|
423
|
+
});
|
419
424
|
t.connect(g.cellWidget, 'onCellWidgetCreated', '_onCellWidgetCreated');
|
420
425
|
t.connect(g.cellWidget, 'initializeCellWidget', function(widget, cell){
|
421
426
|
var column = cell.column;
|
@@ -774,7 +779,10 @@ define([
|
|
774
779
|
var delay = column.editorArgs && column.editorArgs.applyDelay || 500;
|
775
780
|
clearTimeout(editor._timeoutApply);
|
776
781
|
editor._timeoutApply = setTimeout(function(){
|
777
|
-
|
782
|
+
var rowId = rn.getAttribute('rowid');
|
783
|
+
t.apply(rowId, column.id).then(function(){
|
784
|
+
t._focusEditor(rowId, column.id);
|
785
|
+
});
|
778
786
|
}, delay);
|
779
787
|
}
|
780
788
|
});
|
@@ -965,19 +973,14 @@ define([
|
|
965
973
|
this._editing = false;
|
966
974
|
var focus = this.grid.focus;
|
967
975
|
if(focus){
|
968
|
-
|
969
|
-
setTimeout(function(){
|
970
|
-
focus.focusArea('body');
|
971
|
-
}, 1);
|
972
|
-
}else{
|
973
|
-
focus.focusArea('body');
|
974
|
-
}
|
976
|
+
focus.focusArea('body');
|
975
977
|
}
|
976
978
|
},
|
977
979
|
|
978
980
|
_onKey: function(e){
|
979
981
|
var t = this,
|
980
982
|
g = t.grid,
|
983
|
+
ctrlKey = g._isCtrlKey(e),
|
981
984
|
col = g._columnsById[e.columnId];
|
982
985
|
if(col.editable){
|
983
986
|
var editing = t.isEditing(e.rowId, e.columnId);
|
@@ -1000,24 +1003,24 @@ define([
|
|
1000
1003
|
t.cancel(e.rowId, e.columnId).then(lang.hitch(t, t._blur)).then(function(){
|
1001
1004
|
g.focus.focusArea('body');
|
1002
1005
|
});
|
1003
|
-
}else if(e.keyCode == 'Z'.charCodeAt(0) &&
|
1006
|
+
}else if(e.keyCode == 'Z'.charCodeAt(0) && ctrlKey){
|
1004
1007
|
if(t.arg('lazySave')){
|
1005
1008
|
t.model.undo();
|
1006
1009
|
}
|
1007
|
-
}else if(e.keyCode == 'Y'.charCodeAt(0) &&
|
1010
|
+
}else if(e.keyCode == 'Y'.charCodeAt(0) && ctrlKey){
|
1008
1011
|
if(t.arg('lazySave')){
|
1009
1012
|
t.model.redo();
|
1010
1013
|
}
|
1011
|
-
}else if(e.keyCode == 'S'.charCodeAt(0) &&
|
1014
|
+
}else if(e.keyCode == 'S'.charCodeAt(0) && ctrlKey){
|
1012
1015
|
if(t.arg('lazySave')){
|
1013
1016
|
t.model.save();
|
1014
1017
|
e.preventDefault();
|
1015
1018
|
}
|
1016
1019
|
}
|
1017
1020
|
}
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
+
// if(t._editing && e.keyCode !== keys.TAB){
|
1022
|
+
// e.stopPropagation();
|
1023
|
+
// }
|
1021
1024
|
}
|
1022
1025
|
|
1023
1026
|
});
|