diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-11-25 20:30:19 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-11-25 23:28:52 +0200 |
commit | 4ff7513fec2df0f079b844c7c558e9ad6c448b16 (patch) | |
tree | 2226660ea02f0502fd264f243ecd883f1dc4d415 /acf2 | |
parent | 878c1bc580d89d70d330eb896d7affc88f776ce0 (diff) | |
download | acf2-4ff7513fec2df0f079b844c7c558e9ad6c448b16.tar.bz2 acf2-4ff7513fec2df0f079b844c7c558e9ad6c448b16.tar.xz |
resolve reference choices on server side
Diffstat (limited to 'acf2')
-rw-r--r-- | acf2/model/init.lua | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/acf2/model/init.lua b/acf2/model/init.lua index a45197d..27a2e32 100644 --- a/acf2/model/init.lua +++ b/acf2/model/init.lua @@ -7,6 +7,7 @@ local M = {} M.error = require('acf2.error') local raise = M.error.raise +local relabel = M.error.relabel local combination = require('acf2.model.combination') M.Union = combination.Union @@ -81,6 +82,19 @@ end function M.Reference:meta(context) local res = super(self, M.Reference):meta(context) res.scope = self:abs_scope(context) + + local txn = context.txn + local obj = relabel('system', txn.fetch, txn, res.scope) + assert(isinstance(obj, node.Collection)) + res.choice = {} + for k, v in node.pairs(obj) do + if isinstance(v, node.TreeNode) then + v = node.path(v) + v = {value=v, ['ui-value']=pth.name(v), path=true} + else v = {value=pth.escape(v), ['ui-value']=v} end + table.insert(res.choice, v) + end + return res end @@ -120,7 +134,7 @@ function M.Reference:_validate(context, value) end -- TODO check instance type - M.error.relabel(path, self.follow, self, context, value) + relabel(path, self.follow, self, context, value) return value end |