@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
98 lines (86 loc) • 2.21 kB
JavaScript
/*eslint-env browser*/
var clientOverlay = document.createElement('div');
clientOverlay.id = 'webpack-hot-middleware-clientOverlay';
var styles = {
background: 'rgba(0,0,0,0.85)',
color: '#E8E8E8',
lineHeight: '1.2',
whiteSpace: 'pre',
fontFamily: 'Menlo, Consolas, monospace',
fontSize: '13px',
position: 'fixed',
zIndex: 9999,
padding: '10px',
left: 0,
right: 0,
top: 0,
bottom: 0,
overflow: 'auto',
dir: 'ltr',
textAlign: 'left'
};
var ansiHTML = require('ansi-html');
var colors = {
reset: ['transparent', 'transparent'],
black: '181818',
red: 'E36049',
green: 'B3CB74',
yellow: 'FFD080',
blue: '7CAFC2',
magenta: '7FACCA',
cyan: 'C3C2EF',
lightgrey: 'EBE7E3',
darkgrey: '6D7891'
};
var Entities = require('html-entities').AllHtmlEntities;
var entities = new Entities();
function showProblems(type, lines) {
clientOverlay.innerHTML = '';
lines.forEach(function(msg) {
msg = ansiHTML(entities.encode(msg));
var div = document.createElement('div');
div.style.marginBottom = '26px';
div.innerHTML = problemType(type) + ' in ' + msg;
clientOverlay.appendChild(div);
});
if (document.body) {
document.body.appendChild(clientOverlay);
}
}
function clear() {
if (document.body && clientOverlay.parentNode) {
document.body.removeChild(clientOverlay);
}
}
function problemType (type) {
var problemColors = {
errors: colors.red,
warnings: colors.yellow
};
var color = problemColors[type] || colors.red;
return (
'<span style="background-color:#' + color + '; color:#fff; padding:2px 4px; border-radius: 2px">' +
type.slice(0, -1).toUpperCase() +
'</span>'
);
}
module.exports = function(options) {
for (var color in options.overlayColors) {
if (color in colors) {
colors[color] = options.overlayColors[color];
}
ansiHTML.setColors(colors);
}
for (var style in options.overlayStyles) {
styles[style] = options.overlayStyles[style];
}
for (var key in styles) {
clientOverlay.style[key] = styles[key];
}
return {
showProblems: showProblems,
clear: clear
}
};
module.exports.clear = clear;
module.exports.showProblems = showProblems;