From 5166e71d24d1121f7d99bc788fe734d5c6e86e79 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 16 Nov 2010 13:49:23 -0800 Subject: [PATCH] LinkPreview plugin more or less functioning (though not pretty), using oohembed remote lookup and fixed sizes. --- plugins/LinkPreview/linkpreview.js | 57 ++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js index f6a4dc34f0..eae6dfd43f 100644 --- a/plugins/LinkPreview/linkpreview.js +++ b/plugins/LinkPreview/linkpreview.js @@ -12,7 +12,7 @@ $(function() { function findLinks(text) { // @fixme match this to core code - var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/g; + var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg; var links = []; var matches; while ((matches = re.exec(text)) !== null) { @@ -21,6 +21,30 @@ $(function() { return links; } + /** + * Do an oEmbed lookup for the given URL. + * + * @fixme proxy through ourselves if possible? + * @fixme use the global thumbnail size settings + * + * @param {String} url + * @param {function} callback + */ + function oEmbedLookup(url, callback) + { + var api = 'http://oohembed.com/oohembed'; + var params = { + url: url, + format: 'json', + maxwidth: 100, + maxheight: 75, + callback: '?' + }; + $.get(api, params, function(data, xhr) { + callback(data); + }, 'jsonp'); + } + /** * Start looking up info for a link preview... * May start async data loads. @@ -30,7 +54,32 @@ $(function() { */ function prepLinkPreview(id, url) { - console.log(id, url); + oEmbedLookup(url, function(data) { + var thumb = null; + var width = 100; + if (typeof data.thumbnail_url == "string") { + thumb = data.thumbnail_url; + if (typeof data.thumbnail_width !== "undefined") { + if (data.thumbnail_width < width) { + width = data.thumbnail_width; + } + } + } else if (data.type == 'photo' && typeof data.url == "string") { + thumb = data.url; + if (typeof data.width !== "undefined") { + if (data.width < width) { + width = data.width; + } + } + } + if (thumb) { + var img = $('') + .attr('src', thumb) + .attr('width', width) + .attr('title', data.title || data.url || url); + $('#' + id).append(img); + } + }); } /** @@ -42,12 +91,14 @@ $(function() { function previewLinks(text) { var links = findLinks(text); + $('#link-preview').html(''); for (var i = 0; i < links.length; i++) { var id = 'link-preview-' + i; + $('#link-preview').append(''); prepLinkPreview(id, links[i]); } } - + $('#form_notice').append(''); $('#notice_data-text').change(function() { var text = $(this).val(); previewLinks(text);