summaryrefslogtreecommitdiff
path: root/js/controller/packageInfo.js
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/controller/packageInfo.js
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/controller/packageInfo.js')
-rw-r--r--js/controller/packageInfo.js59
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);
};
})();