diff options
Diffstat (limited to 'web/widget/abstract/inline.js')
-rw-r--r-- | web/widget/abstract/inline.js | 74 |
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; + } +); |