User:Quarl/autoafd.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:Quarl/autoafd. |
// User:Quarl/autoafd.js
// requires: wikipage.js, wikipageAfd.js, wikiedit.js, addilink.js, util.js
// enhanced by: advanced_sig.js
// quarl 2006-01-23 new version that opens the nomination page on invocation; adds
// checkboxes for tag & log (default on); do the tagging and logging
// asynchronously on 'submit'.
// TODO: don't lose the extra stuff on preview/diff
// TODO: add buttons for manually tagging/listing
// <pre><nowiki>
if(typeof window.makeSignature=='undefined')makeSignature=function(){return "~~~~"};
function autoafd_makeBeginUrl() {
var wp = wikiPage.afdPageX();
return wp.qurl + '&action=edit&fakeaction=autoafd';
}
function autoafd_load()
{
if (queryVars['fakeaction'] == 'autoafd') {
autoafd_begin();
return;
}
if (!wikiPage.nsMainP) {
// don't bother with non-main-namespace articles
return;
}
if (document.getElementById('afd')) {
// this article already has an AFD tag.
return;
}
if (wikiPage.xfdType() == 'afd')
addTab(autoafd_makeBeginUrl(), 'Afd', 'ca-autoafd', 'Nominate for deletion');
}
function autoafd_begin() {
if (window.afdEditor) return; // already initialized
// TODO: some of this is redundant with wikipageAfd.js
window.wpAfd = wikiPage;
window.wpAfdTarget = wpAfd.afdTargetPage();
if (!wpAfdTarget) {
alert("Doesn't look like an AFD page?!");
return;
}
window.wpAfdLog = afdLogPage();
var editor = window.afdEditor = wpAfd.getEditor();
if (editor.wpTextbox1) {
// TODO: automatically go to #2 etc.
alert("There's an old AFD at the default location already.\n\n" +
'Please manually edit [[' + wikiPage.page + ' (2)]]).');
return;
}
editor.wpTextbox1 = '===[[' + wpAfdTarget.page + ']]===\n' +
"Nomination. '''Delete''' " + makeSignature() + "\n*\n*\n*\n";
editor.wpSummary = "Initial nomination for deletion of [[" + wpAfdTarget.page + "]]";
editor.updateForm();
autoafd_annotate();
}
function autoafd_annotate() {
autoafd_add_new_checkboxes();
hookEventObj(document.editform.wpSave, 'click', autoafd_submitHook_Event);
window.autoafd_async_wait = null;
// Don't submit! Let the user type in peace.
}
function autoafd_add_new_checkboxes() {
if (document.getElementById('autoafd-options')) return;
var tagTitle = 'Add {{subst:afd}} to ' + string_quote_escape(wpAfdTarget.page)
var tagText = 'Tag <a href="' + url_getpath(wpAfdTarget.url) + '">' +
wpAfdTarget.page + '</a> with {{afd}}';
var listTitle = 'List this AFD on today\'s AFD log page';
var listText = 'List in <a href="'+url_getpath(wpAfdLog.url) + '">' +
//wpAfdLog.page +
'log page' +
'</a>';
var newstuff = document.createElement('div');
window.afd_newstuff = newstuff;
newstuff.id = 'autoafd-options';
newstuff.innerHTML = '<input type="checkbox" value="1" name="wpTagAFD" id="wpTagAFD" checked="1" />'+
'<label for="wpTagAFD" title="' + tagTitle + '">' +
tagText + '</label>' +
' ' +
'<input type="checkbox" value="1" name="wpListAFD" id="wpListAFD" checked="1" />'+
'<label for="wpListAFD" title="' + listTitle + '">' +
listText + '</label>';
add_before(document.editform.wpMinoredit, newstuff);
}
function autoafd_submitHook_Event(event)
{
if (!(autoafd_submitHook())) {
event.preventDefault();
event.stopPropagation();
}
}
function autoafd_submitHook() {
window.afdEditor.updateThis();
// autoafd_async_wait is initially set to null. The first time we arrive here
// we set it to 0. We wait for up to two asynchronous submissions to occur first
// before actually submitting the form.
if (autoafd_async_wait == 0) {
return true;
}
if (autoafd_async_wait == null) {
autoafd_async_wait = 0;
}
if (document.editform.wpTagAFD.checked && !window.asyncTagAFDStarted) {
window.asyncTagAFDStarted = true;
autoafd_async_wait++;
var status = window.autoafd_status_tag = document.createElement('div');
status.innerHTML = 'Tagging page: Downloading...';
status.id = 'status-tagafd';
add_after(afd_newstuff, status);
wpAfdTarget.getEditorAsync(autoafd_TagAFD);
}
if (document.editform.wpListAFD.checked && !window.asyncListAFDStarted) {
window.asyncListAFDStarted = true;
autoafd_async_wait++;
var status = window.autoafd_status_list = document.createElement('div');
status.innerHTML = 'Listing: Downloading...';
status.id = 'status-listafd';
add_after(afd_newstuff, status);
wpAfdLog.getEditorAsync(autoafd_ListAFD);
}
if (autoafd_async_wait == 0) return true;
// prevent repeat clicks
document.editform.wpSave.disabled = true;
return false;
}
function autoafd_TagAFD(editor) {
if (editor.refuseCreate()) return;
if (editor.wpTextbox1.match(/{{afd/) ||
editor.wpTextbox1.match(/\[\[Category:Pages for deletion\]\]/))
{
autoafd_status_tag.innerHTML += ' Already tagged!';
} else {
autoafd_status_tag.innerHTML += ' submitting...';
editor.wpTextbox1 = '{{subst:afd}}\n\n' + trim_lines(editor.wpTextbox1);
editor.wpSummary = 'Nominating [['+wpAfdTarget.page+']] for [['+wpAfd.page+'|AFD]]';
editor.submitAsync(null, autoafd_TagAFD_done);
}
}
function autoafd_ListAFD(editor) {
if (editor.refuseCreate()) return; // safety check
var newText = '{{'+wpAfd.page+'}}';
if (editor.wpTextbox1.indexOf(newText)!=-1) {
autoafd_status_list.innerHTML += ' already listed!';
} else {
autoafd_status_list.innerHTML += ' submitting...';
editor.wpTextbox1 = trim_lines(editor.wpTextbox1) + '\n' + newText + '\n';
editor.wpSummary = 'Listing [['+wpAfdTarget.page+']] for [['+wpAfd.page+'|AFD]]';
editor.submitAsync(null, autoafd_ListAFD_done);
}
}
function autoafd_TagAFD_done(req) {
if (req.status != 200) {
alert("Error tagging article for AFD!"); return;
}
autoafd_status_tag.innerHTML += ' done!';
autoafd_async_done_1();
}
function autoafd_ListAFD_done(req) {
if (req.status != 200) {
alert("Error listing article for AFD!"); return;
}
autoafd_status_list.innerHTML += ' done!';
autoafd_async_done_1();
}
function autoafd_async_done_1() {
if (--autoafd_async_wait == 0) {
document.editform.wpSave.disabled = false;
//document.editform.wpSave.click();
document.editform.submit();
}
}
$(autoafd_load);
// </nowiki></pre>