{"version":3,"file":"embeddables.min.js","sources":["../node_modules/embedo/embedo.js","../src/embeddablemain.js"],"sourcesContent":["/**\n * @file embedo.js\n *\n * Embedo is third party content embed plugin with features having events and resizing.\n * It provides a layer above popular social media sites native embed snippets\n * making it easier to hook content without modifying much code.\n *\n * @author Shobhit Sharma \n * @license MIT\n */\n\n'use strict';\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory();\n } else if (root) {\n root.Embedo = window.Embedo = factory();\n }\n})(this, function () {\n /**\n * @class Embedo Prototype\n *\n * @param {object} options Initialize options.\n */\n function Embedo(options) {\n this.options = options || Embedo.defaults.OPTIONS;\n this.requests = [];\n this.events = [];\n\n this.init(this.options);\n\n return this;\n }\n\n /**\n * @constant\n * Embedo defaults\n *\n * @description Embedo defaults contains basic configuration and values required to build internal engine.\n */\n Object.defineProperty(Embedo, 'defaults', {\n value: {\n OPTIONS: {\n facebook: null,\n twitter: false,\n instagram: false,\n pinterest: false\n },\n SOURCES: {\n facebook: {\n GLOBAL: 'FB',\n SDK: '//connect.facebook.net/${locale}/all.js',\n oEmbed: '//www.facebook.com/plugins/${type}/oembed.json',\n REGEX: /(?:(?:http|https):\\/\\/)?(?:www.)?facebook.com\\/(?:(?:\\w)*#!\\/)?(?:pages\\/)?([\\w\\-]*)?/g,\n PARAMS: {\n version: 'v3.2',\n cookie: true,\n appId: null,\n xfbml: true\n }\n },\n twitter: {\n GLOBAL: 'twttr',\n SDK: '//platform.twitter.com/widgets.js',\n oEmbed: '//publish.twitter.com/oembed',\n REGEX: /^http[s]*:\\/\\/[www.]*twitter(\\.[a-z]+).*/i,\n PARAMS: {}\n },\n instagram: {\n GLOBAL: 'instgrm',\n SDK: '//www.instagram.com/embed.js',\n oEmbed: '//api.instagram.com/oembed',\n REGEX: /(http|https)?:\\/\\/(www\\.)?instagram.com\\/p\\/[a-zA-Z0-9_\\/\\?\\-\\=]+/gi,\n PARAMS: {}\n },\n youtube: {\n GLOBAL: null,\n SDK: null,\n oEmbed: '//www.youtube.com/embed/',\n REGEX: /^(?:(?:https?:)?\\/\\/)?(?:www\\.)?(?:m\\.)?(?:youtu(?:be)?\\.com\\/(?:v\\/|embed\\/|watch(?:\\/|\\?v=))|youtu\\.be\\/)((?:\\w|-){11})(?:\\S+)?$/,\n PARAMS: null\n },\n pinterest: {\n GLOBAL: 'PinUtils',\n SDK: '//assets.pinterest.com/js/pinit.js',\n oEmbed: null,\n REGEX: /(https?:\\/\\/(ww.)?)?pinterest(\\.[a-z]+).*/i,\n PARAMS: {}\n },\n vimeo: {\n GLOBAL: null,\n SDK: null,\n oEmbed: '//vimeo.com/api/oembed.json',\n REGEX: /(http|https)?:\\/\\/(www\\.)?vimeo(\\.[a-z]+)\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|)(\\d+)(?:|\\/\\?)/,\n PARAMS: {}\n },\n github: {\n GLOBAL: null,\n SDK: null,\n oEmbed: null,\n REGEX: /(http|https):\\/\\/gist\\.github\\.com\\/(\\w+)\\/(\\w+)/,\n PARAMS: {}\n },\n soundcloud: {\n GLOBAL: null,\n SDK: null,\n oEmbed: '//soundcloud.com/oembed',\n REGEX: /^(http|https):\\/\\/soundcloud\\.com\\/(\\w+)\\/.*$/,\n PARAMS: {}\n }\n },\n RESTRICTED: ['url', 'strict', 'height', 'width', 'centerize', 'jsonp']\n },\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n // Application Logger\n Object.defineProperty(Embedo, 'log', {\n value: function log(type) {\n if (!Embedo.debug) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console[type] !== 'undefined') {\n console[type].apply(console, Array.prototype.slice.call(arguments, 1));\n }\n },\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n // Plugins Loader\n Object.defineProperty(Embedo, 'plugins', {\n value: function load(plugins) {\n if (!plugins) {\n return;\n }\n if (plugins instanceof Array) {\n plugins.forEach(function (plugin) {\n if (typeof plugin === 'function') {\n plugin(Embedo);\n }\n });\n } else if (plugins === 'fuction') {\n plugins(Embedo);\n }\n },\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n /**\n * Helper utlities\n * @method utils\n *\n * @private\n */\n Object.defineProperty(Embedo, 'utils', {\n value: Object.create({\n /**\n * @function uuid\n */\n uuid: function uuid() {\n var primary = (Math.random() * 0x10000) | 0;\n var secondary = (Math.random() * 0x10000) | 0;\n primary = ('000' + primary.toString(36)).slice(-3);\n secondary = ('000' + secondary.toString(36)).slice(-3);\n return 'embedo_' + primary + secondary;\n },\n\n /**\n * @function extend\n * @returns {object}\n */\n extend: function extend(obj) {\n obj = obj || {};\n for (var i = 1; i < arguments.length; i++) {\n if (!arguments[i]) {\n continue;\n }\n for (var key in arguments[i]) {\n if (arguments[i].hasOwnProperty(key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n return obj;\n },\n\n /**\n * @function merge\n *\n * @param {object} destination\n * @param {object} source\n * @param {array} preserve\n * @returns\n */\n merge: function merge(destination, source, preserve) {\n preserve = preserve || [];\n\n for (var property in source) {\n if (preserve.indexOf(property) === -1) {\n destination[property] = source[property];\n }\n }\n\n return destination;\n },\n\n /**\n * @func sequencer\n * Breaks down array into sequencer\n *\n * @param {Array} array\n * @param {Number} size\n * @returns\n */\n sequencer: function sequencer() {\n var args = arguments;\n return {\n then: function (done) {\n var counter = 0;\n for (var i = 0; i < args.length; i++) {\n args[i](callme);\n }\n\n function callme() {\n counter++;\n if (counter === args.length) {\n done();\n }\n }\n }\n };\n },\n\n /**\n * @func replacer\n * Replaces ${entity} with object key/value pair\n *\n * @param {string} str\n * @param {object} obj\n */\n replacer: function replacer(str, obj) {\n if (!str || !obj) {\n return;\n }\n if (obj) {\n for (var key in obj) {\n if (str) {\n str = str.split('${' + key + '}').join(obj[key]);\n }\n }\n }\n return str;\n },\n\n /**\n * @func observer\n *\n * Deferred Implementation for Object\n */\n observer: (function () {\n function Deferred() {\n this.resolved = [];\n this.rejected = [];\n }\n Deferred.prototype = {\n execute: function (list, args) {\n var i = list.length;\n args = Array.prototype.slice.call(args);\n while (i--) {\n list[i].apply(null, args);\n }\n },\n resolve: function () {\n this.execute(this.resolved, arguments);\n },\n reject: function () {\n this.execute(this.rejected, arguments);\n },\n done: function (callback) {\n this.resolved.push(callback);\n return this;\n },\n fail: function (callback) {\n this.rejected.push(callback);\n return this;\n }\n };\n return Deferred;\n })(),\n\n camelToSnake: function camelToSnake(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n },\n\n /**\n * @function validateURL\n *\n * @param {string} url\n * @returns\n */\n validateURL: function validateURL(url) {\n return /(http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/.test(\n url\n );\n },\n\n /**\n * @function generateElement\n * Generates DOM element\n *\n * @param {string} source\n * @param {object} attributes\n * @param {string} html\n * @returns HTMLElement\n */\n generateElement: function generateElement(type, attributes, html) {\n var el = document.createElement(type);\n Object.keys(attributes || {}).forEach(function (type) {\n el.setAttribute(type, attributes[type]);\n });\n if (html) {\n el.innerHTML = html;\n }\n return el;\n },\n\n /**\n * @function generateEmbed\n * Generates Embed Container\n *\n * @param {string} source\n * @param {string} html\n * @returns\n */\n generateEmbed: function generateEmbed(id, source, html) {\n id = id || Embedo.utils.uuid();\n var container = document.createElement('div');\n\n container.setAttribute('id', id);\n container.setAttribute('data-embedo-id', id);\n container.setAttribute('data-embedo-source', source);\n\n if (Embedo.utils.validateElement(html)) {\n container.appendChild(html);\n } else {\n container.innerHTML = html || '';\n }\n\n return container;\n },\n\n /**\n * @function generateScript\n * Generates script tag element\n *\n * @param {string} source\n * @returns HTMLElement\n */\n generateScript: function generateScript(source) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = encodeURI(source);\n script.setAttribute('async', '');\n script.setAttribute('charset', 'utf-8');\n return script;\n },\n\n /**\n * @function validateElement\n * Validates if passed argument is valid DOM element\n *\n * @param {object} obj\n * @returns HTMLElement\n */\n validateElement: function validateElement(obj) {\n return typeof HTMLElement === 'object' ?\n obj instanceof window.HTMLElement :\n obj &&\n typeof obj === 'object' &&\n obj !== null &&\n obj.nodeType === 1 &&\n typeof obj.nodeName === 'string';\n },\n\n /**\n * @function sdkReady\n * Checks when SDK global object is ready\n *\n * @param {string} type\n * @param {function} callback\n */\n sdkReady: function sdkReady(type, callback) {\n callback = callback || function () {};\n if (!Embedo.defaults.SOURCES[type]) {\n return callback(new Error('unsupported_sdk_type'));\n }\n var counter = 0;\n (function check() {\n counter++;\n if (counter > 15) {\n return callback(new Error(type + ':sdk_not_available'));\n }\n if (window[Embedo.defaults.SOURCES[type].GLOBAL]) {\n return callback(null, window[Embedo.defaults.SOURCES[type].GLOBAL]);\n }\n setTimeout(check, 10 * counter);\n })(type);\n },\n\n /**\n * @function querystring\n * Object to Query String\n *\n * @param {object} obj\n * @returns {string}\n */\n querystring: function querystring(obj) {\n var parts = [];\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n parts.push(encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]));\n }\n }\n\n return parts.join('&');\n },\n\n /**\n * @function fetch\n * JSONP XHR fetch\n *\n * @param {string} url\n * @param {object} options\n * @param {function} callback\n */\n fetch: function fetch(url, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n options.callback = options.callback || 'callback';\n var target = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n var jsonpCallback = 'jsonp_' + Embedo.utils.uuid();\n url += (~url.indexOf('?') ? '&' : '?') + options.callback + '=' + encodeURIComponent(jsonpCallback);\n url = url.replace('?&', '?');\n\n window[jsonpCallback] = function (data) {\n clear(jsonpCallback, script);\n callback(null, data);\n };\n\n script.type = 'text/javascript';\n script.defer = true;\n script.charset = 'UTF-8';\n script.onerror = function (err) {\n clear(jsonpCallback, script);\n return callback(err);\n };\n target.appendChild(script);\n script.src = url;\n\n function clear(jsonpCallback, script) {\n try {\n delete window[jsonpCallback];\n } catch (e) {\n window[jsonpCallback] = undefined;\n }\n if (script) {\n target.removeChild(script);\n script = undefined;\n }\n }\n },\n\n /**\n * XHR HTTP Requests\n *\n * @param {string} url\n * @param {object} options\n * @param {Function} callback\n */\n ajax: function ajax(url, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n callback = callback || function () {};\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n if (xhr.status >= 400) {\n return callback(new Error(xhr.responseText || xhr.statusText));\n }\n try {\n return callback(null, JSON.parse(xhr.responseText));\n } catch (e) {\n return callback(new Error('invalid_response'));\n }\n };\n xhr.onerror = function (err) {\n return callback(err);\n };\n xhr.open('GET', url);\n xhr.send();\n },\n\n /**\n * @function transform\n * Cross Browser CSS Transformation\n *\n * @param {HTMLElement} element\n * @param {string} props\n */\n transform: function transform(element, props) {\n if (!Embedo.utils.validateElement(element)) {\n return;\n }\n element.style.webkitTransform = props;\n element.style.MozTransform = props;\n element.style.msTransform = props;\n element.style.OTransform = props;\n element.style.transform = props;\n },\n\n /**\n * @function compute\n * Computes property value of HTMLElement\n *\n * @param {HTMLElement} el\n * @param {string} prop\n * @param {Boolean} stylesheet\n * @returns {Number}\n */\n compute: function compute(el, prop, is_computed) {\n if (!Embedo.utils.validateElement(el) || !prop) {\n return;\n }\n\n var bounds = el.getBoundingClientRect();\n var value = bounds[prop];\n\n if (is_computed || !value) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n value = document.defaultView.getComputedStyle(el, '').getPropertyValue(prop);\n } else if (el.currentStyle) {\n prop = prop.replace(/\\-(\\w)/g, function (m, p) {\n return p.toUpperCase();\n });\n value = el.currentStyle[prop];\n }\n }\n\n if (typeof value === 'string' && !/^\\d+(\\.\\d+)?%$/.test(value)) {\n value = value.replace(/[^\\d.-]/g, '');\n }\n\n return isNaN(Number(value)) ? value : Number(value);\n },\n\n /**\n * @method convertToPx\n * Calculates approximate pixel value for vw, vh or % values\n *\n * @implements relative_px\n * @implements percent_px\n */\n convertToPx: function convertToPx(el, prop, value) {\n if (!isNaN(Number(value))) {\n return Number(value);\n } else if (/^\\d+(\\.\\d+)?%$/.test(value)) {\n return percent_px(el, prop, value);\n } else if (value.match(/(vh|vw)/)) {\n var dimension = value.replace(/[0-9]/g, '');\n return relative_px(dimension, value);\n }\n\n // Converts vw or vh to PX\n function relative_px(type, value) {\n var w = window,\n d = document,\n e = d.documentElement,\n g = d.body,\n x = w.innerWidth || e.clientWidth || g.clientWidth,\n y = w.innerHeight || e.clientHeight || g.clientHeight;\n\n if (type === 'vw') {\n return (x * parseFloat(value)) / 100;\n } else if (type === 'vh') {\n return (y * parseFloat(value)) / 100;\n } else {\n return undefined;\n }\n }\n\n // Converts % to PX\n function percent_px(el, prop, percent) {\n var parent_width = Embedo.utils.compute(el.parentNode, prop, true);\n percent = parseFloat(percent);\n return parent_width * (percent / 100);\n }\n },\n\n /**\n * @function watcher\n *\n * @param {string} Identifer\n * @param {Function} Function to Trigger\n * @param {integer} timer\n *\n * @returns {Function}\n */\n watcher: function watcher(id, fn, timer) {\n window.EMBEDO_WATCHER = window.EMBEDO_WATCHER || {};\n window.EMBEDO_WATCHER[id] = window.EMBEDO_WATCHER[id] || {\n id: id,\n count: 0,\n request: null\n };\n\n if (window.EMBEDO_WATCHER[id].count > 0 && window.EMBEDO_WATCHER[id].request) {\n window.EMBEDO_WATCHER[id].count -= 1;\n clearTimeout(window.EMBEDO_WATCHER[id].request);\n }\n\n window.EMBEDO_WATCHER[id].count += 1;\n window.EMBEDO_WATCHER[id].request = setTimeout(function () {\n window.EMBEDO_WATCHER[id].count -= 1;\n if (window.EMBEDO_WATCHER[id].count === 0) {\n fn.call();\n }\n }, timer);\n\n return null;\n },\n\n /**\n * @function dimensions\n *\n * @param {HTMLElement} el\n * @param {string} width\n * @param {string} height\n *\n * @returns {object{width,height}}\n */\n dimensions: function dimensions(el, width, height) {\n var el_width = Embedo.utils.compute(el, 'width');\n width = width ?\n width :\n el_width > 0 ?\n el_width :\n Embedo.utils.compute(el.parentNode, 'width');\n height = height ?\n height :\n el_width > 0 ?\n el_width / 1.5 :\n Embedo.utils.compute(el.parentNode, 'height');\n return {\n width: width,\n height: height\n };\n },\n\n /**\n * @function centerize\n * Align an element center in relation to parent div\n *\n * @param {HTMLElement} parent_el\n * @param {HTMLElement} child_el\n * @param {object} options\n * @returns\n */\n centerize: function centerize(parent_el, child_el, options) {\n Embedo.log('info', 'centerize', parent_el, child_el, options);\n if (!Embedo.utils.validateElement(parent_el) || !Embedo.utils.validateElement(child_el)) {\n return;\n }\n options = options || {};\n\n if (options.width) {\n parent_el.style.width = options.width;\n parent_el.style.maxWidth = options.width;\n parent_el.style.marginLeft = 'auto';\n parent_el.style.marginRight = 'auto';\n }\n\n if (options.height) {\n parent_el.style.height = options.height;\n parent_el.style.maxHeight = options.height;\n }\n\n child_el.style.display = '-moz-box';\n child_el.style.display = '-ms-flexbox';\n child_el.style.display = '-webkit-flex';\n child_el.style.display = '-webkit-box';\n child_el.style.display = 'flex';\n child_el.style.textAlign = 'center';\n child_el.style['justify-content'] = 'center';\n child_el.style['align-items'] = 'center';\n child_el.style.margin = '0 auto';\n },\n\n /**\n * @function handleScriptValidation\n *\n * @param {string} url\n */\n handleScriptValidation: function handleScriptValidation(url) {\n if (!url) {\n return;\n }\n url = url.split('#')[0];\n var scripts = document.getElementsByTagName('script');\n for (var i = scripts.length; i--;) {\n if (scripts[i].src === url) {\n return true;\n }\n }\n return false;\n }\n }),\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n /**\n * Embedo Event Listeners\n * @private\n *\n * @implements on\n * @implements off\n * @implements emit\n */\n Object.defineProperties(Embedo.prototype, {\n on: {\n value: function (event, listener) {\n if (typeof this.events[event] !== 'object') {\n this.events[event] = [];\n }\n this.events[event].push(listener);\n },\n writable: false,\n configurable: false\n },\n off: {\n value: function (event, listener) {\n var index;\n if (typeof this.events[event] === 'object') {\n index = this.events[event].indexOf(listener);\n if (index > -1) {\n this.events[event].splice(index, 1);\n }\n }\n },\n writable: false,\n configurable: false\n },\n emit: {\n value: function (event) {\n var i,\n listeners,\n length,\n args = [].slice.call(arguments, 1);\n if (typeof this.events[event] === 'object') {\n listeners = this.events[event].slice();\n length = listeners.length;\n\n for (i = 0; i < length; i++) {\n listeners[i].apply(this, args);\n }\n }\n },\n writable: false,\n configurable: false\n },\n once: {\n value: function (event, listener) {\n this.on(event, function g() {\n this.off(event, g);\n listener.apply(this, arguments);\n });\n },\n writable: false,\n configurable: false\n }\n });\n\n /**\n * @method init\n * Primary Embedo initialization\n *\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.init = function (options) {\n Embedo.log('info', 'init', this.requests, options);\n\n // Append enabled SDKs to DOM\n Object.keys(Embedo.defaults.SOURCES).forEach(function (source) {\n if (Embedo.defaults.SOURCES[source].SDK) {\n appendSDK(source, options[source]);\n }\n });\n\n this.domify();\n\n /**\n * @func appendSDK\n * Injects SDK's to body\n * @private\n *\n * @param {*} type\n * @param {*} props\n */\n function appendSDK(type, props) {\n if (!type || !props) {\n return;\n }\n var sdk = Embedo.utils.replacer(Embedo.defaults.SOURCES[type.toLowerCase()].SDK, {\n locale: props.locale || window.navigator.language || 'en_US'\n });\n\n if (!Embedo.utils.handleScriptValidation(sdk)) {\n if (props && typeof props === 'object') {\n sdk += (type === 'facebook' ? '#' : '?') + Embedo.utils.querystring(props);\n }\n document.body.appendChild(Embedo.utils.generateScript(sdk));\n }\n }\n };\n\n /**\n * @method domify\n * Replaces \"data-embedo-*\" elements during initialization.\n */\n Embedo.prototype.domify = function domify() {\n var embedos = document.querySelectorAll('[data-embedo-url]');\n [].forEach.call(embedos, function (embedo_el) {\n var options = Object.keys(embedo_el.dataset || {}).reduce(function (acc, cur) {\n if (cur.indexOf('embedo') !== -1) {\n var option = Embedo.utils.camelToSnake(cur).replace('embedo-', '');\n acc[option] = embedo_el.dataset[cur];\n }\n return acc;\n }, {});\n\n this.render(embedo_el, options.url, options);\n }.bind(this));\n };\n\n /**\n * @method facebook\n * Facebook embed prototype\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.facebook = function facebook(id, element, url, options, callback) {\n var type, fb_html_class;\n\n if (/^([^\\/?].+\\/)?post|photo(s|\\.php)[\\/?].*$/gm.test(url)) {\n type = url.match(/comment_id|reply_comment_id/) ? 'comment' : 'post';\n } else if (/^([^\\/?].+\\/)?video(s|\\.php)[\\/?].*$/gm.test(url)) {\n type = 'video';\n }\n\n if (type && type.match(/post|video/)) {\n var embed_uri = Embedo.utils.replacer(Embedo.defaults.SOURCES.facebook.oEmbed, {\n type: type\n });\n var query = Embedo.utils.merge({\n url: encodeURI(url),\n omitscript: true\n },\n options,\n Embedo.defaults.RESTRICTED\n );\n\n if ('width' in options || 'maxwidth' in options) {\n query.maxwidth = options.maxwidth || options.width;\n }\n\n embed_uri += '?' + Embedo.utils.querystring(query);\n\n Embedo.utils.fetch(embed_uri, function (error, content) {\n if (error) {\n Embedo.log('error', 'facebook', error);\n return callback(error);\n }\n handleFacebookEmbed(content.html);\n });\n } else {\n if (type === 'comment' || url.match(/comment_id|reply_comment_id/)) {\n fb_html_class = 'fb-comment-embed';\n options['data-numposts'] = options['data-numposts'] || 5;\n } else if (url.match(/plugins\\/comments/)) {\n fb_html_class = 'fb-comments';\n } else {\n fb_html_class = 'fb-page';\n options['data-height'] =\n options['data-height'] || options.maxheight || options.height || 500;\n }\n\n var fb_html = Embedo.utils.generateElement(\n 'div',\n Embedo.utils.merge({\n class: fb_html_class,\n 'data-href': url,\n 'data-width': options['data-width'] || options.maxwidth || options.width || 350\n },\n options\n )\n );\n\n fb_html.removeAttribute('width');\n fb_html.removeAttribute('height');\n handleFacebookEmbed(fb_html);\n }\n\n function handleFacebookEmbed(html) {\n var container = Embedo.utils.generateEmbed(id, 'facebook', html);\n element.appendChild(container);\n\n facebookify(\n element,\n container, {\n id: id,\n url: url,\n strict: options.strict,\n width: options.width,\n height: options.height,\n centerize: options.centerize\n },\n function (err, result) {\n if (err) {\n return callback(err);\n }\n callback(null, {\n id: id,\n el: element,\n width: result.width,\n height: result.height\n });\n }\n );\n }\n };\n\n /**\n * Twitter embed prototype\n * @method twitter\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.twitter = function twitter(id, element, url, options, callback) {\n var embed_uri = Embedo.defaults.SOURCES.twitter.oEmbed;\n var query = Embedo.utils.merge({\n url: encodeURI(url),\n omit_script: 1\n },\n options,\n Embedo.defaults.RESTRICTED\n );\n\n if ('width' in options || 'maxwidth' in options) {\n query.maxwidth = options.maxwidth || options.width;\n }\n\n if ('height' in options || 'maxheight' in options) {\n query.maxheight = options.maxheight || options.height;\n }\n\n embed_uri += '?' + Embedo.utils.querystring(query);\n\n Embedo.utils.fetch(embed_uri, function (error, content) {\n if (error) {\n Embedo.log('error', 'twitter', error);\n return callback(error);\n }\n var container = Embedo.utils.generateEmbed(id, 'twitter', content.html);\n element.appendChild(container);\n\n twitterify(\n element,\n container, {\n id: id,\n url: url,\n strict: options.strict,\n width: options.width,\n height: options.height,\n centerize: options.centerize\n },\n function (err, result) {\n if (err) {\n return callback(err);\n }\n callback(null, {\n id: id,\n el: element,\n width: result.width,\n height: result.height\n });\n }\n );\n });\n };\n\n /**\n * @method instagram\n * Instagram embed prototype\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.instagram = function (id, element, url, options, callback) {\n var embed_uri = Embedo.defaults.SOURCES.instagram.oEmbed;\n var query = Embedo.utils.merge({\n url: encodeURI(url),\n omitscript: true,\n hidecaption: true\n },\n options,\n Embedo.defaults.RESTRICTED\n );\n\n if ('width' in options || 'maxwidth' in options) {\n options.width = options.maxwidth ? options.maxwidth : options.width;\n if (options.width > 320) {\n query.maxwidth = options.width;\n }\n }\n\n embed_uri += '?' + Embedo.utils.querystring(query);\n\n var method = options.jsonp ? 'jsonp' : 'ajax';\n\n Embedo.utils[method](embed_uri, function (err, content) {\n if (err) {\n Embedo.log('error', 'instagram', err);\n // If oembed or instagram embed script is unavailable.\n if (options.jsonp === undefined || options.jsonp === null) {\n var extracted_url = url.match(Embedo.defaults.SOURCES.instagram.REGEX);\n url = extracted_url && extracted_url.length > 0 ? extracted_url[0].replace(/\\/$/, '') : url;\n return this.iframe(id, element, url + '/embed/', options, callback);\n }\n return callback(err);\n }\n\n var container = Embedo.utils.generateEmbed(id, 'instagram', content.html);\n element.appendChild(container);\n\n instagramify(\n element,\n container, {\n id: id,\n url: url,\n strict: options.strict,\n width: options.width,\n height: options.height,\n centerize: options.centerize\n },\n function (err, result) {\n if (err) {\n return callback(err);\n }\n callback(null, {\n id: id,\n el: element,\n width: result.width,\n height: result.height\n });\n }\n );\n }.bind(this));\n };\n\n /**\n * @method youtube\n * YouTube embed prototype\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.youtube = function (id, element, url, options, callback) {\n if (!getYTVideoID(url)) {\n Embedo.log('error', 'youtube', 'Unable to detect Youtube video id.');\n return callback('Unable to detect Youtube video id.');\n }\n\n var youtube_uri = Embedo.defaults.SOURCES.youtube.oEmbed + getYTVideoID(url);\n youtube_uri += '?' + Embedo.utils.querystring(\n Embedo.utils.merge({\n modestbranding: 1,\n autohide: 1,\n showinfo: 0\n },\n options,\n Embedo.defaults.RESTRICTED\n )\n );\n\n this.iframe(id, element, youtube_uri, options, callback);\n\n /**\n * @func getYTVideoID\n * @private\n *\n * @param {string} url\n * @returns {String|Boolean}\n */\n function getYTVideoID(url) {\n var regexp = /(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\"&?\\/ ]{11})/i;\n var match = url.match(regexp);\n return match && match.length === 2 ? match[1] : false;\n }\n };\n\n /**\n * @method vimeo\n * Vimeo embed prototype\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.vimeo = function (id, element, url, options, callback) {\n var size = Embedo.utils.dimensions(element, options.width, options.height);\n var embed_options = Embedo.utils.merge({\n url: url,\n width: size.width,\n height: size.height,\n autohide: 1\n },\n options,\n Embedo.defaults.RESTRICTED\n );\n var embed_uri =\n Embedo.defaults.SOURCES.vimeo.oEmbed + '?' + Embedo.utils.querystring(embed_options);\n\n Embedo.utils.fetch(embed_uri, function (error, content) {\n if (error) {\n Embedo.log('error', 'vimeo', error);\n return callback(error);\n }\n var container = Embedo.utils.generateEmbed(id, 'vimeo', content.html);\n element.appendChild(container);\n\n callback(null, {\n id: id,\n el: element,\n width: size.width,\n height: size.height\n });\n });\n };\n\n /**\n * @method pinterest\n * Pinterest Embed\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.pinterest = function (id, element, url, options, callback) {\n var size = Embedo.utils.dimensions(element, options.width, options.height);\n var pin_size = size.width > 600 ? 'large' : size.width < 345 ? 'small' : 'medium';\n var pin_el = Embedo.utils.generateElement(\n 'a',\n Embedo.utils.merge({\n href: url,\n 'data-pin-do': options['data-pin-do'] || 'embedPin',\n 'data-pin-lang': options['data-pin-lang'] || 'en',\n 'data-pin-width': pin_size\n },\n options\n )\n );\n var container = Embedo.utils.generateEmbed(id, 'pinterest', pin_el);\n\n element.appendChild(container);\n\n pinterestify(\n element,\n container, {\n id: id,\n url: url,\n strict: options.strict,\n width: options.width,\n height: options.height,\n centerize: options.centerize\n },\n function (err, result) {\n if (err) {\n Embedo.log('error', 'pinterest', err);\n return callback(err);\n }\n callback(null, {\n id: id,\n el: element,\n width: result.width,\n height: result.height\n });\n }\n );\n };\n\n /**\n * @method github\n * Embed github URLs (gist) to DOM\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.github = function github(id, element, url, options, callback) {\n var size = Embedo.utils.dimensions(element, options.width, options.height);\n var iframe = Embedo.utils.generateElement('iframe',\n Embedo.utils.merge({\n width: size.width,\n height: size.height\n },\n options,\n Embedo.defaults.RESTRICTED\n )\n );\n var container = Embedo.utils.generateEmbed(id, 'github', iframe);\n\n element.appendChild(container);\n iframe.contentWindow.document.open();\n iframe.contentWindow.document.write(\n '' +\n '' +\n ''\n );\n iframe.contentWindow.document.close();\n iframe.onerror = function (err) {\n callback(err);\n };\n iframe.addEventListener(\"load\", function (event) {\n callback(null, {\n id: id,\n el: element,\n event: event,\n width: Embedo.utils.compute(container, 'width'),\n height: Embedo.utils.compute(container, 'height')\n });\n });\n };\n\n /**\n * @method soundcloud\n * SoundCloud Embed Player (api-web) prototype\n *\n * @see https://developers.soundcloud.com/docs/oembed\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.soundcloud = function (id, element, url, options, callback) {\n if (options.hasOwnProperty('width') && options.width) {\n options.maxwidth = options.maxwidth || options.width || '100%';\n }\n if (options.hasOwnProperty('height') && options.height) {\n options.maxheight = options.maxheight || options.height;\n }\n var size = Embedo.utils.dimensions(element, options.maxwidth, options.maxheight);\n var embed_options = Embedo.utils.merge({\n url: encodeURI(url),\n format: 'js' // Defaults JSONP\n },\n options,\n Embedo.defaults.RESTRICTED\n );\n var embed_uri =\n Embedo.defaults.SOURCES.soundcloud.oEmbed + '?' + Embedo.utils.querystring(embed_options);\n\n Embedo.utils.fetch(embed_uri, function (error, content) {\n if (error) {\n Embedo.log('error', 'soundcloud', error);\n return callback(error);\n }\n var container = Embedo.utils.generateEmbed(id, 'soundcloud', content.html);\n element.appendChild(container);\n\n callback(null, {\n id: id,\n el: element,\n width: size.width,\n height: size.height\n });\n });\n };\n\n /**\n * @method iframe\n * Embed URLs to HTML5 frame prototype\n *\n * @param {number} id\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.iframe = function (id, element, url, options, callback) {\n var fragment = document.createDocumentFragment();\n var size = Embedo.utils.dimensions(element, options.width, options.height);\n var extension = (url.substr(url.lastIndexOf('.')) || '').replace('.', '').toLowerCase();\n var mimes = {\n csv: 'text/csv',\n pdf: 'application/pdf',\n gif: 'image/gif',\n js: 'application/javascript',\n json: 'application/json',\n xhtml: 'application/xhtml+xml',\n pps: 'application/vnd.ms-powerpoint',\n ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n xml: 'application/xml',\n ogg: 'video/ogg',\n mp4: 'video/mp4',\n webm: 'video/webm',\n html: 'text/html'\n };\n var mimetype = mimes[extension] || mimes.html;\n var has_video = extension.match(/(mp4|ogg|webm|ogv|ogm)/);\n var el_type = has_video ? 'video' : options.tagName || 'embed';\n var override = Embedo.utils.merge({}, options, Embedo.defaults.RESTRICTED);\n var embed_el = Embedo.utils.generateElement(el_type,\n Embedo.utils.merge({\n type: mimetype,\n src: url,\n width: size.width,\n height: size.height\n },\n override\n )\n );\n\n fragment.appendChild(Embedo.utils.generateEmbed(id, 'iframe', embed_el));\n element.appendChild(fragment);\n\n if (el_type === 'video') {\n setTimeout(function () {\n callback(null, {\n id: id,\n el: element,\n width: Embedo.utils.compute(embed_el, 'width'),\n height: Embedo.utils.compute(embed_el, 'height')\n });\n }, 250);\n } else {\n embed_el.onerror = function (err) {\n callback(err);\n };\n embed_el.addEventListener(\"load\", function (event) {\n callback(null, {\n id: id,\n el: element,\n event: event,\n width: Embedo.utils.compute(embed_el, 'width'),\n height: Embedo.utils.compute(embed_el, 'height')\n });\n });\n }\n };\n\n /**\n * @method render\n * Renders an embedo instance\n *\n * @name load\n * @param {HTMLElement} element\n * @param {string} url\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.render = function (element, url, options, callback) {\n Embedo.log('info', 'render', element, url, options);\n options = options || {};\n callback = callback || function () {};\n\n if (!element || !Embedo.utils.validateElement(element)) {\n Embedo.log('info', 'render', '`element` is either missing or invalid');\n return this.emit('error', new Error('element_is_missing'));\n }\n\n if (typeof url !== 'string') {\n return this.emit('error', new Error('invalid_url_string'));\n }\n\n if (!url || !Embedo.utils.validateURL(url)) {\n Embedo.log('info', 'render', '`url` is either missing or invalid');\n return this.emit('error', new Error('invalid_or_missing_url'));\n }\n\n var source = getURLSource(url);\n\n if (!source) {\n Embedo.log('info', 'render', new Error('Invalid or Unsupported URL'));\n return this.emit('error', new Error('url_not_supported'));\n }\n\n if (!this[source]) {\n Embedo.log('info', 'render', new Error('Requested source is not implemented or missing.'));\n return this.emit('error', new Error('unrecognised_url'));\n }\n\n if ('width' in options && options.width) {\n options.width = Embedo.utils.convertToPx(element, 'width', options.width);\n }\n\n if ('height' in options && options.height) {\n options.height = Embedo.utils.convertToPx(element, 'height', options.height);\n }\n\n var id = Embedo.utils.uuid();\n var request = {\n id: id,\n el: element,\n source: source,\n url: url,\n attributes: options\n };\n\n this.requests.push(request);\n\n this.emit('watch', 'load', request);\n\n this[source](id, element, url, options,\n function (err, data) {\n if (err) {\n this.emit('error', err);\n return callback(err);\n }\n data.url = request.url;\n data.source = request.source;\n data.options = request.attributes;\n\n this.emit('watch', 'loaded', data);\n callback(null, data);\n }.bind(this)\n );\n\n /**\n * @function getURLSource\n * Checks Source from URI\n *\n * @param {string} url\n * @returns {string}\n */\n function getURLSource(url) {\n var urlRegExp = /(http|https):\\/\\/(\\w+:{0,1}\\w*)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%!\\-\\/]))?/;\n var sources = Object.keys(Embedo.defaults.SOURCES) || [];\n\n if (!urlRegExp.test(url)) {\n return null;\n }\n\n var matched_source = sources\n .filter(function (source) {\n if (Embedo.defaults.SOURCES[source] && url.match(Embedo.defaults.SOURCES[source].REGEX)) {\n return source;\n }\n })\n .filter(Boolean);\n\n return matched_source && matched_source.length ? matched_source[0] : 'iframe';\n }\n };\n\n /**\n * @method load\n * Loads single or multiple embedo instances\n *\n * @name load\n * @param {HTMLElement} element\n * @param {String|Array} urls\n * @param {object} options Optional parameters.\n * @return callback\n */\n Embedo.prototype.load = function (element, urls, options) {\n Embedo.log('info', 'load', element, urls, options);\n options = options || {};\n var observer = new Embedo.utils.observer();\n\n if (!element || !Embedo.utils.validateElement(element)) {\n Embedo.log('info', 'load', '`element` is either missing or invalid');\n this.emit('error', new Error('element_is_missing'));\n } else {\n if (urls instanceof Array) {\n var reqs = {\n failed: [],\n finished: []\n };\n var jobs = urls.map(\n function (url) {\n return function (done) {\n this.render(element, url, options, function (err, data) {\n if (err) {\n reqs.failed.push(err);\n return done(err);\n }\n reqs.finished.push(data);\n done(null, data);\n });\n }.bind(this);\n }.bind(this)\n );\n\n Embedo.utils.sequencer.apply(this, jobs).then(function () {\n if (reqs.failed.length > 0) {\n return observer.reject(reqs.failed);\n }\n observer.resolve(reqs.finished);\n });\n } else if (typeof urls === 'string') {\n this.render(element, urls, options, function (err, data) {\n if (err) {\n return observer.reject(err);\n }\n observer.resolve(data);\n });\n } else {\n this.emit('error', new Error('invalid_url_string'));\n }\n }\n\n return observer;\n };\n\n /**\n * @method refresh\n * Refresh single or all embedo instances\n *\n * @param {object} element\n */\n Embedo.prototype.refresh = function (element) {\n Embedo.log('info', 'refresh', this.requests, element);\n if (this.requests.length === 0) {\n return;\n }\n this.requests.forEach(\n function (request) {\n if (!request.el) {\n return;\n }\n\n if (request.source === 'iframe') {\n return this.emit('refresh', request, {\n width: Embedo.utils.compute(request.el, 'width'),\n height: Embedo.utils.compute(request.el, 'height')\n });\n }\n\n if (element) {\n if (!Embedo.utils.validateElement(element)) {\n return;\n }\n if (element === request.el) {\n automagic(\n request.el,\n document.getElementById(request.id),\n request.attributes,\n function (err, data) {\n if (data) {\n this.emit('refresh', request, data);\n }\n }.bind(this)\n );\n }\n } else {\n automagic(\n request.el,\n document.getElementById(request.id),\n request.attributes,\n function (err, data) {\n if (data) {\n this.emit('refresh', request, data);\n }\n }.bind(this)\n );\n }\n }.bind(this)\n );\n\n return this;\n };\n\n /**\n * @method destroy\n * Destroy an/all instance(s) of embedo\n *\n * @param {object} element\n */\n Embedo.prototype.destroy = function (element) {\n Embedo.log('warn', 'destroy', this.requests, element);\n if (this.requests.length === 0) {\n return;\n }\n var removed = [];\n\n this.requests.forEach(\n function (request) {\n if (!request.el || !Embedo.utils.validateElement(request.el)) {\n return;\n }\n if (element) {\n if (!Embedo.utils.validateElement(element)) {\n return;\n }\n if (element === request.el) {\n if (document.getElementById(request.id)) {\n document.getElementById(request.id).remove();\n }\n removed.push(request.id);\n this.emit('destroy', request);\n }\n } else {\n if (document.getElementById(request.id)) {\n document.getElementById(request.id).remove();\n }\n removed.push(request.id);\n this.emit('destroy', request);\n }\n }.bind(this)\n );\n\n this.requests = this.requests.filter(function (request) {\n return removed.indexOf(request.id) < 0;\n });\n\n return this;\n };\n\n /**\n * @function facebookify\n * Parses Facebook SDK\n *\n * @param {HTMLElement} parentNode\n * @param {HTMLElement} childNode\n * @param {object} options\n */\n function facebookify(parentNode, childNode, options, callback) {\n Embedo.utils.sdkReady('facebook', function (err) {\n if (err) {\n return callback(err);\n }\n window.FB.XFBML.parse(parentNode);\n window.FB.Event.subscribe('xfbml.render', function () {\n // First state will be `parsed` and then `rendered` to acknowledge embed.\n if (childNode.firstChild) {\n if (options.centerize !== false) {\n Embedo.utils.centerize(parentNode, childNode, options);\n }\n if (childNode.firstChild.getAttribute('fb-xfbml-state') === 'rendered') {\n automagic(parentNode, childNode, options, callback);\n }\n }\n });\n });\n }\n\n /**\n * @function twitterify\n * Parses Twitter SDK\n *\n * @param {HTMLElement} parentNode\n * @param {HTMLElement} childNode\n * @param {object} options\n */\n function twitterify(parentNode, childNode, options, callback) {\n Embedo.utils.sdkReady('twitter', function (err) {\n if (err) {\n return callback(err);\n }\n window.twttr.widgets.load(childNode);\n window.twttr.events.bind('rendered', function (event) {\n if (\n childNode.firstChild &&\n childNode.firstChild.getAttribute('id') === event.target.getAttribute('id')\n ) {\n if (options.centerize !== false) {\n Embedo.utils.centerize(parentNode, childNode, options);\n }\n automagic(parentNode, childNode, options, callback);\n }\n });\n });\n }\n\n /**\n * @function instagramify\n * Parses Instagram SDK\n *\n * @param {HTMLElement} parentNode\n * @param {HTMLElement} childNode\n * @param {object} options\n */\n function instagramify(parentNode, childNode, options, callback) {\n Embedo.utils.sdkReady('instagram', function (err) {\n if (err) {\n return callback(err);\n }\n if (!window.instgrm.Embeds || !window.instgrm.Embeds) {\n return callback(new Error('instagram_sdk_missing'));\n }\n\n window.instgrm.Embeds.process(childNode);\n var instagram_embed_timer = setInterval(handleInstagramRendered, 250);\n\n function handleInstagramRendered() {\n if (\n childNode.firstChild &&\n childNode.firstChild.className.match(/instagram-media-rendered/)\n ) {\n clearInterval(instagram_embed_timer);\n if (options.centerize !== false) {\n Embedo.utils.centerize(parentNode, childNode, options);\n }\n return automagic(parentNode, childNode, options, callback);\n }\n }\n });\n }\n\n /**\n * @function pinterestify\n * Parses Pinterest SDK\n *\n * @param {HTMLElement} parentNode\n * @param {HTMLElement} childNode\n * @param {object} options\n */\n function pinterestify(parentNode, childNode, options, callback) {\n Embedo.utils.sdkReady('pinterest', function (err) {\n if (err) {\n return callback(err);\n }\n if (!window.PinUtils || !window.PinUtils || !childNode || !childNode.firstChild) {\n return callback(new Error('pinterest_sdk_missing'));\n }\n\n setTimeout(function () {\n if (!childNode.querySelector('[data-pin-href]')) {\n window.PinUtils.build(childNode);\n }\n\n var pinterest_embed_timer_count = 0;\n var pinterest_embed_timer = setInterval(function () {\n pinterest_embed_timer_count += 1;\n if (childNode.querySelector('[data-pin-href]')) {\n clearInterval(pinterest_embed_timer);\n if (options.centerize !== false) {\n Embedo.utils.centerize(parentNode, childNode, options);\n }\n return automagic(parentNode, childNode, options, callback);\n } else if (pinterest_embed_timer_count >= 20) {\n clearInterval(pinterest_embed_timer);\n return callback(new Error('pinterest_embed_failed'));\n }\n }, 250);\n }, 750);\n });\n }\n\n /**\n * @function automagic\n * Automagic - Scales and resizes embed container\n *\n * @param {HTMLElement} parentNode\n * @param {HTMLElement} childNode\n * @param {object} options\n */\n function automagic(parentNode, childNode, options, callback) {\n Embedo.log('info', 'automagic', parentNode, childNode, options);\n options = options || {};\n callback = callback || function () {};\n\n if (!Embedo.utils.validateElement(parentNode) || !Embedo.utils.validateElement(childNode)) {\n return callback(new Error('HTMLElement does not exist in DOM.'));\n }\n\n Embedo.utils.watcher(\n options.id || Embedo.utils.uuid(),\n function () {\n var parent = {\n width: options.width || Embedo.utils.compute(parentNode, 'width'),\n height: options.height || Embedo.utils.compute(parentNode, 'height')\n };\n var child = {\n width: Embedo.utils.compute(childNode, 'width'),\n height: Embedo.utils.compute(childNode, 'height')\n };\n\n if (options.strict) {\n return callback(null, {\n width: parent.width,\n height: parent.height\n });\n }\n\n // Odd case when requested height is beyond limit of third party\n // Only apply when fixed width and heights are provided\n if (options.width && options.height) {\n var isOverflowing = child.width > parent.width || child.height > parent.height;\n\n if (options.width) {\n childNode.style.width = options.width + 'px';\n }\n\n if (options.height) {\n childNode.style.height = options.height + 'px';\n }\n\n if (isOverflowing) {\n var scale = Math.min(parent.width / child.width, parent.height / child.height);\n Embedo.utils.transform(childNode, 'scale(' + scale + ')');\n }\n }\n\n callback(null, {\n width: parent.width,\n height: parent.height\n });\n },\n 500\n );\n }\n\n return Embedo;\n});\n","import Embedo from 'embedo';\nimport './scss/main.scss';\n\n$(document).on('ready pjax:scriptcomplete', function(){\n $('oembed').each(\n function(i,item) {\n if($(this).find(\".svgcontainer\").length == 0) {\n $(this).append(`\n
\n \n \n \n \n
`);\n }\n }\n )\n\n $('oembed').off('click.embeddable');\n $('oembed').on('click.embeddable', function() {\n window.embedo = window.embedo || new Embedo({\n facebook: true,\n twitter: true,\n instagram: true,\n pinterest: true,\n youtube: true,\n vimeo: true,\n github: true,\n soundcloud: true,\n googlemaps: true\n });\n \n $(this).find(\".svgcontainer\").remove();\n const url = $(this).attr('url');\n window.embedo.load(this, url)\n .done((result) => {\n console.ls.log(result);\n })\n .fail((result) => {\n console.ls.error(result);\n })\n }); \n});\n"],"names":["root","factory","this","Embedo","options","defaults","OPTIONS","requests","events","init","automagic","parentNode","childNode","callback","log","utils","validateElement","Error","watcher","id","uuid","parent","width","compute","height","child","strict","isOverflowing","style","scale","Math","min","transform","Object","defineProperty","value","facebook","twitter","instagram","pinterest","SOURCES","GLOBAL","SDK","oEmbed","REGEX","PARAMS","version","cookie","appId","xfbml","youtube","vimeo","github","soundcloud","RESTRICTED","writable","enumerable","configurable","type","debug","console","apply","Array","prototype","slice","call","arguments","plugins","forEach","plugin","create","primary","random","secondary","toString","extend","obj","i","length","key","hasOwnProperty","merge","destination","source","preserve","property","indexOf","sequencer","args","then","done","counter","callme","replacer","str","split","join","observer","Deferred","resolved","rejected","execute","list","resolve","reject","push","fail","camelToSnake","replace","toLowerCase","validateURL","url","test","generateElement","attributes","html","el","document","createElement","keys","setAttribute","innerHTML","generateEmbed","container","appendChild","generateScript","script","src","encodeURI","HTMLElement","window","nodeType","nodeName","sdkReady","check","setTimeout","querystring","parts","encodeURIComponent","fetch","target","head","getElementsByTagName","jsonpCallback","clear","e","undefined","removeChild","data","defer","charset","onerror","err","ajax","xhr","XMLHttpRequest","onload","status","responseText","statusText","JSON","parse","open","send","element","props","webkitTransform","MozTransform","msTransform","OTransform","prop","is_computed","getBoundingClientRect","defaultView","getComputedStyle","getPropertyValue","currentStyle","m","p","toUpperCase","isNaN","Number","convertToPx","percent","parent_width","parseFloat","percent_px","match","w","d","documentElement","g","body","x","innerWidth","clientWidth","y","innerHeight","clientHeight","relative_px","fn","timer","EMBEDO_WATCHER","count","request","clearTimeout","dimensions","el_width","centerize","parent_el","child_el","maxWidth","marginLeft","marginRight","maxHeight","display","textAlign","margin","handleScriptValidation","scripts","defineProperties","on","event","listener","off","index","splice","emit","listeners","once","sdk","locale","navigator","language","appendSDK","domify","embedos","querySelectorAll","embedo_el","dataset","reduce","acc","cur","render","bind","fb_html_class","embed_uri","query","omitscript","maxwidth","error","content","handleFacebookEmbed","maxheight","fb_html","class","data-href","data-width","removeAttribute","FB","XFBML","Event","subscribe","firstChild","getAttribute","facebookify","result","omit_script","twttr","widgets","load","twitterify","hidecaption","method","jsonp","extracted_url","iframe","instgrm","Embeds","process","instagram_embed_timer","setInterval","className","clearInterval","instagramify","getYTVideoID","youtube_uri","modestbranding","autohide","showinfo","size","embed_options","pin_size","pin_el","href","data-pin-do","data-pin-lang","data-pin-width","PinUtils","querySelector","build","pinterest_embed_timer_count","pinterest_embed_timer","pinterestify","contentWindow","write","close","addEventListener","format","fragment","createDocumentFragment","extension","substr","lastIndexOf","mimes","csv","pdf","gif","js","json","xhtml","pps","ppsx","xml","ogg","mp4","webm","mimetype","el_type","tagName","override","embed_el","sources","matched_source","filter","Boolean","getURLSource","urls","reqs","failed","finished","jobs","map","refresh","getElementById","destroy","removed","remove","module","exports","$","each","item","find","append","embedo","googlemaps","attr","ls"],"mappings":"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"}