jsxgrid 2.0.0 → 2.2.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.
Files changed (65) hide show
  1. package/README.md +65 -0
  2. package/dist/fields/jsgrid.field.XDateTimeField.min.js +1 -1
  3. package/dist/fields/jsgrid.field.XRowSelectField.min.js +1 -1
  4. package/dist/fields/jsgrid.field.Xcheckbox.min.js +1 -1
  5. package/dist/fields/jsgrid.field.Xcontrol.min.js +6 -0
  6. package/dist/fields/jsgrid.field.XimgField.min.js +1 -1
  7. package/dist/fields/jsgrid.field.Xjsoneditor.min.js +1 -1
  8. package/dist/fields/jsgrid.field.Xnumber.min.js +6 -0
  9. package/dist/fields/jsgrid.field.Xselect.min.js +1 -1
  10. package/dist/fields/jsgrid.field.Xtext.min.js +6 -0
  11. package/dist/fields/jsgrid.field.Xtextarea.min.js +1 -1
  12. package/dist/fields/lib/jsGridSummaryPlugin.min.js +1 -1
  13. package/dist/fields/lib/jsgrid.popup.basic.min.js +1 -1
  14. package/dist/i18n/jsgrid-Ko.js +18 -0
  15. package/dist/i18n/jsgrid-cs.js +18 -0
  16. package/dist/i18n/jsgrid-de.js +18 -0
  17. package/dist/i18n/jsgrid-el.js +18 -0
  18. package/dist/i18n/jsgrid-es.js +18 -0
  19. package/dist/i18n/jsgrid-fa.js +18 -0
  20. package/dist/i18n/jsgrid-fr.js +18 -0
  21. package/dist/i18n/jsgrid-he.js +18 -0
  22. package/dist/i18n/jsgrid-it.js +18 -0
  23. package/dist/i18n/jsgrid-ja.js +18 -0
  24. package/dist/i18n/jsgrid-ka.js +18 -0
  25. package/dist/i18n/jsgrid-lt.js +18 -0
  26. package/dist/i18n/jsgrid-pl.js +18 -0
  27. package/dist/i18n/jsgrid-pt-br.js +18 -0
  28. package/dist/i18n/jsgrid-pt.js +18 -0
  29. package/dist/i18n/jsgrid-ru.js +18 -0
  30. package/dist/i18n/jsgrid-tr.js +18 -0
  31. package/dist/i18n/jsgrid-zh-cn.js +18 -0
  32. package/dist/i18n/jsgrid-zh-tw.js +18 -0
  33. package/dist/jsxgrid-fields.js +1 -1
  34. package/dist/jsxgrid-fields.min.js +1 -1
  35. package/dist/jsxgrid-theme.css +1 -1
  36. package/dist/jsxgrid-xfields.js +393 -2
  37. package/dist/jsxgrid-xfields.min.js +2 -2
  38. package/dist/jsxgrid.css +1 -1
  39. package/dist/jsxgrid.js +52 -5
  40. package/dist/jsxgrid.min.js +2 -2
  41. package/package.json +1 -1
  42. package/src/fields/jsgrid.field.Xcontrol.js +229 -0
  43. package/src/fields/jsgrid.field.Xnumber.js +84 -0
  44. package/src/fields/jsgrid.field.Xtext.js +76 -0
  45. package/src/i18n/Ko.js +18 -0
  46. package/src/i18n/cs.js +18 -0
  47. package/src/i18n/de.js +18 -0
  48. package/src/i18n/el.js +18 -0
  49. package/src/i18n/es.js +18 -0
  50. package/src/i18n/fa.js +18 -0
  51. package/src/i18n/fr.js +18 -0
  52. package/src/i18n/he.js +18 -0
  53. package/src/i18n/it.js +18 -0
  54. package/src/i18n/ja.js +18 -0
  55. package/src/i18n/ka.js +18 -0
  56. package/src/i18n/lt.js +18 -0
  57. package/src/i18n/pl.js +18 -0
  58. package/src/i18n/pt-br.js +18 -0
  59. package/src/i18n/pt.js +18 -0
  60. package/src/i18n/ru.js +18 -0
  61. package/src/i18n/tr.js +18 -0
  62. package/src/i18n/zh-cn.js +18 -0
  63. package/src/i18n/zh-tw.js +18 -0
  64. package/src/jsgrid.core.js +44 -2
  65. package/src/jsgrid.validation.js +6 -1
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "插入",
29
29
  updateButtonTooltip: "更新",
30
30
  cancelEditButtonTooltip: "取消编辑"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "切换为搜索",
34
+ insertModeButtonTooltip: "切换为新增",
35
+ editButtonTooltip: "编辑",
36
+ deleteButtonTooltip: "删除",
37
+ searchButtonTooltip: "搜索",
38
+ clearFilterButtonTooltip: "清空过滤",
39
+ insertButtonTooltip: "插入",
40
+ updateButtonTooltip: "更新",
41
+ cancelEditButtonTooltip: "取消编辑"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "打开文件管理器"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "编辑器",
48
+ closeText: "保存"
31
49
  }
32
50
  },
33
51
 
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "新增",
29
29
  updateButtonTooltip: "修改",
30
30
  cancelEditButtonTooltip: "取消編輯"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "切換為搜尋",
34
+ insertModeButtonTooltip: "切換為新增",
35
+ editButtonTooltip: "編輯",
36
+ deleteButtonTooltip: "刪除",
37
+ searchButtonTooltip: "搜尋",
38
+ clearFilterButtonTooltip: "清除搜尋條件",
39
+ insertButtonTooltip: "新增",
40
+ updateButtonTooltip: "修改",
41
+ cancelEditButtonTooltip: "取消編輯"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "開啟檔案總管"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "編輯器",
48
+ closeText: "儲存"
31
49
  }
32
50
  },
33
51
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */
@@ -148,6 +148,168 @@
148
148
  return baseJsGrid.apply(this, arguments);
