diff --git a/demo.html b/demo.html index 5296d87..9be3780 100644 --- a/demo.html +++ b/demo.html @@ -44,6 +44,11 @@ border-top: 1px solid #e5e5e5; } + ul.pagination li a { + width: 40px; + text-align: center; + } + /* Customize container */ @media (min-width: 768px) { .container { @@ -131,6 +136,7 @@ sortDir: 'desc', sortField: 'population', perPage: 15, + paginationLimit: 8, unsortedClass: "glyphicon glyphicon-sort", ascSortClass: "glyphicon glyphicon-sort-by-attributes", descSortClass: "glyphicon glyphicon-sort-by-attributes-alt" @@ -154,7 +160,8 @@ tableOptions = { recordWord: 'city', recordWordPlural: 'cities', - perPage: 15 + perPage: 15, + paginationLimit: 7 }; rows = citiesList.map(function(row) { return new City(_this, row); @@ -168,52 +175,46 @@ })(); - +
-
- -

Knockout DataTable

-
-
-

Knockout DataTable Demo

-
-
-
- -

Simple example

-

S'pose we wanted to display a table of cities. Just create a view model for the data:

+
+ +

Knockout DataTable

+
+
+

Knockout DataTable Demo

+
+
+
+ +

Simple example

+

S'pose we wanted to display a table of cities. Just create a view model for the data:

 class City
-
   constructor: (@view, row) ->
     @population  = ko.observable row.population
     @countryName = row.country_name
     @cityName    = row.city_name
-
 class @CitiesModel
-
   constructor: ->
-
     tableOptions =
       recordWord:       'city'
       recordWordPlural: 'cities'
       sortDir:          'desc'
       sortField:        'population'
       perPage:          15
+      paginationLimit:  8
       unsortedClass:    'glyphicon glyphicon-sort'
       ascSortClass:     'glyphicon glyphicon-sort-by-attributes'
       descSortClass:    'glyphicon glyphicon-sort-by-attributes-alt'
-
     @table = new DataTable [], tableOptions
     @table.loading true
-
     req = new XMLHttpRequest()
     req.open 'GET', '/api/cities', true
-
     req.onload = =>
       if req.status >= 200 and req.status < 400
         response = JSON.parse req.responseText
@@ -223,22 +224,19 @@ 

Simple example

else alert "Error communicating with server" @table.loading false - req.onerror = => alert "Error communicating with server" @table.loading false - req.send() - ko.applyBindings @
-

And a table, like so:

+

And a table, like so:

 <div data-bind="with: table">
   <div class="pull-right">
     <strong>Results per page</strong>
-    <select data-bind="options: [10,25,50], value: perPage"></select>
+    <select data-bind="options: [10,25,50,5,1], value: perPage"></select>
   </div>
   <input type="text" data-bind="textInput: filter" placeholder="Search"/>
   <table class="table table-striped table-bordered">
@@ -277,17 +275,24 @@ 

Simple example

<td data-bind="text: $row.population"></td> </tr> <!-- /ko --> + <!-- ko foreach: {data: currentPage().blanks} --> + <tr> + <td>-</td> + <td>-</td> + <td>-</td> + </tr> + <!-- /ko --> </tbody> </table> <span data-bind="text: recordsText" class="label label-info pull-right"></span> - <div data-bind="visible: pages() > 1"> + <div data-bind="visible: limitedPages().length > 1"> <ul class="pagination"> <li data-bind="css: leftPagerClass, click: prevPage"> <a href="#">&laquo;</a> </li> - <!-- ko foreach: {data: (new Array(pages()))} --> - <li data-bind="css: $parent.pageClass($index() + 1)"> - <a href="#" data-bind="text: $index() + 1, click: $parent.gotoPage($index() + 1)"></a> + <!-- ko foreach: {data: limitedPages} --> + <li data-bind="css: $parent.pageClass(number)"> + <a href="#" data-bind="text: number, click: $parent.gotoPage(number)"></a> </li> <!-- /ko --> <li data-bind="css: rightPagerClass, click: nextPage"> @@ -302,186 +307,205 @@

Simple example

}); </script>
-

Result:

-
-
- Results per page - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- City - - - Country - - - Population - -
- This table has no data. -
- - Loading data... -
- -
-
    -
  • - « -
  • - -
  • - -
  • - -
  • - » -
  • -
-
-
- - - -

Example without sorting

-
-
- Results per page - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- City - - Country - - Population -
- This table has no data. -
- - Loading data... -
- -
-
    -
  • - « -
  • - -
  • - -
  • - -
  • - » -
  • -
-
-
- - - -

Options

-

When instanciating with new DataTable you have can pass in the following options as the second parameter:

-
-
recordWord
-
The name of your rows. In the case above, we used city. Default: record
- -
recordWordPlural
-
The plural name of your rows. Since we used city as our recordWord, we used cities for recordWordPlural. Default: recordWord + 's'
- -
sortDir
-
The initial sorting direction for the table. Default: 'asc'
- -
sortField
-
The initial sorting column for the table. As of v0.5.0, this setting is optional and the order of table.rows will be maintained and sorting will be disabled.
- -
perPage
-
Integer indicating the number of rows to be shown per page. Default: 15
- -
unsortedClass
descSortClass
ascSortClass
-
The classes given to the icons in the th elements indicating the direction of sorting. Set to '' if you would rather have no icons. Default: '' for each
-
-

Additionally, you can define the match function on the row class, and the datatable will use it for filtering. If left undefined (as in the example above), the DataTable will automatically search all columns defined on the row. E.g:

-
-
row.match:
-
+                

Result:

+
+
+ Results per page + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ City + + + Country + + + Population + +
+ This table has no data. +
+ + Loading data... +
---
+ +
+
    +
  • + « +
  • + +
  • + +
  • + +
  • + » +
  • +
+
+
+ + + +

Example without sorting

+
+
+ Results per page + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ City + + Country + + Population +
+ This table has no data. +
+ + Loading data... +
---
+ +
+
    +
  • + « +
  • + +
  • + +
  • + +
  • + » +
  • +
+
+
+ + + +

Options

+

When instantiating with new DataTable you have can pass in the following options as the second parameter:

+
+
recordWord
+
The name of your rows. In the case above, we used city. Default: record
+ +
recordWordPlural
+
The plural name of your rows. Since we used city as our recordWord, we used cities for recordWordPlural. Default: recordWord + 's'
+ +
sortDir
+
The initial sorting direction for the table. Default: 'asc'
+ +
sortField
+
The initial sorting column for the table. As of v0.5.0, this setting is optional and the order of table.rows will be maintained and sorting will be disabled.
+ +
perPage
+
Integer indicating the number of rows to be shown per page. Default: 15
+ +
paginationLimit
+
Integer indicating the number of pages to include in the table.limitedPages observable array. Default: 10
+ +
unsortedClass
descSortClass
ascSortClass
+
The classes given to the icons in the th elements indicating the direction of sorting. Set to '' if you would rather have no icons. Default: '' for each
+
+

Additionally, you can define the match function on the row class, and the datatable will use it for filtering. If left undefined (as in the example above), the DataTable will automatically search all columns defined on the row. E.g:

+
+
row.match:
+
+
 (filter) ->
   @population().toLowerCase().indexOf(filter) >= 0 or
   @countryName .toLowerCase().indexOf(filter) >= 0 or
