summaryrefslogtreecommitdiff
path: root/js/model
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-02-09 08:34:37 -0500
committerDavid Thompson <dthompson2@worcester.edu>2015-02-09 08:34:37 -0500
commit293294f2401f3dac6d07e9af65b5582ba893a777 (patch)
tree3f2b64f314d692e2359a613e3f0e2c5dd99e7f71 /js/model
parent6546b8cae1aead78da45dd269d13219257af04ab (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.js80
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;