diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.js index 57f4a964bac067797cca63ee7ae593e92990af94..68fd7e7e606103d38899c59303769dba89c65699 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.js @@ -49,7 +49,7 @@ } - function renderEditableField(gadget, element) { + function renderEditableField(gadget, element, column_list) { var i, promise_list = [], uid_value_dict = {}, @@ -85,26 +85,27 @@ } } promise_list.push(renderSubCell(element_list[i], - gadget.props.result.data.rows[line].value[gadget.state.column_list[column][0]] || "")); + gadget.props.result.data.rows[line].value[column_list[column][0]] || "")); } return RSVP.all(promise_list); } function renderListboxTbody(gadget, template) { - var tmp; + var tmp, + column_list = JSON.parse(gadget.state.column_list_json); return gadget.translateHtml(template( { "body_value": gadget.props.body_value, "show_anchor": gadget.state.show_anchor, - "column_list": gadget.state.column_list + "column_list": column_list } )) .push(function (my_html) { tmp = document.createElement("tbody"); tmp.innerHTML = my_html; - return renderEditableField(gadget, tmp); + return renderEditableField(gadget, tmp, column_list); }) .push(function () { var table = gadget.element.querySelector("table"), @@ -204,7 +205,7 @@ queue .push(function () { // Cancel previous line rendering to not conflict with the asynchronous render for now - return gadget.renderContent(true); + return gadget.renderContent(true, {}); }) .push(function () { // XXX Fix in case of multiple listboxes @@ -220,7 +221,7 @@ editable: field_json.editable, begin_from: parseInt(result_list[0] || '0', 10) || 0, - sort_list: result_list[1] || [], + sort_list_json: JSON.stringify(result_list[1] || []), show_anchor: field_json.show_anchor, line_icon: field_json.line_icon, @@ -229,9 +230,10 @@ list_method: field_json.list_method, list_method_template: field_json.list_method_template, - column_list: field_json.column_list, - sort_column_list: sort_column_list, - search_column_list: search_column_list, + column_list_json: JSON.stringify(field_json.column_list), + + sort_column_list_json: JSON.stringify(sort_column_list), + search_column_list_json: JSON.stringify(search_column_list), hide_sort: field_json.sort_column_list.length ? "" : "ui-disabled", field_id: options.field_id, @@ -242,55 +244,72 @@ }) .push(function () { // Force line calculation in any case - return gadget.renderContent(); + return gadget.renderContent(false, { + sort_list: JSON.parse(gadget.state.sort_list_json), + column_list: field_json.column_list, + sort_column_list: sort_column_list, + search_column_list: search_column_list + }); }); return queue; }) - .onStateChange(function () { + .onStateChange(function (modification_dict) { var gadget = this, head_value = [], class_value, + sort_list, + column_list, tmp, i, j; - for (i = 0; i < gadget.state.column_list.length; i += 1) { - class_value = ""; - for (j = 0; j < gadget.state.sort_list.length; j += 1) { - tmp = gadget.state.sort_list[j]; - if (tmp[0] === gadget.state.column_list[i][0]) { - if (tmp[1] === "ascending") { - class_value = "ui-icon ui-icon-arrow-up"; - } else { - class_value = "ui-icon ui-icon-arrow-down"; + if ((modification_dict.hasOwnProperty('sort_list_json')) || + (modification_dict.hasOwnProperty('column_list_json')) || + (modification_dict.hasOwnProperty('title')) || + (modification_dict.hasOwnProperty('hide_sort')) || + (modification_dict.hasOwnProperty('hide_class'))) { + + sort_list = JSON.parse(gadget.state.sort_list_json); + column_list = JSON.parse(gadget.state.column_list_json); + + for (i = 0; i < column_list.length; i += 1) { + class_value = ""; + for (j = 0; j < sort_list.length; j += 1) { + tmp = sort_list[j]; + if (tmp[0] === column_list[i][0]) { + if (tmp[1] === "ascending") { + class_value = "ui-icon ui-icon-arrow-up"; + } else { + class_value = "ui-icon ui-icon-arrow-down"; + } + break; } - break; } + head_value.push({ + "data-i18n": column_list[i][1], + "class_value": class_value, + "text": column_list[i][1] + }); } - head_value.push({ - "data-i18n": gadget.state.column_list[i][1], - "class_value": class_value, - "text": gadget.state.column_list[i][1] - }); - } - gadget.props.head_value = head_value; - return new RSVP.Queue() - .push(function () { - return RSVP.all([ - gadget.translateHtml(listbox_template({ - hide_class: gadget.state.hide_class, - hide_sort: gadget.state.hide_sort, - title: gadget.state.title - })), - renderListboxThead(gadget, listbox_hidden_thead_template) - ]); - }) - .push(function (result_list) { - gadget.element.querySelector(".document_table").innerHTML = result_list[0]; - gadget.element.querySelector(".thead").innerHTML = result_list[1]; - }); + gadget.props.head_value = head_value; + return new RSVP.Queue() + .push(function () { + return RSVP.all([ + gadget.translateHtml(listbox_template({ + hide_class: gadget.state.hide_class, + hide_sort: gadget.state.hide_sort, + title: gadget.state.title + })), + renderListboxThead(gadget, listbox_hidden_thead_template) + ]); + }) + .push(function (result_list) { + gadget.element.querySelector(".document_table").innerHTML = result_list[0]; + gadget.element.querySelector(".thead").innerHTML = result_list[1]; + }); + } }) .declareMethod('getListboxInfo', function () { @@ -298,7 +317,7 @@ //construct search panel //hardcoded begin_from key to define search position return { - search_column_list: this.state.search_column_list, + search_column_list: JSON.parse(this.state.search_column_list_json), begin_from: this.state.key + "_begin_from" }; }) @@ -306,7 +325,7 @@ ////////////////////////////////////////////// // render the listbox in an asynchronous way ////////////////////////////////////////////// - .declareJob('renderContent', function (only_cancel) { + .declareJob('renderContent', function (only_cancel, parsed_json_options) { var gadget = this, // props = gadget.props, // field_json = props.field_json, @@ -319,7 +338,10 @@ counter, limit_options, loading_element_classList = gadget.element.querySelector(".listboxloader").classList, + tbody_classList = gadget.element.querySelector("table").querySelector("tbody").classList, loading_class_list = ['ui-icon-spinner', 'ui-btn-icon-left'], + disabled_class = 'ui-disabled', + sort_list = parsed_json_options.sort_list, i; if (only_cancel) { @@ -329,6 +351,7 @@ if (this.state.query === undefined) { gadget.element.querySelector('tfoot').textContent = "Unsupported list method: '" + this.state.list_method + "'"; + loading_element_classList.remove.apply(loading_element_classList, loading_class_list); return; } // function buildQueryString(previous, next) { @@ -345,8 +368,8 @@ } } - for (i = 0; i < this.state.column_list.length; i += 1) { - select_list.push(this.state.column_list[i][0]); + for (i = 0; i < parsed_json_options.column_list.length; i += 1) { + select_list.push(parsed_json_options.column_list[i][0]); } select_list.push("uid"); @@ -356,6 +379,7 @@ limit_options = [begin_from, lines + 1]; } loading_element_classList.add.apply(loading_element_classList, loading_class_list); + tbody_classList.add(disabled_class); return gadget.jio_allDocs({ // XXX Not jIO compatible, but until a better api is found... @@ -363,7 +387,7 @@ "query": query_string, "limit": limit_options, "select_list": select_list, - "sort_on": gadget.state.sort_list + "sort_on": sort_list }) .push(function (result) { @@ -384,7 +408,7 @@ selection_index: begin_from + i, query: query_string, list_method_template: gadget.state.list_method_template, - "sort_list:json": gadget.state.sort_list + "sort_list:json": sort_list } }) ); @@ -404,8 +428,8 @@ for (i = 0; i < counter; i += 1) { tmp_url = result_list[i + 1]; tr_value = []; - for (j = 0; j < gadget.state.column_list.length; j += 1) { - value = allDocs_result.data.rows[i].value[gadget.state.column_list[j][0]] || ""; + for (j = 0; j < parsed_json_options.column_list.length; j += 1) { + value = allDocs_result.data.rows[i].value[parsed_json_options.column_list[j][0]] || ""; tr_value.push({ "type": value.type, "editable": value.editable && gadget.state.editable, @@ -449,7 +473,7 @@ }) .push(function (url_list) { var foot = {}; - foot.colspan = gadget.state.column_list.length + gadget.state.show_anchor + + foot.colspan = parsed_json_options.column_list.length + gadget.state.show_anchor + (gadget.state.line_icon ? 1 : 0); foot.default_colspan = foot.colspan; foot.previous_classname = "ui-btn ui-icon-carat-l ui-btn-icon-left responsive ui-first-child"; @@ -474,7 +498,6 @@ return renderListboxTfoot(gadget); }) .push(function (my_html) { - loading_element_classList.remove.apply(loading_element_classList, loading_class_list); gadget.element.querySelector(".tfoot").innerHTML = my_html; }); @@ -501,6 +524,11 @@ .push(function (html) { gadget.element.querySelector(".document_table").innerHTML = html; }); + }) + .push(function (result) { + loading_element_classList.remove.apply(loading_element_classList, loading_class_list); + tbody_classList.remove(disabled_class); + return result; }); }) @@ -547,8 +575,8 @@ if (evt.target === sort_button) { evt.preventDefault(); url = "gadget_erp5_sort_editor.html"; - options.sort_column_list = gadget.state.sort_column_list; - options.sort_list = gadget.state.sort_list; + options.sort_column_list = JSON.parse(gadget.state.sort_column_list_json); + options.sort_list = JSON.parse(gadget.state.sort_list_json); options.key = gadget.state.key + "_sort_list:json"; return gadget.renderEditorPanel(url, options); } diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.xml index 15e9db3f2efeb28dc5be9b5494f6cf7408f618ef..047422e762d2bdc62023b4cbfa5bc56daabe0bd3 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_listbox_js.xml @@ -236,7 +236,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>957.57991.29866.61081</string> </value> + <value> <string>957.58432.2656.37034</string> </value> </item> <item> <key> <string>state</string> </key> @@ -254,7 +254,7 @@ </tuple> <state> <tuple> - <float>1489052755.84</float> + <float>1489079675.51</float> <string>UTC</string> </tuple> </state>