MediaWiki:Common.js

/* Any JavaScript here will be loaded for all users on every page load. */ importScriptPage('ShowHide/code.js', 'dev'); importScriptPage('EditIntroButton/code.js', 'dev' ); importScriptPage('AjaxBatchDelete/code.js', 'dev'); importScriptPage('DisableArchiveEdit/code.js', 'dev'); importScriptPage('DupImageList/code.js', 'dev'); // importScriptPage('AdvancedOasisUI/code.js', 'dev'); violates Wikia TOU but is okay for individual users to use importScriptPage('PurgeButton/code.js', 'dev'); importScriptPage('ShowAdsButton/code.js', 'dev');

/* * Copyright © 2009, Daniel Friesen * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: *    * Redistributions of source code must retain the above copyright *      notice, this list of conditions and the following disclaimer. *    * Redistributions in binary form must reproduce the above copyright *      notice, this list of conditions and the following disclaimer in the *      documentation and/or other materials provided with the distribution. *    * Neither the name of the script nor the *      names of its contributors may be used to endorse or promote products *      derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY DANIEL FRIESEN AS IS AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL DANIEL FRIESEN BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ if (skin == "monaco" || skin == "monobook" || skin == "oasis" || skin == "wikia") { (function($) {     // Configuration      var config = window.ArchiveToolConfig = $.extend(true, { archiveListTemplate: window.archiveListTemplate || 'ArchiveList', archivePageTemplate: window.archivePageTemplate || 'ArchivePage', archiveSubpage: 'Archive', userLang: true, // Deutsch de: { buttonArchiveTool: "Archivieren", buttonArchiveToolTooltip: "Seite archivieren", buttonSelectAll: "Alle auswählen", buttonDeselectAll: "Keine auswählen", buttonSaveArchive: "Archiv speichern", buttonAbort: "Abbrechen", labelLines: "Zeilen", labelSections: "Abschnitte", summaryArchiveFrom: "ArchiveTool: Archiviert von", summaryArchiveTo: "ArchiveTool: Archiviert als" },        // English en: { buttonArchiveTool: "Archive", buttonArchiveToolTooltip: "Archive this page", buttonSelectAll: "Select all", buttonDeselectAll: "Deselect all", buttonSaveArchive: "Save archive", buttonAbort: "Abort", labelLines: "Lines", labelSections: "Sections", summaryArchiveFrom: "ArchiveTool: Archiving from", summaryArchiveTo: "ArchiveTool: Archiving to" }     }, window.ArchiveToolConfig || {});      // Function for multi-language support      function msg(name) {         if ( config.userLang && wgUserLanguage in config && name in config[wgUserLanguage] )            return config[wgUserLanguage][name];         if ( wgContentLanguage in config && name in config[wgContentLanguage] )            return config[wgContentLanguage][name];         return config.en[name];      }      if ( wgNamespaceNumber % 2 === 1 && ( wgAction === "view" || wgAction === "purge" ) ) {         var pageBody, pageControls, pageControlHTML;         var buttonPrimary = buttonSecondary = [, ];         importStylesheetPage('ArchiveTool/code.css', 'dev');         switch(skin) {            case 'monaco':               pageBody = '#bodyContent';               pageControls = '#page_controls';               pageControlHTML = '' + msg('buttonArchiveTool') + ''; buttonPrimary = ['', '']; buttonSecondary = ['', '']; break; case 'monobook': pageBody = '#bodyContent'; pageControls = '#p-cactions > div > ul'; pageControlHTML = '' + msg('buttonArchiveTool') + ''; buttonPrimary = ['']; buttonSecondary = ['']; break; case 'oasis': case 'wikia': pageBody = '#WikiaArticle'; pageControls = (wgNamespaceNumber == 3) ? '#WikiaUserPagesHeader > ul.wikia-menu-button > li > ul' : '#WikiaPageHeader > ul.wikia-menu-button > li > ul'; pageControlHTML = '' + msg('buttonArchiveTool') + '</a></li>'; buttonPrimary = ['', '</a>']; buttonSecondary = ['', '</a>']; break; }        $(function {            function api(q, fn) {               q.format = 'json';               return $.post(wgScriptPath + '/api.php', q, fn, "json");            }            function token(page, fn) {               api({ action: 'query', query: 'prop', prop: 'info', titles: page, intoken: 'edit' }, function(q) { for ( var k in q.query.pages ) return fn(q.query.pages[k]); });           }            function startArchiving {               var c = config.archiveListTemplate.substr(0,1);               var archiveListRegex = '['+c.toUpperCase+c.toLowerCase+']'+config.archiveListTemplate.substr(1);               var bc = $(pageBody).addClass('archiving').empty;               $('<img class="ajax" alt="Loading..." />')                 .attr({src: stylepath+'/common/progress-wheel.gif'}).appendTo(bc);               api({ action: 'query', prop: 'revisions', titles: wgPageName, rvprop: 'timestamp|content' }, function(q) { bc.empty; var rev = q.query.pages[wgArticleId].revisions[0]; var time = rev.timestamp; var talkToken, tokenTime; var content = rev['*']; token(wgPageName, function(p) {                    talkToken = p.edittoken;                     tokenTime = p.starttimestamp;                  }); var lines = content.split('\n'); var table = $(' ').appendTo(bc); var ul = $(' ').appendTo(table); for ( var l = 0; l < lines.length; l++ ) { var line = lines[l]; $(' ').toggleClass('noarchive', (new RegExp('^\\{\\{'+archiveListRegex+'\}\}')).test(line)) .attr({line:line}) .append( $(' ').text(line).append(' ') ).appendTo(ul); }                 var sections = []; var sectionEnd = lines.length-1; for ( var l = lines.length-1; l >= 0; l-- ) { var line = lines[l]; if ( /^=.+?=/.test(line) || l === 0 ) { var section = { start: l, end: sectionEnd }; section.length = section.end - section.start + 1; sections.unshift(section); sectionEnd = l-1; }                 }                  var section; while( section = sections.shift ) { var tr = ul.children.eq(section.start); $(' ').attr({rowspan: section.length}).appendTo(tr); }                 $(' ').append(                     $(buttonSecondary[0] + msg('buttonSelectAll') + buttonSecondary[1]).click(function(e) { e.preventDefault; ul.children('tr').addClass('archive'); }), ' ',                    $(buttonSecondary[0] + msg('buttonDeselectAll') + buttonSecondary[1]).click(function(e) { e.preventDefault; ul.children('tr').removeClass('archive'); }), ' ',                    $(buttonPrimary[0] + msg('buttonSaveArchive') + buttonPrimary[1]).click(function(e) { archive; }), ' ',                    $(buttonPrimary[0] + msg('buttonAbort') + buttonPrimary[1]).click(function(e) { bc.find('.ajax').remove; location = wgServer+wgScript+'?title='+encodeURI(wgPageName)+'&action=purge'; })                 ).prependTo(bc).clone(true).appendTo(bc); var click = false; var add; table.mousedown(function(e) {                    e.preventDefault;                     var $li = $(e.target).closest('tr');                     if(!$li.length) return;                     var $section = $(e.target).closest('.section');                     if ( $section.length ) {                        var slist = $li.nextAll(':lt('+(parseInt($section.attr('rowspan'),10)-1)+')').andSelf;                        var sadd = slist.filter(function { return !$(this).hasClass('archive') }).length;                        slist.toggleClass('archive', !!sadd);                        return;                     }                     click = true;                     add = !$li.hasClass('archive');                     $li.toggleClass('archive', !!add);                  }); table.mouseover(function(e) {                    if (!click) return;                     var $li = $(e.target).closest('tr');                     if(!$li.length) return;                     $li.toggleClass('archive', !!add);                  }); $('body').mouseup(function(e) {                    click = false;                  }); function archive { var talkLines = []; var archiveLines = []; ul.children.each(function {                       var arr = $(this).hasClass('noarchive') || !$(this).hasClass('archive')                           ? talkLines : archiveLines;                        arr.push( $(this).attr('line') );                     }); if ( !(new RegExp('^\\{\\{'+archiveListRegex+'\}\}')).test(talkLines[0]) ) talkLines = [, ].concat(talkLines); archiveLines = [, ].concat(archiveLines); bc.empty; $('<img class="ajax" alt="Loading..." />') .attr({src: stylepath+'/common/progress-wheel.gif'}).appendTo(bc); //$(' ').text(talkLines.join('\n')).appendTo(bc); //$(' ').text(archiveLines.join('\n')).appendTo(bc); runArchive(talkLines.join('\n'), archiveLines.join('\n')); }                 var archiveTitle; function runArchive(talkContent, archiveContent) { var archiveNo; function findArchives { var m = $(' Finding archive id: ').appendTo(bc); api({                          action: 'query',                           list: 'allpages',                           apnamespace: wgNamespaceNumber,                           apprefix: wgTitle+'/'+config.archiveSubpage,                           aplimit: 1,                           apdir: 'descending'                        }, function(q) {                           archiveNo = q.query.allpages.length ?                              parseInt(q.query.allpages[0].title.substr(wgPageName.length+("/"+config.archiveSubpage).length),10)+1 :                              1;                           archiveTitle = wgPageName+'/'+config.archiveSubpage+' '+archiveNo;                           m.append('done... (using '+archiveNo+')');                          saveArchive;                        }); }                    function saveArchive { var m = $(' Finding token for '+archiveTitle+': ').appendTo(bc); token(archiveTitle, function(p) {                          m.append('done...');                           m = $(' Saving archive page: ').appendTo(bc);                           api({ action: 'edit', title: archiveTitle, text: archiveContent, token: p.edittoken, summary: ""+ msg('summaryArchiveFrom') + " "+wgPageName+".", minor: true, createonly: true }, function(q) { if ( q.error && q.error.code === "articleexists" ) { m.append('failed...'); bc.append(" The archive page we tried to create already exists. "); return abort; }                             m.append('done...'); saveTalk; });                       });                     }                     function saveTalk { var m = $(' Finding token for '+wgPageName+': ').appendTo(bc); m.append('done...'); m = $(' Updating talk page: ').appendTo(bc); api({                          action: 'edit',                           title: wgPageName,                           text: talkContent,                           token: talkToken,                           summary: "" + msg('summaryArchiveTo') + " "+archiveTitle+".",                           minor: true,                           basetimestamp: time,                           starttimestamp: tokenTime                        }, function(q) {                           if ( q.edit.result === "Success" ) {                              m.append('done...');                              bc.find('.ajax').remove;                              location = wgServer+wgScript+'?title='+encodeURI(wgPageName)+'&action=purge';                           } else {                              m.append('failed...');                              bc.append(" Failed to update talkpage, you may wish to have the archive subpage we just created deleted. ");                             return abort;                           }                        });                     }                     function abort {                        bc.find('.ajax').remove;                        bc.append(" Aborting... ");                        $(" You may want to ")                           .append( $('refresh</a>').attr({href: wgServer+wgArticlePath.replace('$1', encodeURI(wgPageName))}) )                           .append(' and try again.')                           .appendTo(bc);                     }                     // start                     findArchives;                  }               });            }            $(pageControlHTML)               .click(startArchiving)               .appendTo(pageControls);         });      }   })(jQuery); }

/*This comes from starwars:User:Sikon/preload.js and implements the preloadable template system at bottom of input page*/

