/* * jsGrid v1.4.1 (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 = { 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", 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", 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 : u, 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")) }, onRefreshing : b.noop, onRefreshed : 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() }, 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({}, u, t(this.controller, this)) }, 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 "noDataText" : 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") .append(c.headerTemplate ? c.headerTemplate() : "").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) { return b(a).css("width", c.width).addClass(d && c[d] || c.css) .addClass(c.align ? "jsgrid-align-" + c.align : "") }, _createFilterRow : function() { if (b.isFunction(this.filterRowRenderer)) return b(this.filterRowRenderer()); var a = b(" |
|---|
| ", b, "filtercss") .append(b.filterTemplate ? b.filterTemplate() : "").appendTo(a) }), a }, _createInsertRow : function() { if (b.isFunction(this.insertRowRenderer)) return b(this.insertRowRenderer()); var a = b(" |
| ", b, "insertcss") .append(b.insertTemplate ? b.insertTemplate() : "").appendTo(a) }), a }, _callEventHandler : function(a, c) { return a.call(this, b.extend(c, { grid : this })), c }, reset : function() { this._resetSorting(), this._resetPager(), this.refresh() }, _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 = t(this.noDataContent, this), c = 0; return this._eachField(function() { c++ }), b(" |
| ").attr("colspan", c).append(a)) }, _createNoDataContent : function() { return b.isFunction(this.noDataRenderer) ? this.noDataRenderer() : this.noDataText }, _createRow : function(a, c) { var d; return b.isFunction(this.rowRenderer) ? d = b(this .rowRenderer(a, c)) : (d = b(" |
| ").append(c.itemTemplate ? c.itemTemplate(e, a) : e), 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 = b.inArray(this._sortField, b.grep(this.fields, function(a) { return a.visible })); this._headerRow.find("th").eq(a).addClass(this._sortOrder === i ? this.sortAscClass : this.sortDescClass) }, _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(" |