summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-23 21:50:18 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-26 16:52:56 +0200
commit14a41b574b937a8b904c609ea55dfe72810a0019 (patch)
tree88129181d045268b7e903b65e961acb59dbfa23d /web
parent095de0678bca136947b4c49ab2867de7b93b8798 (diff)
downloadacf2-14a41b574b937a8b904c609ea55dfe72810a0019.tar.bz2
acf2-14a41b574b937a8b904c609ea55dfe72810a0019.tar.xz
web client: tabular layout: link to details
Diffstat (limited to 'web')
-rw-r--r--web/widget/abstract/fields.js31
-rw-r--r--web/widget/inline.js18
-rw-r--r--web/widget/table/header.js5
-rw-r--r--web/widget/table/row.js28
4 files changed, 61 insertions, 21 deletions
diff --git a/web/widget/abstract/fields.js b/web/widget/abstract/fields.js
index de018e8..360364d 100644
--- a/web/widget/abstract/fields.js
+++ b/web/widget/abstract/fields.js
@@ -34,16 +34,16 @@ define(
});
});
- this.widgets = {};
- var labels = {};
- _.each(meta.fields, function(field) {
- if (field.visible) {
- self.widgets[field.name] = self.createWidget(
- field.name, field, true, false
- );
- labels[field.name] = field["ui-name"];
- }
- });
+ this.createModelWidgets(
+ _.filter(meta.fields, function(field) {
+ return field.visible;
+ }),
+ true
+ );
+
+ var labels = _.object(_.map(meta.fields, function(field) {
+ return [field.name, field["ui-name"]];
+ }));
_.each(this.widgets, function(f1, name) {
self.setupWidget(f1, labels[name]);
@@ -69,6 +69,17 @@ define(
});
},
+ createModelWidgets: function(fields, editable) {
+ this.widgets = {};
+ var self = this;
+ _.each(fields, function(field) {
+ var widget = self.createWidget(
+ field.name, field, editable, false
+ );
+ if (widget) self.widgets[field.name] = widget;
+ });
+ },
+
createWidget: function(name, meta, editable, removable) {
var widget = this.widget(meta);
if (widget)
diff --git a/web/widget/inline.js b/web/widget/inline.js
index ee6332a..ac0fa32 100644
--- a/web/widget/inline.js
+++ b/web/widget/inline.js
@@ -90,22 +90,30 @@ define(
appendWidget: function(el, label) {
var self = this;
var description = el.data("description");
+
+ var labelTd = $("<td>").text(label);
+ el.on("hasDetails", function(event, path) {
+ labelTd.html(dom.objectRef(path).text(label));
+ event.stopPropagation();
+ });
+
el = dom.makeRow(el);
if (el.is("tr")) {
- el.prepend($("<td>").text(label));
+ el.prepend(labelTd);
if (description) el.append($("<td>").text(description));
this.appendRow(el);
}
else {
if (el.is("table")) {
this.makeSortable(el.find("tbody"));
- var td;
+ var tr;
el.find("tr").each(function(index, row) {
- td = $("<td>");
- $(row).prepend(td);
+ tr = $(row);
+ tr.prepend($("<td>"));
});
- td.text(label);
+ tr.children().first().remove();
+ tr.prepend(labelTd);
this.table = el;
}
else this.table = null;
diff --git a/web/widget/table/header.js b/web/widget/table/header.js
index 7c2f760..5a0ac6f 100644
--- a/web/widget/table/header.js
+++ b/web/widget/table/header.js
@@ -26,9 +26,8 @@ define(["acf2/widget/table/row", "jquery"], function(Base, $) {
},
appendWidget: function(el, label) {
- el = Base.appendWidget.call(this, el, label);
- if (el) this.header.append($("<th>").text(label));
- return el;
+ this.header.append($("<th>").text(label));
+ return Base.appendWidget.call(this, el, label);
}
});
});
diff --git a/web/widget/table/row.js b/web/widget/table/row.js
index 7e617b2..2e963c7 100644
--- a/web/widget/table/row.js
+++ b/web/widget/table/row.js
@@ -4,8 +4,8 @@
*/
define(
- ["acf2/dom", "acf2/widget/abstract/fields", "jquery"],
- function(dom, Base, $) {
+ ["acf2/dom", "acf2/widget/abstract/fields", "jquery", "underscore"],
+ function(dom, Base, $, _) {
return Base.extend({
createEl: function() {
this.prevAction = null;
@@ -22,8 +22,30 @@ define(
);
},
+ createModelWidgets: function(fields, editable) {
+ Base.createModelWidgets.call(this, fields, editable);
+
+ var self = this;
+ var tdFields = [];
+ _.each(fields, function(field) {
+ if (field.name in self.widgets &&
+ self.widgets[field.name].is("td"))
+ tdFields.push(field);
+ });
+ if (_.size(tdFields) == _.size(fields)) return;
+
+ Base.createModelWidgets.call(this, tdFields, false);
+ this.wrapped.trigger("hasDetails", [this.path]);
+ },
+
+ createWidget: function(name, meta, editable, removable) {
+ if (!meta.condition)
+ return Base.createWidget.call(
+ this, name, meta, editable, removable
+ );
+ },
+
appendWidget: function(el, label) {
- if (!el.is("td")) return null;
if (this.prevWidget) this.prevWidget.after(el);
else {
var ph = this.el.find(".placeholder");