Web-based widget for showing the latest posts from a GNU Social profile.

[[ 🗃 ^ZEYKo gsembed ]] :: [📥 Inbox] [📤 Outbox] [🐤 Followers] [🤝 Collaborators] [🛠 Changes]

Clone

HTTPS: darcs clone https://vervis.peers.community/repos/ZEYKo

SSH: darcs clone USERNAME@vervis.peers.community:ZEYKo

Tags

TODO

gsembed.js

/*
 * Copyright 2018 UltrasonicMadness
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

function addGSEmbedWidget(aStreamUrl, element)
{
    $(element).html("Loading GSEmbed...");
    $.getJSON(aStreamUrl)
        .done(function(data)
        {
            // Replace the given element with the generated widget HTML.
            var gsHtml = genGSEmbedHtml(data);
            $(element).addClass("gsembed_widget");
            $(element).html(gsHtml);
            
            // All links in the widget open in a new tab
            $(element + " a").map(function(index, element)
            {
                $(this).attr("target", "_blank");
            });
            
            // Highlights moused over statuses
            $(element + " li").mouseover(function()
            {
                $(this).addClass("gshover");
            });
            
            // and un-highlights them when the mouse leaves
            $(element + " li").mouseout(function()
            {
                $(this).removeClass("gshover");
            });
        })
        .fail(function(data)
        {
            $(element).html(data.status + " " + data.statusText);
        });
}

function genGSEmbedHtml(data)
{
    var widgetHtml = "";
    
    // The widget header
    widgetHtml += "<div class='gse_heading'>" +
            "<h4>The latest from <a href='" + data.links[0].url + "'>" +
            data.title + "</a></h4>" +
            "</div>";
    
    // For each status, add an item to a <ul>.
    widgetHtml += "<ul>";
    
    for (var i = 0; i < data.items.length; i++)
    {
        var pubDate = new Date(data.items[i].published);
        
        widgetHtml += "<li>";
        
        // Adds the date which is hyperlinked to the status on GNU Social
        widgetHtml += "<div class='gse_date'>" +
                "<a href='" + data.items[i].url + "'>" +
                pubDate.toString() + "</a></div>";
        
        // The status itself is added below the date in a separate div
        widgetHtml += "<div class='gse_postcontent'>" + data.items[i].content +
                "</div>";
        
        widgetHtml += "</li>";
    }
    
    widgetHtml += "</ul>";
    
    // The widget footer with a link to the software page
    widgetHtml += "<div class='gse_footer'>" +
            "Powered by <a " + 
            "href='http://www.ultrasonicmadness.org/software/gsembed'>" +
            "GSEmbed 0.0.1</a>" +
            "</div>";
    
    return widgetHtml;
}

[See repo JSON]