/* * jsGrid v1.5.3 (http://js-grid.com) * (c) 2016 Artem Tabalin * Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE) */ !(function (a, b, c) { function d(a, c) { var d = b(a); d.data(f, this), (this._container = d), (this.data = []), (this.fields = []), (this._editingRow = null), (this._sortField = null), (this._sortOrder = i), (this._firstDisplayingPage = 1), this._init(c), this.render(); } var e = "JSGrid", f = e, g = "JSGridItem", h = "JSGridEditRow", i = "asc", j = "desc", k = "{first}", l = "{pages}", m = "{prev}", n = "{next}", o = "{last}", p = "{pageIndex}", q = "{pageCount}", r = "{itemCount}", s = "javascript:void(0);", t = function (a, c) { return b.isFunction(a) ? a.apply(c, b.makeArray(arguments).slice(2)) : a; }, u = function (a) { var c = b.Deferred(); return ( a && a.then ? a.then( function () { c.resolve.apply(c, arguments); }, function () { c.reject.apply(c, arguments); } ) : c.resolve(a), c.promise() ); }, v = { loadData: b.noop, insertItem: b.noop, updateItem: b.noop, deleteItem: b.noop, }; (d.prototype = { width: "auto", height: "auto", updateOnResize: !0, rowClass: b.noop, rowRenderer: null, rowClick: function (a) { this.editing && this.editItem(b(a.event.target).closest("tr")); }, rowDoubleClick: b.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, 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} {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: v, loadIndication: !0, loadIndicationDelay: 500, loadMessage: "Please, wait...", loadShading: !0, invalidMessage: "Invalid data entered!", invalidNotify: function (c) { var d = b.map(c.errors, function (a) { return a.message || null; }); a.alert([this.invalidMessage].concat(d).join("\n")); }, onInit: b.noop, onRefreshing: b.noop, onRefreshed: b.noop, onPageChanged: b.noop, onItemDeleting: b.noop, onItemDeleted: b.noop, onItemInserting: b.noop, onItemInserted: b.noop, onItemEditing: b.noop, onItemUpdating: b.noop, onItemUpdated: b.noop, onItemInvalid: b.noop, onDataLoading: b.noop, onDataLoaded: b.noop, onOptionChanging: b.noop, onOptionChanged: b.noop, onError: b.noop, invalidClass: "jsgrid-invalid", containerClass: "jsgrid", tableClass: "jsgrid-table", gridHeaderClass: "jsgrid-grid-header", gridBodyClass: "jsgrid-grid-body", _init: function (a) { b.extend(this, a), this._initLoadStrategy(), this._initController(), this._initFields(), this._attachWindowLoadResize(), this._attachWindowResizeCallback(), this._callEventHandler(this.onInit); }, loadStrategy: function () { return this.pageLoading ? new jsGrid.loadStrategies.PageLoadingStrategy(this) : new jsGrid.loadStrategies.DirectLoadingStrategy(this); }, _initLoadStrategy: function () { this._loadStrategy = t(this.loadStrategy, this); }, _initController: function () { this._controller = b.extend({}, v, t(this.controller, this)); }, renderTemplate: function (a, b, d) { args = []; for (var e in d) args.push(d[e]); return ( args.unshift(a, b), (a = t.apply(null, args)), a === c || null === a ? "" : a ); }, loadIndicator: function (a) { return new jsGrid.LoadIndicator(a); }, validation: function (a) { return jsGrid.Validation && new jsGrid.Validation(a); }, _initFields: function () { var a = this; a.fields = b.map(a.fields, function (c) { if (b.isPlainObject(c)) { var d = (c.type && jsGrid.fields[c.type]) || jsGrid.Field; c = new d(c); } return (c._grid = a), c; }); }, _attachWindowLoadResize: function () { b(a).on("load", b.proxy(this._refreshSize, this)); }, _attachWindowResizeCallback: function () { this.updateOnResize && b(a).on("resize", b.proxy(this._refreshSize, this)); }, _detachWindowResizeCallback: function () { b(a).off("resize", this._refreshSize); }, option: function (a, b) { var c, d; return 1 === arguments.length ? this[a] : ((c = { option: a, oldValue: this[a], newValue: b }), this._callEventHandler(this.onOptionChanging, c), this._handleOptionChange(c.option, c.newValue), (d = { option: c.option, value: c.newValue }), void this._callEventHandler(this.onOptionChanged, d)); }, fieldOption: function (a, b, c) { return ( (a = this._normalizeField(a)), 2 === arguments.length ? a[b] : ((a[b] = c), void this._renderGrid()) ); }, _handleOptionChange: function (a, b) { switch (((this[a] = b), a)) { 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(b); 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._clear(), this._container.removeData(f); }, render: function () { return ( this._renderGrid(), this.autoload ? this.loadData() : b.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 t(this.loadIndicator, this, { message: this.loadMessage, shading: this.loadShading, container: this._container, }); }, _createValidation: function () { return t(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 a = (this._headerRow = this._createHeaderRow()), c = (this._filterRow = this._createFilterRow()), d = (this._insertRow = this._createInsertRow()), e = (this._headerGrid = b("
", c, "headercss", this.headerCellClass ) .append(this.renderTemplate(c.headerTemplate, c)) .appendTo(a); this.sorting && c.sorting && e.addClass(this.sortableClass).on( "click", b.proxy(function () { this.sort(d); }, this) ); }), a ); }, _prepareCell: function (a, c, d, e) { return b(a) .css("width", c.width) .addClass(e || this.cellClass) .addClass((d && c[d]) || c.css) .addClass(c.align ? "jsgrid-align-" + c.align : ""); }, _createFilterRow: function () { if (b.isFunction(this.filterRowRenderer)) return b(this.renderTemplate(this.filterRowRenderer, this)); var a = b(" |
---|
", b, "filtercss") .append(this.renderTemplate(b.filterTemplate, b)) .appendTo(a); }), a ); }, _createInsertRow: function () { if (b.isFunction(this.insertRowRenderer)) return b(this.renderTemplate(this.insertRowRenderer, this)); var a = b(" |
", b, "insertcss") .append(this.renderTemplate(b.insertTemplate, b)) .appendTo(a); }), a ); }, _callEventHandler: function (a, c) { return a.call(this, b.extend(c, { grid: this })), c; }, 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 = i), 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 a = this._content; if ((a.empty(), !this.data.length)) return a.append(this._createNoDataRow()), this; for ( var b = this._loadStrategy.firstDisplayIndex(), c = this._loadStrategy.lastDisplayIndex(), d = b; c > d; d++ ) { var e = this.data[d]; a.append(this._createRow(e, d)); } }, _createNoDataRow: function () { var a = 0; return ( this._eachField(function () { a++; }), b(" |
") .addClass(this.cellClass) .attr("colspan", a) .append(this.renderTemplate(this.noDataContent, this)) ) ); }, _createRow: function (a, c) { var d; return ( b.isFunction(this.rowRenderer) ? (d = this.renderTemplate(this.rowRenderer, this, { item: a, itemIndex: c, })) : ((d = b(" |
").append(this.renderTemplate(c.itemTemplate || e, c, f))), this._prepareCell(d, c) ); }, _getItemFieldValue: function (a, b) { for (var c = b.name.split("."), d = a[c.shift()]; d && c.length; ) d = d[c.shift()]; return d; }, _setItemFieldValue: function (a, b, c) { for (var d = b.name.split("."), e = a, f = d[0]; e && d.length; ) (a = e), (f = d.shift()), (e = a[f]); if (!e) for (; d.length; ) (a = a[f] = {}), (f = d.shift()); a[f] = c; }, sort: function (a, c) { return ( b.isPlainObject(a) && ((c = a.order), (a = a.field)), this._clearSortingCss(), this._setSortingParams(a, c), this._setSortingCss(), this._loadStrategy.sort() ); }, _clearSortingCss: function () { this._headerRow .find("th") .removeClass(this.sortAscClass) .removeClass(this.sortDescClass); }, _setSortingParams: function (a, b) { (a = this._normalizeField(a)), (b = b || (this._sortField === a ? this._reversedSortOrder(this._sortOrder) : i)), (this._sortField = a), (this._sortOrder = b); }, _normalizeField: function (a) { return b.isNumeric(a) ? this.fields[a] : "string" == typeof a ? b.grep(this.fields, function (b) { return b.name === a; })[0] : a; }, _reversedSortOrder: function (a) { return a === i ? j : i; }, _setSortingCss: function () { var a = this._visibleFieldIndex(this._sortField); this._headerRow .find("th") .eq(a) .addClass( this._sortOrder === i ? this.sortAscClass : this.sortDescClass ); }, _visibleFieldIndex: function (a) { return b.inArray( a, b.grep(this.fields, function (a) { return a.visible; }) ); }, _sortData: function () { var a = this._sortFactor(), b = this._sortField; b && this.data.sort(function (c, d) { return a * b.sortingFunc(c[b.name], d[b.name]); }); }, _sortFactor: function () { return this._sortOrder === i ? 1 : -1; }, _itemsCount: function () { return this._loadStrategy.itemsCount(); }, _pagesCount: function () { var a = this._itemsCount(), b = this.pageSize; return Math.floor(a / b) + (a % b ? 1 : 0); }, _refreshPager: function () { var a = this._pagerContainer; a.empty(), this.paging && a.append(this._createPager()); var b = this.paging && this._pagesCount() > 1; a.toggle(b); }, _createPager: function () { var a; return ( (a = b.isFunction(this.pagerRenderer) ? b( this.pagerRenderer({ pageIndex: this.pageIndex, pageCount: this._pagesCount(), }) ) : b(" |