summaryrefslogtreecommitdiffstats
path: root/web/client.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/client.js')
-rw-r--r--web/client.js40
1 files changed, 34 insertions, 6 deletions
diff --git a/web/client.js b/web/client.js
index b3261cb..6ccb917 100644
--- a/web/client.js
+++ b/web/client.js
@@ -138,6 +138,10 @@ $(function() {
return data.data[index(name)];
};
+ data.metaRequest = function(name) {
+ return request("/meta" + join(path, name));
+ };
+
data.match = function(filter) {
if (!filter) return true;
return _.every(_.map(filter, function(values, key) {
@@ -498,6 +502,7 @@ $(function() {
init: function(data, name, meta, level, editable, removable) {
this.data = data;
+ this.name = name;
this.meta = meta;
this.level = level;
@@ -511,14 +516,20 @@ $(function() {
}
this.makeEl();
+ this.dynamic = meta.dynamic;
var self = this;
- var request = this.requestData(value, meta)
- .done(function(value, meta) {
+ var request;
+ function handleRequest(req) {
+ request = req;
+ req.done(function(value, meta) {
+ if (req != request) return;
self.render(value, meta);
self.setStatus(status);
});
+ }
+ handleRequest(this.requestData(value, meta));
this.wrapped = this.wrap();
this.visible = true;
@@ -548,7 +559,9 @@ $(function() {
});
this.wrapped.on("updated", function(event, field) {
+ if (self.dynamic) handleRequest(self.refreshData());
if (!field ||
+ self.dynamic ||
(meta.condition && field in meta.condition))
validate();
event.stopPropagation();
@@ -563,6 +576,15 @@ $(function() {
return $.Deferred().resolve(value, meta);
},
+ refreshData: function() {
+ var def = $.Deferred();
+ var self = this;
+ this.data.metaRequest(this.name).done(function(data) {
+ def.resolve(self.get(), data);
+ });
+ return def;
+ },
+
wrap: function() { return this.el; },
showStatus: true,
@@ -588,7 +610,6 @@ $(function() {
init: function(
data, name, meta, level, editable, removable
) {
- this.name = name;
this.editable = editable && meta.editable;
var el = this.super(
@@ -686,7 +707,7 @@ $(function() {
createEl: function() { return $("<select>"); },
render: function(value, meta) {
- var el = this.field;
+ var el = this.field.empty();
function opt(value, ui_value, selected) {
el.append($("<option>").attr(
@@ -756,8 +777,13 @@ $(function() {
showStatus: false,
requestData: function(value, meta) {
+ this.path = value;
+ return this.refreshData();
+ },
+
+ refreshData: function() {
var def = $.Deferred();
- txnMgr.query(value).done(function(data) {
+ txnMgr.query(this.path).done(function(data) {
def.resolve(data, data.meta);
});
return def;
@@ -914,7 +940,7 @@ $(function() {
createEl: function() { return $("<div>"); },
render: function(data, meta) {
- this.el.append(
+ this.el.html(
$("<h" + this.level + ">").text(data.meta["ui-name"])
);
}
@@ -1052,6 +1078,8 @@ $(function() {
},
render: function(data, meta) {
+ this.dynamic = meta.members.dynamic;
+
this.super(CheckBoxes, "render", data, meta);
var table = $("<table>");