jsxgrid 2.1.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 (62) hide show
  1. package/README.md +36 -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 +1 -1
  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 +1 -1
  9. package/dist/fields/jsgrid.field.Xselect.min.js +1 -1
  10. package/dist/fields/jsgrid.field.Xtext.min.js +1 -1
  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 +1 -1
  37. package/dist/jsxgrid-xfields.min.js +1 -1
  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/i18n/Ko.js +18 -0
  43. package/src/i18n/cs.js +18 -0
  44. package/src/i18n/de.js +18 -0
  45. package/src/i18n/el.js +18 -0
  46. package/src/i18n/es.js +18 -0
  47. package/src/i18n/fa.js +18 -0
  48. package/src/i18n/fr.js +18 -0
  49. package/src/i18n/he.js +18 -0
  50. package/src/i18n/it.js +18 -0
  51. package/src/i18n/ja.js +18 -0
  52. package/src/i18n/ka.js +18 -0
  53. package/src/i18n/lt.js +18 -0
  54. package/src/i18n/pl.js +18 -0
  55. package/src/i18n/pt-br.js +18 -0
  56. package/src/i18n/pt.js +18 -0
  57. package/src/i18n/ru.js +18 -0
  58. package/src/i18n/tr.js +18 -0
  59. package/src/i18n/zh-cn.js +18 -0
  60. package/src/i18n/zh-tw.js +18 -0
  61. package/src/jsgrid.core.js +44 -2
  62. package/src/jsgrid.validation.js +6 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.1.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.1.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.1.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
  */
package/dist/jsxgrid.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.1.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
  */
package/dist/jsxgrid.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jsxgrid v2.1.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
  */
@@ -89,6 +89,14 @@
89
89
  height: "auto",
90
90
  updateOnResize: true,
91
91
 
92
+ // Per-instance locale: a key from jsGrid.locales (e.g. "ru"), or an
93
+ // inline locale config object with the same {grid, fields} shape.
94
+ // Applied once at construction time, before the rest of `config` -
95
+ // any option the caller also sets explicitly still wins. Unlike
96
+ // jsGrid.locale(), this never touches shared prototypes, so two
97
+ // grids on the same page can run in different languages at once.
98
+ locale: null,
99
+
92
100
  rowClass: $.noop,
93
101
  rowRenderer: null,
94
102
 
@@ -202,6 +210,7 @@
202
210
  gridBodyClass: "jsgrid-grid-body",
203
211
 
204
212
  _init: function(config) {
213
+ this._initInstanceLocale(config && config.locale);
205
214
  $.extend(this, config);
206
215
  this._initLoadStrategy();
207
216
  this._initController();
@@ -211,6 +220,24 @@
211
220
  this._callEventHandler(this.onInit)
212
221
  },
213
222
 
223
+ _initInstanceLocale: function(locale) {
224
+ if(!locale) {
225
+ return;
226
+ }
227
+
228
+ var localeConfig = $.isPlainObject(locale) ? locale : jsGrid.locales[locale];
229
+ if(!localeConfig) {
230
+ return;
231
+ }
232
+
233
+ if(localeConfig.grid) {
234
+ $.extend(this, localeConfig.grid);
235
+ }
236
+
237
+ this._fieldsLocaleConfig = localeConfig.fields;
238
+ this._validatorsLocaleConfig = localeConfig.validators;
239
+ },
240
+
214
241
  loadStrategy: function() {
215
242
  return this.pageLoading
216
243
  ? new jsGrid.loadStrategies.PageLoadingStrategy(this)
@@ -247,9 +274,15 @@
247
274
 
248
275
  _initFields: function() {
249
276
  var self = this;
277
+ var fieldsLocale = self._fieldsLocaleConfig;
250
278
  self.fields = $.map(self.fields, function(field) {
251
279
  if($.isPlainObject(field)) {
252
280
  var fieldConstructor = (field.type && jsGrid.fields[field.type]) || jsGrid.Field;
281
+ var fieldLocale = fieldsLocale && field.type && fieldsLocale[field.type];
282
+ if(fieldLocale) {
283
+ // locale strings are defaults; explicit keys on the field config still win
284
+ field = $.extend({}, fieldLocale, field);
285
+ }
253
286
  field = new fieldConstructor(field);
254
287
  }
255
288
  field._grid = self;
@@ -421,7 +454,9 @@
421
454
  },
422
455
 
423
456
  _createValidation: function() {
424
- return getOrApply(this.validation, this);
457
+ return getOrApply(this.validation, this, {
458
+ validatorsLocale: this._validatorsLocaleConfig
459
+ });
425
460
  },
426
461
 
427
462
  _clear: function() {
@@ -1635,6 +1670,13 @@
1635
1670
  };
1636
1671
 
1637
1672
  var setLocale = function(obj, localeConfig) {
1673
+ if(!obj) {
1674
+ // target not loaded on the page (e.g. a locale file's fields.control
1675
+ // section with no native control.js loaded) - skip this branch
1676
+ // instead of throwing and aborting the rest of the locale.
1677
+ return;
1678
+ }
1679
+
1638
1680
  $.each(localeConfig, function(field, value) {
1639
1681
  if($.isPlainObject(value)) {
1640
1682
  setLocale(obj[field] || obj[field[0].toUpperCase() + field.slice(1)], value);
@@ -1643,7 +1685,7 @@
1643
1685
 
1644
1686
  if(obj.hasOwnProperty(field)) {
1645
1687
  obj[field] = value;
1646
- } else {
1688
+ } else if(obj.prototype) {
1647
1689
  obj.prototype[field] = value;
1648
1690
  }
1649
1691
  });
@@ -1655,7 +1697,7 @@
1655
1697
  setDefaults: setDefaults,
1656
1698
  locales: locales,
1657
1699
  locale: locale,
1658
- version: '2.1.0'
1700
+ version: '2.2.0'
1659
1701
  };
1660
1702
 
1661
1703
  }(window, jQuery));
@@ -1989,7 +2031,12 @@
1989
2031
  validator = { validator: validator };
1990
2032
  }
1991
2033
 
1992
- return $.extend({}, validator, rule);
2034
+ // this grid's own locale (jsGrid's `locale` init option), if any,
2035
+ // overrides the shared default message but still loses to a message
2036
+ // set explicitly on the rule itself
2037
+ var localeOverride = this.validatorsLocale && this.validatorsLocale[validatorName];
2038
+
2039
+ return $.extend({}, validator, localeOverride, rule);
1993
2040
  }
1994
2041
  };
1995
2042
 
