User:Abelmoschus Esculentus/draft-sorter.js

// ( function ( $, mw ) {   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 = $( " " ) .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( $( " " )               .text( "Loading form..." )               .css( "color", "gray" ) );

// Now, make two JSON calls to the WikiProject lists var 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[i].startsWith( "//" ) ) { continue; }

projectName = dataLines[i].split( "|" )[0].trim; wikiprojects[projectName.replace( "WikiProject ", "" )] = 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[name] = template;                } ); } )       ).then( function ( a, b ) {            console.log( wikiprojects );            console.log( arguments );            $.each( wikiprojects, function ( name, template ) { select.append( $( " " )           	    .attr( "value", template )            	    .text( name ) ); } );           form.hide;            form.empty;            form.append( $( " " ) .text( "Tag WikiProjects: " ) .css( {               	"font-size": "115%",                	"font-weight": "bold"                } ) );            form.append( select );            form.append( $( " " ) .text( "Submit" ) .addClass( "mw-ui-button" ) .addClass( "mw-ui-progressive" ) .addClass( "mw-ui-big" ) .css( "margin-left", "0.25em" ) .click( submit ) );           form.append( $( " " ) .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 = $( "" ) .appendTo( "#draft-sorter-wrapper" ) .append( $( "" ).text( "Saving " + newTags.length + " new tags." ) );       	var showStatus = function ( status ) { return $( "" ) .text( status ) .appendTo( statusList ); };       	var newText = ""; newTags.forEach( function ( element ) {       		newText += "";        	} ); $.ajax( {               url: mw.util.wikiScript( 'api' ),                type: 'POST',                dataType: 'json',                data: {                    format: 'json',                    action: 'edit',                    title: "Draft talk:" + mw.config.get( 'wgTitle' ),                    summary: "Tagging drafts",                    token: mw.user.tokens.get( 'editToken' ),                    prependtext: newText                }        	} ).done( function ( data ) {        		if ( data && data.edit && data.edit.result && data.edit.result === "Success" ) {        			showStatus( "Edit saved successfully! (" ) .append( $( "" )                           .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 ) ); //