forked from shobhitsharma/embedo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathembedo.min.js
11 lines (11 loc) · 21.7 KB
/
embedo.min.js
1
2
3
4
5
6
7
8
9
10
11
/**
* @file embedo.js
*
* Embedo is third party content embed plugin with features having events and resizing.
* It provides a layer above popular social media sites native embed snippets
* making it easier to hook content without modifying much code.
*
* @author Shobhit Sharma <[email protected]>
* @license MIT
*/
"use strict";!function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof module&&module.exports?module.exports=e():t&&(t.Embedo=window.Embedo=e())}(this,function(){function h(t){return this.options=t||h.defaults.OPTIONS,this.requests=[],this.events=[],this.init(this.options),this}function t(){this.resolved=[],this.rejected=[]}function c(r,o,s,u){if(h.log("info","automagic",r,o,s),s=s||{},u=u||function(){},!h.utils.validateElement(r)||!h.utils.validateElement(o))return u(new Error("HTMLElement does not exist in DOM."));h.utils.watcher(s.id||h.utils.uuid(),function(){var t,e={width:s.width||h.utils.compute(r,"width"),height:s.height||h.utils.compute(r,"height")},i=h.utils.compute(o,"width"),n=h.utils.compute(o,"height");if(s.strict)return u(null,{width:e.width,height:e.height});s.width&&s.height&&(t=e.width<i||e.height<n,s.width&&(o.style.width=s.width+"px"),s.height&&(o.style.height=s.height+"px"),t&&(n=Math.min(e.width/i,e.height/n),h.utils.transform(o,"scale("+n+")"))),u(null,{width:e.width,height:e.height})},500)}return Object.defineProperty(h,"defaults",{value:{OPTIONS:{facebook:null,twitter:!1,instagram:!1,pinterest:!1},SOURCES:{facebook:{GLOBAL:"FB",SDK:"//connect.facebook.net/${locale}/sdk.js",oEmbed:"//graph.facebook.com/${version}/oembed_${type}",REGEX:/(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?([\w\-]*)?/g,PARAMS:{version:"v3.2",cookie:!0,appId:null,access_token:null}},twitter:{GLOBAL:"twttr",SDK:"//platform.twitter.com/widgets.js",oEmbed:"//publish.twitter.com/oembed",REGEX:/^http[s]*:\/\/[www.]*twitter(\.[a-z]+).*/i,PARAMS:{}},instagram:{GLOBAL:"instgrm",SDK:"//www.instagram.com/embed.js",oEmbed:"//graph.facebook.com/${version}/instagram_oembed",REGEX:/(http|https)?:\/\/(www\.)?instagram.com\/p\/[a-zA-Z0-9_\/\?\-\=]+/gi,PARAMS:{version:"v8.0",access_token:null}},youtube:{GLOBAL:null,SDK:null,oEmbed:"//www.youtube.com/embed/",REGEX:/^(?:(?:https?:)?\/\/)?(?:www\.)?(?:m\.)?(?:youtu(?:be)?\.com\/(?:v\/|embed\/|watch(?:\/|\?v=))|youtu\.be\/)((?:\w|-){11})(?:\S+)?$/,PARAMS:null},pinterest:{GLOBAL:"PinUtils",SDK:"//assets.pinterest.com/js/pinit.js",oEmbed:null,REGEX:/(https?:\/\/(ww.)?)?pinterest(\.[a-z]+).*/i,PARAMS:{}},vimeo:{GLOBAL:null,SDK:null,oEmbed:"//vimeo.com/api/oembed.json",REGEX:/(http|https)?:\/\/(www\.)?vimeo(\.[a-z]+)\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|)(\d+)(?:|\/\?)/,PARAMS:{}},github:{GLOBAL:null,SDK:null,oEmbed:null,REGEX:/(http|https):\/\/gist\.github\.com\/(\w+)\/(\w+)/,PARAMS:{}},soundcloud:{GLOBAL:null,SDK:null,oEmbed:"//soundcloud.com/oembed",REGEX:/^(http|https):\/\/soundcloud\.com\/(\w+)\/.*$/,PARAMS:{}}},RESTRICTED:["url","strict","height","width","centerize","jsonp"]},writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(h,"log",{value:function(t){h.debug&&"undefined"!=typeof console&&void 0!==console[t]&&console[t].apply(console,Array.prototype.slice.call(arguments,1))},writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(h,"plugins",{value:function(t){t&&(t instanceof Array?t.forEach(function(t){"function"==typeof t&&t(h)}):"fuction"===t&&t(h))},writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(h,"utils",{value:Object.create({uuid:function(){var t=65536*Math.random()|0,e=65536*Math.random()|0;return"embedo_"+(t=("000"+t.toString(36)).slice(-3))+(e=("000"+e.toString(36)).slice(-3))},extend:function(t){t=t||{};for(var e=1;e<arguments.length;e++)if(arguments[e])for(var i in arguments[e])arguments[e].hasOwnProperty(i)&&(t[i]=arguments[e][i]);return t},merge:function(t,e,i){for(var n in i=i||[],e)-1===i.indexOf(n)&&(t[n]=e[n]);return t},sequencer:function(){var r=arguments;return{then:function(t){for(var e=0,i=0;i<r.length;i++)r[i](n);function n(){++e===r.length&&t()}}}},replacer:function(t,e){if(t&&e){if(e)for(var i in e)t=t&&t.split("${"+i+"}").join(e[i]);return t}},observer:(t.prototype={execute:function(t,e){var i=t.length;for(e=Array.prototype.slice.call(e);i--;)t[i].apply(null,e)},resolve:function(){this.execute(this.resolved,arguments)},reject:function(){this.execute(this.rejected,arguments)},done:function(t){return this.resolved.push(t),this},fail:function(t){return this.rejected.push(t),this}},t),camelToSnake:function(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()},validateURL:function(t){return/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/.test(t)},generateElement:function(t,e,i){var n=document.createElement(t);return Object.keys(e||{}).forEach(function(t){n.setAttribute(t,e[t])}),i&&(n.innerHTML=i),n},generateEmbed:function(t,e,i){t=t||h.utils.uuid();var n=document.createElement("div");return n.setAttribute("id",t),n.setAttribute("data-embedo-id",t),n.setAttribute("data-embedo-source",e),h.utils.validateElement(i)?n.appendChild(i):n.innerHTML=i||"",n},generateScript:function(t){var e=document.createElement("script");return e.type="text/javascript",e.src=encodeURI(t),e.setAttribute("async",""),e.setAttribute("charset","utf-8"),e},validateElement:function(t){return"object"==typeof HTMLElement?t instanceof window.HTMLElement:t&&"object"==typeof t&&null!==t&&1===t.nodeType&&"string"==typeof t.nodeName},sdkReady:function(e,i){if(i=i||function(){},!h.defaults.SOURCES[e])return i(new Error("unsupported_sdk_type"));var n=0;!function t(){return 15<++n?i(new Error(e+":sdk_not_available")):window[h.defaults.SOURCES[e].GLOBAL]?i(null,window[h.defaults.SOURCES[e].GLOBAL]):void setTimeout(t,10*n)}()},querystring:function(t){var e,i=[];for(e in t)t.hasOwnProperty(e)&&i.push(encodeURIComponent(e)+"="+encodeURIComponent(t[e]));return i.join("&")},fetch:function(t,e,i){"function"==typeof e&&(i=e,e={}),(e=e||{}).callback=e.callback||"callback";var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("script"),o="jsonp_"+h.utils.uuid();function s(e,t){try{delete window[e]}catch(t){window[e]=void 0}t&&(n.removeChild(t),t=void 0)}t=(t+=(~t.indexOf("?")?"&":"?")+e.callback+"="+encodeURIComponent(o)).replace("?&","?"),window[o]=function(t){s(o,r),i(null,t)},r.type="text/javascript",r.defer=!0,r.charset="UTF-8",r.onerror=function(t){return s(o,r),i(t)},n.appendChild(r),r.src=t},ajax:function(t,e,i){"function"==typeof e&&(i=e,e={}),i=i||function(){};var n=new XMLHttpRequest;n.onload=function(){if(400<=n.status)return i(new Error(n.responseText||n.statusText));try{return i(null,JSON.parse(n.responseText))}catch(t){return i(new Error("invalid_response"))}},n.onerror=function(t){return i(t)},n.open("GET",t),n.send()},transform:function(t,e){h.utils.validateElement(t)&&(t.style.webkitTransform=e,t.style.MozTransform=e,t.style.msTransform=e,t.style.OTransform=e,t.style.transform=e)},compute:function(t,e,i){if(h.utils.validateElement(t)&&e){var n=t.getBoundingClientRect()[e];return!i&&n||(document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,"").getPropertyValue(e):t.currentStyle&&(e=e.replace(/\-(\w)/g,function(t,e){return e.toUpperCase()}),n=t.currentStyle[e])),"string"!=typeof n||/^\d+(\.\d+)?%$/.test(n)||(n=n.replace(/[^\d.-]/g,"")),isNaN(Number(n))?n:Number(n)}},convertToPx:function(t,e,i){return isNaN(Number(i))?/^\d+(\.\d+)?%$/.test(i)?function(t,e,i){e=h.utils.compute(t.parentNode,e,!0);return i=parseFloat(i),e*(i/100)}(t,e,i):i.match(/(vh|vw)/)?function(t,e){var i=window,n=document,r=n.documentElement,o=n.body,n=i.innerWidth||r.clientWidth||o.clientWidth,o=i.innerHeight||r.clientHeight||o.clientHeight;{if("vw"===t)return n*parseFloat(e)/100;if("vh"===t)return o*parseFloat(e)/100}}(i.replace(/[0-9]/g,""),i):void 0:Number(i)},watcher:function(t,e,i){return window.EMBEDO_WATCHER=window.EMBEDO_WATCHER||{},window.EMBEDO_WATCHER[t]=window.EMBEDO_WATCHER[t]||{id:t,count:0,request:null},0<window.EMBEDO_WATCHER[t].count&&window.EMBEDO_WATCHER[t].request&&(--window.EMBEDO_WATCHER[t].count,clearTimeout(window.EMBEDO_WATCHER[t].request)),window.EMBEDO_WATCHER[t].count+=1,window.EMBEDO_WATCHER[t].request=setTimeout(function(){--window.EMBEDO_WATCHER[t].count,0===window.EMBEDO_WATCHER[t].count&&e.call()},i),null},dimensions:function(t,e,i){var n=h.utils.compute(t,"width");return{width:e=e||(0<n?n:h.utils.compute(t.parentNode,"width")),height:i=i||(0<n?n/1.5:h.utils.compute(t.parentNode,"height"))}},centerize:function(t,e,i){h.log("info","centerize",t,e,i),h.utils.validateElement(t)&&h.utils.validateElement(e)&&((i=i||{}).width&&(t.style.width=i.width,t.style.maxWidth=i.width,t.style.marginLeft="auto",t.style.marginRight="auto"),i.height&&(t.style.height=i.height,t.style.maxHeight=i.height),e.style.display="-moz-box",e.style.display="-ms-flexbox",e.style.display="-webkit-flex",e.style.display="-webkit-box",e.style.display="flex",e.style.textAlign="center",e.style["justify-content"]="center",e.style["align-items"]="center",e.style.margin="0 auto")},handleScriptValidation:function(t){if(t){t=t.split("#")[0];for(var e=document.getElementsByTagName("script"),i=e.length;i--;)if(e[i].src===t)return!0;return!1}}}),writable:!1,enumerable:!0,configurable:!1}),Object.defineProperties(h.prototype,{on:{value:function(t,e){"object"!=typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e)},writable:!1,configurable:!1},off:{value:function(t,e){var i;"object"==typeof this.events[t]&&-1<(i=this.events[t].indexOf(e))&&this.events[t].splice(i,1)},writable:!1,configurable:!1},emit:{value:function(t){var e,i,n,r=[].slice.call(arguments,1);if("object"==typeof this.events[t])for(n=(i=this.events[t].slice()).length,e=0;e<n;e++)i[e].apply(this,r)},writable:!1,configurable:!1},once:{value:function(e,i){this.on(e,function t(){this.off(e,t),i.apply(this,arguments)})},writable:!1,configurable:!1}}),h.prototype.init=function(e){h.log("info","init",this.requests,e),Object.keys(h.defaults.SOURCES).forEach(function(t){h.defaults.SOURCES[t].SDK&&function(t,e){if(!t||!e)return;var i=e.sdk||h.utils.replacer(h.defaults.SOURCES[t.toLowerCase()].SDK,{locale:e.locale||window.navigator.language||"en_US"});h.utils.handleScriptValidation(i)||(e&&"object"==typeof e&&(i+=("facebook"===t?"#":"?")+h.utils.querystring(e)),document.body.appendChild(h.utils.generateScript(i)))}(t,e[t])}),this.domify()},h.prototype.domify=function(){var t=document.querySelectorAll("[data-embedo-url]");[].forEach.call(t,function(i){var t=Object.keys(i.dataset||{}).reduce(function(t,e){return-1!==e.indexOf("embedo")&&(t[h.utils.camelToSnake(e).replace("embedo-","")]=i.dataset[e]),t},{});this.render(i,t.url,t)}.bind(this))},h.prototype.facebook=function(o,s,u,l,d){var t,e,i,n=this.options.facebook||{};function r(t){var e,i,n,r,t=h.utils.generateEmbed(o,"facebook",t);s.appendChild(t),e=s,i=t,n={id:o,url:u,strict:l.strict,width:l.width,height:l.height,centerize:l.centerize},r=function(t,e){return t?d(t):void d(null,{id:o,el:s,width:e.width,height:e.height})},h.utils.sdkReady("facebook",function(t){return t?r(t):(window.FB.XFBML.parse(e),void window.FB.Event.subscribe("xfbml.render",function(){i.firstChild&&(!1!==n.centerize&&h.utils.centerize(e,i,n),"rendered"===i.firstChild.getAttribute("fb-xfbml-state")&&c(e,i,n,r))}))})}/^([^\/?].+\/)?post|photo(s|\.php)[\/?].*$/gm.test(u)?t=u.match(/comment_id|reply_comment_id/)?"comment":"post":/^([^\/?].+\/)?video(s|\.php)[\/?].*$/gm.test(u)&&(t="video"),t&&t.match(/post|video/)?(e=h.utils.replacer(h.defaults.SOURCES.facebook.oEmbed,{version:n.version||"v8.0",type:t}),n=h.utils.merge({url:encodeURI(u),access_token:n.access_token,omitscript:!0},l,h.defaults.RESTRICTED),("width"in l||"maxwidth"in l)&&(n.maxwidth=l.maxwidth||l.width),e+="?"+h.utils.querystring(n),h.utils.fetch(e,function(t,e){return t?(h.log("error","facebook",t),d(t)):void r(e.html)})):("comment"===t||u.match(/comment_id|reply_comment_id/)?(i="fb-comment-embed",l["data-numposts"]=l["data-numposts"]||5):u.match(/plugins\/comments/)?i="fb-comments":(i="fb-page",l["data-height"]=l["data-height"]||l.maxheight||l.height||500),(i=h.utils.generateElement("div",h.utils.merge({class:i,"data-href":u,"data-width":l["data-width"]||l.maxwidth||l.width||350},l))).removeAttribute("width"),i.removeAttribute("height"),r(i))},h.prototype.twitter=function(s,u,l,d,a){var t=h.defaults.SOURCES.twitter.oEmbed,e=h.utils.merge({url:encodeURI(l),omit_script:1},d,h.defaults.RESTRICTED);("width"in d||"maxwidth"in d)&&(e.maxwidth=d.maxwidth||d.width),("height"in d||"maxheight"in d)&&(e.maxheight=d.maxheight||d.height),t+="?"+h.utils.querystring(e),h.utils.fetch(t,function(t,e){if(t)return h.log("error","twitter",t),a(t);var i,n,r,o,e=h.utils.generateEmbed(s,"twitter",e.html);u.appendChild(e),i=u,n=e,r={id:s,url:l,strict:d.strict,width:d.width,height:d.height,centerize:d.centerize},o=function(t,e){return t?a(t):void a(null,{id:s,el:u,width:e.width,height:e.height})},h.utils.sdkReady("twitter",function(t){return t?o(t):(window.twttr.widgets.load(n),void window.twttr.events.bind("rendered",function(t){n.firstChild&&n.firstChild.getAttribute("id")===t.target.getAttribute("id")&&(!1!==r.centerize&&h.utils.centerize(i,n,r),c(i,n,r,o))}))})})},h.prototype.instagram=function(s,u,l,d,a){var t=this.options.instagram||{},e=h.utils.replacer(h.defaults.SOURCES.instagram.oEmbed,{version:t.version||"v8.0"}),t=h.utils.merge({url:encodeURI(l),access_token:t.access_token,omitscript:!0,hidecaption:!0},d,h.defaults.RESTRICTED);("width"in d||"maxwidth"in d)&&(d.width=d.maxwidth||d.width,320<d.width&&(t.maxwidth=d.width)),e+="?"+h.utils.querystring(t);t=d.jsonp?"jsonp":"ajax";h.utils[t](e,function(t,e){if(t){if(h.log("error","instagram",t),void 0!==d.jsonp&&null!==d.jsonp)return a(t);t=l.match(h.defaults.SOURCES.instagram.REGEX);return l=t&&0<t.length?t[0].replace(/\/$/,""):l,this.iframe(s,u,l+"/embed/",d,a)}var i,n,r,o,e=h.utils.generateEmbed(s,"instagram",e.html);u.appendChild(e),i=u,n=e,r={id:s,url:l,strict:d.strict,width:d.width,height:d.height,centerize:d.centerize},o=function(t,e){return t?a(t):void a(null,{id:s,el:u,width:e.width,height:e.height})},h.utils.sdkReady("instagram",function(t){if(t)return o(t);if(!window.instgrm.Embeds||!window.instgrm.Embeds)return o(new Error("instagram_sdk_missing"));window.instgrm.Embeds.process(n);var e=setInterval(function(){if(n.firstChild&&n.firstChild.className.match(/instagram-media-rendered/))return clearInterval(e),!1!==r.centerize&&h.utils.centerize(i,n,r),c(i,n,r,o)},250)})}.bind(this))},h.prototype.youtube=function(t,e,i,n,r){if(!o(i))return h.log("error","youtube","Unable to detect Youtube video id."),r("Unable to detect Youtube video id.");i=h.defaults.SOURCES.youtube.oEmbed+o(i);function o(t){t=t.match(/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i);return!(!t||2!==t.length)&&t[1]}i+="?"+h.utils.querystring(h.utils.merge({modestbranding:1,autohide:1,showinfo:0},n,h.defaults.RESTRICTED)),this.iframe(t,e,i,n,r)},h.prototype.vimeo=function(i,n,t,e,r){var o=h.utils.dimensions(n,e.width,e.height),e=h.utils.merge({url:t,width:o.width,height:o.height,autohide:1},e,h.defaults.RESTRICTED),e=h.defaults.SOURCES.vimeo.oEmbed+"?"+h.utils.querystring(e);h.utils.fetch(e,function(t,e){if(t)return h.log("error","vimeo",t),r(t);e=h.utils.generateEmbed(i,"vimeo",e.html);n.appendChild(e),r(null,{id:i,el:n,width:o.width,height:o.height})})},h.prototype.pinterest=function(i,n,t,e,r){var o,s,u,l,d=h.utils.dimensions(n,e.width,e.height),d=600<d.width?"large":d.width<345?"small":"medium",d=h.utils.generateElement("a",h.utils.merge({href:t,"data-pin-do":e["data-pin-do"]||"embedPin","data-pin-lang":e["data-pin-lang"]||"en","data-pin-width":d},e)),d=h.utils.generateEmbed(i,"pinterest",d);n.appendChild(d),o=n,s=d,u={id:i,url:t,strict:e.strict,width:e.width,height:e.height,centerize:e.centerize},l=function(t,e){return t?(h.log("error","pinterest",t),r(t)):void r(null,{id:i,el:n,width:e.width,height:e.height})},h.utils.sdkReady("pinterest",function(t){return t?l(t):window.PinUtils&&window.PinUtils&&s&&s.firstChild?void setTimeout(function(){s.querySelector("[data-pin-href]")||window.PinUtils.build(s);var t=0,e=setInterval(function(){return t+=1,s.querySelector("[data-pin-href]")?(clearInterval(e),!1!==u.centerize&&h.utils.centerize(o,s,u),c(o,s,u,l)):20<=t?(clearInterval(e),l(new Error("pinterest_embed_failed"))):void 0},250)},750):l(new Error("pinterest_sdk_missing"))})},h.prototype.github=function(e,i,t,n,r){var o=h.utils.dimensions(i,n.width,n.height),n=h.utils.generateElement("iframe",h.utils.merge({width:o.width,height:o.height},n,h.defaults.RESTRICTED)),s=h.utils.generateEmbed(e,"github",n);i.appendChild(s),n.contentWindow.document.open(),n.contentWindow.document.write('<body><style type="text/css">body,html{margin:0;padding:0;border-radius:3px;}.gist .gist-file{margin:0 !important;padding:0;}</style><script src="'+t+'"><\/script></body>'),n.contentWindow.document.close(),n.onerror=function(t){r(t)},n.addEventListener("load",function(t){r(null,{id:e,el:i,event:t,width:h.utils.compute(s,"width"),height:h.utils.compute(s,"height")})})},h.prototype.soundcloud=function(i,n,t,e,r){e.hasOwnProperty("width")&&e.width&&(e.maxwidth=e.maxwidth||e.width||"100%"),e.hasOwnProperty("height")&&e.height&&(e.maxheight=e.maxheight||e.height);var o=h.utils.dimensions(n,e.maxwidth,e.maxheight),e=h.utils.merge({url:encodeURI(t),format:"js"},e,h.defaults.RESTRICTED),e=h.defaults.SOURCES.soundcloud.oEmbed+"?"+h.utils.querystring(e);h.utils.fetch(e,function(t,e){if(t)return h.log("error","soundcloud",t),r(t);e=h.utils.generateEmbed(i,"soundcloud",e.html);n.appendChild(e),r(null,{id:i,el:n,width:o.width,height:o.height})})},h.prototype.iframe=function(e,i,t,n,r){var o=document.createDocumentFragment(),s=h.utils.dimensions(i,n.width,n.height),u=(t.substr(t.lastIndexOf("."))||"").replace(".","").toLowerCase(),l={csv:"text/csv",pdf:"application/pdf",gif:"image/gif",js:"application/javascript",json:"application/json",xhtml:"application/xhtml+xml",pps:"application/vnd.ms-powerpoint",ppsx:"application/vnd.openxmlformats-officedocument.presentationml.slideshow",xml:"application/xml",ogg:"video/ogg",mp4:"video/mp4",webm:"video/webm",html:"text/html"},l=l[u]||l.html,u=u.match(/(mp4|ogg|webm|ogv|ogm)/)?"video":n.tagName||"embed",n=h.utils.merge({},n,h.defaults.RESTRICTED),d=h.utils.generateElement(u,h.utils.merge({type:l,src:t,width:s.width,height:s.height},n));o.appendChild(h.utils.generateEmbed(e,"iframe",d)),i.appendChild(o),"video"===u?setTimeout(function(){r(null,{id:e,el:i,width:h.utils.compute(d,"width"),height:h.utils.compute(d,"height")})},250):(d.onerror=function(t){r(t)},d.addEventListener("load",function(t){r(null,{id:e,el:i,event:t,width:h.utils.compute(d,"width"),height:h.utils.compute(d,"height")})}))},h.prototype.render=function(t,e,i,n){if(h.log("info","render",t,e,i),i=i||{},n=n||function(){},!t||!h.utils.validateElement(t))return h.log("info","render","`element` is either missing or invalid"),this.emit("error",new Error("element_is_missing"));if("string"!=typeof e)return this.emit("error",new Error("invalid_url_string"));if(!e||!h.utils.validateURL(e))return h.log("info","render","`url` is either missing or invalid"),this.emit("error",new Error("invalid_or_missing_url"));var r=function(e){var t=Object.keys(h.defaults.SOURCES)||[];if(!/(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/.test(e))return null;t=t.filter(function(t){if(h.defaults.SOURCES[t]&&e.match(h.defaults.SOURCES[t].REGEX))return t}).filter(Boolean);return t&&t.length?t[0]:"iframe"}(e);if(!r)return h.log("info","render",new Error("Invalid or Unsupported URL")),this.emit("error",new Error("url_not_supported"));if(!this[r])return h.log("info","render",new Error("Requested source is not implemented or missing.")),this.emit("error",new Error("unrecognised_url"));"width"in i&&i.width&&(i.width=h.utils.convertToPx(t,"width",i.width)),"height"in i&&i.height&&(i.height=h.utils.convertToPx(t,"height",i.height));var o=h.utils.uuid(),s={id:o,el:t,source:r,url:e,attributes:i};this.requests.push(s),this.emit("watch","load",s),this[r](o,t,e,i,function(t,e){if(t)return this.emit("error",t),n(t);e.url=s.url,e.source=s.source,e.options=s.attributes,this.emit("watch","loaded",e),n(null,e)}.bind(this))},h.prototype.load=function(e,t,n){h.log("info","load",e,t,n),n=n||{};var r,i,o=new h.utils.observer;return e&&h.utils.validateElement(e)?t instanceof Array?(r={failed:[],finished:[]},i=t.map(function(t){return function(i){this.render(e,t,n,function(t,e){return t?(r.failed.push(t),i(t)):(r.finished.push(e),void i(null,e))})}.bind(this)}.bind(this)),h.utils.sequencer.apply(this,i).then(function(){return 0<r.failed.length?o.reject(r.failed):void o.resolve(r.finished)})):"string"==typeof t?this.render(e,t,n,function(t,e){return t?o.reject(t):void o.resolve(e)}):this.emit("error",new Error("invalid_url_string")):(h.log("info","load","`element` is either missing or invalid"),this.emit("error",new Error("element_is_missing"))),o},h.prototype.refresh=function(t){if(h.log("info","refresh",this.requests,t),0!==this.requests.length)return this.requests.forEach(function(i){if(i.el)return"iframe"===i.source?this.emit("refresh",i,{width:h.utils.compute(i.el,"width"),height:h.utils.compute(i.el,"height")}):void(t?h.utils.validateElement(t)&&t===i.el&&c(i.el,document.getElementById(i.id),i.attributes,function(t,e){e&&this.emit("refresh",i,e)}.bind(this)):c(i.el,document.getElementById(i.id),i.attributes,function(t,e){e&&this.emit("refresh",i,e)}.bind(this)))}.bind(this)),this},h.prototype.destroy=function(e){if(h.log("warn","destroy",this.requests,e),0!==this.requests.length){var i=[];return this.requests.forEach(function(t){t.el&&h.utils.validateElement(t.el)&&(!e||h.utils.validateElement(e)&&e===t.el)&&(document.getElementById(t.id)&&document.getElementById(t.id).remove(),i.push(t.id),this.emit("destroy",t))}.bind(this)),this.requests=this.requests.filter(function(t){return i.indexOf(t.id)<0}),this}},h});