[REM] tools: remove error handling in playground

There was some code to attempt to display the error in the right
pane, whenever it occured in the app early phase.

However, it made it much harder to properly handle all cases. It could
silently swallow some errors (if more than one was done), And it was
not behaving the same way in Firefox and in Chrome.
This commit is contained in:
Géry Debongnie
2019-11-11 08:32:41 +01:00
committed by aab-odoo
parent c5a80497ac
commit b891ae7de4
3 changed files with 5 additions and 60 deletions
+5 -43
View File
@@ -70,13 +70,9 @@ if __name__ == "__main__":
/** /**
* Make an iframe, with all the js, css and xml properly injected. * Make an iframe, with all the js, css and xml properly injected.
*/ */
function makeCodeIframe(js, css, xml, errorHandler) { function makeCodeIframe(js, css, xml) {
// check templates
var qweb = new owl.QWeb();
const sanitizedXML = xml.replace(/<!--[\s\S]*?-->/g, ""); const sanitizedXML = xml.replace(/<!--[\s\S]*?-->/g, "");
// will throw error if there is something wrong with xml
qweb.addTemplates(sanitizedXML);
// create iframe // create iframe
const iframe = document.createElement("iframe"); const iframe = document.createElement("iframe");
@@ -99,14 +95,6 @@ function makeCodeIframe(js, css, xml, errorHandler) {
} }
${js}`; ${js}`;
script.innerHTML = content; script.innerHTML = content;
iframe.contentWindow.addEventListener("error", errorHandler);
iframe.contentWindow.addEventListener("unhandledrejection", errorHandler);
setTimeout(function() {
if (iframe.contentWindow) {
iframe.contentWindow.removeEventListener("error", errorHandler);
iframe.contentWindow.removeEventListener("unhandledrejection", errorHandler);
}
}, 200);
doc.body.appendChild(script); doc.body.appendChild(script);
}); });
doc.head.appendChild(owlScript); doc.head.appendChild(owlScript);
@@ -317,7 +305,6 @@ class App extends owl.Component {
js: this.SAMPLES[0].code, js: this.SAMPLES[0].code,
css: this.SAMPLES[0].css || "", css: this.SAMPLES[0].css || "",
xml: this.SAMPLES[0].xml || DEFAULT_XML, xml: this.SAMPLES[0].xml || DEFAULT_XML,
error: false,
displayWelcome: true, displayWelcome: true,
splitLayout: true, splitLayout: true,
leftPaneWidth: Math.ceil(window.innerWidth / 2), leftPaneWidth: Math.ceil(window.innerWidth / 2),
@@ -330,37 +317,12 @@ class App extends owl.Component {
this.content = useRef("content"); this.content = useRef("content");
} }
displayError(error) {
this.state.error = error;
if (error) {
setTimeout(() => {
this.content.el.innerHTML = "";
});
return;
}
}
runCode() { runCode() {
this.state.displayWelcome = false;
let subiframe;
let error = false;
const errorHandler = e => this.displayError(e.message || e.reason.message);
try {
const { js, css, xml } = this.state;
subiframe = makeCodeIframe(js, css, xml, errorHandler);
} catch (e) {
//probably problem with the templates
error = e;
// we still log the error, always useful to have it available
console.error(e);
}
if (error) {
this.displayError(error.message);
return;
} else {
this.state.error = false;
}
this.content.el.innerHTML = ""; this.content.el.innerHTML = "";
this.state.displayWelcome = false;
const { js, css, xml } = this.state;
const subiframe = makeCodeIframe(js, css, xml);
this.content.el.appendChild(subiframe); this.content.el.appendChild(subiframe);
} }
-13
View File
@@ -179,16 +179,3 @@ body {
padding: 5%; padding: 5%;
} }
.right-pane .error {
height: 100%;
width: 90%;
padding-top: 30%;
font-size: 18px;
color: darkred;
margin-left: 5%;
}
.right-pane .error pre {
overflow: auto;
width: 100%;
}
-4
View File
@@ -51,10 +51,6 @@
</p> </p>
</div> </div>
</div> </div>
<div t-if="state.error" class="error">
<h3>Error</h3>
<pre t-esc="state.error"/>
</div>
<div class="content" t-ref="content"/> <div class="content" t-ref="content"/>
</div> </div>
</div> </div>