mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-19 18:27:29 -05:00
* Remove duplicate LICENSE. * Remove un-userd pyscript.sw directory and its content. * Remove ReadTheDocs settings (unused). * Remove un-used pyproject.toml * Remove now unused CHANGELOG. Changes now tracked via release notes on GitHub. * Updated / cleaned release page template and associated GH actions. * Update prettierignore to remove un-needed refs. * Move troubleshooting into correct README. * Add reason for the index.html * Rename the "pyscript.core" directory to "core". * Update PR template because CHANGELOG is no longer used. * Codespell configuration in pyproject.toml. * Update pyscript.core -> core in .githubignore * Remove test-results/.last-run.json. This should be ignored by git. * Pin nodejs version. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
// PyScript Error Plugin
|
|
import { hooks } from "../core.js";
|
|
|
|
hooks.main.onReady.add(function override(pyScript) {
|
|
// be sure this override happens only once
|
|
hooks.main.onReady.delete(override);
|
|
|
|
// trap generic `stderr` to propagate to it regardless
|
|
const { stderr } = pyScript.io;
|
|
|
|
// override it with our own logic
|
|
pyScript.io.stderr = (error, ...rest) => {
|
|
notify(error.message || error);
|
|
// let other plugins or stderr hook, if any, do the rest
|
|
return stderr(error, ...rest);
|
|
};
|
|
|
|
// be sure uncaught Python errors are also visible
|
|
addEventListener("error", ({ message }) => {
|
|
if (message.startsWith("Uncaught PythonError")) notify(message);
|
|
});
|
|
});
|
|
|
|
// Error hook utilities
|
|
|
|
// Custom function to show notifications
|
|
|
|
/**
|
|
* Add a banner to the top of the page, notifying the user of an error
|
|
* @param {string} message
|
|
*/
|
|
export function notify(message) {
|
|
const div = document.createElement("div");
|
|
div.className = "py-error";
|
|
div.textContent = message;
|
|
div.style.cssText = `
|
|
border: 1px solid red;
|
|
background: #ffdddd;
|
|
color: black;
|
|
font-family: courier, monospace;
|
|
white-space: pre;
|
|
overflow-x: auto;
|
|
padding: 8px;
|
|
margin-top: 8px;
|
|
`;
|
|
document.body.append(div);
|
|
}
|