console-feed-modern
Version:
A React component that displays console logs from the current page, an iframe or transported across a server
99 lines • 7.05 kB
JavaScript
import { String as StringUtils } from './string-utils';
function createAppend(s) {
const container = document.createDocumentFragment();
container.appendChild(document.createTextNode(s));
return container;
}
/**
* @param {string} format
* @param {!Array.<!SDK.RemoteObject>} parameters
* @param {!Element} formattedResult
*/
export default function formatWithSubstitutionString(format, parameters, formattedResult) {
const formatters = {};
function stringFormatter(obj) {
if (typeof obj !== 'string') {
return '';
}
return String(obj);
}
function floatFormatter(obj) {
if (typeof obj !== 'number')
return 'NaN';
return obj;
}
function integerFormatter(obj) {
if (typeof obj !== 'number')
return 'NaN';
return Math.floor(obj);
}
let currentStyle = null;
function styleFormatter(obj) {
currentStyle = {};
const buffer = document.createElement('span');
buffer.setAttribute('style', obj);
for (let i = 0; i < buffer.style.length; i++) {
const property = buffer.style[i];
if (isWhitelistedProperty(property))
currentStyle[property] = buffer.style[property];
}
}
function isWhitelistedProperty(property) {
const prefixes = [
'background',
'border',
'color',
'font',
'line',
'margin',
'padding',
'text',
'-webkit-background',
'-webkit-border',
'-webkit-font',
'-webkit-margin',
'-webkit-padding',
'-webkit-text'
];
for (let i = 0; i < prefixes.length; i++) {
if (property.startsWith(prefixes[i]))
return true;
}
return false;
}
formatters.s = stringFormatter;
formatters.f = floatFormatter;
// Firebug allows both %i and %d for formatting integers.
formatters.i = integerFormatter;
formatters.d = integerFormatter;
// Firebug uses %c for styling the message.
formatters.c = styleFormatter;
function append(a, b) {
if (b instanceof Node) {
a.appendChild(b);
}
else if (typeof b !== 'undefined') {
let toAppend = createAppend(String(b));
if (currentStyle) {
let wrapper = document.createElement('span');
wrapper.appendChild(toAppend);
applyCurrentStyle(wrapper);
for (let i = 0; i < wrapper.children.length; ++i)
applyCurrentStyle(wrapper.children[i]);
toAppend = wrapper;
}
a.appendChild(toAppend);
}
return a;
}
/**
* @param {!Element} element
*/
function applyCurrentStyle(element) {
for (var key in currentStyle)
element.style[key] = currentStyle[key];
}
// String.format does treat formattedResult like a Builder, result is an object.
return StringUtils.format(format, parameters, formatters, formattedResult, append);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQ29tcG9uZW50L2RldnRvb2xzLXBhcnNlci9mb3JtYXQtbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXRELFNBQVMsWUFBWSxDQUFDLENBQVM7SUFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUE7SUFDbkQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFakQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLDRCQUE0QixDQUNsRCxNQUFXLEVBQ1gsVUFBZSxFQUNmLGVBQW9CO0lBRXBCLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQTtJQUUxQixTQUFTLGVBQWUsQ0FBQyxHQUFRO1FBQy9CLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQixDQUFDO0lBRUQsU0FBUyxjQUFjLENBQUMsR0FBUTtRQUM5QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUN6QyxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQVE7UUFDaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFlBQVksR0FBUSxJQUFJLENBQUE7SUFDNUIsU0FBUyxj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