UNPKG

jsgrid

Version:

Lightweight data grid jQuery plugin. It supports basic grid operations like inserting, filtering, editing, deleting, paging, sorting, and validation. jsGrid is tunable and allows to customize appearance and components.

123 lines (94 loc) 3.08 kB
(function(jsGrid, $, undefined) { function DirectLoadingStrategy(grid) { this._grid = grid; } DirectLoadingStrategy.prototype = { firstDisplayIndex: function() { var grid = this._grid; return grid.option("paging") ? (grid.option("pageIndex") - 1) * grid.option("pageSize") : 0; }, lastDisplayIndex: function() { var grid = this._grid; var itemsCount = grid.option("data").length; return grid.option("paging") ? Math.min(grid.option("pageIndex") * grid.option("pageSize"), itemsCount) : itemsCount; }, itemsCount: function() { return this._grid.option("data").length; }, openPage: function(index) { this._grid.refresh(); }, loadParams: function() { return {}; }, sort: function() { this._grid._sortData(); this._grid.refresh(); return $.Deferred().resolve().promise(); }, reset: function() { this._grid.refresh(); return $.Deferred().resolve().promise(); }, finishLoad: function(loadedData) { this._grid.option("data", loadedData); }, finishInsert: function(insertedItem) { var grid = this._grid; grid.option("data").push(insertedItem); grid.refresh(); }, finishDelete: function(deletedItem, deletedItemIndex) { var grid = this._grid; grid.option("data").splice(deletedItemIndex, 1); grid.reset(); } }; function PageLoadingStrategy(grid) { this._grid = grid; this._itemsCount = 0; } PageLoadingStrategy.prototype = { firstDisplayIndex: function() { return 0; }, lastDisplayIndex: function() { return this._grid.option("data").length; }, itemsCount: function() { return this._itemsCount; }, openPage: function(index) { this._grid.loadData(); }, loadParams: function() { var grid = this._grid; return { pageIndex: grid.option("pageIndex"), pageSize: grid.option("pageSize") }; }, reset: function() { return this._grid.loadData(); }, sort: function() { return this._grid.loadData(); }, finishLoad: function(loadedData) { this._itemsCount = loadedData.itemsCount; this._grid.option("data", loadedData.data); }, finishInsert: function(insertedItem) { this._grid.search(); }, finishDelete: function(deletedItem, deletedItemIndex) { this._grid.search(); } }; jsGrid.loadStrategies = { DirectLoadingStrategy: DirectLoadingStrategy, PageLoadingStrategy: PageLoadingStrategy }; }(jsGrid, jQuery));