summaryrefslogtreecommitdiffstats
path: root/acf2/model/init.lua
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-01 11:42:41 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-03 23:30:18 +0200
commitd919f0e44851501e8a8cca8b8c59f48e00910abc (patch)
treeffa859a7117abf203d2b3a218bac2dfdafe8b4f0 /acf2/model/init.lua
parent4fd4280e0fdef0903a4ce00debb3f94c67c52d41 (diff)
downloadaconf-d919f0e44851501e8a8cca8b8c59f48e00910abc.tar.bz2
aconf-d919f0e44851501e8a8cca8b8c59f48e00910abc.tar.xz
present choices in relative forms for reference sets
Diffstat (limited to 'acf2/model/init.lua')
-rw-r--r--acf2/model/init.lua11
1 files changed, 9 insertions, 2 deletions
diff --git a/acf2/model/init.lua b/acf2/model/init.lua
index 17f9ff4..62f114b 100644
--- a/acf2/model/init.lua
+++ b/acf2/model/init.lua
@@ -55,6 +55,7 @@ local isinstance = object.isinstance
local super = object.super
local pth = require('acf2.path')
+local update = require('acf2.util').update
local stringy = require('stringy')
@@ -66,6 +67,7 @@ function M.Reference:init(params)
if not params.widget then params.widget = 'reference' end
super(self, M.Reference):init(params)
self.dtype = 'reference'
+ self.dereference = true
if not self.scope then self.scope = '/' end
end
@@ -90,8 +92,11 @@ function M.Reference:meta(context)
for k, v in node.pairs(obj) do
if isinstance(v, node.TreeNode) then
v = node.path(v)
+ local name = pth.name(v)
v = not pth.is_subordinate(context.path, v) and {
- value=v, ['ui-value']=pth.name(v), path=true
+ value=self.dereference and v or pth.escape(name),
+ ['ui-value']=name,
+ ref=v
} or nil
else v = {value=pth.escape(v), ['ui-value']=v} end
if v then table.insert(res.choice, v) end
@@ -107,7 +112,9 @@ end
function M.Reference:load(context, options)
local ref = super(self, M.Reference):load(context)
return (
- (not options or options.dereference ~= false) and context.txn and ref
+ update(
+ options or {}, {dereference=self.dereference}
+ ).dereference and context.txn and ref
) and self:follow(context, ref) or ref
end