summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-17 16:56:39 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-12-17 19:26:32 +0200
commit96d70925489885912caecf59fbd3c6b9c25a4b49 (patch)
tree6692dbaec9d328c8de307acb3a8c3e3cf62a2cfb
parent4ac68efd4bd53637f4051ce93e74370b08922812 (diff)
downloadacf2-96d70925489885912caecf59fbd3c6b9c25a4b49.tar.bz2
acf2-96d70925489885912caecf59fbd3c6b9c25a4b49.tar.xz
read-only collections
-rw-r--r--acf2/model/field.lua14
-rw-r--r--acf2/model/init.lua1
-rw-r--r--acf2/model/model.lua6
-rw-r--r--acf2/model/node.lua8
-rw-r--r--web/client.js13
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(