@@ -1,6 +1,6 @@
1
1
  /*
2
- * jsxgrid v2.1.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
- ((e,c,u)=>{function a(t,e){return c.isFunction(t)?t.apply(e,c.makeArray(arguments).slice(2)):t}var n,s="JSGrid",o="JSGridItem",i="JSGridEditRow",r=[],d=0,l="asc",t={loadData:c.noop,insertItem:c.noop,updateItem:c.noop,deleteItem:c.noop};function h(t,e){t=c(t);0==r.length?(this._id=d,d++):this._id=r.pop(),t.data(s,this),this._container=t,this.data=[],this.fields=[],this._editingRow=null,this._sortField=null,this._sortOrder=l,this._firstDisplayingPage=1,this._init(e),this.render()}h.prototype={width:"auto",height:"auto",updateOnResize:!0,rowClass:c.noop,rowRenderer:null,rowClick:function(t){this.editing&&this.editItem(c(t.event.target).closest("tr"))},rowDoubleClick:c.noop,noDataContent:"Not found",noDataRowClass:"jsgrid-nodata-row",heading:!0,headerRowRenderer:null,headerRowClass:"jsgrid-header-row",headerCellClass:"jsgrid-header-cell",filtering:!1,filterRowRenderer:null,filterRowClass:"jsgrid-filter-row",inserting:!1,insertRowLocation:"bottom",insertRowRenderer:null,insertRowClass:"jsgrid-insert-row",editing:!1,editRowRenderer:null,editRowClass:"jsgrid-edit-row",confirmDeleting:!0,deleteConfirm:"Are you sure?",selecting:!0,selectedRowClass:"jsgrid-selected-row",oddRowClass:"jsgrid-row",evenRowClass:"jsgrid-alt-row",cellClass:"jsgrid-cell",sorting:!1,sortableClass:"jsgrid-header-sortable",sortAscClass:"jsgrid-header-sort jsgrid-header-sort-asc",sortDescClass:"jsgrid-header-sort jsgrid-header-sort-desc",paging:!1,pagerContainer:null,pageIndex:1,pageSize:20,pageButtonCount:15,pagerFormat:"Pages: {first} {prev} {pages} {next} {last} &nbsp;&nbsp; {pageIndex} of {pageCount}",pagePrevText:"Prev",pageNextText:"Next",pageFirstText:"First",pageLastText:"Last",pageNavigatorNextText:"...",pageNavigatorPrevText:"...",pagerContainerClass:"jsgrid-pager-container",pagerClass:"jsgrid-pager",pagerNavButtonClass:"jsgrid-pager-nav-button",pagerNavButtonInactiveClass:"jsgrid-pager-nav-inactive-button",pageClass:"jsgrid-pager-page",currentPageClass:"jsgrid-pager-current-page",customLoading:!1,pageLoading:!1,autoload:!1,controller:t,loadIndication:!0,loadIndicationDelay:500,loadMessage:"Please, wait...",loadShading:!0,invalidMessage:"Invalid data entered!",invalidNotify:function(t){t=c.map(t.errors,function(t){return t.message||null});e.alert([this.invalidMessage].concat(t).join("\n"))},onInit:c.noop,onRefreshing:c.noop,onRefreshed:c.noop,onPageChanged:c.noop,onItemDeleting:c.noop,onItemDeleted:c.noop,onItemInserting:c.noop,onItemInserted:c.noop,onItemEditing:c.noop,onItemEditCancelling:c.noop,onItemUpdating:c.noop,onItemUpdated:c.noop,onItemInvalid:c.noop,onDataLoading:c.noop,onDataLoaded:c.noop,onDataExporting:c.noop,onOptionChanging:c.noop,onOptionChanged:c.noop,onError:c.noop,invalidClass:"jsgrid-invalid",containerClass:"jsgrid",tableClass:"jsgrid-table",gridHeaderClass:"jsgrid-grid-header",gridBodyClass:"jsgrid-grid-body",_init:function(t){c.extend(this,t),this._initLoadStrategy(),this._initController(),this._initFields(),this._attachWindowLoadResize(),this._attachWindowResizeCallback(),this._callEventHandler(this.onInit)},loadStrategy:function(){return new(this.pageLoading?jsGrid.loadStrategies.PageLoadingStrategy:jsGrid.loadStrategies.DirectLoadingStrategy)(this)},_initLoadStrategy:function(){this._loadStrategy=a(this.loadStrategy,this)},_initController:function(){this._controller=c.extend({},t,a(this.controller,this))},renderTemplate:function(t,e,i){var n,r=[];for(n in i)r.push(i[n]);return r.unshift(t,e),(t=a.apply(null,r))===u||null===t?"":t},loadIndicator:function(t){return new jsGrid.LoadIndicator(t)},validation:function(t){return jsGrid.Validation&&new jsGrid.Validation(t)},_initFields:function(){var e=this;e.fields=c.map(e.fields,function(t){return(t=c.isPlainObject(t)?new(t.type&&jsGrid.fields[t.type]||jsGrid.Field)(t):t)._grid=e,t})},_attachWindowLoadResize:function(){c(e).on("load.table-"+this._id,c.proxy(this._refreshSize,this))},_attachWindowResizeCallback:function(){this.updateOnResize&&c(e).on("resize.table-"+this._id,c.proxy(this._refreshSize,this))},_detachWindowLoadResize:function(){c(e).off("load.table-"+this._id)},_detachWindowResizeCallback:function(){c(e).off("resize.table-"+this._id)},option:function(t,e){if(1===arguments.length)return this[t];t={option:t,oldValue:this[t],newValue:e},this._callEventHandler(this.onOptionChanging,t),this._handleOptionChange(t.option,t.newValue),this._callEventHandler(this.onOptionChanged,{option:t.option,value:t.newValue})},fieldOption:function(t,e,i){if(t=this._normalizeField(t),2===arguments.length)return t[e];t[e]=i,this._renderGrid()},_handleOptionChange:function(t,e){switch(this[t]=e,t){case"width":case"height":this._refreshSize();break;case"rowClass":case"rowRenderer":case"rowClick":case"rowDoubleClick":case"noDataRowClass":case"noDataContent":case"selecting":case"selectedRowClass":case"oddRowClass":case"evenRowClass":this._refreshContent();break;case"pageButtonCount":case"pagerFormat":case"pagePrevText":case"pageNextText":case"pageFirstText":case"pageLastText":case"pageNavigatorNextText":case"pageNavigatorPrevText":case"pagerClass":case"pagerNavButtonClass":case"pageClass":case"currentPageClass":case"pagerRenderer":this._refreshPager();break;case"fields":this._initFields(),this.render();break;case"data":case"editing":case"heading":case"filtering":case"inserting":case"paging":this.refresh();break;case"loadStrategy":case"pageLoading":this._initLoadStrategy(),this.search();break;case"pageIndex":this.openPage(e);break;case"pageSize":this.refresh(),this.search();break;case"editRowRenderer":case"editRowClass":this.cancelEdit();break;case"updateOnResize":this._detachWindowResizeCallback(),this._attachWindowResizeCallback();break;case"invalidNotify":case"invalidMessage":break;default:this.render()}},destroy:function(){this._detachWindowResizeCallback(),this._detachWindowLoadResize(),r.push(this._id),this._clear(),this._container.removeData(s)},render:function(){return this._renderGrid(),this.autoload?this.loadData():c.Deferred().resolve().promise()},_renderGrid:function(){this._clear(),this._container.addClass(this.containerClass).css("position","relative").append(this._createHeader()).append(this._createBody()),this._pagerContainer=this._createPagerContainer(),this._loadIndicator=this._createLoadIndicator(),this._validation=this._createValidation(),this.refresh()},_createLoadIndicator:function(){return a(this.loadIndicator,this,{message:this.loadMessage,shading:this.loadShading,container:this._container})},_createValidation:function(){return a(this.validation,this)},_clear:function(){this.cancelEdit(),clearTimeout(this._loadingTimer),this._pagerContainer&&this._pagerContainer.empty(),this._container.empty().css({position:"",width:"",height:""})},_createHeader:function(){var t=this._headerRow=this._createHeaderRow(),e=this._filterRow=this._createFilterRow(),i=this._insertRow=this._createInsertRow(),t=this._headerGrid=c("<table>").addClass(this.tableClass).append(t).append(e).append(i);return this._header=c("<div>").addClass(this.gridHeaderClass).addClass(this._scrollBarWidth()?"jsgrid-header-scrollbar":"").append(t)},_createBody:function(){var t=this._content=c("<tbody>"),t=this._bodyGrid=c("<table>").addClass(this.tableClass).append(t);return this._body=c("<div>").addClass(this.gridBodyClass).append(t).on("scroll",c.proxy(function(t){this._header.scrollLeft(t.target.scrollLeft)},this))},_createPagerContainer:function(){var t=this.pagerContainer||c("<div>").appendTo(this._container);return c(t).addClass(this.pagerContainerClass)},_eachField:function(i){var n=this;c.each(this.fields,function(t,e){e.visible&&i.call(n,e,t)})},_createHeaderRow:function(){var n;return c.isFunction(this.headerRowRenderer)?c(this.renderTemplate(this.headerRowRenderer,this)):(n=c("<tr>").addClass(this.headerRowClass),this._eachField(function(t,e){var i=this._prepareCell("<th>",t,"headercss",this.headerCellClass).append(this.renderTemplate(t.headerTemplate,t)).appendTo(n);this.sorting&&t.sorting&&i.addClass(this.sortableClass).on("click",c.proxy(function(){this.sort(e)},this))}),n)},_prepareCell:function(t,e,i,n){return c(t).css("width",e.width).addClass(n||this.cellClass).addClass(i&&e[i]||e.css).addClass(e.align?"jsgrid-align-"+e.align:"")},_createFilterRow:function(){var e;return c.isFunction(this.filterRowRenderer)?c(this.renderTemplate(this.filterRowRenderer,this)):(e=c("<tr>").addClass(this.filterRowClass),this._eachField(function(t){this._prepareCell("<td>",t,"filtercss").append(this.renderTemplate(t.filterTemplate,t)).appendTo(e)}),e)},_createInsertRow:function(){var e;return c.isFunction(this.insertRowRenderer)?c(this.renderTemplate(this.insertRowRenderer,this)):(e=c("<tr>").addClass(this.insertRowClass),this._eachField(function(t){this._prepareCell("<td>",t,"insertcss").append(this.renderTemplate(t.insertTemplate,t)).appendTo(e)}),e)},_callEventHandler:function(t,e){return t.call(this,c.extend(e,{grid:this})),e},reset:function(){return this._resetSorting(),this._resetPager(),this._loadStrategy.reset()},_resetPager:function(){this._firstDisplayingPage=1,this._setPage(1)},_resetSorting:function(){this._sortField=null,this._sortOrder=l,this._clearSortingCss()},refresh:function(){this._callEventHandler(this.onRefreshing),this.cancelEdit(),this._refreshHeading(),this._refreshFiltering(),this._refreshInserting(),this._refreshContent(),this._refreshPager(),this._refreshSize(),this._callEventHandler(this.onRefreshed)},_refreshHeading:function(){this._headerRow.toggle(this.heading)},_refreshFiltering:function(){this._filterRow.toggle(this.filtering)},_refreshInserting:function(){this._insertRow.toggle(this.inserting)},_refreshContent:function(){var t=this._content;if(t.empty(),!this.data.length)return t.append(this._createNoDataRow()),this;for(var e=this._loadStrategy.firstDisplayIndex(),i=this._loadStrategy.lastDisplayIndex(),n=e;n<i;n++){var r=this.data[n];t.append(this._createRow(r,n))}},_createNoDataRow:function(){var t=0;return this._eachField(function(){t++}),c("<tr>").addClass(this.noDataRowClass).append(c("<td>").addClass(this.cellClass).attr("colspan",t).append(this.renderTemplate(this.noDataContent,this)))},_createRow:function(e,i){var t;return c.isFunction(this.rowRenderer)?t=this.renderTemplate(this.rowRenderer,this,{item:e,itemIndex:i}):(t=c("<tr>"),this._renderCells(t,e)),t.addClass(this._getRowClasses(e,i)).data(o,e).on("click",c.proxy(function(t){this.rowClick({item:e,itemIndex:i,event:t})},this)).on("dblclick",c.proxy(function(t){this.rowDoubleClick({item:e,itemIndex:i,event:t})},this)),this.selecting&&this._attachRowHover(t),t},_getRowClasses:function(t,e){var i=[];return i.push((e+1)%2?this.oddRowClass:this.evenRowClass),i.push(a(this.rowClass,this,t,e)),i.join(" ")},_attachRowHover:function(t){var e=this.selectedRowClass;t.hover(function(){c(this).addClass(e)},function(){c(this).removeClass(e)})},_renderCells:function(e,i){return this._eachField(function(t){e.append(this._createCell(i,t))}),this},_createCell:function(t,e){var i=this._getItemFieldValue(t,e),t={value:i,item:t},i=c.isFunction(e.cellRenderer)?this.renderTemplate(e.cellRenderer,e,t):c("<td>").append(this.renderTemplate(e.itemTemplate||i,e,t));return this._prepareCell(i,e)},_getItemFieldValue:function(t,e){for(var i=e.name.split("."),n=t[i.shift()];n&&i.length;)n=n[i.shift()];return n},_setItemFieldValue:function(t,e,i){for(var n=e.name.split("."),r=t,a=n[0];r&&n.length;)r=(t=r)[a=n.shift()];if(!r)for(;n.length;)t=t[a]={},a=n.shift();t[a]=i},sort:function(t,e){return c.isPlainObject(t)&&(e=t.order,t=t.field),this._clearSortingCss(),this._setSortingParams(t,e),this._setSortingCss(),this._loadStrategy.sort()},_clearSortingCss:function(){this._headerRow.find("th").removeClass(this.sortAscClass).removeClass(this.sortDescClass)},_setSortingParams:function(t,e){t=this._normalizeField(t),e=e||(this._sortField===t?this._reversedSortOrder(this._sortOrder):l),this._sortField=t,this._sortOrder=e},_normalizeField:function(e){return c.isNumeric(e)?this.fields[e]:"string"==typeof e?c.grep(this.fields,function(t){return t.name===e})[0]:e},_reversedSortOrder:function(t){return t===l?"desc":l},_setSortingCss:function(){var t=this._visibleFieldIndex(this._sortField);this._headerRow.find("th").eq(t).addClass(this._sortOrder===l?this.sortAscClass:this.sortDescClass)},_visibleFieldIndex:function(t){return c.inArray(t,c.grep(this.fields,function(t){return t.visible}))},_sortData:function(){var i,n=this._sortFactor(),r=this._sortField;r&&(i=this).data.sort(function(t,e){t=i._getItemFieldValue(t,r),e=i._getItemFieldValue(e,r);return n*r.sortingFunc(t,e)})},_sortFactor:function(){return this._sortOrder===l?1:-1},_itemsCount:function(){return this._loadStrategy.itemsCount()},_pagesCount:function(){var t=this._itemsCount(),e=this.pageSize;return Math.floor(t/e)+(t%e?1:0)},_refreshPager:function(){var t=this._pagerContainer,e=(t.empty(),this.paging&&t.append(this._createPager()),this.paging&&1<this._pagesCount());t.toggle(e)},_createPager:function(){var t=c.isFunction(this.pagerRenderer)?c(this.pagerRenderer({pageIndex:this.pageIndex,pageCount:this._pagesCount()})):c("<div>").append(this._createPagerByFormat());return t.addClass(this.pagerClass),t},_createPagerByFormat:function(){var i=this.pageIndex,n=this._pagesCount(),r=this._itemsCount(),t=this.pagerFormat.split(" ");return c.map(t,c.proxy(function(t){var e=t;return"{pages}"===t?e=this._createPages():"{first}"===t?e=this._createPagerNavButton(this.pageFirstText,1,1<i):"{prev}"===t?e=this._createPagerNavButton(this.pagePrevText,i-1,1<i):"{next}"===t?e=this._createPagerNavButton(this.pageNextText,i+1,i<n):"{last}"===t?e=this._createPagerNavButton(this.pageLastText,n,i<n):"{pageIndex}"===t?e=i:"{pageCount}"===t?e=n:"{itemCount}"===t&&(e=r),c.isArray(e)?e.concat([" "]):[e," "]},this))},_createPages:function(){var t=this._pagesCount(),e=this.pageButtonCount,i=this._firstDisplayingPage,n=[];1<i&&n.push(this._createPagerPageNavButton(this.pageNavigatorPrevText,this.showPrevPages));for(var r=0,a=i;r<e&&a<=t;r++,a++)n.push(a===this.pageIndex?this._createPagerCurrentPage():this._createPagerPage(a));return i+e-1<t&&n.push(this._createPagerPageNavButton(this.pageNavigatorNextText,this.showNextPages)),n},_createPagerNavButton:function(t,e,i){return this._createPagerButton(t,this.pagerNavButtonClass+(i?"":" "+this.pagerNavButtonInactiveClass),i?function(){this.openPage(e)}:c.noop)},_createPagerPageNavButton:function(t,e){return this._createPagerButton(t,this.pagerNavButtonClass,e)},_createPagerPage:function(t){return this._createPagerButton(t,this.pageClass,function(){this.openPage(t)})},_createPagerButton:function(t,e,i){t=c("<a>").attr("href","javascript:void(0);").html(t).on("click",c.proxy(i,this));return c("<span>").addClass(e).append(t)},_createPagerCurrentPage:function(){return c("<span>").addClass(this.pageClass).addClass(this.currentPageClass).text(this.pageIndex)},_refreshSize:function(){this._refreshHeight(),this._refreshWidth()},_refreshWidth:function(){var t="auto"===this.width?this._getAutoWidth():this.width;this._container.width(t)},_getAutoWidth:function(){var t=this._headerGrid,e=this._header,i=(t.width("auto"),t.outerWidth()),e=e.outerWidth()-e.innerWidth();return t.width(""),i+e},_scrollBarWidth:function(){var t,e,i;return n===u&&((i=(t=c("<div></div>")).get(0)).style.width="50px",i.style.height="50px",i.style.position="absolute",i.style.top="-10000px",i.style.left="-10000px",(i=c("<div></div>")).get(0).style.height="100px",t.append(i).appendTo("body"),e=i.innerWidth(),t.get(0).style.overflowY="auto",i=i.innerWidth(),t.remove(),n=e-i),n},_refreshHeight:function(){var t,e=this._container,i=this._pagerContainer,n=this.height;e.height(n),"auto"!==n&&(n=e.height(),t=this._header.outerHeight(!0),i.parents(e).length&&(t+=i.outerHeight(!0)),this._body.outerHeight(n-t))},showPrevPages:function(){var t=this._firstDisplayingPage,e=this.pageButtonCount;this._firstDisplayingPage=e<t?t-e:1,this._refreshPager()},showNextPages:function(){var t=this._firstDisplayingPage,e=this.pageButtonCount,i=this._pagesCount();this._firstDisplayingPage=i<t+2*e?i-e+1:t+e,this._refreshPager()},openPage:function(t){t<1||t>this._pagesCount()||(this._setPage(t),this._loadStrategy.openPage(t))},_setPage:function(t){var e=this._firstDisplayingPage,i=this.pageButtonCount;(this.pageIndex=t)<e&&(this._firstDisplayingPage=t),e+i-1<t&&(this._firstDisplayingPage=t-i+1),this._callEventHandler(this.onPageChanged,{pageIndex:t})},_controllerCall:function(t,e,i,n){if(i)return c.Deferred().reject().promise();this._showLoading();var r,i=this._controller;if(i&&i[t])return i=i[t](e),r=c.Deferred(),i&&i.then?i.then(function(){r.resolve.apply(r,arguments)},function(){r.reject.apply(r,arguments)}):r.resolve(i),r.promise().done(c.proxy(n,this)).fail(c.proxy(this._errorHandler,this)).always(c.proxy(this._hideLoading,this));throw Error("controller has no method '"+t+"'")},_errorHandler:function(){this._callEventHandler(this.onError,{args:c.makeArray(arguments)})},_showLoading:function(){this.loadIndication&&(clearTimeout(this._loadingTimer),this._loadingTimer=setTimeout(c.proxy(function(){this._loadIndicator.show()},this),this.loadIndicationDelay))},_hideLoading:function(){this.loadIndication&&(clearTimeout(this._loadingTimer),this._loadIndicator.hide())},search:function(t){return this._resetSorting(),this._resetPager(),this.loadData(t)},loadData:function(t){t=t||(this.filtering?this.getFilter():{}),c.extend(t,this._loadStrategy.loadParams(),this._sortingParams());var e=this._callEventHandler(this.onDataLoading,{filter:t});return this._controllerCall("loadData",t,e.cancel,function(t){t&&(this._loadStrategy.finishLoad(t),this._callEventHandler(this.onDataLoaded,{data:t}))})},exportData:function(t){var t=t||{},e=t.type||"csv",i="";return this._callEventHandler(this.onDataExporting),i="csv"===e?this._dataToCsv(t):i},_dataToCsv:function(t){var e=!(t=t||{}).hasOwnProperty("includeHeaders")||t.includeHeaders,i=t.subset||"all",n=t.filter||u,r=[];if(e){for(var a=this.fields.length,s={},o=0;o<a;o++){var d=this.fields[o];"includeInDataExport"in d&&!0===d.includeInDataExport&&(s[o]=d.title||d.name)}e=this._itemToCsv(s,{},t);r.push(e)}for(var e=0,l=this.data.length,o=e="visible"===i?(l=this._firstDisplayingPage*this.pageSize)-this.pageSize:e;o<l;o++){var h=this.data[o],c=!0;(c=!n||n(h)?c:!1)&&(c=this._itemToCsv(h,this.fields,t),r.push(c))}return r.join("")},_itemToCsv:function(a,s,t){var e=(t=t||{}).delimiter||"|",o=!t.hasOwnProperty("encapsulate")||t.encapsulate,i=t.newline||"\r\n",d=t.transforms||{},s=s||{},l=this._getItemFieldValue,h=[];return Object.keys(a).forEach(function(t,e){var i="";if(0<s.length){var n,r=s[e];if("includeInDataExport"in r){if(!r.includeInDataExport)return;i="select"===r.type?(n=l(a,r),(c.grep(r.items,function(t,e){return t[r.valueField]===n})[0]||"")[r.textField]):l(a,r)}else i=l(a,r);d.hasOwnProperty(r.name)&&(i=d[r.name](i))}else i=a[t];h.push(i=o?'"'+i+'"':i)}),h.join(e)+i},getFilter:function(){var e={};return this._eachField(function(t){t.filtering&&this._setItemFieldValue(e,t,t.filterValue())}),e},_sortingParams:function(){return this.sorting&&this._sortField?{sortField:this._sortField.name,sortOrder:this._sortOrder}:{}},getSorting:function(){var t=this._sortingParams();return{field:t.sortField,order:t.sortOrder}},clearFilter:function(){var t=this._createFilterRow();return this._filterRow.replaceWith(t),this._filterRow=t,this.search()},insertItem:function(t){var e=t||this._getValidatedInsertItem();return e?(t=this._callEventHandler(this.onItemInserting,{item:e}),this._controllerCall("insertItem",e,t.cancel,function(t){this._loadStrategy.finishInsert(t=t||e,this.insertRowLocation),this._callEventHandler(this.onItemInserted,{item:t})})):c.Deferred().reject().promise()},_getValidatedInsertItem:function(){var t=this._getInsertItem();return this._validateItem(t,this._insertRow)?t:null},_getInsertItem:function(){var e={};return this._eachField(function(t){t.inserting&&this._setItemFieldValue(e,t,t.insertValue())}),e},_validateItem:function(i,n){var t,r=[],a={item:i,itemIndex:this._rowIndex(n),row:n};return this._eachField(function(e){var t;!e.validate||n===this._insertRow&&!e.inserting||n===this._getEditRow()&&!e.editing||(t=this._getItemFieldValue(i,e),t=this._validation.validate(c.extend({value:t,rules:e.validate},a)),this._setCellValidity(n.children().eq(this._visibleFieldIndex(e)),t),t.length&&r.push.apply(r,c.map(t,function(t){return{field:e,message:t}})))}),!r.length||(t=c.extend({errors:r},a),this._callEventHandler(this.onItemInvalid,t),this.invalidNotify(t),!1)},_setCellValidity:function(t,e){t.toggleClass(this.invalidClass,!!e.length).attr("title",e.join("\n"))},clearInsert:function(){var t=this._createInsertRow();this._insertRow.replaceWith(t),this._insertRow=t,this.refresh()},editItem:function(t){t=this.rowByItem(t);t.length&&this._editRow(t)},rowByItem:function(t){return t.jquery||t.nodeType?c(t):this._content.find("tr").filter(function(){return c.data(this,o)===t})},_editRow:function(t){var e;this.editing&&(e=t.data(o),this._callEventHandler(this.onItemEditing,{row:t,item:e,itemIndex:this._itemIndex(e)}).cancel||(this._editingRow&&this.cancelEdit(),e=this._createEditRow(e),(this._editingRow=t).hide(),e.insertBefore(t),t.data(i,e)))},_createEditRow:function(i){var n;return c.isFunction(this.editRowRenderer)?c(this.renderTemplate(this.editRowRenderer,this,{item:i,itemIndex:this._itemIndex(i)})):(n=c("<tr>").addClass(this.editRowClass),this._eachField(function(t){var e=this._getItemFieldValue(i,t);this._prepareCell("<td>",t,"editcss").append(this.renderTemplate(t.editTemplate||"",t,{value:e,item:i})).appendTo(n)}),n)},updateItem:function(t,e){1===arguments.length&&(e=t);t=t?this.rowByItem(t):this._editingRow;if(e=e||this._getValidatedEditedItem())return this._updateRow(t,e)},_getValidatedEditedItem:function(){var t=this._getEditedItem();return this._validateItem(t,this._getEditRow())?t:null},_updateRow:function(i,t){var n=i.data(o),r=this._itemIndex(n),a=c.extend(!0,{},n,t),t=this._callEventHandler(this.onItemUpdating,{row:i,item:a,itemIndex:r,previousItem:n});return this._controllerCall("updateItem",a,t.cancel,function(t){var e=c.extend(!0,{},n),t=(a=t||c.extend(!0,n,a),this._finishUpdate(i,a,r));this._callEventHandler(this.onItemUpdated,{row:t,item:a,itemIndex:r,previousItem:e})})},_rowIndex:function(t){return this._content.children().index(c(t))},_itemIndex:function(t){return c.inArray(t,this.data)},_finishUpdate:function(t,e,i){this.cancelEdit(),this.data[i]=e;e=this._createRow(e,i);return t.replaceWith(e),e},_getEditedItem:function(){var e={};return this._eachField(function(t){t.editing&&this._setItemFieldValue(e,t,t.editValue())}),e},cancelEdit:function(){var t,e,i;this._editingRow&&(e=(t=this._editingRow).data(o),i=this._itemIndex(e),this._callEventHandler(this.onItemEditCancelling,{row:t,item:e,itemIndex:i}),this._getEditRow().remove(),this._editingRow.show(),this._editingRow=null)},_getEditRow:function(){return this._editingRow&&this._editingRow.data(i)},deleteItem:function(t){t=this.rowByItem(t);if(t.length&&(!this.confirmDeleting||e.confirm(a(this.deleteConfirm,this,t.data(o)))))return this._deleteRow(t)},_deleteRow:function(t){var e=t.data(o),i=this._itemIndex(e),n=this._callEventHandler(this.onItemDeleting,{row:t,item:e,itemIndex:i});return this._controllerCall("deleteItem",e,n.cancel,function(){this._loadStrategy.finishDelete(e,i),this._callEventHandler(this.onItemDeleted,{row:t,item:e,itemIndex:i})})}},c.fn.jsGrid=function(n){var r=c.makeArray(arguments).slice(1),a=this;return this.each(function(){var t,e=c(this),i=e.data(s);if(i)if("string"==typeof n){if((t=i[n].apply(i,r))!==u&&t!==i)return a=t,!1}else i._detachWindowResizeCallback(),i._init(n),i.render();else new h(e,n)}),a};var g={},p={},_=function(i,t){c.each(t,function(t,e){c.isPlainObject(e)?_(i[t]||i[t[0].toUpperCase()+t.slice(1)],e):i.hasOwnProperty(t)?i[t]=e:i.prototype[t]=e})};e.jsGrid={Grid:h,fields:g,setDefaults:function(t){var e;c.isPlainObject(t)?e=h.prototype:(e=g[t].prototype,t=arguments[1]||{}),c.extend(e,t)},locales:p,locale:function(t){var e=c.isPlainObject(t)?t:p[t];if(!e)throw Error("unknown locale "+t);_(jsGrid,e)},version:"2.1.0"}})(window,jQuery),((t,e)=>{function i(t){this._init(t)}i.prototype={container:"body",message:"Loading...",shading:!0,zIndex:1e3,shaderClass:"jsgrid-load-shader",loadPanelClass:"jsgrid-load-panel",_init:function(t){e.extend(!0,this,t),this._initContainer(),this._initShader(),this._initLoadPanel()},_initContainer:function(){this._container=e(this.container)},_initShader:function(){this.shading&&(this._shader=e("<div>").addClass(this.shaderClass).hide().css({position:"absolute",top:0,right:0,bottom:0,left:0,zIndex:this.zIndex}).appendTo(this._container))},_initLoadPanel:function(){this._loadPanel=e("<div>").addClass(this.loadPanelClass).text(this.message).hide().css({position:"absolute",top:"50%",left:"50%",zIndex:this.zIndex}).appendTo(this._container)},show:function(){var t=this._loadPanel.show(),e=t.outerWidth(),i=t.outerHeight();t.css({marginTop:-i/2,marginLeft:-e/2}),this._shader.show()},hide:function(){this._loadPanel.hide(),this._shader.hide()}},t.LoadIndicator=i})(jsGrid,jQuery),((t,e)=>{function i(t){this._grid=t}function n(t){this._grid=t,this._itemsCount=0}i.prototype={firstDisplayIndex:function(){var t=this._grid;return t.option("paging")?(t.option("pageIndex")-1)*t.option("pageSize"):0},lastDisplayIndex:function(){var t=this._grid,e=t.option("data").length;return t.option("paging")?Math.min(t.option("pageIndex")*t.option("pageSize"),e):e},itemsCount:function(){return this._grid.option("data").length},openPage:function(t){this._grid.refresh()},loadParams:function(){return{}},sort:function(){return this._grid._sortData(),this._grid.refresh(),e.Deferred().resolve().promise()},reset:function(){return this._grid.refresh(),e.Deferred().resolve().promise()},finishLoad:function(t){this._grid.option("data",t)},finishInsert:function(t,e){var i=this._grid;"top"===e?i.option("data").unshift(t):i.option("data").push(t),i.refresh()},finishDelete:function(t,e){var i=this._grid;i.option("data").splice(e,1),i.reset()}},n.prototype={firstDisplayIndex:function(){return 0},lastDisplayIndex:function(){return this._grid.option("data").length},itemsCount:function(){return this._itemsCount},openPage:function(t){this._grid.loadData()},loadParams:function(){var t=this._grid;return{pageIndex:t.option("pageIndex"),pageSize:t.option("pageSize")}},reset:function(){return this._grid.loadData()},sort:function(){return this._grid.loadData()},finishLoad:function(t){this._itemsCount=t.itemsCount,this._grid.option("data",t.data)},finishInsert:function(t){this._grid.search()},finishDelete:function(t,e){this._grid.search()}},t.loadStrategies={DirectLoadingStrategy:i,PageLoadingStrategy:n}})(jsGrid,jQuery),(t=>{function i(t){return null!=t}t.sortStrategies={string:function(t,e){return i(t)||i(e)?i(t)?i(e)?(""+t).localeCompare(""+e):1:-1:0},stringNaturalSort:function(t,e){return i(t)||i(e)?i(t)?i(e)?(""+t).localeCompare(""+e,void 0,{numeric:!0,sensitivity:"base"}):1:-1:0},number:function(t,e){return t-e},date:function(t,e){return t-e},numberAsString:function(t,e){return parseFloat(t)-parseFloat(e)}}})(jsGrid,jQuery),((t,r)=>{function e(t){this._init(t)}e.prototype={_init:function(t){r.extend(!0,this,t)},validate:function(i){var n=[];return r.each(this._normalizeRules(i.rules),function(t,e){e.validator(i.value,i.item,e.param)||(e=r.isFunction(e.message)?e.message(i.value,i.item):e.message,n.push(e))}),n},_normalizeRules:function(t){return r.isArray(t)||(t=[t]),r.map(t,r.proxy(function(t){return this._normalizeRule(t)},this))},_normalizeRule:function(t){if(r.isFunction(t="string"==typeof t?{validator:t}:t)&&(t={validator:t}),r.isPlainObject(t))return t=r.extend({},t),r.isFunction(t.validator)?t:this._applyNamedValidator(t,t.validator);throw Error("wrong validation config specified")},_applyNamedValidator:function(t,e){delete t.validator;var i=n[e];if(i)return r.isFunction(i)&&(i={validator:i}),r.extend({},i,t);throw Error('unknown validator "'+e+'"')}},t.Validation=e;var n={required:{message:"Field is required",validator:function(t){return null!=t&&""!==t}},rangeLength:{message:"Field value length is out of the defined range",validator:function(t,e,i){return t.length>=i[0]&&t.length<=i[1]}},minLength:{message:"Field value is too short",validator:function(t,e,i){return t.length>=i}},maxLength:{message:"Field value is too long",validator:function(t,e,i){return t.length<=i}},pattern:{message:"Field value is not matching the defined pattern",validator:function(t,e,i){return(i="string"==typeof i?new RegExp("^(?:"+i+")$"):i).test(t)}},range:{message:"Field value is out of the defined range",validator:function(t,e,i){return t>=i[0]&&t<=i[1]}},min:{message:"Field value is too small",validator:function(t,e,i){return i<=t}},max:{message:"Field value is too large",validator:function(t,e,i){return t<=i}}};t.validators=n})(jsGrid,jQuery),((e,i)=>{function t(t){i.extend(!0,this,t),this.sortingFunc=this._getSortingFunc()}t.prototype={name:"",title:null,css:"",align:"",width:100,visible:!0,filtering:!0,inserting:!0,editing:!0,sorting:!0,sorter:"string",includeInDataExport:!0,headerTemplate:function(){return null==this.title?this.name:this.title},itemTemplate:function(t,e){return t},filterTemplate:function(){return""},insertTemplate:function(){return""},editTemplate:function(t,e){return this._value=t,this.itemTemplate(t,e)},filterValue:function(){return""},insertValue:function(){return""},editValue:function(){return this._value},_getSortingFunc:function(){var t=this.sorter;if(i.isFunction(t))return t;if("string"==typeof t)return e.sortStrategies[t];throw Error('wrong sorter for the field "'+this.name+'"!')}},e.Field=t})(jsGrid,jQuery);
6
+ ((e,c,u)=>{function r(t,e){return c.isFunction(t)?t.apply(e,c.makeArray(arguments).slice(2)):t}var n,s="JSGrid",o="JSGridItem",i="JSGridEditRow",a=[],d=0,l="asc",t={loadData:c.noop,insertItem:c.noop,updateItem:c.noop,deleteItem:c.noop};function h(t,e){t=c(t);0==a.length?(this._id=d,d++):this._id=a.pop(),t.data(s,this),this._container=t,this.data=[],this.fields=[],this._editingRow=null,this._sortField=null,this._sortOrder=l,this._firstDisplayingPage=1,this._init(e),this.render()}h.prototype={width:"auto",height:"auto",updateOnResize:!0,locale:null,rowClass:c.noop,rowRenderer:null,rowClick:function(t){this.editing&&this.editItem(c(t.event.target).closest("tr"))},rowDoubleClick:c.noop,noDataContent:"Not found",noDataRowClass:"jsgrid-nodata-row",heading:!0,headerRowRenderer:null,headerRowClass:"jsgrid-header-row",headerCellClass:"jsgrid-header-cell",filtering:!1,filterRowRenderer:null,filterRowClass:"jsgrid-filter-row",inserting:!1,insertRowLocation:"bottom",insertRowRenderer:null,insertRowClass:"jsgrid-insert-row",editing:!1,editRowRenderer:null,editRowClass:"jsgrid-edit-row",confirmDeleting:!0,deleteConfirm:"Are you sure?",selecting:!0,selectedRowClass:"jsgrid-selected-row",oddRowClass:"jsgrid-row",evenRowClass:"jsgrid-alt-row",cellClass:"jsgrid-cell",sorting:!1,sortableClass:"jsgrid-header-sortable",sortAscClass:"jsgrid-header-sort jsgrid-header-sort-asc",sortDescClass:"jsgrid-header-sort jsgrid-header-sort-desc",paging:!1,pagerContainer:null,pageIndex:1,pageSize:20,pageButtonCount:15,pagerFormat:"Pages: {first} {prev} {pages} {next} {last} &nbsp;&nbsp; {pageIndex} of {pageCount}",pagePrevText:"Prev",pageNextText:"Next",pageFirstText:"First",pageLastText:"Last",pageNavigatorNextText:"...",pageNavigatorPrevText:"...",pagerContainerClass:"jsgrid-pager-container",pagerClass:"jsgrid-pager",pagerNavButtonClass:"jsgrid-pager-nav-button",pagerNavButtonInactiveClass:"jsgrid-pager-nav-inactive-button",pageClass:"jsgrid-pager-page",currentPageClass:"jsgrid-pager-current-page",customLoading:!1,pageLoading:!1,autoload:!1,controller:t,loadIndication:!0,loadIndicationDelay:500,loadMessage:"Please, wait...",loadShading:!0,invalidMessage:"Invalid data entered!",invalidNotify:function(t){t=c.map(t.errors,function(t){return t.message||null});e.alert([this.invalidMessage].concat(t).join("\n"))},onInit:c.noop,onRefreshing:c.noop,onRefreshed:c.noop,onPageChanged:c.noop,onItemDeleting:c.noop,onItemDeleted:c.noop,onItemInserting:c.noop,onItemInserted:c.noop,onItemEditing:c.noop,onItemEditCancelling:c.noop,onItemUpdating:c.noop,onItemUpdated:c.noop,onItemInvalid:c.noop,onDataLoading:c.noop,onDataLoaded:c.noop,onDataExporting:c.noop,onOptionChanging:c.noop,onOptionChanged:c.noop,onError:c.noop,invalidClass:"jsgrid-invalid",containerClass:"jsgrid",tableClass:"jsgrid-table",gridHeaderClass:"jsgrid-grid-header",gridBodyClass:"jsgrid-grid-body",_init:function(t){this._initInstanceLocale(t&&t.locale),c.extend(this,t),this._initLoadStrategy(),this._initController(),this._initFields(),this._attachWindowLoadResize(),this._attachWindowResizeCallback(),this._callEventHandler(this.onInit)},_initInstanceLocale:function(t){t&&(t=c.isPlainObject(t)?t:jsGrid.locales[t])&&(t.grid&&c.extend(this,t.grid),this._fieldsLocaleConfig=t.fields,this._validatorsLocaleConfig=t.validators)},loadStrategy:function(){return new(this.pageLoading?jsGrid.loadStrategies.PageLoadingStrategy:jsGrid.loadStrategies.DirectLoadingStrategy)(this)},_initLoadStrategy:function(){this._loadStrategy=r(this.loadStrategy,this)},_initController:function(){this._controller=c.extend({},t,r(this.controller,this))},renderTemplate:function(t,e,i){var n,a=[];for(n in i)a.push(i[n]);return a.unshift(t,e),(t=r.apply(null,a))===u||null===t?"":t},loadIndicator:function(t){return new jsGrid.LoadIndicator(t)},validation:function(t){return jsGrid.Validation&&new jsGrid.Validation(t)},_initFields:function(){var i=this,n=i._fieldsLocaleConfig;i.fields=c.map(i.fields,function(t){var e;return(t=c.isPlainObject(t)?new(t.type&&jsGrid.fields[t.type]||jsGrid.Field)(t=(e=n&&t.type&&n[t.type])?c.extend({},e,t):t):t)._grid=i,t})},_attachWindowLoadResize:function(){c(e).on("load.table-"+this._id,c.proxy(this._refreshSize,this))},_attachWindowResizeCallback:function(){this.updateOnResize&&c(e).on("resize.table-"+this._id,c.proxy(this._refreshSize,this))},_detachWindowLoadResize:function(){c(e).off("load.table-"+this._id)},_detachWindowResizeCallback:function(){c(e).off("resize.table-"+this._id)},option:function(t,e){if(1===arguments.length)return this[t];t={option:t,oldValue:this[t],newValue:e},this._callEventHandler(this.onOptionChanging,t),this._handleOptionChange(t.option,t.newValue),this._callEventHandler(this.onOptionChanged,{option:t.option,value:t.newValue})},fieldOption:function(t,e,i){if(t=this._normalizeField(t),2===arguments.length)return t[e];t[e]=i,this._renderGrid()},_handleOptionChange:function(t,e){switch(this[t]=e,t){case"width":case"height":this._refreshSize();break;case"rowClass":case"rowRenderer":case"rowClick":case"rowDoubleClick":case"noDataRowClass":case"noDataContent":case"selecting":case"selectedRowClass":case"oddRowClass":case"evenRowClass":this._refreshContent();break;case"pageButtonCount":case"pagerFormat":case"pagePrevText":case"pageNextText":case"pageFirstText":case"pageLastText":case"pageNavigatorNextText":case"pageNavigatorPrevText":case"pagerClass":case"pagerNavButtonClass":case"pageClass":case"currentPageClass":case"pagerRenderer":this._refreshPager();break;case"fields":this._initFields(),this.render();break;case"data":case"editing":case"heading":case"filtering":case"inserting":case"paging":this.refresh();break;case"loadStrategy":case"pageLoading":this._initLoadStrategy(),this.search();break;case"pageIndex":this.openPage(e);break;case"pageSize":this.refresh(),this.search();break;case"editRowRenderer":case"editRowClass":this.cancelEdit();break;case"updateOnResize":this._detachWindowResizeCallback(),this._attachWindowResizeCallback();break;case"invalidNotify":case"invalidMessage":break;default:this.render()}},destroy:function(){this._detachWindowResizeCallback(),this._detachWindowLoadResize(),a.push(this._id),this._clear(),this._container.removeData(s)},render:function(){return this._renderGrid(),this.autoload?this.loadData():c.Deferred().resolve().promise()},_renderGrid:function(){this._clear(),this._container.addClass(this.containerClass).css("position","relative").append(this._createHeader()).append(this._createBody()),this._pagerContainer=this._createPagerContainer(),this._loadIndicator=this._createLoadIndicator(),this._validation=this._createValidation(),this.refresh()},_createLoadIndicator:function(){return r(this.loadIndicator,this,{message:this.loadMessage,shading:this.loadShading,container:this._container})},_createValidation:function(){return r(this.validation,this,{validatorsLocale:this._validatorsLocaleConfig})},_clear:function(){this.cancelEdit(),clearTimeout(this._loadingTimer),this._pagerContainer&&this._pagerContainer.empty(),this._container.empty().css({position:"",width:"",height:""})},_createHeader:function(){var t=this._headerRow=this._createHeaderRow(),e=this._filterRow=this._createFilterRow(),i=this._insertRow=this._createInsertRow(),t=this._headerGrid=c("<table>").addClass(this.tableClass).append(t).append(e).append(i);return this._header=c("<div>").addClass(this.gridHeaderClass).addClass(this._scrollBarWidth()?"jsgrid-header-scrollbar":"").append(t)},_createBody:function(){var t=this._content=c("<tbody>"),t=this._bodyGrid=c("<table>").addClass(this.tableClass).append(t);return this._body=c("<div>").addClass(this.gridBodyClass).append(t).on("scroll",c.proxy(function(t){this._header.scrollLeft(t.target.scrollLeft)},this))},_createPagerContainer:function(){var t=this.pagerContainer||c("<div>").appendTo(this._container);return c(t).addClass(this.pagerContainerClass)},_eachField:function(i){var n=this;c.each(this.fields,function(t,e){e.visible&&i.call(n,e,t)})},_createHeaderRow:function(){var n;return c.isFunction(this.headerRowRenderer)?c(this.renderTemplate(this.headerRowRenderer,this)):(n=c("<tr>").addClass(this.headerRowClass),this._eachField(function(t,e){var i=this._prepareCell("<th>",t,"headercss",this.headerCellClass).append(this.renderTemplate(t.headerTemplate,t)).appendTo(n);this.sorting&&t.sorting&&i.addClass(this.sortableClass).on("click",c.proxy(function(){this.sort(e)},this))}),n)},_prepareCell:function(t,e,i,n){return c(t).css("width",e.width).addClass(n||this.cellClass).addClass(i&&e[i]||e.css).addClass(e.align?"jsgrid-align-"+e.align:"")},_createFilterRow:function(){var e;return c.isFunction(this.filterRowRenderer)?c(this.renderTemplate(this.filterRowRenderer,this)):(e=c("<tr>").addClass(this.filterRowClass),this._eachField(function(t){this._prepareCell("<td>",t,"filtercss").append(this.renderTemplate(t.filterTemplate,t)).appendTo(e)}),e)},_createInsertRow:function(){var e;return c.isFunction(this.insertRowRenderer)?c(this.renderTemplate(this.insertRowRenderer,this)):(e=c("<tr>").addClass(this.insertRowClass),this._eachField(function(t){this._prepareCell("<td>",t,"insertcss").append(this.renderTemplate(t.insertTemplate,t)).appendTo(e)}),e)},_callEventHandler:function(t,e){return t.call(this,c.extend(e,{grid:this})),e},reset:function(){return this._resetSorting(),this._resetPager(),this._loadStrategy.reset()},_resetPager:function(){this._firstDisplayingPage=1,this._setPage(1)},_resetSorting:function(){this._sortField=null,this._sortOrder=l,this._clearSortingCss()},refresh:function(){this._callEventHandler(this.onRefreshing),this.cancelEdit(),this._refreshHeading(),this._refreshFiltering(),this._refreshInserting(),this._refreshContent(),this._refreshPager(),this._refreshSize(),this._callEventHandler(this.onRefreshed)},_refreshHeading:function(){this._headerRow.toggle(this.heading)},_refreshFiltering:function(){this._filterRow.toggle(this.filtering)},_refreshInserting:function(){this._insertRow.toggle(this.inserting)},_refreshContent:function(){var t=this._content;if(t.empty(),!this.data.length)return t.append(this._createNoDataRow()),this;for(var e=this._loadStrategy.firstDisplayIndex(),i=this._loadStrategy.lastDisplayIndex(),n=e;n<i;n++){var a=this.data[n];t.append(this._createRow(a,n))}},_createNoDataRow:function(){var t=0;return this._eachField(function(){t++}),c("<tr>").addClass(this.noDataRowClass).append(c("<td>").addClass(this.cellClass).attr("colspan",t).append(this.renderTemplate(this.noDataContent,this)))},_createRow:function(e,i){var t;return c.isFunction(this.rowRenderer)?t=this.renderTemplate(this.rowRenderer,this,{item:e,itemIndex:i}):(t=c("<tr>"),this._renderCells(t,e)),t.addClass(this._getRowClasses(e,i)).data(o,e).on("click",c.proxy(function(t){this.rowClick({item:e,itemIndex:i,event:t})},this)).on("dblclick",c.proxy(function(t){this.rowDoubleClick({item:e,itemIndex:i,event:t})},this)),this.selecting&&this._attachRowHover(t),t},_getRowClasses:function(t,e){var i=[];return i.push((e+1)%2?this.oddRowClass:this.evenRowClass),i.push(r(this.rowClass,this,t,e)),i.join(" ")},_attachRowHover:function(t){var e=this.selectedRowClass;t.hover(function(){c(this).addClass(e)},function(){c(this).removeClass(e)})},_renderCells:function(e,i){return this._eachField(function(t){e.append(this._createCell(i,t))}),this},_createCell:function(t,e){var i=this._getItemFieldValue(t,e),t={value:i,item:t},i=c.isFunction(e.cellRenderer)?this.renderTemplate(e.cellRenderer,e,t):c("<td>").append(this.renderTemplate(e.itemTemplate||i,e,t));return this._prepareCell(i,e)},_getItemFieldValue:function(t,e){for(var i=e.name.split("."),n=t[i.shift()];n&&i.length;)n=n[i.shift()];return n},_setItemFieldValue:function(t,e,i){for(var n=e.name.split("."),a=t,r=n[0];a&&n.length;)a=(t=a)[r=n.shift()];if(!a)for(;n.length;)t=t[r]={},r=n.shift();t[r]=i},sort:function(t,e){return c.isPlainObject(t)&&(e=t.order,t=t.field),this._clearSortingCss(),this._setSortingParams(t,e),this._setSortingCss(),this._loadStrategy.sort()},_clearSortingCss:function(){this._headerRow.find("th").removeClass(this.sortAscClass).removeClass(this.sortDescClass)},_setSortingParams:function(t,e){t=this._normalizeField(t),e=e||(this._sortField===t?this._reversedSortOrder(this._sortOrder):l),this._sortField=t,this._sortOrder=e},_normalizeField:function(e){return c.isNumeric(e)?this.fields[e]:"string"==typeof e?c.grep(this.fields,function(t){return t.name===e})[0]:e},_reversedSortOrder:function(t){return t===l?"desc":l},_setSortingCss:function(){var t=this._visibleFieldIndex(this._sortField);this._headerRow.find("th").eq(t).addClass(this._sortOrder===l?this.sortAscClass:this.sortDescClass)},_visibleFieldIndex:function(t){return c.inArray(t,c.grep(this.fields,function(t){return t.visible}))},_sortData:function(){var i,n=this._sortFactor(),a=this._sortField;a&&(i=this).data.sort(function(t,e){t=i._getItemFieldValue(t,a),e=i._getItemFieldValue(e,a);return n*a.sortingFunc(t,e)})},_sortFactor:function(){return this._sortOrder===l?1:-1},_itemsCount:function(){return this._loadStrategy.itemsCount()},_pagesCount:function(){var t=this._itemsCount(),e=this.pageSize;return Math.floor(t/e)+(t%e?1:0)},_refreshPager:function(){var t=this._pagerContainer,e=(t.empty(),this.paging&&t.append(this._createPager()),this.paging&&1<this._pagesCount());t.toggle(e)},_createPager:function(){var t=c.isFunction(this.pagerRenderer)?c(this.pagerRenderer({pageIndex:this.pageIndex,pageCount:this._pagesCount()})):c("<div>").append(this._createPagerByFormat());return t.addClass(this.pagerClass),t},_createPagerByFormat:function(){var i=this.pageIndex,n=this._pagesCount(),a=this._itemsCount(),t=this.pagerFormat.split(" ");return c.map(t,c.proxy(function(t){var e=t;return"{pages}"===t?e=this._createPages():"{first}"===t?e=this._createPagerNavButton(this.pageFirstText,1,1<i):"{prev}"===t?e=this._createPagerNavButton(this.pagePrevText,i-1,1<i):"{next}"===t?e=this._createPagerNavButton(this.pageNextText,i+1,i<n):"{last}"===t?e=this._createPagerNavButton(this.pageLastText,n,i<n):"{pageIndex}"===t?e=i:"{pageCount}"===t?e=n:"{itemCount}"===t&&(e=a),c.isArray(e)?e.concat([" "]):[e," "]},this))},_createPages:function(){var t=this._pagesCount(),e=this.pageButtonCount,i=this._firstDisplayingPage,n=[];1<i&&n.push(this._createPagerPageNavButton(this.pageNavigatorPrevText,this.showPrevPages));for(var a=0,r=i;a<e&&r<=t;a++,r++)n.push(r===this.pageIndex?this._createPagerCurrentPage():this._createPagerPage(r));return i+e-1<t&&n.push(this._createPagerPageNavButton(this.pageNavigatorNextText,this.showNextPages)),n},_createPagerNavButton:function(t,e,i){return this._createPagerButton(t,this.pagerNavButtonClass+(i?"":" "+this.pagerNavButtonInactiveClass),i?function(){this.openPage(e)}:c.noop)},_createPagerPageNavButton:function(t,e){return this._createPagerButton(t,this.pagerNavButtonClass,e)},_createPagerPage:function(t){return this._createPagerButton(t,this.pageClass,function(){this.openPage(t)})},_createPagerButton:function(t,e,i){t=c("<a>").attr("href","javascript:void(0);").html(t).on("click",c.proxy(i,this));return c("<span>").addClass(e).append(t)},_createPagerCurrentPage:function(){return c("<span>").addClass(this.pageClass).addClass(this.currentPageClass).text(this.pageIndex)},_refreshSize:function(){this._refreshHeight(),this._refreshWidth()},_refreshWidth:function(){var t="auto"===this.width?this._getAutoWidth():this.width;this._container.width(t)},_getAutoWidth:function(){var t=this._headerGrid,e=this._header,i=(t.width("auto"),t.outerWidth()),e=e.outerWidth()-e.innerWidth();return t.width(""),i+e},_scrollBarWidth:function(){var t,e,i;return n===u&&((i=(t=c("<div></div>")).get(0)).style.width="50px",i.style.height="50px",i.style.position="absolute",i.style.top="-10000px",i.style.left="-10000px",(i=c("<div></div>")).get(0).style.height="100px",t.append(i).appendTo("body"),e=i.innerWidth(),t.get(0).style.overflowY="auto",i=i.innerWidth(),t.remove(),n=e-i),n},_refreshHeight:function(){var t,e=this._container,i=this._pagerContainer,n=this.height;e.height(n),"auto"!==n&&(n=e.height(),t=this._header.outerHeight(!0),i.parents(e).length&&(t+=i.outerHeight(!0)),this._body.outerHeight(n-t))},showPrevPages:function(){var t=this._firstDisplayingPage,e=this.pageButtonCount;this._firstDisplayingPage=e<t?t-e:1,this._refreshPager()},showNextPages:function(){var t=this._firstDisplayingPage,e=this.pageButtonCount,i=this._pagesCount();this._firstDisplayingPage=i<t+2*e?i-e+1:t+e,this._refreshPager()},openPage:function(t){t<1||t>this._pagesCount()||(this._setPage(t),this._loadStrategy.openPage(t))},_setPage:function(t){var e=this._firstDisplayingPage,i=this.pageButtonCount;(this.pageIndex=t)<e&&(this._firstDisplayingPage=t),e+i-1<t&&(this._firstDisplayingPage=t-i+1),this._callEventHandler(this.onPageChanged,{pageIndex:t})},_controllerCall:function(t,e,i,n){if(i)return c.Deferred().reject().promise();this._showLoading();var a,i=this._controller;if(i&&i[t])return i=i[t](e),a=c.Deferred(),i&&i.then?i.then(function(){a.resolve.apply(a,arguments)},function(){a.reject.apply(a,arguments)}):a.resolve(i),a.promise().done(c.proxy(n,this)).fail(c.proxy(this._errorHandler,this)).always(c.proxy(this._hideLoading,this));throw Error("controller has no method '"+t+"'")},_errorHandler:function(){this._callEventHandler(this.onError,{args:c.makeArray(arguments)})},_showLoading:function(){this.loadIndication&&(clearTimeout(this._loadingTimer),this._loadingTimer=setTimeout(c.proxy(function(){this._loadIndicator.show()},this),this.loadIndicationDelay))},_hideLoading:function(){this.loadIndication&&(clearTimeout(this._loadingTimer),this._loadIndicator.hide())},search:function(t){return this._resetSorting(),this._resetPager(),this.loadData(t)},loadData:function(t){t=t||(this.filtering?this.getFilter():{}),c.extend(t,this._loadStrategy.loadParams(),this._sortingParams());var e=this._callEventHandler(this.onDataLoading,{filter:t});return this._controllerCall("loadData",t,e.cancel,function(t){t&&(this._loadStrategy.finishLoad(t),this._callEventHandler(this.onDataLoaded,{data:t}))})},exportData:function(t){var t=t||{},e=t.type||"csv",i="";return this._callEventHandler(this.onDataExporting),i="csv"===e?this._dataToCsv(t):i},_dataToCsv:function(t){var e=!(t=t||{}).hasOwnProperty("includeHeaders")||t.includeHeaders,i=t.subset||"all",n=t.filter||u,a=[];if(e){for(var r=this.fields.length,s={},o=0;o<r;o++){var d=this.fields[o];"includeInDataExport"in d&&!0===d.includeInDataExport&&(s[o]=d.title||d.name)}e=this._itemToCsv(s,{},t);a.push(e)}for(var e=0,l=this.data.length,o=e="visible"===i?(l=this._firstDisplayingPage*this.pageSize)-this.pageSize:e;o<l;o++){var h=this.data[o],c=!0;(c=!n||n(h)?c:!1)&&(c=this._itemToCsv(h,this.fields,t),a.push(c))}return a.join("")},_itemToCsv:function(r,s,t){var e=(t=t||{}).delimiter||"|",o=!t.hasOwnProperty("encapsulate")||t.encapsulate,i=t.newline||"\r\n",d=t.transforms||{},s=s||{},l=this._getItemFieldValue,h=[];return Object.keys(r).forEach(function(t,e){var i="";if(0<s.length){var n,a=s[e];if("includeInDataExport"in a){if(!a.includeInDataExport)return;i="select"===a.type?(n=l(r,a),(c.grep(a.items,function(t,e){return t[a.valueField]===n})[0]||"")[a.textField]):l(r,a)}else i=l(r,a);d.hasOwnProperty(a.name)&&(i=d[a.name](i))}else i=r[t];h.push(i=o?'"'+i+'"':i)}),h.join(e)+i},getFilter:function(){var e={};return this._eachField(function(t){t.filtering&&this._setItemFieldValue(e,t,t.filterValue())}),e},_sortingParams:function(){return this.sorting&&this._sortField?{sortField:this._sortField.name,sortOrder:this._sortOrder}:{}},getSorting:function(){var t=this._sortingParams();return{field:t.sortField,order:t.sortOrder}},clearFilter:function(){var t=this._createFilterRow();return this._filterRow.replaceWith(t),this._filterRow=t,this.search()},insertItem:function(t){var e=t||this._getValidatedInsertItem();return e?(t=this._callEventHandler(this.onItemInserting,{item:e}),this._controllerCall("insertItem",e,t.cancel,function(t){this._loadStrategy.finishInsert(t=t||e,this.insertRowLocation),this._callEventHandler(this.onItemInserted,{item:t})})):c.Deferred().reject().promise()},_getValidatedInsertItem:function(){var t=this._getInsertItem();return this._validateItem(t,this._insertRow)?t:null},_getInsertItem:function(){var e={};return this._eachField(function(t){t.inserting&&this._setItemFieldValue(e,t,t.insertValue())}),e},_validateItem:function(i,n){var t,a=[],r={item:i,itemIndex:this._rowIndex(n),row:n};return this._eachField(function(e){var t;!e.validate||n===this._insertRow&&!e.inserting||n===this._getEditRow()&&!e.editing||(t=this._getItemFieldValue(i,e),t=this._validation.validate(c.extend({value:t,rules:e.validate},r)),this._setCellValidity(n.children().eq(this._visibleFieldIndex(e)),t),t.length&&a.push.apply(a,c.map(t,function(t){return{field:e,message:t}})))}),!a.length||(t=c.extend({errors:a},r),this._callEventHandler(this.onItemInvalid,t),this.invalidNotify(t),!1)},_setCellValidity:function(t,e){t.toggleClass(this.invalidClass,!!e.length).attr("title",e.join("\n"))},clearInsert:function(){var t=this._createInsertRow();this._insertRow.replaceWith(t),this._insertRow=t,this.refresh()},editItem:function(t){t=this.rowByItem(t);t.length&&this._editRow(t)},rowByItem:function(t){return t.jquery||t.nodeType?c(t):this._content.find("tr").filter(function(){return c.data(this,o)===t})},_editRow:function(t){var e;this.editing&&(e=t.data(o),this._callEventHandler(this.onItemEditing,{row:t,item:e,itemIndex:this._itemIndex(e)}).cancel||(this._editingRow&&this.cancelEdit(),e=this._createEditRow(e),(this._editingRow=t).hide(),e.insertBefore(t),t.data(i,e)))},_createEditRow:function(i){var n;return c.isFunction(this.editRowRenderer)?c(this.renderTemplate(this.editRowRenderer,this,{item:i,itemIndex:this._itemIndex(i)})):(n=c("<tr>").addClass(this.editRowClass),this._eachField(function(t){var e=this._getItemFieldValue(i,t);this._prepareCell("<td>",t,"editcss").append(this.renderTemplate(t.editTemplate||"",t,{value:e,item:i})).appendTo(n)}),n)},updateItem:function(t,e){1===arguments.length&&(e=t);t=t?this.rowByItem(t):this._editingRow;if(e=e||this._getValidatedEditedItem())return this._updateRow(t,e)},_getValidatedEditedItem:function(){var t=this._getEditedItem();return this._validateItem(t,this._getEditRow())?t:null},_updateRow:function(i,t){var n=i.data(o),a=this._itemIndex(n),r=c.extend(!0,{},n,t),t=this._callEventHandler(this.onItemUpdating,{row:i,item:r,itemIndex:a,previousItem:n});return this._controllerCall("updateItem",r,t.cancel,function(t){var e=c.extend(!0,{},n),t=(r=t||c.extend(!0,n,r),this._finishUpdate(i,r,a));this._callEventHandler(this.onItemUpdated,{row:t,item:r,itemIndex:a,previousItem:e})})},_rowIndex:function(t){return this._content.children().index(c(t))},_itemIndex:function(t){return c.inArray(t,this.data)},_finishUpdate:function(t,e,i){this.cancelEdit(),this.data[i]=e;e=this._createRow(e,i);return t.replaceWith(e),e},_getEditedItem:function(){var e={};return this._eachField(function(t){t.editing&&this._setItemFieldValue(e,t,t.editValue())}),e},cancelEdit:function(){var t,e,i;this._editingRow&&(e=(t=this._editingRow).data(o),i=this._itemIndex(e),this._callEventHandler(this.onItemEditCancelling,{row:t,item:e,itemIndex:i}),this._getEditRow().remove(),this._editingRow.show(),this._editingRow=null)},_getEditRow:function(){return this._editingRow&&this._editingRow.data(i)},deleteItem:function(t){t=this.rowByItem(t);if(t.length&&(!this.confirmDeleting||e.confirm(r(this.deleteConfirm,this,t.data(o)))))return this._deleteRow(t)},_deleteRow:function(t){var e=t.data(o),i=this._itemIndex(e),n=this._callEventHandler(this.onItemDeleting,{row:t,item:e,itemIndex:i});return this._controllerCall("deleteItem",e,n.cancel,function(){this._loadStrategy.finishDelete(e,i),this._callEventHandler(this.onItemDeleted,{row:t,item:e,itemIndex:i})})}},c.fn.jsGrid=function(n){var a=c.makeArray(arguments).slice(1),r=this;return this.each(function(){var t,e=c(this),i=e.data(s);if(i)if("string"==typeof n){if((t=i[n].apply(i,a))!==u&&t!==i)return r=t,!1}else i._detachWindowResizeCallback(),i._init(n),i.render();else new h(e,n)}),r};var g={},p={},f=function(i,t){i&&c.each(t,function(t,e){c.isPlainObject(e)?f(i[t]||i[t[0].toUpperCase()+t.slice(1)],e):i.hasOwnProperty(t)?i[t]=e:i.prototype&&(i.prototype[t]=e)})};e.jsGrid={Grid:h,fields:g,setDefaults:function(t){var e;c.isPlainObject(t)?e=h.prototype:(e=g[t].prototype,t=arguments[1]||{}),c.extend(e,t)},locales:p,locale:function(t){var e=c.isPlainObject(t)?t:p[t];if(!e)throw Error("unknown locale "+t);f(jsGrid,e)},version:"2.2.0"}})(window,jQuery),((t,e)=>{function i(t){this._init(t)}i.prototype={container:"body",message:"Loading...",shading:!0,zIndex:1e3,shaderClass:"jsgrid-load-shader",loadPanelClass:"jsgrid-load-panel",_init:function(t){e.extend(!0,this,t),this._initContainer(),this._initShader(),this._initLoadPanel()},_initContainer:function(){this._container=e(this.container)},_initShader:function(){this.shading&&(this._shader=e("<div>").addClass(this.shaderClass).hide().css({position:"absolute",top:0,right:0,bottom:0,left:0,zIndex:this.zIndex}).appendTo(this._container))},_initLoadPanel:function(){this._loadPanel=e("<div>").addClass(this.loadPanelClass).text(this.message).hide().css({position:"absolute",top:"50%",left:"50%",zIndex:this.zIndex}).appendTo(this._container)},show:function(){var t=this._loadPanel.show(),e=t.outerWidth(),i=t.outerHeight();t.css({marginTop:-i/2,marginLeft:-e/2}),this._shader.show()},hide:function(){this._loadPanel.hide(),this._shader.hide()}},t.LoadIndicator=i})(jsGrid,jQuery),((t,e)=>{function i(t){this._grid=t}function n(t){this._grid=t,this._itemsCount=0}i.prototype={firstDisplayIndex:function(){var t=this._grid;return t.option("paging")?(t.option("pageIndex")-1)*t.option("pageSize"):0},lastDisplayIndex:function(){var t=this._grid,e=t.option("data").length;return t.option("paging")?Math.min(t.option("pageIndex")*t.option("pageSize"),e):e},itemsCount:function(){return this._grid.option("data").length},openPage:function(t){this._grid.refresh()},loadParams:function(){return{}},sort:function(){return this._grid._sortData(),this._grid.refresh(),e.Deferred().resolve().promise()},reset:function(){return this._grid.refresh(),e.Deferred().resolve().promise()},finishLoad:function(t){this._grid.option("data",t)},finishInsert:function(t,e){var i=this._grid;"top"===e?i.option("data").unshift(t):i.option("data").push(t),i.refresh()},finishDelete:function(t,e){var i=this._grid;i.option("data").splice(e,1),i.reset()}},n.prototype={firstDisplayIndex:function(){return 0},lastDisplayIndex:function(){return this._grid.option("data").length},itemsCount:function(){return this._itemsCount},openPage:function(t){this._grid.loadData()},loadParams:function(){var t=this._grid;return{pageIndex:t.option("pageIndex"),pageSize:t.option("pageSize")}},reset:function(){return this._grid.loadData()},sort:function(){return this._grid.loadData()},finishLoad:function(t){this._itemsCount=t.itemsCount,this._grid.option("data",t.data)},finishInsert:function(t){this._grid.search()},finishDelete:function(t,e){this._grid.search()}},t.loadStrategies={DirectLoadingStrategy:i,PageLoadingStrategy:n}})(jsGrid,jQuery),(t=>{function i(t){return null!=t}t.sortStrategies={string:function(t,e){return i(t)||i(e)?i(t)?i(e)?(""+t).localeCompare(""+e):1:-1:0},stringNaturalSort:function(t,e){return i(t)||i(e)?i(t)?i(e)?(""+t).localeCompare(""+e,void 0,{numeric:!0,sensitivity:"base"}):1:-1:0},number:function(t,e){return t-e},date:function(t,e){return t-e},numberAsString:function(t,e){return parseFloat(t)-parseFloat(e)}}})(jsGrid,jQuery),((t,a)=>{function e(t){this._init(t)}e.prototype={_init:function(t){a.extend(!0,this,t)},validate:function(i){var n=[];return a.each(this._normalizeRules(i.rules),function(t,e){e.validator(i.value,i.item,e.param)||(e=a.isFunction(e.message)?e.message(i.value,i.item):e.message,n.push(e))}),n},_normalizeRules:function(t){return a.isArray(t)||(t=[t]),a.map(t,a.proxy(function(t){return this._normalizeRule(t)},this))},_normalizeRule:function(t){if(a.isFunction(t="string"==typeof t?{validator:t}:t)&&(t={validator:t}),a.isPlainObject(t))return t=a.extend({},t),a.isFunction(t.validator)?t:this._applyNamedValidator(t,t.validator);throw Error("wrong validation config specified")},_applyNamedValidator:function(t,e){delete t.validator;var i=n[e];if(!i)throw Error('unknown validator "'+e+'"');a.isFunction(i)&&(i={validator:i});e=this.validatorsLocale&&this.validatorsLocale[e];return a.extend({},i,e,t)}},t.Validation=e;var n={required:{message:"Field is required",validator:function(t){return null!=t&&""!==t}},rangeLength:{message:"Field value length is out of the defined range",validator:function(t,e,i){return t.length>=i[0]&&t.length<=i[1]}},minLength:{message:"Field value is too short",validator:function(t,e,i){return t.length>=i}},maxLength:{message:"Field value is too long",validator:function(t,e,i){return t.length<=i}},pattern:{message:"Field value is not matching the defined pattern",validator:function(t,e,i){return(i="string"==typeof i?new RegExp("^(?:"+i+")$"):i).test(t)}},range:{message:"Field value is out of the defined range",validator:function(t,e,i){return t>=i[0]&&t<=i[1]}},min:{message:"Field value is too small",validator:function(t,e,i){return i<=t}},max:{message:"Field value is too large",validator:function(t,e,i){return t<=i}}};t.validators=n})(jsGrid,jQuery),((e,i)=>{function t(t){i.extend(!0,this,t),this.sortingFunc=this._getSortingFunc()}t.prototype={name:"",title:null,css:"",align:"",width:100,visible:!0,filtering:!0,inserting:!0,editing:!0,sorting:!0,sorter:"string",includeInDataExport:!0,headerTemplate:function(){return null==this.title?this.name:this.title},itemTemplate:function(t,e){return t},filterTemplate:function(){return""},insertTemplate:function(){return""},editTemplate:function(t,e){return this._value=t,this.itemTemplate(t,e)},filterValue:function(){return""},insertValue:function(){return""},editValue:function(){return this._value},_getSortingFunc:function(){var t=this.sorter;if(i.isFunction(t))return t;if("string"==typeof t)return e.sortStrategies[t];throw Error('wrong sorter for the field "'+this.name+'"!')}},e.Field=t})(jsGrid,jQuery);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsxgrid",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Lightweight data grid jQuery plugin, with a built-in extra field set (avatars, JSON editor, select, collapsible textarea, datetime picker, row selection). A maintained fork of jsGrid.",
5
5
  "keywords": [
6
6
  "grid",
package/src/i18n/Ko.js CHANGED
@@ -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
 
package/src/i18n/cs.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Vložit",
29
29
  updateButtonTooltip: "Upravit",
30
30
  cancelEditButtonTooltip: "Zrušit editaci"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Přepnout na hledání",
34
+ insertModeButtonTooltip: "Přepnout na vlkádání",
35
+ editButtonTooltip: "Upravit",
36
+ deleteButtonTooltip: "Smazat",
37
+ searchButtonTooltip: "Hledat",
38
+ clearFilterButtonTooltip: "Smazat filtr",
39
+ insertButtonTooltip: "Vložit",
40
+ updateButtonTooltip: "Upravit",
41
+ cancelEditButtonTooltip: "Zrušit editaci"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Otevřít správce souborů"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Editor",
48
+ closeText: "Uložit"
31
49
  }
32
50
  },
33
51
 
package/src/i18n/de.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Hinzufügen",
29
29
  updateButtonTooltip: "Speichern",
30
30
  cancelEditButtonTooltip: "Abbrechen"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Suche",
34
+ insertModeButtonTooltip: "Eintrag hinzufügen",
35
+ editButtonTooltip: "Bearbeiten",
36
+ deleteButtonTooltip: "Löschen",
37
+ searchButtonTooltip: "Eintrag finden",
38
+ clearFilterButtonTooltip: "Filter zurücksetzen",
39
+ insertButtonTooltip: "Hinzufügen",
40
+ updateButtonTooltip: "Speichern",
41
+ cancelEditButtonTooltip: "Abbrechen"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Dateimanager öffnen"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Editor",
48
+ closeText: "Speichern"
31
49
  }
32
50
  },
33
51
 
package/src/i18n/el.js CHANGED
@@ -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
 
package/src/i18n/es.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Insertar",
29
29
  updateButtonTooltip: "Actualizar",
30
30
  cancelEditButtonTooltip: "Cancelar edición"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Cambiar a búsqueda",
34
+ insertModeButtonTooltip: "Cambiar a inserción",
35
+ editButtonTooltip: "Editar",
36
+ deleteButtonTooltip: "Suprimir",
37
+ searchButtonTooltip: "Buscar",
38
+ clearFilterButtonTooltip: "Borrar filtro",
39
+ insertButtonTooltip: "Insertar",
40
+ updateButtonTooltip: "Actualizar",
41
+ cancelEditButtonTooltip: "Cancelar edición"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Abrir gestor de archivos"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Editor",
48
+ closeText: "Guardar"
31
49
  }
32
50
  },
33
51
 
package/src/i18n/fa.js CHANGED
@@ -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
 
package/src/i18n/fr.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Ajouter",
29
29
  updateButtonTooltip: "Sauvegarder",
30
30
  cancelEditButtonTooltip: "Annuler"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Recherche",
34
+ insertModeButtonTooltip: "Ajouter une entrée",
35
+ editButtonTooltip: "Changer",
36
+ deleteButtonTooltip: "Effacer",
37
+ searchButtonTooltip: "Trouve",
38
+ clearFilterButtonTooltip: "Effacer",
39
+ insertButtonTooltip: "Ajouter",
40
+ updateButtonTooltip: "Sauvegarder",
41
+ cancelEditButtonTooltip: "Annuler"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Ouvrir le gestionnaire de fichiers"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Éditeur",
48
+ closeText: "Enregistrer"
31
49
  }
32
50
  },
33
51
 
package/src/i18n/he.js CHANGED
@@ -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
 
package/src/i18n/it.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Inserisci",
29
29
  updateButtonTooltip: "Aggiorna",
30
30
  cancelEditButtonTooltip: "Annulla"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Modallità ricerca",
34
+ insertModeButtonTooltip: "Modalità inserimento",
35
+ editButtonTooltip: "Modifica",
36
+ deleteButtonTooltip: "Cancella",
37
+ searchButtonTooltip: "Cerca",
38
+ clearFilterButtonTooltip: "Cancella filtri",
39
+ insertButtonTooltip: "Inserisci",
40
+ updateButtonTooltip: "Aggiorna",
41
+ cancelEditButtonTooltip: "Annulla"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Apri gestore file"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Editor",
48
+ closeText: "Salva"
31
49
  }
32
50
  },
33
51
 
package/src/i18n/ja.js CHANGED
@@ -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
 
package/src/i18n/ka.js CHANGED
@@ -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
 
package/src/i18n/lt.js CHANGED
@@ -28,6 +28,24 @@
28
28
  insertButtonTooltip: "Pridėti",
29
29
  updateButtonTooltip: "Išsaugoti",
30
30
  cancelEditButtonTooltip: "Atšaukti"
31
+ },
32
+ Xcontrol: {
33
+ searchModeButtonTooltip: "Paieška",
34
+ insertModeButtonTooltip: "Naujas įrašas",
35
+ editButtonTooltip: "Pakeisti",
36
+ deleteButtonTooltip: "Pašalinti",
37
+ searchButtonTooltip: "Surasti",
38
+ clearFilterButtonTooltip: "Išvalyti filtrą",
39
+ insertButtonTooltip: "Pridėti",
40
+ updateButtonTooltip: "Išsaugoti",
41
+ cancelEditButtonTooltip: "Atšaukti"
42
+ },
43
+ XimgField: {
44
+ editButtonText: "Atidaryti failų tvarkyklę"
45
+ },
46
+ Xjsoneditor: {
47
+ editText: "Redaktorius",
48
+ closeText: "Išsaugoti"
31
49
  }
32
50
  },
33
51