From 14a41b574b937a8b904c609ea55dfe72810a0019 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Sun, 23 Feb 2014 21:50:18 +0200 Subject: web client: tabular layout: link to details --- web/widget/abstract/fields.js | 31 +++++++++++++++++++++---------- web/widget/inline.js | 18 +++++++++++++----- web/widget/table/header.js | 5 ++--- web/widget/table/row.js | 28 +++++++++++++++++++++++++--- 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 = $("").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($("").text(label)); + el.prepend(labelTd); if (description) el.append($("").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 = $(""); - $(row).prepend(td); + tr = $(row); + tr.prepend($("")); }); - 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($("").text(label)); - return el; + this.header.append($("").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"); -- cgit v1.2.3