diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-17 16:56:39 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-17 19:26:32 +0200 |
commit | 96d70925489885912caecf59fbd3c6b9c25a4b49 (patch) | |
tree | 6692dbaec9d328c8de307acb3a8c3e3cf62a2cfb | |
parent | 4ac68efd4bd53637f4051ce93e74370b08922812 (diff) | |
download | aconf-96d70925489885912caecf59fbd3c6b9c25a4b49.tar.bz2 aconf-96d70925489885912caecf59fbd3c6b9c25a4b49.tar.xz |
read-only collections
-rw-r--r-- | acf2/model/field.lua | 14 | ||||
-rw-r--r-- | acf2/model/init.lua | 1 | ||||
-rw-r--r-- | acf2/model/model.lua | 6 | ||||
-rw-r--r-- | acf2/model/node.lua | 8 | ||||
-rw-r--r-- | web/client.js | 13 |
5 files changed, 29 insertions, 13 deletions
diff --git a/acf2/model/field.lua b/acf2/model/field.lua index 6587cdc..57c558f 100644 --- a/acf2/model/field.lua +++ b/acf2/model/field.lua @@ -158,6 +158,12 @@ function M.Field:_validate(context, value) return save end +function M.Field:check_editable(context) + if not self:editable(context) then + raise(context.path, 'Is not editable') + end +end + function M.Field:check_required(context) if self.required then raise(context.path, 'Required value not set') end end @@ -167,16 +173,14 @@ function M.Field:normalize(context, value) return value end function M.Field:validate(context, value) end function M.Field:save(context, value) - if not self:editable(context) then - raise(context.path, 'Is not editable') - end + self:check_editable(context) self:_save(context, self:_validate(context, value)) end function M.Field:_save(context, value) context.txn:set(context.addr, value) end function M.Field:validate_saved(context) - self:save(context, self:load(context)) + if self:editable(context) then self:save(context, self:load(context)) end end @@ -265,6 +269,8 @@ function M.TreeNode:load(context, options) end function M.TreeNode:save(context, value) + self:check_editable(context) + local path = context.path if value == path then return end diff --git a/acf2/model/init.lua b/acf2/model/init.lua index 29258a3..3288566 100644 --- a/acf2/model/init.lua +++ b/acf2/model/init.lua @@ -185,6 +185,7 @@ function M.Collection:init(params, itype) self.itype = itype or node.Collection self.iparams = { destroy=self.destroy, + editable=self:editable(), layout=self.layout, required=self.required, ui_member=self.ui_member diff --git a/acf2/model/model.lua b/acf2/model/model.lua index a7609b0..4140087 100644 --- a/acf2/model/model.lua +++ b/acf2/model/model.lua @@ -201,10 +201,8 @@ function M.Model:init(context) function mt.validate() for _, f in ipairs(_members(Field)) do - if f:editable() then - if mt.match(f.condition or {}) then f:validate_saved() - else f:_save() end - end + if mt.match(f.condition or {}) then f:validate_saved() + elseif f:editable() then f:_save() end end if self.validate then self:validate() end end diff --git a/acf2/model/node.lua b/acf2/model/node.lua index 3347cd0..86722f2 100644 --- a/acf2/model/node.lua +++ b/acf2/model/node.lua @@ -172,6 +172,7 @@ function M.Collection:init(context, params) if not mt.txn then return end mt._meta.type = 'collection' + mt._meta.editable = params.editable mt._meta.required = params.required mt._meta['ui-member'] = params.ui_member or mt._meta['ui-name']:gsub( 's$', '' @@ -204,7 +205,12 @@ function M.Collection:init(context, params) end end - function mt.save(k, v) mt.member(k):save(v) end + function mt.save(k, v) + if not params.editable then + raise(mt.path, 'Collection is not editable') + end + mt.member(k):save(v) + end end diff --git a/web/client.js b/web/client.js index 77fef5d..ddad75c 100644 --- a/web/client.js +++ b/web/client.js @@ -509,10 +509,12 @@ $(function() { var value = data.get(name); var status = data.status(name); - if (!editable || meta.editable == false) { + if (!editable || !meta.editable) { var el = this.staticRender(value, meta); - setStatus(el, status); - return el; + if (el) { + setStatus(el, status); + return el; + } } this.makeEl(); @@ -783,6 +785,8 @@ $(function() { ); }, + staticRender: function(value, meta) { return null; }, + showStatus: false, requestData: function(value, meta) { @@ -985,7 +989,8 @@ $(function() { this.renderFields(data, meta); - if (_.contains(["collection", "list"], meta.type)) { + if (meta.editable && + _.contains(["collection", "list"], meta.type)) { var keys = _.clone(_.keys(data.data)); var button = $("<input>").attr( |