diff options
author | David Thompson <dthompson2@worcester.edu> | 2015-01-30 23:52:52 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2015-01-30 23:56:23 -0500 |
commit | 05664ee58924c39d641db83c63e44d4d7579b641 (patch) | |
tree | 634448e0f194b94cd590d427b6da75d05f93c870 /js/view | |
parent | 16001bd47e035475888f5bb1396a4a3d48a20084 (diff) |
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.
Diffstat (limited to 'js/view')
-rw-r--r-- | js/view/packageInfo.js | 73 | ||||
-rw-r--r-- | js/view/packages.js | 23 | ||||
-rw-r--r-- | js/view/ui.js | 16 |
3 files changed, 94 insertions, 18 deletions
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 <davet@gnu.org> +// +// 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 +// <http://www.gnu.org/licenses/>. + +(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)) + ]); + }; +})(); diff --git a/js/view/packages.js b/js/view/packages.js index 77b9785..debb9f2 100644 --- a/js/view/packages.js +++ b/js/view/packages.js @@ -23,7 +23,10 @@ function renderName(package) { var name = package.name; - return m("a", { href: "/packages/".concat(name) }, name); + return m("a", { + config: m.route, + href: "/package/".concat(name) + }, name); } function renderHomepage(package) { @@ -34,22 +37,6 @@ } } - function renderLicense(package) { - function licenseLink(license) { - return m("a", { href: license.uri }, license.name); - } - - if(_.isArray(package.license)) { - return m("ul.list-inline", package.license.map(function(license) { - return m("li", licenseLink(license)); - })); - } else if(package.license) { - return licenseLink(package.license); - } else { - return ""; - } - } - function renderInstallLink(package) { return m("a", { href: "#", @@ -82,7 +69,7 @@ m("td", package.version), m("td", package.synopsis), m("td", renderHomepage(package)), - m("td", renderLicense(package)), + m("td", guix.ui.licenseList(package)), m("td", renderInstallLink(package)) ]); }) diff --git a/js/view/ui.js b/js/view/ui.js index 196406a..a528bee 100644 --- a/js/view/ui.js +++ b/js/view/ui.js @@ -42,4 +42,20 @@ m("span.badge", badgeText) ]); }; + + ui.licenseList = function(package) { + function licenseLink(license) { + return m("a", { href: license.uri }, license.name); + } + + if(_.isArray(package.license)) { + return m("ul.list-inline", package.license.map(function(license) { + return m("li", licenseLink(license)); + })); + } else if(package.license) { + return licenseLink(package.license); + } else { + return ""; + } + }; })(); |