Skip to content

Commit

Permalink
Fix crash on non-ASCII Python output (#1034)
Browse files Browse the repository at this point in the history
Fixes #521 (unicode support) and a circular import issue.
  • Loading branch information
TomBinford committed Apr 20, 2023
1 parent ef2bc4d commit 6f603af
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 45 deletions.
38 changes: 38 additions & 0 deletions src/util/languages/JsSourceDocLoggingScript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
export default function getJsSrcDocLoggingScript() {
return `
<script type="text/javascript">
if (typeof console != "undefined")
if (typeof console.log != 'undefined')
console.olog = console.log;
else
console.olog = function() {};
console.log = (message) => {
console.olog(message);
let a = document.getElementById("inner")
if(a){
// a.style.display = "block"
a.value = a.value + "> " + message + "\\n";
if(a.scrollTop >= (a.scrollHeight - a.offsetHeight) - a.offsetHeight){
a.scrollTop = a.scrollHeight
}
}
};
window.onerror = (err)=> {
let a = document.getElementById("outer")
if(a){
a.style.display = "block"
}
console.log("\\n\\nERROR: " + err + "\\n")
}
console.error = console.debug = console.info = console.log;
function closeConsole(){
var mypre = document.getElementById("inner");
mypre.style.display = "none"
}
</script>
`;
}
4 changes: 2 additions & 2 deletions src/util/languages/Processing.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getJsSrcDocLoggingScript } from './languages.js';
import getJsSrcDocLoggingScript from './JsSourceDocLoggingScript';

const getUserScript = (code) => `
<script type="text/javascript">
Expand Down Expand Up @@ -46,6 +46,6 @@ const getProcessingSrcDocHead = () => `
</head>
`;

export default function (code, showConsole) {
export default function CreateProcessingDoc(code, showConsole) {
return `<html> ${getProcessingSrcDocHead()} ${getProcessingSrcDocBody(code, showConsole)}</html>`;
}
4 changes: 1 addition & 3 deletions src/util/languages/Python.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import Sk from 'skulpt';

export default function (code) {
const prog = atob(code);

export default function CreatePythonDoc(prog) {
function outf(text) {
const mypre = document.getElementById('inner');
let received;
Expand Down
4 changes: 2 additions & 2 deletions src/util/languages/React.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getJsSrcDocLoggingScript } from './languages.js';
import getJsSrcDocLoggingScript from './JsSourceDocLoggingScript';

const getReactSrcDocHead = () => `
<head>
Expand Down Expand Up @@ -58,6 +58,6 @@ const getReactSrcDocBody = (code, showConsole) => `
</body>
`;

export default function (code, showConsole) {
export default function CreateReactDoc(code, showConsole) {
return `<html> ${getReactSrcDocHead()} ${getReactSrcDocBody(code, showConsole)}</html>`;
}
39 changes: 1 addition & 38 deletions src/util/languages/languages.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export const SUPPORTED_LANGUAGES = [
icon: faPython,
codemirror: 'python',
extension: 'py',
render: (code, showConsole) => CreatePythonDoc(btoa(code), showConsole),
render: CreatePythonDoc,
},
// {
// value: "javascript",
Expand Down Expand Up @@ -65,40 +65,3 @@ export const enrichWithLanguageData = (arr) => arr.map((sketch) => ({
...sketch,
language: getLanguageData(sketch.language),
}));

export const getJsSrcDocLoggingScript = () => `
<script type="text/javascript">
if (typeof console != "undefined")
if (typeof console.log != 'undefined')
console.olog = console.log;
else
console.olog = function() {};
console.log = (message) => {
console.olog(message);
let a = document.getElementById("inner")
if(a){
// a.style.display = "block"
a.value = a.value + "> " + message + "\\n";
if(a.scrollTop >= (a.scrollHeight - a.offsetHeight) - a.offsetHeight){
a.scrollTop = a.scrollHeight
}
}
};
window.onerror = (err)=> {
let a = document.getElementById("outer")
if(a){
a.style.display = "block"
}
console.log("\\n\\nERROR: " + err + "\\n")
}
console.error = console.debug = console.info = console.log;
function closeConsole(){
var mypre = document.getElementById("inner");
mypre.style.display = "none"
}
</script>
`;

0 comments on commit 6f603af

Please sign in to comment.