diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/images/icon.png b/main/inc/lib/javascript/ckeditor/plugins/oembed/images/icon.png new file mode 100644 index 0000000000..2ba7cce53a Binary files /dev/null and b/main/inc/lib/javascript/ckeditor/plugins/oembed/images/icon.png differ diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/de.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/de.js new file mode 100644 index 0000000000..8d914af8d0 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/de.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('oembed', 'de', { + title : "Medien Inhalt einbinden (Bilder, Video, Inhalt)", + button : "Medien Inhalt von Verschiedenen Seiten einbinden", + pasteUrl : "Fügen Sie eine Url (Gekürzte Urls werden auch erkannt) ein von einer Seite die Unterstützt wird (z.B.: YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.) ...", + invalidUrl : "Sie müssem eine korrekte URL an!", + noEmbedCode : "Kein embed Code gefunden, oder Seite wird nicht Unterstützt!", + url : "URL:", + width: "Breite:", + height: "Höhe:", + widthTitle: "Breite für den eingebundenen Inhalt", + heightTitle: "Höhe für den eingebundenen Inhalt", + maxWidth: "Max. Breite:", + maxHeight: "Max. Höhe:", + maxWidthTitle: "Maximale Breite für den eingebundenen Inhalt", + maxHeightTitle: "Maximale Höhe für den eingebundenen Inhalt", + resizeType: "Größenveränderungsmodus (Nur Video's):", + noresize: "Keine Veränderung (Standardgröße)", + responsive: "Responsive", + custom: "Eigene Größe", + autoClose: "Dialog nach einbettung automatisch schließen", + noVimeo: "Der Eigentümber dieses Videos hat Domain einschränkungen für dieses Video gesetzt das Video kann nicht in die Webseite eingebunden werden.", + Error: "Inhalt konnte nicht gefunden werden, bitte Versuchen sie eine Andere URL." +}); diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/en.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/en.js new file mode 100644 index 0000000000..d19db1a590 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/en.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('oembed', 'en', { + title: "Embed Media Content (Photo, Video, Audio, Rich)", + button: "Embed Media Content from Various Sites", + pasteUrl: "Paste an URL (Also shortened URLs are supported) from one of the Supported Sites (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.) here ...", + invalidUrl: "Please provide an valid URL!", + noEmbedCode: "No embed code found, or site is not supported!", + url: "URL:", + width: "Width:", + height: "Height:", + widthTitle: "Width for the embeded Content", + heightTitle: "Height for the embeded Content", + maxWidth: "Max. Width:", + maxHeight: "Max. Height:", + maxWidthTitle: "Maximum Width for the embeded Content", + maxHeightTitle: "Maximum Height for the embeded Content", + resizeType: "Resize Type (Only Video's):", + noresize: "No Resize (use default)", + responsive: "Responsive Resize", + custom: "Specific Resize", + autoClose: "Automatically Close Dialog after Code is Embeded", + noVimeo: "The owner of this video has set domain restrictions and you will not be able to embed it on your website.", + Error: "Media Content could not been retrieved, please try a different URL." +}); \ No newline at end of file diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/fr.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/fr.js new file mode 100644 index 0000000000..edc481aa55 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/fr.js @@ -0,0 +1,25 @@ +// French Translation by https://github.com/wissim + +CKEDITOR.plugins.setLang('oembed', 'fr', { + title : "Intégrer des contenus multimédia externes. (Photo, Video, Audio, ...)", + button : "Insérer des contenus multimédia provenant de nombreux sites.", + pasteUrl : "Coller l'URL de partage que vous voulez publier. De nombreux services sont pris en charge tels que : (YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.). Vous pouvez aussi utiliser les URLs courtes.", + invalidUrl : "Merci de fournir une URL valide !", + noEmbedCode : "Aucun code d'intégration trouvé ou le site n'est pas supporté !", + url : "URL:", + width: "Largeur:", + height: "Hauteur:", + widthTitle: "Largeur du conteneur.", + heightTitle: "Hauteur du conteneur.", + maxWidth: "Max. Largeur:", + maxHeight: "Max. Hauteur:", + maxWidthTitle: "Largeur maximale du conteneur.", + maxHeightTitle: "Hauteur maximale du conteneur.", + resizeType: "Resize Type (Only Video's):", + noresize: "No Resize (use default)", + responsive: "Responsive Resize", + custom: "Specific Resize", + autoClose: "Automatically Close Dialog after Code is Embeded", + noVimeo: "The owner of this video has set domain restrictions and you will not be able to embed it on your website.", + Error: "Media Content could not been retrieved, please try a different URL." +}); diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/nl.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/nl.js new file mode 100644 index 0000000000..b5e59ecdb4 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/nl.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('oembed', 'nl', { + title : "Integratie van media-inhoud (foto's, video, content)", + button : "Media-inhoud van externe websites", + pasteUrl : "Geef een URL van een pagina in dat ondersteund wordt (Bijv.: YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.) ...", + invalidUrl : "Please provide an valid URL!", + noEmbedCode : "No embed code found, or site is not supported!", + url : "URL:", + width: "Breedte:", + height: "Hoogte:", + widthTitle: "Width for the embeded Content", + heightTitle: "Height for the embeded Content", + maxWidth: "Maximale breedte:", + maxHeight: "Maximale hoogte:", + maxWidthTitle: "Maximum Width for the embeded Content", + maxHeightTitle: "Maximum Height for the embeded Content", + resizeType: "Resize Type (Only Video's):", + noresize: "No Resize (use default)", + responsive: "Responsive Resize", + custom: "Specific Resize", + autoClose: "Automatically Close Dialog after Code is Embeded", + noVimeo: "The owner of this video has set domain restrictions and you will not be able to embed it on your website.", + Error: "Media Content could not been retrieved, please try a different URL." +}); \ No newline at end of file diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/pl.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/pl.js new file mode 100644 index 0000000000..3a38c213db --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/pl.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('oembed', 'pl', { + title: "Osadzanie multimediów (zdjęć, filmów, dźwięku, bogatych treści)", + button: "Osadzanie multimediów z witryn zewnętrznych", + pasteUrl: "Wklej tutaj adres URL (adresy skrócone są również obsługiwane) z jednej z obsługiwanych stron (YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, itp.).", + invalidUrl: "Proszę wprowadzić prawidłowy adres URL!", + noEmbedCode: "Odnośnik nieprawidłowy lub nieobsługiwany!", + url: "URL:", + width: "szerokość:", + height: "wysokość:", + widthTitle: "Width for the embeded Content", + heightTitle: "Height for the embeded Content", + maxWidth: "Maks. szerokość:", + maxHeight: "Maks. wysokość:", + maxWidthTitle: "Maximum Width for the embeded Content", + maxHeightTitle: "Maximum Height for the embeded Content", + resizeType: "Resize Type (Only Video's):", + noresize: "No Resize (use default)", + responsive: "Responsive Resize", + custom: "Specific Resize", + autoClose: "Automatically Close Dialog after Code is Embeded", + noVimeo: "The owner of this video has set domain restrictions and you will not be able to embed it on your website.", + Error: "Media Content could not been retrieved, please try a different URL." +}); \ No newline at end of file diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/ru.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/ru.js new file mode 100644 index 0000000000..d30f69f1f9 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/lang/ru.js @@ -0,0 +1,23 @@ +CKEDITOR.plugins.setLang('oembed', 'ru', { + title : "Внедрить медиа-контент (Фото, Видео и т.д.)", + button : "Внедрить медиа-контент с различных сайтов", + pasteUrl : "Вставьте ссылку на страницы с медиа-контентом (e.g. YouTube, Flickr, Qik, Vimeo, Hulu, Viddler, MyOpera, etc.)", + invalidUrl : "Вы ввели некорректный URL", + noEmbedCode : "Не обнаружен код для вставки. Возможно, вы ввели ссылку с неподдерживаемого сайта.", + url : "URL:", + width: "ширина:", + height: "высота:", + widthTitle: "Width for the embeded Content", + heightTitle: "Height for the embeded Content", + maxWidth: "Макс. ширина:", + maxHeight: "Макс. высота:", + maxWidthTitle: "Maximum Width for the embeded Content", + maxHeightTitle: "Maximum Height for the embeded Content", + resizeType: "Resize Type (Only Video's):", + noresize: "No Resize (use default)", + responsive: "Responsive Resize", + custom: "Specific Resize", + autoClose: "Automatically Close Dialog after Code is Embeded", + noVimeo: "The owner of this video has set domain restrictions and you will not be able to embed it on your website.", + Error: "Media Content could not been retrieved, please try a different URL." +}); diff --git a/main/inc/lib/javascript/ckeditor/plugins/oembed/libs/jquery.oembed.js b/main/inc/lib/javascript/ckeditor/plugins/oembed/libs/jquery.oembed.js new file mode 100644 index 0000000000..76b5470958 --- /dev/null +++ b/main/inc/lib/javascript/ckeditor/plugins/oembed/libs/jquery.oembed.js @@ -0,0 +1,879 @@ +/*! + * jquery oembed plugin + * + * Copyright (c) 2009 Richard Chamorro + * Licensed under the MIT license + * + * Orignal Author: Richard Chamorro + * Forked by Andrew Mee to Provide a slightly diffent kind of embedding + * experience + */ +(function($) { + $.fn.oembed = function(url, options, embedAction) { + + settings = $.extend(true, $.fn.oembed.defaults, options); + var shortURLList = ["0rz.tw","1link.in","1url.com","2.gp","2big.at","2tu.us","3.ly","307.to","4ms.me","4sq.com","4url.cc","6url.com","7.ly","a.gg","a.nf","aa.cx","abcurl.net", + "ad.vu","adf.ly","adjix.com","afx.cc","all.fuseurl.com","alturl.com","amzn.to","ar.gy","arst.ch","atu.ca","azc.cc","b23.ru","b2l.me","bacn.me","bcool.bz","binged.it", + "bit.ly","bizj.us","bloat.me","bravo.ly","bsa.ly","budurl.com","canurl.com","chilp.it","chzb.gr","cl.lk", "cl.ly", "clck.ru", "cli.gs", "cliccami.info", + "clickthru.ca", "clop.in", "conta.cc", "cort.as", "cot.ag", "crks.me", "ctvr.us", "cutt.us", "dai.ly", "decenturl.com", "dfl8.me", "digbig.com", + "http:\/\/digg\.com\/[^\/]+$", "disq.us", "dld.bz", "dlvr.it", "do.my", "doiop.com", "dopen.us", "easyuri.com", "easyurl.net", "eepurl.com", "eweri.com", + "fa.by", "fav.me", "fb.me", "fbshare.me", "ff.im", "fff.to", "fire.to", "firsturl.de", "firsturl.net", "flic.kr", "flq.us", "fly2.ws", "fon.gs", "freak.to", + "fuseurl.com", "fuzzy.to", "fwd4.me", "fwib.net", "g.ro.lt", "gizmo.do", "gl.am", "go.9nl.com", "go.ign.com", "go.usa.gov", "goo.gl", "goshrink.com", "gurl.es", + "hex.io", "hiderefer.com", "hmm.ph", "href.in", "hsblinks.com", "htxt.it", "huff.to", "hulu.com", "hurl.me", "hurl.ws", "icanhaz.com", "idek.net", "ilix.in", "is.gd", + "its.my", "ix.lt", "j.mp", "jijr.com", "kl.am", "klck.me", "korta.nu", "krunchd.com", "l9k.net", "lat.ms", "liip.to", "liltext.com", "linkbee.com", "linkbun.ch", + "liurl.cn", "ln-s.net", "ln-s.ru", "lnk.gd", "lnk.ms", "lnkd.in", "lnkurl.com", "lru.jp", "lt.tl", "lurl.no", "macte.ch", "mash.to", "merky.de", "migre.me", "miniurl.com", + "minurl.fr", "mke.me", "moby.to", "moourl.com", "mrte.ch", "myloc.me", "myurl.in", "n.pr", "nbc.co", "nblo.gs", "nn.nf", "not.my", "notlong.com", "nsfw.in", + "nutshellurl.com", "nxy.in", "nyti.ms", "o-x.fr", "oc1.us", "om.ly", "omf.gd", "omoikane.net", "on.cnn.com", "on.mktw.net", "onforb.es", "orz.se", "ow.ly", "ping.fm", + "pli.gs", "pnt.me", "politi.co", "post.ly", "pp.gg", "profile.to", "ptiturl.com", "pub.vitrue.com", "qlnk.net", "qte.me", "qu.tc", "qy.fi", "r.ebay.com", "r.im", "rb6.me", "read.bi", + "readthis.ca", "reallytinyurl.com", "redir.ec", "redirects.ca", "redirx.com", "retwt.me", "ri.ms", "rickroll.it", "riz.gd", "rt.nu", "ru.ly", "rubyurl.com", "rurl.org", + "rww.tw", "s4c.in", "s7y.us", "safe.mn", "sameurl.com", "sdut.us", "shar.es", "shink.de", "shorl.com", "short.ie", "short.to", "shortlinks.co.uk", "shorturl.com", + "shout.to", "show.my", "shrinkify.com", "shrinkr.com", "shrt.fr", "shrt.st", "shrten.com", "shrunkin.com", "simurl.com", "slate.me", "smallr.com", "smsh.me", "smurl.name", + "sn.im", "snipr.com", "snipurl.com", "snurl.com", "sp2.ro", "spedr.com", "srnk.net", "srs.li", "starturl.com","stks.co", "su.pr", "surl.co.uk", "surl.hu", "t.cn", "t.co", "t.lh.com", + "ta.gd", "tbd.ly", "tcrn.ch", "tgr.me", "tgr.ph", "tighturl.com", "tiniuri.com", "tiny.cc", "tiny.ly", "tiny.pl", "tinylink.in", "tinyuri.ca", "tinyurl.com", "tk.", "tl.gd", + "tmi.me", "tnij.org", "tnw.to", "tny.com", "to.ly", "togoto.us", "totc.us", "toysr.us", "tpm.ly", "tr.im", "tra.kz", "trunc.it", "twhub.com", "twirl.at", + "twitclicks.com", "twitterurl.net", "twitterurl.org", "twiturl.de", "twurl.cc", "twurl.nl", "u.mavrev.com", "u.nu", "u76.org", "ub0.cc", "ulu.lu", "updating.me", "ur1.ca", + "url.az", "url.co.uk", "url.ie", "url360.me", "url4.eu", "urlborg.com", "urlbrief.com", "urlcover.com", "urlcut.com", "urlenco.de", "urli.nl", "urls.im", + "urlshorteningservicefortwitter.com", "urlx.ie", "urlzen.com", "usat.ly", "use.my", "vb.ly", "vevo.ly", "vgn.am", "vl.am", "vm.lc", "w55.de", "wapo.st", "wapurl.co.uk", "wipi.es", + "wp.me", "x.vu", "xr.com", "xrl.in", "xrl.us", "xurl.es", "xurl.jp", "y.ahoo.it", "yatuc.com", "ye.pe", "yep.it", "yfrog.com", "yhoo.it", "yiyd.com", "youtu.be", "yuarel.com", + "z0p.de", "zi.ma", "zi.mu", "zipmyurl.com", "zud.me", "zurl.ws", "zz.gd", "zzang.kr", "›.ws", "✩.ws", "✿.ws", "❥.ws", "➔.ws", "➞.ws", "➡.ws", "➨.ws", "➯.ws", "➹.ws", "➽.ws"]; + + if ($('#jqoembeddata').length === 0) $('').appendTo('body'); + + return this.each(function() { + + var container = $(this), + resourceURL = (url && (!url.indexOf('http://') || !url.indexOf('https://'))) ? url : container.attr("href"), + provider; + + if (embedAction) { + settings.onEmbed = embedAction; + } + else if (!settings.onEmbed){ + settings.onEmbed = function(oembedData) { + $.fn.oembed.insertCode(this, settings.embedMethod, oembedData); + }; + } + + if (resourceURL !== null && resourceURL !== undefined) { + //Check if shorten URL + for (var j = 0, l =shortURLList.length; j < l; j++) { + var regExp = new RegExp('://'+shortURLList[j]+'/', "i"); + if (resourceURL.match(regExp) !== null) { + //AJAX to http://api.longurl.org/v2/expand?url=http://bit.ly/JATvIs&format=json&callback=hhh + var ajaxopts = $.extend({ + url: "http://api.longurl.org/v2/expand", + dataType: 'jsonp', + data: { + url: resourceURL, + format: "json" + //callback: "?" + }, + success: function(data) { + //this = $.fn.oembed; + resourceURL = data['long-url']; + provider = $.fn.oembed.getOEmbedProvider(data['long-url']); + + if (provider !== null) { + provider.params = getNormalizedParams(settings[provider.name]) || {}; + provider.maxWidth = settings.maxWidth; + provider.maxHeight = settings.maxHeight; + embedCode(container, resourceURL, provider); + } else { + settings.onProviderNotFound.call(container, resourceURL); + } + } + }, settings.ajaxOptions || {}); + + $.ajax(ajaxopts); + + return container; + } + } + provider = $.fn.oembed.getOEmbedProvider(resourceURL); + + if (provider !== null) { + provider.params = getNormalizedParams(settings[provider.name]) || {}; + provider.maxWidth = settings.maxWidth; + provider.maxHeight = settings.maxHeight; + embedCode(container, resourceURL, provider); + } else { + settings.onProviderNotFound.call(container, resourceURL); + } + } + + return container; + }); + + + }; + + var settings; + + // Plugin defaults + $.fn.oembed.defaults = { + maxWidth: null, + maxHeight: null, + useResponsiveResize: false, + includeHandle: true, + embedMethod: 'auto', + // "auto", "append", "fill" + onProviderNotFound: function() {}, + beforeEmbed: function() {}, + afterEmbed: function() {}, + onEmbed: false, + onError: function() {}, + ajaxOptions: { timeout: 2000 } + }; + + /* + * check protocol + * @return The protocol correct. + */ + function checkProtocol() { + var protocol = window.location.protocol; + + // fix local + if (protocol === "file:") { + return "http://"; + } else { + protocol += "//"; + } + + return protocol; + } + + /* Private functions */ + function rand(length,current){ //Found on http://stackoverflow.com/questions/1349404/generate-a-string-of-5-random-characters-in-javascript + current = current ? current : ''; + return length ? rand( --length , "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt( Math.floor( Math.random() * 60 ) ) + current ) : current; + } + + function getRequestUrl(provider, externalUrl) { + var url = provider.apiendpoint, + qs = "", + i; + url += (url.indexOf("?") <= 0) ? "?" : "&"; + url = url.replace('#','%23'); + + if (provider.maxWidth !== null && (typeof provider.params.maxwidth === 'undefined' || provider.params.maxwidth === null)) { + provider.params.maxwidth = provider.maxWidth; + } + + if (provider.maxHeight !== null && (typeof provider.params.maxheight === 'undefined' || provider.params.maxheight === null)) { + provider.params.maxheight = provider.maxHeight; + } + + for (i in provider.params) { + // We don't want them to jack everything up by changing the callback parameter + if (i == provider.callbackparameter) continue; + + // allows the options to be set to null, don't send null values to the server as parameters + if (provider.params[i] !== null) qs += "&" + escape(i) + "=" + provider.params[i]; + } + + url += "format=" + provider.format + "&url=" + escape(externalUrl) + qs; + if(provider.dataType!='json') url += "&" + provider.callbackparameter + "=?"; + + return url; + } + function success(oembedData, externalUrl, container) { + $('#jqoembeddata').data(externalUrl, oembedData.code); + settings.beforeEmbed.call(container, oembedData); + settings.onEmbed.call(container, oembedData); + settings.afterEmbed.call(container, oembedData); + } + + function embedCode(container, externalUrl, embedProvider) { + if ($('#jqoembeddata').data(externalUrl)!=undefined && embedProvider.embedtag.tag!='iframe'){ + var oembedData = {code: $('#jqoembeddata').data(externalUrl)}; + success(oembedData, externalUrl, container); + }else if (embedProvider.yql) { + var from = embedProvider.yql.from || 'htmlstring'; + var url = embedProvider.yql.url ? embedProvider.yql.url(externalUrl) : externalUrl; + var query = 'SELECT * FROM ' + + from + + ' WHERE url="' + (url) + '"' + + " and " + (/html/.test(from) ? 'xpath' : 'itemPath') + "='" + (embedProvider.yql.xpath || '/')+"'" ; + if(from=='html') query += " and compat='html5'"; + var ajaxopts = $.extend({ + url: checkProtocol() + "query.yahooapis.com/v1/public/yql", + dataType: 'jsonp', + data: { + q: query, + format: "json", + env: 'store://datatables.org/alltableswithkeys', + callback: "?" + }, + success: function(data) { + var result; + if(embedProvider.yql.xpath && embedProvider.yql.xpath=='//meta|//title|//link'){ + var meta={}; + if (data.query.results == null) { + data.query.results = {"meta": []}; + } + for(var i=0, l=data.query.results.meta.length; i settings.maxWidth) { + ratio = settings.maxWidth / width; + + newWidth = settings.maxWidth; + newHeight = height * ratio; + + // reset + height = height * ratio; + width = width * ratio; + } + + // Check if current height is larger than max + if (height > settings.maxHeight) { + ratio = settings.maxHeight / height; + + newHeight = settings.maxHeight; + newWidth = width * ratio; + + // reset + width = width * ratio; + } + + height = newHeight; + width = newWidth; + } else { + height = settings.maxHeight; + width = settings.maxWidth; + } + + } + + var code = $('<'+tag+'/>') + .attr('src',src) + .attr('width',width) + .attr('height',height) + .attr('allowfullscreen',embedProvider.embedtag.allowfullscreen || 'true') + .attr('allowscriptaccess',embedProvider.embedtag.allowfullscreen || 'always') + .css('max-height', settings.maxHeight || 'auto' ) + .css('max-width', settings.maxWidth || 'auto' ); + if(tag=='embed') + code + .attr('type',embedProvider.embedtag.type || "application/x-shockwave-flash") + .attr('flashvars',externalUrl.replace(embedProvider.templateRegex,flashvars)); + if(tag=='iframe') + code + .attr('scrolling',embedProvider.embedtag.scrolling || "no") + .attr('frameborder',embedProvider.embedtag.frameborder || "0"); + + + var oembedData = {code: code}; + success(oembedData, externalUrl,container); + }else if (embedProvider.apiendpoint) { + //Add APIkey if true + if (embedProvider.apikey) embedProvider.apiendpoint = embedProvider.apiendpoint.replace('_APIKEY_', settings.apikeys[embedProvider.name]); + ajaxopts = $.extend({ + url: externalUrl.replace(embedProvider.templateRegex, embedProvider.apiendpoint), + dataType: 'jsonp', + success: function(data) { + var oembedData = $.extend({}, data); + oembedData.code = embedProvider.templateData(data); + success(oembedData, externalUrl, container); + }, + error: function () { + settings.onError.call(container, externalUrl, embedProvider); + } + }, settings.ajaxOptions || {}); + + $.ajax( ajaxopts ); + }else { + var oembedData = {code: externalUrl.replace(embedProvider.templateRegex,embedProvider.template)}; + success(oembedData, externalUrl,container); + } + } else { + + var requestUrl = getRequestUrl(embedProvider, externalUrl), + ajaxopts = $.extend({ + url: requestUrl, + dataType: embedProvider.dataType || 'jsonp', + success: function(data) { + var oembedData = $.extend({}, data); + switch (oembedData.type) { + case "file": //Deviant Art has this + case "photo": + oembedData.code = $.fn.oembed.getPhotoCode(externalUrl, oembedData); + break; + case "video": + case "rich": + oembedData.code = $.fn.oembed.getRichCode(externalUrl, oembedData); + break; + default: + oembedData.code = $.fn.oembed.getGenericCode(externalUrl, oembedData); + break; + } + success(oembedData, externalUrl, container); + }, + error: function () { + settings.onError.call(container, externalUrl, embedProvider); + } + }, settings.ajaxOptions || {}); + + $.ajax(ajaxopts); + } + }; + + function getNormalizedParams(params) { + if (params === null) return null; + var key, normalizedParams = {}; + for (key in params) { + if (key !== null) normalizedParams[key.toLowerCase()] = params[key]; + } + return normalizedParams; + } + + /* Public functions */ + $.fn.oembed.insertCode = function(container, embedMethod, oembedData) { + if (oembedData === null) return; + if(embedMethod=='auto' && container.attr("href") !== null) embedMethod='append'; + else if(embedMethod=='auto') embedMethod='replace'; + switch (embedMethod) { + case "replace": + container.replaceWith(oembedData.code); + break; + case "fill": + container.html(oembedData.code); + break; + case "append": + container.wrap('
'); + var oembedContainer = container.parent(); + if (settings.includeHandle) { + $('').insertBefore(container).click(function() { + var encodedString = encodeURIComponent($(this).text()); + $(this).html((encodedString == '%E2%86%91') ? '↓' : '↑'); + $(this).parent().children().last().toggle(); + }); + } + oembedContainer.append('
'); + try { + oembedData.code.clone().appendTo(oembedContainer); + } catch(e) { + oembedContainer.append(oembedData.code); + } + /* Make videos semi-responsive + * If parent div width less than embeded iframe video then iframe gets shrunk to fit smaller width + * If parent div width greater thans embed iframe use the max widht + * - works on youtubes and vimeo + */ + /*if (settings.maxWidth) { + var post_width = oembedContainer.parent().width(); + if (post_width < settings.maxWidth && settings.useResponsiveResize) + { + var iframe_width_orig = $('iframe',oembedContainer).width(); + var iframe_height_orig = $('iframe',oembedContainer).height(); + var ratio = iframe_width_orig / post_width; + $('iframe',oembedContainer).width(iframe_width_orig / ratio); + $('iframe',oembedContainer).height(iframe_height_orig / ratio); + } else { + if(settings.maxWidth){ + $('iframe',oembedContainer).width(settings.maxWidth); + } + if(settings.maxHeight){ + $('iframe',oembedContainer).height(settings.maxHeight); + } + } + }*/ + break; + } + }; + + $.fn.oembed.getPhotoCode = function(url, oembedData) { + var code, alt = oembedData.title ? oembedData.title : ''; + alt += oembedData.author_name ? ' - ' + oembedData.author_name : ''; + alt += oembedData.provider_name ? ' - ' + oembedData.provider_name : ''; + code = '
' + alt + '
'; + if (oembedData.html) code += "
" + oembedData.html + "
"; + return code; + }; + + $.fn.oembed.getRichCode = function(url, oembedData) { + var code = oembedData.html; + return code; + }; + + $.fn.oembed.getGenericCode = function(url, oembedData) { + var title = (oembedData.title !== null) ? oembedData.title : url, + code = '' + title + ''; + if (oembedData.html) code += "
" + oembedData.html + "
"; + return code; + }; + + $.fn.oembed.getOEmbedProvider = function(url) { + for (var i = 0; i < $.fn.oembed.providers.length; i++) { + for (var j = 0, l =$.fn.oembed.providers[i].urlschemes.length; j < l; j++) { + var regExp = new RegExp($.fn.oembed.providers[i].urlschemes[j], "i"); + if (url.match(regExp) !== null) return $.fn.oembed.providers[i]; + } + } + return null; + }; + + $.fn.oembed.OEmbedProvider = function(name, type, urlschemesarray, apiendpoint, extraSettings) { + this.name = name; + this.type = type; // "photo", "video", "link", "rich", null + this.urlschemes = urlschemesarray; + this.apiendpoint = apiendpoint; + this.maxWidth = 500; + this.maxHeight = 400; + extraSettings =extraSettings ||{}; + + if(extraSettings.useYQL){ + + if(extraSettings.useYQL=='xml'){ + extraSettings.yql = {xpath:"//oembed/html", from:'xml' + , apiendpoint: this.apiendpoint + , url: function(externalurl){return this.apiendpoint+'?format=xml&url='+externalurl; } + , datareturn:function(results){return results.html.replace(/.*\[CDATA\[(.*)\]\]>$/,'$1') || ''; } + }; + }else{ + extraSettings.yql = {from:'json' + , apiendpoint: this.apiendpoint + , url: function(externalurl){return this.apiendpoint+'?format=json&url='+externalurl; } + , datareturn:function(results){ + if (results.json.type != 'video' && (results.json.url || results.json.thumbnail_url)) { + return ''; + } + return results.json.html || ''; + } + }; + } + this.apiendpoint = null; + } + + + for (var property in extraSettings) { + this[property] = extraSettings[property]; + } + + this.format = this.format || 'json'; + this.callbackparameter = this.callbackparameter || "callback"; + this.embedtag = this.embedtag || {tag:""}; + + + }; + + /* Native & common providers */ + $.fn.oembed.providers = [ + + //Video + new $.fn.oembed.OEmbedProvider("youtube", "video", ["youtube\\.com/watch.+v=[\\w-]+&?", "youtu\\.be/[\\w-]+", "youtube.com/embed"], checkProtocol() + 'www.youtube.com/embed/$1?wmode=transparent', { + templateRegex: /.*(?:v\=|be\/|embed\/)([\w\-]+)&?.*/,embedtag: {tag: 'iframe',width: '425',height: '349'} + }), + + //new $.fn.oembed.OEmbedProvider("youtube", "video", ["youtube\\.com/watch.+v=[\\w-]+&?", "youtu\\.be/[\\w-]+"], checkProtocol() + 'www.youtube.com/oembed', {useYQL:'json'}), + //new $.fn.oembed.OEmbedProvider("youtubeiframe", "video", ["youtube.com/embed"], "$1?wmode=transparent", + // {templateRegex:/(.*)/,embedtag : {tag: 'iframe', width:'425',height: '349'}}), + new $.fn.oembed.OEmbedProvider("wistia", "video", ["wistia.com/m/.+", "wistia.com/embed/.+","wi.st/m/.+","wi.st/embed/.+"], 'http://fast.wistia.com/oembed', {useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("xtranormal", "video", ["xtranormal\\.com/watch/.+"], "http://www.xtranormal.com/xtraplayr/$1/$2", { + templateRegex: /.*com\/watch\/([\w\-]+)\/([\w\-]+).*/,embedtag: {tag: 'iframe',width: '320',height: '269'}}), + new $.fn.oembed.OEmbedProvider("scivee", "video", ["scivee.tv/node/.+"], "http://www.scivee.tv/flash/embedCast.swf?", { + templateRegex: /.*tv\/node\/(.+)/,embedtag: {width: '480',height: '400',flashvars:"id=$1&type=3"}}), + new $.fn.oembed.OEmbedProvider("veoh", "video", ["veoh.com/watch/.+"], "http://www.veoh.com/swf/webplayer/WebPlayer.swf?version=AFrontend.5.7.0.1337&permalinkId=$1&player=videodetailsembedded&videoAutoPlay=0&id=anonymous", { + templateRegex: /.*watch\/([^\?]+).*/,embedtag: {width: '410',height: '341'}}), + new $.fn.oembed.OEmbedProvider("gametrailers", "video", ["gametrailers\\.com/video/.+"], "http://media.mtvnservices.com/mgid:moses:video:gametrailers.com:$2", { + templateRegex: /.*com\/video\/([\w\-]+)\/([\w\-]+).*/,embedtag: {width: '512',height: '288' }}), + new $.fn.oembed.OEmbedProvider("funnyordie", "video", ["funnyordie\\.com/videos/.+"], "http://player.ordienetworks.com/flash/fodplayer.swf?", { + templateRegex: /.*videos\/([^\/]+)\/([^\/]+)?/,embedtag: {width: 512,height: 328,flashvars: "key=$1"}}), + new $.fn.oembed.OEmbedProvider("colledgehumour", "video", ["collegehumor\\.com/video/.+"],"http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=$1&use_node_id=true&fullscreen=1", + {templateRegex:/.*video\/([^\/]+).*/ , embedtag : {width:600,height: 338}}), + new $.fn.oembed.OEmbedProvider("metacafe", "video", ["metacafe\\.com/watch/.+"],"http://www.metacafe.com/fplayer/$1/$2.swf", + {templateRegex:/.*watch\/(\d+)\/(\w+)\/.*/ , embedtag : {width:400,height: 345}}), + new $.fn.oembed.OEmbedProvider("bambuser", "video", ["bambuser\\.com\/channel\/.*\/broadcast\/.*"],"http://static.bambuser.com/r/player.swf?vid=$1", + {templateRegex:/.*bambuser\.com\/channel\/.*\/broadcast\/(\w+).*/ , embedtag : {width:512,height: 339 }}), + new $.fn.oembed.OEmbedProvider("twitvid", "video", ["twitvid\\.com/.+"],"http://www.twitvid.com/embed.php?guid=$1&autoplay=0", + {templateRegex:/.*twitvid\.com\/(\w+).*/ , embedtag : {tag:'iframe',width:480,height: 360 }}), + + new $.fn.oembed.OEmbedProvider("aniboom", "video", ["aniboom\\.com/animation-video/.+"],"http://api.aniboom.com/e/$1", + {templateRegex:/.*animation-video\/(\d+).*/ , embedtag : {width:594,height: 334}}), + + new $.fn.oembed.OEmbedProvider("vzaar", "video", ["vzaar\\.com/videos/.+","vzaar.tv/.+"],"http://view.vzaar.com/$1/player?", + {templateRegex:/.*\/(\d+).*/, embedtag : {tag:'iframe',width:576,height: 324 }}), + new $.fn.oembed.OEmbedProvider("snotr", "video", ["snotr\\.com/video/.+"],"http://www.snotr.com/embed/$1", + {templateRegex:/.*\/(\d+).*/, embedtag : {tag:'iframe',width:400,height: 330, nocache:1 }}), + + new $.fn.oembed.OEmbedProvider("youku", "video", ["v.youku.com/v_show/id_.+"],"http://player.youku.com/player.php/sid/$1/v.swf", + {templateRegex:/.*id_(.+)\.html.*/, embedtag : {width:480,height:400, nocache:1 }}), + new $.fn.oembed.OEmbedProvider("tudou", "video", ["tudou.com/programs/view/.+\/"],"http://www.tudou.com/v/$1/v.swf", + {templateRegex:/.*view\/(.+)\//, embedtag : {width:480,height:400, nocache:1 }}), + + new $.fn.oembed.OEmbedProvider("embedr", "video", ["embedr\\.com/playlist/.+"],"http://embedr.com/swf/slider/$1/425/520/default/false/std?", + {templateRegex:/.*playlist\/([^\/]+).*/, embedtag : {width:425,height: 520}}), + new $.fn.oembed.OEmbedProvider("blip", "video", ["blip\\.tv/.+"], "http://blip.tv/oembed/"), + new $.fn.oembed.OEmbedProvider("minoto-video", "video", ["http://api.minoto-video.com/publishers/.+/videos/.+","http://dashboard.minoto-video.com/main/video/details/.+","http://embed.minoto-video.com/.+"], "http://api.minoto-video.com/services/oembed.json",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("animoto", "video", ["animoto.com/play/.+"], "http://animoto.com/services/oembed"), + new $.fn.oembed.OEmbedProvider("hulu", "video", ["hulu\\.com/watch/.*"], "http://www.hulu.com/api/oembed.json"), + new $.fn.oembed.OEmbedProvider("ustream", "video", ["ustream\\.tv/recorded/.*"], "http://www.ustream.tv/oembed",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("videojug", "video", ["videojug\\.com/(film|payer|interview).*"], "http://www.videojug.com/oembed.json",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("sapo", "video", ["videos\\.sapo\\.pt/.*"], "http://videos.sapo.pt/oembed",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("vodpod", "video", ["vodpod.com/watch/.*"], "http://vodpod.com/oembed.js",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("vimeo", "video", ["www\.vimeo\.com\/groups\/.*\/videos\/.*", "www\.vimeo\.com\/.*", "vimeo\.com\/groups\/.*\/videos\/.*", "vimeo\.com\/.*"], "//vimeo.com/api/oembed.json"), + new $.fn.oembed.OEmbedProvider("dailymotion", "video", ["dailymotion\\.com/.+"],'http://www.dailymotion.com/services/oembed'), + new $.fn.oembed.OEmbedProvider("5min", "video", ["www\\.5min\\.com/.+"], 'http://api.5min.com/oembed.xml',{useYQL:'xml'}), + new $.fn.oembed.OEmbedProvider("National Film Board of Canada", "video", ["nfb\\.ca/film/.+"],'http://www.nfb.ca/remote/services/oembed/',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("qik", "video", ["qik\\.com/\\w+"], 'http://qik.com/api/oembed.json',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("revision3", "video", ["revision3\\.com"], "http://revision3.com/api/oembed/"), + new $.fn.oembed.OEmbedProvider("dotsub", "video", ["dotsub\\.com/view/.+"], "http://dotsub.com/services/oembed",{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("clikthrough", "video", ["clikthrough\\.com/theater/video/\\d+"], "http://clikthrough.com/services/oembed"), + new $.fn.oembed.OEmbedProvider("Kinomap", "video", ["kinomap\\.com/.+"], "http://www.kinomap.com/oembed"), + new $.fn.oembed.OEmbedProvider("VHX", "video", ["vhx.tv/.+"], "http://vhx.tv/services/oembed.json"), + new $.fn.oembed.OEmbedProvider("bambuser", "video", ["bambuser.com/.+"], "http://api.bambuser.com/oembed/iframe.json"), + new $.fn.oembed.OEmbedProvider("justin.tv", "video", ["justin.tv/.+"], 'http://api.justin.tv/api/embed/from_url.json',{useYQL:'json'}), + + + //Audio + new $.fn.oembed.OEmbedProvider("official.fm", "rich", ["official.fm/.+"], 'http://official.fm/services/oembed',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("chirbit", "rich", ["chirb.it/.+"], 'http://chirb.it/oembed.json',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("Huffduffer", "rich", ["huffduffer.com/[-.\\w@]+/\\d+"], "http://huffduffer.com/oembed"), + new $.fn.oembed.OEmbedProvider("Spotify", "rich", ["open.spotify.com/(track|album)/"], "https://embed.spotify.com/oembed/"), + new $.fn.oembed.OEmbedProvider("shoudio", "rich", ["shoudio.com/.+","shoud.io/.+"], "http://shoudio.com/api/oembed"), + new $.fn.oembed.OEmbedProvider("mixcloud", "rich", ["mixcloud.com/.+"], checkProtocol() + 'www.mixcloud.com/oembed/', { useYQL: 'json' }), + new $.fn.oembed.OEmbedProvider("rdio.com", "rich", ["rd.io/.+", "rdio.com"], checkProtocol() + "www.rdio.com/api/oembed/"), + new $.fn.oembed.OEmbedProvider("Soundcloud", "rich", ["soundcloud.com/.+", "snd.sc/.+"], checkProtocol() + "soundcloud.com/oembed", { format: 'js' }), + new $.fn.oembed.OEmbedProvider("bandcamp", "rich", ["bandcamp\\.com/album/.+"], null, + {yql:{xpath:"//meta[contains(@content, \\'EmbeddedPlayer\\')]", from:'html' + , datareturn:function(results){ + return results.meta ?'':false; + } + } + }), + + //Photo + new $.fn.oembed.OEmbedProvider("deviantart", "photo", ["deviantart.com/.+","fav.me/.+","deviantart.com/.+"], "http://backend.deviantart.com/oembed",{format:'jsonp'}), + new $.fn.oembed.OEmbedProvider("skitch", "photo", ["skitch.com/.+"], null, + {yql:{xpath:"json", from:'json' + , url: function(externalurl){return 'http://skitch.com/oembed/?format=json&url='+externalurl; } + , datareturn:function(data){return $.fn.oembed.getPhotoCode( data.json.url, data.json);} + } + }), + new $.fn.oembed.OEmbedProvider("mobypicture", "photo", ["mobypicture.com/user/.+/view/.+","moby.to/.+"], "http://api.mobypicture.com/oEmbed"), + new $.fn.oembed.OEmbedProvider("flickr", "photo", ["flickr\\.com/photos/.+"], "http://flickr.com/services/oembed",{callbackparameter:'jsoncallback'}), + new $.fn.oembed.OEmbedProvider("photobucket", "photo", ["photobucket\\.com/(albums|groups)/.+"], checkProtocol() + "photobucket.com/oembed/"), + new $.fn.oembed.OEmbedProvider("instagram", "photo", ["instagr\\.?am(\\.com)?/.+"], checkProtocol() + "api.instagram.com/oembed"), + //new $.fn.oembed.OEmbedProvider("yfrog", "photo", ["yfrog\\.(com|ru|com\\.tr|it|fr|co\\.il|co\\.uk|com\\.pl|pl|eu|us)/.+"], checkProtocol() + "www.yfrog.com/api/oembed",{useYQL:"json"}), + new $.fn.oembed.OEmbedProvider("SmugMug", "photo", ["smugmug.com/[-.\\w@]+/.+"], "http://api.smugmug.com/services/oembed/"), + + new $.fn.oembed.OEmbedProvider("dribbble", "photo", ["dribbble.com/shots/.+"], "http://api.dribbble.com/shots/$1?callback=?", + { templateRegex:/.*shots\/([\d]+).*/, + templateData : function(data){if(!data.image_teaser_url)return false; + return ''; + } + }), + new $.fn.oembed.OEmbedProvider("chart.ly", "photo", ["chart\\.ly/[a-z0-9]{6,8}"],"http://chart.ly/uploads/large_$1.png", + {templateRegex:/.*ly\/([^\/]+).*/ , embedtag : {tag:'img'},nocache:1}), + //new $.fn.oembed.OEmbedProvider("stocktwits.com", "photo", ["stocktwits\\.com/message/.+"], "http://charts.stocktwits.com/production/original_$1.png?", + // { templateRegex: /.*message\/([^\/]+).*/, embedtag: { tag: 'img'},nocache:1 }), + new $.fn.oembed.OEmbedProvider("circuitlab", "photo", ["circuitlab.com/circuit/.+"],"https://www.circuitlab.com/circuit/$1/screenshot/540x405/", + {templateRegex:/.*circuit\/([^\/]+).*/ , embedtag : {tag:'img'},nocache:1}), + new $.fn.oembed.OEmbedProvider("23hq", "photo", ["23hq.com/[-.\\w@]+/photo/.+"],"http://www.23hq.com/23/oembed",{useYQL:"json"}), + new $.fn.oembed.OEmbedProvider("img.ly", "photo", ["img\\.ly/.+"],"http://img.ly/show/thumb/$1", + {templateRegex:/.*ly\/([^\/]+).*/ , embedtag : {tag:'img'},nocache:1 + }), + new $.fn.oembed.OEmbedProvider("twitgoo.com", "photo", ["twitgoo\\.com/.+"],"http://twitgoo.com/show/thumb/$1", + {templateRegex:/.*com\/([^\/]+).*/ , embedtag : {tag:'img'},nocache:1}), + new $.fn.oembed.OEmbedProvider("imgur.com", "photo", ["imgur\\.com/gallery/.+"], checkProtocol() + "imgur.com/$1l.jpg", + {templateRegex:/.*gallery\/([^\/]+).*/ , embedtag : {tag:'img'},nocache:1}), + new $.fn.oembed.OEmbedProvider("visual.ly", "rich", ["visual\\.ly/.+"], null, + {yql:{xpath:"//a[@id=\\'gc_article_graphic_image\\']/img", from:'htmlstring'} + }), + new $.fn.oembed.OEmbedProvider("gravtar", "photo", ["mailto:.+"],null, + {templateRegex:/mailto:([^\/]+).*/ + , template : function(wm,email){ + return 'on Gravtar'; + } + }), + + //Rich + new $.fn.oembed.OEmbedProvider("twitter", "rich", ["twitter.com/.+"], "https://api.twitter.com/1/statuses/oembed.json"), + new $.fn.oembed.OEmbedProvider("gmep", "rich", ["gmep.imeducate.com/.*","gmep.org/.*"], "http://gmep.org/oembed.json"), + new $.fn.oembed.OEmbedProvider("urtak", "rich", ["urtak.com/(u|clr)/.+"], "http://oembed.urtak.com/1/oembed"), + new $.fn.oembed.OEmbedProvider("cacoo", "rich", ["cacoo.com/.+"], "http://cacoo.com/oembed.json"), + new $.fn.oembed.OEmbedProvider("dailymile", "rich", ["dailymile.com/people/.*/entries/.*"], "http://api.dailymile.com/oembed"), + new $.fn.oembed.OEmbedProvider("dipity", "rich", ["dipity.com/timeline/.+"],'http://www.dipity.com/oembed/timeline/',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("sketchfab", "rich", ["sketchfab.com/show/.+"],'http://sketchfab.com/oembed',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("speakerdeck", "rich", ["speakerdeck.com/.+"],'http://speakerdeck.com/oembed.json',{useYQL:'json'}), + new $.fn.oembed.OEmbedProvider("popplet", "rich", ["popplet.com/app/.*"],"http://popplet.com/app/Popplet_Alpha.swf?page_id=$1&em=1", + {templateRegex:/.*#\/([^\/]+).*/,embedtag : {width:460,height: 460} }), + + new $.fn.oembed.OEmbedProvider("pearltrees", "rich", ["pearltrees.com/.*"],"http://cdn.pearltrees.com/s/embed/getApp?", + {templateRegex:/.*N-f=1_(\d+).*N-p=(\d+).*/, embedtag : {width:460,height: 460, + flashvars : "lang=en_US&embedId=pt-embed-$1-693&treeId=$1&pearlId=$2&treeTitle=Diagrams%2FVisualization&site=www.pearltrees.com%2FF"} + }), + + new $.fn.oembed.OEmbedProvider("prezi", "rich", ["prezi.com/.*"],"http://prezi.com/bin/preziloader.swf?", + {templateRegex:/.*com\/([^\/]+)\/.*/,embedtag : {width:550,height: 400, + flashvars : "prezi_id=$1&lock_to_path=0&color=ffffff&autoplay=no&autohide_ctrls=0" + } + }), + + new $.fn.oembed.OEmbedProvider("tourwrist", "rich", ["tourwrist.com/tours/.+"], null, + { templateRegex:/.*tours.([\d]+).*/, + template : function(wm,tourid){ + setTimeout(function(){if(loadEmbeds)loadEmbeds();},2000); + return "
"; + } + }), + + new $.fn.oembed.OEmbedProvider("meetup", "rich", ["meetup\\.(com|ps)/.+"], checkProtocol() + "api.meetup.com/oembed"), + new $.fn.oembed.OEmbedProvider("ebay", "rich", ["ebay\\.*"], checkProtocol() + "togo.ebay.com/togo/togo.swf?2008013100", + {templateRegex:/.*\/([^\/]+)\/(\d{10,13}).*/, embedtag : {width:355,height: 300, + flashvars : "base=http://togo.ebay.com/togo/&lang=en-us&mode=normal&itemid=$2&query=$1" + } + }), + new $.fn.oembed.OEmbedProvider("wikipedia", "rich", ["wikipedia.org/wiki/.+"], "http://$1.wikipedia.org/w/api.php?action=parse&page=$2&format=json§ion=0&callback=?",{ + templateRegex:/.*\/\/([\w]+).*\/wiki\/([^\/]+).*/, + templateData : function(data){if(!data.parse)return false; + var text = data.parse['text']['*'].replace(/href="\/wiki/g,'href="http://en.wikipedia.org/wiki'); + return '

