User:Sal9000/SWL portlet infobox.js

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//
// SWL_portlet_infobox.js
// If the page contain SWLs, it adds a show/hide portlet in the "ca-views" area (top right corner of the page).
// Clicking on it produces an infobox collecting all SWLs, and also highlights them throughout the page.
// Links to target pages added.
//
// Salvatore Loguercio, 2011
// email:salvatore.loguercio@Gmail.com
//

if($(".swl").length!=0) {    // if there are SWLs on the page

var title = document.title.split("-")[0];

function makeLink(str) {
  return "<a href=\"http://en.wikipedia.org/wiki/Category:SWL/" + str + "\">" + str + "</a>";
}


function makeTable() {         // make an infobox with all SWLs, displayed as "predicate-object"

  var swlArray = $('.swl'); // initialize array;
  
  var content = $.makeArray(swlArray).map(function (elem) {    // map on every swl found
    var inner1 = elem.firstChild,
        inner2,
        result = [];

    if (inner1) {
        var inner2 = inner1.firstChild;
    }
 
    var line = '<tr><td>' + 
            [makeLink(inner1.className), "<a href=" + inner2.href + ">" + inner2.title + "</a>"].join('</td><td>')
             + '</tr>\n';	// table formatting stuff; links to target pages added as well.

    return line;
  });

  return '<table class="infobox" style="width: 22em; text-align: left; font-size: 88%; line-height: 1.5em">' + content + '</table>'; // make a pretty infobox, same style as PBB infoboxes.
}

// toggle function

function toggle(obj) {

	var el = document.getElementById(obj);

	if ( el.style.display != 'none' ) {

		el.style.display = 'none';  // hide the infobox
		$(".swl").css("border",""); // hide the borders on SWLs

	}

	else {

		el.style.display = '';                           // show infobox..
		$(".swl").css("border","3px solid lightgreen");  // ..and borders
	}

}



var swltab='<div id="swltab" style="display:none">' + makeTable().replace(/,/g, '') + '</div>';   // instantiate makeTable, as a <div> with an id to be used by the toggle function. Initially not displayed.


$('#siteSub').append(swltab);  // Add it right below the page title


// Create portlet link*;
var portletLink = mw.util.addPortletLink( 'p-views', '#',
        'Semantic Wiki Links', 'ca-SWL', 'Shows Semantic Wiki Links on the current page','',document.getElementById("ca-watch")
);

// Bind click handler
$(portletLink).click( function( e ) {
        e.preventDefault();
        toggle("swltab");
});




}


// * see http://www.mediawiki.org/wiki/ResourceLoader/Default_modules#addPortletLink