diff --git a/src/004-base/domPassage.js b/src/004-base/domPassage.js index 31887f0129b10160e43bd262a3ce7f3edbb46769..e051f45dd2766e3eea75262f6bf112a4f8117782 100644 --- a/src/004-base/domPassage.js +++ b/src/004-base/domPassage.js @@ -21,6 +21,25 @@ App.DomPassage = class extends Passage { * @returns {Node} */ render() { - return this.callback(); + // In case the callback fails give out a nice error message instead of breaking completely. + try { + return this.callback(); + } catch (ex) { + const fragment = document.createDocumentFragment(); + + App.UI.DOM.appendNewElement("p", fragment, `${ex.name}: ${ex.message}`, ["bold", "error"]); + + const p = document.createElement("p"); + const lines = ex.stack.split("\n"); + for (const ll of lines) { + const div = document.createElement("div"); + // remove file path from error message + div.append(ll.replace(/file:.*\//, "<path>/")); + p.append(div); + } + fragment.append(p); + + return fragment; + } } };