From 2804e28ef22ded73a95da4508f7630db1db3c97d Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 7 Aug 2014 17:33:13 -0400 Subject: Rename guix-web.js to guix-packages.js. * guix-web (javascripts): Update. * js/guix-packages.js: New file. * js/guix-web.js: Delete it. --- guix-web | 2 +- js/guix-packages.js | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++ js/guix-web.js | 109 ------------------------------------------------- 3 files changed, 115 insertions(+), 110 deletions(-) create mode 100644 js/guix-packages.js delete mode 100644 js/guix-web.js diff --git a/guix-web b/guix-web index 4ef25a4..d628987 100755 --- a/guix-web +++ b/guix-web @@ -118,7 +118,7 @@ (define javascripts '("/js/underscore.js" "/js/mithril.js" - "/js/guix-web.js")) + "/js/guix-packages.js")) (define (run-route request) (match (cons (request-method request) diff --git a/js/guix-packages.js b/js/guix-packages.js new file mode 100644 index 0000000..9c4c450 --- /dev/null +++ b/js/guix-packages.js @@ -0,0 +1,114 @@ +// guix-web - Web interface for GNU Guix +// Copyright © 2014 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 +// . + +var guix = {}; + +guix.Packages = function() { + return m.request({ method: "GET", url: "packages.json" }); +}; + +guix.controller = function() { + this.packages = guix.Packages(); + this.visiblePackages = m.prop([]); + this.searchTerm = m.prop(""); + + // All packages are visible initially + this.packages.then(this.visiblePackages); + + this.doSearch = function() { + var regexp = new RegExp(this.searchTerm()); + + this.visiblePackages(this.packages().filter(function(package) { + return regexp.test(package.name) || + regexp.test(package.synopsis); + })); + }; +}; + +guix.view = function(ctrl) { + function renderName(package) { + var name = package.name; + + return m("a", { href: "/package/".concat(name) }, name); + } + + function renderHomepage(package) { + if(package.homepage) { + return m("a", { href: package.homepage }, package.homepage); + } else { + return ""; + } + } + + 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 ""; + } + } + + return [ + m("h2", [ + "Packages", + m("span.badge", ctrl.packages().length) + ]), + m("input.form-control", { + type: "text", + placeholder: "Search", + onchange: m.withAttr("value", function(value) { + ctrl.searchTerm(value); + ctrl.doSearch(); + }), + value: ctrl.searchTerm() + }), + m("table.table", [ + m("thead", [ + m("tr", [ + ["Name", + "Version", + "Synopsis", + "Home Page", + "License"].map(function(header) { + return m("th", header); + }) + ]) + ]), + m("tbody", [ + ctrl.visiblePackages().map(function(package) { + return m("tr", [ + m("td", renderName(package)), + m("td", package.version), + m("td", package.synopsis), + m("td", renderHomepage(package)), + m("td", renderLicense(package)) + ]); + }) + ]) + ]) + ]; +}; + +m.module(document.getElementById("guix"), guix); diff --git a/js/guix-web.js b/js/guix-web.js deleted file mode 100644 index 8cdbd53..0000000 --- a/js/guix-web.js +++ /dev/null @@ -1,109 +0,0 @@ -// guix-web - Web interface for GNU Guix -// Copyright © 2014 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 -// . - -var guix = {}; - -guix.Packages = function() { - return m.request({ method: "GET", url: "packages.json" }); -}; - -guix.controller = function() { - this.packages = guix.Packages(); - this.visiblePackages = m.prop([]); - this.searchTerm = m.prop(""); - - // All packages are visible initially - this.packages.then(this.visiblePackages); - - this.doSearch = function() { - var regexp = new RegExp(this.searchTerm()); - - this.visiblePackages(this.packages().filter(function(package) { - return regexp.test(package.name) || - regexp.test(package.synopsis); - })); - }; -}; - -guix.view = function(ctrl) { - function renderHomepage(package) { - if(package.homepage) { - return m("a", { href: package.homepage }, package.homepage); - } else { - return ""; - } - } - - 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 ""; - } - } - - return [ - m("h1", "GNU Guix"), - m("h2", [ - "Packages", - m("span.badge", ctrl.packages().length) - ]), - m("input.form-control", { - type: "text", - placeholder: "Search", - onchange: m.withAttr("value", function(value) { - ctrl.searchTerm(value); - ctrl.doSearch(); - }), - value: ctrl.searchTerm() - }), - m("table.table", [ - m("thead", [ - m("tr", [ - ["Name", - "Version", - "Synopsis", - "Home Page", - "License"].map(function(header) { - return m("th", header); - }) - ]) - ]), - m("tbody", [ - ctrl.visiblePackages().map(function(package) { - return m("tr", [ - m("td", package.name), - m("td", package.version), - m("td", package.synopsis), - m("td", renderHomepage(package)), - m("td", renderLicense(package)) - ]); - }) - ]) - ]) - ]; -}; - -m.module(document.getElementById("guix"), guix); -- cgit v1.2.3