Files
2021-05-11 15:57:02 +02:00

94 lines
1.9 KiB
JavaScript

const styles = `
.container {
all: initial;
background: #FEFEFE;
padding: 50px;
min-height: 30vh;
max-height: 100%;
width: 100%;
position: fixed;
left: 0;
top: 0;
font-family: sans-serif;
box-shadow: inset 0 0 100px #e411111f, 0 0 20px #00000085;
box-sizing: border-box;
overflow-y: auto;
z-index: 1000000;
}
.section {
margin-bottom: 50px;
}
pre {
overflow-x: auto;
}
`;
function createSection (title, content) {
var sectionContainer = document.createElement('div');
sectionContainer.classList.add('section');
var header = document.createElement('h3');
header.textContent = title;
sectionContainer.appendChild(header);
var message = document.createElement('pre');
message.innerHTML = content;
sectionContainer.appendChild(message);
return sectionContainer;
}
let container = null;
let contentEl = null;
function init () {
if (container) {
return;
}
container = document.createElement('div');
document.body.append(container);
contentEl = document.createElement('div');
contentEl.classList.add('container');
let shadow = container.attachShadow({ mode: 'open' });
shadow.appendChild(contentEl);
let style = document.createElement('style');
style.textContent = styles;
shadow.appendChild(style);
let button = document.createElement('button');
button.textContent = 'Close';
button.addEventListener('click', close);
contentEl.appendChild(button);
}
function close() {
document.body.removeChild(container);
container = null;
contentEl = null;
}
DevErrorOverlay = {
showMessage(title, message) {
init();
let sectionEl = createSection(title, message);
contentEl.prepend(sectionEl);
return () => {
if (container && contentEl && sectionEl.parentNode === contentEl) {
contentEl.removeChild(sectionEl);
if (contentEl.childNodes.length === 1) {
close();
}
}
};
}
}