diff --git a/knockout-paging/knockout-paging-tests.ts b/knockout-paging/knockout-paging-tests.ts new file mode 100644 index 000000000..eae5490bb --- /dev/null +++ b/knockout-paging/knockout-paging-tests.ts @@ -0,0 +1,90 @@ +/// + +// Different option formats +var emptyOptions = {}; +var pageNumberOptions = { pageNumber: 2 }; +var pageSizeOptions = { pageSize: 10 }; +var generatorOptions = { pageGenerator: 'sliding' }; +var allOptions = { pageNumber: 2, pageSize: 10, pageGenerator: 'sliding' }; + +function defaults() { + ko.paging.defaults.pageNumber = 1; + ko.paging.defaults.pageSize = 50; +} + +function pageGenerators() { + + // Allow to set the windowSize on sliding page generator + ko.paging.generators['sliding'].windowSize(5); + + // Add custom page generator + ko.paging.generators['custom'] = { + generate: function(pagedObservable: KnockoutObservable) { + return [0, 1]; + } + } +} + +function usingPagedObservableArrayFunctionOnKnockoutStatic() { + var simplePaged = ko.pagedObservableArray(); + var initializedPaged = ko.pagedObservableArray([1, 2, 3]); + var emptyOptionsPaged = ko.pagedObservableArray([1, 2, 3], emptyOptions); + var pageNumberOptionsPaged = ko.pagedObservableArray([1, 2, 3], pageNumberOptions); + var pageSizeOptionsPaged = ko.pagedObservableArray([1, 2, 3], pageSizeOptions); + var generatorOptionsPaged = ko.pagedObservableArray([1, 2, 3], generatorOptions); + var allOptionsPaged = ko.pagedObservableArray([1, 2, 3], allOptions); + + // Here we verify that the returned type is the paged observable array + simplePaged.pageSize(); + initializedPaged.pageSize(); + emptyOptionsPaged.pageSize(); + pageNumberOptionsPaged.pageSize(); + pageSizeOptionsPaged.pageSize(); + generatorOptionsPaged.pageSize(); + allOptionsPaged.pageSize(); +} + +function usingExtend() { + var emptyOptionsPaged = ko.observableArray([]).extend({ paged: emptyOptions }); + var pageNumberOptionsPaged = ko.observableArray([]).extend({ paged: pageNumberOptions }); + var pageSizeOptionsPaged = ko.observableArray([]).extend({ paged: pageSizeOptions }); + var generatorOptionsPaged = ko.observableArray([]).extend({ paged: generatorOptions }); + var allOptionsPaged = ko.observableArray([]).extend({ paged: allOptions }); + var withInitialArrayValue = ko.observableArray([1, 2, 3]).extend({ paged: emptyOptions }); + + // Here we verify that the returned type is the paged observable array + emptyOptionsPaged.pageSize(); + pageNumberOptionsPaged.pageSize(); + pageSizeOptionsPaged.pageSize(); + generatorOptionsPaged.pageSize(); + allOptionsPaged.pageSize(); +} + +function observables() { + var paged = ko.pagedObservableArray([]); + var pageSize = paged.pageSize(); + var pageNumber = paged.pageNumber(); +} + +function computed() { + var paged = ko.pagedObservableArray([]); + var pageItems = paged.pageItems(); + var pageCount = paged.pageCount(); + var itemCount = paged.itemCount(); + var firstItemOnPage = paged.firstItemOnPage(); + var lastItemOnPage = paged.lastItemOnPage(); + var hasPreviousPage = paged.hasPreviousPage(); + var hasNextPage = paged.hasNextPage(); + var isFirstPage = paged.isFirstPage(); + var isLastPage = paged.isLastPage(); + var pages = paged.pages(); +} + +function functions() { + var paged = ko.pagedObservableArray([]); + paged.toNextPage(); + paged.toLastPage(); + paged.toNextPage(); + paged.toPreviousPage(); + paged.toFirstPage(); +} \ No newline at end of file diff --git a/knockout-paging/knockout-paging.d.ts b/knockout-paging/knockout-paging.d.ts new file mode 100644 index 000000000..b5f7627a6 --- /dev/null +++ b/knockout-paging/knockout-paging.d.ts @@ -0,0 +1,67 @@ +// Type definitions for knockout-paging +// Project: https://github.com/ErikSchierboom/knockout-paging +// Definitions by: Erik Schierboom +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +interface KnockoutStatic { + paging: KnockoutPagingOptions; + pagedObservableArray(initialValue?: T[], options?: KnockoutPagedOptions): KnockoutPagedObservableArray; +} + +interface KnockoutPagingOptions { + defaults: KnockoutPagingDefaultOptions; + generators: { + [name: string]: KnockoutPageGenerator; + 'sliding': KnockoutSlidingPageGenerator + } +} + +interface KnockoutPagingDefaultOptions { + pageNumber: number; + pageSize: number; +} + +interface KnockoutPagedObservableArray extends KnockoutObservableArray { + pageSize: KnockoutObservable; + pageNumber: KnockoutObservable; + + pageItems: KnockoutComputed; + pageCount: KnockoutComputed; + itemCount: KnockoutComputed; + firstItemOnPage: KnockoutComputed; + lastItemOnPage: KnockoutComputed; + hasPreviousPage: KnockoutComputed; + hasNextPage: KnockoutComputed; + isFirstPage: KnockoutComputed; + isLastPage: KnockoutComputed; + pages: KnockoutComputed; + + toNextPage(): void; + toPreviousPage(): void; + toLastPage(): void; + toFirstPage(): void; +} + +interface KnockoutPagedOptions { + pageSize?: number; + pageNumber?: number; + pageGenerator?: string; +} + +interface KnockoutObservableArray { + extend(requestedExtenders: { 'paged': any; }): KnockoutPagedObservableArray; +} + +interface KnockoutPageGenerator { + generate(pagedObservable: KnockoutPagedObservableArray): number[]; +} + +interface KnockoutSlidingPageGenerator extends KnockoutPageGenerator { + windowSize: KnockoutObservable; +} + +interface KnockoutExtenders { + paged(target: KnockoutObservableArray, options: KnockoutPagedOptions): KnockoutObservableArray; +} \ No newline at end of file