-  @cityName    .toLowerCase().indexOf(filter) >= 0
-
- -

Further Usage

-

Knockout DataTable comes packaged with some advanced filtering. Below is a list of example search terms and the results returned.

-
-
cityName:atlanta
-
Results with 'atlanta' in cityName (case insensitive)
-
cItYnAmE:aTlAnTa
-
Results with 'atlanta' in cityName (case insensitive)
-
countryName:United cityName:L
-
Results with 'united' in countryName and 'l' in cityName (case insensitive)

Note: as of right now, there is no built-in support for multi-word searching with ':'-delimeted searching

-
countryname:japan 6
-
Results with 'japan' in countryName and '6' somewhere in one of the columns (case insensitive)
-
+ @cityName .toLowerCase().indexOf(filter) >= 0
+
+
+ +

Further Usage

+

Knockout DataTable comes packaged with some advanced filtering. Below is a list of example search terms and the results returned.

+
+
cityName:atlanta
+
Results with 'atlanta' in cityName (case insensitive)
+
cItYnAmE:aTlAnTa
+
Results with 'atlanta' in cityName (case insensitive)
+
countryName:United cityName:L
+
Results with 'united' in countryName and 'l' in cityName (case insensitive)

Note: as of right now, there is no built-in support for multi-word searching with ':'-delimeted searching