document.write('<script type="text/javascript" src="'    + '/index.php?title=MediaWiki:Functions.js&action=raw&ctype=text/javascript"> ');

function fillPreloads {   var div = document.getElementById("lf-preload");

if(div == null) return;

div.style.display = 'block'; var span = document.getElementById('lf-preload-cbox');

var comboString = "<select id='stdPreloads' onchange='onPreloadChange'>"; comboString += " "; span.innerHTML = comboString; span = document.getElementById('lf-preload-pagename'); span.innerHTML = '<input type="text" class="textbox" />'; span = document.getElementById('lf-preload-button'); span.innerHTML = '<input type="button" class="button" value="Insert" onclick="doCustomPreload" />';

requestComboFill('stdPreloads', "Template:Stdpreloads"); }

function doCustomPreload {   doPreload(document.getElementById('lf-preload-pagename').getElementsByTagName('input')[0].value); }

function onPreloadChange {   var combo = document.getElementById("stdPreloads"); var value = combo.options[combo.selectedIndex].value;

if(value == "") return;

value = "Template:" + value + "/preload"; value = value.replace(" ", "_"); doPreload(value); }

addOnloadHook(fillPreloads);

/* Preload system ends */

/* The following Facebook box builder comes from Improvaganza Wiki. It's sort of cool, but it may not be something we keep around. It creates a little box allowing you to like whatever thing appears after "id=" below. At present, it's using the id for Doctor Who on Facebook. You can see an example of what it   does at user:CzechOut/Sandbox10. Might be an idea to rotate it every once in a while, putting up the id of   whatever's the "hottest" thing in the DWU at the moment. The IDs of some other shows: Torchwood: 113521238658450 The Sarah Jane Adventures: 109282012424173 Doctor Who: 127031120644257 Big Finish: 109833429043462 */

function fBox { $('#fbox').append('<iframe marginheight="0" marginwidth="0" src="http://www.facebook.com/connect/connect.php?id=127031120644257&amp;connections=10" align="top" frameborder="0" width="300" height="90" scrolling="no" />'); }

$(fBox);