jsxgrid 2.0.0
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.
- package/LICENSE +23 -0
- package/README.md +2329 -0
- package/dist/fields/jsgrid.field.XDateTimeField.min.js +6 -0
- package/dist/fields/jsgrid.field.XRowSelectField.min.js +6 -0
- package/dist/fields/jsgrid.field.Xcheckbox.min.js +6 -0
- package/dist/fields/jsgrid.field.XimgField.min.js +6 -0
- package/dist/fields/jsgrid.field.Xjsoneditor.min.js +6 -0
- package/dist/fields/jsgrid.field.Xselect.min.js +6 -0
- package/dist/fields/jsgrid.field.Xtextarea.min.js +6 -0
- package/dist/fields/lib/jsGridSummaryPlugin.min.js +6 -0
- package/dist/fields/lib/jsgrid.popup.basic.min.js +6 -0
- package/dist/i18n/jsgrid-Ko.js +46 -0
- package/dist/i18n/jsgrid-cs.js +46 -0
- package/dist/i18n/jsgrid-de.js +46 -0
- package/dist/i18n/jsgrid-el.js +46 -0
- package/dist/i18n/jsgrid-es.js +46 -0
- package/dist/i18n/jsgrid-fa.js +46 -0
- package/dist/i18n/jsgrid-fr.js +47 -0
- package/dist/i18n/jsgrid-he.js +46 -0
- package/dist/i18n/jsgrid-it.js +47 -0
- package/dist/i18n/jsgrid-ja.js +46 -0
- package/dist/i18n/jsgrid-ka.js +46 -0
- package/dist/i18n/jsgrid-lt.js +47 -0
- package/dist/i18n/jsgrid-pl.js +62 -0
- package/dist/i18n/jsgrid-pt-br.js +46 -0
- package/dist/i18n/jsgrid-pt.js +46 -0
- package/dist/i18n/jsgrid-ru.js +47 -0
- package/dist/i18n/jsgrid-tr.js +47 -0
- package/dist/i18n/jsgrid-zh-cn.js +46 -0
- package/dist/i18n/jsgrid-zh-tw.js +46 -0
- package/dist/icons-2x.png +0 -0
- package/dist/icons.png +0 -0
- package/dist/jsxgrid-fields.js +606 -0
- package/dist/jsxgrid-fields.min.js +6 -0
- package/dist/jsxgrid-theme.css +258 -0
- package/dist/jsxgrid-theme.min.css +1 -0
- package/dist/jsxgrid-xfields.js +979 -0
- package/dist/jsxgrid-xfields.min.js +6 -0
- package/dist/jsxgrid.css +126 -0
- package/dist/jsxgrid.js +2137 -0
- package/dist/jsxgrid.min.css +1 -0
- package/dist/jsxgrid.min.js +6 -0
- package/package.json +57 -0
- package/src/fields/jsgrid.field.XDateTimeField.js +122 -0
- package/src/fields/jsgrid.field.XRowSelectField.js +62 -0
- package/src/fields/jsgrid.field.Xcheckbox.js +108 -0
- package/src/fields/jsgrid.field.XimgField.js +99 -0
- package/src/fields/jsgrid.field.Xjsoneditor.js +165 -0
- package/src/fields/jsgrid.field.Xselect.js +176 -0
- package/src/fields/jsgrid.field.Xtextarea.js +97 -0
- package/src/fields/jsgrid.field.checkbox.js +97 -0
- package/src/fields/jsgrid.field.control.js +224 -0
- package/src/fields/jsgrid.field.number.js +41 -0
- package/src/fields/jsgrid.field.select.js +130 -0
- package/src/fields/jsgrid.field.text.js +69 -0
- package/src/fields/jsgrid.field.textarea.js +34 -0
- package/src/i18n/Ko.js +46 -0
- package/src/i18n/cs.js +46 -0
- package/src/i18n/de.js +46 -0
- package/src/i18n/el.js +46 -0
- package/src/i18n/es.js +46 -0
- package/src/i18n/fa.js +46 -0
- package/src/i18n/fr.js +47 -0
- package/src/i18n/he.js +46 -0
- package/src/i18n/it.js +47 -0
- package/src/i18n/ja.js +46 -0
- package/src/i18n/ka.js +46 -0
- package/src/i18n/lt.js +47 -0
- package/src/i18n/pl.js +62 -0
- package/src/i18n/pt-br.js +46 -0
- package/src/i18n/pt.js +46 -0
- package/src/i18n/ru.js +47 -0
- package/src/i18n/tr.js +47 -0
- package/src/i18n/zh-cn.js +46 -0
- package/src/i18n/zh-tw.js +46 -0
- package/src/jsgrid.core.js +1655 -0
- package/src/jsgrid.field.js +74 -0
- package/src/jsgrid.load-indicator.js +82 -0
- package/src/jsgrid.load-strategies.js +131 -0
- package/src/jsgrid.sort-strategies.js +49 -0
- package/src/jsgrid.validation.js +135 -0
- package/src/lib/jsGridSummaryPlugin.js +37 -0
- package/src/lib/jsgrid.popup.basic.js +107 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
|
|
3
|
+
* (c) 2026 Mikhail Kremza
|
|
4
|
+
* Licensed under MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
(function(jsGrid, $, undefined) {
|
|
8
|
+
|
|
9
|
+
var Field = jsGrid.Field;
|
|
10
|
+
|
|
11
|
+
function TextField(config) {
|
|
12
|
+
Field.call(this, config);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
TextField.prototype = new Field({
|
|
16
|
+
|
|
17
|
+
autosearch: true,
|
|
18
|
+
readOnly: false,
|
|
19
|
+
|
|
20
|
+
filterTemplate: function() {
|
|
21
|
+
if(!this.filtering)
|
|
22
|
+
return "";
|
|
23
|
+
|
|
24
|
+
var grid = this._grid,
|
|
25
|
+
$result = this.filterControl = this._createTextBox();
|
|
26
|
+
|
|
27
|
+
if(this.autosearch) {
|
|
28
|
+
$result.on("keypress", function(e) {
|
|
29
|
+
if(e.which === 13) {
|
|
30
|
+
grid.search();
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return $result;
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
insertTemplate: function() {
|
|
40
|
+
if(!this.inserting)
|
|
41
|
+
return "";
|
|
42
|
+
|
|
43
|
+
return this.insertControl = this._createTextBox();
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
editTemplate: function(value) {
|
|
47
|
+
if(!this.editing)
|
|
48
|
+
return this.itemTemplate.apply(this, arguments);
|
|
49
|
+
|
|
50
|
+
var $result = this.editControl = this._createTextBox();
|
|
51
|
+
$result.val(value);
|
|
52
|
+
return $result;
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
filterValue: function() {
|
|
56
|
+
return this.filterControl.val();
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
insertValue: function() {
|
|
60
|
+
return this.insertControl.val();
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
editValue: function() {
|
|
64
|
+
return this.editControl.val();
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
_createTextBox: function() {
|
|
68
|
+
return $("<input>").attr("type", "text")
|
|
69
|
+
.prop("readonly", !!this.readOnly);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
jsGrid.fields.text = jsGrid.TextField = TextField;
|
|
74
|
+
|
|
75
|
+
}(jsGrid, jQuery));
|
|
76
|
+
|
|
77
|
+
(function(jsGrid, $, undefined) {
|
|
78
|
+
|
|
79
|
+
var TextField = jsGrid.TextField;
|
|
80
|
+
|
|
81
|
+
function NumberField(config) {
|
|
82
|
+
TextField.call(this, config);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
NumberField.prototype = new TextField({
|
|
86
|
+
|
|
87
|
+
sorter: "number",
|
|
88
|
+
align: "right",
|
|
89
|
+
readOnly: false,
|
|
90
|
+
|
|
91
|
+
filterValue: function() {
|
|
92
|
+
return this.filterControl.val()
|
|
93
|
+
? parseInt(this.filterControl.val() || 0, 10)
|
|
94
|
+
: undefined;
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
insertValue: function() {
|
|
98
|
+
return this.insertControl.val()
|
|
99
|
+
? parseInt(this.insertControl.val() || 0, 10)
|
|
100
|
+
: undefined;
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
editValue: function() {
|
|
104
|
+
return this.editControl.val()
|
|
105
|
+
? parseInt(this.editControl.val() || 0, 10)
|
|
106
|
+
: undefined;
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
_createTextBox: function() {
|
|
110
|
+
return $("<input>").attr("type", "number")
|
|
111
|
+
.prop("readonly", !!this.readOnly);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
jsGrid.fields.number = jsGrid.NumberField = NumberField;
|
|
116
|
+
|
|
117
|
+
}(jsGrid, jQuery));
|
|
118
|
+
|
|
119
|
+
(function(jsGrid, $, undefined) {
|
|
120
|
+
|
|
121
|
+
var TextField = jsGrid.TextField;
|
|
122
|
+
|
|
123
|
+
function TextAreaField(config) {
|
|
124
|
+
TextField.call(this, config);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
TextAreaField.prototype = new TextField({
|
|
128
|
+
|
|
129
|
+
insertTemplate: function() {
|
|
130
|
+
if(!this.inserting)
|
|
131
|
+
return "";
|
|
132
|
+
|
|
133
|
+
return this.insertControl = this._createTextArea();
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
editTemplate: function(value) {
|
|
137
|
+
if(!this.editing)
|
|
138
|
+
return this.itemTemplate.apply(this, arguments);
|
|
139
|
+
|
|
140
|
+
var $result = this.editControl = this._createTextArea();
|
|
141
|
+
$result.val(value);
|
|
142
|
+
return $result;
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
_createTextArea: function() {
|
|
146
|
+
return $("<textarea>").prop("readonly", !!this.readOnly);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
jsGrid.fields.textarea = jsGrid.TextAreaField = TextAreaField;
|
|
151
|
+
|
|
152
|
+
}(jsGrid, jQuery));
|
|
153
|
+
|
|
154
|
+
(function(jsGrid, $, undefined) {
|
|
155
|
+
|
|
156
|
+
var NumberField = jsGrid.NumberField;
|
|
157
|
+
var numberValueType = "number";
|
|
158
|
+
var stringValueType = "string";
|
|
159
|
+
|
|
160
|
+
function SelectField(config) {
|
|
161
|
+
this.items = [];
|
|
162
|
+
this.selectedIndex = -1;
|
|
163
|
+
this.valueField = "";
|
|
164
|
+
this.textField = "";
|
|
165
|
+
|
|
166
|
+
if(config.valueField && config.items.length) {
|
|
167
|
+
var firstItemValue = config.items[0][config.valueField];
|
|
168
|
+
this.valueType = (typeof firstItemValue) === numberValueType ? numberValueType : stringValueType;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
this.sorter = this.valueType;
|
|
172
|
+
|
|
173
|
+
NumberField.call(this, config);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
SelectField.prototype = new NumberField({
|
|
177
|
+
|
|
178
|
+
align: "center",
|
|
179
|
+
valueType: numberValueType,
|
|
180
|
+
|
|
181
|
+
itemTemplate: function(value) {
|
|
182
|
+
var items = this.items,
|
|
183
|
+
valueField = this.valueField,
|
|
184
|
+
textField = this.textField,
|
|
185
|
+
resultItem;
|
|
186
|
+
|
|
187
|
+
if(valueField) {
|
|
188
|
+
if(typeof(value) === "object"){
|
|
189
|
+
resultItem = value;
|
|
190
|
+
}
|
|
191
|
+
else{
|
|
192
|
+
resultItem = $.grep(items, function(item, index) {
|
|
193
|
+
return item[valueField] === value;
|
|
194
|
+
})[0] || {};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
resultItem = items[value];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
var result = (textField ? resultItem[textField] : resultItem);
|
|
202
|
+
|
|
203
|
+
return (result === undefined || result === null) ? "" : result;
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
filterTemplate: function() {
|
|
207
|
+
if(!this.filtering)
|
|
208
|
+
return "";
|
|
209
|
+
|
|
210
|
+
var grid = this._grid,
|
|
211
|
+
$result = this.filterControl = this._createSelect();
|
|
212
|
+
|
|
213
|
+
if(this.autosearch) {
|
|
214
|
+
$result.on("change", function(e) {
|
|
215
|
+
grid.search();
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return $result;
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
insertTemplate: function() {
|
|
223
|
+
if(!this.inserting)
|
|
224
|
+
return "";
|
|
225
|
+
|
|
226
|
+
return this.insertControl = this._createSelect();
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
editTemplate: function(value) {
|
|
230
|
+
if(!this.editing)
|
|
231
|
+
return this.itemTemplate.apply(this, arguments);
|
|
232
|
+
|
|
233
|
+
var $result = this.editControl = this._createSelect();
|
|
234
|
+
var editValue = value;
|
|
235
|
+
if(typeof(value) === "object"){
|
|
236
|
+
editValue = value[this.valueField];
|
|
237
|
+
}
|
|
238
|
+
(editValue !== undefined) && $result.val(editValue);
|
|
239
|
+
return $result;
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
filterValue: function() {
|
|
243
|
+
var val = this.filterControl.val();
|
|
244
|
+
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
|
245
|
+
},
|
|
246
|
+
|
|
247
|
+
insertValue: function() {
|
|
248
|
+
var val = this.insertControl.val();
|
|
249
|
+
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
editValue: function() {
|
|
253
|
+
var val = this.editControl.val();
|
|
254
|
+
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
_createSelect: function() {
|
|
258
|
+
var $result = $("<select>"),
|
|
259
|
+
valueField = this.valueField,
|
|
260
|
+
textField = this.textField,
|
|
261
|
+
selectedIndex = this.selectedIndex;
|
|
262
|
+
|
|
263
|
+
$.each(this.items, function(index, item) {
|
|
264
|
+
var value = valueField ? item[valueField] : index,
|
|
265
|
+
text = textField ? item[textField] : item;
|
|
266
|
+
|
|
267
|
+
var $option = $("<option>")
|
|
268
|
+
.attr("value", value)
|
|
269
|
+
.text(text)
|
|
270
|
+
.appendTo($result);
|
|
271
|
+
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
$result.prop("disabled", !!this.readOnly);
|
|
275
|
+
$result.prop("selectedIndex", selectedIndex);
|
|
276
|
+
|
|
277
|
+
return $result;
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
jsGrid.fields.select = jsGrid.SelectField = SelectField;
|
|
282
|
+
|
|
283
|
+
}(jsGrid, jQuery));
|
|
284
|
+
|
|
285
|
+
(function(jsGrid, $, undefined) {
|
|
286
|
+
|
|
287
|
+
var Field = jsGrid.Field;
|
|
288
|
+
|
|
289
|
+
function CheckboxField(config) {
|
|
290
|
+
Field.call(this, config);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
CheckboxField.prototype = new Field({
|
|
294
|
+
|
|
295
|
+
sorter: "number",
|
|
296
|
+
align: "center",
|
|
297
|
+
autosearch: true,
|
|
298
|
+
|
|
299
|
+
itemTemplate: function(value) {
|
|
300
|
+
return this._createCheckbox().prop({
|
|
301
|
+
checked: value,
|
|
302
|
+
disabled: true
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
filterTemplate: function() {
|
|
307
|
+
if(!this.filtering)
|
|
308
|
+
return "";
|
|
309
|
+
|
|
310
|
+
var grid = this._grid,
|
|
311
|
+
$result = this.filterControl = this._createCheckbox();
|
|
312
|
+
|
|
313
|
+
$result.prop({
|
|
314
|
+
readOnly: true,
|
|
315
|
+
indeterminate: true
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
$result.on("click", function() {
|
|
319
|
+
var $cb = $(this);
|
|
320
|
+
|
|
321
|
+
if($cb.prop("readOnly")) {
|
|
322
|
+
$cb.prop({
|
|
323
|
+
checked: false,
|
|
324
|
+
readOnly: false
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
else if(!$cb.prop("checked")) {
|
|
328
|
+
$cb.prop({
|
|
329
|
+
readOnly: true,
|
|
330
|
+
indeterminate: true
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
if(this.autosearch) {
|
|
336
|
+
$result.on("click", function() {
|
|
337
|
+
grid.search();
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return $result;
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
insertTemplate: function() {
|
|
345
|
+
if(!this.inserting)
|
|
346
|
+
return "";
|
|
347
|
+
|
|
348
|
+
return this.insertControl = this._createCheckbox();
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
editTemplate: function(value) {
|
|
352
|
+
if(!this.editing)
|
|
353
|
+
return this.itemTemplate.apply(this, arguments);
|
|
354
|
+
|
|
355
|
+
var $result = this.editControl = this._createCheckbox();
|
|
356
|
+
$result.prop("checked", value);
|
|
357
|
+
return $result;
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
filterValue: function() {
|
|
361
|
+
return this.filterControl.get(0).indeterminate
|
|
362
|
+
? undefined
|
|
363
|
+
: this.filterControl.is(":checked");
|
|
364
|
+
},
|
|
365
|
+
|
|
366
|
+
insertValue: function() {
|
|
367
|
+
return this.insertControl.is(":checked");
|
|
368
|
+
},
|
|
369
|
+
|
|
370
|
+
editValue: function() {
|
|
371
|
+
return this.editControl.is(":checked");
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
_createCheckbox: function() {
|
|
375
|
+
return $("<input>").attr("type", "checkbox");
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
jsGrid.fields.checkbox = jsGrid.CheckboxField = CheckboxField;
|
|
380
|
+
|
|
381
|
+
}(jsGrid, jQuery));
|
|
382
|
+
|
|
383
|
+
(function(jsGrid, $, undefined) {
|
|
384
|
+
|
|
385
|
+
var Field = jsGrid.Field;
|
|
386
|
+
|
|
387
|
+
function ControlField(config) {
|
|
388
|
+
Field.call(this, config);
|
|
389
|
+
this.includeInDataExport = false;
|
|
390
|
+
this._configInitialized = false;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
ControlField.prototype = new Field({
|
|
394
|
+
css: "jsgrid-control-field",
|
|
395
|
+
align: "center",
|
|
396
|
+
width: 50,
|
|
397
|
+
filtering: false,
|
|
398
|
+
inserting: false,
|
|
399
|
+
editing: false,
|
|
400
|
+
sorting: false,
|
|
401
|
+
|
|
402
|
+
buttonClass: "jsgrid-button",
|
|
403
|
+
modeButtonClass: "jsgrid-mode-button",
|
|
404
|
+
|
|
405
|
+
modeOnButtonClass: "jsgrid-mode-on-button",
|
|
406
|
+
searchModeButtonClass: "jsgrid-search-mode-button",
|
|
407
|
+
insertModeButtonClass: "jsgrid-insert-mode-button",
|
|
408
|
+
editButtonClass: "jsgrid-edit-button",
|
|
409
|
+
deleteButtonClass: "jsgrid-delete-button",
|
|
410
|
+
searchButtonClass: "jsgrid-search-button",
|
|
411
|
+
clearFilterButtonClass: "jsgrid-clear-filter-button",
|
|
412
|
+
insertButtonClass: "jsgrid-insert-button",
|
|
413
|
+
updateButtonClass: "jsgrid-update-button",
|
|
414
|
+
cancelEditButtonClass: "jsgrid-cancel-edit-button",
|
|
415
|
+
|
|
416
|
+
searchModeButtonTooltip: "Switch to searching",
|
|
417
|
+
insertModeButtonTooltip: "Switch to inserting",
|
|
418
|
+
editButtonTooltip: "Edit",
|
|
419
|
+
deleteButtonTooltip: "Delete",
|
|
420
|
+
searchButtonTooltip: "Search",
|
|
421
|
+
clearFilterButtonTooltip: "Clear filter",
|
|
422
|
+
insertButtonTooltip: "Insert",
|
|
423
|
+
updateButtonTooltip: "Update",
|
|
424
|
+
cancelEditButtonTooltip: "Cancel edit",
|
|
425
|
+
|
|
426
|
+
editButton: true,
|
|
427
|
+
deleteButton: true,
|
|
428
|
+
clearFilterButton: true,
|
|
429
|
+
modeSwitchButton: true,
|
|
430
|
+
|
|
431
|
+
_initConfig: function() {
|
|
432
|
+
this._hasFiltering = this._grid.filtering;
|
|
433
|
+
this._hasInserting = this._grid.inserting;
|
|
434
|
+
|
|
435
|
+
if(this._hasInserting && this.modeSwitchButton) {
|
|
436
|
+
this._grid.inserting = false;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
this._configInitialized = true;
|
|
440
|
+
},
|
|
441
|
+
|
|
442
|
+
headerTemplate: function() {
|
|
443
|
+
if(!this._configInitialized) {
|
|
444
|
+
this._initConfig();
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
var hasFiltering = this._hasFiltering;
|
|
448
|
+
var hasInserting = this._hasInserting;
|
|
449
|
+
|
|
450
|
+
if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))
|
|
451
|
+
return "";
|
|
452
|
+
|
|
453
|
+
if(hasFiltering && !hasInserting)
|
|
454
|
+
return this._createFilterSwitchButton();
|
|
455
|
+
|
|
456
|
+
if(hasInserting && !hasFiltering)
|
|
457
|
+
return this._createInsertSwitchButton();
|
|
458
|
+
|
|
459
|
+
return this._createModeSwitchButton();
|
|
460
|
+
},
|
|
461
|
+
|
|
462
|
+
itemTemplate: function(value, item) {
|
|
463
|
+
var $result = $([]);
|
|
464
|
+
|
|
465
|
+
if(this.editButton) {
|
|
466
|
+
$result = $result.add(this._createEditButton(item));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if(this.deleteButton) {
|
|
470
|
+
$result = $result.add(this._createDeleteButton(item));
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
return $result;
|
|
474
|
+
},
|
|
475
|
+
|
|
476
|
+
filterTemplate: function() {
|
|
477
|
+
var $result = this._createSearchButton();
|
|
478
|
+
return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;
|
|
479
|
+
},
|
|
480
|
+
|
|
481
|
+
insertTemplate: function() {
|
|
482
|
+
return this._createInsertButton();
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
editTemplate: function() {
|
|
486
|
+
return this._createUpdateButton().add(this._createCancelEditButton());
|
|
487
|
+
},
|
|
488
|
+
|
|
489
|
+
_createFilterSwitchButton: function() {
|
|
490
|
+
return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, true);
|
|
491
|
+
},
|
|
492
|
+
|
|
493
|
+
_createInsertSwitchButton: function() {
|
|
494
|
+
return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, false);
|
|
495
|
+
},
|
|
496
|
+
|
|
497
|
+
_createOnOffSwitchButton: function(option, cssClass, isOnInitially) {
|
|
498
|
+
var isOn = isOnInitially;
|
|
499
|
+
|
|
500
|
+
var updateButtonState = $.proxy(function() {
|
|
501
|
+
$button.toggleClass(this.modeOnButtonClass, isOn);
|
|
502
|
+
}, this);
|
|
503
|
+
|
|
504
|
+
var $button = this._createGridButton(this.modeButtonClass + " " + cssClass, "", function(grid) {
|
|
505
|
+
isOn = !isOn;
|
|
506
|
+
grid.option(option, isOn);
|
|
507
|
+
updateButtonState();
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
updateButtonState();
|
|
511
|
+
|
|
512
|
+
return $button;
|
|
513
|
+
},
|
|
514
|
+
|
|
515
|
+
_createModeSwitchButton: function() {
|
|
516
|
+
var isInserting = false;
|
|
517
|
+
|
|
518
|
+
var updateButtonState = $.proxy(function() {
|
|
519
|
+
$button.attr("title", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)
|
|
520
|
+
.toggleClass(this.insertModeButtonClass, !isInserting)
|
|
521
|
+
.toggleClass(this.searchModeButtonClass, isInserting);
|
|
522
|
+
}, this);
|
|
523
|
+
|
|
524
|
+
var $button = this._createGridButton(this.modeButtonClass, "", function(grid) {
|
|
525
|
+
isInserting = !isInserting;
|
|
526
|
+
grid.option("inserting", isInserting);
|
|
527
|
+
grid.option("filtering", !isInserting);
|
|
528
|
+
updateButtonState();
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
updateButtonState();
|
|
532
|
+
|
|
533
|
+
return $button;
|
|
534
|
+
},
|
|
535
|
+
|
|
536
|
+
_createEditButton: function(item) {
|
|
537
|
+
return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {
|
|
538
|
+
grid.editItem(item);
|
|
539
|
+
e.stopPropagation();
|
|
540
|
+
});
|
|
541
|
+
},
|
|
542
|
+
|
|
543
|
+
_createDeleteButton: function(item) {
|
|
544
|
+
return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {
|
|
545
|
+
grid.deleteItem(item);
|
|
546
|
+
e.stopPropagation();
|
|
547
|
+
});
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
_createSearchButton: function() {
|
|
551
|
+
return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {
|
|
552
|
+
grid.search();
|
|
553
|
+
});
|
|
554
|
+
},
|
|
555
|
+
|
|
556
|
+
_createClearFilterButton: function() {
|
|
557
|
+
return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {
|
|
558
|
+
grid.clearFilter();
|
|
559
|
+
});
|
|
560
|
+
},
|
|
561
|
+
|
|
562
|
+
_createInsertButton: function() {
|
|
563
|
+
return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {
|
|
564
|
+
grid.insertItem().done(function() {
|
|
565
|
+
grid.clearInsert();
|
|
566
|
+
});
|
|
567
|
+
});
|
|
568
|
+
},
|
|
569
|
+
|
|
570
|
+
_createUpdateButton: function() {
|
|
571
|
+
return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {
|
|
572
|
+
grid.updateItem();
|
|
573
|
+
e.stopPropagation();
|
|
574
|
+
});
|
|
575
|
+
},
|
|
576
|
+
|
|
577
|
+
_createCancelEditButton: function() {
|
|
578
|
+
return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {
|
|
579
|
+
grid.cancelEdit();
|
|
580
|
+
e.stopPropagation();
|
|
581
|
+
});
|
|
582
|
+
},
|
|
583
|
+
|
|
584
|
+
_createGridButton: function(cls, tooltip, clickHandler) {
|
|
585
|
+
var grid = this._grid;
|
|
586
|
+
|
|
587
|
+
return $("<input>").addClass(this.buttonClass)
|
|
588
|
+
.addClass(cls)
|
|
589
|
+
.attr({
|
|
590
|
+
type: "button",
|
|
591
|
+
title: tooltip
|
|
592
|
+
})
|
|
593
|
+
.on("click", function(e) {
|
|
594
|
+
clickHandler(grid, e);
|
|
595
|
+
});
|
|
596
|
+
},
|
|
597
|
+
|
|
598
|
+
editValue: function() {
|
|
599
|
+
return "";
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
jsGrid.fields.control = jsGrid.ControlField = ControlField;
|
|
605
|
+
|
|
606
|
+
}(jsGrid, jQuery));
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
|
|
3
|
+
* (c) 2026 Mikhail Kremza
|
|
4
|
+
* Licensed under MIT
|
|
5
|
+
*/
|
|
6
|
+
((t,e)=>{var i=t.Field;function n(t){i.call(this,t)}n.prototype=new i({autosearch:!0,readOnly:!1,filterTemplate:function(){var e,t;return this.filtering?(e=this._grid,t=this.filterControl=this._createTextBox(),this.autosearch&&t.on("keypress",function(t){13===t.which&&(e.search(),t.preventDefault())}),t):""},insertTemplate:function(){return this.inserting?this.insertControl=this._createTextBox():""},editTemplate:function(t){var e;return this.editing?((e=this.editControl=this._createTextBox()).val(t),e):this.itemTemplate.apply(this,arguments)},filterValue:function(){return this.filterControl.val()},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return e("<input>").attr("type","text").prop("readonly",!!this.readOnly)}}),t.fields.text=t.TextField=n})(jsGrid,jQuery),((t,e,i)=>{var n=t.TextField;function r(t){n.call(this,t)}r.prototype=new n({sorter:"number",align:"right",readOnly:!1,filterValue:function(){return this.filterControl.val()?parseInt(this.filterControl.val()||0,10):i},insertValue:function(){return this.insertControl.val()?parseInt(this.insertControl.val()||0,10):i},editValue:function(){return this.editControl.val()?parseInt(this.editControl.val()||0,10):i},_createTextBox:function(){return e("<input>").attr("type","number").prop("readonly",!!this.readOnly)}}),t.fields.number=t.NumberField=r})(jsGrid,jQuery),((t,e)=>{var i=t.TextField;function n(t){i.call(this,t)}n.prototype=new i({insertTemplate:function(){return this.inserting?this.insertControl=this._createTextArea():""},editTemplate:function(t){var e;return this.editing?((e=this.editControl=this._createTextArea()).val(t),e):this.itemTemplate.apply(this,arguments)},_createTextArea:function(){return e("<textarea>").prop("readonly",!!this.readOnly)}}),t.fields.textarea=t.TextAreaField=n})(jsGrid,jQuery),((t,o,r)=>{var i=t.NumberField,n="number";function e(t){var e;this.items=[],this.selectedIndex=-1,this.valueField="",this.textField="",t.valueField&&t.items.length&&(e=t.items[0][t.valueField],this.valueType=typeof e==n?n:"string"),this.sorter=this.valueType,i.call(this,t)}e.prototype=new i({align:"center",valueType:n,itemTemplate:function(i){var t=this.items,n=this.valueField,e=this.textField,t=n?"object"==typeof i?i:o.grep(t,function(t,e){return t[n]===i})[0]||{}:t[i],e=e?t[e]:t;return e===r||null===e?"":e},filterTemplate:function(){var e,t;return this.filtering?(e=this._grid,t=this.filterControl=this._createSelect(),this.autosearch&&t.on("change",function(t){e.search()}),t):""},insertTemplate:function(){return this.inserting?this.insertControl=this._createSelect():""},editTemplate:function(t){var e,i;return this.editing?(e=this.editControl=this._createSelect(),(i="object"==typeof(i=t)?t[this.valueField]:t)!==r&&e.val(i),e):this.itemTemplate.apply(this,arguments)},filterValue:function(){var t=this.filterControl.val();return this.valueType===n?parseInt(t||0,10):t},insertValue:function(){var t=this.insertControl.val();return this.valueType===n?parseInt(t||0,10):t},editValue:function(){var t=this.editControl.val();return this.valueType===n?parseInt(t||0,10):t},_createSelect:function(){var i=o("<select>"),n=this.valueField,r=this.textField,t=this.selectedIndex;return o.each(this.items,function(t,e){t=n?e[n]:t,e=r?e[r]:e;o("<option>").attr("value",t).text(e).appendTo(i)}),i.prop("disabled",!!this.readOnly),i.prop("selectedIndex",t),i}}),t.fields.select=t.SelectField=e})(jsGrid,jQuery),((t,i)=>{var e=t.Field;function n(t){e.call(this,t)}n.prototype=new e({sorter:"number",align:"center",autosearch:!0,itemTemplate:function(t){return this._createCheckbox().prop({checked:t,disabled:!0})},filterTemplate:function(){var t,e;return this.filtering?(t=this._grid,(e=this.filterControl=this._createCheckbox()).prop({readOnly:!0,indeterminate:!0}),e.on("click",function(){var t=i(this);t.prop("readOnly")?t.prop({checked:!1,readOnly:!1}):t.prop("checked")||t.prop({readOnly:!0,indeterminate:!0})}),this.autosearch&&e.on("click",function(){t.search()}),e):""},insertTemplate:function(){return this.inserting?this.insertControl=this._createCheckbox():""},editTemplate:function(t){var e;return this.editing?((e=this.editControl=this._createCheckbox()).prop("checked",t),e):this.itemTemplate.apply(this,arguments)},filterValue:function(){return this.filterControl.get(0).indeterminate?void 0:this.filterControl.is(":checked")},insertValue:function(){return this.insertControl.is(":checked")},editValue:function(){return this.editControl.is(":checked")},_createCheckbox:function(){return i("<input>").attr("type","checkbox")}}),t.fields.checkbox=t.CheckboxField=n})(jsGrid,jQuery),((t,s)=>{var e=t.Field;function i(t){e.call(this,t),this.includeInDataExport=!1,this._configInitialized=!1}i.prototype=new e({css:"jsgrid-control-field",align:"center",width:50,filtering:!1,inserting:!1,editing:!1,sorting:!1,buttonClass:"jsgrid-button",modeButtonClass:"jsgrid-mode-button",modeOnButtonClass:"jsgrid-mode-on-button",searchModeButtonClass:"jsgrid-search-mode-button",insertModeButtonClass:"jsgrid-insert-mode-button",editButtonClass:"jsgrid-edit-button",deleteButtonClass:"jsgrid-delete-button",searchButtonClass:"jsgrid-search-button",clearFilterButtonClass:"jsgrid-clear-filter-button",insertButtonClass:"jsgrid-insert-button",updateButtonClass:"jsgrid-update-button",cancelEditButtonClass:"jsgrid-cancel-edit-button",searchModeButtonTooltip:"Switch to searching",insertModeButtonTooltip:"Switch to inserting",editButtonTooltip:"Edit",deleteButtonTooltip:"Delete",searchButtonTooltip:"Search",clearFilterButtonTooltip:"Clear filter",insertButtonTooltip:"Insert",updateButtonTooltip:"Update",cancelEditButtonTooltip:"Cancel edit",editButton:!0,deleteButton:!0,clearFilterButton:!0,modeSwitchButton:!0,_initConfig:function(){this._hasFiltering=this._grid.filtering,this._hasInserting=this._grid.inserting,this._hasInserting&&this.modeSwitchButton&&(this._grid.inserting=!1),this._configInitialized=!0},headerTemplate:function(){this._configInitialized||this._initConfig();var t=this._hasFiltering,e=this._hasInserting;return this.modeSwitchButton&&(t||e)?t&&!e?this._createFilterSwitchButton():e&&!t?this._createInsertSwitchButton():this._createModeSwitchButton():""},itemTemplate:function(t,e){var i=s([]);return this.editButton&&(i=i.add(this._createEditButton(e))),i=this.deleteButton?i.add(this._createDeleteButton(e)):i},filterTemplate:function(){var t=this._createSearchButton();return this.clearFilterButton?t.add(this._createClearFilterButton()):t},insertTemplate:function(){return this._createInsertButton()},editTemplate:function(){return this._createUpdateButton().add(this._createCancelEditButton())},_createFilterSwitchButton:function(){return this._createOnOffSwitchButton("filtering",this.searchModeButtonClass,!0)},_createInsertSwitchButton:function(){return this._createOnOffSwitchButton("inserting",this.insertModeButtonClass,!1)},_createOnOffSwitchButton:function(e,t,i){var n=i,r=s.proxy(function(){o.toggleClass(this.modeOnButtonClass,n)},this),o=this._createGridButton(this.modeButtonClass+" "+t,"",function(t){n=!n,t.option(e,n),r()});return r(),o},_createModeSwitchButton:function(){var e=!1,i=s.proxy(function(){t.attr("title",e?this.searchModeButtonTooltip:this.insertModeButtonTooltip).toggleClass(this.insertModeButtonClass,!e).toggleClass(this.searchModeButtonClass,e)},this),t=this._createGridButton(this.modeButtonClass,"",function(t){e=!e,t.option("inserting",e),t.option("filtering",!e),i()});return i(),t},_createEditButton:function(i){return this._createGridButton(this.editButtonClass,this.editButtonTooltip,function(t,e){t.editItem(i),e.stopPropagation()})},_createDeleteButton:function(i){return this._createGridButton(this.deleteButtonClass,this.deleteButtonTooltip,function(t,e){t.deleteItem(i),e.stopPropagation()})},_createSearchButton:function(){return this._createGridButton(this.searchButtonClass,this.searchButtonTooltip,function(t){t.search()})},_createClearFilterButton:function(){return this._createGridButton(this.clearFilterButtonClass,this.clearFilterButtonTooltip,function(t){t.clearFilter()})},_createInsertButton:function(){return this._createGridButton(this.insertButtonClass,this.insertButtonTooltip,function(t){t.insertItem().done(function(){t.clearInsert()})})},_createUpdateButton:function(){return this._createGridButton(this.updateButtonClass,this.updateButtonTooltip,function(t,e){t.updateItem(),e.stopPropagation()})},_createCancelEditButton:function(){return this._createGridButton(this.cancelEditButtonClass,this.cancelEditButtonTooltip,function(t,e){t.cancelEdit(),e.stopPropagation()})},_createGridButton:function(t,e,i){var n=this._grid;return s("<input>").addClass(this.buttonClass).addClass(t).attr({type:"button",title:e}).on("click",function(t){i(n,t)})},editValue:function(){return""}}),t.fields.control=t.ControlField=i})(jsGrid,jQuery);
|