Commit c496ff02 authored by Xiaowu Zhang's avatar Xiaowu Zhang

erp5_web_renderjs_ui: don't crash interface for failing query

parent d9259433
...@@ -1121,6 +1121,10 @@ html table thead th[colspan] {\n ...@@ -1121,6 +1121,10 @@ html table thead th[colspan] {\n
text-align: center;\n text-align: center;\n
}\n }\n
\n \n
html .ui-listbox-error {\n
text-align: center;\n
}\n
\n
/* cell background */\n /* cell background */\n
html table thead tr,\n html table thead tr,\n
html table tfoot tr,\n html table tfoot tr,\n
...@@ -5215,7 +5219,7 @@ html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after {\n ...@@ -5215,7 +5219,7 @@ html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after {\n
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>948.40163.31953.33774</string> </value> <value> <string>949.1052.3508.62634</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -5233,7 +5237,7 @@ html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after {\n ...@@ -5233,7 +5237,7 @@ html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after {\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1453373898.88</float> <float>1454957135.51</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -253,7 +253,18 @@ ...@@ -253,7 +253,18 @@
</table>\n </table>\n
</div>\n </div>\n
</script>\n </script>\n
\n \n
\n
\n
<script id="error-message-template" type="text/x-handlebars-template">\n
<div class="ui-listbox-error">\n
\t\t <a class="ui-btn ui-corner-all ui-btn-inline" href="{{reset_url}}">\n
\t\t <span style="color:red" data-i18n="Invalid Search Criteria">Invalid Search Criteria</span>\n
\t\t <span>-</span>\n
<span data-i18n="Reset">Reset</span>\n
</a>\n
</div>\n
</script>\n
\n \n
</head>\n </head>\n
<body>\n <body>\n
...@@ -397,7 +408,7 @@ ...@@ -397,7 +408,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>948.8903.55441.44066</string> </value> <value> <string>949.1053.41653.819</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -415,7 +426,7 @@ ...@@ -415,7 +426,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1451495552.88</float> <float>1454957159.48</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -109,9 +109,9 @@ ...@@ -109,9 +109,9 @@
/*jslint indent: 2, maxerr: 3, nomen: true */\n /*jslint indent: 2, maxerr: 3, nomen: true */\n
/*global window, document, rJS, URI, RSVP, loopEventListener,\n /*global window, document, rJS, URI, RSVP, loopEventListener,\n
SimpleQuery, ComplexQuery, Query, Handlebars*/\n SimpleQuery, ComplexQuery, Query, Handlebars, console*/\n
(function (window, document, rJS, URI, RSVP, loopEventListener,\n (function (window, document, rJS, URI, RSVP, loopEventListener,\n
SimpleQuery, ComplexQuery, Query, Handlebars) {\n SimpleQuery, ComplexQuery, Query, Handlebars, console) {\n
"use strict";\n "use strict";\n
var gadget_klass = rJS(window),\n var gadget_klass = rJS(window),\n
listbox_hidden_thead_source = gadget_klass.__template_element\n listbox_hidden_thead_source = gadget_klass.__template_element\n
...@@ -140,7 +140,12 @@ ...@@ -140,7 +140,12 @@
listbox_source = gadget_klass.__template_element\n listbox_source = gadget_klass.__template_element\n
.getElementById("listbox-template")\n .getElementById("listbox-template")\n
.innerHTML,\n .innerHTML,\n
listbox_template = Handlebars.compile(listbox_source);\n listbox_template = Handlebars.compile(listbox_source),\n
\n
error_message_source = gadget_klass.__template_element\n
.getElementById("error-message-template")\n
.innerHTML,\n
error_message_template = Handlebars.compile(error_message_source);\n
\n \n
\n \n
function renderListboxThead(gadget, template) {\n function renderListboxThead(gadget, template) {\n
...@@ -248,6 +253,22 @@ ...@@ -248,6 +253,22 @@
));\n ));\n
}\n }\n
\n \n
\n
function renderErrorMessage(gadget) {\n
return gadget.getUrlFor({\n
command: \'store_and_change\',\n
options: {\n
"extended_search": ""\n
}\n
})\n
.push(function (url) {\n
return gadget.translateHtml(error_message_template(\n
{\n
\'reset_url\' : url\n
}\n
));\n
});\n
}\n
\n \n
rJS(window)\n rJS(window)\n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
...@@ -388,6 +409,7 @@ ...@@ -388,6 +409,7 @@
select_list = [],\n select_list = [],\n
dataset,\n dataset,\n
counter,\n counter,\n
queue,\n
i;\n i;\n
\n \n
if (field_json.query === undefined) {\n if (field_json.query === undefined) {\n
...@@ -411,109 +433,122 @@ ...@@ -411,109 +433,122 @@
select_list.push(field_json.column_list[i][0]);\n select_list.push(field_json.column_list[i][0]);\n
}\n }\n
select_list.push("uid");\n select_list.push("uid");\n
return gadget.jio_allDocs({\n queue = gadget.jio_allDocs({\n
// XXX Not jIO compatible, but until a better api is found...\n // XXX Not jIO compatible, but until a better api is found...\n
"list_method_template": field_json.list_method_template,\n "list_method_template": field_json.list_method_template,\n
"query": query_string,\n "query": query_string,\n
"limit": [begin_from, lines + 1],\n "limit": [begin_from, lines + 1],\n
"select_list": select_list,\n "select_list": select_list,\n
"sort_on": gadget.props.sort_list\n "sort_on": gadget.props.sort_list\n
}).push(function (result) {\n });\n
var promise_list = [result];\n queue\n
counter = Math.min(result.data.total_rows, lines);\n .push(undefined, function (error) {\n
for (i = 0; i < counter; i += 1) {\n //XXXXX hack to not crash interface\n
promise_list.push(\n //this will catch all error, not only search criteria invalid error\n
gadget.getUrlFor({\n console.warn(error);\n
command: \'index\',\n return renderErrorMessage(gadget)\n
options: {\n .push(function (error_html) {\n
jio_key: result.data.rows[i].id,\n gadget.props.element.querySelector(".document_table").innerHTML = error_html;\n
selection_index: begin_from + i,\n queue.cancel();\n
query: query_string,\n
list_method_template: field_json.list_method_template,\n
"sort_list:json": gadget.props.sort_list\n
}\n
})\n
);\n
}\n
return RSVP.all(promise_list);\n
\n
}).push(function (result_list) {\n
var j,\n
result = result_list[0],\n
value,\n
body_value = [],\n
tr_value = [],\n
tmp_url;\n
dataset = result;\n
for (i = 0; i < counter; i += 1) {\n
tmp_url = result_list[i + 1];\n
tr_value = [];\n
for (j = 0; j < field_json.column_list.length; j += 1) {\n
value = result.data.rows[i].value[field_json.column_list[j][0]] || "";\n
tr_value.push({\n
"type": value.type,\n
"editable": value.editable,\n
"href": tmp_url,\n
"text": value,\n
"line": i,\n
"column": j\n
});\n });\n
})\n
.push(function (result) {\n
var promise_list = [result];\n
counter = Math.min(result.data.total_rows, lines);\n
for (i = 0; i < counter; i += 1) {\n
promise_list.push(\n
gadget.getUrlFor({\n
command: \'index\',\n
options: {\n
jio_key: result.data.rows[i].id,\n
selection_index: begin_from + i,\n
query: query_string,\n
list_method_template: field_json.list_method_template,\n
"sort_list:json": gadget.props.sort_list\n
}\n
})\n
);\n
}\n }\n
body_value.push({\n return RSVP.all(promise_list);\n
"value": result.data.rows[i].value.uid,\n \n
"tr_value": tr_value\n }).push(function (result_list) {\n
});\n var j,\n
}\n result = result_list[0],\n
gadget.props.body_value = body_value;\n value,\n
gadget.props.result = result;\n body_value = [],\n
return renderListboxTbody(gadget);\n tr_value = [],\n
}).push(function () {\n tmp_url;\n
var prev_param = {},\n dataset = result;\n
next_param = {};\n for (i = 0; i < counter; i += 1) {\n
function setNext() {\n tmp_url = result_list[i + 1];\n
if (dataset.data.rows.length > lines) {\n tr_value = [];\n
next_param[gadget.props.field_json.key + \'_begin_from\'] = begin_from + lines;\n for (j = 0; j < field_json.column_list.length; j += 1) {\n
value = result.data.rows[i].value[field_json.column_list[j][0]] || "";\n
tr_value.push({\n
"type": value.type,\n
"editable": value.editable,\n
"href": tmp_url,\n
"text": value,\n
"line": i,\n
"column": j\n
});\n
}\n
body_value.push({\n
"value": result.data.rows[i].value.uid,\n
"tr_value": tr_value\n
});\n
}\n
gadget.props.body_value = body_value;\n
gadget.props.result = result;\n
return renderListboxTbody(gadget);\n
}).push(function () {\n
var prev_param = {},\n
next_param = {};\n
function setNext() {\n
if (dataset.data.rows.length > lines) {\n
next_param[gadget.props.field_json.key + \'_begin_from\'] = begin_from + lines;\n
}\n
}\n }\n
}\n
\n \n
if (begin_from === 0) {\n if (begin_from === 0) {\n
setNext();\n setNext();\n
} else {\n } else {\n
prev_param[gadget.props.field_json.key + \'_begin_from\'] = begin_from - lines;\n prev_param[gadget.props.field_json.key + \'_begin_from\'] = begin_from - lines;\n
setNext();\n setNext();\n
}\n }\n
return RSVP.all([\n return RSVP.all([\n
gadget.getUrlFor({command: \'change\', options: prev_param}),\n gadget.getUrlFor({command: \'change\', options: prev_param}),\n
gadget.getUrlFor({command: \'change\', options: next_param})\n gadget.getUrlFor({command: \'change\', options: next_param})\n
]);\n ]);\n
\n
}).push(function (url_list) {\n
var foot = {};\n
foot.colspan = field_json.column_list.length;\n
foot.default_colspan = foot.colspan;\n
foot.previous_classname = "ui-btn ui-icon-carat-l ui-btn-icon-left responsive ui-first-child";\n
foot.previous_url = url_list[0];\n
foot.next_classname = "ui-btn ui-icon-carat-r ui-btn-icon-right responsive ui-last-child";\n
foot.next_url = url_list[1];\n
if ((begin_from === 0) && (counter === 0)) {\n
foot.record = "No records";\n
} else if ((dataset.data.rows.length <= lines) && (begin_from === 0)) {\n
foot.record = counter + " Records";\n
} else {\n
foot.record = "Records " + (((begin_from + lines) / lines - 1) * lines + 1) + " - " + (((begin_from + lines) / lines - 1) * lines + counter);\n
}\n
\n \n
if (begin_from === 0) {\n }).push(function (url_list) {\n
foot.previous_classname += " ui-disabled";\n var foot = {};\n
}\n foot.colspan = field_json.column_list.length;\n
if (dataset.data.rows.length <= lines) {\n foot.default_colspan = foot.colspan;\n
foot.next_classname += " ui-disabled";\n foot.previous_classname = "ui-btn ui-icon-carat-l ui-btn-icon-left responsive ui-first-child";\n
}\n foot.previous_url = url_list[0];\n
gadget.props.foot = foot;\n foot.next_classname = "ui-btn ui-icon-carat-r ui-btn-icon-right responsive ui-last-child";\n
return renderListboxTfoot(gadget);\n foot.next_url = url_list[1];\n
}).push(function (my_html) {\n if ((begin_from === 0) && (counter === 0)) {\n
gadget.props.element.querySelector(".tfoot").innerHTML = my_html;\n foot.record = "No records";\n
});\n } else if ((dataset.data.rows.length <= lines) && (begin_from === 0)) {\n
foot.record = counter + " Records";\n
} else {\n
foot.record = "Records " + (((begin_from + lines) / lines - 1) * lines + 1) + " - " + (((begin_from + lines) / lines - 1) * lines + counter);\n
}\n
\n
if (begin_from === 0) {\n
foot.previous_classname += " ui-disabled";\n
}\n
if (dataset.data.rows.length <= lines) {\n
foot.next_classname += " ui-disabled";\n
}\n
gadget.props.foot = foot;\n
return renderListboxTfoot(gadget);\n
}).push(function (my_html) {\n
gadget.props.element.querySelector(".tfoot").innerHTML = my_html;\n
});\n
return queue;\n
})\n })\n
\n \n
\n \n
...@@ -657,7 +692,7 @@ ...@@ -657,7 +692,7 @@
});\n });\n
\n \n
}(window, document, rJS, URI, RSVP, loopEventListener,\n }(window, document, rJS, URI, RSVP, loopEventListener,\n
SimpleQuery, ComplexQuery, Query, Handlebars)); SimpleQuery, ComplexQuery, Query, Handlebars, console));
]]></string> </value> ]]></string> </value>
</item> </item>
...@@ -794,7 +829,7 @@ ...@@ -794,7 +829,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>948.8931.54995.63897</string> </value> <value> <string>949.2121.3637.17544</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -812,7 +847,7 @@ ...@@ -812,7 +847,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1451497439.76</float> <float>1455022186.29</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -103,9 +103,9 @@ ...@@ -103,9 +103,9 @@
/*jslint indent: 2, maxerr: 3, maxlen: 100, nomen: true */\n /*jslint indent: 2, maxerr: 3, maxlen: 100, nomen: true */\n
/*global window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n /*global window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n
QueryFactory, SimpleQuery, ComplexQuery, Query*/\n QueryFactory, SimpleQuery, ComplexQuery, Query, console*/\n
(function (window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n (function (window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n
QueryFactory, SimpleQuery, ComplexQuery, Query) {\n QueryFactory, SimpleQuery, ComplexQuery, Query, console) {\n
"use strict";\n "use strict";\n
var gadget_klass = rJS(window),\n var gadget_klass = rJS(window),\n
filter_item_source = gadget_klass.__template_element\n filter_item_source = gadget_klass.__template_element\n
...@@ -319,7 +319,14 @@ ...@@ -319,7 +319,14 @@
query_list;\n query_list;\n
if (gadget.props.extended_search) {\n if (gadget.props.extended_search) {\n
//string to query\n //string to query\n
query_list = QueryFactory.create(gadget.props.extended_search);\n try {\n
query_list = QueryFactory.create(gadget.props.extended_search);\n
} catch (error) {\n
//XXXX hack to not crash interface\n
//it catch all error, not only search criteria invalid error\n
console.warn(error);\n
return;\n
}\n
if (query_list.operator === "OR") {\n if (query_list.operator === "OR") {\n
or.checked = true;\n or.checked = true;\n
and.checked = false;\n and.checked = false;\n
...@@ -476,7 +483,7 @@ ...@@ -476,7 +483,7 @@
});\n });\n
\n \n
}(window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n }(window, document, rJS, RSVP, Handlebars, $, loopEventListener,\n
QueryFactory, SimpleQuery, ComplexQuery, Query)); QueryFactory, SimpleQuery, ComplexQuery, Query, console));
]]></string> </value> ]]></string> </value>
</item> </item>
...@@ -613,7 +620,7 @@ ...@@ -613,7 +620,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>947.29484.5127.28433</string> </value> <value> <string>949.2121.59518.17646</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -631,7 +638,7 @@ ...@@ -631,7 +638,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1448903443.33</float> <float>1455022145.56</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
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