ibembed
Version:
Instabook Embed JavaScript SDK
3 lines (2 loc) • 4.88 kB
JavaScript
var e;!function(e){e.IFRAME_LOAD="iframe:load",e.EMBED_IFRAME_READY="iframe:ready",e.IFRAME_ERROR="iframe:error",e.IFRAME_RESIZE="iframe:resize"}(e||(e={}));const t="instabook-embed",i=document.createElement("style");i.textContent="\n .ib-iframe-loader {\n position: absolute;\n display: none;\n left: 50%;\n top: 50%;\n transform: translate(-50%,-50%);\n z-index: 1;\n }\n .ib-iframe-container {\n transition: height 0.5s ease;\n position: relative;\n min-height: 100%;\n }\n ",document.head.appendChild(i);class s extends EventTarget{constructor(e){if(super(),this.isReady=!1,this.eventCallbacks={},this.customStyles=null,this.handleMessage=this.handleMessage.bind(this),this.init=this.init.bind(this),this.reload=this.reload.bind(this),this.addEventListener=this.addEventListener.bind(this),this.removeEventListener=this.removeEventListener.bind(this),!e)throw Error("Options required");const{id:t}=e;if(!t)throw Error("container id is required");if(!e.businessID)throw Error("business id is required");if(this.iframeContainer=document.getElementById(t),!this.iframeContainer)throw Error("Container does not exist");this.iframeId=t,e.version=e.version||"live",this.options=e}init(){this.createIframe(this.options.embedParams)}on(e,t){this.eventCallbacks[e]=[t]}removeEventListener(e,t){const i=this.eventCallbacks[e];i&&(this.eventCallbacks[e]=i.filter((e=>e!==t)))}addEventListener(e,t){this.eventCallbacks[e]||(this.eventCallbacks[e]=[]),this.eventCallbacks[e]?.push(t)}triggerEvent(e,t){if(this.isReady){(this.eventCallbacks[e]||[]).forEach((e=>e(t)))}}reload(){this.sendMessage("reload",null)}getSomething(){return 1}sendMessage(e,i){if(!this.isReady)return;const s=null===i?"":i,n={msg:e,source:t,id:this.iframeId,data:s};if(!this.iframe||!this.iframe.contentWindow)throw Error("Iframe did not load the content");this.iframe.contentWindow.postMessage(n,"https://instabook.io")}handleMessage(e){if(this.isReady)try{const i=e.data;if(e.source===this.iframe?.contentWindow&&i.source===t&&"https://instabook.io"===e.origin){switch(i.type){case"iframe:ready":this.onReady();break;case"iframe:error":this.onError(i.data);break;case"iframe:resize":this.onResize(i.data)}}}catch(e){}}buildQueryString({params:e,origin:t}){let i="?remoteEmbed=true&remoteHost="+encodeURIComponent(t);if(e)for(const t in e)i+="&"+encodeURIComponent(t)+"="+encodeURIComponent(e[t]);return i+=`&t=${Date.now()}`,i}onResize(t){this.triggerEvent(e.IFRAME_RESIZE,t),this.options.fitContent&&function(e,t,i=!1){let s;return function(...n){const o=this,r=i&&!s;"number"==typeof s&&clearTimeout(s),s=setTimeout((()=>{s=null,i||t.apply(o,n)}),e),r&&t.apply(o,n)}}(300,(e=>{this.isReady&&this.iframeContainer&&this.options.fitContent&&(this.iframeContainer.style.height=`${e.height+80}px`)}))(t)}onReady(){this.triggerEvent(e.EMBED_IFRAME_READY),this.loaderElement&&(this.loaderElement.style.display="none")}onLoad(){this.triggerEvent(e.IFRAME_LOAD),this.loaderElement&&(this.loaderElement.style.display="none")}onError(t){this.triggerEvent(e.IFRAME_ERROR,t),this.loaderElement&&(this.loaderElement.style.display="none")}createIframe(e){if(!this.iframeContainer)throw Error("Container does not exist");let t="".concat(location.protocol,"//").concat(location.hostname);location.port&&(t+=":".concat(location.port));const i=("live"===this.options.version?"https://instabook.io/e1/":`https://instabook.io/version-${this.options.version}/e1/`)+this.options.businessID+this.buildQueryString({params:e,origin:t});this.iframe=document.createElement("iframe"),this.iframe.src=i,this.iframe.allow="fullscreen",this.iframe.scrolling=this.options.fitContent?"no":"yes",this.iframe.setAttribute("style","width: 100%; height: 100%; border: 0px; position: absolute;"),this.iframeContainer.classList.add("ib-iframe-container"),this.iframeContainer.appendChild(this.iframe),this.loaderElement=this.iframeContainer.querySelector(".ib-iframe-loader"),this.options.showLoader&&this.loaderElement&&(this.loaderElement.style.display="block"),this.iframe.onload=this.onLoad.bind(this),this.iframe.onerror=this.onError.bind(this),this.isReady=!0,window.removeEventListener("message",this.handleMessage,!1),window.addEventListener("message",this.handleMessage,!1)}reset(){this.isReady&&(this.iframeContainer&&this.iframe&&(this.iframeContainer.removeChild(this.iframe),this.iframeContainer.classList.remove("ib-iframe-container"),this.iframe=void 0),this.customStyles&&(this.customStyles.remove(),this.customStyles=null),this.loaderElement&&(this.loaderElement.style.display="none"),window.removeEventListener("message",this.handleMessage,!1),this.eventCallbacks={},this.isReady=!1)}}export{s as default};
//# sourceMappingURL=instabook.es.js.map