From Wikipedia, the free encyclopedia
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.

( function () {

    var pageName;



    var urls = 

        "//www.google.com/search?as_eq=wikipedia&q=%22", "%22&num=50" ],

         "//www.google.com/search?tbs=bks:1&q=%22", "%22+-wikipedia" ],

         "//www.google.com/search?tbm=nws&q=%22", "%22+-wikipedia" ],

         "//www.google.com/search?&q=%22", "%22+site:news.google.com/newspapers&source=newspapers" ],

         "//scholar.google.com/scholar?q=%22", "%22" ],

         "https://www.google.com/search?safe=off&tbs=sur:fmc&tbm=isch&q=%22", "%22+-site:wikipedia.org+-site:wikimedia.org" ],

         "https://www.google.com/custom?hl=en&cx=007734830908295939403%3Agalkqgoksq0&cof=FORID%3A13%3BAH%3Aleft%3BCX%3AWikipedia%2520Reference%2520Search&q=%22", "%22" ],

        "//en.wikipedia.org/wiki/Wikipedia:Free_English_newspaper_sources",

         "https://www.jstor.org/action/doBasicSearch?Query=%22", "%22&acc=on&wc=on" ],

         "https://www.nytimes.com/search/%22", "%22" ],

        "https://wikipedialibrary.wmflabs.org/partners/"

    ];

    var labels =  "Google", "books", "news", "newspapers", "scholar", "free images", "WP refs", "FENS", "JSTOR", "NYT", "TWL" ];



    /**

     * encodeURIComponent, but actually fixed.

     * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#Description

     */

    function fixedEncodeURIComponent( str ) {

        return encodeURIComponent( str ).replace( /[!'(  )*_]/g, function( c ) {

            return '%' + c.charCodeAt( 0 ).toString( 16 );

        } );

    }



    /**

     * Adds a link to the given container. Takes either a [prefix, suffix] array

     * or a single static URL.

     */

    function addLinkTo( container, label, url ) {

        var link = document.createElement( "a" );

        link.href = ( typeof url === typeof [] ) ? ( url0 + fixedEncodeURIComponent( pageName.replace( /_/g, " " ) ) + url1 ) : url;

        link.textContent = label;

        link.target = "_blank";

        link.className = "external text";

        link.setAttribute( "rel", "nofollow noopener noreferrer" );

        container.appendChild( link );

    }



    function addSeparatorTo( container ) {

        container.appendChild( document.createTextNode( "\u00A0" ) );

        var sep = document.createElement( "b" );

        sep.textContent = "· ";

        container.appendChild( sep );

    }



    function buildSearchDiv() {

        var container = document.createElement( "span" );

        container.className = "plainlinks";

        container.innerHTML = "<i>Find sources:</i>&nbsp;";

        addLinkTo( container, labels0], urls0 );

        container.appendChild( document.createTextNode( " (" ) );

        for( var i = 1; i < 6; i++ ) {

            addLinkTo( container, labelsi], urlsi );

            addSeparatorTo( container );

        }

        addLinkTo( container, labels6], urls6 );

        container.appendChild( document.createTextNode( ")" ) );

        for( var i = 7; i < 12; i++ ) {

            addSeparatorTo( container );

            addLinkTo( container, labelsi], urlsi );

        }

        return container;

    }



    /**

     * Load the main cv-revdel panel and add buttons/other stuff to

     * the history UI

     */

    function load( evt ) {

        if( evt ) evt.preventDefault();



        // Don't load the panel for a second time if it's already there

        if( document.getElementById( "before-panel" ) ) return;



        // Style for the panel

        mw.util.addCSS(

            "#before-panel { border: thin solid rgb(197, 197, 197); " +

            "box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.25); border-radius: 3px;" +

            "padding: 2em; display: inline-block }"

        );



        // Add the panel itself

        var panel = document.createElement( "div" );

        panel.id = "before-panel";

        panel.appendChild( buildSearchDiv() );

        panel.innerHTML += "<br /><button id='before-close'>Close</button>";

        document.getElementById( "bodyContent" ).insertBefore( panel,

            document.getElementById( "mw-content-text" ) );



        // Close handler

        document.getElementById( "before-close" ).addEventListener( "click", function () {

            $( "#before-panel" ).remove();

        } );

    }



    $.when( $.ready, mw.loader.using(  "mediawiki.util"  ) ).then( function () {

        pageName = mw.config.get( "wgTitle" );



        var link = mw.util.addPortletLink( "p-cactions", "#", "BEFORE search", "pt-before" );

        if( link ) link.addEventListener( "click", load );

    } );

} )();