+
countryname:japan 6
+
Results with 'japan' in countryName and '6' somewhere in one of the columns (case insensitive)
+
+
-
- + diff --git a/example/view.jade b/example/view.jade index f4ce31c..25fd7f5 100644 --- a/example/view.jade +++ b/example/view.jade @@ -30,10 +30,10 @@ div.cloak(data-bind='with: exampleTable') span.label.label-info.pull-right(data-bind='text: recordsText') - .pagination(data-bind='visible: pages() > 1') + .pagination(data-bind='visible: pages().length > 1') ul li(data-bind='css: leftPagerClass, click: prevPage'): a(href='#') « - li(data-bind='repeat: {count: pages, bind: "css: pageClass($index + 1)"}') + li(data-bind='repeat: {count: pages().length, bind: "css: pageClass($index + 1)"}') a(href='#', data-bind='text: $index + 1, click: gotoPage($index + 1)') li(data-bind='css: rightPagerClass, click: nextPage'): a(href='#') » diff --git a/knockout-datatable.coffee b/knockout-datatable.coffee index b168ef6..a21a710 100644 --- a/knockout-datatable.coffee +++ b/knockout-datatable.coffee @@ -24,15 +24,17 @@ class @DataTable # set some default options if none were passed in @options = - recordWord: options.recordWord or 'record' + recordWord: options.recordWord or 'record' recordWordPlural: options.recordWordPlural - sortDir: options.sortDir or 'asc' - sortField: options.sortField or undefined - perPage: options.perPage or 15 - filterFn: options.filterFn or undefined - unsortedClass: options.unsortedClass or '' - descSortClass: options.descSortClass or '' - ascSortClass: options.ascSortClass or '' + sortDir: options.sortDir or 'asc' + sortField: options.sortField or undefined + perPage: options.perPage or 15 + paginationLimit: options.paginationLimit or 10 + filterFn: options.filterFn or undefined + alwaysMatch: options.alwaysMatch or false + unsortedClass: options.unsortedClass or '' + descSortClass: options.descSortClass or '' + ascSortClass: options.ascSortClass or '' @initObservables() @@ -52,16 +54,54 @@ class @DataTable @sortDir = ko.observable @options.sortDir @sortField = ko.observable @options.sortField @perPage = ko.observable @options.perPage - @currentPage = ko.observable 1 - @filter = ko.observable '' + @currentPageNumber = ko.observable 1 + @filter = ko.observable('').extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 400 } }); @loading = ko.observable false @rows = ko.observableArray [] + + getPages: (rowCount) => + perPage = @perPage() + rowIndex = 0 + pageNumber = 1 + pagesArr = new Array(Math.ceil(rowCount / perPage)) + while rowIndex < rowCount + page = + number: pageNumber + start: rowIndex + end: Math.min(rowCount-1, rowIndex+perPage-1) + page.blanks = new Array(if pagesArr.length > 1 then perPage-(page.end-page.start+1) else 0) + pagesArr[pageNumber-1] = page + + pageNumber++ + rowIndex += perPage + + return pagesArr + + getLimitedPages: () => + pages = @pages() + current = @currentPageNumber() + limit = @options.paginationLimit + if (pages.length <= limit) + return pages + + leftMargin = Math.floor(limit/2) + firstPage = current - Math.floor(leftMargin) + if (firstPage < 1) + return pages.slice(0, limit) + + rightMargin = if limit%2 == 0 then leftMargin-1 else leftMargin + lastPage = current + rightMargin + if (lastPage > pages.length) + return pages.slice(pages.length - limit, pages.length) + + return pages.slice(firstPage-1, lastPage) + initWithClientSidePagination: (rows) -> @filtering = ko.observable false - @filter.subscribe => @currentPage 1 - @perPage.subscribe => @currentPage 1 + @filter.subscribe => @currentPageNumber 1 + @perPage.subscribe => @currentPageNumber 1 @rows rows @@ -75,13 +115,20 @@ class @DataTable attrMap + filterTrigger = ko.observable().extend({notify:'always'}) + + @triggerFilterCalculation = => + filterTrigger.valueHasMutated() + @currentPageNumber 1 + @filteredRows = pureComputed => + filterTrigger() @filtering true filter = @filter() rows = @rows.slice(0) - if filter isnt '' + if @options.alwaysMatch or filter isnt '' filterFn = @filterFn(filter) rows = rows.filter(filterFn) @@ -103,35 +150,27 @@ class @DataTable rows .extend {rateLimit: 50, method: 'notifyWhenChangesStop'} + + @pages = pureComputed => @getPages @filteredRows().length + @limitedPages = pureComputed => @getLimitedPages() + @currentPage = pureComputed => if @pages().length > 0 then @pages()[@currentPageNumber() - 1] else {number: 1, start:0, end: 0, blanks: []} + @pagedRows = pureComputed => @filteredRows().slice(@currentPage().start, @currentPage().end + 1) - @pagedRows = pureComputed => - pageIndex = @currentPage() - 1 - perPage = @perPage() - @filteredRows().slice pageIndex * perPage, (pageIndex+1) * perPage - - @pages = pureComputed => Math.ceil @filteredRows().length / @perPage() - - @leftPagerClass = pureComputed => 'disabled' if @currentPage() is 1 - @rightPagerClass = pureComputed => 'disabled' if @currentPage() is @pages() + @leftPagerClass = pureComputed => 'disabled' if @currentPageNumber() is 1 + @rightPagerClass = pureComputed => 'disabled' if @currentPageNumber() is @pages().length # info @total = pureComputed => @filteredRows().length - @from = pureComputed => (@currentPage() - 1) * @perPage() + 1 - @to = pureComputed => - to = @currentPage() * @perPage() - if to > @total() - @total() - else - to + @from = pureComputed => @currentPage().start + 1 + @to = pureComputed => @currentPage().end + 1 @recordsText = pureComputed => - pages = @pages() - total = @total() from = @from() to = @to() + total = @total() recordWord = @options.recordWord recordWordPlural = @options.recordWordPlural or recordWord + 's' - if pages > 1 + if @pages().length > 1 "#{from} to #{to} of #{total} #{recordWordPlural}" else "#{total} #{if total > 1 or total is 0 then recordWordPlural else recordWord}" @@ -161,7 +200,7 @@ class @DataTable @replaceRows = (rows) => @rows rows - @currentPage 1 + @currentPageNumber 1 @filter undefined _defaultMatch = (filter, row, attrMap) -> @@ -189,7 +228,7 @@ class @DataTable primitiveCompare((if ko.isObservable(row[rowAttr]) then row[rowAttr]() else row[rowAttr]), val) else # if the current instance doesn't have the "key" attribute, return false (i.e., it's not a match) false - (false not in conditionals) and (if filter isnt '' then (if row.match? then row.match(filter) else _defaultMatch(filter, row, @rowAttributeMap())) else true) + (false not in conditionals) and (if (@options.alwaysMatch or filter isnt '') then (if row.match? then row.match(filter) else _defaultMatch(filter, row, @rowAttributeMap())) else true) initWithServerSidePagination: -> _getDataFromServer = (data, cb) => @@ -199,20 +238,20 @@ class @DataTable req.open 'GET', url, true req.setRequestHeader 'Content-Type', 'application/json' - req.onload = => + req.onload = -> if req.status >= 200 and req.status < 400 cb null, JSON.parse(req.responseText) else cb new Error("Error communicating with server") - req.onerror = => cb new Error "Error communicating with server" + req.onerror = -> cb new Error "Error communicating with server" req.send() - _gatherData = (perPage, currentPage, filter, sortDir, sortField) -> + _gatherData = (perPage, currentPageNumber, filter, sortDir, sortField) -> data = perPage: perPage - page: currentPage + page: currentPageNumber if filter? and filter isnt '' data.filter = filter @@ -227,14 +266,14 @@ class @DataTable @pagedRows = ko.observableArray [] @numFilteredRows = ko.observable 0 - @filter.subscribe => @currentPage 1 - @perPage.subscribe => @currentPage 1 + @filter.subscribe => @currentPageNumber 1 + @perPage.subscribe => @currentPageNumber 1 ko.computed => @loading true @filtering true - data = _gatherData @perPage(), @currentPage(), @filter(), @sortDir(), @sortField() + data = _gatherData @perPage(), @currentPageNumber(), @filter(), @sortDir(), @sortField() _getDataFromServer data, (err, response) => @loading false @@ -247,28 +286,25 @@ class @DataTable .extend {rateLimit: 500, method: 'notifyWhenChangesStop'} - @pages = pureComputed => Math.ceil @numFilteredRows() / @perPage() + @pages = pureComputed => @getPages @numFilteredRows() + @limitedPages = pureComputed => @getLimitedPages() + @currentPage = pureComputed => @pages()[@currentPageNumber() - 1] + @pagedRows = pureComputed => @filteredRows().slice(@currentPage().start, @currentPage().end + 1) - @leftPagerClass = pureComputed => 'disabled' if @currentPage() is 1 - @rightPagerClass = pureComputed => 'disabled' if @currentPage() is @pages() + @leftPagerClass = pureComputed => 'disabled' if @currentPageNumber() is 1 + @rightPagerClass = pureComputed => 'disabled' if @currentPageNumber() is @pages().length # info - @from = pureComputed => (@currentPage() - 1) * @perPage() + 1 - @to = pureComputed => - to = @currentPage() * @perPage() - if to > (total = @numFilteredRows()) - total - else - to + @from = pureComputed => @currentPage().start + 1 + @to = pureComputed => @currentPage().end + 1 @recordsText = pureComputed => - pages = @pages() total = @numFilteredRows() from = @from() to = @to() recordWord = @options.recordWord recordWordPlural = @options.recordWordPlural or recordWord + 's' - if pages > 1 + if @pages().length > 1 "#{from} to #{to} of #{total} #{recordWordPlural}" else "#{total} #{if total > 1 or total is 0 then recordWordPlural else recordWord}" @@ -302,7 +338,7 @@ class @DataTable @loading true @filtering true - data = _gatherData @perPage(), @currentPage(), @filter(), @sortDir(), @sortField() + data = _gatherData @perPage(), @currentPageNumber(), @filter(), @sortDir(), @sortField() _getDataFromServer data, (err, response) => @loading false @@ -314,7 +350,7 @@ class @DataTable @pagedRows results.map(@options.resultHandlerFn) toggleSort: (field) -> => - @currentPage 1 + @currentPageNumber 1 if @sortField() is field @sortDir if @sortDir() is 'asc' then 'desc' else 'asc' else @@ -322,15 +358,15 @@ class @DataTable @sortField field prevPage: -> - page = @currentPage() + page = @currentPageNumber() if page isnt 1 - @currentPage page - 1 + @currentPageNumber page - 1 nextPage: -> - page = @currentPage() - if page isnt @pages() - @currentPage page + 1 + page = @currentPageNumber() + if page isnt @pages().length + @currentPageNumber page + 1 - gotoPage: (page) -> => @currentPage page + gotoPage: (page) -> => @currentPageNumber page - pageClass: (page) -> pureComputed => 'active' if @currentPage() is page + pageClass: (page) -> pureComputed => 'active' if @currentPageNumber() is page diff --git a/knockout-datatable.js b/knockout-datatable.js index 4dc8969..dd9494c 100644 --- a/knockout-datatable.js +++ b/knockout-datatable.js @@ -1,5 +1,6 @@ (function() { - var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; this.DataTable = (function() { var primitiveCompare, pureComputed; @@ -21,6 +22,8 @@ }; function DataTable(rows, options) { + this.getLimitedPages = __bind(this.getLimitedPages, this); + this.getPages = __bind(this.getPages, this); var serverSideOpts; if (!options) { if (!(rows instanceof Array)) { @@ -36,7 +39,9 @@ sortDir: options.sortDir || 'asc', sortField: options.sortField || void 0, perPage: options.perPage || 15, + paginationLimit: options.paginationLimit || 10, filterFn: options.filterFn || void 0, + alwaysMatch: options.alwaysMatch || false, unsortedClass: options.unsortedClass || '', descSortClass: options.descSortClass || '', ascSortClass: options.ascSortClass || '' @@ -58,23 +63,69 @@ this.sortDir = ko.observable(this.options.sortDir); this.sortField = ko.observable(this.options.sortField); this.perPage = ko.observable(this.options.perPage); - this.currentPage = ko.observable(1); - this.filter = ko.observable(''); + this.currentPageNumber = ko.observable(1); + this.filter = ko.observable('').extend({ + rateLimit: { + method: "notifyWhenChangesStop", + timeout: 400 + } + }); this.loading = ko.observable(false); return this.rows = ko.observableArray([]); }; + DataTable.prototype.getPages = function(rowCount) { + var page, pageNumber, pagesArr, perPage, rowIndex; + perPage = this.perPage(); + rowIndex = 0; + pageNumber = 1; + pagesArr = new Array(Math.ceil(rowCount / perPage)); + while (rowIndex < rowCount) { + page = { + number: pageNumber, + start: rowIndex, + end: Math.min(rowCount - 1, rowIndex + perPage - 1) + }; + page.blanks = new Array(pagesArr.length > 1 ? perPage - (page.end - page.start + 1) : 0); + pagesArr[pageNumber - 1] = page; + pageNumber++; + rowIndex += perPage; + } + return pagesArr; + }; + + DataTable.prototype.getLimitedPages = function() { + var current, firstPage, lastPage, leftMargin, limit, pages, rightMargin; + pages = this.pages(); + current = this.currentPageNumber(); + limit = this.options.paginationLimit; + if (pages.length <= limit) { + return pages; + } + leftMargin = Math.floor(limit / 2); + firstPage = current - Math.floor(leftMargin); + if (firstPage < 1) { + return pages.slice(0, limit); + } + rightMargin = limit % 2 === 0 ? leftMargin - 1 : leftMargin; + lastPage = current + rightMargin; + if (lastPage > pages.length) { + return pages.slice(pages.length - limit, pages.length); + } + return pages.slice(firstPage - 1, lastPage); + }; + DataTable.prototype.initWithClientSidePagination = function(rows) { - var _defaultMatch; + var filterTrigger, _defaultMatch; this.filtering = ko.observable(false); this.filter.subscribe((function(_this) { return function() { - return _this.currentPage(1); + return _this.currentPageNumber(1); }; })(this)); this.perPage.subscribe((function(_this) { return function() { - return _this.currentPage(1); + return _this.currentPageNumber(1); }; })(this)); this.rows(rows); @@ -94,13 +145,23 @@ return attrMap; }; })(this)); + filterTrigger = ko.observable().extend({ + notify: 'always' + }); + this.triggerFilterCalculation = (function(_this) { + return function() { + filterTrigger.valueHasMutated(); + return _this.currentPageNumber(1); + }; + })(this); this.filteredRows = pureComputed((function(_this) { return function() { var filter, filterFn; + filterTrigger(); _this.filtering(true); filter = _this.filter(); rows = _this.rows.slice(0); - if (filter !== '') { + if (_this.options.alwaysMatch || filter !== '') { filterFn = _this.filterFn(filter); rows = rows.filter(filterFn); } @@ -147,29 +208,45 @@ rateLimit: 50, method: 'notifyWhenChangesStop' }); - this.pagedRows = pureComputed((function(_this) { + this.pages = pureComputed((function(_this) { return function() { - var pageIndex, perPage; - pageIndex = _this.currentPage() - 1; - perPage = _this.perPage(); - return _this.filteredRows().slice(pageIndex * perPage, (pageIndex + 1) * perPage); + return _this.getPages(_this.filteredRows().length); }; })(this)); - this.pages = pureComputed((function(_this) { + this.limitedPages = pureComputed((function(_this) { + return function() { + return _this.getLimitedPages(); + }; + })(this)); + this.currentPage = pureComputed((function(_this) { + return function() { + if (_this.pages().length > 0) { + return _this.pages()[_this.currentPageNumber() - 1]; + } else { + return { + number: 1, + start: 0, + end: 0, + blanks: [] + }; + } + }; + })(this)); + this.pagedRows = pureComputed((function(_this) { return function() { - return Math.ceil(_this.filteredRows().length / _this.perPage()); + return _this.filteredRows().slice(_this.currentPage().start, _this.currentPage().end + 1); }; })(this)); this.leftPagerClass = pureComputed((function(_this) { return function() { - if (_this.currentPage() === 1) { + if (_this.currentPageNumber() === 1) { return 'disabled'; } }; })(this)); this.rightPagerClass = pureComputed((function(_this) { return function() { - if (_this.currentPage() === _this.pages()) { + if (_this.currentPageNumber() === _this.pages().length) { return 'disabled'; } }; @@ -181,30 +258,23 @@ })(this)); this.from = pureComputed((function(_this) { return function() { - return (_this.currentPage() - 1) * _this.perPage() + 1; + return _this.currentPage().start + 1; }; })(this)); this.to = pureComputed((function(_this) { return function() { - var to; - to = _this.currentPage() * _this.perPage(); - if (to > _this.total()) { - return _this.total(); - } else { - return to; - } + return _this.currentPage().end + 1; }; })(this)); this.recordsText = pureComputed((function(_this) { return function() { - var from, pages, recordWord, recordWordPlural, to, total; - pages = _this.pages(); - total = _this.total(); + var from, recordWord, recordWordPlural, to, total; from = _this.from(); to = _this.to(); + total = _this.total(); recordWord = _this.options.recordWord; recordWordPlural = _this.options.recordWordPlural || recordWord + 's'; - if (pages > 1) { + if (_this.pages().length > 1) { return "" + from + " to " + to + " of " + total + " " + recordWordPlural; } else { return "" + total + " " + (total > 1 || total === 0 ? recordWordPlural : recordWord); @@ -248,7 +318,7 @@ this.replaceRows = (function(_this) { return function(rows) { _this.rows(rows); - _this.currentPage(1); + _this.currentPageNumber(1); return _this.filter(void 0); }; })(this); @@ -316,7 +386,7 @@ } return _results; }).call(_this); - return (__indexOf.call(conditionals, false) < 0) && (filter !== '' ? (row.match != null ? row.match(filter) : _defaultMatch(filter, row, _this.rowAttributeMap())) : true); + return (__indexOf.call(conditionals, false) < 0) && (_this.options.alwaysMatch || filter !== '' ? (row.match != null ? row.match(filter) : _defaultMatch(filter, row, _this.rowAttributeMap())) : true); }; }; })(this); @@ -352,11 +422,11 @@ return req.send(); }; })(this); - _gatherData = function(perPage, currentPage, filter, sortDir, sortField) { + _gatherData = function(perPage, currentPageNumber, filter, sortDir, sortField) { var data; data = { perPage: perPage, - page: currentPage + page: currentPageNumber }; if ((filter != null) && filter !== '') { data.filter = filter; @@ -372,12 +442,12 @@ this.numFilteredRows = ko.observable(0); this.filter.subscribe((function(_this) { return function() { - return _this.currentPage(1); + return _this.currentPageNumber(1); }; })(this)); this.perPage.subscribe((function(_this) { return function() { - return _this.currentPage(1); + return _this.currentPageNumber(1); }; })(this)); ko.computed((function(_this) { @@ -385,7 +455,7 @@ var data; _this.loading(true); _this.filtering(true); - data = _gatherData(_this.perPage(), _this.currentPage(), _this.filter(), _this.sortDir(), _this.sortField()); + data = _gatherData(_this.perPage(), _this.currentPageNumber(), _this.filter(), _this.sortDir(), _this.sortField()); return _getDataFromServer(data, function(err, response) { var results, total; _this.loading(false); @@ -404,49 +474,57 @@ }); this.pages = pureComputed((function(_this) { return function() { - return Math.ceil(_this.numFilteredRows() / _this.perPage()); + return _this.getPages(_this.numFilteredRows()); + }; + })(this)); + this.limitedPages = pureComputed((function(_this) { + return function() { + return _this.getLimitedPages(); + }; + })(this)); + this.currentPage = pureComputed((function(_this) { + return function() { + return _this.pages()[_this.currentPageNumber() - 1]; + }; + })(this)); + this.pagedRows = pureComputed((function(_this) { + return function() { + return _this.filteredRows().slice(_this.currentPage().start, _this.currentPage().end + 1); }; })(this)); this.leftPagerClass = pureComputed((function(_this) { return function() { - if (_this.currentPage() === 1) { + if (_this.currentPageNumber() === 1) { return 'disabled'; } }; })(this)); this.rightPagerClass = pureComputed((function(_this) { return function() { - if (_this.currentPage() === _this.pages()) { + if (_this.currentPageNumber() === _this.pages().length) { return 'disabled'; } }; })(this)); this.from = pureComputed((function(_this) { return function() { - return (_this.currentPage() - 1) * _this.perPage() + 1; + return _this.currentPage().start + 1; }; })(this)); this.to = pureComputed((function(_this) { return function() { - var to, total; - to = _this.currentPage() * _this.perPage(); - if (to > (total = _this.numFilteredRows())) { - return total; - } else { - return to; - } + return _this.currentPage().end + 1; }; })(this)); this.recordsText = pureComputed((function(_this) { return function() { - var from, pages, recordWord, recordWordPlural, to, total; - pages = _this.pages(); + var from, recordWord, recordWordPlural, to, total; total = _this.numFilteredRows(); from = _this.from(); to = _this.to(); recordWord = _this.options.recordWord; recordWordPlural = _this.options.recordWordPlural || recordWord + 's'; - if (pages > 1) { + if (_this.pages().length > 1) { return "" + from + " to " + to + " of " + total + " " + recordWordPlural; } else { return "" + total + " " + (total > 1 || total === 0 ? recordWordPlural : recordWord); @@ -488,7 +566,7 @@ var data; _this.loading(true); _this.filtering(true); - data = _gatherData(_this.perPage(), _this.currentPage(), _this.filter(), _this.sortDir(), _this.sortField()); + data = _gatherData(_this.perPage(), _this.currentPageNumber(), _this.filter(), _this.sortDir(), _this.sortField()); return _getDataFromServer(data, function(err, response) { var results, total; _this.loading(false); @@ -507,7 +585,7 @@ DataTable.prototype.toggleSort = function(field) { return (function(_this) { return function() { - _this.currentPage(1); + _this.currentPageNumber(1); if (_this.sortField() === field) { return _this.sortDir(_this.sortDir() === 'asc' ? 'desc' : 'asc'); } else { @@ -520,24 +598,24 @@ DataTable.prototype.prevPage = function() { var page; - page = this.currentPage(); + page = this.currentPageNumber(); if (page !== 1) { - return this.currentPage(page - 1); + return this.currentPageNumber(page - 1); } }; DataTable.prototype.nextPage = function() { var page; - page = this.currentPage(); - if (page !== this.pages()) { - return this.currentPage(page + 1); + page = this.currentPageNumber(); + if (page !== this.pages().length) { + return this.currentPageNumber(page + 1); } }; DataTable.prototype.gotoPage = function(page) { return (function(_this) { return function() { - return _this.currentPage(page); + return _this.currentPageNumber(page); }; })(this); }; @@ -545,7 +623,7 @@ DataTable.prototype.pageClass = function(page) { return pureComputed((function(_this) { return function() { - if (_this.currentPage() === page) { + if (_this.currentPageNumber() === page) { return 'active'; } }; diff --git a/knockout-datatable.min.js b/knockout-datatable.min.js index 6240443..028aadf 100644 --- a/knockout-datatable.min.js +++ b/knockout-datatable.min.js @@ -1,2 +1,2 @@ -(function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.DataTable=function(){function b(a,b){var c;if(b||(a instanceof Array?b={}:(b=a,a=[])),this.options={recordWord:b.recordWord||"record",recordWordPlural:b.recordWordPlural,sortDir:b.sortDir||"asc",sortField:b.sortField||void 0,perPage:b.perPage||15,filterFn:b.filterFn||void 0,unsortedClass:b.unsortedClass||"",descSortClass:b.descSortClass||"",ascSortClass:b.ascSortClass||""},this.initObservables(),(c=b.serverSidePagination)&&c.enabled){if(!c.path||!c.loader)throw new Error("`path` or `loader` missing from `serverSidePagination` object");this.options.paginationPath=c.path,this.options.resultHandlerFn=c.loader,this.initWithServerSidePagination()}else this.initWithClientSidePagination(a)}var c,d;return d=ko.pureComputed||ko.computed,c=function(a,b){return null==b?null==a:null!=a?"boolean"==typeof a?a===b:a.toString().toLowerCase().indexOf(b.toString().toLowerCase())>=0||a===b:!1},b.prototype.initObservables=function(){return this.sortDir=ko.observable(this.options.sortDir),this.sortField=ko.observable(this.options.sortField),this.perPage=ko.observable(this.options.perPage),this.currentPage=ko.observable(1),this.filter=ko.observable(""),this.loading=ko.observable(!1),this.rows=ko.observableArray([])},b.prototype.initWithClientSidePagination=function(b){var e;return this.filtering=ko.observable(!1),this.filter.subscribe(function(a){return function(){return a.currentPage(1)}}(this)),this.perPage.subscribe(function(a){return function(){return a.currentPage(1)}}(this)),this.rows(b),this.rowAttributeMap=d(function(a){return function(){var c,d,e;if(b=a.rows(),c={},b.length>0){e=b[0];for(d in e)e.hasOwnProperty(d)&&(c[d.toLowerCase()]=d)}return c}}(this)),this.filteredRows=d(function(a){return function(){var c,d;return a.filtering(!0),c=a.filter(),b=a.rows.slice(0),""!==c&&(d=a.filterFn(c),b=b.filter(d)),null!=a.sortField()&&""!==a.sortField()&&b.sort(function(b,c){var d,e;return d=ko.utils.unwrapObservable(b[a.sortField()]),e=ko.utils.unwrapObservable(c[a.sortField()]),"string"==typeof d&&(d=d.toLowerCase()),"string"==typeof e&&(e=e.toLowerCase()),"asc"===a.sortDir()?e>d||""===d||null==d?-1:d>e||""===e||null==e?1:0:e>d||""===d||null==d?1:d>e||""===e||null==e?-1:0}),a.filtering(!1),b}}(this)).extend({rateLimit:50,method:"notifyWhenChangesStop"}),this.pagedRows=d(function(a){return function(){var b,c;return b=a.currentPage()-1,c=a.perPage(),a.filteredRows().slice(b*c,(b+1)*c)}}(this)),this.pages=d(function(a){return function(){return Math.ceil(a.filteredRows().length/a.perPage())}}(this)),this.leftPagerClass=d(function(a){return function(){return 1===a.currentPage()?"disabled":void 0}}(this)),this.rightPagerClass=d(function(a){return function(){return a.currentPage()===a.pages()?"disabled":void 0}}(this)),this.total=d(function(a){return function(){return a.filteredRows().length}}(this)),this.from=d(function(a){return function(){return(a.currentPage()-1)*a.perPage()+1}}(this)),this.to=d(function(a){return function(){var b;return b=a.currentPage()*a.perPage(),b>a.total()?a.total():b}}(this)),this.recordsText=d(function(a){return function(){var b,c,d,e,f,g;return c=a.pages(),g=a.total(),b=a.from(),f=a.to(),d=a.options.recordWord,e=a.options.recordWordPlural||d+"s",c>1?""+b+" to "+f+" of "+g+" "+e:""+g+" "+(g>1||0===g?e:d)}}(this)),this.showNoData=d(function(a){return function(){return 0===a.pagedRows().length&&!a.loading()}}(this)),this.showLoading=d(function(a){return function(){return a.loading()}}(this)),this.sortClass=function(a){return function(b){return d(function(){return a.sortField()===b?"sorted "+("asc"===a.sortDir()?a.options.ascSortClass:a.options.descSortClass):a.options.unsortedClass})}}(this),this.addRecord=function(a){return function(b){return a.rows.push(b)}}(this),this.removeRecord=function(a){return function(b){return a.rows.remove(b),0===a.pagedRows().length?a.prevPage():void 0}}(this),this.replaceRows=function(a){return function(b){return a.rows(b),a.currentPage(1),a.filter(void 0)}}(this),e=function(a,b,d){var e,f;return function(){var a;a=[];for(e in d)f=d[e],a.push(f);return a}().some(function(d){return c(ko.isObservable(b[d])?b[d]():b[d],a)})},this.filterFn=this.options.filterFn||function(b){return function(d){var f,g,h;return h=[[],{}],f=h[0],g=h[1],d.split(" ").forEach(function(a){var b;return a.indexOf(":")>=0?(b=a.split(":"),g[b[0]]=function(){switch(b[1].toLowerCase()){case"yes":case"true":return!0;case"no":case"false":return!1;case"blank":case"none":case"null":case"undefined":return void 0;default:return b[1].toLowerCase()}}()):f.push(a)}),f=f.join(" "),function(d){var h,i,j;return h=function(){var a;a=[];for(i in g)j=g[i],a.push(function(a){return function(b,e){var f;return(f=a.rowAttributeMap()[b.toLowerCase()])?c(ko.isObservable(d[f])?d[f]():d[f],e):!1}}(this)(i,j));return a}.call(b),a.call(h,!1)<0&&(""!==f?null!=d.match?d.match(f):e(f,d,b.rowAttributeMap()):!0)}}}(this)},b.prototype.initWithServerSidePagination=function(){var a,b;return b=function(a){return function(b,c){var d,e,f,g;return f=""+a.options.paginationPath+"?"+function(){var a;a=[];for(d in b)g=b[d],a.push(""+encodeURIComponent(d)+"="+encodeURIComponent(g));return a}().join("&"),e=new XMLHttpRequest,e.open("GET",f,!0),e.setRequestHeader("Content-Type","application/json"),e.onload=function(){return e.status>=200&&e.status<400?c(null,JSON.parse(e.responseText)):c(new Error("Error communicating with server"))},e.onerror=function(){return c(new Error("Error communicating with server"))},e.send()}}(this),a=function(a,b,c,d,e){var f;return f={perPage:a,page:b},null!=c&&""!==c&&(f.filter=c),null!=d&&""!==d&&null!=e&&""!==e&&(f.sortDir=d,f.sortBy=e),f},this.filtering=ko.observable(!1),this.pagedRows=ko.observableArray([]),this.numFilteredRows=ko.observable(0),this.filter.subscribe(function(a){return function(){return a.currentPage(1)}}(this)),this.perPage.subscribe(function(a){return function(){return a.currentPage(1)}}(this)),ko.computed(function(c){return function(){var d;return c.loading(!0),c.filtering(!0),d=a(c.perPage(),c.currentPage(),c.filter(),c.sortDir(),c.sortField()),b(d,function(a,b){var d,e;return c.loading(!1),c.filtering(!1),a?console.log(a):(e=b.total,d=b.results,c.numFilteredRows(e),c.pagedRows(d.map(c.options.resultHandlerFn)))})}}(this)).extend({rateLimit:500,method:"notifyWhenChangesStop"}),this.pages=d(function(a){return function(){return Math.ceil(a.numFilteredRows()/a.perPage())}}(this)),this.leftPagerClass=d(function(a){return function(){return 1===a.currentPage()?"disabled":void 0}}(this)),this.rightPagerClass=d(function(a){return function(){return a.currentPage()===a.pages()?"disabled":void 0}}(this)),this.from=d(function(a){return function(){return(a.currentPage()-1)*a.perPage()+1}}(this)),this.to=d(function(a){return function(){var b,c;return b=a.currentPage()*a.perPage(),b>(c=a.numFilteredRows())?c:b}}(this)),this.recordsText=d(function(a){return function(){var b,c,d,e,f,g;return c=a.pages(),g=a.numFilteredRows(),b=a.from(),f=a.to(),d=a.options.recordWord,e=a.options.recordWordPlural||d+"s",c>1?""+b+" to "+f+" of "+g+" "+e:""+g+" "+(g>1||0===g?e:d)}}(this)),this.showNoData=d(function(a){return function(){return 0===a.pagedRows().length&&!a.loading()}}(this)),this.showLoading=d(function(a){return function(){return a.loading()}}(this)),this.sortClass=function(a){return function(b){return d(function(){return a.sortField()===b?"sorted "+("asc"===a.sortDir()?a.options.ascSortClass:a.options.descSortClass):a.options.unsortedClass})}}(this),this.addRecord=function(){throw new Error("#addRecord() not applicable with serverSidePagination enabled")},this.removeRecord=function(){throw new Error("#removeRecord() not applicable with serverSidePagination enabled")},this.replaceRows=function(){throw new Error("#replaceRows() not applicable with serverSidePagination enabled")},this.refreshData=function(c){return function(){var d;return c.loading(!0),c.filtering(!0),d=a(c.perPage(),c.currentPage(),c.filter(),c.sortDir(),c.sortField()),b(d,function(a,b){var d,e;return c.loading(!1),c.filtering(!1),a?console.log(a):(e=b.total,d=b.results,c.numFilteredRows(e),c.pagedRows(d.map(c.options.resultHandlerFn)))})}}(this)},b.prototype.toggleSort=function(a){return function(b){return function(){return b.currentPage(1),b.sortField()===a?b.sortDir("asc"===b.sortDir()?"desc":"asc"):(b.sortDir("asc"),b.sortField(a))}}(this)},b.prototype.prevPage=function(){var a;return a=this.currentPage(),1!==a?this.currentPage(a-1):void 0},b.prototype.nextPage=function(){var a;return a=this.currentPage(),a!==this.pages()?this.currentPage(a+1):void 0},b.prototype.gotoPage=function(a){return function(b){return function(){return b.currentPage(a)}}(this)},b.prototype.pageClass=function(a){return d(function(b){return function(){return b.currentPage()===a?"active":void 0}}(this))},b}()}).call(this); +(function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};this.DataTable=function(){function c(b,c){this.getLimitedPages=a(this.getLimitedPages,this),this.getPages=a(this.getPages,this);var d;if(c||(b instanceof Array?c={}:(c=b,b=[])),this.options={recordWord:c.recordWord||"record",recordWordPlural:c.recordWordPlural,sortDir:c.sortDir||"asc",sortField:c.sortField||void 0,perPage:c.perPage||15,paginationLimit:c.paginationLimit||10,filterFn:c.filterFn||void 0,alwaysMatch:c.alwaysMatch||!1,unsortedClass:c.unsortedClass||"",descSortClass:c.descSortClass||"",ascSortClass:c.ascSortClass||""},this.initObservables(),(d=c.serverSidePagination)&&d.enabled){if(!d.path||!d.loader)throw new Error("`path` or `loader` missing from `serverSidePagination` object");this.options.paginationPath=d.path,this.options.resultHandlerFn=d.loader,this.initWithServerSidePagination()}else this.initWithClientSidePagination(b)}var d,e;return e=ko.pureComputed||ko.computed,d=function(a,b){return null==b?null==a:null!=a?"boolean"==typeof a?a===b:a.toString().toLowerCase().indexOf(b.toString().toLowerCase())>=0||a===b:!1},c.prototype.initObservables=function(){return this.sortDir=ko.observable(this.options.sortDir),this.sortField=ko.observable(this.options.sortField),this.perPage=ko.observable(this.options.perPage),this.currentPageNumber=ko.observable(1),this.filter=ko.observable("").extend({rateLimit:{method:"notifyWhenChangesStop",timeout:400}}),this.loading=ko.observable(!1),this.rows=ko.observableArray([])},c.prototype.getPages=function(a){var b,c,d,e,f;for(e=this.perPage(),f=0,c=1,d=new Array(Math.ceil(a/e));a>f;)b={number:c,start:f,end:Math.min(a-1,f+e-1)},b.blanks=new Array(d.length>1?e-(b.end-b.start+1):0),d[c-1]=b,c++,f+=e;return d},c.prototype.getLimitedPages=function(){var a,b,c,d,e,f,g;return f=this.pages(),a=this.currentPageNumber(),e=this.options.paginationLimit,f.length<=e?f:(d=Math.floor(e/2),b=a-Math.floor(d),1>b?f.slice(0,e):(g=e%2===0?d-1:d,c=a+g,c>f.length?f.slice(f.length-e,f.length):f.slice(b-1,c)))},c.prototype.initWithClientSidePagination=function(a){var c,f;return this.filtering=ko.observable(!1),this.filter.subscribe(function(a){return function(){return a.currentPageNumber(1)}}(this)),this.perPage.subscribe(function(a){return function(){return a.currentPageNumber(1)}}(this)),this.rows(a),this.rowAttributeMap=e(function(b){return function(){var c,d,e;if(a=b.rows(),c={},a.length>0){e=a[0];for(d in e)e.hasOwnProperty(d)&&(c[d.toLowerCase()]=d)}return c}}(this)),c=ko.observable().extend({notify:"always"}),this.triggerFilterCalculation=function(a){return function(){return c.valueHasMutated(),a.currentPageNumber(1)}}(this),this.filteredRows=e(function(b){return function(){var d,e;return c(),b.filtering(!0),d=b.filter(),a=b.rows.slice(0),(b.options.alwaysMatch||""!==d)&&(e=b.filterFn(d),a=a.filter(e)),null!=b.sortField()&&""!==b.sortField()&&a.sort(function(a,c){var d,e;return d=ko.utils.unwrapObservable(a[b.sortField()]),e=ko.utils.unwrapObservable(c[b.sortField()]),"string"==typeof d&&(d=d.toLowerCase()),"string"==typeof e&&(e=e.toLowerCase()),"asc"===b.sortDir()?e>d||""===d||null==d?-1:d>e||""===e||null==e?1:0:e>d||""===d||null==d?1:d>e||""===e||null==e?-1:0}),b.filtering(!1),a}}(this)).extend({rateLimit:50,method:"notifyWhenChangesStop"}),this.pages=e(function(a){return function(){return a.getPages(a.filteredRows().length)}}(this)),this.limitedPages=e(function(a){return function(){return a.getLimitedPages()}}(this)),this.currentPage=e(function(a){return function(){return a.pages().length>0?a.pages()[a.currentPageNumber()-1]:{number:1,start:0,end:0,blanks:[]}}}(this)),this.pagedRows=e(function(a){return function(){return a.filteredRows().slice(a.currentPage().start,a.currentPage().end+1)}}(this)),this.leftPagerClass=e(function(a){return function(){return 1===a.currentPageNumber()?"disabled":void 0}}(this)),this.rightPagerClass=e(function(a){return function(){return a.currentPageNumber()===a.pages().length?"disabled":void 0}}(this)),this.total=e(function(a){return function(){return a.filteredRows().length}}(this)),this.from=e(function(a){return function(){return a.currentPage().start+1}}(this)),this.to=e(function(a){return function(){return a.currentPage().end+1}}(this)),this.recordsText=e(function(a){return function(){var b,c,d,e,f;return b=a.from(),e=a.to(),f=a.total(),c=a.options.recordWord,d=a.options.recordWordPlural||c+"s",a.pages().length>1?""+b+" to "+e+" of "+f+" "+d:""+f+" "+(f>1||0===f?d:c)}}(this)),this.showNoData=e(function(a){return function(){return 0===a.pagedRows().length&&!a.loading()}}(this)),this.showLoading=e(function(a){return function(){return a.loading()}}(this)),this.sortClass=function(a){return function(b){return e(function(){return a.sortField()===b?"sorted "+("asc"===a.sortDir()?a.options.ascSortClass:a.options.descSortClass):a.options.unsortedClass})}}(this),this.addRecord=function(a){return function(b){return a.rows.push(b)}}(this),this.removeRecord=function(a){return function(b){return a.rows.remove(b),0===a.pagedRows().length?a.prevPage():void 0}}(this),this.replaceRows=function(a){return function(b){return a.rows(b),a.currentPageNumber(1),a.filter(void 0)}}(this),f=function(a,b,c){var e,f;return function(){var a;a=[];for(e in c)f=c[e],a.push(f);return a}().some(function(c){return d(ko.isObservable(b[c])?b[c]():b[c],a)})},this.filterFn=this.options.filterFn||function(a){return function(c){var e,g,h;return h=[[],{}],e=h[0],g=h[1],c.split(" ").forEach(function(a){var b;return a.indexOf(":")>=0?(b=a.split(":"),g[b[0]]=function(){switch(b[1].toLowerCase()){case"yes":case"true":return!0;case"no":case"false":return!1;case"blank":case"none":case"null":case"undefined":return void 0;default:return b[1].toLowerCase()}}()):e.push(a)}),e=e.join(" "),function(c){var h,i,j;return h=function(){var a;a=[];for(i in g)j=g[i],a.push(function(a){return function(b,e){var f;return(f=a.rowAttributeMap()[b.toLowerCase()])?d(ko.isObservable(c[f])?c[f]():c[f],e):!1}}(this)(i,j));return a}.call(a),b.call(h,!1)<0&&(a.options.alwaysMatch||""!==e?null!=c.match?c.match(e):f(e,c,a.rowAttributeMap()):!0)}}}(this)},c.prototype.initWithServerSidePagination=function(){var a,b;return b=function(a){return function(b,c){var d,e,f,g;return f=""+a.options.paginationPath+"?"+function(){var a;a=[];for(d in b)g=b[d],a.push(""+encodeURIComponent(d)+"="+encodeURIComponent(g));return a}().join("&"),e=new XMLHttpRequest,e.open("GET",f,!0),e.setRequestHeader("Content-Type","application/json"),e.onload=function(){return e.status>=200&&e.status<400?c(null,JSON.parse(e.responseText)):c(new Error("Error communicating with server"))},e.onerror=function(){return c(new Error("Error communicating with server"))},e.send()}}(this),a=function(a,b,c,d,e){var f;return f={perPage:a,page:b},null!=c&&""!==c&&(f.filter=c),null!=d&&""!==d&&null!=e&&""!==e&&(f.sortDir=d,f.sortBy=e),f},this.filtering=ko.observable(!1),this.pagedRows=ko.observableArray([]),this.numFilteredRows=ko.observable(0),this.filter.subscribe(function(a){return function(){return a.currentPageNumber(1)}}(this)),this.perPage.subscribe(function(a){return function(){return a.currentPageNumber(1)}}(this)),ko.computed(function(c){return function(){var d;return c.loading(!0),c.filtering(!0),d=a(c.perPage(),c.currentPageNumber(),c.filter(),c.sortDir(),c.sortField()),b(d,function(a,b){var d,e;return c.loading(!1),c.filtering(!1),a?console.log(a):(e=b.total,d=b.results,c.numFilteredRows(e),c.pagedRows(d.map(c.options.resultHandlerFn)))})}}(this)).extend({rateLimit:500,method:"notifyWhenChangesStop"}),this.pages=e(function(a){return function(){return a.getPages(a.numFilteredRows())}}(this)),this.limitedPages=e(function(a){return function(){return a.getLimitedPages()}}(this)),this.currentPage=e(function(a){return function(){return a.pages()[a.currentPageNumber()-1]}}(this)),this.pagedRows=e(function(a){return function(){return a.filteredRows().slice(a.currentPage().start,a.currentPage().end+1)}}(this)),this.leftPagerClass=e(function(a){return function(){return 1===a.currentPageNumber()?"disabled":void 0}}(this)),this.rightPagerClass=e(function(a){return function(){return a.currentPageNumber()===a.pages().length?"disabled":void 0}}(this)),this.from=e(function(a){return function(){return a.currentPage().start+1}}(this)),this.to=e(function(a){return function(){return a.currentPage().end+1}}(this)),this.recordsText=e(function(a){return function(){var b,c,d,e,f;return f=a.numFilteredRows(),b=a.from(),e=a.to(),c=a.options.recordWord,d=a.options.recordWordPlural||c+"s",a.pages().length>1?""+b+" to "+e+" of "+f+" "+d:""+f+" "+(f>1||0===f?d:c)}}(this)),this.showNoData=e(function(a){return function(){return 0===a.pagedRows().length&&!a.loading()}}(this)),this.showLoading=e(function(a){return function(){return a.loading()}}(this)),this.sortClass=function(a){return function(b){return e(function(){return a.sortField()===b?"sorted "+("asc"===a.sortDir()?a.options.ascSortClass:a.options.descSortClass):a.options.unsortedClass})}}(this),this.addRecord=function(){throw new Error("#addRecord() not applicable with serverSidePagination enabled")},this.removeRecord=function(){throw new Error("#removeRecord() not applicable with serverSidePagination enabled")},this.replaceRows=function(){throw new Error("#replaceRows() not applicable with serverSidePagination enabled")},this.refreshData=function(c){return function(){var d;return c.loading(!0),c.filtering(!0),d=a(c.perPage(),c.currentPageNumber(),c.filter(),c.sortDir(),c.sortField()),b(d,function(a,b){var d,e;return c.loading(!1),c.filtering(!1),a?console.log(a):(e=b.total,d=b.results,c.numFilteredRows(e),c.pagedRows(d.map(c.options.resultHandlerFn)))})}}(this)},c.prototype.toggleSort=function(a){return function(b){return function(){return b.currentPageNumber(1),b.sortField()===a?b.sortDir("asc"===b.sortDir()?"desc":"asc"):(b.sortDir("asc"),b.sortField(a))}}(this)},c.prototype.prevPage=function(){var a;return a=this.currentPageNumber(),1!==a?this.currentPageNumber(a-1):void 0},c.prototype.nextPage=function(){var a;return a=this.currentPageNumber(),a!==this.pages().length?this.currentPageNumber(a+1):void 0},c.prototype.gotoPage=function(a){return function(b){return function(){return b.currentPageNumber(a)}}(this)},c.prototype.pageClass=function(a){return e(function(b){return function(){return b.currentPageNumber()===a?"active":void 0}}(this))},c}()}).call(this); //# sourceMappingURL=knockout-datatable.min.js.map \ No newline at end of file diff --git a/knockout-datatable.min.js.map b/knockout-datatable.min.js.map index dfc2dd9..326deba 100644 --- a/knockout-datatable.min.js.map +++ b/knockout-datatable.min.js.map @@ -1 +1 @@ -{"version":3,"file":"knockout-datatable.min.js","sources":["knockout-datatable.js"],"names":["__indexOf","indexOf","item","i","l","this","length","DataTable","rows","options","serverSideOpts","Array","recordWord","recordWordPlural","sortDir","sortField","perPage","filterFn","unsortedClass","descSortClass","ascSortClass","initObservables","serverSidePagination","enabled","path","loader","Error","paginationPath","resultHandlerFn","initWithServerSidePagination","initWithClientSidePagination","primitiveCompare","pureComputed","ko","computed","item1","item2","toString","toLowerCase","prototype","observable","currentPage","filter","loading","observableArray","_defaultMatch","filtering","subscribe","_this","rowAttributeMap","attrMap","key","row","hasOwnProperty","filteredRows","slice","sort","a","b","aVal","bVal","utils","unwrapObservable","extend","rateLimit","method","pagedRows","pageIndex","pages","Math","ceil","leftPagerClass","rightPagerClass","total","from","to","recordsText","showNoData","showLoading","sortClass","column","addRecord","record","push","removeRecord","remove","prevPage","replaceRows","val","_results","some","isObservable","filterVar","specials","_ref","split","forEach","word","words","join","conditionals","rowAttr","call","match","_gatherData","_getDataFromServer","data","cb","req","url","encodeURIComponent","XMLHttpRequest","open","setRequestHeader","onload","status","JSON","parse","responseText","onerror","send","page","sortBy","numFilteredRows","err","response","results","console","log","map","refreshData","toggleSort","field","nextPage","gotoPage","pageClass"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"knockout-datatable.min.js","sources":["knockout-datatable.js"],"names":["__bind","fn","me","apply","arguments","__indexOf","indexOf","item","i","l","this","length","DataTable","rows","options","getLimitedPages","getPages","serverSideOpts","Array","recordWord","recordWordPlural","sortDir","sortField","perPage","paginationLimit","filterFn","alwaysMatch","unsortedClass","descSortClass","ascSortClass","initObservables","serverSidePagination","enabled","path","loader","Error","paginationPath","resultHandlerFn","initWithServerSidePagination","initWithClientSidePagination","primitiveCompare","pureComputed","ko","computed","item1","item2","toString","toLowerCase","prototype","observable","currentPageNumber","filter","extend","rateLimit","method","timeout","loading","observableArray","rowCount","page","pageNumber","pagesArr","rowIndex","Math","ceil","number","start","end","min","blanks","current","firstPage","lastPage","leftMargin","limit","pages","rightMargin","floor","slice","filterTrigger","_defaultMatch","filtering","subscribe","_this","rowAttributeMap","attrMap","key","row","hasOwnProperty","notify","triggerFilterCalculation","valueHasMutated","filteredRows","sort","a","b","aVal","bVal","utils","unwrapObservable","limitedPages","currentPage","pagedRows","leftPagerClass","rightPagerClass","total","from","to","recordsText","showNoData","showLoading","sortClass","column","addRecord","record","push","removeRecord","remove","prevPage","replaceRows","val","_results","some","isObservable","filterVar","specials","_ref","split","forEach","word","words","join","conditionals","rowAttr","call","match","_gatherData","_getDataFromServer","data","cb","req","url","encodeURIComponent","XMLHttpRequest","open","setRequestHeader","onload","status","JSON","parse","responseText","onerror","send","sortBy","numFilteredRows","err","response","results","console","log","map","refreshData","toggleSort","field","nextPage","gotoPage","pageClass"],"mappings":"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"} \ No newline at end of file