User:Kangaroopower/autoArchive.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | Documentation for this user script can be added at User:Kangaroopower/autoArchive. |
// <nowiki>
// Oh btw I'm not Daniel Friesen, thats User:Dantman. I just copied this script from wikia and adapted it for WP
/*
* 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.
*/
$(function () {
var userconfig = (window.ArchiveToolConfig) ? window.ArchiveToolConfig : {};
var config = $.extend(true, {
archiveListTemplate: window.archiveListTemplate || 'archives',
archivePageTemplate: window.archivePageTemplate || 'talkarchive',
archiveSubpage: 'Archive'
}, userconfig);
window.autoArchive = {
version: '1.17',
/* Initialize the script */
init: function () {
if (mw.config.get('wgNamespaceNumber') !== 501 && mw.config.get('wgNamespaceNumber') > 0 && mw.config.get('wgAction') === "view") {
mw.util.addPortletLink('p-cactions', 'javascript:window.autoArchive.start();', "Archive", "ca-Archive", "Archive");
}
},
start: function () {
var c = 'archives'.substr(0,1),
archiveListRegex = '['+c.toUpperCase()+c.toLowerCase()+']'+'archives'.substr(1),
bc = $("#bodyContent").addClass('archiving').empty(),
rev, content;
$('<img class="ajax" alt="Loading..." src="http://images.wikia.nocookie.net/__cb51261/common/skins/common/progress-wheel.gif"/>').appendTo(bc);
$.getJSON(mw.util.wikiScript( 'api') + "?action=query&prop=revisions&titles=" + mw.config.get('wgPageName') + "&rvprop=timestamp|content&format=json" , function(q) {
bc.empty();
var rev = q.query.pages[wgArticleId].revisions[0];
content = rev['*'];
});
var lines = window.content.split('\n');
var table = $('<table style="margin: 10px 0;"><thead><tr><th>Lines</th><th title="Sections">{…}</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(
$("<input type='submit' value='Select All' />").click(function(e) {
e.preventDefault();
ul.children('tr').addClass('archive');
}), ' ',
$("<input type='submit' value='Deselect All' />").click(function(e) {
e.preventDefault();
ul.children('tr').removeClass('archive');
}), ' ',
$("<input type='submit' style='font-weight: bold;' value='Save Archive' />").click(function(e) {
window.autoArchive.archive(bc);
}), ' ',
$('<input type="submit" style="font-weight: bold;" value="Abort" />').click(function(e) {
bc.find('.ajax').remove();
location = mw.util.wikiScript( 'index')+'?title='+ mw.config.get('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)+')').addBack();
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;
});
},
archive : function(bc) {
var talkLines = [];
var archiveLines = [];
var ul = $('<tbody/>').appendTo(table);
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:'http://images.wikia.nocookie.net/__cb51261/common/skins/common/progress-wheel.gif'}).appendTo(bc);
window.autoArchive.findArchive(talkLines.join('\n'), archiveLines.join('\n'), bc);
},
findArchive: function(talkContent, archiveContent, bc) {
var archiveTitle,
qt,
archiveNo = 1,
m = $('<p>Finding archive id: </p>').appendTo(bc);
$.getJSON(mw.util.wikiScript( 'api') + "?action=query&list=allpages&apnamespace="+ mw.config.get('wgNamespaceNumber') + "&apprefix=" + mw.config.get('wgTitle') +'/'+ config.archiveSubpage +"&aplimit=max&apdir=ascending&format=json", function(q) {
$.each(q.query.allpages, function(index, value) {
qt = parseInt(q.query.allpages[index].title.substr(mw.config.get('wgPageName').length+("/"+config.archiveSubpage).length), 10);
if (qt >= archiveNo) {
archiveNo = qt+1;
}
});
archiveTitle = mw.config.get('wgPageName') +'/'+config.archiveSubpage+' '+archiveNo;
m.append('done... (using '+archiveNo+')');
window.autoArchive.saveArchive(archiveTitle, talkContent, archiveContent);
});
},
saveArchive: function(archiveTitle, talkContent, archiveContent, bc) {
var m = $('<p>Saving archive page: </p>').appendTo(bc);
$.postJSON(mw.util.wikiScript( 'api') + "?action=edit&title="+ archiveTitle +"&text="+ archiveContent +"&summary=ArchiveTool: Archiving from [[" + mw.config.get('wgPageName') + "]].&minor=true&createonly=true&format=json&token="+mw.user.tokens.get('csrfToken'), 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 window.autoArchive.abort(bc);
} else {
m.append('done...');
window.autoArchive.saveTalk(archiveTitle, archiveNo, talkContent, bc);
}
});
},
saveTalk: function(talkContent, bc){
var m = $('<p>Updating talk page: </p>').appendTo(bc);
$.postJSON(mw.util.wikiScript( 'api') + "?action=edit&title="+ mw.config.get('wgPageName') +"&text="+ talkContent +"&token="+ mw.user.tokens.get('csrfToken') +"&summary=Archiving to talk page ([[User:Kangaroopower/Scripts|ArchiveTool]])&minor=true&format=json", function(q) {
if ( q.edit.result === "Success" ) {
m.append('done...');
bc.find('.ajax').remove();
window.document.location = mw.util.wikiScript('index') +'?title='+ mw.config.get('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 window.autoArchive.abort(bc);
}
});
},
abort: function(bc) {
bc.find('.ajax').remove();
bc.append("<p>Aborting...</p>");
$("<p>You may want to </p>").append( $('<a>refresh</a>').attr({href: mw.config.get('wgServer')+mw.config.get('wgArticlePath').replace('$1', mw.config.get('wgPageName'))}) ).append(' and try again.').appendTo(bc);
}
};
$(document).ready( window.autoArchive.init );
});
// </nowiki>