diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-21 12:23:38 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-12-21 13:08:41 +0200 |
commit | a4dcb24efa1fbe9c0d05ccb69525ee3e1e5984c9 (patch) | |
tree | e74f162746c6cbfb66700962f2b69d3afbcf9e33 /acf2/model | |
parent | ffb001c705a6f16c7055f5ab18a1f9aad8d7350f (diff) | |
download | acf2-a4dcb24efa1fbe9c0d05ccb69525ee3e1e5984c9.tar.bz2 acf2-a4dcb24efa1fbe9c0d05ccb69525ee3e1e5984c9.tar.xz |
model: default field to editable if its compute function returns nil
Diffstat (limited to 'acf2/model')
-rw-r--r-- | acf2/model/field.lua | 33 | ||||
-rw-r--r-- | acf2/model/init.lua | 2 |
2 files changed, 21 insertions, 14 deletions
diff --git a/acf2/model/field.lua b/acf2/model/field.lua index 5a699f6..ebe35ab 100644 --- a/acf2/model/field.lua +++ b/acf2/model/field.lua @@ -56,13 +56,8 @@ M.Field = class(M.Member) function M.Field:init(params) if not params then params = {} end - params = setdefaults( - params, - { - addr=params.compute and node.null_addr or nil, - editable=(params.store or not params.compute) and true or false, - visible=true - } + setdefaults( + params, {addr=params.compute and node.null_addr or nil, visible=true} ) super(self, M.Field):init(params) @@ -74,10 +69,6 @@ function M.Field:init(params) end end - if type(self.editable) ~= 'function' then - function self.editable(obj) return params.editable end - end - self.condition = M.conv_filter(self.condition) if self.choice then @@ -105,7 +96,19 @@ function M.Field:init(params) end end -function M.Field:_editable(context) return self:editable(context.parent) end +function M.Field:_editable(context) + if self.editable == nil then + if self.store or not self.compute then return true end + if self.compute then return self:_compute(context) == nil end + return false + end + + if type(self.editable) == 'function' then + return self:editable(context.parent) and true or false + end + + return self.editable +end function M.Field:_choice(context) return self.choice end @@ -135,12 +138,16 @@ end function M.Field:load(context) if not context.txn then return setmetatable({}, context) end local value - if self.compute then value = self:compute(context.parent, context.txn) end + if self.compute then value = self:_compute(context) end if value == nil then value = self:_load(context) end if value == nil then return self.default end return value end +function M.Field:_compute(context) + return self:compute(context.parent, context.txn) +end + function M.Field:_load(context) return context.txn:get(context.addr) end function M.Field:_validate(context, value) diff --git a/acf2/model/init.lua b/acf2/model/init.lua index 31f4dd6..0e89bc6 100644 --- a/acf2/model/init.lua +++ b/acf2/model/init.lua @@ -189,7 +189,7 @@ function M.Collection:init(params, itype) self.itype = itype or node.Collection self.iparams = { destroy=self.destroy, - editable=self:editable(), + editable=self:_editable(), layout=self.layout, required=self.required, ui_member=self.ui_member |