Commit bb1bd1cc authored by Sven Franck's avatar Sven Franck

app: inherit dynamic state down the element tree

parent 846eec2b
...@@ -3662,7 +3662,7 @@ ...@@ -3662,7 +3662,7 @@
delete flux._temp[set_flux]; delete flux._temp[set_flux];
} else { } else {
// translation!? // translation!?
setter.direct.value = setter.logic.noFlux; setter.direct.value = logic.noFlux;
} }
} }
} }
...@@ -3674,15 +3674,24 @@ ...@@ -3674,15 +3674,24 @@
if (!!item.direct) { if (!!item.direct) {
setValue(item); setValue(item);
} else if (!!item.generate) { } else if (!!item.generate) {
// we must declare wrap for non-form elements here, because they // NOTE: we must declare wrap for non-form elements here, because they
// don't belong into any widget // don't belong into any widget
// NOTE: persist if set!
container = getHelp({ container = getHelp({
"wrap": "section", "wrap": "section",
"persist": item.property_dict.persist,
"class_list": "span_" + (item.property_dict.wrap || 1) "class_list": "span_" + (item.property_dict.wrap || 1)
}); });
container.children.push(item); container.children.push(item);
} else { } else {
helper = getHelp({"wrap": "fragment"}); // NOTE: since we are creating 2 levels in the DOM tree (fragment &
// sections), the normal inheritance will break, because a wrapper
// will be missing state. Therefore we add the state manually here,
// TODO: don't do 2 level stuff.... and complain later when debugging
helper = getHelp({
"wrap": "fragment",
"state": spec.wrapper.property_dict.state
});
} }
// nothing to do, pass back directly // nothing to do, pass back directly
...@@ -3998,6 +4007,8 @@ ...@@ -3998,6 +4007,8 @@
.fail(app.util.error); .fail(app.util.error);
} }
// NOTE: must set property_dict on the controlbar in order to inherit
// dynamic data to the contained field elements
section_list[j] = RSVP.all(field_list) section_list[j] = RSVP.all(field_list)
.then(function (field_response_list) { .then(function (field_response_list) {
section = getHelp({ section = getHelp({
...@@ -6250,12 +6261,14 @@ ...@@ -6250,12 +6261,14 @@
* @return {object} response object/promise * @return {object} response object/promise
**/ **/
// TODO: refactor... appocalyptic // TODO: refactor... appocalyptic
// TODO: determine what should be inherit and make inherit object, that
// will be passed down the rendering tree
app.content.make = function (reply) { app.content.make = function (reply) {
var pass, method, type, kids, promise_list, route, var pass, method, type, kids, promise_list, route,
search, search_id, kid, is_html, is_dynamic, is_id, i, j, k, last, search, search_id, kid, is_html, is_dynamic, is_id, i, j, k, last,
encoded, wrapper, active, selector, update_target, target, widget, encoded, wrapper, active, selector, update_target, target, widget,
quirk_dict, generator, pointer_results, data_total_rows, is_parameter, quirk_dict, generator, pointer_results, data_total_rows, is_parameter,
param_len, parameter, no_item, dyno, container; param_len, parameter, no_item, dyno, container, has_props, widget_dyno;
pass = reply.pass; pass = reply.pass;
pass.config_dict = pass.config_dict || {}; pass.config_dict = pass.config_dict || {};
...@@ -6347,7 +6360,6 @@ ...@@ -6347,7 +6360,6 @@
// make properties available to children in need // make properties available to children in need
wrapper.property_dict = quirk_dict; wrapper.property_dict = quirk_dict;
// no records returned, no_show set below on dyno // no records returned, no_show set below on dyno
// TODO: find better way to set dynamic flag // TODO: find better way to set dynamic flag
if (quirk_dict.no_show) { if (quirk_dict.no_show) {
...@@ -6366,13 +6378,18 @@ ...@@ -6366,13 +6378,18 @@
// TODO: 10 if-else... // TODO: 10 if-else...
if (!pass.skip) { if (!pass.skip) {
// =====================================================================
// NOTE: store state on wrapper property_dict to inherit!
wrapper.property_dict.state = pass.state
// =====================================================================
// inherit item id, so it's available in form as indentifier // inherit item id, so it's available in form as indentifier
if (pointer_results.data.total_rows === 1) { if (pointer_results.data.total_rows === 1) {
quirk_dict.data = {"_id": pointer_results.data.rows[0].doc._id}; quirk_dict.data = {"_id": pointer_results.data.rows[0].doc._id};
} }
// no items, need no show! (default to empty {} if none provided // no items, need no show! (default to empty {} if none provided
if (pointer_results.data.total_rows === 0) { if (pointer_results.data.total_rows === 0) {
if (quirk_dict.allow_new) { if (quirk_dict.allow_new || quirk_dict.force_new) {
pointer_results = {"data": {"total_rows": 1, "rows": [{"doc": {}}]}}; pointer_results = {"data": {"total_rows": 1, "rows": [{"doc": {}}]}};
} else { } else {
quirk_dict.no_show = quirk_dict.no_items || {}; quirk_dict.no_show = quirk_dict.no_items || {};
...@@ -6401,6 +6418,7 @@ ...@@ -6401,6 +6418,7 @@
}); });
container.appendChild(dyno); container.appendChild(dyno);
} }
wrapper.fragment.appendChild(container || dyno); wrapper.fragment.appendChild(container || dyno);
wrapper.child_selector = wrapper.fragment.querySelector( wrapper.child_selector = wrapper.fragment.querySelector(
"#" + quirk_dict.reference "#" + quirk_dict.reference
...@@ -6504,7 +6522,7 @@ ...@@ -6504,7 +6522,7 @@
if (quirk_dict.direct_map) { if (quirk_dict.direct_map) {
kid.property_dict.data = pointer_results.data.rows[0]; kid.property_dict.data = pointer_results.data.rows[0];
// set "grant-children", which will be mapped into ? // NOTE: we may be setting on a wrapper!
} else { } else {
kid.property_dict = util.mergeObject(kid.property_dict, quirk_dict); kid.property_dict = util.mergeObject(kid.property_dict, quirk_dict);
kid.children = util.inherit( kid.children = util.inherit(
...@@ -6514,10 +6532,22 @@ ...@@ -6514,10 +6532,22 @@
} }
} }
// setParam(s) // ===================================================================
is_parameter = (kid.logic || {}).setParam;
has_props = kid.property_dict;
// inherit dynamic state to all children with property_dict
if (has_props && wrapper.property_dict.state) {
kid.property_dict.state = wrapper.property_dict.state;
}
// set dynamic Param(s)
if (is_parameter) { if (is_parameter) {
kid = app.util.setParam(kid, wrapper); kid = app.util.setParam(kid, wrapper);
} }
// ===================================================================
if (quirk_dict.update !== true || is_dynamic || quirk_dict.dynamic) { if (quirk_dict.update !== true || is_dynamic || quirk_dict.dynamic) {
// for content loaded via href, generate URL dict and undefine kid // for content loaded via href, generate URL dict and undefine kid
...@@ -6525,6 +6555,7 @@ ...@@ -6525,6 +6555,7 @@
if (wrapper.is_page && kid.href) { if (wrapper.is_page && kid.href) {
wrapper.inherit = { wrapper.inherit = {
"href": kid.href, "href": kid.href,
"url_query": pass.url_dict.url_query,
"fragment_list": pass.url_dict.fragment_list, "fragment_list": pass.url_dict.fragment_list,
"layout_level": pass.url_dict.layout_level, "layout_level": pass.url_dict.layout_level,
"inherit": true, "inherit": true,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment