UNPKG

armo-breadboard

Version:

Edit a live React component's source in real time.

57 lines (44 loc) 2.06 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBreadboardHTMLTransform = createBreadboardHTMLTransform; var _breadboardHost = require('!!raw!../breadboard-host.js'); var _breadboardHost2 = _interopRequireDefault(_breadboardHost); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function replaceLocalNodes(nodes, attr, scheme) { for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; var parser = document.createElement('a'); parser.href = node[attr]; if (parser.host === window.location.host && parser.protocol === window.location.protocol) { var comment = document.createComment(scheme + '://' + parser.pathname); node.parentNode.replaceChild(comment, node); } } } function createBreadboardHTMLTransform(hostURL) { return function (source) { var parser = new DOMParser(); var doc = parser.parseFromString(source, "text/html"); var scripts = doc.getElementsByTagName('script'); replaceLocalNodes(scripts, 'src', 'breadboardscript'); var links = doc.querySelectorAll('link[rel="stylesheet"]'); replaceLocalNodes(links, 'href', 'breadboardstyle'); var head = doc.getElementsByTagName('head')[0]; var hostScript = doc.createElement('script'); // TODO: if IE, use `hostURL` //hostScript.src = `data:text/javascript;charset=utf-8;base64,${btoa(hostScriptSource)}` hostScript.text = '__$BREADBOARD_HOST_SCRIPT$__'; // Insert our scripts before the first script, so that we have access to anything defined before there. var headScripts = head.getElementsByTagName('script'); if (headScripts.length > 0) { head.insertBefore(hostScript, headScripts[0]); } else { head.appendChild(hostScript); } head.insertBefore(document.createComment('BREADBOARD_SETTINGS'), hostScript); var serializer = new XMLSerializer(); return serializer.serializeToString(doc).replace('__$BREADBOARD_HOST_SCRIPT$__', _breadboardHost2.default); }; }