mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
94 lines
1.9 KiB
JavaScript
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();
|
|
}
|
|
}
|
|
};
|
|
}
|
|
}
|