芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/modules/CoreWebclient/js/views/CPageSwitcherView.js
'use strict'; var _ = require('underscore'), $ = require('jquery'), ko = require('knockout'), Utils = require('%PathToCoreWebclientModule%/js/utils/Common.js'), App = require('%PathToCoreWebclientModule%/js/App.js') ; /** * @constructor * @param {number} iCount * @param {number} iPerPage */ function CPageSwitcherView(iCount, iPerPage) { this.bShown = false; this.currentPage = ko.observable(1); this.count = ko.observable(iCount); this.perPage = ko.observable(iPerPage); this.firstPage = ko.observable(1); this.lastPage = ko.observable(1); this.pagesCount = ko.computed(function () { var iCount = this.perPage() > 0 ? Math.ceil(this.count() / this.perPage()) : 0; return (iCount > 0) ? iCount : 1; }, this); ko.computed(function () { var iAllLimit = 20, iLimit = 4, iPagesCount = this.pagesCount(), iCurrentPage = this.currentPage(), iStart = iCurrentPage, iEnd = iCurrentPage ; if (iPagesCount > 1) { while (true) { iAllLimit--; if (1 < iStart) { iStart--; iLimit--; } if (0 === iLimit) { break; } if (iPagesCount > iEnd) { iEnd++; iLimit--; } if (0 === iLimit) { break; } if (0 === iAllLimit) { break; } } } this.firstPage(iStart); this.lastPage(iEnd); }, this); this.visibleFirst = ko.computed(function () { return (this.firstPage() > 1); }, this); this.visibleLast = ko.computed(function () { return (this.lastPage() < this.pagesCount()); }, this); this.clickPage = _.bind(this.clickPage, this); this.pages = ko.computed(function () { var iIndex = this.firstPage(), aPages = [] ; if (this.firstPage() < this.lastPage()) { for (; iIndex <= this.lastPage(); iIndex++) { aPages.push({ number: iIndex, current: (iIndex === this.currentPage()), clickFunc: this.clickPage }); } } return aPages; }, this); if (!App.isMobile()) { this.hotKeysBind(); } } CPageSwitcherView.prototype.ViewTemplate = 'CoreWebclient_PageSwitcherView'; CPageSwitcherView.prototype.hotKeysBind = function () { $(document).on('keydown', $.proxy(function(ev) { if (this.bShown && !Utils.isTextFieldFocused()) { var sKey = ev.keyCode; if (ev.ctrlKey && sKey === Enums.Key.Left) { this.clickPreviousPage(); } else if (ev.ctrlKey && sKey === Enums.Key.Right) { this.clickNextPage(); } } },this)); }; CPageSwitcherView.prototype.hide = function () { this.bShown = false; }; CPageSwitcherView.prototype.show = function () { this.bShown = true; }; CPageSwitcherView.prototype.clear = function () { this.currentPage(1); this.count(0); }; /** * @param {number} iCount */ CPageSwitcherView.prototype.setCount = function (iCount) { this.count(iCount); if (this.currentPage() > this.pagesCount()) { this.currentPage(this.pagesCount()); } }; /** * @param {number} iPage * @param {number} iPerPage */ CPageSwitcherView.prototype.setPage = function (iPage, iPerPage) { this.perPage(iPerPage); if (iPage > this.pagesCount()) { this.currentPage(this.pagesCount()); } else { this.currentPage(iPage); } }; /** * @param {Object} oPage */ CPageSwitcherView.prototype.clickPage = function (oPage) { var iPage = oPage.number; if (iPage < 1) { iPage = 1; } if (iPage > this.pagesCount()) { iPage = this.pagesCount(); } this.currentPage(iPage); }; CPageSwitcherView.prototype.clickFirstPage = function () { this.currentPage(1); }; CPageSwitcherView.prototype.clickPreviousPage = function () { var iPrevPage = this.currentPage() - 1; if (iPrevPage < 1) { iPrevPage = 1; } this.currentPage(iPrevPage); }; CPageSwitcherView.prototype.clickNextPage = function () { var iNextPage = this.currentPage() + 1; if (iNextPage > this.pagesCount()) { iNextPage = this.pagesCount(); } this.currentPage(iNextPage); }; CPageSwitcherView.prototype.clickLastPage = function () { this.currentPage(this.pagesCount()); }; module.exports = CPageSwitcherView;