diff options
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); }; })(); |