Commit 0c06ca35 authored by Boris Kocherov's avatar Boris Kocherov

erp5_json_form: version up from https://lab.nexedi.com/bk/rjs_json_form

parent 764cc652
...@@ -420,7 +420,8 @@ ...@@ -420,7 +420,8 @@
}) })
.declareAcquiredMethod("downloadJSON", "downloadJSON") .declareAcquiredMethod("downloadJSON", "downloadJSON")
.declareAcquiredMethod("notifyChange", "notifyChange") .declareAcquiredMethod("notifyChange", "notifyChange")
.allowPublicAcquisition("notifyChange", function () { .allowPublicAcquisition("rootNotifyChange", function () {
this.props.changed = true;
return this.notifyChange(); return this.notifyChange();
}) })
.declareAcquiredMethod("notifyValid", "notifyValid") .declareAcquiredMethod("notifyValid", "notifyValid")
...@@ -508,6 +509,7 @@ ...@@ -508,6 +509,7 @@
} else { } else {
error_message.appendChild(createTextNode(error.message)); error_message.appendChild(createTextNode(error.message));
} }
error_message.appendChild(document.createElement("br"));
error_message.hidden = false; error_message.hidden = false;
a = document.createElement("a"); a = document.createElement("a");
...@@ -643,6 +645,15 @@ ...@@ -643,6 +645,15 @@
// XXX Disable // XXX Disable
return; return;
}) })
.onLoop(function () {
var gadget = this;
if (this.props.changed) {
return this.checkValidity()
.push(function () {
gadget.props.changed = false;
});
}
}, 500)
.declareMethod('getContent', function () { .declareMethod('getContent', function () {
var g = this; var g = this;
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
<script src="../rsvp.js" type="text/javascript"></script> <script src="../rsvp.js" type="text/javascript"></script>
<script src="tv4.js" type="text/javascript"></script> <script src="tv4.js" type="text/javascript"></script>
<script src="../renderjs.js" type="text/javascript"></script> <script src="../renderjs.js" type="text/javascript"></script>
<script src="../jio.js" type="text/javascript"></script>
<script src="gadget_json_generated_form_child.js" type="text/javascript"></script> <script src="gadget_json_generated_form_child.js" type="text/javascript"></script>
</head> </head>
<body> <body>
......
/*jslint nomen: true, maxlen: 200, indent: 2, maxerr: 100*/ /*jslint nomen: true, maxlen: 200, indent: 2, maxerr: 100*/
/*global window, document, URL, rJS, RSVP, jIO, tv4, location */ /*global window, document, URL, rJS, RSVP, jIO, tv4, location */
(function (window, document, location, rJS, RSVP, jIO, tv4) { (function (window, document, location, rJS, RSVP, tv4) {
"use strict"; "use strict";
var render_object; var render_object;
...@@ -101,13 +101,13 @@ ...@@ -101,13 +101,13 @@
return input; return input;
} }
function render_textarea(json_field, default_value, data_format) { function render_textarea(json_document, data_format) {
var input = document.createElement("textarea"); var input = document.createElement("textarea");
if (default_value !== undefined) { if (json_document !== undefined) {
if (default_value instanceof Array) { if (typeof json_document === "object") {
input.value = default_value.join("\n"); input.value = JSON.stringify(json_document, null, 2);
} else { } else {
input.value = default_value; input.value = json_document;
} }
} }
input["data-format"] = data_format; input["data-format"] = data_format;
...@@ -273,13 +273,6 @@ ...@@ -273,13 +273,6 @@
return ret_arr[0]; return ret_arr[0];
} }
function checkValidityAndNotifyChange(g) {
return RSVP.all([
g.checkValidity(),
g.notifyChange()
]);
}
function render_schema_selector(gadget, title, schema_arr, event, rerender) { function render_schema_selector(gadget, title, schema_arr, event, rerender) {
return RSVP.Queue() return RSVP.Queue()
.push(function () { .push(function () {
...@@ -385,7 +378,7 @@ ...@@ -385,7 +378,7 @@
return event(schema_alternatives[value[scope]].value); return event(schema_alternatives[value[scope]].value);
}) })
.push(function () { .push(function () {
return checkValidityAndNotifyChange(gadget); return gadget.rootNotifyChange();
}) })
.push(function () { .push(function () {
if (rerender) { if (rerender) {
...@@ -450,7 +443,7 @@ ...@@ -450,7 +443,7 @@
} else { } else {
input.removeAttribute("style"); input.removeAttribute("style");
} }
return checkValidityAndNotifyChange(gadget); return gadget.rootNotifyChange();
}); });
}, },
rerender: function () { rerender: function () {
...@@ -681,10 +674,13 @@ ...@@ -681,10 +674,13 @@
if (!input && ["string", "integer", "number"].indexOf(type) >= 0) { if (!input && ["string", "integer", "number"].indexOf(type) >= 0) {
if (json_field.contentMediaType === "text/plain") { if (json_field.contentMediaType === "text/plain") {
input = render_textarea(json_field, default_value, "string"); input = render_textarea(default_value, "string");
} else { } else {
input = document.createElement("input"); input = document.createElement("input");
if (default_value !== undefined) { if (default_value !== undefined) {
if (typeof default_value === "object") {
default_value = JSON.stringify(default_value);
}
input.value = default_value; input.value = default_value;
} }
...@@ -1295,7 +1291,7 @@ ...@@ -1295,7 +1291,7 @@
g.props = {}; g.props = {};
g.options = {}; g.options = {};
}) })
.declareAcquiredMethod("notifyChange", "notifyChange") .declareAcquiredMethod("rootNotifyChange", "rootNotifyChange")
.declareAcquiredMethod("renameChildrenParent", "renameChildren") .declareAcquiredMethod("renameChildrenParent", "renameChildren")
.allowPublicAcquisition("renameChildren", function (opt_arr, scope) { .allowPublicAcquisition("renameChildren", function (opt_arr, scope) {
var property_name, var property_name,
...@@ -1359,7 +1355,7 @@ ...@@ -1359,7 +1355,7 @@
for (i = 0; i < button_list.length; i = i + 1) { for (i = 0; i < button_list.length; i = i + 1) {
tasks.push(button_list[i].rerender()); tasks.push(button_list[i].rerender());
} }
tasks.push(checkValidityAndNotifyChange(g)); tasks.push(g.rootNotifyChange());
return RSVP.Queue() return RSVP.Queue()
.push(function () { .push(function () {
return RSVP.all(tasks); return RSVP.all(tasks);
...@@ -1458,7 +1454,7 @@ ...@@ -1458,7 +1454,7 @@
if (event_object && opt.type === "change") { if (event_object && opt.type === "change") {
return event_object.event(); return event_object.event();
} }
return g.notifyChange(); return g.rootNotifyChange();
}) })
.declareMethod('renderForm', function (options) { .declareMethod('renderForm', function (options) {
var g = this, var g = this,
...@@ -1485,6 +1481,12 @@ ...@@ -1485,6 +1481,12 @@
options.delete_button = !options.required; options.delete_button = !options.required;
} }
} }
if (options.top && !options.type && !schema.type) {
// XXX use "object" as type for support buggy
// slapos schemas where some times type absent
// i need remove it in future
options.type = "object";
}
while (root.firstChild) { while (root.firstChild) {
root.removeChild(root.firstChild); root.removeChild(root.firstChild);
} }
...@@ -1526,18 +1528,23 @@ ...@@ -1526,18 +1528,23 @@
} }
}) })
.onEvent('change', function (evt) { .onEvent('input', function (evt) {
if (evt.target === this.props.property_name_edit) { if (evt.target === this.props.property_name_edit) {
return this.rename(this.props.property_name_edit.value, evt); return this.rename(this.props.property_name_edit.value, evt);
} }
var field_list = this.props.inputs, var gadget = this,
i; field_list = this.props.inputs,
i,
changed = false;
// on form data field // on form data field
for (i = 0; i < field_list.length; i = i + 1) { for (i = 0; i < field_list.length; i = i + 1) {
if (evt.target === field_list[i]) { if (evt.target === field_list[i]) {
return checkValidityAndNotifyChange(this); changed = true;
}
} }
if (changed) {
return gadget.rootNotifyChange();
} }
}) })
...@@ -1568,4 +1575,4 @@ ...@@ -1568,4 +1575,4 @@
}); });
}); });
}(window, document, location, rJS, RSVP, jIO, tv4)); }(window, document, location, rJS, RSVP, tv4));
\ No newline at end of file \ No newline at end of file
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