Wikipedysta:Tomasz Wachowski/common.js
mw.loader.load('https://en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-ProveIt.js&action=raw&ctype=text/javascript');
// [[:en:User:ProveIt GT]]
importScript('Wikipedysta:Skalee/zlicz linkujące.js');
mw.loader.load('ext.gadget.move-to-sandbox');
importScript("Wikipedysta:Matma Rex/prettyref.js")
// <nowiki>
importScript ('MediaWiki:MD5.js');
importScript ('MediaWiki:Utilities.js');
importScript ('MediaWiki:Gadget-Lupo-Utilities.js')
/*
Support for quick deletions and closing of deletion requests at Polish Wikipedia.
Author: [[User:Lupo]], October 2007 - January 2008
full list of authors: http://commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-DelReqHandler.js&action=history
Adaptation for pl.wiki: [[User:Lampak]]
Contains parts of code (possibly modified) of commons:MediaWiki:AjaxQuickDelete.js
by [[User:Ilmari Karonen]], [[User:DieBuche]]
full list of authors: http://commons.wikimedia.org/w/index.php?title=MediaWiki:AjaxQuickDelete.js&action=history
Tested only in Firefox.
*/
/**** Guard against double inclusions */
if (typeof (DelReqHandler) == 'undefined') {
/**** Some things may not be defined in some cases */
var DelReqUtils =
{
// The following function is defined in several places, and unfortunately, it is defined
// wrongly in some places. (For instance, in [[:en:User:Lupin/popups.js]]: it should use
// decodeURIComponent, not decodeURI!!!) Make sure we've got the right version here:
getParamValue : function (paramName, href)
{
var cmdRe = RegExp ('[&?]' + paramName + '=([^&]*)');
var h = href || document.location.href;
var m = cmdRe.exec (h);
if (m) {
try {
return decodeURIComponent (m[1]);
} catch (someError) {}
}
return null;
}
}; // End of DelReqUtils
var DelReqHandler =
{
/*------------------------------------------------------------------------------------------
Deletion request closing: add "[d][del]" and "[k][keep]" links to the left of the section edit
links of a deletion request. [d] and [k] open the deletion request for editing in a new window
(or tab), add "delh" and "delf" with "Deleted." or "Kept." plus the signature (four tildes)
and then save and close the tab. [del] and [keep] do the same, but don't save and close the
window, so that the user may enter an additional comment.
------------------------------------------------------------------------------------------*/
lupo_close_del : 'close_del',
lupo_close_keep : 'close_keep',
lupo_close_no_result : 'close_no_result',
lupo_close_repaired : 'close_repaired',
close_del_summary : 'Usunięto.',
close_keep_summary : 'Zostawiono.',
close_no_result_summary : 'Nie osiągnięto konsensusu.',
close_repaired_summary: 'Do załatwionych.',
deletion_request_pages : ['Wikipedia:Poczekalnia/artykuły', 'Wikipedia:Poczekalnia/biografie', 'Wikipedia:Poczekalnia/kwestie_techniczne', 'Wikipedia:Poczekalnia/naprawa', 'Wikipedia:Poczekalnia/zgłoszenia'],
repair_request_page : 'Wikipedia:Poczekalnia/naprawa',
archive_section_line : '<!-- Zakończone dyskusje wstawiaj poniżej tej linii -->',
archive_edit_summary : '[[$1]] − dyskusja zakończona',
script_dependencies : ['jquery.ui'],
loading_progress : 0,
beginLoading : function()
{
if ((wgAction == 'view' || wgAction == 'purge') && this.isItDelReqPage() && document.URL.search (/[?&]oldid=/) < 0)
{
var o = this;
mw.loader.using(this.script_dependencies, function() {
$(document).ready(function() {
o.closeRequestLinks();
});
});
}
else if (wgAction == 'edit')
this.maybeSetupForm();
},
isItDelReqPage : function()
{
for (var i = 0; i < this.deletion_request_pages.length; i++)
if (wgPageName.indexOf(this.deletion_request_pages[i]) == 0)
return true;
return false;
},
isLinkToSubpage : function(href)
{
for (var i = 0; i < this.deletion_request_pages.length; i++)
{
var searched = encodeURIComponent(this.deletion_request_pages[i] + '/').
replace(/\%3A/g, ':').replace(/\%20/g, '_').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\%2F/g, '/');
if(href.indexOf(searched) > 0)
return true;
}
return false;
},
closeRequestLinks : function ()
{
function addRequestLinks (name, href, before, parent)
{
parent.insertBefore (document.createTextNode ('['), before);
parent.insertBefore (makeRawLink (
name.substring (0, 1),
href + DelReqHandler.lupo_quick_closure,
'_blank'
), before);
parent.insertBefore (document.createTextNode (']'), before);
parent.insertBefore (document.createTextNode ('['), before);
parent.insertBefore (makeRawLink (name, href, '_blank'), before);
parent.insertBefore (document.createTextNode (']'), before);
}
var is_repair_page = wgPageName.indexOf(this.repair_request_page) == 0;
var edit_lks = $('.editsection').get();
var lk_number = 0;
for (i = 0; i < edit_lks.length; i++) {
// Find the A within:
var anchors = edit_lks[i].getElementsByTagName ('a');
if (anchors != null && anchors.length > 0) {
var anchor = anchors[0];
var href = anchor.getAttribute ('href');
if (//href.indexOf ('Wikipedia:Poczekalnia/20') < 0 && //I can't see any point in it...
this.isLinkToSubpage(href))
{
var offset = href.indexOf ('§ion=1');
var len = 10;
if (offset < 0) {
offset = href.indexOf ('§ion=T-1'); // Fix for MW 1.13alpha
len = 12;
}
if (offset > 0 && offset + len == href.length) {
// It's really an edit lk to a deletion request subpage, and not a section
// edit for a daily subpage or something else
//bold the edit button
anchor.style.fontWeight = 'bold';
var orig_bracket = edit_lks[i].firstChild;
var close_href = href.substring (0, offset);
close_href = encodeURIComponent(close_href); //encode ampersands etc.
//get deletion reason
var subpage = href.substring (href.indexOf ('title=') + 6);
var idx = subpage.indexOf ("&");
if (idx >= 0) subpage = subpage.substring (0, idx);
//
// buttons
//
//delete
var link_id = "drh-del-" + lk_number;
var link = makeActiveLink(
'usuń'
, 'DelReqHandler.buttonClicked('
+ '0, '
+ "'" + link_id + "', "
+ "'" + subpage + "', "
+ "'" + close_href + '&fakeaction=' + DelReqHandler.lupo_close_del + "'"
+ ');'
);
link.id = link_id;
edit_lks[i].insertBefore(document.createTextNode('['), orig_bracket);
edit_lks[i].insertBefore(link, orig_bracket);
edit_lks[i].insertBefore(document.createTextNode('] ['), orig_bracket);
if (!is_repair_page)
{
//not for the repair section
//keep
link_id = "drh-keep-" + lk_number;
link = makeActiveLink(
'zostaw'
, 'DelReqHandler.buttonClicked('
+ '1, '
+ "'" + link_id + "', "
+ "'" + subpage + "', "
+ "'" + close_href + '&fakeaction=' + DelReqHandler.lupo_close_keep + "'"
+ ');'
);
link.id = link_id;
edit_lks[i].insertBefore(link, orig_bracket);
edit_lks[i].insertBefore(document.createTextNode('] ['), orig_bracket);
//no result
link_id = "drh-noresult-" + lk_number;
link = makeActiveLink(
'brak wyniku'
, 'DelReqHandler.buttonClicked('
+ '2, '
+ "'" + link_id + "', "
+ "'" + subpage + "', "
+ "'" + close_href + '&fakeaction=' + DelReqHandler.lupo_close_no_result + "'"
+ ');'
);
link.id = link_id;
edit_lks[i].insertBefore(link, orig_bracket);
edit_lks[i].insertBefore(document.createTextNode('] ['), orig_bracket);
}
if (is_repair_page)
{
//only for the repair section
//repaired
link_id = "drh-repaired-" + lk_number;
link = makeActiveLink(
'naprawiono'
, 'DelReqHandler.buttonClicked('
+ '3, '
+ "'" + link_id + "', "
+ "'" + subpage + "', "
+ "'" + close_href + '&fakeaction=' + DelReqHandler.lupo_close_repaired + "'"
+ ');'
);
link.id = link_id;
edit_lks[i].insertBefore(link, orig_bracket);
edit_lks[i].insertBefore(document.createTextNode('] ['), orig_bracket);
}
//to archive
link_id = "drh-archive-" + lk_number;
link = makeActiveLink(
'do arch.'
, 'DelReqHandler.buttonClicked('
+ '4, '
+ "'" + link_id + "', "
+ "'" + subpage + "', "
+ "'" + close_href + "'"
+ ');'
);
link.id = link_id;
edit_lks[i].insertBefore(link, orig_bracket);
edit_lks[i].insertBefore(document.createTextNode('] '), orig_bracket);
lk_number++;
}
}
}
}
},
/*------------------------------------------------------------------------------------------
Links on every non-deleted image mentioned on a deletion request page. The "[del]" link
triggers deletion (auto-completed!) of the image, with a deletion summary linking to the
deletion request. If the image has a talk page, it is deleted as well. The "[keep]" link
automatically removes the "delete" template from the image page and adds the "kept" template
to the image talk page, both linking back to the deletion request.
------------------------------------------------------------------------------------------*/
/*
* buttonClicked
*
* Called when the user clicked one of the links
*
* action - which of the links has been pressed?
* 0 - delete
* 1 - keep
* 2 - no result
* 3 - repaired
* 4 - to archive
* id - id of the link pressed
* subpage - subpage of the request
* old_style_href - URL which marks the request as closed
*/
buttonClicked : function (action, id, sub, old_style_href)
{
this.startDate = new Date ();
this.subpage = sub;
this.reason = '[[' + sub + ']]';
this.keep_summary = 'Zostawiono po dyskusji: ' + this.reason;
this.close_href = old_style_href;
//find the link
var el = document.getElementById(id);
if (!el)
{
//no such link
alert("Error - link not found");
return;
}
//go up to the header
while (el.tagName.search('H\\d') < 0)
{
el = el.parentNode;
if (el == document)
{
alert("Error - link outside a header");
return;
}
}
//find the header line
var els = $(el).find('.mw-headline').get();
if (els.length > 1)
{
//more then one headline in a header - something's wrong.
alert("Error!");
return;
}
el = els[0];
var header = el; //remember for moveToArchive()
this.pages_to_process = [];
//find all links in the header
els = el.getElementsByTagName('a');
for (var i = 0; i < els.length; i++)
{
///make keep_href and open
el = $(els[i]);
if (el.hasClass('new'))
//red link
continue;
var href = el.attr('href');
this.pages_to_process.push(titleFromHref(href));
}
//move the subpage to the 24h archive
this.subpage_title = titleFromHref(old_style_href);
this.tasks = [];
this.addTask('showProgress');
this.addTask('getEditToken');
switch(action)
{
case 0: //delete
this.addTask('deletePages');
break;
case 3: //repaired
case 2: //noresult
case 1: //keep
this.addTask('removeTemplate');
switch(action)
{
case 1: //kept
this.template_param = 'zostawiono';
break;
case 2: //no result
this.template_param = 'brak wyniku';
break;
case 3:
this.template_param = 'naprawiono';
break;
}
break;
}
this.addTask('addSubpageToArchive');
this.addTask('removeSubpage');
this.addTask('openSubpageForEdit');
this.addTask('reloadPage');
this.nextTask();
},
removeTemplate : function()
{
if (this.pages_to_process.length == 0)
{
this.nextTask();
return;
}
this.page_processed = this.pages_to_process.shift();
this.updateProgress('Usuwam szablon {{DNU}} ze strony „' + this.page_processed + '”');
this.fetchPage(this.page_processed, 'removeTemplateCB');
},
removeTemplateCB : function(result)
{
var text = this.extractPageText(result);
var start = text.indexOf ('\{\{DNU');
if (start < 0) start = text.indexOf ('\{\{dNU');
if (start < 0) start = text.indexOf ('\{\{poczSDU');
if (start < 0) start = text.indexOf ('\{\{PoczSDU');
if (start < 0) start = text.indexOf ('\{\{PoczSdU');
if (start < 0) start = text.indexOf ('\{\{poczSdU');
if (start >= 0) {
var level = 0;
var curr = start + 2;
var end = 0;
while (curr < text.length && end == 0) {
var opening = text.indexOf ('\{\{', curr);
var closing = text.indexOf ('\}\}', curr);
if (opening >= 0 && opening < closing) {
level = level + 1;
curr = opening + 2;
} else {
if (closing < 0) {
// No closing braces found
curr = text.length;
} else {
if (level > 0) level = level - 1;
else end = closing + 2;
curr = closing + 2;
}
}
}
if (end > start) {
// Also strip whitespace after the "delete" template
if (start > 0) {
//text = text.substring (0, start)
// + text.substring (end).replace(/^\s*/, '');
var beginning = text.substring(0,start);
var ending = text.substring(end);
//strip <noinclude>, if the template is the only thing in it
if (beginning.search(/<noinclude>\s*$/) >= 0
&& ending.search(/^\s*<\/noinclude>/) >= 0)
{
beginning = beginning.replace(/<noinclude>\s*$/, '');
ending = ending.replace(/^\s*<\/noinclude>/, '');
}
else
ending = ending.replace('^\\s*', '');
text = beginning + ending;
} else {
text = text.substring (end).replace(/^\s*/, '');
}
var page = {};
page.title = this.page_processed;
page.editType = 'text';
page.text = text;
this.savePage (
page,
this.keep_summary,
'addKeepToTalk'
);
success = true;
} else {
this.addWarning ('Nie znaleziono zamknięcia szablonu na stronie ' + this.page_processed + '.');
this.addKeepToTalk();
}
} else {
this.addWarning ('Nie znaleziono szablonu DNU na stronie ' + this.page_processed + '.');
this.addKeepToTalk();
}
},
addKeepToTalk : function ()
{
//
var talk_title = this.findTalkPage(this.page_processed);
this.updateProgress('Dodaję szablon {{DNU}} na stronie dyskusji „' + talk_title + '”.');
var text;
try {
text = '\{\{DNU|' + this.template_param + '|zakończenie='
+ this.formatDate('YYYY-MM-DD');
text = text + '|podstrona=' + this.subpage + '\}\}\n';
success = true;
} catch (ex) {
// Swallow
}
if (!success) {
// Huh? Somehow, we couldn't get the date.
text = '\{\{DNU|' + this.template_param + '|podstrona=' + this.subpage + '\}\}\n';
}
var page = {};
page.editType = 'prependtext';
page.text = text;
page.title = talk_title;
this.savePage(page, this.keep_summary, 'removeTemplate');
},
//Find the parent page
//For example if page_name is Wikipedia:DNU/artykuły/zgłoszenie
//and deletion_request_pages=['Wikipedia:DNU/artykuły', 'Wikipedia:DNU/techniczne']
//the function should return 'Wikipedia:DNU/artykuły'
findParentPage : function(page_name)
{
var result;
for (var i = 0; i < this.deletion_request_pages.length; i++)
{
var page = this.deletion_request_pages[i];
if (page_name.indexOf(page) == 0)
if (result == null || page.length > result.length)
result = page;
}
return result;
},
findTalkPage : function (title) {
//wgNamespaceIds doesn't contain canonical namespace names (bug 25375)
//create our own table then.
var namespaceIds = {
'talk' : 1,
'user' : 2,
'user_talk' : 3,
'project' : 4,
'project_talk' : 5,
'file' : 6,
'file_talk' : 7,
'mediawiki' : 8,
'mediawiki_talk' : 9,
'template' : 10,
'template_talk' : 11,
'help' : 12,
'help_talk' : 13,
'category' : 14,
'category' : 15
};
for (var n in wgNamespaceIds)
namespaceIds[n] = wgNamespaceIds[n];
var talk_title;
var idx = title.indexOf(':');
if (idx < 0)
//no colon - main namespace
talk_title = 'Dyskusja:' + title;
else
{
var namespace = title.substring(0, idx).toLowerCase().replace(/ /g, '_');
if (namespaceIds[namespace] == null)
//no such namespace - main namespace
talk_title = 'Dyskusja:' + title;
else
{
var id = namespaceIds[namespace];
if (id % 2 == 1)
{
//already a link to a talk page?
talk_title = title;
}
else
talk_title = wgFormattedNamespaces[id+1] + ':' + title.substring(idx+1);
}
}
return talk_title;
},
no_result : false, //says whether 'brak wyniku' should be used as a param of DNU template
//name of the parent page of a request (i.e. the page where it is (hopefully) included)
//name of the temorary archive page
archive_page : '',
//the subpage which is being moved to archive
//Moves the given subpage to a temporary archive
//The archive should be at a page titled like the one with the deletion requests
// ended with " załatwione 24".
//and contain the text spcifed in archive_section_line
addSubpageToArchive : function()
{
this.updateProgress('Dodaję podstronę do archiwum 24...');
this.parent_page = this.findParentPage(this.subpage);
this.archive_page = this.parent_page + ' załatwione 24';
this.fetchPage(this.archive_page, 'addSubpageToArchiveCB');
},
addSubpageToArchiveCB : function(result)
{
var text = this.extractPageText(result);
var subpage = this.subpage;
//if it's possible - strip the prefix
var idx = subpage.indexOf(DelReqHandler.archivePageName);
if (idx == 0)
subpage = subpage.substr(DelReqHandler.archivePageName.length);
subpage = '{{' + subpage + '}}';
if (text.indexOf(DelReqHandler.archive_section_line) >= 0)
text = text.replace(
DelReqHandler.archive_section_line,
DelReqHandler.archive_section_line + '\n' + subpage
);
else
//no archive line - just append
//do not add an extra line break if the current text ends with one
text =
text
+ (text[text.length-1] == '\n' ? '' : '\n')
+ subpage;
var page = {};
page.title = this.archive_page;
page.editType = 'text';
page.text = text;
this.savePage(
page,
'+ {{[[' + this.subpage + ']]}}',
'nextTask'
);
},
//removes a subpage inclusion from the main request page
removeSubpage : function()
{
this.updateProgress();
this.fetchPage(this.parent_page, 'removeSubpageCB');
},
removeSubpageCB : function (result)
{
var text = this.extractPageText(result);
//find the subpage inclusion
var searched = "{{" + this.subpage + "}}\n";
var idx = text.indexOf(searched);
if (idx < 0)
{
//not found - try with spaces instead of underscores
searched = searched.replace(/_/g, ' ');
idx = text.indexOf(searched);
if (idx < 0)
{
//not found - but the inclusion may still look like {{/subpage}}
if (this.subpage.indexOf(this.subpage) == 0)
{
searched = this.subpage.substr(this.parent_page.length);
searched = "{{" + searched + "}}\n";
idx = text.indexOf(searched);
if (idx < 0)
{
//not found - try with spaces instead of underscores
searched = searched.replace('_', ' ');
idx = text.indexOf(searched);
}
}
}
}
if (idx >= 0)
{
//inclusion found - cut it out
text = text.substr(0, idx) + text.substr(idx + searched.length);
var page = {};
page.title = this.parent_page;
page.text = text;
page.editType = 'text';
this.savePage(
page,
'{{[[' + this.subpage + ']]}} - przeniesione do archiwum',
'nextTask'
);
}
else
{
this.nextTask();
}
},
/*
* This function will pre-fill the form when closing a request.
* User must be editting and fakeaction must be set.
*/
maybeSetupForm : function()
{
var param = DelReqUtils.getParamValue ('fakeaction');
if (param == null)
return;
var summary = null;
var result_param = null;
if (param == DelReqHandler.lupo_close_del) {
summary = DelReqHandler.close_del_summary;
result_param = 'usunięto';
} else if (param == DelReqHandler.lupo_close_keep) {
summary = DelReqHandler.close_keep_summary;
result_param = 'zostawiono';
} else if (param == DelReqHandler.lupo_close_no_result) {
summary = DelReqHandler.close_no_result_summary;
result_param = 'brak wyniku';
} else if (param == DelReqHandler.lupo_close_repaired) {
summary = DelReqHandler.close_repaired_summary;
result_param = 'naprawiono';
}
if (summary !== null && result_param !== null) {
$('#wpSummary').val(summary);
var textbox = document.editform.wpTextbox1;
var text = textbox.value + '\n\'\'\'' + summary + '\'\'\' \~\~\~\~';
text = text.replace(/(\{\{lnDNU)/gi, '$1|rezultat=' + result_param + '|data zakończenia=' + this.formatDate("YYYY-MM-DD"));
textbox.value = text;
// Don't close the window so the user can add a comment.
if (text.scrollHeight > text.clientHeight) {
text.scrollTop = text.scrollHeight - text.clientHeight;
}
textbox.focus();
}
},
deletePages : function()
{
if (this.pages_to_process.length == 0)
{
this.nextTask();
return;
}
this.page_processed = this.pages_to_process.shift();
this.updateProgress('Usuwam stronę ' + this.page_processed + '...');
this.deletePage(this.page_processed, 'Usunięto po dyskusji: ' + this.reason, 'deleteTalkPage');
},
deleteTalkPage : function()
{
var talk_title = this.findTalkPage(this.page_processed);
this.updateProgress('Usuwam stronę dyskusji ' + talk_title + '...');
this.deletePage(talk_title, 'Strona dyskusji artykułu usuniętego po dyskusji: ' + this.reason, 'deletePages');
},
openSubpageForEdit : function()
{
this.updateProgress('Otwieram podstronę zgłoszenia do edycji...');
if(!window.DelReqPopup)
{
//user preferences - open edit in the same window
location.href = this.close_href;
}
else
{
window.open(this.close_href, '_blank');
$('#del-req-progress').dialog("close");
document.body.style.cursor = '';
}
this.nextTask();
},
/**
* Once we're all done, reload the page.
* force - if true, the page will be reloaded no matter user preferences
**/
reloadPage : function (force) {
if (!force && (!window.DelReqPopup || window.DelReqDontReload))
//user preferences - don't reload when finished
return;
if (this.there_are_warnings === true)
{
//there were warnings - give the user 3 more seconds to read them
window.setTimeout(function() {
DelReqHandler.reloadPage();
}, 3000);
this.there_are_warnings = false;
return;
}
//reload
var title = encodeURIComponent(this.destination || wgPageName).
replace(/\%3A/g, ':').replace(/\%20/g, '_').
replace(/\(/g, '%28').replace(/\)/g, '%29').
replace(/\%2F/g, '/');
location.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace("$1", title);
},
/**
* Submit an edited page.
**/
savePage : function (page, summary, callback) {
var edit = {
action : 'edit',
summary : summary,
watchlist : (page.watchlist || 'preferences'),
title : page.title,
token : this.edittoken
};
edit[page.editType]=page.text;
this.doAPICall( edit, callback );
},
/**
* Get the page text.
**/
fetchPage : function (page, callback) {
var query = {
action : 'query',
prop : 'revisions',
rvprop : 'content',
titles : page,
indexpageids : '1'
};
this.doAPICall(query, callback);
},
deletePage : function (page, reason, callback)
{
var query = {
action : 'delete',
title : page,
token : this.edittoken, //delete token is equal to edit token
reason : reason
};
this.doAPICall(query, callback, true);
//this[callback]();
},
extractPageText : function(res)
{
if (res.query.pageids[0] < 0) return ''; //no such page exists
return res.query.pages[ res.query.pageids[0] ].revisions[0]['*'];
},
//Only for speedy deletion. Reporting for discussion obtains the token while performing other tasks.
getEditToken : function () {
var query = {
action : 'query',
prop : 'info|revisions',
rvprop : 'timestamp',
intoken : 'edit',
titles : wgPageName
};
this.doAPICall( query, 'getEditTokenCB' );
},
getEditTokenCB : function (result) {
var pages = result.query.pages;
for (var id in pages) { // there should be only one, but we don't know its ID
// The edittoken only changes between logins
this.edittoken=pages[id].edittoken;
this.starttimestamp = pages[id].starttimestamp;
this.timestamp = pages[id].revisions[0]['timestamp'];
}
this.updateProgress( this.i18n.preparingToEdit.replace('%COUNT%', '') );
this.nextTask();
},
/**
* Does a MediaWiki API request and passes the result to the supplied callback (method name).
* Uses POST requests for everything for simplicity.
* TODO: better error handling
**/
doAPICall : function ( params, callback, ignore_missing_title ) {
var o = this;
params.format='json';
$.ajax( {
url: this.apiURL,
cache: false,
dataType: 'json',
data: params,
type: 'POST',
success: function(result, status, x) {
if (!result) return o.fail( "Receive empty API response:\n" + x.responseText );
// In case we get the mysterious 231 unknown error, just try again
if (result.error && result.error.info.indexOf('231') != -1) return setTimeout(function() {
o.doAPICall(params, callback);
},500);
if (result.error) {
if (result.error.code != 'missingtitle' || !ignore_missing_title)
return o.fail( "API request failed (" + result.error.code + "): " + result.error.info );
}
if (result.edit && result.edit.spamblacklist) return o.fail( "The edit failed because " + result.edit.spamblacklist + " is on the Spam Blacklist");
try {
o[callback](result);
}
catch (e) {
return o.fail(e);
}
},
error: function(x, status, error) {
return o.fail( "API request returned code " + x.status + " " + status + "Error code is " + error);
}
});
},
apiURL: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php",
/**
* Simple task queue. addTask() adds a new task to the queue, nextTask() executes
* the next scheduled task. Tasks are specified as method names to call.
**/
tasks : [], // list of pending tasks
currentTask : '', // current task, for error reporting
addTask : function ( task ) {
this.tasks.push( task );
},
nextTask : function () {
var task = this.currentTask = this.tasks.shift();
try {
this[task]();
}
catch (e) {
this.fail(e);
}
},
/**
* For display of progress messages.
**/
showProgress : function () {
document.body.style.cursor = 'wait';
$progress = $('<div id="del-req-progress"></div>')
.html('<div><div id="feedbackContainer">Szykuję się do edytowania...</div><div id="ajax-delete-warnings></div></div>')
.dialog( {
width: 600,
height: 200,
minHeight: 90,
modal: false,
resizable: false,
draggable: false,
closeOnEscape: false,
dialogClass: "ajaxDeleteFeedback",
close: function() {
$(this).dialog("destroy");
$(this).remove();
}
});
$('.ui-dialog-titlebar').hide();
this.nextTask();
},
updateProgress : function (message) {
$('#feedbackContainer').html(message);
},
/**
* Crude error handler. Just throws an alert at the user and (if we managed to
* add the {delete} tag) reloads the page.
**/
fail : function ( err ) {
document.body.style.cursor = 'default';
var msg = this.i18n.taskFailure[this.currentTask] || this.i18n.genericFailure;
var fix = '';//(this.templateAdded ? this.i18n.completeRequestByHand : this.i18n.addTemplateByHand );
$('#feedbackContainer').html(msg + " " + fix + "<br>" + this.i18n.errorDetails + "<br>" + err + "<br><a href="https://profillengkap.com/pl/ + wgServer + "/wiki/MediaWiki_talk:DelReqHandler.js>" + this.i18n.errorReport +"</a>");
$('#feedbackContainer').addClass('ajaxDeleteError');
// Allow some time to read the message
if (this.templateAdded) setTimeout(function() {
this.reloadPage(true);
}, 5000);
},
there_are_warnings : false,
addWarning : function(msg)
{
$('#ajax-delete-warnings').append('<p><b>UWAGA!</b> ' + msg + '</p>');
this.there_are_warnings = true;
},
/**
* Very simple date formatter. Replaces the substrings "YYYY", "MM" and "DD" in a
* given string with the UTC year, month and day numbers respectively. Also
* replaces "MON" with the English full month name and "DAY" with the unpadded day.
**/
formatDate : function ( fmt, date ) {
var pad0 = function ( s ) {
s = "" + s;
return (s.length > 1 ? s : "0" + s);
}; // zero-pad to two digits
if (!date) date = this.startDate;
if (!date) date = new Date();
fmt = fmt.replace( /YYYY/g, date.getUTCFullYear() );
fmt = fmt.replace( /MM/g, pad0( date.getUTCMonth()+1 ) );
fmt = fmt.replace( /DD/g, pad0( date.getUTCDate() ) );
fmt = fmt.replace( /MON/g, this.months[ date.getUTCMonth() ] );
fmt = fmt.replace( /DAY/g, date.getUTCDate() );
return fmt;
},
months : "styczeń luty marzec kwiecień maj czerwiec lipiec sierpień wrzesień październik listopad grudzień".split(" "),
i18n : {
// Errors
preparingToEdit : "Szykuję się do edytowania... ",
genericFailure : "Wysŧąpił błąd.",
taskFailure : {
},
errorDetails : "Szczegółowy opis błędu:",
errorReport : "Zgłoś nieprawidłowe działanie"
}
}; // End of DelReqHandler
DelReqHandler.beginLoading();
} // End of idempotency check
// </nowiki>
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.