diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-05-28 18:57:43 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-07-07 15:36:25 +0200 |
commit | 8a6b89c671f864cb3033287211e4438b16ea5eb7 (patch) | |
tree | 85911b63c3c1add9ce467ea011c64ca87d2b0884 /modules/luci-base | |
parent | f302eabd728a02c62b96ec12295201b658313698 (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.js | 52 |
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 /*, ... */) { |