summaryrefslogtreecommitdiffstats
path: root/web/widget/abstract/inline.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/widget/abstract/inline.js')
-rw-r--r--web/widget/abstract/inline.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/web/widget/abstract/inline.js b/web/widget/abstract/inline.js
new file mode 100644
index 0000000..af7d110
--- /dev/null
+++ b/web/widget/abstract/inline.js
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2012-2014 Kaarle Ritvanen
+ * See LICENSE file for license details
+ */
+
+define(
+ ["acf2/statusbar", "acf2/widget/link", "jquery", "underscore"],
+ function(statusBar, Base, $, _) {
+ var Class = Base.extend({
+ init: function(
+ data, name, meta, level, editable, removable
+ ) {
+ this.txnMgr = data.txnMgr;
+ return this.super(
+ Class,
+ "init",
+ data,
+ name,
+ meta,
+ Math.min(6, level + 1),
+ editable,
+ removable
+ );
+ },
+
+ staticRender: function(value, meta) { return null; },
+
+ createEl: function() { return $("<div>"); },
+
+ showStatus: false,
+
+ requestData: function(value, meta) {
+ this.path = value;
+ return this.refreshData();
+ },
+
+ refreshData: function() {
+ var def = $.Deferred();
+ this.txnMgr.query(this.path).done(function(data) {
+ def.resolve(data, data.meta);
+ });
+ return def;
+ },
+
+ showHeading: true,
+
+ render: function(data, meta) {
+ if (this.showHeading)
+ this.el.html(
+ $("<h" + this.level + ">").text(meta["ui-name"])
+ );
+ },
+
+ wrap: function() { return this.el; },
+
+ validate: function(data) {
+ this.super(Class, "validate", data);
+
+ if (this.data.match(this.meta.condition)) {
+ var valid = data.validate();
+ this.setStatus(data.status());
+ statusBar.validationReady(valid);
+ }
+
+ if (this.fields)
+ _.each(this.fields, function(field) {
+ field.trigger("updated");
+ });
+ }
+ });
+
+ return Class;
+ }
+);