diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-09-19 14:23:31 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-09-19 20:37:11 +0300 |
commit | 9a71d31632671ebcb0d70461dfaf931a46d3b451 (patch) | |
tree | e6b930309220fab20cc2ac51dbe6347149de614f /web | |
parent | 9e2f9a25730b995e408562042dd9dd8e690c78d4 (diff) | |
download | aconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.bz2 aconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.xz |
web client: alternative collection layouts
Diffstat (limited to 'web')
-rw-r--r-- | web/client.js | 91 |
1 files changed, 51 insertions, 40 deletions
diff --git a/web/client.js b/web/client.js index 82c366f..f282cfa 100644 --- a/web/client.js +++ b/web/client.js @@ -566,12 +566,10 @@ $(function() { Inline.setStatus = function(status) {}; Inline.requestData = function(path, level) { - this.task = $.Deferred(); var self = this; - txnMgr.query(path).done(function(data) { + return txnMgr.query(path).done(function(data) { self.renderObject(data, level); - self.task.resolve(); - }).fail(function() { self.task.reject(); }); + }); }; Inline.renderObject = function(data, level) { @@ -591,10 +589,12 @@ $(function() { } table.append(row); } + + var self = this; function renderField(name, meta, label, editable, removable) { var el = makeRow( - Object.create(widgets[meta.widget]).init( + Object.create(self.widget(meta)).init( data, name, meta, @@ -692,40 +692,7 @@ $(function() { } }; - - var Form = Object.create(Inline); - - Form.staticRender = function(value) { return $("#content"); }; - - Form.wrap = function() { return this.el; }; - - Form.requestData = function(path, level) { - if (this.data) this.renderObject(this.data, level); - else _.bind(Inline.requestData, this)(path, level); - }; - - function renderObject(path, data) { - var path = path || $.param.fragment(); - - var form = Object.create(Form); - form.data = data; - - var name = split(path).pop(); - - form.init( - { - get: function(name) { return path; }, - status: function(name) { return null; } - }, - name, - null, - 0, - true, - false - ); - - return form.task; - }; + Inline.widget = function(meta) { return widgets[meta.widget]; }; var Reference = Object.create(ComboBox); @@ -771,7 +738,51 @@ $(function() { inline: Inline, link: Link, reference: Reference - } + }; + + + var Stacked = Object.create(Inline); + + Stacked.widget = function(meta) { + return isTreeNode(meta) ? Inline : Inline.widget(meta); + }; + + + var layouts = {stacked: Stacked}; + + + function renderObject(path, data) { + var path = path || $.param.fragment(); + + return ( + data ? $.Deferred().resolve(data) : txnMgr.query(path) + ).done(function(data) { + var layout = data.meta.widget; + var form = Object.create(layout ? layouts[layout] : Inline); + + form.staticRender = function(value) { + return $("#content"); + }; + form.wrap = function() { return this.el; }; + form.requestData = function(path, level) { + this.renderObject(data, level); + }; + + var name = split(path).pop(); + + form.init( + { + get: function(name) { return path; }, + status: function(name) { return null; } + }, + name, + null, + 0, + true, + false + ); + }); + }; function redirect(path) { $.bbq.pushState("#" + path); } |