// guix-web - Web interface for GNU Guix // Copyright © 2014 David Thompson // // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU Affero General Public License // as published by the Free Software Foundation, either version 3 of // the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public // License along with this program. If not, see // . (function() { var packages = guix.packages = {}; packages.Packages = function() { return m.request({ method: "GET", url: "packages.json", background: true }); }; packages.Sorter = (function() { function Sorter(field, isDescending) { this.field = field; this.isDescending = _.isUndefined(isDescending) ? false : isDescending; }; Sorter.prototype.sort = function(array) { var result = _.sortBy(array, this.field); return this.isDescending ? result.reverse() : result; }; Sorter.prototype.reverse = function() { return new packages.Sorter(this.field, !this.isDescending); }; return Sorter; })(); packages.Pager = (function() { function Pager(items, pageSize) { this.pageSize= pageSize; this.pageIndex = 0; this.pages = guix.chunk(items, pageSize); } Pager.prototype.currentPage = function() { return this.pages[this.pageIndex]; }; Pager.prototype.pageCount = function() { return this.pages.length; }; Pager.prototype.isEmpty = function() { return this.pageCount() === 0; }; Pager.prototype.isFirstPage = function() { return this.pageIndex === 0; }; Pager.prototype.isLastPage = function() { return this.pageIndex === this.pages.length - 1; }; Pager.prototype.isCurrentPage = function(i) { return this.pageIndex === i; }; Pager.prototype.nextPage = function() { this.pageIndex = Math.min(this.pageCount() - 1, this.pageIndex + 1); }; Pager.prototype.previousPage = function() { this.pageIndex = Math.max(0, this.pageIndex - 1); }; Pager.prototype.gotoPage = function(page) { this.pageIndex = guix.clamp(page, 0, this.pageCount() -1); }; return Pager; })(); packages.PHASE_NONE = 0; packages.PHASE_PROMPT = 1; packages.PHASE_DERIVATION = 2; packages.PHASE_SUCCESS = 3; packages.PHASE_ERROR = 4; })();