UNPKG

coldboot

Version:

A lightweight vanillaJs script to connect server-rendered static HTML to client-rendered application

1 lines 1.51 kB
window.coldboot=window.coldboot||function(){var t="cb-await",e="cb-await-id",n="cb-persist",i="cb-await-loader",a="cb-await-text",r={},o=void 0,c=void 0,u=void 0,d=void 0;function l(n){var r,u=function(n){var i=n.getAttributeNames();if(i.indexOf(t)>=0&&i.indexOf(e)>=0)return{isAwait:!0,target:n};for(var a=document.querySelectorAll("[cb-await]"),r=0;r<a.length;r++)if(a[r].contains(n))return{isAwait:!0,target:a[r]};return{isAwait:!1}}(n.target);if(u.isAwait){var d=u.target.getAttribute(t);o=u.target.getAttribute(e),c=u.target.getAttribute("cb-await-param"),r=d||"Loading",document.getElementById(i).style.display="block",document.getElementById(a).innerText=r}}function s(t){var e,i,a=t.target;if(a.getAttributeNames().indexOf(n)>=0){var o=a.getAttribute(n);e=o,i=a.value,r[e]=i}}function v(){document.querySelectorAll("[cb-persist]").forEach((function(t){var e=t.getAttribute(n),i=r[e]||"";""!==i&&(t.value=i,["focus","input","change","keypress","keydown","keyup","blur"].forEach((function(e){!function(t,e){var n=new Event(e,{bubbles:!0,cancelable:!1});t.dispatchEvent(n)}(t,e)})))}))}return{init:function(t,e){t&&(i=t),e&&(a=e),document.addEventListener("click",l),document.addEventListener("input",s)},complete:function(){return document.getElementById(i).style.display="none",document.removeEventListener("click",l),document.removeEventListener("input",s),v(),o&&u&&u({preserve:r,awaitId:o,awaitParam:c}),{preserve:r,awaitId:o,awaitParam:c}},onComplete:(d||(d=new Promise((function(t,e){u=t,e}))),d)}}();