From c6b8b5388b3944d65c4df513fc6230a080f4a6f0 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Sat, 26 Dec 2020 01:45:47 +0100
Subject: [PATCH] Give out nice error instead of failing horribly in
 domPassage.render()

---
 src/004-base/domPassage.js | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/004-base/domPassage.js b/src/004-base/domPassage.js
index 31887f0129b..e051f45dd27 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;
+		}
 	}
 };
-- 
GitLab