diff options
-rw-r--r-- | acf2/model/field.lua | 4 | ||||
-rw-r--r-- | acf2/model/model.lua | 2 | ||||
-rw-r--r-- | acf2/model/service.lua | 2 | ||||
-rw-r--r-- | protocol.txt | 1 | ||||
-rw-r--r-- | web/client.js | 12 |
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 |