//<nowiki>
( function ( $, mw ) {
mw.loader.load( "mediawiki.api" );
mw.loader.load( "jquery.chosen" );
mw.loader.load( "mediawiki.ui.input", "text/css" );
if ( mw.config.get( "wgNamespaceNumber" ) !== 118 ) return;
const WIKIPROJECT_LIST_AFCH = "User:Theo's Little Bot/afchwikiproject.js";
const WIKIPROJECT_LIST_IBX = "User:Enterprisey/ibx-wproj-map.js";
var portletLink = mw.util.addPortletLink('p-cactions', '#', 'Sort (draft)', 'pt-draftsort', 'Manage WikiProject tags');
$( portletLink ).click( function ( e ) {
e.preventDefault();
// If it's already there, don't duplicate
if ( $( "#draft-sorter-wrapper" ).length ) return;
// Construct the form
var form = $( "<div>" )
.attr( "id", "draft-sorter-wrapper" )
.css( { "background-image": "url(https://upload.wikimedia.org/wikipedia/commons/b/b8/OOjs_UI_icon_tag-progressive.svg)",
"background-repeat": "no-repeat",
"background-position-y": "center",
"background-size": "50px",
"margin": "1em auto",
"border": "thin solid #BBB",
"padding": "0.5em 0",
"padding-left": "50px",
"display": "inline-block",
"border-radius": "0.25em"
} )
.append( $( "<span>" )
.text( "Loading form..." )
.css( "color", "gray" ) );
// Now, make two JSON calls to the WikiProject lists
var select = $( "<select>" )
.attr( "id", "draft-sorter-form" )
.attr( "multiple", "multiple" );
var wikiprojects = {}; // maps names to template names
$.when(
$.ajax( {
url: mw.config.get( 'wgServer' ) + "/w/index.php?title=" +
WIKIPROJECT_LIST_IBX + "&action=raw&ctype=text/plain",
} ).done( function ( data ) {
console.log( "got ibx" );
var start = data.indexOf( "--------------------" );
data = data.substr( start );
var dataLines = data.split( "\n" );
for( var i = 0; i < dataLines.length; i++ ) {
if( dataLines.startsWith( "//" ) ) {
continue;
}
projectName = dataLines.split( "|" ).trim();
wikiprojects = projectName;
}
} ),
$.getJSON( mw.config.get( 'wgServer' ) + "/w/index.php?title=" +
WIKIPROJECT_LIST_AFCH + "&action=raw&ctype=text/javascript" ).done( function ( data ) {
console.log( "got afch" );
$.each( data, function ( name, template ) {
wikiprojects = template;
} );
} )
).then( function ( a, b ) {
console.log( wikiprojects );
console.log( arguments );
$.each( wikiprojects, function ( name, template ) {
select.append( $( "<option>" )
.attr( "value", template )
.text( name ) );
} );
form.hide();
form.empty();
form.append( $( "<span>" )
.text( "Tag WikiProjects: " )
.css( {
"font-size": "115%",
"font-weight": "bold"
} ) );
form.append( select );
form.append( $( "<button>" )
.text( "Submit" )
.addClass( "mw-ui-button" )
.addClass( "mw-ui-progressive" )
.addClass( "mw-ui-big" )
.css( "margin-left", "0.25em" )
.click( submit ) );
form.append( $( "<button>" )
.addClass( "mw-ui-button mw-ui-destructive mw-ui-quiet" )
.text( "Cancel" )
.click( function ( e ) {
$( "#draft-sorter-wrapper" ).remove();
} ) );
form.show();
$( select ).chosen( {
"placeholder_text_multiple": "Select some WikiProjects"
} );
} ).catch(function(e){console.log(e);});
// Add the form to the page
form.insertAfter( "#jump-to-nav" );
// The submission function
var submit = function () {
var newTags = $( "#draft-sorter-form").val();
console.log( newTags );
var statusList = $( "<ul>" )
.appendTo( "#draft-sorter-wrapper" )
.append( $( "<li>" ).text( "Saving " + newTags.length + " new tags." ) );
var showStatus = function ( status ) {
return $( "<li>" )
.text( status )
.appendTo( statusList );
};
var newText = "";
newTags.forEach( function ( element ) {
newText += "{{" + element + "|importance=|class=draft}}";
} );
( new mw.Api() ).postWithEditToken( {
action: "edit",
title: "Draft talk:" + mw.config.get( 'wgTitle' ),
summary: "Tagging drafts (draft-sorter.js)",
prependtext: newText
} ).done( function ( data ) {
if ( data && data.edit && data.edit.result && data.edit.result === "Success" ) {
showStatus( "Edit saved successfully! (" )
.append( $( "<a>" )
.text( "reload" )
.attr( "href", "#" )
.click( function () { document.location.reload( true ); } ) )
.append( ")" );
} else {
showStatus( "Couldn't save due to error: " + JSON.stringify( data ) );
}
} ).fail( function ( error ) {
showStatus( "Couldn't save due to error: " + JSON.stringify( error ) );
} );
};
} );
}( jQuery, mediaWiki ) );
//</nowiki>