Jump to content

User:TheDJ/usagecollapse.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by TheDJ (talk | contribs) at 13:07, 30 March 2010 (make sure this switch works). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
var usageCollapser = {};

usageCollapser.hook = function() {
 if( wgAction == 'edit' || wgAction == 'submit' )
  usageCollapser.templateUsage();
 if( wgNamespaceNumber == 6 ) 
  usageCollapser.fileUsage();
}

usageCollapser.templateUsage = function() {
 var tused = getElementsByClassName( document, "div", "templatesUsed" )[0];
 if( !tused )  return;

 /* Get default status */
 /* FIXME: check cookie */
 var collapsed_status = false;

 /* Hide for display */
 tused.style.display = "none";

 /* Set up the new table */
 var table = document.createElement( "table" );
 table.className = "collapsible"
 table.id = "collapsibleTable" + "TemplateUsage";
 table.style.width = "100%";
 if( collapsed_status ) table.className += " collapsed";

 var header = document.createElement( "th" );
 header.style.textAlign = "left";
 var button = usageCollapser.createSHButton(collapsed_status, "TemplateUsage");
 if( !button ) return;
 header.appendChild( button );

 var elements = getElementsByClassName( tused, "div", "mw-templatesUsedExplanation" );
 var header_title = elements[0].firstChild.childNodes;
 for( i=0 ; i< header_title.length; i++ )
  header.appendChild( header_title[i] );

 var row1 = document.createElement( "tr");
 row1.appendChild( header );
 var row2 = document.createElement( "tr");
 row2.style.display = "none";
 row2.appendChild( tused.getElementsByTagName("ul")[0] );
 table.appendChild( row1 );
 table.appendChild( row2 );

 tused.parentNode.insertBefore( table, tused);
}

usageCollapser.fileUsage = function() {};

usageCollapser.createSHButton = function(collapsed, ident) {
 var Button     = document.createElement( "span" );
 var ButtonLink = document.createElement( "a" );
 var ButtonText = document.createTextNode( collapsed ? expandCaption : collapseCaption );

 Button.className = "collapseButton";  //Styles are declared in Common.css
 Button.style.float = "left";
 Button.style.marginRight = "1em";
 ButtonLink.setAttribute( "id", "collapseButton"  + ident );
 ButtonLink.setAttribute( "href", "javascript:collapseTable('" + ident + "');" );
 ButtonLink.appendChild( ButtonText );
 Button.appendChild( document.createTextNode( "[" ) );
 Button.appendChild( ButtonLink );
 Button.appendChild( document.createTextNode( "]" ) );
 return Button;
}

usageCollapser.Cookie = {
    create: function(name,value,days)
    {
        var expires;
        if (days)
        {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            expires = "; expires="+date.toGMTString();
        }
        else { expires = ""; }
        document.cookie = name+"="+value+expires+"; path=/";
    },

    read: function(name)
    {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++)
        {
            var c = ca[i];
            while (c.charAt(0)==' ') { c = c.substring(1,c.length); }
            if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); }
        }
        return null;
    },

    erase: function(name)
    {
        Cookie.create(name,"",-1);
    }
};

addOnloadHook( usageCollapser.hook );