@angularclass/hmr
Version:
angular-hmr: Hot Module Replacement for Webpack and Angular
85 lines • 2.82 kB
JavaScript
// Hot Module Replacement
function identity(val) {
return val;
}
export function bootloader(main, before, after) {
if (typeof main === 'object') {
const _main = main.main;
before = main.before;
after = main.after;
main = _main;
}
before = before || identity;
after = after || identity;
const readyState = document.readyState;
function __domReadyHandler() {
document.removeEventListener('DOMContentLoaded', __domReadyHandler);
after(main(before(readyState)));
}
switch (readyState) {
case 'loading':
document.addEventListener('DOMContentLoaded', __domReadyHandler);
break;
case 'interactive':
case 'complete':
default:
after(main(before(readyState)));
}
}
// create new host elements and remove the old elements
export function createNewHosts(cmps) {
const components = Array.prototype.map.call(cmps, function (componentNode) {
const newNode = document.createElement(componentNode.tagName);
const parentNode = componentNode.parentNode;
const currentDisplay = newNode.style.display;
newNode.style.display = 'none';
parentNode.insertBefore(newNode, componentNode);
function removeOldHost() {
newNode.style.display = currentDisplay;
try {
parentNode.removeChild(componentNode);
}
catch (e) { }
}
return removeOldHost;
});
return function removeOldHosts() {
components.forEach((removeOldHost) => removeOldHost());
};
}
// remove old styles
export function removeNgStyles() {
const docHead = document.head;
const _styles = docHead.querySelectorAll('style');
const styles = Array.prototype.slice.call(_styles);
styles
.filter((style) => style.innerText.indexOf('_ng') !== -1)
.map((el) => docHead.removeChild(el));
}
// get input values
export function getInputValues() {
const _inputs = document.querySelectorAll('input');
const inputs = Array.prototype.slice.call(_inputs);
return inputs.map((input) => input.value);
}
// set input values
export function setInputValues(_inputs) {
const inputs = document.querySelectorAll('input');
if (_inputs && inputs.length === _inputs.length) {
_inputs.forEach((value, i) => {
const el = inputs[i];
el.value = value;
el.dispatchEvent(new CustomEvent('input', { detail: el.value }));
});
// clear array
_inputs.length = 0;
}
}
// get/set input values
export function createInputTransfer() {
const _inputs = getInputValues();
return function restoreInputValues() {
return setInputValues(_inputs);
};
}
//# sourceMappingURL=helpers.js.map