From 293294f2401f3dac6d07e9af65b5582ba893a777 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 9 Feb 2015 08:34:37 -0500 Subject: js: Overhaul UI with FRP! * css/guix.css: New loading spinner. * js/lib/kefir.js: New file. * js/model/packages.js (guix.packages.Packages): Cache result. (guix.packages.Sorter, guix.packages.Pager): Delete. (guix.packages.installPackage): New function. * js/utils.js (K): New variable. (guix.withEmit, guix.withEmitAttr, guix.makeModule): New functions. * js/view/ui.js (guix.ui.paginate, guix.ui.spinUntil): New functions. (guix.ui.spinner): New variable. * js/controller/generations.js: Rewrite. * js/controller/packageInfo.js: Rewrite * js/controller/packages.js: Rewrite. * js/view/packages.js: Rewrite. * js/view/generations.js: Delete. * js/view/packageInfo.js: Delete. * js/routes.js: Use new modules. * guix/web/view/html.scm (javascripts): Update list. --- js/controller/generations.js | 49 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'js/controller/generations.js') diff --git a/js/controller/generations.js b/js/controller/generations.js index 011dfa2..2b17a59 100644 --- a/js/controller/generations.js +++ b/js/controller/generations.js @@ -15,16 +15,43 @@ // License along with this program. If not, see // . -(function(generations) { - generations.controller = (function() { - function controller() { - this.generations = m.prop([]); +guix.generations.controller = function() { + var generations = K.fromPromise(guix.generations.Generations()); - generations.Generations() - .then(this.generations) - .then(m.redraw); - } + return guix.ui.spinUntil(generations.map(function(generations) { + return [ + guix.ui.headerWithBadge("Generations", generations.length), + m("table.table.table-bordered", [ + m("thead", m("tr", [ + m("th", "#"), + m("th", "Name"), + m("th", "Version"), + m("th", "Output"), + m("th", "Location") + ])), + m("tbody", [ + generations.map(function(generation) { + var entries = generation.manifestEntries; - return controller; - })(); -})(guix.generations); + function renderRow(entry, isFirst) { + return m("tr", [ + isFirst ? m("td", { + rowspan: entries.length + }, m("strong", generation.number)) : null, + m("td", entry.name), + m("td", entry.version), + m("td", entry.output), + m("td", entry.location) + ]); + } + + return [renderRow(entries[0], true)] + .concat(entries.slice(1).map(function (entry) { + return renderRow(entry, false); + })); + }) + ]) + ]) + ]; + })).map(guix.withLayout); +}; -- cgit v1.2.3