Commit db817eac authored by Romain Courteaud's avatar Romain Courteaud

Preference / language

parent c4e9b944
......@@ -464,6 +464,7 @@ url_template_dict = {
"search_template": "%(root_url)s/%(script_id)s?mode=search" + \
"{&query,select_list*,limit*,sort_on*,local_roles*,selection_domain*}",
"worklist_template": "%(root_url)s/%(script_id)s?mode=worklist",
"preferences_template": "%(root_url)s/%(script_id)s?mode=preferences",
# Custom search comes with Listboxes where "list_method" is specified. We pass even listbox's
# own URL so the search can resolve template fields for proper rendering/formatting/editability
# of the results (because they will be backed up with real documents).
......@@ -1608,6 +1609,13 @@ def calculateHateoas(is_portal=None, is_site_root=None, traversed_document=None,
"script_id": script.id
}
}
elif relative_url == 'portal_preferences':
result_dict['_links']['action_preferences'] = {
"href": url_template_dict['preferences_template'] % {
"root_url": site_root.absolute_url(),
"script_id": script.id
}
}
elif relative_url == 'acl_users':
logout_relative_url = site_root.getLayoutProperty("configuration_logout", default="")
if (logout_relative_url):
......@@ -2102,7 +2110,18 @@ def calculateHateoas(is_portal=None, is_site_root=None, traversed_document=None,
response.setStatus(405)
return ""
result_dict["result_list"] = [calculateHateoas(mode="traverse", **x) for x in byteify(json.loads(bulk_list))]
elif mode == 'preferences':
if REQUEST.other['method'] != "GET":
response.setStatus(405)
return ""
preference_tool = portal.portal_preferences
preference = preference_tool.getActiveUserPreference()
if preference:
result_dict["preference"] = preference.getRelativeUrl()
result_dict["preferred_user_interface_language_list"] = preference_tool.getPreference('preferred_user_interface_language_list', None)
else:
result_dict["preference"] = preference_tool.getRelativeUrl()
elif mode == 'worklist':
#################################################
# Return all worklist jio urls
......
......@@ -155,8 +155,8 @@ gadget_erp5_page_homepage.html\n
gadget_erp5_page_homepage.js\n
gadget_erp5_page_list.html\n
gadget_erp5_page_list.js\n
gadget_erp5_page_preference.html\n
gadget_erp5_page_preference.js\n
gadget_erp5_page_supportrequest_preference.html\n
gadget_erp5_page_supportrequest_preference.js\n
gadget_erp5_page_support_request_fast_view_dialog.html\n
gadget_erp5_page_support_request_fast_view_dialog.js\n
gadget_erp5_panel.png?format=png\n
......@@ -343,7 +343,7 @@ NETWORK:\n
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>962.24350.22363.64716</string> </value>
<value> <string>966.44322.37377.38894</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -361,8 +361,8 @@ NETWORK:\n
</tuple>
<state>
<tuple>
<float>1506522160.66</float>
<string>UTC</string>
<float>1523022776.2</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
<!DOCTYPE html>
<html>
<!--
data-i18n=User
data-i18n=Language
-->
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>ERP5 Support Request Page Preferences</title>
<!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script>
<!-- custom script -->
<script src="gadget_erp5_page_supportrequest_preference.js" type="text/javascript"></script>
</head>
<body>
<form class="preference">
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="erp5_form"
data-gadget-sandbox="public">
</div>
</form>
</body>
</html>
\ No newline at end of file
/*global window, rJS, RSVP */
/*jslint indent: 2, maxerr: 3 */
(function (window, rJS, RSVP) {
"use strict";
rJS(window)
/////////////////////////////////////////////////////////////////
// handle acquisition
/////////////////////////////////////////////////////////////////
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("translate", "translate")
.declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("setSetting", "setSetting")
.declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareAcquiredMethod("notifySubmitting", "notifySubmitting")
.declareAcquiredMethod("notifySubmitted", "notifySubmitted")
.declareAcquiredMethod("redirect", "redirect")
/////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
.declareMethod("render", function () {
var gadget = this,
user = "Who are you?",
header_dict = {
page_title: 'Preferences',
page_icon: 'sliders',
save_action: true
};
return gadget.getUrlFor({command: 'display'})
.push(function (front_url) {
header_dict.front_url = front_url;
return gadget.updateHeader(header_dict);
})
.push(function () {
return gadget.getDeclaredGadget("erp5_form");
})
.push(function (erp5_form) {
gadget.state.erp5_form = erp5_form;
return gadget.getSetting('me');
})
.push(function (me) {
if (me !== undefined) {
return gadget.jio_allDocs({
query: 'relative_url:"' + me + '"',
select_list: ['title']
})
.push(function (result) {
user = result.data.rows[0].value.title;
});
}
})
.push(function () {
return RSVP.all([
gadget.getSetting("language_map"),
gadget.getSetting("selected_language"),
gadget.getSetting("default_selected_language"),
gadget.translate("User"),
gadget.translate("Language")
]);
})
.push(function (results) {
var selected_language = results[1] || results[2],
key,
list_item = [],
options = JSON.parse(results[0]);
gadget.state.old_selected_lang = selected_language;
for (key in options) {
if (options.hasOwnProperty(key)) {
list_item.push([options[key], key]);
}
}
return gadget.state.erp5_form.render({
erp5_document: {"_embedded": {"_view": {
'User': {
"default": user,
"editable": 0,
"key": "field_user",
"title": results[3],
"type": "StringField"
},
'Language': {
"default": selected_language,
"editable": 1,
"items": list_item,
"key": "field_language",
"title": results[4],
"type": "ListField"
}
}},
"_links": {
"type": {
// form_list display portal_type in header
name: ""
}
}
},
form_definition: {
group_list: [[
"left",
[["User"], ["Language"]]
]]
}
});
});
})
.declareMethod('triggerSubmit', function () {
this.element.querySelector('button').click();
})
.onEvent('submit', function () {
var gadget = this,
selected_lang;
return gadget.notifySubmitting()
.push(function () {
return gadget.state.erp5_form.getContent();
})
.push(function (data) {
selected_lang = data.field_language;
return gadget.setSetting("selected_language", selected_lang);
})
.push(function () {
if (gadget.state.old_selected_lang !== selected_lang) {
return gadget.redirect({
command: 'change_language',
options: {
language: selected_lang
}
});
}
return gadget.notifySubmitted();
});
});
}(window, rJS, RSVP));
......@@ -93,7 +93,7 @@
queue
.push(function () {
return RSVP.all([
context.getUrlFor({command: 'display', options: {page: "preference"}}),
context.getUrlFor({command: 'display', options: {page: "supportrequest_preference"}}),
context.getUrlFor({command: 'display', options: {page: "logout"}}),
context.getUrlFor({command: 'display', options: {page: "search"}}),
context.getUrlFor({command: 'display', options: {jio_key: "support_request_module", page: "list"}})
......
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>962.11319.31770.36949</string> </value>
<value> <string>966.44322.37377.38894</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,8 +252,8 @@
</tuple>
<state>
<tuple>
<float>1505740406.52</float>
<string>UTC</string>
<float>1523022102.41</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
......@@ -24,6 +24,8 @@
data-i18n=Next
data-i18n=Loading
data-i18n=Fast Input
data-i18n=Language
-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />
......
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>963.11788.48702.26146</string> </value>
<value> <string>966.42886.30648.44305</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,8 +252,8 @@
</tuple>
<state>
<tuple>
<float>1517586466.87</float>
<string>UTC</string>
<float>1523261836.15</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
......@@ -39,7 +39,8 @@
possible_right_link_list = [
['edit_url', 'Editable', 'pencil'],
['view_url', 'Viewable', 'eye'],
['right_url', 'New', 'plus']
['right_url', 'New', 'plus'],
['language_url', 'Language', 'language']
],
possible_right_button_list = [
['save_action', 'Save', 'check', 'submit'],
......@@ -191,9 +192,14 @@
// Handle right link
for (i = 0; i < possible_right_link_list.length; i += 1) {
if (options.hasOwnProperty(possible_right_link_list[i][0])) {
klass = "";
if (options.extra_class &&
options.extra_class.hasOwnProperty(possible_right_link_list[i][0])) {
klass = options.extra_class[possible_right_link_list[i][0]];
} else {
klass = "";
}
if (!options[possible_right_link_list[i][0]]) {
klass = "ui-disabled";
klass += " ui-disabled";
}
state.right_link_title = possible_right_link_list[i][1];
state.right_link_icon = possible_right_link_list[i][2];
......
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>967.34935.2317.153</string> </value>
<value> <string>966.43132.8191.41489</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,8 +248,8 @@
</tuple>
<state>
<tuple>
<float>1526656854.64</float>
<string>UTC</string>
<float>1522999676.93</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
......@@ -230,7 +230,7 @@ and handling data send&receive.
.push(function () {
var jio_key = gadget.state.options.jio_key;
/*jslint regexp: true*/
if (/^[^\/]+_module\/.+$/.test(jio_key)) {
if ((/^[^\/]+_module\/.+$/.test(jio_key)) || (/^portal_.*\/.+$/.test(jio_key))) {
/*jslint regexp: false*/
return gadget.updatePanel({
erp5_document: erp5_document,
......
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>967.46234.55453.11827</string> </value>
<value> <string>966.9690.7007.38997</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,8 +248,8 @@
</tuple>
<state>
<tuple>
<float>1527598665.68</float>
<string>UTC</string>
<float>1520945628.31</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
......
<!DOCTYPE html>
<html>
<!--
data-i18n=User
-->
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>ERP5 Page Language</title>
<!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script>
<script src="handlebars.js" type="text/javascript"></script>
<script id="dialog-button-template" type="text/x-handlebars-template">
<button name="action_update" type="submit" data-i18n="Update">Update</button>
</script>
<script src="gadget_erp5_page_language.js" type="text/javascript"></script>
</head>
<body>
<form class="preference">
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="erp5_form"
data-gadget-sandbox="public">
</div>
<div class="dialog_button_container">
</div>
</form>
</body>
</html>
\ No newline at end of file
/*global window, rJS, RSVP, Handlebars */
/*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window, rJS, RSVP, Handlebars) {
"use strict";
var gadget_klass = rJS(window),
dialog_button_source = gadget_klass.__template_element
.getElementById("dialog-button-template")
.innerHTML,
dialog_button_template = Handlebars.compile(dialog_button_source);
gadget_klass
.declareAcquiredMethod("translate", "translate")
.declareAcquiredMethod("translateHtml", "translateHtml")
.declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("setSetting", "setSetting")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("notifySubmitting", "notifySubmitting")
.declareAcquiredMethod("notifySubmitted", "notifySubmitted")
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareAcquiredMethod("updateHeader", "updateHeader")
/////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
.declareMethod("render", function () {
var gadget = this,
user = "Who are you?",
header_dict = {
page_title: 'Language'
};
return gadget.getUrlFor({command: 'history_previous'})
.push(function (result) {
header_dict.front_url = result;
return RSVP.all([
gadget.updateHeader(header_dict),
gadget.getSetting('me')
]);
})
.push(function (result_list) {
var me = result_list[0];
if (me !== undefined) {
return gadget.jio_allDocs({
query: 'relative_url:"' + me + '"',
select_list: ['title']
})
.push(function (result) {
user = result.data.rows[0].value.title;
});
}
})
.push(function () {
return gadget.jio_getAttachment(
'portal_preferences',
'links'
);
})
.push(function (result) {
return RSVP.all([
gadget.getDeclaredGadget("erp5_form"),
gadget.jio_getAttachment('portal_preferences', result._links.action_preferences.href),
gadget.getSetting("language_map"),
gadget.getSetting("selected_language"),
gadget.getSetting("default_selected_language"),
gadget.translate("Language"),
gadget.translate("User")
]);
})
.push(function (result_list) {
var selected_language = result_list[3] || result_list[4],
key,
list_item = [],
options = JSON.parse(result_list[2]);
gadget.state.erp5_form = result_list[0];
gadget.state.old_selected_lang = selected_language;
for (key in options) {
if (options.hasOwnProperty(key)) {
if (!result_list[1].preferred_user_interface_language_list ||
result_list[1].preferred_user_interface_language_list.indexOf(key) !== -1) {
list_item.push([options[key], key]);
}
}
}
return gadget.state.erp5_form.render({
erp5_document: {"_embedded": {"_view": {
'User': {
"default": user,
"editable": 0,
"key": "field_user",
"title": result_list[6],
"type": "StringField"
},
'Language': {
"default": selected_language,
"editable": 1,
"items": list_item,
"key": "field_language",
"title": result_list[5],
"type": "ListField"
}
}},
"_links": {
"type": {
// form_list display portal_type in header
name: ""
}
}
},
form_definition: {
group_list: [[
"left",
[["User"], ["Language"]]
]]
}
});
})
.push(function () {
return gadget.translateHtml(dialog_button_template());
})
.push(function (result) {
gadget.element.querySelector('.dialog_button_container')
.innerHTML = result;
});
})
.onEvent('submit', function () {
var gadget = this,
selected_lang;
return gadget.notifySubmitting()
.push(function () {
return gadget.state.erp5_form.getContent();
})
.push(function (data) {
selected_lang = data.field_language;
return gadget.setSetting("selected_language", selected_lang);
})
.push(function () {
if (gadget.state.old_selected_lang !== selected_lang) {
return gadget.redirect({
command: 'change_language',
options: {
language: selected_lang
}
});
}
return gadget.notifySubmitted();
});
});
}(window, rJS, RSVP, Handlebars));
<!DOCTYPE html>
<html>
<!--
data-i18n=User
data-i18n=Language
-->
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />
......@@ -20,13 +16,5 @@
</head>
<body>
<form class="preference">
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="erp5_form"
data-gadget-sandbox="public">
</div>
</form>
</body>
</html>
\ No newline at end of file
......@@ -234,7 +234,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>955.51162.4768.35123</string> </value>
<value> <string>966.31479.61249.44083</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -252,8 +252,8 @@
</tuple>
<state>
<tuple>
<float>1482760603.42</float>
<string>UTC</string>
<float>1522246564.53</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
/*global window, rJS, RSVP */
/*jslint indent: 2, maxerr: 3 */
(function (window, rJS, RSVP) {
/*global window, rJS */
/*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window, rJS) {
"use strict";
rJS(window)
/////////////////////////////////////////////////////////////////
// handle acquisition
/////////////////////////////////////////////////////////////////
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("translate", "translate")
.declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("setSetting", "setSetting")
.declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareAcquiredMethod("notifySubmitting", "notifySubmitting")
.declareAcquiredMethod("notifySubmitted", "notifySubmitted")
.declareAcquiredMethod("redirect", "redirect")
/////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
.declareAcquiredMethod("jio_getAttachment", "jio_getAttachment")
.declareMethod("render", function () {
var gadget = this,
user = "Who are you?",
header_dict = {
page_title: 'Preferences',
page_icon: 'sliders',
save_action: true
};
return gadget.getUrlFor({command: 'display'})
.push(function (front_url) {
header_dict.front_url = front_url;
return gadget.updateHeader(header_dict);
var gadget = this;
return gadget.jio_getAttachment(
'portal_preferences',
'links'
)
.push(function (result) {
return gadget.jio_getAttachment(
'portal_preferences',
result._links.action_preferences.href
);
})
.push(function () {
return gadget.getDeclaredGadget("erp5_form");
})
.push(function (erp5_form) {
gadget.state.erp5_form = erp5_form;
return gadget.getSetting('me');
})
.push(function (me) {
if (me !== undefined) {
return gadget.jio_allDocs({
query: 'relative_url:"' + me + '"',
select_list: ['title']
})
.push(function (result) {
user = result.data.rows[0].value.title;
});
}
})
.push(function () {
return RSVP.all([
gadget.getSetting("language_map"),
gadget.getSetting("selected_language"),
gadget.getSetting("default_selected_language"),
gadget.translate("User"),
gadget.translate("Language")
]);
})
.push(function (results) {
var selected_language = results[1] || results[2],
key,
list_item = [],
options = JSON.parse(results[0]);
gadget.state.old_selected_lang = selected_language;
for (key in options) {
if (options.hasOwnProperty(key)) {
list_item.push([options[key], key]);
}
}
return gadget.state.erp5_form.render({
erp5_document: {"_embedded": {"_view": {
'User': {
"default": user,
"editable": 0,
"key": "field_user",
"title": results[3],
"type": "StringField"
},
'Language': {
"default": selected_language,
"editable": 1,
"items": list_item,
"key": "field_language",
"title": results[4],
"type": "ListField"
}
}},
"_links": {
"type": {
// form_list display portal_type in header
name: ""
}
}
},
form_definition: {
group_list: [[
"left",
[["User"], ["Language"]]
]]
}
});
});
})
.declareMethod('triggerSubmit', function () {
this.element.querySelector('button').click();
})
.onEvent('submit', function () {
var gadget = this,
selected_lang;
return gadget.notifySubmitting()
.push(function () {
return gadget.state.erp5_form.getContent();
})
.push(function (data) {
selected_lang = data.field_language;
return gadget.setSetting("selected_language", selected_lang);
})
.push(function () {
if (gadget.state.old_selected_lang !== selected_lang) {
return gadget.redirect({
command: 'change_language',
options: {
language: selected_lang
}
});
}
return gadget.notifySubmitted();
.push(function (result) {
return gadget.redirect({command: 'display', options: {jio_key: result.preference}});
});
});
}(window, rJS, RSVP));
}(window, rJS));
......@@ -99,7 +99,7 @@
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Gadget ERP5 Preference JS</string> </value>
<value> <string>Gadget ERP5 Page Preference JS</string> </value>
</item>
<item>
<key> <string>version</string> </key>
......@@ -230,7 +230,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>965.31910.8218.62941</string> </value>
<value> <string>966.44381.32112.11520</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -248,8 +248,8 @@
</tuple>
<state>
<tuple>
<float>1518599460.13</float>
<string>UTC</string>
<float>1523020654.88</float>
<string>GMT+2</string>
</tuple>
</state>
</object>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testPagePreferenceEdit</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Form View Back Link</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Test preference main link</td></tr>
</thead><tbody>
<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/#/?page=preference</td>
<td></td>
</tr>
<!-- Wait for gadget to be loaded -->
<tr>
<td>waitForTextPresent</td>
<td>Active</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/toggle_editable_mode" />
<tr>
<td>waitForElementPresent</td>
<td>//textarea[@name='field_my_description']</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>//textarea[@name='field_my_description']</td>
<td>test</td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/save" />
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='User Interface']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='User Interface']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//input[@id='field_my_preferred_html_style_developper_mode']</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>//input[@id='field_my_preferred_html_style_developper_mode']</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/save" />
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='View']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='View']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//textarea[@name='field_my_description']</td>
<td></td>
</tr>
<tr>
<td>verifyValue</td>
<td>//textarea[@name='field_my_description']</td>
<td>test</td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='User Interface']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='User Interface']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//input[@id='field_my_preferred_html_style_developper_mode']</td>
<td></td>
</tr>
<tr>
<td>assertChecked</td>
<td>//input[@id='field_my_preferred_html_style_developper_mode']</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
\ No newline at end of file
......@@ -42,7 +42,7 @@
</item>
<item>
<key> <string>id</string> </key>
<value> <string>testPagePreference</string> </value>
<value> <string>testPageLanguage</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
......
......@@ -16,7 +16,183 @@
<tr>
<td>open</td>
<td>${base_url}/web_site_module/renderjs_runner/wo/#/?page=preference</td>
<td>${base_url}/web_site_module/renderjs_runner/wo/#/?page=home</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//select[@id='field_language']</td>
<td></td>
</tr>
<!-- default has two language -->
<tr>
<td>waitForElementPresent</td>
<td>//option[@data-i18n='Wolof']</td>
<td></td>
</tr>
<tr>
<td>verifyElementPresent</td>
<td>//option[@data-i18n='English']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Preferences']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Preferences']</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>Active</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/toggle_editable_mode" />
<tr>
<td>waitForElementPresent</td>
<td>//textarea[@name='field_my_description']</td>
<td></td>
</tr>
<tr>
<td>uncheck</td>
<td>//span[@data-gadget-scope='wo']//input</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>//span[@data-gadget-scope='en']//input</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/save" />
<tr>
<td>click</td>
<td>//a[@data-i18n='Home']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//select[@id='field_language']</td>
<td></td>
</tr>
<!-- wo is disabled -->
<tr>
<td>waitForElementPresent</td>
<td>//option[@data-i18n='English']</td>
<td></td>
</tr>
<tr>
<td>verifyElementNotPresent</td>
<td>//option[@data-i18n='Wolof']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Preferences']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Preferences']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//textarea[@name='field_my_description']</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>//span[@data-gadget-scope='wo']//input</td>
<td></td>
</tr>
<tr>
<td>check</td>
<td>//span[@data-gadget-scope='en']//input</td>
<td></td>
</tr>
<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/save" />
<tr>
<td>click</td>
<td>//a[@data-i18n='Home']</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//a[@data-i18n='Language']</td>
<td></td>
</tr>
......@@ -43,7 +219,7 @@
<tr>
<td>click</td>
<td>//button[@data-i18n='Save']</td>
<td>//button[@data-i18n='Update']</td>
<td></td>
</tr>
......@@ -105,7 +281,7 @@
<tr>
<td>waitForElementPresent</td>
<td>//button[@data-i18n='Save']</td>
<td>//button[@data-i18n='Update']</td>
<td></td>
</tr>
......@@ -126,7 +302,7 @@
<tr>
<td>click</td>
<td>//button[@data-i18n='Save']</td>
<td>//button[@data-i18n='Update']</td>
<td></td>
</tr>
......
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