You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1932 lines
56 KiB
1932 lines
56 KiB
1 year ago
|
/*
|
||
|
* 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);
|