summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-09-19 14:23:31 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-09-19 20:37:11 +0300
commit9a71d31632671ebcb0d70461dfaf931a46d3b451 (patch)
treee6b930309220fab20cc2ac51dbe6347149de614f /web
parent9e2f9a25730b995e408562042dd9dd8e690c78d4 (diff)
downloadaconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.bz2
aconf-9a71d31632671ebcb0d70461dfaf931a46d3b451.tar.xz
web client: alternative collection layouts
Diffstat (limited to 'web')
-rw-r--r--web/client.js91
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); }