'+data.parse['displaytitle']+'

'+text+'
'; + } + }), + new $.fn.oembed.OEmbedProvider("imdb", "rich", ["imdb.com/title/.+"], "http://www.imdbapi.com/?i=$1&callback=?", + {templateRegex:/.*\/title\/([^\/]+).*/, + templateData : function(data){if(!data.Title)return false; + return '

'+data.Title+' ('+data.Year+')

Starring: '+data.Actors+'

'+data.Title+'
'+data.Plot+'
'; + } + }), + new $.fn.oembed.OEmbedProvider("livejournal", "rich", ["livejournal.com/"], "http://ljpic.seacrow.com/json/$2$4?jsonp=?" + ,{templateRegex:/(http:\/\/(((?!users).)+)\.livejournal\.com|.*users\.livejournal\.com\/([^\/]+)).*/, + templateData : function(data){if(!data.username)return false; + return '
[info]'+data.username+'
'+data.name+'
'; + } + }), + new $.fn.oembed.OEmbedProvider("circuitbee", "rich", ["circuitbee\\.com/circuit/view/.+"],"http://c.circuitbee.com/build/r/schematic-embed.html?id=$1", + {templateRegex:/.*circuit\/view\/(\d+).*/ ,embedtag : {tag: 'iframe', width:'500',height: '350'} + }), + + new $.fn.oembed.OEmbedProvider("googlecalendar", "rich", ["www.google.com/calendar/embed?.+"],"$1", + {templateRegex:/(.*)/ ,embedtag : {tag: 'iframe', width:'800',height: '600' } + }), + new $.fn.oembed.OEmbedProvider("jsfiddle", "rich", ["jsfiddle.net/[^/]+/?"],"http://jsfiddle.net/$1/embedded/result,js,resources,html,css/?", + {templateRegex:/.*net\/([^\/]+).*/ ,embedtag : {tag: 'iframe', width:'100%',height: '300' } + }), + new $.fn.oembed.OEmbedProvider("jsbin", "rich", ["jsbin.com/.+"],"http://jsbin.com/$1/?", + {templateRegex:/.*com\/([^\/]+).*/ ,embedtag : {tag: 'iframe', width:'100%',height: '300' } + }), + + new $.fn.oembed.OEmbedProvider("jotform", "rich", ["form.jotform.co/form/.+"],"$1?", + {templateRegex:/(.*)/ ,embedtag : {tag: 'iframe', width:'100%',height: '507' } + }), + new $.fn.oembed.OEmbedProvider("reelapp", "rich", ["reelapp\\.com/.+"],"http://www.reelapp.com/$1/embed", + {templateRegex:/.*com\/(\S{6}).*/ ,embedtag : {tag: 'iframe', width:'400',height: '338'} + }), + new $.fn.oembed.OEmbedProvider("linkedin", "rich", ["linkedin.com/pub/.+"],"https://www.linkedin.com/cws/member/public_profile?public_profile_url=$1&format=inline&isFramed=true", + {templateRegex:/(.*)/ ,embedtag : {tag: 'iframe', width:'368px',height: 'auto'} + }), + + new $.fn.oembed.OEmbedProvider("timetoast", "rich", ["timetoast.com/timelines/[0-9]+"],"http://www.timetoast.com/flash/TimelineViewer.swf?passedTimelines=$1", + {templateRegex:/.*timelines\/([0-9]*)/ ,embedtag : { width:550,height: 400,nocache:1} + }), + new $.fn.oembed.OEmbedProvider("pastebin", "rich", ["pastebin\\.com/[\\S]{8}"],"http://pastebin.com/embed_iframe.php?i=$1", + {templateRegex:/.*\/(\S{8}).*/ ,embedtag : {tag: 'iframe', width:'100%',height: 'auto'} + }), + new $.fn.oembed.OEmbedProvider("mixlr", "rich", ["mixlr.com/.+"],"http://mixlr.com/embed/$1?autoplay=ae", + {templateRegex:/.*com\/([^\/]+).*/ ,embedtag : {tag: 'iframe', width:'100%',height: 'auto' } + }), + new $.fn.oembed.OEmbedProvider("pastie", "rich", ["pastie\\.org/pastes/.+"],null,{yql:{xpath:'//pre[@class="textmate-source"]'}}), + new $.fn.oembed.OEmbedProvider("github", "rich", ["gist.github.com/.+"], "https://github.com/api/oembed"), + new $.fn.oembed.OEmbedProvider("github", "rich", ["github.com/[-.\\w@]+/[-.\\w@]+"], "https://api.github.com/repos/$1/$2?callback=?" + ,{templateRegex:/.*\/([^\/]+)\/([^\/]+).*/, + templateData : function(data){ if(!data.data.html_url)return false; + return '