149
149
  };
150
150
  }(jQuery));
151
+ (function(jsGrid, $, undefined) {
152
+
153
+ // Standalone: does not extend jsGrid.TextField, only jsGrid.Field.
154
+
155
+ var Field = jsGrid.Field;
156
+
157
+ var Xtext = function (config) {
158
+ Field.call(this, config);
159
+ };
160
+
161
+ Xtext.prototype = new Field({
162
+ autosearch: true,
163
+ readOnly: false,
164
+ defaultSelected: null,//value to preset the filter input with, applied once on first filter render then reset
165
+
166
+ filterTemplate: function () {
167
+ if (!this.filtering)
168
+ return "";
169
+
170
+ var grid = this._grid,
171
+ $result = this.filterControl = this._createTextBox();
172
+
173
+ if (this.autosearch) {
174
+ $result.on("keypress", function (e) {
175
+ if (e.which === 13) {
176
+ grid.search();
177
+ e.preventDefault();
178
+ }
179
+ });
180
+ }
181
+
182
+ if (this.defaultSelected !== null) {
183
+ $result.val(this.defaultSelected);
184
+ this.defaultSelected = null;
185
+ }
186
+
187
+ return $result;
188
+ },
189
+
190
+ insertTemplate: function () {
191
+ if (!this.inserting)
192
+ return "";
193
+
194
+ return this.insertControl = this._createTextBox();
195
+ },
196
+
197
+ editTemplate: function (value) {
198
+ if (!this.editing)
199
+ return this.itemTemplate.apply(this, arguments);
200
+
201
+ var $result = this.editControl = this._createTextBox();
202
+ $result.val(value);
203
+ return $result;
204
+ },
205
+
206
+ filterValue: function () {
207
+ return this.filterControl.val();
208
+ },
209
+
210
+ insertValue: function () {
211
+ return this.insertControl.val();
212
+ },
213
+
214
+ editValue: function () {
215
+ return this.editControl.val();
216
+ },
217
+
218
+ _createTextBox: function () {
219
+ return $("<input>").attr("type", "text")
220
+ .prop("readonly", !!this.readOnly);
221
+ }
222
+ });
223
+
224
+ jsGrid.fields.Xtext = Xtext;
225
+
226
+ }(jsGrid, jQuery));
227
+
228
+ (function(jsGrid, $, undefined) {
229
+
230
+ // Standalone: does not extend jsGrid.NumberField or Xtext, only jsGrid.Field.
231
+
232
+ var Field = jsGrid.Field;
233
+
234
+ var Xnumber = function (config) {
235
+ Field.call(this, config);
236
+ };
237
+
238
+ Xnumber.prototype = new Field({
239
+ sorter: "number",
240
+ align: "right",
241
+ autosearch: true,
242
+ readOnly: false,
243
+ defaultSelected: null,//value to preset the filter input with, applied once on first filter render then reset
244
+
245
+ filterTemplate: function () {
246
+ if (!this.filtering)
247
+ return "";
248
+
249
+ var grid = this._grid,
250
+ $result = this.filterControl = this._createTextBox();
251
+
252
+ if (this.autosearch) {
253
+ $result.on("keypress", function (e) {
254
+ if (e.which === 13) {
255
+ grid.search();
256
+ e.preventDefault();
257
+ }
258
+ });
259
+ }
260
+
261
+ if (this.defaultSelected !== null) {
262
+ $result.val(this.defaultSelected);
263
+ this.defaultSelected = null;
264
+ }
265
+
266
+ return $result;
267
+ },
268
+
269
+ insertTemplate: function () {
270
+ if (!this.inserting)
271
+ return "";
272
+
273
+ return this.insertControl = this._createTextBox();
274
+ },
275
+
276
+ editTemplate: function (value) {
277
+ if (!this.editing)
278
+ return this.itemTemplate.apply(this, arguments);
279
+
280
+ var $result = this.editControl = this._createTextBox();
281
+ $result.val(value);
282
+ return $result;
283
+ },
284
+
285
+ filterValue: function () {
286
+ return this.filterControl.val()
287
+ ? parseInt(this.filterControl.val() || 0, 10)
288
+ : undefined;
289
+ },
290
+
291
+ insertValue: function () {
292
+ return this.insertControl.val()
293
+ ? parseInt(this.insertControl.val() || 0, 10)
294
+ : undefined;
295
+ },
296
+
297
+ editValue: function () {
298
+ return this.editControl.val()
299
+ ? parseInt(this.editControl.val() || 0, 10)
300
+ : undefined;
301
+ },
302
+
303
+ _createTextBox: function () {
304
+ return $("<input>").attr("type", "number")
305
+ .prop("readonly", !!this.readOnly);
306
+ }
307
+ });
308
+
309
+ jsGrid.fields.Xnumber = Xnumber;
310
+
311
+ }(jsGrid, jQuery));
312
+
151
313
  (function(jsGrid, $, undefined) {
152
314
 
153
315
  // Standalone: does not extend jsGrid.CheckboxField, only jsGrid.Field.
@@ -976,4 +1138,233 @@
976
1138
 
977
1139
 
978
1140
  jsGrid.fields.XDateTimeField = XDateTimeField;
979
- }(jsGrid, jQuery));
1141
+ }(jsGrid, jQuery));
1142
+ (function(jsGrid, $, undefined) {
1143
+
1144
+ // Already standalone - the native control field extends jsGrid.Field
1145
+ // directly, same as every X-field. X-branded purely for naming parity,
1146
+ // so it can be used instead of "control" once the native fields bundle
1147
+ // is dropped in favor of the X set.
1148
+
1149
+ var Field = jsGrid.Field;
1150
+
1151
+ function Xcontrol(config) {
1152
+ Field.call(this, config);
1153
+ this.includeInDataExport = false;
1154
+ this._configInitialized = false;
1155
+ }
1156
+
1157
+ Xcontrol.prototype = new Field({
1158
+ css: "jsgrid-control-field",
1159
+ align: "center",
1160
+ width: 50,
1161
+ filtering: false,
1162
+ inserting: false,
1163
+ editing: false,
1164
+ sorting: false,
1165
+
1166
+ buttonClass: "jsgrid-button",
1167
+ modeButtonClass: "jsgrid-mode-button",
1168
+
1169
+ modeOnButtonClass: "jsgrid-mode-on-button",
1170
+ searchModeButtonClass: "jsgrid-search-mode-button",
1171
+ insertModeButtonClass: "jsgrid-insert-mode-button",
1172
+ editButtonClass: "jsgrid-edit-button",
1173
+ deleteButtonClass: "jsgrid-delete-button",
1174
+ searchButtonClass: "jsgrid-search-button",
1175
+ clearFilterButtonClass: "jsgrid-clear-filter-button",
1176
+ insertButtonClass: "jsgrid-insert-button",
1177
+ updateButtonClass: "jsgrid-update-button",
1178
+ cancelEditButtonClass: "jsgrid-cancel-edit-button",
1179
+
1180
+ searchModeButtonTooltip: "Switch to searching",
1181
+ insertModeButtonTooltip: "Switch to inserting",
1182
+ editButtonTooltip: "Edit",
1183
+ deleteButtonTooltip: "Delete",
1184
+ searchButtonTooltip: "Search",
1185
+ clearFilterButtonTooltip: "Clear filter",
1186
+ insertButtonTooltip: "Insert",
1187
+ updateButtonTooltip: "Update",
1188
+ cancelEditButtonTooltip: "Cancel edit",
1189
+
1190
+ editButton: true,
1191
+ deleteButton: true,
1192
+ clearFilterButton: true,
1193
+ modeSwitchButton: true,
1194
+
1195
+ _initConfig: function() {
1196
+ this._hasFiltering = this._grid.filtering;
1197
+ this._hasInserting = this._grid.inserting;
1198
+
1199
+ if(this._hasInserting && this.modeSwitchButton) {
1200
+ this._grid.inserting = false;
1201
+ }
1202
+
1203
+ this._configInitialized = true;
1204
+ },
1205
+
1206
+ headerTemplate: function() {
1207
+ if(!this._configInitialized) {
1208
+ this._initConfig();
1209
+ }
1210
+
1211
+ var hasFiltering = this._hasFiltering;
1212
+ var hasInserting = this._hasInserting;
1213
+
1214
+ if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))
1215
+ return "";
1216
+
1217
+ if(hasFiltering && !hasInserting)
1218
+ return this._createFilterSwitchButton();
1219
+
1220
+ if(hasInserting && !hasFiltering)
1221
+ return this._createInsertSwitchButton();
1222
+
1223
+ return this._createModeSwitchButton();
1224
+ },
1225
+
1226
+ itemTemplate: function(value, item) {
1227
+ var $result = $([]);
1228
+
1229
+ if(this.editButton) {
1230
+ $result = $result.add(this._createEditButton(item));
1231
+ }
1232
+
1233
+ if(this.deleteButton) {
1234
+ $result = $result.add(this._createDeleteButton(item));
1235
+ }
1236
+
1237
+ return $result;
1238
+ },
1239
+
1240
+ filterTemplate: function() {
1241
+ var $result = this._createSearchButton();
1242
+ return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;
1243
+ },
1244
+
1245
+ insertTemplate: function() {
1246
+ return this._createInsertButton();
1247
+ },
1248
+
1249
+ editTemplate: function() {
1250
+ return this._createUpdateButton().add(this._createCancelEditButton());
1251
+ },
1252
+
1253
+ _createFilterSwitchButton: function() {
1254
+ return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, true);
1255
+ },
1256
+
1257
+ _createInsertSwitchButton: function() {
1258
+ return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, false);
1259
+ },
1260
+
1261
+ _createOnOffSwitchButton: function(option, cssClass, isOnInitially) {
1262
+ var isOn = isOnInitially;
1263
+
1264
+ var updateButtonState = $.proxy(function() {
1265
+ $button.toggleClass(this.modeOnButtonClass, isOn);
1266
+ }, this);
1267
+
1268
+ var $button = this._createGridButton(this.modeButtonClass + " " + cssClass, "", function(grid) {
1269
+ isOn = !isOn;
1270
+ grid.option(option, isOn);
1271
+ updateButtonState();
1272
+ });
1273
+
1274
+ updateButtonState();
1275
+
1276
+ return $button;
1277
+ },
1278
+
1279
+ _createModeSwitchButton: function() {
1280
+ var isInserting = false;
1281
+
1282
+ var updateButtonState = $.proxy(function() {
1283
+ $button.attr("title", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)
1284
+ .toggleClass(this.insertModeButtonClass, !isInserting)
1285
+ .toggleClass(this.searchModeButtonClass, isInserting);
1286
+ }, this);
1287
+
1288
+ var $button = this._createGridButton(this.modeButtonClass, "", function(grid) {
1289
+ isInserting = !isInserting;
1290
+ grid.option("inserting", isInserting);
1291
+ grid.option("filtering", !isInserting);
1292
+ updateButtonState();
1293
+ });
1294
+
1295
+ updateButtonState();
1296
+
1297
+ return $button;
1298
+ },
1299
+
1300
+ _createEditButton: function(item) {
1301
+ return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {
1302
+ grid.editItem(item);
1303
+ e.stopPropagation();
1304
+ });
1305
+ },
1306
+
1307
+ _createDeleteButton: function(item) {
1308
+ return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {
1309
+ grid.deleteItem(item);
1310
+ e.stopPropagation();
1311
+ });
1312
+ },
1313
+
1314
+ _createSearchButton: function() {
1315
+ return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {
1316
+ grid.search();
1317
+ });
1318
+ },
1319
+
1320
+ _createClearFilterButton: function() {
1321
+ return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {
1322
+ grid.clearFilter();
1323
+ });
1324
+ },
1325
+
1326
+ _createInsertButton: function() {
1327
+ return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {
1328
+ grid.insertItem().done(function() {
1329
+ grid.clearInsert();
1330
+ });
1331
+ });
1332
+ },
1333
+
1334
+ _createUpdateButton: function() {
1335
+ return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {
1336
+ grid.updateItem();
1337
+ e.stopPropagation();
1338
+ });
1339
+ },
1340
+
1341
+ _createCancelEditButton: function() {
1342
+ return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {
1343
+ grid.cancelEdit();
1344
+ e.stopPropagation();
1345
+ });
1346
+ },
1347
+
1348
+ _createGridButton: function(cls, tooltip, clickHandler) {
1349
+ var grid = this._grid;
1350
+
1351
+ return $("<input>").addClass(this.buttonClass)
1352
+ .addClass(cls)
1353
+ .attr({
1354
+ type: "button",
1355
+ title: tooltip
1356
+ })
1357
+ .on("click", function(e) {
1358
+ clickHandler(grid, e);
1359
+ });
1360
+ },
1361
+
1362
+ editValue: function() {
1363
+ return "";
1364
+ }
1365
+
1366
+ });
1367
+
1368
+ jsGrid.fields.Xcontrol = Xcontrol;
1369
+
1370
+ }(jsGrid, jQuery));
@@ -1,6 +1,6 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */
6
- ((t,l)=>{t?t.popup=t.popupBasic=function(t,e){this.idcounter=this.idcounter||0,this.idcounter++,(e=e||{}).closeText=e.closeText||"Close",e.heading=e.heading||"",e.styles=e.styles||".jsGridpopupBasicOverlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: rgba(0, 0, 0, 0.7); transition: opacity 500ms; opacity: 1;}.jsGridpopupBasicPopup { margin: 70px auto; padding: 20px; min-height: 60%; background: #fff; border-radius: 5px; width: 60%; position: relative; transition: all 300ms ease-in-out;}.jsGridpopupBasicPopup h2 { margin-top: 0; color: #333; font-family: Tahoma, Arial, sans-serif;}.jsGridpopupBasicPopup .close { position: absolute; top: 10px; right: 30px; transition: all 200ms; font-size: 30px; font-weight: bold; text-decoration: none; color: #333;}.jsGridpopupBasicPopup .close:hover { color: #06D85F;}.jsGridpopupBasicPopup .jsGridpopupBasicContent { max-height: 30%; overflow: auto;}@media screen and (max-width: 700px){ .jsGridpopupBasicPopup{ width: 70%; }}",l("#jsGridpopupBasicStyles").length||(r=(i=l("head")).find("link[rel='stylesheet']:last"),n="<style id='jsGridpopupBasicStyles'>"+e.styles+"</style>",r.length?r.after(n):i.append(n));var i,n,r="jsGridpopupBasic"+this.idcounter,s=l('<div id="'+r+'" class="jsGridpopupBasicOverlay"><div class="jsGridpopupBasicPopup"><h2></h2><a class="close" href="#">&times;</a><div class="jsGridpopupBasicContent"></div></div></div>');return s.find("h2").text(e.heading),s.find(".jsGridpopupBasicContent").append(t),s.find(".close").click(function(){e.onClose instanceof Function&&e.onClose(s),s.remove()}),l("body").append(s),{id:r,$popup:s,hide:function(){s.remove()}}}:console.log("jsGrid is not defined!")})(jsGrid,jQuery),(s=>{var e=s.fn.jsGrid;e&&(s.fn.jsGrid=function(t){var r;return"object"==typeof t&&(r=t.onRefreshed,t.onRefreshed=function(t){r&&r.apply(this,arguments);var t=t.grid,i=t.option("data")||[],e=t.option("fields")||[],t=t._container.find(".jsgrid-table").last(),t=(t.find(".jsgrid-summary-footer").remove(),s("<tfoot class='jsgrid-summary-footer'>").appendTo(t)),n=s("<tr>").addClass("jsgrid-row").css({background:"#e1e1e1","font-weight":"bold"}).appendTo(t);e.forEach(function(t){var e=s("<td>").addClass("jsgrid-cell").appendTo(n);"function"==typeof t.summary&&(t=t.summary.call(t,i),e.html(t))})}),e.apply(this,arguments)})})(jQuery),((t,i)=>{function e(t){n.call(this,t)}var n=t.Field;e.prototype=new n({sorter:"number",align:"center",autosearch:!0,defaultSelected:null,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()}),null!==this.defaultSelected&&(e.prop({checked:!!this.defaultSelected,indeterminate:!1,readOnly:!1}),this.defaultSelected=null),e):""},filterValue:function(){return this.filterControl.get(0).indeterminate?void 0:this.filterControl.is(":checked")?1:0},insertTemplate:function(){return this.inserting?this.insertControl=this._createCheckbox():""},insertValue:function(){return+this.insertControl.is(":checked")},editValue:function(){return+this.editControl.is(":checked")},itemTemplate:function(t){return this._createCheckbox().prop({checked:+t,disabled:!0})},editTemplate:function(t){var e;return this.editing?((e=this.editControl=this._createCheckbox()).prop("checked",+t),e):this.itemTemplate.apply(this,arguments)},_createCheckbox:function(){return i("<input>").attr("type","checkbox")}}),t.fields.Xcheckbox=e})(jsGrid,jQuery),((t,n)=>{function e(t){i.call(this,t)}var i=t.Field;e.prototype=new i({autosearch:!0,readOnly:!1,fm_callback:null,editButtonText:"Open FM",defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},itemTemplate:function(t){var e=n('<img class="jsgrid-img" src="">');return e.attr("src",t||""),e.css("max-height","50px"),e.css("max-width","50px"),e},editTemplate:function(t){var e,i;return this.editing?(e=this.fm_callback,i=this.editControl=n('<input type="text">').val(t||""),e?n('<button class="jsgrid-imgField-button">'+this.editButtonText+"</button>").click(function(){e(i)}):i):this.itemTemplate.apply(this,arguments)},insertTemplate:function(){var t,e;return this.inserting?(t=this.fm_callback,e=this.insertControl=n('<input type="text">'),"function"==typeof t?n('<button class="jsgrid-imgField-button">'+this.editButtonText+"</button>").click(function(){t(e)}):e):""},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return n("<input>").attr("type","text").prop("readonly",!!this.readOnly)}}),t.fields.XimgField=e})(jsGrid,jQuery),((t,o)=>{function e(t){var e;this.items=[],this.selectedIndex=-1,this.valueField="",this.textField="",t.valueField&&t.items&&t.items.length&&(e=t.items[0][t.valueField],this.valueType=typeof e==n?n:"string"),this.sorter=this.valueType,i.call(this,t)}var i=t.Field,n="number";e.prototype=new i({align:"center",autosearch:!0,valueType:n,pseudoElement:null,select2:null,defaultSelected:null,itemTemplate:function(e){var t=this.items,i=this.valueField,n=this.textField,t=i?"object"==typeof e?e:o.grep(t,function(t){return t[i]===e})[0]||{}:t[e],n=n?t[n]:t;return null==n?"":n},insertTemplate:function(){return this.inserting?this.insertControl=this._createSelect():""},editTemplate:function(t){var e,i;return this.editing?(e=this.editControl=this._createSelect(),void 0!==(i="object"==typeof(i=t)?t[this.valueField]:t)&&e.val(i),e):this.itemTemplate.apply(this,arguments)},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},filterTemplate:function(){var t,i,n,r,e,s;return this.filtering?(Array.isArray(this.items)?(t=this.items.slice(0),this.pseudoElement?t.unshift(this.pseudoElement):((s={})[this.textField]="",s[this.valueField]=null,t.unshift(s))):"object"==typeof this.items&&(t=Object.assign({},this.items),t="object"==typeof this.pseudoElement&&this.pseudoElement?Object.assign({},t,this.pseudoElement):Object.assign({},{"":null},t)),null!==this.defaultSelected&&(i=this.valueField,n=this.defaultSelected,r=-1,o.each(t,function(t,e){if((i?e[i]:t)==n)return r=t,!1}),-1!==r&&(this.selectedIndex=r),this.defaultSelected=null),e=this._grid,s=this.filterControl=this._createSelect(t),this.autosearch&&s.on("change",function(t){e.search()}),s):""},filterValue:function(){var t=this.filterControl.val();return this.valueType===n?parseInt(t||0,10):t},_createSelect:function(t){var e,n=o("<select>"),r=this.valueField,s=this.textField,l=this.selectedIndex;return o.each(t||this.items,function(t,e){var i=r?e[r]:t,e=s?e[s]:e;o("<option>").attr("value",i).text(e).appendTo(n).prop("selected",l===t)}),n.prop("disabled",!!this.readOnly),this.select2&&(e=Object.assign({},this.select2,{width:"100%"}),setTimeout(function(){n.select2(e)},0)),n}}),t.fields.Xselect=e})(jsGrid,jQuery),((t,r)=>{function e(t){i.call(this,t)}var i=t.Field;e.prototype=new i({autosearch:!0,readOnly:!1,maxShowSymbols:50,defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},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)},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return r("<input>").attr("type","text").prop("readonly",!!this.readOnly)},_createTextArea:function(){return r("<textarea>").prop("readonly",!!this.readOnly)},itemTemplate:function(t,e){var i,n;return(t=null==t?"":String(t)).length<=this.maxShowSymbols?r("<div>").text(t):(i=t.slice(0,this.maxShowSymbols),n=r("<div>").text(i+" ...").one("click",function(){return n.text(t),!1}))}}),t.fields.Xtextarea=e})(jsGrid,jQuery),((n,r)=>{function t(t){e.call(this,t)}var e=n.Field;t.prototype=new e({autosearch:!0,readOnly:!1,templates:[],closeText:"Save",editText:"Editor",defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return r("<input>").attr("type","text").prop("readonly",!!this.readOnly)},_doModal:function(t,e,i){return n.popup(t,e)},_createJsonEditor:function(t,e){if("undefined"==typeof JSONEditor)throw new Error("Xjsoneditor requires the 'jsoneditor' package to be loaded on the page.");"object"!=typeof(t=t||{})&&(t=JSON.parse(t));var i=r('<div style="height: 500px;">'),e=(r("body").append(i),i=i[0],{templates:this.templates,modes:["code","text","tree"],onError:function(t){alert(t.toString())},mode:e||"view"});return new JSONEditor(i,e,t)},itemTemplate:function(e,t){var i=this;return r("<button>"+i.editText+"</button>").click(function(){var t=i._createJsonEditor(e);return i._doModal(t.container,{onClose:function(){r(t.container).remove(),t.destroy()}}),!1})},insertTemplate:function(){var t;return this.inserting?(t=this).insertControl=r("<textarea>").click(function(){var e=t._createJsonEditor({},"tree"),i=r(this);return t._doModal(e.container,{closeText:t.closeText,onClose:function(){var t=e.get();r.isEmptyObject(t)?i.val({}):i.val(JSON.stringify(t)),e.destroy()}}),!1}):""},editTemplate:function(t){var n;return this.editing?(n=this).editControl=r("<textarea>").val(t).click(function(){var e=r(this),i=n._createJsonEditor(e.val(),"tree");return n._doModal(i.container,{closeText:n.closeText,onClose:function(){var t=i.get();r.isEmptyObject(t)?e.val({}):e.val(JSON.stringify(t)),i.destroy()}}),!1}):this.itemTemplate.apply(this,arguments)}}),n.fields.Xjsoneditor=t})(jsGrid,jQuery),((e,n)=>{function t(t){this.selectedItems=[],this.uid=Date.now().toString(36)+Math.random().toString(36).substring(2),e.Field.call(this,t)}t.prototype=new e.Field({filtering:!1,deleteItemByItem:!1,buttonText:"",selectedItemsAction:function(t){},unselectAll:function(){this.selectedItems=[],this._grid._container.find("[data-uid='"+this.uid+"'] ").prop("checked",!1)},headerTemplate:function(){var e;return this.buttonText?(e=this,n("<button>").attr("type","button").text(e.buttonText).on("click",function(t){e.selectedItemsAction(e.selectedItems),t.stopPropagation()})):""},itemTemplate:function(t,e){var i=this;return n("<input data-uid='"+i.uid+"' type='checkbox'>").prop("checked",-1<n.inArray(e,i.selectedItems)).on("change",function(){n(this).is(":checked")?i.selectItem(e):i.unselectItem(e)}).click(function(t){t.stopPropagation()})},editTemplate:function(){return""},align:"center",selectItem:function(t){this.selectedItems.push(t)},unselectItem:function(e){this.selectedItems=n.grep(this.selectedItems,function(t){return t!==e})}}),e.fields.XRowSelectField=t})(jsGrid,jQuery),((e,s)=>{function t(t){e.Field.call(this,t)}t.prototype=new e.Field({css:"date-field",align:"center",datePickerType:"datetime-local",dateRange:!1,defaultSelected:null,sorter:function(t,e){return new Date(t)-new Date(e)},filterTemplate:function(){var e,t,i,n,r;return this.filtering?(e=this._grid,t=s(),this.dateRange?(r=s("<div class='jsgrid-date-range-wrapper'>"),i=s("<input>",{class:"jsgrid-date-picker jsgrid-date-start",type:this.datePickerType,title:"Period date start"}),n=s("<input>",{class:"jsgrid-date-picker jsgrid-date-end",type:this.datePickerType,title:"Period date end"}),r.val=function(){return{from:i.val(),to:n.val()}},t=this.filterControl=r.append(i).append(n),null!==this.defaultSelected&&(r=this.defaultSelected||{},i.val(r.from||""),n.val(r.to||""),this.defaultSelected=null),this.autosearch&&t.on("change",".jsgrid-date-picker",function(t){e.search()})):(t=this.filterControl=this._createPicker(),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),this.autosearch&&t.on("change",function(t){e.search()})),t):""},filterValue:function(){return this.filterControl.val()},itemTemplate:function(t){var e;return t?(e=this.options||{weekday:"short",year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"},new Date(t.replace(" ","T")).toLocaleDateString(void 0,e)):""},insertTemplate:function(){return this._insertPicker=this._createPicker()},editTemplate:function(t){return this._editPicker=this._createPicker().val(t)},insertValue:function(){return this._insertPicker.val()},editValue:function(){return this._editPicker.val()},_createPicker:function(){return s("<input class='date-picker'>").attr("type",this.datePickerType)}}),e.fields.XDateTimeField=t})(jsGrid,jQuery);
6
+ ((t,s)=>{t?t.popup=t.popupBasic=function(t,e){this.idcounter=this.idcounter||0,this.idcounter++,(e=e||{}).closeText=e.closeText||"Close",e.heading=e.heading||"",e.styles=e.styles||".jsGridpopupBasicOverlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: rgba(0, 0, 0, 0.7); transition: opacity 500ms; opacity: 1;}.jsGridpopupBasicPopup { margin: 70px auto; padding: 20px; min-height: 60%; background: #fff; border-radius: 5px; width: 60%; position: relative; transition: all 300ms ease-in-out;}.jsGridpopupBasicPopup h2 { margin-top: 0; color: #333; font-family: Tahoma, Arial, sans-serif;}.jsGridpopupBasicPopup .close { position: absolute; top: 10px; right: 30px; transition: all 200ms; font-size: 30px; font-weight: bold; text-decoration: none; color: #333;}.jsGridpopupBasicPopup .close:hover { color: #06D85F;}.jsGridpopupBasicPopup .jsGridpopupBasicContent { max-height: 30%; overflow: auto;}@media screen and (max-width: 700px){ .jsGridpopupBasicPopup{ width: 70%; }}",s("#jsGridpopupBasicStyles").length||(r=(i=s("head")).find("link[rel='stylesheet']:last"),n="<style id='jsGridpopupBasicStyles'>"+e.styles+"</style>",r.length?r.after(n):i.append(n));var i,n,r="jsGridpopupBasic"+this.idcounter,o=s('<div id="'+r+'" class="jsGridpopupBasicOverlay"><div class="jsGridpopupBasicPopup"><h2></h2><a class="close" href="#">&times;</a><div class="jsGridpopupBasicContent"></div></div></div>');return o.find("h2").text(e.heading),o.find(".jsGridpopupBasicContent").append(t),o.find(".close").click(function(){e.onClose instanceof Function&&e.onClose(o),o.remove()}),s("body").append(o),{id:r,$popup:o,hide:function(){o.remove()}}}:console.log("jsGrid is not defined!")})(jsGrid,jQuery),(o=>{var e=o.fn.jsGrid;e&&(o.fn.jsGrid=function(t){var r;return"object"==typeof t&&(r=t.onRefreshed,t.onRefreshed=function(t){r&&r.apply(this,arguments);var t=t.grid,i=t.option("data")||[],e=t.option("fields")||[],t=t._container.find(".jsgrid-table").last(),t=(t.find(".jsgrid-summary-footer").remove(),o("<tfoot class='jsgrid-summary-footer'>").appendTo(t)),n=o("<tr>").addClass("jsgrid-row").css({background:"#e1e1e1","font-weight":"bold"}).appendTo(t);e.forEach(function(t){var e=o("<td>").addClass("jsgrid-cell").appendTo(n);"function"==typeof t.summary&&(t=t.summary.call(t,i),e.html(t))})}),e.apply(this,arguments)})})(jQuery),((t,e)=>{function i(t){n.call(this,t)}var n=t.Field;i.prototype=new n({autosearch:!0,readOnly:!1,defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),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.Xtext=i})(jsGrid,jQuery),((t,e,i)=>{function n(t){r.call(this,t)}var r=t.Field;n.prototype=new r({sorter:"number",align:"right",autosearch:!0,readOnly:!1,defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),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()?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.Xnumber=n})(jsGrid,jQuery),((t,i)=>{function e(t){n.call(this,t)}var n=t.Field;e.prototype=new n({sorter:"number",align:"center",autosearch:!0,defaultSelected:null,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()}),null!==this.defaultSelected&&(e.prop({checked:!!this.defaultSelected,indeterminate:!1,readOnly:!1}),this.defaultSelected=null),e):""},filterValue:function(){return this.filterControl.get(0).indeterminate?void 0:this.filterControl.is(":checked")?1:0},insertTemplate:function(){return this.inserting?this.insertControl=this._createCheckbox():""},insertValue:function(){return+this.insertControl.is(":checked")},editValue:function(){return+this.editControl.is(":checked")},itemTemplate:function(t){return this._createCheckbox().prop({checked:+t,disabled:!0})},editTemplate:function(t){var e;return this.editing?((e=this.editControl=this._createCheckbox()).prop("checked",+t),e):this.itemTemplate.apply(this,arguments)},_createCheckbox:function(){return i("<input>").attr("type","checkbox")}}),t.fields.Xcheckbox=e})(jsGrid,jQuery),((t,n)=>{function e(t){i.call(this,t)}var i=t.Field;e.prototype=new i({autosearch:!0,readOnly:!1,fm_callback:null,editButtonText:"Open FM",defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},itemTemplate:function(t){var e=n('<img class="jsgrid-img" src="">');return e.attr("src",t||""),e.css("max-height","50px"),e.css("max-width","50px"),e},editTemplate:function(t){var e,i;return this.editing?(e=this.fm_callback,i=this.editControl=n('<input type="text">').val(t||""),e?n('<button class="jsgrid-imgField-button">'+this.editButtonText+"</button>").click(function(){e(i)}):i):this.itemTemplate.apply(this,arguments)},insertTemplate:function(){var t,e;return this.inserting?(t=this.fm_callback,e=this.insertControl=n('<input type="text">'),"function"==typeof t?n('<button class="jsgrid-imgField-button">'+this.editButtonText+"</button>").click(function(){t(e)}):e):""},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return n("<input>").attr("type","text").prop("readonly",!!this.readOnly)}}),t.fields.XimgField=e})(jsGrid,jQuery),((t,l)=>{function e(t){var e;this.items=[],this.selectedIndex=-1,this.valueField="",this.textField="",t.valueField&&t.items&&t.items.length&&(e=t.items[0][t.valueField],this.valueType=typeof e==n?n:"string"),this.sorter=this.valueType,i.call(this,t)}var i=t.Field,n="number";e.prototype=new i({align:"center",autosearch:!0,valueType:n,pseudoElement:null,select2:null,defaultSelected:null,itemTemplate:function(e){var t=this.items,i=this.valueField,n=this.textField,t=i?"object"==typeof e?e:l.grep(t,function(t){return t[i]===e})[0]||{}:t[e],n=n?t[n]:t;return null==n?"":n},insertTemplate:function(){return this.inserting?this.insertControl=this._createSelect():""},editTemplate:function(t){var e,i;return this.editing?(e=this.editControl=this._createSelect(),void 0!==(i="object"==typeof(i=t)?t[this.valueField]:t)&&e.val(i),e):this.itemTemplate.apply(this,arguments)},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},filterTemplate:function(){var t,i,n,r,e,o;return this.filtering?(Array.isArray(this.items)?(t=this.items.slice(0),this.pseudoElement?t.unshift(this.pseudoElement):((o={})[this.textField]="",o[this.valueField]=null,t.unshift(o))):"object"==typeof this.items&&(t=Object.assign({},this.items),t="object"==typeof this.pseudoElement&&this.pseudoElement?Object.assign({},t,this.pseudoElement):Object.assign({},{"":null},t)),null!==this.defaultSelected&&(i=this.valueField,n=this.defaultSelected,r=-1,l.each(t,function(t,e){if((i?e[i]:t)==n)return r=t,!1}),-1!==r&&(this.selectedIndex=r),this.defaultSelected=null),e=this._grid,o=this.filterControl=this._createSelect(t),this.autosearch&&o.on("change",function(t){e.search()}),o):""},filterValue:function(){var t=this.filterControl.val();return this.valueType===n?parseInt(t||0,10):t},_createSelect:function(t){var e,n=l("<select>"),r=this.valueField,o=this.textField,s=this.selectedIndex;return l.each(t||this.items,function(t,e){var i=r?e[r]:t,e=o?e[o]:e;l("<option>").attr("value",i).text(e).appendTo(n).prop("selected",s===t)}),n.prop("disabled",!!this.readOnly),this.select2&&(e=Object.assign({},this.select2,{width:"100%"}),setTimeout(function(){n.select2(e)},0)),n}}),t.fields.Xselect=e})(jsGrid,jQuery),((t,r)=>{function e(t){i.call(this,t)}var i=t.Field;e.prototype=new i({autosearch:!0,readOnly:!1,maxShowSymbols:50,defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},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)},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return r("<input>").attr("type","text").prop("readonly",!!this.readOnly)},_createTextArea:function(){return r("<textarea>").prop("readonly",!!this.readOnly)},itemTemplate:function(t,e){var i,n;return(t=null==t?"":String(t)).length<=this.maxShowSymbols?r("<div>").text(t):(i=t.slice(0,this.maxShowSymbols),n=r("<div>").text(i+" ...").one("click",function(){return n.text(t),!1}))}}),t.fields.Xtextarea=e})(jsGrid,jQuery),((n,r)=>{function t(t){e.call(this,t)}var e=n.Field;t.prototype=new e({autosearch:!0,readOnly:!1,templates:[],closeText:"Save",editText:"Editor",defaultSelected:null,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())}),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),t):""},filterValue:function(){return this.filterControl.val()},insertValue:function(){return this.insertControl.val()},editValue:function(){return this.editControl.val()},_createTextBox:function(){return r("<input>").attr("type","text").prop("readonly",!!this.readOnly)},_doModal:function(t,e,i){return n.popup(t,e)},_createJsonEditor:function(t,e){if("undefined"==typeof JSONEditor)throw new Error("Xjsoneditor requires the 'jsoneditor' package to be loaded on the page.");"object"!=typeof(t=t||{})&&(t=JSON.parse(t));var i=r('<div style="height: 500px;">'),e=(r("body").append(i),i=i[0],{templates:this.templates,modes:["code","text","tree"],onError:function(t){alert(t.toString())},mode:e||"view"});return new JSONEditor(i,e,t)},itemTemplate:function(e,t){var i=this;return r("<button>"+i.editText+"</button>").click(function(){var t=i._createJsonEditor(e);return i._doModal(t.container,{onClose:function(){r(t.container).remove(),t.destroy()}}),!1})},insertTemplate:function(){var t;return this.inserting?(t=this).insertControl=r("<textarea>").click(function(){var e=t._createJsonEditor({},"tree"),i=r(this);return t._doModal(e.container,{closeText:t.closeText,onClose:function(){var t=e.get();r.isEmptyObject(t)?i.val({}):i.val(JSON.stringify(t)),e.destroy()}}),!1}):""},editTemplate:function(t){var n;return this.editing?(n=this).editControl=r("<textarea>").val(t).click(function(){var e=r(this),i=n._createJsonEditor(e.val(),"tree");return n._doModal(i.container,{closeText:n.closeText,onClose:function(){var t=i.get();r.isEmptyObject(t)?e.val({}):e.val(JSON.stringify(t)),i.destroy()}}),!1}):this.itemTemplate.apply(this,arguments)}}),n.fields.Xjsoneditor=t})(jsGrid,jQuery),((e,n)=>{function t(t){this.selectedItems=[],this.uid=Date.now().toString(36)+Math.random().toString(36).substring(2),e.Field.call(this,t)}t.prototype=new e.Field({filtering:!1,deleteItemByItem:!1,buttonText:"",selectedItemsAction:function(t){},unselectAll:function(){this.selectedItems=[],this._grid._container.find("[data-uid='"+this.uid+"'] ").prop("checked",!1)},headerTemplate:function(){var e;return this.buttonText?(e=this,n("<button>").attr("type","button").text(e.buttonText).on("click",function(t){e.selectedItemsAction(e.selectedItems),t.stopPropagation()})):""},itemTemplate:function(t,e){var i=this;return n("<input data-uid='"+i.uid+"' type='checkbox'>").prop("checked",-1<n.inArray(e,i.selectedItems)).on("change",function(){n(this).is(":checked")?i.selectItem(e):i.unselectItem(e)}).click(function(t){t.stopPropagation()})},editTemplate:function(){return""},align:"center",selectItem:function(t){this.selectedItems.push(t)},unselectItem:function(e){this.selectedItems=n.grep(this.selectedItems,function(t){return t!==e})}}),e.fields.XRowSelectField=t})(jsGrid,jQuery),((e,o)=>{function t(t){e.Field.call(this,t)}t.prototype=new e.Field({css:"date-field",align:"center",datePickerType:"datetime-local",dateRange:!1,defaultSelected:null,sorter:function(t,e){return new Date(t)-new Date(e)},filterTemplate:function(){var e,t,i,n,r;return this.filtering?(e=this._grid,t=o(),this.dateRange?(r=o("<div class='jsgrid-date-range-wrapper'>"),i=o("<input>",{class:"jsgrid-date-picker jsgrid-date-start",type:this.datePickerType,title:"Period date start"}),n=o("<input>",{class:"jsgrid-date-picker jsgrid-date-end",type:this.datePickerType,title:"Period date end"}),r.val=function(){return{from:i.val(),to:n.val()}},t=this.filterControl=r.append(i).append(n),null!==this.defaultSelected&&(r=this.defaultSelected||{},i.val(r.from||""),n.val(r.to||""),this.defaultSelected=null),this.autosearch&&t.on("change",".jsgrid-date-picker",function(t){e.search()})):(t=this.filterControl=this._createPicker(),null!==this.defaultSelected&&(t.val(this.defaultSelected),this.defaultSelected=null),this.autosearch&&t.on("change",function(t){e.search()})),t):""},filterValue:function(){return this.filterControl.val()},itemTemplate:function(t){var e;return t?(e=this.options||{weekday:"short",year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"},new Date(t.replace(" ","T")).toLocaleDateString(void 0,e)):""},insertTemplate:function(){return this._insertPicker=this._createPicker()},editTemplate:function(t){return this._editPicker=this._createPicker().val(t)},insertValue:function(){return this._insertPicker.val()},editValue:function(){return this._editPicker.val()},_createPicker:function(){return o("<input class='date-picker'>").attr("type",this.datePickerType)}}),e.fields.XDateTimeField=t})(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.Xcontrol=i})(jsGrid,jQuery);
package/dist/jsxgrid.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.0.0 (https://github.com/rok9ru/jsxgrid#readme)
2
+ * jsxgrid v2.2.0 (https://github.com/rok9ru/jsxgrid#readme)
3
3
  * (c) 2026 Mikhail Kremza
4
4
  * Licensed under MIT
5
5
  */