]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
LinkPreview plugin more or less functioning (though not pretty), using oohembed remot...
authorBrion Vibber <brion@pobox.com>
Tue, 16 Nov 2010 21:49:23 +0000 (13:49 -0800)
committerBrion Vibber <brion@pobox.com>
Tue, 16 Nov 2010 21:49:23 +0000 (13:49 -0800)
plugins/LinkPreview/linkpreview.js

index f6a4dc34f0d985904e31f817fd0c28be465b9280..eae6dfd43fd61e95033da3661591f02b5862f886 100644 (file)
@@ -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 = $('<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('<span id="' + id + '"></span>');
             prepLinkPreview(id, links[i]);
         }
     }
-
+    $('#form_notice').append('<div id="link-preview"></div>');
     $('#notice_data-text').change(function() {
        var text = $(this).val();
        previewLinks(text);