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 | |
parent | 9e2f9a25730b995e408562042dd9dd8e690c78d4 (diff) | |
download | aconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.bz2 aconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.xz |
web client: alternative collection layouts
-rw-r--r-- | acf/model/init.lua | 1 | ||||
-rw-r--r-- | acf/model/node.lua | 1 | ||||
-rw-r--r-- | web/client.js | 91 |
3 files changed, 53 insertions, 40 deletions
diff --git a/acf/model/init.lua b/acf/model/init.lua index 2a80b1a..2f50b66 100644 --- a/acf/model/init.lua +++ b/acf/model/init.lua @@ -148,6 +148,7 @@ function M.Collection:init(params, itype) self.itype = itype or node.Collection self.iparams = { destroy=self.destroy, + layout=self.layout, required=self.required, ui_member=self.ui_member } diff --git a/acf/model/node.lua b/acf/model/node.lua index 0b02e80..dfb919d 100644 --- a/acf/model/node.lua +++ b/acf/model/node.lua @@ -163,6 +163,7 @@ function M.Collection:init(context, params) mt.meta.type = 'collection' mt.meta.members = field:meta() mt.meta['ui-member'] = params.ui_member or mt.meta['ui-name']:gsub('s$', '') + mt.meta.widget = params.layout function mt.mmeta(name) local res = util.copy(mt.meta.members) 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); } |