diff options
author | David Thompson <dthompson2@worcester.edu> | 2015-02-09 08:34:37 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2015-02-09 08:34:37 -0500 |
commit | 293294f2401f3dac6d07e9af65b5582ba893a777 (patch) | |
tree | 3f2b64f314d692e2359a613e3f0e2c5dd99e7f71 /js/model | |
parent | 6546b8cae1aead78da45dd269d13219257af04ab (diff) |
js: Overhaul UI with FRP!
* css/guix.css: New loading spinner.
* js/lib/kefir.js: New file.
* js/model/packages.js (guix.packages.Packages): Cache result.
(guix.packages.Sorter, guix.packages.Pager): Delete.
(guix.packages.installPackage): New function.
* js/utils.js (K): New variable.
(guix.withEmit, guix.withEmitAttr, guix.makeModule): New functions.
* js/view/ui.js (guix.ui.paginate, guix.ui.spinUntil): New functions.
(guix.ui.spinner): New variable.
* js/controller/generations.js: Rewrite.
* js/controller/packageInfo.js: Rewrite
* js/controller/packages.js: Rewrite.
* js/view/packages.js: Rewrite.
* js/view/generations.js: Delete.
* js/view/packageInfo.js: Delete.
* js/routes.js: Use new modules.
* guix/web/view/html.scm (javascripts): Update list.
Diffstat (limited to 'js/model')
-rw-r--r-- | js/model/packages.js | 80 |
1 files changed, 13 insertions, 67 deletions
diff --git a/js/model/packages.js b/js/model/packages.js index 39e6a8d..6c4e00d 100644 --- a/js/model/packages.js +++ b/js/model/packages.js @@ -20,85 +20,31 @@ (function() { var packages = guix.packages = {}; - packages.Packages = function() { + packages.Packages = _.once(function() { return m.request({ method: "GET", url: "packages.json", background: true }); - }; + }); packages.PackagesByName = function(name) { return m.request({ method: "GET", - url: "/package/".concat(name).concat(".json") + url: "/package/".concat(name).concat(".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.installPackage = function(package) { + return m.request({ + method: "POST", + url: "/packages/" + .concat(package.name) + .concat("/install"), + background: true + }); + }; packages.PHASE_NONE = 0; packages.PHASE_PROMPT = 1; |