'+data.data.name+'

'+data.data.description+'

' + +'

Last updated: '+data.data.pushed_at+'

'; + } + }), + + new $.fn.oembed.OEmbedProvider("facebook", "rich", ["facebook.com/(people/[^\\/]+/\\d+|[^\\/]+$)"], "https://graph.facebook.com/$2$3/?callback=?" + ,{templateRegex:/.*facebook.com\/(people\/[^\/]+\/(\d+).*|([^\/]+$))/, + templateData : function(data){ if(!data.id)return false; + var out = '
facebook '; + if(data.from) out += ''+data.from.name+''; + else if(data.link) out += ''+data.name+''; + else if(data.username) out += ''+data.name+''; + else out += ''+data.name+''; + out += '
'; + if(data.picture) out += ''; + else out += ''; + if(data.from) out += ''+data.name+''; + if(data.founded) out += 'Founded: '+data.founded+'
'; + if(data.category) out += 'Category: '+data.category+'
'; + if(data.website) out += 'Website: '+data.website+'
'; + if(data.gender) out += 'Gender: '+data.gender+'
'; + if(data.description) out += data.description + '
'; + out += '
'; + return out; + } + }), + new $.fn.oembed.OEmbedProvider("stackoverflow", "rich", ["stackoverflow.com/questions/[\\d]+"], "http://api.stackoverflow.com/1.1/questions/$1?body=true&jsonp=?" + ,{templateRegex:/.*questions\/([\d]+).*/, + templateData : function(data){ + if(!data.questions)return false; + var q = data.questions[0]; + var body = $(q.body).text(); + var out = '
' + +''+ (q.up_vote_count - q.down_vote_count)+ '
vote(s)
' + +'
'+q.answer_count+'answer
'+q.view_count+' view(s)
' + +'

