summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-05-28 18:57:43 +0200
committerJo-Philipp Wich <jo@mein.io>2019-07-07 15:36:25 +0200
commit8a6b89c671f864cb3033287211e4438b16ea5eb7 (patch)
tree85911b63c3c1add9ce467ea011c64ca87d2b0884 /modules/luci-base
parentf302eabd728a02c62b96ec12295201b658313698 (diff)
luci-base: luci.js: rework L.error()
Factor out an L.raise() function out of L.error() which constructs and throws an exception object. Rework the remaining L.error() function to internally use L.raise() to construct exceptionts to render. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base')
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/luci.js52
1 files changed, 30 insertions, 22 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js
index 24af80f692..6332790c77 100644
--- a/modules/luci-base/htdocs/luci-static/resources/luci.js
+++ b/modules/luci-base/htdocs/luci-static/resources/luci.js
@@ -591,7 +591,7 @@
window.cbi_init = function() {};
},
- error: function(type, fmt /*, ...*/) {
+ raise: function(type, fmt /*, ...*/) {
var e = null,
msg = fmt ? String.prototype.format.apply(fmt, this.varargs(arguments, 2)) : null,
stack = null;
@@ -606,36 +606,44 @@
else {
e = new (window[type || 'Error'] || Error)(msg || 'Unspecified error');
e.name = type || 'Error';
+ }
- try { throw new Error('stacktrace') }
- catch (e2) { stack = (e2.stack || '').split(/\n/) }
+ if (window.console && console.debug)
+ console.debug(e);
- /* IE puts the exception message into the first line */
- if (stack[0] == 'Error: stacktrace')
- stack.shift();
+ throw e;
+ },
- /* Pop L.error() invocation from stack */
- stack.shift();
+ error: function(type, fmt /*, ...*/) {
+ try {
+ L.raise.apply(L, Array.prototype.slice.call(arguments));
}
+ catch (e) {
+ var stack = (e.stack || '').split(/\n/).map(function(frame) {
+ frame = frame.replace(/(.*?)@(.+):(\d+):(\d+)/g, 'at $1 ($2:$3:$4)').trim();
+ return frame ? ' ' + frame : '';
+ });
- /* Append shortened & beautified stacktrace to message */
- var trace = stack.join('\n')
- .replace(/(.*?)@(.+):(\d+):(\d+)/g, ' at $1 ($2:$3:$4)');
+ if (!/^ at /.test(stack[0]))
+ stack.shift();
- if (e.message.indexOf(trace) == -1)
- e.message += '\n' + trace;
+ if (/\braise /.test(stack[0]))
+ stack.shift();
- if (window.console && console.debug)
- console.debug(e);
+ if (/\berror /.test(stack[0]))
+ stack.shift();
- if (this.ui)
- this.ui.showModal(_('Runtime error'),
- E('pre', { 'class': 'alert-message error' }, e));
- else
- L.dom.content(document.querySelector('#maincontent'),
- E('pre', { 'class': 'alert-message error' }, e));
+ stack = stack.length ? '\n' + stack.join('\n') : '';
- throw e;
+ if (L.ui)
+ L.ui.showModal(e.name || _('Runtime error'),
+ E('pre', { 'class': 'alert-message error' }, e.message + stack));
+ else
+ L.dom.content(document.querySelector('#maincontent'),
+ E('pre', { 'class': 'alert-message error' }, e + stack));
+
+ throw e;
+ }
},
bind: function(fn, self /*, ... */) {