) {
for (const entry of classes) {
element.classList.remove(entry);
}
}
function getLastPath(str: string): string {
return str.split('\\').pop().split('/').pop();
}
function htmlDecode(input: string): string {
const doc = new DOMParser().parseFromString(ltrim(input), 'text/html');
return doc.documentElement.textContent;
}
function ltrim(code: string): string {
const lines = code.split('\n');
if (lines.length == 0) return code;
const lengths = lines
.filter(line => line.trim().length != 0)
.map(line => {
const [prefix] = line.match(/^\s*/);
return prefix.length;
});
const k = Math.min(...lengths);
return k != 0 ? lines.map(line => line.substring(k)).join('\n')
: code;
}
function guidGenerator(): string {
const S4 = function (): string {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
return S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4();
}
/*
* Display a page-wide error message to show that something has gone wrong with
* PyScript or Pyodide during loading. Probably not be used for issues that occur within
* Python scripts, since stderr can be routed to somewhere in the DOM
*/
function showError(msg: string): void {
const warning = document.createElement('div');
warning.style.backgroundColor = 'LightCoral';
warning.style.alignContent = 'center';
warning.style.margin = '4px';
warning.style.padding = '4px';
warning.innerHTML = msg;
document.body.prepend(warning);
}
function handleFetchError(e: Error, singleFile: string) {
//Should we still export full error contents to console?
console.warn('Caught an error in loadPaths:\r\n' + e);
let errorContent: string;
if (e.message.includes('TypeError: Failed to fetch')) {
errorContent = `PyScript: Access to local files
(using "Paths:" in <py-env>)
is not available when directly opening a HTML file;
you must use a webserver to serve the additional files.
See this reference
on starting a simple webserver with Python.
`;
} else if (e.message.includes('404')) {
errorContent =
`PyScript: Loading from file ` +
singleFile +
` failed with error 404 (File not Found). Are your filename and path are correct?
`;
} else {
errorContent = 'PyScript encountered an error while loading from file: ' + e.message + '
';
}
showError(errorContent);
}
export { addClasses, removeClasses, getLastPath, ltrim, htmlDecode, guidGenerator, showError, handleFetchError };