console-feed-modern
Version:
A React component that displays console logs from the current page, an iframe or transported across a server
45 lines • 2.94 kB
JavaScript
// Sandbox HTML elements
const sandbox = document.implementation.createHTMLDocument('sandbox');
function objectifyAttributes(element) {
const data = {};
for (let attribute of element.attributes) {
data[attribute.name] = attribute.value;
}
return data;
}
/**
* Serialize a HTML element into JSON
*/
export default {
type: 'HTMLElement',
shouldTransform(type, obj) {
return (obj &&
obj.children &&
typeof obj.innerHTML === 'string' &&
typeof obj.tagName === 'string');
},
toSerializable(element) {
return {
tagName: element.tagName.toLowerCase(),
attributes: objectifyAttributes(element),
innerHTML: element.innerHTML
};
},
fromSerializable(data) {
try {
const element = sandbox.createElement(data.tagName);
element.innerHTML = data.innerHTML;
for (let attribute of Object.keys(data.attributes)) {
try {
element.setAttribute(attribute, data.attributes[attribute]);
}
catch (e) { }
}
return element;
}
catch (e) {
return data;
}
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRNTC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9UcmFuc2Zvcm0vSFRNTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQVVyRSxTQUFTLG1CQUFtQixDQUFDLE9BQVk7SUFDdkMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ2YsS0FBSyxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO1FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQTtLQUN2QztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsZUFBZTtJQUNiLElBQUksRUFBRSxhQUFhO0lBQ25CLGVBQWUsQ0FBQyxJQUFTLEVBQUUsR0FBUTtRQUNqQyxPQUFPLENBQ0wsR0FBRztZQUNILEdBQUcsQ0FBQyxRQUFRO1lBQ1osT0FBTyxHQUFHLENBQUMsU0FBUyxLQUFLLFFBQVE7WUFDakMsT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FDaEMsQ0FBQTtJQUNILENBQUM7SUFDRCxjQUFjLENBQUMsT0FBb0I7UUFDakMsT0FBTztZQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUN0QyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUNsQixDQUFBO0lBQ2QsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQWE7UUFDNUIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBZ0IsQ0FBQTtZQUNsRSxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDbEMsS0FBSyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEQsSUFBSTtvQkFDRixPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7aUJBQzVEO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7YUFDZjtZQUNELE9BQU8sT0FBTyxDQUFBO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFBO1NBQ1o7SUFDSCxDQUFDO0NBQ0YsQ0FBQSJ9