From 05664ee58924c39d641db83c63e44d4d7579b641 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 30 Jan 2015 23:52:52 -0500 Subject: Render package details on the client. * js/routes.js: Add new route. * js/controller/packageInfo.js: New file. * js/view/packageInfo.js: New file. * js/model/packages.js (guix.packages.PackagesByName): New function. * js/view/ui.js (guix.ui.licenseList): New function. * js/view/packages.js (guix.packages.view): Render package links as Mithril URLs. Remove factorized inner 'renderLicese' function. * guix-web/view/html.scm (javascripts): Add new JS files. (view-package): Delete. --- js/view/packageInfo.js | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 js/view/packageInfo.js (limited to 'js/view/packageInfo.js') diff --git a/js/view/packageInfo.js b/js/view/packageInfo.js new file mode 100644 index 0000000..687d145 --- /dev/null +++ b/js/view/packageInfo.js @@ -0,0 +1,73 @@ +// guix-web - Web interface for GNU Guix +// Copyright © 2015 David Thompson +// +// This program is free software: you can redistribute it and/or +// modify it under the terms of the GNU Affero General Public License +// as published by the Free Software Foundation, either version 3 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public +// License along with this program. If not, see +// . + +(function() { + var packageInfo = guix.packageInfo; + var spinner = m(".spinner-container", m(".spinner")); + + packageInfo.view = function(ctrl) { + var packages = ctrl.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.withLayout([ + guix.ui.headerWithBadge(ctrl.name, packageCount), + m("ul.list-unstyled", packages.map(describePackage)) + ]); + }; +})(); -- cgit v1.2.3