User:Ucucha/autofc-dev.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:Ucucha/autofc-dev. |
/* autofc.js
* Provides automatic FAC nomination capacity. Based on [[User:AzaToth/twinklexfd.js]].
* Experimental.
*/
// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
TwinkleConfig = {};
}
/**
TwinkleConfig.xfdWatchDiscussion (string)
The watchlist setting of the newly created XfD page. Either "yes", "no", or "default". Default is "default" (Duh).
*/
if( typeof( TwinkleConfig.xfdWatchDiscussion ) == 'undefined' ) {
TwinkleConfig.xfdWatchDiscussion = "default";
}
/**
TwinkleConfig.xfdWatchPage (string)
The watchlist setting of the page listed for XfD. Either "yes", "no", or "default". Default is "default" (Duh).
*/
if( typeof( TwinkleConfig.xfdWatchPage) == 'undefined' ) {
TwinkleConfig.xfdWatchPage= "default";
}
/**
TwinkleConfig.xfdWatchList (string)
The watchlist setting of xfd list page, *if* the discussion is on a separate page. Either "yes", "no", or "default". Default is "no" (Hehe. Seriously though, who wants to watch it? Sorry in advance for any false positives.).
*/
if( typeof( TwinkleConfig.xfdWatchList ) == 'undefined' ) {
TwinkleConfig.xfdWatchList = "no";
}
/**
summaryAdd (string)
*/
var summaryAdd = " using [[User:Ucucha/autofc|autofc]]";
function autofc() {
if( mw.config.get('wgNamespaceNumber') < 0 || mw.config.get('wgCurRevisionId') == false ) {
return;
}
if (twinkleConfigExists)
{
twAddPortletLink( "javascript:autofc.callback()", "FC", "au-fc", "Featured content nomination", "");
}
else
{
twAddPortletLink( 'javascript:alert("Your account is too new to use Twinkle.");', 'FC', 'au-fc', 'Featured content nomination', '');
}
}
window.TwinkleInit = (window.TwinkleInit || []).concat(autofc); //schedule initializer
autofc.callback = function autofcCallback() {
var Window = new SimpleWindow( 600, 325 );
Window.setTitle( "Featured content nomination" );
var form = new QuickForm( autofc.callback.evaluate );
var categories = form.append( {
type: 'select',
name: 'category',
label: 'Select wanted type of category: ',
tooltip: 'When activated, a default choice is made, based on what namespace you are in. This default should be the most appropriate',
event: autofc.callback.change_category
} );
categories.append( {
type: 'option',
label: 'FAC',
selected: mw.config.get('wgNamespaceNumber') == Namespace.MAIN,
value: 'fac'
} );
categories.append( {
type: 'option',
label: 'FLC',
selected: false,
value: 'flc'
} );
/* categories.append( {
type: 'option',
label: 'FPC',
selected: mw.config.get('wgNamespaceNumber') == Namespace.IMAGE,
value: 'fpc'
} );
categories.append( {
type: 'option',
label: 'FSC',
selected: false,
value: 'fsc'
} );
categories.append( {
type: 'option',
label: 'FPOC',
selected: mw.config.get('wgNamespaceNumber') == Namespace.PORTAL ,
value: 'fpoc'
} );*/
form.append( {
type: 'field',
label:'Work area',
name: 'work_area'
} );
var result = form.render();
Window.setContent( result );
Window.display();
// We must init the
var evt = document.createEvent( "Event" );
evt.initEvent( 'change', true, true );
result.category.dispatchEvent( evt );
}
autofc.callback.change_category = function autofcCallbackChangeCategory(e) {
var value = e.target.value;
var root = e.target.form;
var old_area;
var childNodes = root.childNodes;
for( var i = 0; i < childNodes.length; ++i ) {
var node = childNodes[i];
if(
node instanceof Element &&
node.getAttribute( 'name' ) == 'work_area'
) {
old_area = node;
break;
}
}
var work_area = null;
switch( value ) {
case 'fac':
work_area = new QuickForm.element( {
type: 'field',
label: 'Featured article candidates',
name: 'work_area'
} );
work_area.append( {
type: 'textarea',
name: 'fcreason',
label: 'Before nominating an article, please ensure it meets <i>all</i> the <a href="WP:FA?">featured article criteria</a>. ' +
'If you are unsure that the article meets these standards, <a href="WP:PR">Peer Review</a> may be a more appropriate venue. ' +
'The FAC delegates can remove unprepared nominations at their discretion after at least one one reviewer has suggested it be withdrawn.\n' +
'Further advice:\n' +
'<ul>' +
'<li>Make sure you have consulted <a href="http://vs.aka-online.de/wppagehiststat/">significant contributors to the article</a> prior to nomination.</li>' +
'<li>Double-check for <a href="WP:CP">potential copyright problems</a>, including the inadvertent <a href="WP:Copy-paste">copying</a> of information from other sources, and <a href="WP:Close paraphrasing">too-close paraphrasing</a>.</li>' +
'<li>Finally, to help resolve the FAC backlog, making it more likely that reviewers will see your nomination, please consider reviewing existing candidates, especially those listed on <a href="User:Deckiller/FAC urgents">this template</a>. Good luck!</li>' +
'</ul>\n' +
'Reason: '
} );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;
case 'flc':
work_area = new QuickForm.element( {
type: 'field',
label: 'Featured list candidates',
name: 'work_area'
} );
work_area.append( {
type: 'textarea',
name: 'fcreason',
label: 'Reason: '
} );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;
/* case 'fpc':
work_area = new QuickForm.element( {
type: 'field',
label: 'Featured picture candidates',
name: 'work_area'
} );
work_area.append( {
type: 'textarea',
name: 'fcreason',
label: 'Reason: '
} );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;
case 'fsc':
work_area = new QuickForm.element( {
type: 'field',
label: 'Featured sound candidates',
name: 'work_area'
} );
work_area.append( {
type: 'textarea',
name: 'fcreason',
label: 'Reason: '
} );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;
case 'fpoc':
work_area = new QuickForm.element( {
type: 'field',
label: 'Featured portal candidates',
name: 'work_area'
} );
work_area.append( {
type: 'textarea',
name: 'fcreason',
label: 'Reason: '
} );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;*/
default:
work_area = new QuickForm.element( {
type: 'field',
label: 'Nothing for anything',
name: 'work_area'
} );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
break;
}
}
autofc.callbacks = {
fac: {
main: function ( self ) {
var xmlDoc = self.responseXML;
var titles = xmlDoc.evaluate( '//allpages/p/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
// There has been no earlier entries with this prefix, just go on.
if( titles.snapshotLength <= 0 ) {
self.params.numbering = '/archive1';
self.params.number = '1';
numbering = number = '';
} else {
var number = 0;
for( var i = 0; i < titles.snapshotLength; ++i ) {
var title = titles.snapshotItem(i).value;
// First, simple test, is there an instance with this exact name?
if( title == 'WP:Featured article candidates/' + mw.config.get('wgPageName') + '/archive1') {
number = Math.max( number, 1 );
continue;
}
var order_re = new RegExp( '^' +
RegExp.escape( 'WP:Featured article candidates/' + mw.config.get('wgPageName'), true ) +
'/archive?'
);
var match = order_re.exec( title );
// No match; A non-good value
if( match == null ) {
continue;
}
// A match, set number to the max of current
number = Math.max( number, Number(match[1]) );
}
self.params.number = parseInt( number ) + 1;
self.params.numbering = '/archive' + self.params.number;
}
Status.info( 'Next discussion page","[[WP:Featured article candidates/' + mw.config.get('wgPageName') + self.params.numbering + ']]' );
// Discussion page
var query = {
'title': 'WP:Featured article candidates/' + mw.config.get('wgPageName') + self.params.numbering,
'action': 'submit'
};
// Updating data for the action completed event
Wikipedia.actionCompleted.redirect = query['title'];
Wikipedia.actionCompleted.notice = "Nomination completed, now redirecting to the discussion page";
var wikipedia_wiki = new Wikipedia.wiki( 'Creating FAC nomination page', query, autofc.callbacks.fac.discussionPage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
// Tagging article
var query = {
'title': 'Talk:' + mw.config.get('wgPageName'),
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Adding nomination tag to article talk page', query, autofc.callbacks.fac.article );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
query = {
'title': 'WP:Featured article candidates',
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Adding discussion to list', query, autofc.callbacks.fac.todaysList );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = true;
wikipedia_wiki.get();
},
article: function( self ) {
var form = self.responseXML.getElementById('editform');
var postData = {
'wpMinoredit': undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchPage=="yes" || (TwinkleConfig.xfdWatchPage=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Nominated as a featured article candidate; see [[WP:Featured article candidates/" + mw.config.get('wgPageName') + self.params.numbering + ']].'+ summaryAdd,
'wpTextbox1': "\{\{featured article candidates|" + mw.config.get('wgPageName') + self.params.numbering + " \}\}\n" + form.wpTextbox1.value
};
self.post( postData );
},
discussionPage: function( self ) {
var form = self.responseXML.getElementById('editform');
var nomtext = "===\[\[" + mw.config.get('wgPageName') + "\]\]===\n" +
"\n" +
"<noinclude>\{\{la|" + mw.config.get('wgPageName') + "\}\}\n" +
"\{\{Wikipedia:Featured article tools|1=" + mw.config.get('wgPageName') + "\}\}</noinclude>\n" +
"\n" +
"<!-- Please don't edit anything above here. Be sure to include your reasons for nominating below. -->\n" +
":<small>''Nominator(s): \~\~\~\~''</small>\n";
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchDiscussion=="yes" || (TwinkleConfig.xfdWatchDiscussion=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Creating FAC nomination page for \[\[" + mw.config.get('wgPageName') + '\]\].' + summaryAdd,
'wpTextbox1': nomtext + self.params.reason + " \~\~\~\~"
};
self.post( postData );
},
todaysList: function( self ) {
var form = self.responseXML.getElementById('editform');
var old_text = form.wpTextbox1.value;
var text = old_text.replace( /(<\!-- Add new nominations at the top of the list below this comment. Before nominating, please make sure the article meets the FA criteria. -->\n+)/, "$1\{\{Wikipedia:Featured article candidates/" + mw.config.get('wgPageName') + self.params.numbering + "\}\}\n");
if( text == old_text ) {
self.statelem.error( 'failed to find target spot for the discussion' );
return;
}
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchList=="yes" || (TwinkleConfig.xfdWatchList=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Adding \[\[WP:Featured article candidates/" + mw.config.get('wgPageName') + self.params.numbering + '\|FAC\]\] for \[\[' + mw.config.get('wgPageName') + '\]\].' + summaryAdd,
'wpTextbox1': text
};
self.post( postData );
}
},
flc: {
main: function ( self ) {
var xmlDoc = self.responseXML;
var titles = xmlDoc.evaluate( '//allpages/p/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
// There has been no earlier entries with this prefix, just go on.
if( titles.snapshotLength <= 0 ) {
self.params.numbering = '/archive1';
self.params.number = '1';
numbering = number = '';
} else {
var number = 0;
for( var i = 0; i < titles.snapshotLength; ++i ) {
var title = titles.snapshotItem(i).value;
// First, simple test, is there an instance with this exact name?
if( title == 'WP:Featured list candidates/' + mw.config.get('wgPageName') + '/archive1') {
number = Math.max( number, 1 );
continue;
}
var order_re = new RegExp( '^' +
RegExp.escape( 'WP:Featured list candidates/' + mw.config.get('wgPageName'), true ) +
'/archive?'
);
var match = order_re.exec( title );
// No match; A non-good value
if( match == null ) {
continue;
}
// A match, set number to the max of current
number = Math.max( number, Number(match[1]) );
}
self.params.number = parseInt( number ) + 1;
self.params.numbering = '/archive' + self.params.number;
}
Status.info( 'Next discussion page","[[WP:Featured list candidates/' + mw.config.get('wgPageName') + self.params.numbering + ']]' );
// Discussion page
var query = {
'title': 'WP:Featured list candidates/' + mw.config.get('wgPageName') + self.params.numbering,
'action': 'submit'
};
// Updating data for the action completed event
Wikipedia.actionCompleted.redirect = query['title'];
Wikipedia.actionCompleted.notice = "Nomination completed, now redirecting to the discussion page";
var wikipedia_wiki = new Wikipedia.wiki( 'Creating FLC nomination page', query, autofc.callbacks.flc.discussionPage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
// Tagging article
var query = {
'title': 'Talk:' + mw.config.get('wgPageName'),
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Adding nomination tag to article talk page', query, autofc.callbacks.flc.article );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
query = {
'title': 'WP:Featured list candidates',
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Adding discussion to list', query, autofc.callbacks.flc.todaysList );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = true;
wikipedia_wiki.get();
},
article: function( self ) {
var form = self.responseXML.getElementById('editform');
var postData = {
'wpMinoredit': undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchPage=="yes" || (TwinkleConfig.xfdWatchPage=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Nominated as a featured list candidate; see [[WP:Featured list candidates/" + mw.config.get('wgPageName') + self.params.numbering + ']].'+ summaryAdd,
'wpTextbox1': "\{\{featured list candidates|" + mw.config.get('wgPageName') + self.params.numbering + " \}\}" + form.wpTextbox1.value
};
self.post( postData );
},
discussionPage: function( self ) {
var form = self.responseXML.getElementById('editform');
var nomtext = "===" + mw.config.get('wgPageName') + "===\n" +
"\n" +
"<noinclude>\{\{la|" + mw.config.get('wgPageName') + "\}\}\n" +
"\{\{Wikipedia:Featured article tools|1=" + mw.config.get('wgPageName') + "\}\}</noinclude>\n" +
"\n" +
"<!-- Please don't edit anything above here. Be sure to include your reasons for nominating below. -->\n"
":<small>''Nominator(s): \~\~\~\~''</small>\n";
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchDiscussion=="yes" || (TwinkleConfig.xfdWatchDiscussion=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Creating FLC nomination page for \[\[" + mw.config.get('wgPageName') + '\]\].' + summaryAdd,
'wpTextbox1': nomtext + self.params.reason + " \~\~\~\~"
};
self.post( postData );
},
todaysList: function( self ) {
var form = self.responseXML.getElementById('editform');
var old_text = form.wpTextbox1.value;
var text = old_text.replace( /(Please check that the list meets the NEW FEATURED LIST CRITERIA before nominating it.-->\n+)/, "$1\{\{Wikipedia:Featured list candidates/" + mw.config.get('wgPageName') + self.params.numbering + "\}\}\n");
if( text == old_text ) {
self.statelem.error( 'failed to find target spot for the discussion' );
return;
}
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': (TwinkleConfig.xfdWatchList=="yes" || (TwinkleConfig.xfdWatchList=="default"&&form.wpWatchthis.checked) ? '' : undefined),
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSection': form.wpSection.value,
'wpSummary': "Adding \[\[WP:Featured list candidates/" + mw.config.get('wgPageName') + self.params.numbering + '\|FLC\]\] for \[\[' + mw.config.get('wgPageName') + '\]\].' + summaryAdd,
'wpTextbox1': text
};
self.post( postData );
}
}
}
autofc.callback.evaluate = function(e) {
wgPageName = mw.config.get('wgPageName').replace( /_/g, ' ' ); // for queen/king/whatever and country!
var type = e.target.category.value;
var reason = e.target.fcreason.value;
Status.init( e.target );
if( type == null ) {
Status.error( 'Error', 'no action given' );
return;
}
switch( type ) {
case 'fac': // FAC
var query = {
'action': 'query',
'list': 'allpages',
'apprefix': 'Featured article candidates/' + wgPageName,
'apnamespace': 4,
'apfilterredir': 'nonredirects',
'aplimit': userIsInGroup( 'sysop' ) ? 5000 : 500
};
var wikipedia_api = new Wikipedia.api( 'Tagging article with FAC talk tag', query, autofc.callbacks.fac.main );
wikipedia_api.params = { reason:reason };
wikipedia_api.post();
break;
case 'flc': // FLC
var query = {
'action': 'query',
'list': 'allpages',
'apprefix': 'Featured list candidates/' + wgPageName,
'apnamespace': 4,
'apfilterredir': 'nonredirects',
'aplimit': userIsInGroup( 'sysop' ) ? 5000 : 500
};
var wikipedia_api = new Wikipedia.api( 'Tagging article with FLC talk tag', query, autofc.callbacks.fac.main );
wikipedia_api.params = { reason:reason };
wikipedia_api.post();
break;
}
}