'+q.title+'

' + +'
'+ body.substring(0,100)+'...
'; + for(i in q.tags) + out += ''; + out += '
'; + return out; + } + }), + new $.fn.oembed.OEmbedProvider("wordpress", "rich", ["wordpress\\.com/.+","blogs\\.cnn\\.com/.+","techcrunch\\.com/.+","wp\\.me/.+"], "http://public-api.wordpress.com/oembed/1.0/?for=jquery-oembed-all"), + new $.fn.oembed.OEmbedProvider("screenr", "rich", ["screenr\.com"], "http://www.screenr.com/embed/$1", + {templateRegex:/.*\/([^\/]+).*/ + ,embedtag : {tag: 'iframe', width:'650',height: 396} + }) , + new $.fn.oembed.OEmbedProvider("gigpans", "rich", ["gigapan\\.org/[-.\\w@]+/\\d+"],"http://gigapan.org/gigapans/$1/options/nosnapshots/iframe/flash.html", + {templateRegex:/.*\/(\d+)\/?.*/, + embedtag : {tag: 'iframe', width:'100%',height: 400 } + }), + new $.fn.oembed.OEmbedProvider("scribd", "rich", ["scribd\\.com/.+"], checkProtocol() + "www.scribd.com/embeds/$1/content?start_page=1&view_mode=list", + {templateRegex:/.*doc\/([^\/]+).*/ , + embedtag : {tag: 'iframe', width:'100%',height: 600} + }), + new $.fn.oembed.OEmbedProvider("kickstarter", "rich", ["kickstarter\\.com/projects/.+"], "$1/widget/card.html", + {templateRegex:/([^\?]+).*/ , + embedtag : {tag: 'iframe', width:'220',height: 380} + }), + + new $.fn.oembed.OEmbedProvider("amazon", "rich", ["amzn.com/B+", "amazon.com.*/(B\\S+)($|\\/.*)"], checkProtocol() + "rcm.amazon.com/e/cm?t=_APIKEY_&o=1&p=8&l=as1&asins=$1&ref=qf_br_asin_til&fc1=000000&IS2=1<1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" + ,{apikey: true,templateRegex:/.*\/(B[0-9A-Z]+)($|\/.*)/, + embedtag : {tag: 'iframe', width:'120px',height: '240px'} + }), + + new $.fn.oembed.OEmbedProvider("slideshare", "rich", ["slideshare\.net"], checkProtocol() + "www.slideshare.net/api/oembed/2", { format: 'jsonp' }), + new $.fn.oembed.OEmbedProvider("roomsharejp", "rich", ["roomshare\\.jp/(en/)?post/.*"], "http://roomshare.jp/oembed.json"), + + new $.fn.oembed.OEmbedProvider("lanyard", "rich", ["lanyrd.com/\\d+/.+"], null, + {yql:{xpath:'(//div[@class="primary"])[1]', from: 'htmlstring' + , datareturn:function(results){ + if(!results.result) return false; + return '
'+results.result+'
'; + } + } + }), + new $.fn.oembed.OEmbedProvider("asciiartfarts", "rich", ["asciiartfarts.com/\\d+.html"], null, + {yql:{xpath:'//pre/font', from: 'htmlstring' + , datareturn:function(results){ + if(!results.result) return false; + return '
'+results.result+'
'; + } + } + }), + + + + //Use Open Graph Where applicable + new $.fn.oembed.OEmbedProvider("opengraph", "rich", [".*"], null, + {yql:{xpath:"//meta|//title|//link", from:'html' + , datareturn:function(results){ + if(!results['og:title'] && results['title'] &&results['description'])results['og:title']=results['title']; + if(!results['og:title'] && !results['title'])return false; + var code = $('

'); + if(results['og:video']) { + var embed = $(''); + embed + .attr('type',results['og:video:type'] || "application/x-shockwave-flash") + .css('max-height', settings.maxHeight || 'auto' ) + .css('max-width', settings.maxWidth || 'auto' ); + if(results['og:video:width']) embed.attr('width',results['og:video:width']); + if(results['og:video:height']) embed.attr('height',results['og:video:height']); + code.append(embed); + }else if(results['og:image']) { + var img = $(''); + img.css('max-height', settings.maxHeight || 'auto' ).css('max-width', settings.maxWidth || 'auto' ); + if(results['og:image:width']) img.attr('width',results['og:image:width']); + if(results['og:image:height']) img.attr('height',results['og:image:height']); + code.append(img); + } + if(results['og:title']) code.append(''+results['og:title']+'
'); + if(results['og:description']) + code.append(results['og:description']+'
'); + else if(results['description']) + code.append(results['description']+'
'); + return code; + } + } + }) + + ]; +})(jQuery); + +//This is needed for gravatar :( +String.prototype.md5=function(){var a=function(a,b){var c=(a&65535)+(b&65535);var d=(a>>16)+(b>>16)+(c>>16);return d<<16|c&65535; +};var b=function(a,b){return a<>>32-b; };var c=function(c,d,e,f,g,h){return a(b(a(a(d,c),a(f,h)),g),e); };var d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h); };var e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h); };var f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h); };var g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h); };var h=function(b){var c,h,i,j,k,l=b.length;var m=1732584193;var n=-271733879;var o=-1732584194;var p=271733878;for(k=0;k>2]>>d%4*8+4&15)+b.charAt(a[d>>2]>>d%4*8&15); + }return c; +};var j=function(a){var b=(a.length+8>>6)+1;var c=[],d,e=b*16,f,g=a.length;for(d=0;d>2]|=(a.charCodeAt(f)&255)<>2]|=128<t.maxWidth&&(v=t.maxWidth/h,k=t.maxWidth,d=c*v,c=c*v,h=h*v),c>t.maxHeight&&(v=t.maxHeight/c,d=t.maxHeight,k=h*v,h=h*v),c=d,h=k}else c=t.maxHeight,h=t.maxWidth;p=n("<"+b+"/>").attr("src",y).attr("width",h).attr("height",c).attr("allowfullscreen",o.embedtag.allowfullscreen||"true").attr("allowscriptaccess",o.embedtag.allowfullscreen||"always").css("max-height",t.maxHeight||"auto").css("max-width",t.maxWidth||"auto"),b=="embed"&&p.attr("type",o.embedtag.type||"application/x-shockwave-flash").attr("flashvars",e.replace(o.templateRegex,it)),b=="iframe"&&p.attr("scrolling",o.embedtag.scrolling||"no").attr("frameborder",o.embedtag.frameborder||"0"),l={code:p},u(l,e,i)}else o.apiendpoint?(o.apikey&&(o.apiendpoint=o.apiendpoint.replace("_APIKEY_",t.apikeys[o.name])),a=n.extend({url:e.replace(o.templateRegex,o.apiendpoint),dataType:"jsonp",success:function(t){var r=n.extend({},t);r.code=o.templateData(t),u(r,e,i)},error:function(){t.onError.call(i,e,o)}},t.ajaxOptions||{}),n.ajax(a)):(l={code:e.replace(o.templateRegex,o.template)},u(l,e,i));else tt=s(o,e),a=n.extend({url:tt,dataType:o.dataType||"jsonp",success:function(t){var r=n.extend({},t);switch(r.type){case"file":case"photo":r.code=n.fn.oembed.getPhotoCode(e,r);break;case"video":case"rich":r.code=n.fn.oembed.getRichCode(e,r);break;default:r.code=n.fn.oembed.getGenericCode(e,r)}u(r,e,i)},error:function(){t.onError.call(i,e,o)}},t.ajaxOptions||{}),n.ajax(a)}function o(n){if(n===null)return null;var t,i={};for(t in n)t!==null&&(i[t.toLowerCase()]=n[t]);return i}n.fn.oembed=function(i,r,u){t=n.extend(!0,n.fn.oembed.defaults,r);var f=["0rz.tw","1link.in","1url.com","2.gp","2big.at","2tu.us","3.ly","307.to","4ms.me","4sq.com","4url.cc","6url.com","7.ly","a.gg","a.nf","aa.cx","abcurl.net","ad.vu","adf.ly","adjix.com","afx.cc","all.fuseurl.com","alturl.com","amzn.to","ar.gy","arst.ch","atu.ca","azc.cc","b23.ru","b2l.me","bacn.me","bcool.bz","binged.it","bit.ly","bizj.us","bloat.me","bravo.ly","bsa.ly","budurl.com","canurl.com","chilp.it","chzb.gr","cl.lk","cl.ly","clck.ru","cli.gs","cliccami.info","clickthru.ca","clop.in","conta.cc","cort.as","cot.ag","crks.me","ctvr.us","cutt.us","dai.ly","decenturl.com","dfl8.me","digbig.com","http://digg.com/[^/]+$","disq.us","dld.bz","dlvr.it","do.my","doiop.com","dopen.us","easyuri.com","easyurl.net","eepurl.com","eweri.com","fa.by","fav.me","fb.me","fbshare.me","ff.im","fff.to","fire.to","firsturl.de","firsturl.net","flic.kr","flq.us","fly2.ws","fon.gs","freak.to","fuseurl.com","fuzzy.to","fwd4.me","fwib.net","g.ro.lt","gizmo.do","gl.am","go.9nl.com","go.ign.com","go.usa.gov","goo.gl","goshrink.com","gurl.es","hex.io","hiderefer.com","hmm.ph","href.in","hsblinks.com","htxt.it","huff.to","hulu.com","hurl.me","hurl.ws","icanhaz.com","idek.net","ilix.in","is.gd","its.my","ix.lt","j.mp","jijr.com","kl.am","klck.me","korta.nu","krunchd.com","l9k.net","lat.ms","liip.to","liltext.com","linkbee.com","linkbun.ch","liurl.cn","ln-s.net","ln-s.ru","lnk.gd","lnk.ms","lnkd.in","lnkurl.com","lru.jp","lt.tl","lurl.no","macte.ch","mash.to","merky.de","migre.me","miniurl.com","minurl.fr","mke.me","moby.to","moourl.com","mrte.ch","myloc.me","myurl.in","n.pr","nbc.co","nblo.gs","nn.nf","not.my","notlong.com","nsfw.in","nutshellurl.com","nxy.in","nyti.ms","o-x.fr","oc1.us","om.ly","omf.gd","omoikane.net","on.cnn.com","on.mktw.net","onforb.es","orz.se","ow.ly","ping.fm","pli.gs","pnt.me","politi.co","post.ly","pp.gg","profile.to","ptiturl.com","pub.vitrue.com","qlnk.net","qte.me","qu.tc","qy.fi","r.ebay.com","r.im","rb6.me","read.bi","readthis.ca","reallytinyurl.com","redir.ec","redirects.ca","redirx.com","retwt.me","ri.ms","rickroll.it","riz.gd","rt.nu","ru.ly","rubyurl.com","rurl.org","rww.tw","s4c.in","s7y.us","safe.mn","sameurl.com","sdut.us","shar.es","shink.de","shorl.com","short.ie","short.to","shortlinks.co.uk","shorturl.com","shout.to","show.my","shrinkify.com","shrinkr.com","shrt.fr","shrt.st","shrten.com","shrunkin.com","simurl.com","slate.me","smallr.com","smsh.me","smurl.name","sn.im","snipr.com","snipurl.com","snurl.com","sp2.ro","spedr.com","srnk.net","srs.li","starturl.com","stks.co","su.pr","surl.co.uk","surl.hu","t.cn","t.co","t.lh.com","ta.gd","tbd.ly","tcrn.ch","tgr.me","tgr.ph","tighturl.com","tiniuri.com","tiny.cc","tiny.ly","tiny.pl","tinylink.in","tinyuri.ca","tinyurl.com","tk.","tl.gd","tmi.me","tnij.org","tnw.to","tny.com","to.ly","togoto.us","totc.us","toysr.us","tpm.ly","tr.im","tra.kz","trunc.it","twhub.com","twirl.at","twitclicks.com","twitterurl.net","twitterurl.org","twiturl.de","twurl.cc","twurl.nl","u.mavrev.com","u.nu","u76.org","ub0.cc","ulu.lu","updating.me","ur1.ca","url.az","url.co.uk","url.ie","url360.me","url4.eu","urlborg.com","urlbrief.com","urlcover.com","urlcut.com","urlenco.de","urli.nl","urls.im","urlshorteningservicefortwitter.com","urlx.ie","urlzen.com","usat.ly","use.my","vb.ly","vevo.ly","vgn.am","vl.am","vm.lc","w55.de","wapo.st","wapurl.co.uk","wipi.es","wp.me","x.vu","xr.com","xrl.in","xrl.us","xurl.es","xurl.jp","y.ahoo.it","yatuc.com","ye.pe","yep.it","yfrog.com","yhoo.it","yiyd.com","youtu.be","yuarel.com","z0p.de","zi.ma","zi.mu","zipmyurl.com","zud.me","zurl.ws","zz.gd","zzang.kr","›.ws","✩.ws","✿.ws","❥.ws","➔.ws","➞.ws","➡.ws","➨.ws","➯.ws","➹.ws","➽.ws"];return n("#jqoembeddata").length===0&&n('<\/span>').appendTo("body"),this.each(function(){var h=n(this),s=i&&(!i.indexOf("http://")||!i.indexOf("https://"))?i:h.attr("href"),r,c,l,a,v;if(u?t.onEmbed=u:t.onEmbed||(t.onEmbed=function(i){n.fn.oembed.insertCode(this,t.embedMethod,i)}),s!==null&&s!==undefined){for(c=0,l=f.length;c<\/div>');var f=i.parent();t.includeHandle&&n('↓<\/span>').insertBefore(i).click(function(){var t=encodeURIComponent(n(this).text());n(this).html(t=="%E2%86%91"?"↓":"↑"),n(this).parent().children().last().toggle()}),f.append("
");try{u.code.clone().appendTo(f)}catch(e){f.append(u.code)}}}},n.fn.oembed.getPhotoCode=function(n,t){var i,r=t.title?t.title:"";return r+=t.author_name?" - "+t.author_name:"",r+=t.provider_name?" - "+t.provider_name:"",i='

'+r+'<\/a><\/div>',t.html&&(i+="
"+t.html+"<\/div>"),i},n.fn.oembed.getRichCode=function(n,t){return t.html},n.fn.oembed.getGenericCode=function(n,t){var r=t.title!==null?t.title:n,i=''+r+"<\/a>";return t.html&&(i+="
"+t.html+"<\/div>"),i},n.fn.oembed.getOEmbedProvider=function(t){for(var r,u,f,i=0;i$/,"$1")||""}}:{from:"json",apiendpoint:this.apiendpoint,url:function(n){return this.apiendpoint+"?format=json&url="+n},datareturn:function(n){return n.json.type!="video"&&(n.json.url||n.json.thumbnail_url)?'':n.json.html||""}},this.apiendpoint=null);for(var f in u)this[f]=u[f];this.format=this.format||"json",this.callbackparameter=this.callbackparameter||"callback",this.embedtag=this.embedtag||{tag:""}},n.fn.oembed.providers=[new n.fn.oembed.OEmbedProvider("youtube","video",["youtube\\.com/watch.+v=[\\w-]+&?","youtu\\.be/[\\w-]+","youtube.com/embed"],r()+"www.youtube.com/embed/$1?wmode=transparent",{templateRegex:/.*(?:v\=|be\/|embed\/)([\w\-]+)&?.*/,embedtag:{tag:"iframe",width:"425",height:"349"}}),new n.fn.oembed.OEmbedProvider("wistia","video",["wistia.com/m/.+","wistia.com/embed/.+","wi.st/m/.+","wi.st/embed/.+"],"http://fast.wistia.com/oembed",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("xtranormal","video",["xtranormal\\.com/watch/.+"],"http://www.xtranormal.com/xtraplayr/$1/$2",{templateRegex:/.*com\/watch\/([\w\-]+)\/([\w\-]+).*/,embedtag:{tag:"iframe",width:"320",height:"269"}}),new n.fn.oembed.OEmbedProvider("scivee","video",["scivee.tv/node/.+"],"http://www.scivee.tv/flash/embedCast.swf?",{templateRegex:/.*tv\/node\/(.+)/,embedtag:{width:"480",height:"400",flashvars:"id=$1&type=3"}}),new n.fn.oembed.OEmbedProvider("veoh","video",["veoh.com/watch/.+"],"http://www.veoh.com/swf/webplayer/WebPlayer.swf?version=AFrontend.5.7.0.1337&permalinkId=$1&player=videodetailsembedded&videoAutoPlay=0&id=anonymous",{templateRegex:/.*watch\/([^\?]+).*/,embedtag:{width:"410",height:"341"}}),new n.fn.oembed.OEmbedProvider("gametrailers","video",["gametrailers\\.com/video/.+"],"http://media.mtvnservices.com/mgid:moses:video:gametrailers.com:$2",{templateRegex:/.*com\/video\/([\w\-]+)\/([\w\-]+).*/,embedtag:{width:"512",height:"288"}}),new n.fn.oembed.OEmbedProvider("funnyordie","video",["funnyordie\\.com/videos/.+"],"http://player.ordienetworks.com/flash/fodplayer.swf?",{templateRegex:/.*videos\/([^\/]+)\/([^\/]+)?/,embedtag:{width:512,height:328,flashvars:"key=$1"}}),new n.fn.oembed.OEmbedProvider("colledgehumour","video",["collegehumor\\.com/video/.+"],"http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=$1&use_node_id=true&fullscreen=1",{templateRegex:/.*video\/([^\/]+).*/,embedtag:{width:600,height:338}}),new n.fn.oembed.OEmbedProvider("metacafe","video",["metacafe\\.com/watch/.+"],"http://www.metacafe.com/fplayer/$1/$2.swf",{templateRegex:/.*watch\/(\d+)\/(\w+)\/.*/,embedtag:{width:400,height:345}}),new n.fn.oembed.OEmbedProvider("bambuser","video",["bambuser\\.com/channel/.*/broadcast/.*"],"http://static.bambuser.com/r/player.swf?vid=$1",{templateRegex:/.*bambuser\.com\/channel\/.*\/broadcast\/(\w+).*/,embedtag:{width:512,height:339}}),new n.fn.oembed.OEmbedProvider("twitvid","video",["twitvid\\.com/.+"],"http://www.twitvid.com/embed.php?guid=$1&autoplay=0",{templateRegex:/.*twitvid\.com\/(\w+).*/,embedtag:{tag:"iframe",width:480,height:360}}),new n.fn.oembed.OEmbedProvider("aniboom","video",["aniboom\\.com/animation-video/.+"],"http://api.aniboom.com/e/$1",{templateRegex:/.*animation-video\/(\d+).*/,embedtag:{width:594,height:334}}),new n.fn.oembed.OEmbedProvider("vzaar","video",["vzaar\\.com/videos/.+","vzaar.tv/.+"],"http://view.vzaar.com/$1/player?",{templateRegex:/.*\/(\d+).*/,embedtag:{tag:"iframe",width:576,height:324}}),new n.fn.oembed.OEmbedProvider("snotr","video",["snotr\\.com/video/.+"],"http://www.snotr.com/embed/$1",{templateRegex:/.*\/(\d+).*/,embedtag:{tag:"iframe",width:400,height:330,nocache:1}}),new n.fn.oembed.OEmbedProvider("youku","video",["v.youku.com/v_show/id_.+"],"http://player.youku.com/player.php/sid/$1/v.swf",{templateRegex:/.*id_(.+)\.html.*/,embedtag:{width:480,height:400,nocache:1}}),new n.fn.oembed.OEmbedProvider("tudou","video",["tudou.com/programs/view/.+/"],"http://www.tudou.com/v/$1/v.swf",{templateRegex:/.*view\/(.+)\//,embedtag:{width:480,height:400,nocache:1}}),new n.fn.oembed.OEmbedProvider("embedr","video",["embedr\\.com/playlist/.+"],"http://embedr.com/swf/slider/$1/425/520/default/false/std?",{templateRegex:/.*playlist\/([^\/]+).*/,embedtag:{width:425,height:520}}),new n.fn.oembed.OEmbedProvider("blip","video",["blip\\.tv/.+"],"http://blip.tv/oembed/"),new n.fn.oembed.OEmbedProvider("minoto-video","video",["http://api.minoto-video.com/publishers/.+/videos/.+","http://dashboard.minoto-video.com/main/video/details/.+","http://embed.minoto-video.com/.+"],"http://api.minoto-video.com/services/oembed.json",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("animoto","video",["animoto.com/play/.+"],"http://animoto.com/services/oembed"),new n.fn.oembed.OEmbedProvider("hulu","video",["hulu\\.com/watch/.*"],"http://www.hulu.com/api/oembed.json"),new n.fn.oembed.OEmbedProvider("ustream","video",["ustream\\.tv/recorded/.*"],"http://www.ustream.tv/oembed",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("videojug","video",["videojug\\.com/(film|payer|interview).*"],"http://www.videojug.com/oembed.json",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("sapo","video",["videos\\.sapo\\.pt/.*"],"http://videos.sapo.pt/oembed",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("vodpod","video",["vodpod.com/watch/.*"],"http://vodpod.com/oembed.js",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("vimeo","video",["www.vimeo.com/groups/.*/videos/.*","www.vimeo.com/.*","vimeo.com/groups/.*/videos/.*","vimeo.com/.*"],"//vimeo.com/api/oembed.json"),new n.fn.oembed.OEmbedProvider("dailymotion","video",["dailymotion\\.com/.+"],"http://www.dailymotion.com/services/oembed"),new n.fn.oembed.OEmbedProvider("5min","video",["www\\.5min\\.com/.+"],"http://api.5min.com/oembed.xml",{useYQL:"xml"}),new n.fn.oembed.OEmbedProvider("National Film Board of Canada","video",["nfb\\.ca/film/.+"],"http://www.nfb.ca/remote/services/oembed/",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("qik","video",["qik\\.com/\\w+"],"http://qik.com/api/oembed.json",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("revision3","video",["revision3\\.com"],"http://revision3.com/api/oembed/"),new n.fn.oembed.OEmbedProvider("dotsub","video",["dotsub\\.com/view/.+"],"http://dotsub.com/services/oembed",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("clikthrough","video",["clikthrough\\.com/theater/video/\\d+"],"http://clikthrough.com/services/oembed"),new n.fn.oembed.OEmbedProvider("Kinomap","video",["kinomap\\.com/.+"],"http://www.kinomap.com/oembed"),new n.fn.oembed.OEmbedProvider("VHX","video",["vhx.tv/.+"],"http://vhx.tv/services/oembed.json"),new n.fn.oembed.OEmbedProvider("bambuser","video",["bambuser.com/.+"],"http://api.bambuser.com/oembed/iframe.json"),new n.fn.oembed.OEmbedProvider("justin.tv","video",["justin.tv/.+"],"http://api.justin.tv/api/embed/from_url.json",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("official.fm","rich",["official.fm/.+"],"http://official.fm/services/oembed",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("chirbit","rich",["chirb.it/.+"],"http://chirb.it/oembed.json",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("Huffduffer","rich",["huffduffer.com/[-.\\w@]+/\\d+"],"http://huffduffer.com/oembed"),new n.fn.oembed.OEmbedProvider("Spotify","rich",["open.spotify.com/(track|album)/"],"https://embed.spotify.com/oembed/"),new n.fn.oembed.OEmbedProvider("shoudio","rich",["shoudio.com/.+","shoud.io/.+"],"http://shoudio.com/api/oembed"),new n.fn.oembed.OEmbedProvider("mixcloud","rich",["mixcloud.com/.+"],r()+"www.mixcloud.com/oembed/",{useYQL:"json"}),new n.fn.oembed.OEmbedProvider("rdio.com","rich",["rd.io/.+","rdio.com"],r()+"www.rdio.com/api/oembed/"),new n.fn.oembed.OEmbedProvider("Soundcloud","rich",["soundcloud.com/.+","snd.sc/.+"],r()+"soundcloud.com/oembed",{format:"js"}),new n.fn.oembed.OEmbedProvider("bandcamp","rich",["bandcamp\\.com/album/.+"],null,{yql:{xpath:"//meta[contains(@content, \\'EmbeddedPlayer\\')]",from:"html",datareturn:function(n){return n.meta?'