MediaWiki:Common.js: Difference between revisions
From Tardis Wiki, the free Doctor Who reference
(-disabled archive edit) |
(-edit intro button) |
||
Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
importScriptPage('ShowHide/code.js', 'dev'); | importScriptPage('ShowHide/code.js', 'dev'); | ||
importScriptPage('EditIntroButton/code.js', 'dev' ); | //importScriptPage('EditIntroButton/code.js', 'dev' ); | ||
importScriptPage('AjaxBatchDelete/code.js', 'dev'); | importScriptPage('AjaxBatchDelete/code.js', 'dev'); | ||
//importScriptPage('DisableArchiveEdit/code.js', 'dev'); | //importScriptPage('DisableArchiveEdit/code.js', 'dev'); |
Revision as of 11:27, 21 May 2011
/* 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 = '<li id="control_archive"><img src="/skins/common/blank.gif" class="sprite move" /><a id="ca-archive" title="' + msg('buttonArchiveToolTooltip') + '" href="#" rel="nofollow">' + msg('buttonArchiveTool') + '</a></li>';
buttonPrimary = ['<a class="wikia-button">', '</a>'];
buttonSecondary = ['<a class="wikia-button secondary">', '</a>'];
break;
case 'monobook':
pageBody = '#bodyContent';
pageControls = '#p-cactions > div > ul';
pageControlHTML = '<li id="control_archive"><a id="ca-archive" title="' + msg('buttonArchiveToolTooltip') + '" href="#" rel="nofollow">' + msg('buttonArchiveTool') + '</a></li>';
buttonPrimary = ['<input type="submit" style="font-weight: bold;" value="', '" />'];
buttonSecondary = ['<input type="submit" value="', '" />'];
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 = '<li id="control_archive"><a id="ca-archive" rel="nofollow">' + msg('buttonArchiveTool') + '</a></li>';
buttonPrimary = ['<a class="wikia-button">', '</a>'];
buttonSecondary = ['<a class="wikia-button secondary">', '</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 = $('<table style="margin: 10px 0;"><thead><tr><th>' + msg('labelLines') + '</th><th title="' + msg('labelSections') + '">{…}</th></tr></thead></table>').appendTo(bc);
var ul = $('<tbody/>').appendTo(table);
for ( var l = 0; l < lines.length; l++ ) {
var line = lines[l];
$('<tr/>').toggleClass('noarchive', (new RegExp('^\\{\\{'+archiveListRegex+'\}\}')).test(line))
.attr({line:line})
.append( $('<td class=line />').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);
$('<td class=section />').attr({rowspan: section.length}).appendTo(tr);
}
$('<div class="buttons" style="text-align: right;" />').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 = ['{{'+config.archiveListTemplate+'}}', ''].concat(talkLines);
archiveLines = ['{{'+config.archivePageTemplate+'}}', ''].concat(archiveLines);
bc.empty();
$('<img class="ajax" alt="Loading..." />')
.attr({src: stylepath+'/common/progress-wheel.gif'}).appendTo(bc);
//$('<pre/>').text(talkLines.join('\n')).appendTo(bc);
//$('<pre/>').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 = $('<p>Finding archive id: </p>').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 = $('<p>Finding token for '+archiveTitle+': </p>').appendTo(bc);
token(archiveTitle, function(p) {
m.append('done...');
m = $('<p>Saving archive page: </p>').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("<p>The archive page we tried to create already exists.</p>");
return abort();
}
m.append('done...');
saveTalk();
});
});
}
function saveTalk() {
var m = $('<p>Finding token for '+wgPageName+': </p>').appendTo(bc);
m.append('done...');
m = $('<p>Updating talk page: </p>').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("<p>Failed to update talkpage, you may wish to have the archive subpage we just created deleted.</p>");
return abort();
}
});
}
function abort() {
bc.find('.ajax').remove();
bc.append("<p>Aborting...</p>");
$("<p>You may want to </p>")
.append( $('<a>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"></script>');
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 += "</select>";
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&connections=10" align="top" frameborder="0" width="300" height="90" scrolling="no" />');
}
$(fBox);