summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--acf2/model/field.lua4
-rw-r--r--acf2/model/model.lua2
-rw-r--r--acf2/model/service.lua2
-rw-r--r--protocol.txt1
-rw-r--r--web/client.js12
5 files changed, 13 insertions, 8 deletions
diff --git a/acf2/model/field.lua b/acf2/model/field.lua
index 5829201..22751c2 100644
--- a/acf2/model/field.lua
+++ b/acf2/model/field.lua
@@ -44,6 +44,8 @@ M.Field = class(M.Member)
function M.Field:init(params)
super(self, M.Field):init(params)
+ if self.editable == nil then self.editable = not self.compute end
+
if self.choice and not self['ui-choice'] then
self['ui-choice'] = util.map(
function(name) return self:auto_ui_name(name) end,
@@ -61,6 +63,7 @@ function M.Field:meta(context)
local res = super(self, M.Field):meta(context)
res.type = self.dtype
+ res.editable = self.editable
res.required = self.required
res.default = self.default
res.choice = self.choice
@@ -99,6 +102,7 @@ end
function M.Field:validate(context, value) end
function M.Field:save(context, value)
+ if not self.editable then raise(context.path, 'Is not editable') end
context.txn:set(context.addr, self:_validate(context, value))
end
diff --git a/acf2/model/model.lua b/acf2/model/model.lua
index dc506b3..4b6224c 100644
--- a/acf2/model/model.lua
+++ b/acf2/model/model.lua
@@ -189,7 +189,7 @@ function M.Model:init(context)
function mt.validate()
for _, f in ipairs(_members(Field)) do
- if not f.compute then f:validate_saved() end
+ if f.editable then f:validate_saved() end
end
end
diff --git a/acf2/model/service.lua b/acf2/model/service.lua
index 4db634e..e2883b2 100644
--- a/acf2/model/service.lua
+++ b/acf2/model/service.lua
@@ -15,7 +15,7 @@ return function(name)
local addr = pth.join('/service', name)
local eaddr = pth.join(addr, 'enabled')
res.enabled = fld.Boolean{addr=eaddr, required=true}
- res.status = fld.String{addr=pth.join(addr, 'status')}
+ res.status = fld.String{addr=pth.join(addr, 'status'), editable=false}
local function is_enabled() return DataStore:get(eaddr) end
local enabled
diff --git a/protocol.txt b/protocol.txt
index d9f861a..b3bb3b3 100644
--- a/protocol.txt
+++ b/protocol.txt
@@ -56,6 +56,7 @@ resp: JSON object, with the following attributes:
number, boolean)
- widget (name of client-side JS module used to display
the data)
+ - editable (boolean)
- required (boolean)
- default
- max-length
diff --git a/web/client.js b/web/client.js
index 0db3082..dfc8df6 100644
--- a/web/client.js
+++ b/web/client.js
@@ -417,7 +417,7 @@ $(function() {
var value = data.get(name);
var status = data.status(name);
- if (!editable) {
+ if (!editable || meta.editable == false) {
var el = this.staticRender(value);
this.setElStatus(el, status);
return el;
@@ -461,7 +461,7 @@ $(function() {
wrap: function() { return this.el; },
setStatus: function(status) {
- this.setElStatus(this.el, status);
+ if (this.el) this.setElStatus(this.el, status);
}
}
@@ -475,7 +475,7 @@ $(function() {
data, name, meta, level, editable, removable
);
- if (editable) {
+ if (editable && meta.editable) {
var self = this;
function change() {
@@ -518,7 +518,7 @@ $(function() {
};
Field.staticRender = function(value) {
- return $("<div>").text(value);
+ return $("<td>").text(value);
};
Field.makeEl = function() {
@@ -569,7 +569,7 @@ $(function() {
var CheckBox = Object.create(Field);
CheckBox.staticRender = function(value) {
- return $("<div>").text(value ? "Yes" : "No");
+ return $("<td>").text(value ? "Yes" : "No");
};
CheckBox.setElStatus = function(el, status) {
@@ -1029,7 +1029,7 @@ $(function() {
status: function(name) { return null; }
},
name,
- null,
+ {},
0,
true,
false