[erp5_web_renderjs_ui] Ensure that iframe GadgetField are correctly loaded with their data
Showing
... | ... | @@ -99,45 +99,43 @@ |
</item> | ||
<item> | ||
<key> <string>text_content</string> </key> | ||
<value> <string>/*global window, rJS, RSVP, document*/\n | ||
<value> <string>/*global window, rJS, RSVP*/\n | ||
/*jslint nomen: true, indent: 2, maxerr: 3 */\n | ||
(function (window, document, rJS, RSVP) {\n | ||
(function (window, rJS, RSVP) {\n | ||
"use strict";\n | ||
function createGadget(gadget) {\n | ||
var gadget_element = document.createElement("div"),\n | ||
suboptions = {},\n | ||
field_json = gadget.props.field_json;\n | ||
suboptions.value = field_json.default;\n | ||
suboptions.key = field_json.key;\n | ||
suboptions.editable = field_json.editable;\n | ||
gadget.props.element.appendChild(gadget_element);\n | ||
return new RSVP.Queue()\n | ||
\n | ||
function enqueueRender(gadget, options) {\n | ||
var loop_deferred = gadget.props.loop_defer,\n | ||
new_loop_deferred = RSVP.defer();\n | ||
\n | ||
gadget.props.loop_defer = new_loop_deferred;\n | ||
\n | ||
gadget.props.render_queue\n | ||
.push(function () {\n | ||
return gadget.declareGadget(field_json.url, {\n | ||
scope: field_json.key,\n | ||
sandbox: field_json.sandbox,\n | ||
element: gadget_element\n | ||
});\n | ||
return gadget.props.service_deferred.promise;\n | ||
})\n | ||
.push(function (field_gadget) {\n | ||
var iframe;\n | ||
gadget.props.field_gadget = field_gadget;\n | ||
if (field_json.css_class) {\n | ||
gadget_element.setAttribute("class", field_json.css_class);\n | ||
}\n | ||
if (field_json.sandbox === "iframe") {\n | ||
iframe = gadget_element.querySelector("iframe");\n | ||
iframe.style.width = "100%";\n | ||
iframe.style.height = "100%";\n | ||
}\n | ||
if (field_gadget.render !== undefined) {\n | ||
return field_gadget.render(suboptions);\n | ||
}\n | ||
return field_gadget.render(options);\n | ||
})\n | ||
.push(function () {\n | ||
return new_loop_deferred.promise;\n | ||
});\n | ||
loop_deferred.resolve();\n | ||
}\n | ||
\n | ||
rJS(window)\n | ||
.ready(function (g) {\n | ||
g.props = {};\n | ||
var loop_defer = RSVP.defer();\n | ||
g.props = {\n | ||
service_deferred: RSVP.defer(),\n | ||
first_render_deferred: RSVP.defer(),\n | ||
render_queue: new RSVP.Queue(),\n | ||
loop_defer: loop_defer\n | ||
};\n | ||
g.props.render_queue\n | ||
.push(function () {\n | ||
return loop_defer.promise;\n | ||
});\n | ||
})\n | ||
// Assign the element to a variable\n | ||
.ready(function (g) {\n | ||
... | ... | @@ -151,32 +149,58 @@ |
/////////////////////////////////////////////////////////////////\n | ||
.declareMethod("render", function (options) {\n | ||
var gadget = this;\n | ||
gadget.props.field_json = options.field_json;\n | ||
if (gadget.props.field_gadget !== undefined) {\n | ||
if (gadget.props.field_gadget.render !== undefined) {\n | ||
return gadget.props.field_gadget.render({"key" : options.field_json.key,\n | ||
"value" : options.field_json.default,\n | ||
"editable" : options.field_json.editable});\n | ||
}\n | ||
} else if (gadget.props.field_json.sandbox !== "iframe") {\n | ||
if (gadget.props.field_json.sandbox === "") {\n | ||
gadget.props.field_json.sandbox = "public";\n | ||
}\n | ||
Please
register
or
sign in
to reply
|
||
return createGadget(gadget);\n | ||
}\n | ||
})\n | ||
.declareService(function () {\n | ||
var gadget = this;\n | ||
if (gadget.props.field_gadget === undefined) {\n | ||
return createGadget(gadget);\n | ||
}\n | ||
\n | ||
enqueueRender(gadget, {\n | ||
key: options.field_json.key,\n | ||
value: options.field_json.default,\n | ||
editable: options.field_json.editable\n | ||
});\n | ||
gadget.props.first_render_deferred.resolve(options.field_json);\n | ||
})\n | ||
\n | ||
.declareMethod("getContent", function () {\n | ||
if (this.props.field_gadget.getContent) {\n | ||
return this.props.field_gadget.getContent();\n | ||
})\n | ||
\n | ||
.declareService(function () {\n | ||
// Add the field in the DOM after the first render method has been called\n | ||
var gadget = this,\n | ||
gadget_element = gadget.props.element.querySelector(\'div\'),\n | ||
field_json;\n | ||
return new RSVP.Queue()\n | ||
.push(function () {\n | ||
return gadget.props.first_render_deferred.promise;\n | ||
})\n | ||
.push(function (result) {\n | ||
field_json = result;\n | ||
return gadget.declareGadget(field_json.url, {\n | ||
scope: field_json.key,\n | ||
sandbox: field_json.sandbox,\n | ||
element: gadget_element\n | ||
});\n | ||
})\n | ||
.push(function (field_gadget) {\n | ||
var iframe;\n | ||
if (field_json.css_class) {\n | ||
gadget_element.setAttribute("class", field_json.css_class);\n | ||
}\n | ||
if (field_json.sandbox === "iframe") {\n | ||
iframe = gadget_element.querySelector("iframe");\n | ||
iframe.style.width = "100%";\n | ||
iframe.style.height = "100%";\n | ||
}\n | ||
// Trigger render methods\n | ||
gadget.props.field_gadget = field_gadget;\n | ||
gadget.props.service_deferred.resolve(field_gadget);\n | ||
});\n | ||
})\n | ||
\n | ||
\n | ||
.declareService(function () {\n | ||
// Defer render execution and check errors\n | ||
return this.props.render_queue;\n | ||
});\n | ||
}(window, document, rJS, RSVP));\n | ||
}(window, rJS, RSVP));\n | ||
</string> </value> | ||
</item> | ||
<item> | ||
... | ... | @@ -298,7 +322,7 @@ |
</item> | ||
<item> | ||
<key> <string>actor</string> </key> | ||
<value> <string>xiaowu</string> </value> | ||
<value> <string>zope</string> </value> | ||
</item> | ||
<item> | ||
<key> <string>comment</string> </key> | ||
... | ... | @@ -312,7 +336,7 @@ |
</item> | ||
<item> | ||
<key> <string>serial</string> </key> | ||
<value> <string>940.57981.32712.11997</string> </value> | ||
<value> <string>948.39131.50045.63214</string> </value> | ||
</item> | ||
<item> | ||
<key> <string>state</string> </key> | ||
... | ... | @@ -330,7 +354,7 @@ |
</tuple> | ||
<state> | ||
<tuple> | ||
<float>1423588896.63</float> | ||
<float>1453310168.81</float> | ||
<string>UTC</string> | ||
</tuple> | ||
</state> | ||
... | ... |