Commit 3e1c3ce2 authored by Romain Courteaud's avatar Romain Courteaud

[erp5_web_renderjs_ui] Simplify page template rendering

parent c9edbda4
......@@ -11,7 +11,6 @@
<script src="URI.js" type="text/javascript"></script>
<!-- custom script -->
<script src="gadget_global.js" type="text/javascript"></script>
<script src="gadget_erp5_global.js" type="text/javascript"></script>
<script src="gadget_erp5_pt_form_dialog.js" type="text/javascript"></script>
......@@ -24,7 +23,7 @@
<!-- XXX action, method, fieldset -->
<form class="dialog_form">
<button type="submit" data-i18n="Submit" class="ui-btn ui-btn-b ui-btn-inline
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-action ui-btn-icon-right ui-screen-hidden">Submit</button>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="erp5_form"
......
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>946.44927.40202.16725</string> </value>
<value> <string>954.5408.20833.21606</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,7 +252,7 @@
</tuple>
<state>
<tuple>
<float>1460379182.94</float>
<float>1475506475.74</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>950.30388.38115.23432</string> </value>
<value> <string>954.5593.38130.32665</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,7 +248,7 @@
</tuple>
<state>
<tuple>
<float>1460476265.13</float>
<float>1474544293.54</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -10,7 +10,6 @@
<script src="renderjs.js" type="text/javascript"></script>
<!-- custom script -->
<script src="gadget_global.js" type="text/javascript"></script>
<script src="gadget_erp5_global.js" type="text/javascript"></script>
<script src="gadget_erp5_pt_form_list.js" type="text/javascript"></script>
......@@ -19,13 +18,13 @@
<!-- XXX action, method, fieldset -->
<form class="dialog_form">
<button type="submit" data-i18n="Submit" class="ui-btn ui-btn-b ui-btn-inline
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-action ui-btn-icon-right ui-screen-hidden">Submit</button>
<div data-gadget-url="gadget_erp5_searchfield.html"
data-gadget-scope="erp5_searchfield"
data-gadget-sandbox="public"></div>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="erp5_form"
data-gadget-sandbox="public"></div>
......
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>946.44927.40202.16725</string> </value>
<value> <string>954.5635.22528.56337</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,7 +252,7 @@
</tuple>
<state>
<tuple>
<float>1460379295.13</float>
<float>1475506438.63</float>
<string>UTC</string>
</tuple>
</state>
......
/*global window, rJS, RSVP, loopEventListener, calculatePageTitle */
/*global window, rJS, RSVP, calculatePageTitle */
/*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window, rJS, RSVP, loopEventListener, calculatePageTitle) {
(function (window, rJS, RSVP, calculatePageTitle) {
"use strict";
rJS(window)
/////////////////////////////////////////////////////////////////
// ready
/////////////////////////////////////////////////////////////////
// Init local properties
.ready(function (g) {
g.props = {};
})
// Assign the element to a variable
.ready(function (g) {
return g.getElement()
.push(function (element) {
g.props.element = element;
});
})
/////////////////////////////////////////////////////////////////
// Acquired methods
/////////////////////////////////////////////////////////////////
......@@ -33,67 +17,94 @@
// declared methods
/////////////////////////////////////////////////////////////////
.declareMethod('render', function (options) {
var gadget = this,
form_options = options.erp5_form || {},
search_options = {};
var gadget = this;
return gadget.getUrlParameter('extended_search')
.push(function (extended_search) {
var state_dict = {
id: options.jio_key,
view: options.view,
editable: options.editable,
erp5_document: options.erp5_document,
form_definition: options.form_definition,
erp5_form: options.erp5_form || {},
extended_search: extended_search
};
return gadget.changeState(state_dict);
});
})
form_options.erp5_document = options.erp5_document;
form_options.form_definition = options.form_definition;
form_options.view = options.view;
.declareMethod('updateDOM', function () {
var form_gadget = this;
return new RSVP.Queue()
// render the erp5 form
return form_gadget.getDeclaredGadget("erp5_form")
.push(function (erp5_form) {
var form_options = form_gadget.state.erp5_form;
form_options.erp5_document = form_gadget.state.erp5_document;
form_options.form_definition = form_gadget.state.form_definition;
form_options.view = form_gadget.state.view;
// XXX Hardcoded for listbox's hide functionality
form_options.form_definition.hide_enabled = true;
// XXX not generic, fix later
if (form_gadget.state.extended_search) {
form_options.form_definition.extended_search = form_gadget.state.extended_search;
}
return erp5_form.render(form_options);
})
// render the search field
.push(function () {
return gadget.getUrlParameter('extended_search');
return form_gadget.getDeclaredGadget("erp5_searchfield");
})
.push(function (extended_search) {
.push(function (search_gadget) {
var search_options = {};
// XXX not generic, fix later
if (extended_search) {
form_options.form_definition.extended_search = extended_search;
search_options.extended_search = extended_search;
if (form_gadget.state.extended_search) {
search_options.extended_search = form_gadget.state.extended_search;
}
// XXX Hardcoded for listbox's hide functionality
form_options.form_definition.hide_enabled = true;
var new_content_action = options.erp5_document._links.action_object_new_content_action;
return search_gadget.render(search_options);
})
// render the header
.push(function () {
var new_content_action = form_gadget.state.erp5_document._links.action_object_new_content_action;
if (new_content_action !== undefined) {
new_content_action = gadget.getUrlFor({command: 'change', options: {view: new_content_action.href, editable: true}});
new_content_action = form_gadget.getUrlFor({command: 'change', options: {view: new_content_action.href, editable: true}});
} else {
new_content_action = "";
}
return RSVP.all([
gadget.getDeclaredGadget("erp5_searchfield"),
gadget.getDeclaredGadget("erp5_form"),
new_content_action,
gadget.getUrlFor({command: 'change', options: {page: "action"}}),
gadget.getUrlFor({command: 'display', options: {}}),
calculatePageTitle(gadget, options.erp5_document)
form_gadget.getUrlFor({command: 'change', options: {page: "action"}}),
form_gadget.getUrlFor({command: 'display', options: {}}),
calculatePageTitle(form_gadget, form_gadget.state.erp5_document)
]);
})
.push(function (all_gadget) {
return RSVP.all([
all_gadget[0].render(search_options),
all_gadget[1].render(form_options),
gadget.updateHeader({
panel_action: true,
jump_url: "",
cut_url: "",
add_url: all_gadget[2],
actions_url: all_gadget[3],
export_url: "",
page_title: all_gadget[5],
front_url: all_gadget[4],
filter_action: true
})
]);
return form_gadget.updateHeader({
panel_action: true,
jump_url: "",
cut_url: "",
add_url: all_gadget[0],
actions_url: all_gadget[1],
export_url: "",
page_title: all_gadget[3],
front_url: all_gadget[2],
filter_action: true
});
});
})
.declareMethod('triggerSubmit', function () {
var gadget = this,
extended_search = '',
options = {};
extended_search = '';
return gadget.getDeclaredGadget("erp5_searchfield")
.push(function (search_gadget) {
return search_gadget.getContent();
......@@ -107,43 +118,36 @@
return form_gadget.getListboxInfo();
})
.push(function (result) {
var url = "gadget_erp5_search_editor.html";
options.extended_search = extended_search;
options.begin_from = result.begin_from;
options.search_column_list = result.search_column_list;
return gadget.renderEditorPanel(url, options);
return gadget.renderEditorPanel("gadget_erp5_search_editor.html", {
extended_search: extended_search,
begin_from: result.begin_from,
search_column_list: result.search_column_list
});
});
})
.declareService(function () {
.onEvent('submit', function () {
var gadget = this;
function formSubmit() {
return gadget.getDeclaredGadget("erp5_searchfield")
.push(function (search_gadget) {
return search_gadget.getContent();
})
.push(function (data) {
var options = {
begin_from: undefined,
// XXX Hardcoded
field_listbox_begin_from: undefined
};
if (data.search) {
options.extended_search = data.search;
} else {
options.extended_search = undefined;
}
return gadget.redirect({command: 'store_and_change', options: options});
});
}
// Listen to form submit
return loopEventListener(
gadget.props.element.querySelector('form'),
'submit',
false,
formSubmit
);
});
}(window, rJS, RSVP, loopEventListener, calculatePageTitle));
\ No newline at end of file
return gadget.getDeclaredGadget("erp5_searchfield")
.push(function (search_gadget) {
return search_gadget.getContent();
})
.push(function (data) {
var options = {
begin_from: undefined,
// XXX Hardcoded
field_listbox_begin_from: undefined
};
if (data.search) {
options.extended_search = data.search;
} else {
options.extended_search = undefined;
}
return gadget.redirect({command: 'store_and_change', options: options});
});
}, false, true);
}(window, rJS, RSVP, calculatePageTitle));
\ No newline at end of file
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>950.28943.57832.60535</string> </value>
<value> <string>954.5675.50023.58965</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,7 +248,7 @@
</tuple>
<state>
<tuple>
<float>1460389440.4</float>
<float>1474549231.17</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -8,10 +8,8 @@
<!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script>
<script src="URI.js" type="text/javascript"></script>
<!-- custom script -->
<script src="gadget_global.js" type="text/javascript"></script>
<script src="gadget_erp5_global.js" type="text/javascript"></script>
<script src="gadget_erp5_pt_form_view_editable.js" type="text/javascript"></script>
......
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>946.44927.40202.16725</string> </value>
<value> <string>952.64761.25287.18397</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,7 +252,7 @@
</tuple>
<state>
<tuple>
<float>1460379409.72</float>
<float>1475506409.12</float>
<string>UTC</string>
</tuple>
</state>
......
/*global window, rJS, RSVP, loopEventListener, document, calculatePageTitle */
/*global window, rJS, RSVP, calculatePageTitle */
/*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window, rJS, RSVP, loopEventListener, calculatePageTitle) {
(function (window, rJS, RSVP, calculatePageTitle) {
"use strict";
rJS(window)
/////////////////////////////////////////////////////////////////
// ready
/////////////////////////////////////////////////////////////////
// Init local properties
.ready(function (g) {
g.props = {};
})
// Assign the element to a variable
.ready(function (g) {
return g.getElement()
.push(function (element) {
g.props.element = element;
});
})
.declareAcquiredMethod("jio_putAttachment", "jio_putAttachment")
.declareAcquiredMethod("translateHtml", "translateHtml")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod("updateHeader", "updateHeader")
......@@ -35,135 +19,129 @@
// declared methods
/////////////////////////////////////////////////////////////////
.declareMethod('triggerSubmit', function () {
this.props.element.querySelector('button').click();
this.element.querySelector('button').click();
})
.declareMethod('render', function (options) {
var erp5_document = options.erp5_document,
form_gadget = this,
action_dict = erp5_document._embedded._view._actions;
form_gadget.props.id = options.jio_key;
form_gadget.props.view = options.view;
form_gadget.props.form_id = erp5_document._embedded._view.form_id;
.declareMethod('render', function (options) {
var state_dict = {
id: options.jio_key,
view: options.view,
editable: options.editable,
erp5_document: options.erp5_document,
form_definition: options.form_definition,
erp5_form: options.erp5_form || {}
};
return this.changeState(state_dict);
})
if (action_dict !== undefined) {
form_gadget.props.action = erp5_document._embedded._view._actions.put;
}
.declareMethod('updateDOM', function () {
var form_gadget = this;
// render the erp5 form
return form_gadget.getDeclaredGadget("erp5_form")
.push(function (erp5_form) {
var form_options = options.erp5_form || {},
new_content_action,
delete_action;
var form_options = form_gadget.state.erp5_form;
form_options.erp5_document = options.erp5_document;
form_options.form_definition = options.form_definition;
form_options.view = options.view;
form_options.erp5_document = form_gadget.state.erp5_document;
form_options.form_definition = form_gadget.state.form_definition;
form_options.view = form_gadget.state.view;
return erp5_form.render(form_options);
})
// render the header
.push(function () {
var new_content_action = form_gadget.state.erp5_document._links.action_object_new_content_action,
delete_action = form_gadget.state.erp5_document._links.action_object_delete_action,
save_action = false;
if (form_gadget.state.erp5_document._embedded._view._actions !== undefined) {
if (form_gadget.state.erp5_document._embedded._view._actions.put !== undefined) {
save_action = true;
}
}
new_content_action = options.erp5_document._links.action_object_new_content_action;
if (new_content_action !== undefined) {
new_content_action = form_gadget.getUrlFor({command: 'change', options: {view: new_content_action.href, editable: true}});
} else {
new_content_action = "";
}
delete_action = options.erp5_document._links.action_object_delete_action;
if (delete_action !== undefined) {
delete_action = form_gadget.getUrlFor({command: 'change', options: {view: delete_action.href, editable: undefined}});
} else {
delete_action = "";
}
return RSVP.all([
erp5_form.render(form_options),
form_gadget.getUrlFor({command: 'change', options: {page: "tab"}}),
form_gadget.getUrlFor({command: 'change', options: {page: "action", editable: true}}),
new_content_action,
form_gadget.getUrlFor({command: 'history_previous'}),
delete_action,
calculatePageTitle(form_gadget, options.erp5_document)
save_action,
calculatePageTitle(form_gadget, form_gadget.state.erp5_document)
]);
})
.push(function (all_result) {
var header_dict = {
tab_url: all_result[1],
actions_url: all_result[2],
add_url: all_result[3],
selection_url: all_result[4],
delete_url: all_result[5],
return form_gadget.updateHeader({
tab_url: all_result[0],
actions_url: all_result[1],
add_url: all_result[2],
selection_url: all_result[3],
delete_url: all_result[4],
cut_url: "",
page_title: all_result[6]
};
if (form_gadget.props.action !== undefined) {
header_dict.save_action = true;
}
return form_gadget.updateHeader(header_dict);
page_title: all_result[6],
save_action: all_result[5]
});
});
})
.onEvent('submit', function () {
var form_gadget = this,
erp5_form,
form_id = this.state.erp5_document._embedded._view.form_id,
action = form_gadget.state.erp5_document._embedded._view._actions.put;
.declareService(function () {
////////////////////////////////////
// Form submit listening
////////////////////////////////////
var form_gadget = this;
return form_gadget.getDeclaredGadget("erp5_form")
.push(function (gadget) {
erp5_form = gadget;
return erp5_form.checkValidity();
})
.push(function (validity) {
if (validity) {
return erp5_form.getContent()
.push(function (data) {
data[form_id.key] = form_id['default'];
return RSVP.all([
form_gadget.notifySubmitting(),
form_gadget.jio_putAttachment(
form_gadget.state.id,
action.href,
data
)
]);
})
.push(form_gadget.notifySubmitted.bind(form_gadget))
.push(function () {
return form_gadget.redirect({command: 'reload'});
})
.push(undefined, function (error) {
if ((error.target !== undefined) && (error.target.status === 400)) {
return form_gadget.notifySubmitted()
.push(function () {
return form_gadget.notifyChange();
})
.push(function () {
return form_gadget.displayFormulatorValidationError(JSON.parse(error.target.responseText));
});
}
throw error;
});
}
});
function formSubmit() {
var erp5_form;
if (form_gadget.props.action === undefined) {
// If not action is defined on form, do nothing
return;
}
return form_gadget.getDeclaredGadget("erp5_form")
.push(function (gadget) {
erp5_form = gadget;
return erp5_form.checkValidity();
})
.push(function (validity) {
if (validity) {
return erp5_form.getContent()
.push(function (data) {
data[form_gadget.props.form_id.key] =
form_gadget.props.form_id['default'];
return RSVP.all([
form_gadget.notifySubmitting(),
form_gadget.jio_putAttachment(
form_gadget.props.id,
form_gadget.props.action.href,
data
)
]);
})
.push(form_gadget.notifySubmitted.bind(form_gadget))
.push(function () {
return form_gadget.redirect({command: 'reload'});
})
.push(undefined, function (error) {
if ((error.target !== undefined) && (error.target.status === 400)) {
return form_gadget.notifySubmitted()
.push(function () {
return form_gadget.notifyChange();
})
.push(function () {
return form_gadget.displayFormulatorValidationError(JSON.parse(error.target.responseText));
});
}
throw error;
});
}
});
}
// Listen to form submit
return loopEventListener(
form_gadget.props.element.querySelector('form'),
'submit',
false,
formSubmit
);
});
}(window, rJS, RSVP, loopEventListener, calculatePageTitle));
\ No newline at end of file
}, false, true);
}(window, rJS, RSVP, calculatePageTitle));
\ No newline at end of file
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>950.28778.40365.28040</string> </value>
<value> <string>954.5631.5200.57036</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,7 +248,7 @@
</tuple>
<state>
<tuple>
<float>1460380770.14</float>
<float>1474549439.64</float>
<string>UTC</string>
</tuple>
</state>
......