diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-17 16:56:42 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-17 19:28:56 +0200 |
commit | a8aa513b9d07e8cabdb541c5b01d51caf21673bb (patch) | |
tree | fb267c5c0e3476ccb2384fa7020a8156df334666 /acf2/model | |
parent | 6073e42010ae41bde396d5b140def71c32376f9d (diff) | |
download | aconf-a8aa513b9d07e8cabdb541c5b01d51caf21673bb.tar.bz2 aconf-a8aa513b9d07e8cabdb541c5b01d51caf21673bb.tar.xz |
web client: disable deletion for non-removable collection members
Diffstat (limited to 'acf2/model')
-rw-r--r-- | acf2/model/node.lua | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/acf2/model/node.lua b/acf2/model/node.lua index 59c495d..d0d44cd 100644 --- a/acf2/model/node.lua +++ b/acf2/model/node.lua @@ -15,6 +15,7 @@ local super = object.super local pth = require('acf2.path') local util = require('acf2.util') +local copy = util.copy local update = util.update @@ -81,10 +82,13 @@ function M.TreeNode:init(context, dtype) function mt.get(k, options) return mt.load(k, options) end function mt.removable() return true end + function mt.member_removable(k) + local v = mt.load(k, {dereference=false}) + return not isinstance(v, M.TreeNode) or getmetatable(v).removable() + end + function mt.check_removable(k, v) - if v ~= nil then return end - local old = mt.load(k, {dereference=false}) - if isinstance(old, M.TreeNode) and not getmetatable(old).removable() then + if v == nil and not mt.member_removable(k) then raise(pth.join(mt.path, k), 'Cannot be deleted') end end @@ -204,9 +208,21 @@ function M.Collection:init(context, params, dtype) ) end + local meta = mt.meta + function mt.meta() + local res = copy(meta()) + res.removable = {} + for _, member in ipairs(mt.members()) do + if mt.member_removable(member) then + table.insert(res.removable, member) + end + end + return res + end + function mt.mmeta(name) local meta = mt.meta() - local res = util.copy(meta.members) + local res = copy(meta.members) if name ~= pth.wildcard then res['ui-name'] = meta['ui-member']..' '..name end |