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/controller/packageInfo.js | |
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/controller/packageInfo.js')
-rw-r--r-- | js/controller/packageInfo.js | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/js/controller/packageInfo.js b/js/controller/packageInfo.js index ebd6a51..bb6c0b4 100644 --- a/js/controller/packageInfo.js +++ b/js/controller/packageInfo.js @@ -16,10 +16,61 @@ // <http://www.gnu.org/licenses/>. (function() { - var packageInfo = guix.packageInfo = {}; + guix.packageInfo = {}; - packageInfo.controller = function() { - this.name = m.route.param("name"); - this.packages = guix.packages.PackagesByName(this.name); + guix.packageInfo.controller = function() { + var name = m.route.param("name"); + var packages = K.fromPromise(guix.packages.PackagesByName(name)); + + // View. + return guix.ui.spinUntil(packages.map(function(packages) { + var packageCount = (function() { + var count = packages.length; + var units = count > 1 ? " versions" : " version"; + + return count.toString().concat(units); + })(); + + function describeInputs(inputs, description) { + return _.isEmpty(inputs) ? [] : [ + m("dt", description), + m("dd", m("ul", inputs.map(function(p) { + return m("li", m("a", { + config: m.route, + href: "/package/".concat(p.name) + }, p.name.concat(" ").concat(p.version))); + }))) + ]; + } + + function describePackage(package) { + var baseDescription = [ + m("dt", "Version"), + m("dd", package.version), + m("dt", "Synopsis"), + m("dd", package.synopsis), + m("dt", "Description"), + m("dd", package.description), + m("dt", "License"), + m("dd", guix.ui.licenseList(package)) + ]; + var inputs = describeInputs(package.inputs, "Inputs"); + var nativeInputs = describeInputs(package.nativeInputs, + "Native Inputs"); + var propagatedInputs = describeInputs(package.propagatedInputs, + "Propagated Inputs"); + return m("li", m("dl", _.flatten([ + baseDescription, + inputs, + nativeInputs, + propagatedInputs + ], true))); + } + + return [ + guix.ui.headerWithBadge(name, packageCount), + m("ul.list-unstyled", packages.map(describePackage)) + ]; + })).map(guix.withLayout); }; })(); |