/*
* 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" ) {
importStylesheetPage('ArchiveTool/code.css', 'dev');
(function($) {
var archiveListTemplate = window.archiveListTemplate || 'ArchiveList';
var archivePageTemplate = window.archivePageTemplate || 'ArchivePage';
if ( wgNamespaceNumber % 2 === 1 && ( wgAction === "view" || wgAction === "purge" ) ) {
$(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 = archiveListTemplate.substr(0,1);
var archiveListRegex = '['+c.toUpperCase()+c.toLowerCase()+']'+archiveListTemplate.substr(1);
var bc = $('#bodyContent').addClass('archiving').empty();
$('<img class="ajax" alt="Cargando..." />')
.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 = $('
<thead></thead>
').appendTo(bc);
var ul = $('<tbody/>').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(
$('<a href=#>Archivar todo</a>').click(function(e) {
e.preventDefault();
ul.children('tr').addClass('archive');
}), ' ',
$('<a href=#>Desecleccionar todo </a>').click(function(e) {
e.preventDefault();
ul.children('tr').removeClass('archive');
}), ' ',
$('<a href=#>Archivo final (guardar)</a>').click(function(e) {
archive();
})
).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 ( !/^\{\{[Aa]rchiveList\}\}/.test(talkLines[0]) )
talkLines = ['Template:'+archiveListTemplate+'', ].concat(talkLines);
archiveLines = ['Template:'+archivePageTemplate+'', ].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+'/Archive',
aplimit: 1,
apdir: 'descending'
}, function(q) {
archiveNo = q.query.allpages.length ?
parseInt(q.query.allpages[0].title.substr(wgPageName.length+"/Archive".length),10)+1 :
1;
archiveTitle = wgPageName+'/Archive '+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 = $('
Guardando página de archivo:
').appendTo(bc);
api({
action: 'edit',
title: archiveTitle,
text: archiveContent,
token: p.edittoken,
summary: "Archivado mediante ArchiveTool desde "+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 = $('
Actualizando página de discusión:
').appendTo(bc);
api({
action: 'edit',
title: wgPageName,
text: talkContent,
token: talkToken,
summary: "Archivando mediante ArchiveTool -> "+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("
Fallo al actualizar tu página de discusión, puede que desee tener la subpágina archivo que acabamos de crear eliminado.
");
return abort();
}
});
}
function abort() {
bc.find('.ajax').remove();
bc.append("
Aborting...
");
$("
You may want to
")
.append( $('<a>refresh</a>').attr({href: wgServer+wgArticlePath.replace('$1', encodeURI(wgPageName))}) )
.append(' and try again.')
.appendTo(bc);
}
// start
findArchives();
}
});
}
$('
<a id=ca-archive href=# rel=nofollow>Archive</a>
')
.click(startArchiving)
.appendTo('#page_controls');
});
}
})(jQuery);
}
/*