Current File : /home/users/barii/public_html/finansenl.com.pl/wodki/admin/bkk/assets/js/jsgrid/jsgrid.min.js |
/*
* 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("<table>").addClass(this.tableClass).append(a).append(c).append(d),
f = this._header = b("<div>").addClass(this.gridHeaderClass).addClass(this._scrollBarWidth() ? "jsgrid-header-scrollbar" : "").append(e);
return f
},
_createBody: function() {
var a = this._content = b("<tbody>"),
c = this._bodyGrid = b("<table>").addClass(this.tableClass).append(a),
d = this._body = b("<div>").addClass(this.gridBodyClass).append(c).on("scroll", b.proxy(function(a) {
this._header.scrollLeft(a.target.scrollLeft)
}, this));
return d
},
_createPagerContainer: function() {
var a = this.pagerContainer || b("<div>").appendTo(this._container);
return b(a).addClass(this.pagerContainerClass)
},
_eachField: function(a) {
var c = this;
b.each(this.fields, function(b, d) {
d.visible && a.call(c, d, b)
})
},
_createHeaderRow: function() {
if (b.isFunction(this.headerRowRenderer)) return b(this.renderTemplate(this.headerRowRenderer, this));
var a = b("<tr>").addClass(this.headerRowClass);
return this._eachField(function(c, d) {
var e = this._prepareCell("<th>", 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("<tr>").addClass(this.filterRowClass);
return this._eachField(function(b) {
this._prepareCell("<td>", 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("<tr>").addClass(this.insertRowClass);
return this._eachField(function(b) {
this._prepareCell("<td>", 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("<tr>").addClass(this.noDataRowClass).append(b("<td>").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("<tr>"), this._renderCells(d, a)), d.addClass(this._getRowClasses(a, c)).data(g, a).on("click", b.proxy(function(b) {
this.rowClick({
item: a,
itemIndex: c,
event: b
})
}, this)).on("dblclick", b.proxy(function(b) {
this.rowDoubleClick({
item: a,
itemIndex: c,
event: b
})
}, this)), this.selecting && this._attachRowHover(d), d
},
_getRowClasses: function(a, b) {
var c = [];
return c.push((b + 1) % 2 ? this.oddRowClass : this.evenRowClass), c.push(t(this.rowClass, this, a, b)), c.join(" ")
},
_attachRowHover: function(a) {
var c = this.selectedRowClass;
a.hover(function() {
b(this).addClass(c)
}, function() {
b(this).removeClass(c)
})
},
_renderCells: function(a, b) {
return this._eachField(function(c) {
a.append(this._createCell(b, c))
}), this
},
_createCell: function(a, c) {
var d, e = this._getItemFieldValue(a, c),
f = {
value: e,
item: a
};
return d = b.isFunction(c.cellRenderer) ? this.renderTemplate(c.cellRenderer, c, f) : b("<td>").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("<div>").append(this._createPagerByFormat()), a.addClass(this.pagerClass), a
},
_createPagerByFormat: function() {
var a = this.pageIndex,
c = this._pagesCount(),
d = this._itemsCount(),
e = this.pagerFormat.split(" ");
return b.map(e, b.proxy(function(e) {
var f = e;
return e === l ? f = this._createPages() : e === k ? f = this._createPagerNavButton(this.pageFirstText, 1, a > 1) : e === m ? f = this._createPagerNavButton(this.pagePrevText, a - 1, a > 1) : e === n ? f = this._createPagerNavButton(this.pageNextText, a + 1, c > a) : e === o ? f = this._createPagerNavButton(this.pageLastText, c, c > a) : e === p ? f = a : e === q ? f = c : e === r && (f = d), b.isArray(f) ? f.concat([" "]) : [f, " "]
}, this))
},
_createPages: function() {
var a = this._pagesCount(),
b = this.pageButtonCount,
c = this._firstDisplayingPage,
d = [];
c > 1 && d.push(this._createPagerPageNavButton(this.pageNavigatorPrevText, this.showPrevPages));
for (var e = 0, f = c; b > e && a >= f; e++, f++) d.push(f === this.pageIndex ? this._createPagerCurrentPage() : this._createPagerPage(f));
return a > c + b - 1 && d.push(this._createPagerPageNavButton(this.pageNavigatorNextText, this.showNextPages)), d
},
_createPagerNavButton: function(a, c, d) {
return this._createPagerButton(a, this.pagerNavButtonClass + (d ? "" : " " + this.pagerNavButtonInactiveClass), d ? function() {
this.openPage(c)
} : b.noop)
},
_createPagerPageNavButton: function(a, b) {
return this._createPagerButton(a, this.pagerNavButtonClass, b)
},
_createPagerPage: function(a) {
return this._createPagerButton(a, this.pageClass, function() {
this.openPage(a)
})
},
_createPagerButton: function(a, c, d) {
var e = b("<a>").attr("href", s).html(a).on("click", b.proxy(d, this));
return b("<span>").addClass(c).append(e)
},
_createPagerCurrentPage: function() {
return b("<span>").addClass(this.pageClass).addClass(this.currentPageClass).text(this.pageIndex)
},
_refreshSize: function() {
this._refreshHeight(), this._refreshWidth()
},
_refreshWidth: function() {
var a = "auto" === this.width ? this._getAutoWidth() : this.width;
this._container.width(a)
},
_getAutoWidth: function() {
var a = this._headerGrid,
b = this._header;
a.width("auto");
var c = a.outerWidth(),
d = b.outerWidth() - b.innerWidth();
return a.width(""), c + d
},
_scrollBarWidth: function() {
var a;
return function() {
if (a === c) {
var d = b("<div style='width:50px;height:50px;overflow:hidden;position:absolute;top:-10000px;left:-10000px;'></div>"),
e = b("<div style='height:100px;'></div>");
d.append(e).appendTo("body");
var f = e.innerWidth();
d.css("overflow-y", "auto");
var g = e.innerWidth();
d.remove(), a = f - g
}
return a
}
}(),
_refreshHeight: function() {
var a, b = this._container,
c = this._pagerContainer,
d = this.height;
b.height(d), "auto" !== d && (d = b.height(), a = this._header.outerHeight(!0), c.parents(b).length && (a += c.outerHeight(!0)), this._body.outerHeight(d - a))
},
showPrevPages: function() {
var a = this._firstDisplayingPage,
b = this.pageButtonCount;
this._firstDisplayingPage = a > b ? a - b : 1, this._refreshPager()
},
showNextPages: function() {
var a = this._firstDisplayingPage,
b = this.pageButtonCount,
c = this._pagesCount();
this._firstDisplayingPage = a + 2 * b > c ? c - b + 1 : a + b, this._refreshPager()
},
openPage: function(a) {
1 > a || a > this._pagesCount() || (this._setPage(a), this._loadStrategy.openPage(a))
},
_setPage: function(a) {
var b = this._firstDisplayingPage,
c = this.pageButtonCount;
this.pageIndex = a, b > a && (this._firstDisplayingPage = a), a > b + c - 1 && (this._firstDisplayingPage = a - c + 1), this._callEventHandler(this.onPageChanged, {
pageIndex: a
})
},
_controllerCall: function(a, c, d, e) {
if (d) return b.Deferred().reject().promise();
this._showLoading();
var f = this._controller;
if (!f || !f[a]) throw Error("controller has no method '" + a + "'");
return u(f[a](c)).done(b.proxy(e, this)).fail(b.proxy(this._errorHandler, this)).always(b.proxy(this._hideLoading, this))
},
_errorHandler: function() {
this._callEventHandler(this.onError, {
args: b.makeArray(arguments)
})
},
_showLoading: function() {
this.loadIndication && (clearTimeout(this._loadingTimer), this._loadingTimer = setTimeout(b.proxy(function() {
this._loadIndicator.show()
}, this), this.loadIndicationDelay))
},
_hideLoading: function() {
this.loadIndication && (clearTimeout(this._loadingTimer), this._loadIndicator.hide())
},
search: function(a) {
return this._resetSorting(), this._resetPager(), this.loadData(a)
},
loadData: function(a) {
a = a || (this.filtering ? this.getFilter() : {}), b.extend(a, this._loadStrategy.loadParams(), this._sortingParams());
var c = this._callEventHandler(this.onDataLoading, {
filter: a
});
return this._controllerCall("loadData", a, c.cancel, function(a) {
a && (this._loadStrategy.finishLoad(a), this._callEventHandler(this.onDataLoaded, {
data: a
}))
})
},
getFilter: function() {
var a = {};
return this._eachField(function(b) {
b.filtering && this._setItemFieldValue(a, b, b.filterValue())
}), a
},
_sortingParams: function() {
return this.sorting && this._sortField ? {
sortField: this._sortField.name,
sortOrder: this._sortOrder
} : {}
},
getSorting: function() {
var a = this._sortingParams();
return {
field: a.sortField,
order: a.sortOrder
}
},
clearFilter: function() {
var a = this._createFilterRow();
return this._filterRow.replaceWith(a), this._filterRow = a, this.search()
},
insertItem: function(a) {
var c = a || this._getValidatedInsertItem();
if (!c) return b.Deferred().reject().promise();
var d = this._callEventHandler(this.onItemInserting, {
item: c
});
return this._controllerCall("insertItem", c, d.cancel, function(a) {
a = a || c, this._loadStrategy.finishInsert(a), this._callEventHandler(this.onItemInserted, {
item: a
})
})
},
_getValidatedInsertItem: function() {
var a = this._getInsertItem();
return this._validateItem(a, this._insertRow) ? a : null
},
_getInsertItem: function() {
var a = {};
return this._eachField(function(b) {
b.inserting && this._setItemFieldValue(a, b, b.insertValue())
}), a
},
_validateItem: function(a, c) {
var d = [],
e = {
item: a,
itemIndex: this._rowIndex(c),
row: c
};
if (this._eachField(function(f) {
if (f.validate && (c !== this._insertRow || f.inserting) && (c !== this._getEditRow() || f.editing)) {
var g = this._getItemFieldValue(a, f),
h = this._validation.validate(b.extend({
value: g,
rules: f.validate
}, e));
this._setCellValidity(c.children().eq(this._visibleFieldIndex(f)), h), h.length && d.push.apply(d, b.map(h, function(a) {
return {
field: f,
message: a
}
}))
}
}), !d.length) return !0;
var f = b.extend({
errors: d
}, e);
return this._callEventHandler(this.onItemInvalid, f), this.invalidNotify(f), !1
},
_setCellValidity: function(a, b) {
a.toggleClass(this.invalidClass, !!b.length).attr("title", b.join("\n"))
},
clearInsert: function() {
var a = this._createInsertRow();
this._insertRow.replaceWith(a), this._insertRow = a, this.refresh()
},
editItem: function(a) {
var b = this.rowByItem(a);
b.length && this._editRow(b)
},
rowByItem: function(a) {
return a.jquery || a.nodeType ? b(a) : this._content.find("tr").filter(function() {
return b.data(this, g) === a
})
},
_editRow: function(a) {
if (this.editing) {
var b = a.data(g),
c = this._callEventHandler(this.onItemEditing, {
row: a,
item: b,
itemIndex: this._itemIndex(b)
});
if (!c.cancel) {
this._editingRow && this.cancelEdit();
var d = this._createEditRow(b);
this._editingRow = a, a.hide(), d.insertBefore(a), a.data(h, d)
}
}
},
_createEditRow: function(a) {
if (b.isFunction(this.editRowRenderer)) return b(this.renderTemplate(this.editRowRenderer, this, {
item: a,
itemIndex: this._itemIndex(a)
}));
var c = b("<tr>").addClass(this.editRowClass);
return this._eachField(function(b) {
var d = this._getItemFieldValue(a, b);
this._prepareCell("<td>", b, "editcss").append(this.renderTemplate(b.editTemplate || "", b, {
value: d,
item: a
})).appendTo(c)
}), c
},
updateItem: function(a, b) {
1 === arguments.length && (b = a);
var c = a ? this.rowByItem(a) : this._editingRow;
return (b = b || this._getValidatedEditedItem()) ? this._updateRow(c, b) : void 0
},
_getValidatedEditedItem: function() {
var a = this._getEditedItem();
return this._validateItem(a, this._getEditRow()) ? a : null
},
_updateRow: function(a, c) {
var d = a.data(g),
e = this._itemIndex(d),
f = b.extend(!0, {}, d, c),
h = this._callEventHandler(this.onItemUpdating, {
row: a,
item: f,
itemIndex: e,
previousItem: d
});
return this._controllerCall("updateItem", f, h.cancel, function(g) {
var h = b.extend(!0, {}, d);
f = g || b.extend(!0, d, c);
var i = this._finishUpdate(a, f, e);
this._callEventHandler(this.onItemUpdated, {
row: i,
item: f,
itemIndex: e,
previousItem: h
})
})
},
_rowIndex: function(a) {
return this._content.children().index(b(a))
},
_itemIndex: function(a) {
return b.inArray(a, this.data)
},
_finishUpdate: function(a, b, c) {
this.cancelEdit(), this.data[c] = b;
var d = this._createRow(b, c);
return a.replaceWith(d), d
},
_getEditedItem: function() {
var a = {};
return this._eachField(function(b) {
b.editing && this._setItemFieldValue(a, b, b.editValue())
}), a
},
cancelEdit: function() {
this._editingRow && (this._getEditRow().remove(), this._editingRow.show(), this._editingRow = null)
},
_getEditRow: function() {
return this._editingRow && this._editingRow.data(h)
},
deleteItem: function(b) {
var c = this.rowByItem(b);
if (c.length && (!this.confirmDeleting || a.confirm(t(this.deleteConfirm, this, c.data(g))))) return this._deleteRow(c)
},
_deleteRow: function(a) {
var b = a.data(g),
c = this._itemIndex(b),
d = this._callEventHandler(this.onItemDeleting, {
row: a,
item: b,
itemIndex: c
});
return this._controllerCall("deleteItem", b, d.cancel, function() {
this._loadStrategy.finishDelete(b, c), this._callEventHandler(this.onItemDeleted, {
row: a,
item: b,
itemIndex: c
})
})
}
}, b.fn.jsGrid = function(a) {
var e = b.makeArray(arguments),
g = e.slice(1),
h = this;
return this.each(function() {
var e, i = b(this),
j = i.data(f);
if (j)
if ("string" == typeof a) {
if (e = j[a].apply(j, g), e !== c && e !== j) return h = e, !1
} else j._detachWindowResizeCallback(), j._init(a), j.render();
else new d(i, a)
}), h
};
var w = {},
x = function(a) {
var c;
b.isPlainObject(a) ? c = d.prototype : (c = w[a].prototype, a = arguments[1] || {}), b.extend(c, a)
},
y = {},
z = function(a) {
var c = b.isPlainObject(a) ? a : y[a];
if (!c) throw Error("unknown locale " + a);
A(jsGrid, c)
},
A = function(a, c) {
b.each(c, function(c, d) {
return b.isPlainObject(d) ? void A(a[c] || a[c[0].toUpperCase() + c.slice(1)], d) : void(a.hasOwnProperty(c) ? a[c] = d : a.prototype[c] = d)
})
};
a.jsGrid = {
Grid: d,
fields: w,
setDefaults: x,
locales: y,
locale: z,
version: "1.5.3"
}
}(window, jQuery),
function(a, b) {
function c(a) {
this._init(a)
}
c.prototype = {
container: "body",
message: "Loading...",
shading: !0,
zIndex: 1e3,
shaderClass: "jsgrid-load-shader",
loadPanelClass: "jsgrid-load-panel",
_init: function(a) {
b.extend(!0, this, a), this._initContainer(), this._initShader(), this._initLoadPanel()
},
_initContainer: function() {
this._container = b(this.container)
},
_initShader: function() {
this.shading && (this._shader = b("<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 = b("<div>").addClass(this.loadPanelClass).text(this.message).hide().css({
position: "absolute",
top: "50%",
left: "50%",
zIndex: this.zIndex
}).appendTo(this._container)
},
show: function() {
var a = this._loadPanel.show(),
b = a.outerWidth(),
c = a.outerHeight();
a.css({
marginTop: -c / 2,
marginLeft: -b / 2
}), this._shader.show()
},
hide: function() {
this._loadPanel.hide(), this._shader.hide()
}
}, a.LoadIndicator = c
}(jsGrid, jQuery),
function(a, b) {
function c(a) {
this._grid = a
}
function d(a) {
this._grid = a, this._itemsCount = 0
}
c.prototype = {
firstDisplayIndex: function() {
var a = this._grid;
return a.option("paging") ? (a.option("pageIndex") - 1) * a.option("pageSize") : 0
},
lastDisplayIndex: function() {
var a = this._grid,
b = a.option("data").length;
return a.option("paging") ? Math.min(a.option("pageIndex") * a.option("pageSize"), b) : b
},
itemsCount: function() {
return this._grid.option("data").length
},
openPage: function() {
this._grid.refresh()
},
loadParams: function() {
return {}
},
sort: function() {
return this._grid._sortData(), this._grid.refresh(), b.Deferred().resolve().promise()
},
reset: function() {
return this._grid.refresh(), b.Deferred().resolve().promise()
},
finishLoad: function(a) {
this._grid.option("data", a)
},
finishInsert: function(a) {
var b = this._grid;
b.option("data").push(a), b.refresh()
},
finishDelete: function(a, b) {
var c = this._grid;
c.option("data").splice(b, 1), c.reset()
}
}, d.prototype = {
firstDisplayIndex: function() {
return 0
},
lastDisplayIndex: function() {
return this._grid.option("data").length
},
itemsCount: function() {
return this._itemsCount
},
openPage: function() {
this._grid.loadData()
},
loadParams: function() {
var a = this._grid;
return {
pageIndex: a.option("pageIndex"),
pageSize: a.option("pageSize")
}
},
reset: function() {
return this._grid.loadData()
},
sort: function() {
return this._grid.loadData()
},
finishLoad: function(a) {
this._itemsCount = a.itemsCount, this._grid.option("data", a.data)
},
finishInsert: function() {
this._grid.search()
},
finishDelete: function() {
this._grid.search()
}
}, a.loadStrategies = {
DirectLoadingStrategy: c,
PageLoadingStrategy: d
}
}(jsGrid, jQuery),
function(a) {
var b = function(a) {
return "undefined" != typeof a && null !== a
},
c = {
string: function(a, c) {
return b(a) || b(c) ? b(a) ? b(c) ? ("" + a).localeCompare("" + c) : 1 : -1 : 0
},
number: function(a, b) {
return a - b
},
date: function(a, b) {
return a - b
},
numberAsString: function(a, b) {
return parseFloat(a) - parseFloat(b)
}
};
a.sortStrategies = c
}(jsGrid, jQuery),
function(a, b, c) {
function d(a) {
this._init(a)
}
d.prototype = {
_init: function(a) {
b.extend(!0, this, a)
},
validate: function(a) {
var c = [];
return b.each(this._normalizeRules(a.rules), function(d, e) {
if (!e.validator(a.value, a.item, e.param)) {
var f = b.isFunction(e.message) ? e.message(a.value, a.item) : e.message;
c.push(f)
}
}), c
},
_normalizeRules: function(a) {
return b.isArray(a) || (a = [a]), b.map(a, b.proxy(function(a) {
return this._normalizeRule(a)
}, this))
},
_normalizeRule: function(a) {
if ("string" == typeof a && (a = {
validator: a
}), b.isFunction(a) && (a = {
validator: a
}), !b.isPlainObject(a)) throw Error("wrong validation config specified");
return a = b.extend({}, a), b.isFunction(a.validator) ? a : this._applyNamedValidator(a, a.validator)
},
_applyNamedValidator: function(a, c) {
delete a.validator;
var d = e[c];
if (!d) throw Error('unknown validator "' + c + '"');
return b.isFunction(d) && (d = {
validator: d
}), b.extend({}, d, a)
}
}, a.Validation = d;
var e = {
required: {
message: "Field is required",
validator: function(a) {
return a !== c && null !== a && "" !== a
}
},
rangeLength: {
message: "Field value length is out of the defined range",
validator: function(a, b, c) {
return a.length >= c[0] && a.length <= c[1]
}
},
minLength: {
message: "Field value is too short",
validator: function(a, b, c) {
return a.length >= c
}
},
maxLength: {
message: "Field value is too long",
validator: function(a, b, c) {
return a.length <= c
}
},
pattern: {
message: "Field value is not matching the defined pattern",
validator: function(a, b, c) {
return "string" == typeof c && (c = new RegExp("^(?:" + c + ")$")), c.test(a)
}
},
range: {
message: "Field value is out of the defined range",
validator: function(a, b, c) {
return a >= c[0] && a <= c[1]
}
},
min: {
message: "Field value is too small",
validator: function(a, b, c) {
return a >= c
}
},
max: {
message: "Field value is too large",
validator: function(a, b, c) {
return c >= a
}
}
};
a.validators = e
}(jsGrid, jQuery),
function(a, b, c) {
function d(a) {
b.extend(!0, this, a), this.sortingFunc = this._getSortingFunc()
}
d.prototype = {
name: "",
title: null,
css: "",
align: "",
width: 100,
visible: !0,
filtering: !0,
inserting: !0,
editing: !0,
sorting: !0,
sorter: "string",
headerTemplate: function() {
return this.title === c || null === this.title ? this.name : this.title
},
itemTemplate: function(a) {
return a
},
filterTemplate: function() {
return ""
},
insertTemplate: function() {
return ""
},
editTemplate: function(a, b) {
return this._value = a, this.itemTemplate(a, b)
},
filterValue: function() {
return ""
},
insertValue: function() {
return ""
},
editValue: function() {
return this._value
},
_getSortingFunc: function() {
var c = this.sorter;
if (b.isFunction(c)) return c;
if ("string" == typeof c) return a.sortStrategies[c];
throw Error('wrong sorter for the field "' + this.name + '"!')
}
}, a.Field = d
}(jsGrid, jQuery),
function(a, b) {
function c(a) {
d.call(this, a)
}
var d = a.Field;
c.prototype = new d({
autosearch: !0,
readOnly: !1,
filterTemplate: function() {
if (!this.filtering) return "";
var a = this._grid,
b = this.filterControl = this._createTextBox();
return this.autosearch && b.on("keypress", function(b) {
13 === b.which && (a.search(), b.preventDefault())
}), b
},
insertTemplate: function() {
return this.inserting ? this.insertControl = this._createTextBox() : ""
},
editTemplate: function(a) {
if (!this.editing) return this.itemTemplate.apply(this, arguments);
var b = this.editControl = this._createTextBox();
return b.val(a), b
},
filterValue: function() {
return this.filterControl.val()
},
insertValue: function() {
return this.insertControl.val()
},
editValue: function() {
return this.editControl.val()
},
_createTextBox: function() {
return b("<input>").attr("type", "text").prop("readonly", !!this.readOnly)
}
}), a.fields.text = a.TextField = c
}(jsGrid, jQuery),
function(a, b, c) {
function d(a) {
e.call(this, a)
}
var e = a.TextField;
d.prototype = new e({
sorter: "number",
align: "right",
readOnly: !1,
filterValue: function() {
return this.filterControl.val() ? parseInt(this.filterControl.val() || 0, 10) : c
},
insertValue: function() {
return this.insertControl.val() ? parseInt(this.insertControl.val() || 0, 10) : c
},
editValue: function() {
return this.editControl.val() ? parseInt(this.editControl.val() || 0, 10) : c
},
_createTextBox: function() {
return b("<input>").attr("type", "number").prop("readonly", !!this.readOnly)
}
}), a.fields.number = a.NumberField = d
}(jsGrid, jQuery),
function(a, b) {
function c(a) {
d.call(this, a)
}
var d = a.TextField;
c.prototype = new d({
insertTemplate: function() {
return this.inserting ? this.insertControl = this._createTextArea() : ""
},
editTemplate: function(a) {
if (!this.editing) return this.itemTemplate.apply(this, arguments);
var b = this.editControl = this._createTextArea();
return b.val(a), b
},
_createTextArea: function() {
return b("<textarea>").prop("readonly", !!this.readOnly)
}
}), a.fields.textarea = a.TextAreaField = c
}(jsGrid, jQuery),
function(a, b, c) {
function d(a) {
if (this.items = [], this.selectedIndex = -1, this.valueField = "", this.textField = "", a.valueField && a.items.length) {
var b = a.items[0][a.valueField];
this.valueType = typeof b === f ? f : g
}
this.sorter = this.valueType, e.call(this, a)
}
var e = a.NumberField,
f = "number",
g = "string";
d.prototype = new e({
align: "center",
valueType: f,
itemTemplate: function(a) {
var d, e = this.items,
f = this.valueField,
g = this.textField;
d = f ? b.grep(e, function(b) {
return b[f] === a
})[0] || {} : e[a];
var h = g ? d[g] : d;
return h === c || null === h ? "" : h
},
filterTemplate: function() {
if (!this.filtering) return "";
var a = this._grid,
b = this.filterControl = this._createSelect();
return this.autosearch && b.on("change", function() {
a.search()
}), b
},
insertTemplate: function() {
return this.inserting ? this.insertControl = this._createSelect() : ""
},
editTemplate: function(a) {
if (!this.editing) return this.itemTemplate.apply(this, arguments);
var b = this.editControl = this._createSelect();
return a !== c && b.val(a), b
},
filterValue: function() {
var a = this.filterControl.val();
return this.valueType === f ? parseInt(a || 0, 10) : a
},
insertValue: function() {
var a = this.insertControl.val();
return this.valueType === f ? parseInt(a || 0, 10) : a
},
editValue: function() {
var a = this.editControl.val();
return this.valueType === f ? parseInt(a || 0, 10) : a
},
_createSelect: function() {
var a = b("<select>"),
c = this.valueField,
d = this.textField,
e = this.selectedIndex;
return b.each(this.items, function(f, g) {
var h = c ? g[c] : f,
i = d ? g[d] : g,
j = b("<option>").attr("value", h).text(i).appendTo(a);
j.prop("selected", e === f)
}), a.prop("disabled", !!this.readOnly), a
}
}), a.fields.select = a.SelectField = d
}(jsGrid, jQuery),
function(a, b, c) {
function d(a) {
e.call(this, a)
}
var e = a.Field;
d.prototype = new e({
sorter: "number",
align: "center",
autosearch: !0,
itemTemplate: function(a) {
return this._createCheckbox().prop({
checked: a,
disabled: !0
})
},
filterTemplate: function() {
if (!this.filtering) return "";
var a = this._grid,
c = this.filterControl = this._createCheckbox();
return c.prop({
readOnly: !0,
indeterminate: !0
}), c.on("click", function() {
var a = b(this);
a.prop("readOnly") ? a.prop({
checked: !1,
readOnly: !1
}) : a.prop("checked") || a.prop({
readOnly: !0,
indeterminate: !0
})
}), this.autosearch && c.on("click", function() {
a.search()
}), c
},
insertTemplate: function() {
return this.inserting ? this.insertControl = this._createCheckbox() : ""
},
editTemplate: function(a) {
if (!this.editing) return this.itemTemplate.apply(this, arguments);
var b = this.editControl = this._createCheckbox();
return b.prop("checked", a), b
},
filterValue: function() {
return this.filterControl.get(0).indeterminate ? c : this.filterControl.is(":checked")
},
insertValue: function() {
return this.insertControl.is(":checked")
},
editValue: function() {
return this.editControl.is(":checked")
},
_createCheckbox: function() {
return b("<input>").attr("type", "checkbox")
}
}), a.fields.checkbox = a.CheckboxField = d
}(jsGrid, jQuery),
function(a, b) {
function c(a) {
d.call(this, a), this._configInitialized = !1
}
var d = a.Field;
c.prototype = new d({
css: "jsgrid-control-field",
align: "center",
width: 50,
filtering: !1,
inserting: !1,
editing: !1,
sorting: !1,
buttonClass: "jsgrid-button",
modeButtonClass: "jsgrid-mode-button",
modeOnButtonClass: "jsgrid-mode-on-button",
searchModeButtonClass: "jsgrid-search-mode-button",
insertModeButtonClass: "jsgrid-insert-mode-button",
editButtonClass: "jsgrid-edit-button",
deleteButtonClass: "jsgrid-delete-button",
searchButtonClass: "jsgrid-search-button",
clearFilterButtonClass: "jsgrid-clear-filter-button",
insertButtonClass: "jsgrid-insert-button",
updateButtonClass: "jsgrid-update-button",
cancelEditButtonClass: "jsgrid-cancel-edit-button",
searchModeButtonTooltip: "Switch to searching",
insertModeButtonTooltip: "Switch to inserting",
editButtonTooltip: "Edit",
deleteButtonTooltip: "Delete",
searchButtonTooltip: "Search",
clearFilterButtonTooltip: "Clear filter",
insertButtonTooltip: "Insert",
updateButtonTooltip: "Update",
cancelEditButtonTooltip: "Cancel edit",
editButton: !0,
deleteButton: !0,
clearFilterButton: !0,
modeSwitchButton: !0,
_initConfig: function() {
this._hasFiltering = this._grid.filtering, this._hasInserting = this._grid.inserting, this._hasInserting && this.modeSwitchButton && (this._grid.inserting = !1), this._configInitialized = !0
},
headerTemplate: function() {
this._configInitialized || this._initConfig();
var a = this._hasFiltering,
b = this._hasInserting;
return this.modeSwitchButton && (a || b) ? a && !b ? this._createFilterSwitchButton() : b && !a ? this._createInsertSwitchButton() : this._createModeSwitchButton() : ""
},
itemTemplate: function(a, c) {
var d = b([]);
return this.editButton && (d = d.add(this._createEditButton(c))), this.deleteButton && (d = d.add(this._createDeleteButton(c))), d
},
filterTemplate: function() {
var a = this._createSearchButton();
return this.clearFilterButton ? a.add(this._createClearFilterButton()) : a
},
insertTemplate: function() {
return this._createInsertButton()
},
editTemplate: function() {
return this._createUpdateButton().add(this._createCancelEditButton())
},
_createFilterSwitchButton: function() {
return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, !0)
},
_createInsertSwitchButton: function() {
return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, !1)
},
_createOnOffSwitchButton: function(a, c, d) {
var e = d,
f = b.proxy(function() {
g.toggleClass(this.modeOnButtonClass, e)
}, this),
g = this._createGridButton(this.modeButtonClass + " " + c, "", function(b) {
e = !e, b.option(a, e), f()
});
return f(), g
},
_createModeSwitchButton: function() {
var a = !1,
c = b.proxy(function() {
d.attr("title", a ? this.searchModeButtonTooltip : this.insertModeButtonTooltip).toggleClass(this.insertModeButtonClass, !a).toggleClass(this.searchModeButtonClass, a)
}, this),
d = this._createGridButton(this.modeButtonClass, "", function(b) {
a = !a, b.option("inserting", a), b.option("filtering", !a), c()
});
return c(), d
},
_createEditButton: function(a) {
return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(b, c) {
b.editItem(a), c.stopPropagation()
})
},
_createDeleteButton: function(a) {
return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(b, c) {
b.deleteItem(a), c.stopPropagation()
})
},
_createSearchButton: function() {
return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(a) {
a.search()
})
},
_createClearFilterButton: function() {
return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(a) {
a.clearFilter()
})
},
_createInsertButton: function() {
return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(a) {
a.insertItem().done(function() {
a.clearInsert()
})
})
},
_createUpdateButton: function() {
return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(a, b) {
a.updateItem(), b.stopPropagation()
})
},
_createCancelEditButton: function() {
return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(a, b) {
a.cancelEdit(), b.stopPropagation()
})
},
_createGridButton: function(a, c, d) {
var e = this._grid;
return b("<input>").addClass(this.buttonClass).addClass(a).attr({
type: "button",
title: c
}).on("click", function(a) {
d(e, a)
})
},
editValue: function() {
return ""
}
}), a.fields.control = a.ControlField = c
}(jsGrid, jQuery);