From a0dd090192efa55208310c264759a457be985fa4 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 6 Aug 2014 22:35:04 -0400 Subject: First commit. --- js/guix-web.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 js/guix-web.js (limited to 'js/guix-web.js') diff --git a/js/guix-web.js b/js/guix-web.js new file mode 100644 index 0000000..019d64a --- /dev/null +++ b/js/guix-web.js @@ -0,0 +1,94 @@ +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); + })); + }; +}; + +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("div", [ + m("label", "Search"), + m("input", { + type: "text", + placeholder: 'gui.*', + 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