User:SD0001/draft-sort-burst.js

// Extended from User:Enterprisey/draft-sorter.js

// $.when(mw.loader.using(['jquery.chosen', 'mediawiki.util']), $.ready).then(function {   mw.loader.load( "mediawiki.ui.input", "text/css" );

if ( mw.config.get( "wgNamespaceNumber" ) !== 118 ) return;

const WIKIPROJECT_LIST = "Wikipedia:WikiProject Articles for creation/WikiProject templates.json";

$( mw.util.addPortletLink('p-cactions', '#', 'Draft-sort', 'ptx-draftsort', 'Add WikiProject tags') ).click(function(e) {		e.preventDefault;		draftsort;	} );

var draftsort = function {

// 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" ) );

var select = $( " " ) .attr( "id", "draft-sorter-form" ) .attr( "multiple", "multiple" );

$.getJSON( mw.config.get( 'wgServer' ) + "/w/index.php?title=" +       encodeURIComponent(WIKIPROJECT_LIST) + "&action=raw&ctype=text/json" ).done( function ( data ) {            $.each( data, 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" ) .attr( "accesskey", "s" ) .click( submit ) );           form.append( $( " " ) .addClass( "mw-ui-button mw-ui-destructive mw-ui-quiet" ) .text( "Cancel" ) .click( function {					$( "#draft-sorter-wrapper" ).remove;				} ) );

// add skip button only if in burst mode if (mw.util.getParamValue('draftsorttrigger')) { form.append( $(' ')					.addClass('mw-ui-button')					.addClass('mw-ui-destructive')					.addClass('mw-ui-quiet')					.addClass('draft-sort-skip')					.text('Skip')				); }           form.show; $( select ).chosen( {           	"placeholder_text_multiple": "Select some WikiProjects"			} );

} ).catch(console.log);

// Add the form to the page form.insertAfter( "#siteSub" ); $(".chosen-search-input").focus;

// 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 += "\n";			} );

$.ajax( {               url: mw.util.wikiScript( 'api' ),                type: 'POST',                dataType: 'json',                data: {                    format: 'json',                    action: 'edit',                    title: "Draft talk:" + mw.config.get( 'wgTitle' ),                    summary: "Adding WikiProject tags (draft-sort-burst)",                    watchlist: typeof draft_sort_burst_watchlistOption === 'undefined' ? "nochange" : draft_sort_burst_watchlistOption,                    token: mw.user.tokens.get( 'csrfToken' ),                    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( ")" );					var event = new Event('draft_sort:saved');					document.dispatchEvent(event);       		} else {        			showStatus( "Couldn't save due to error: " + JSON.stringify( data ) );        		}        	} ).fail( function ( error ) {        		showStatus( "Couldn't save due to error: " + JSON.stringify( error ) );        	} ); };   }

$(mw.util.addPortletLink('p-cactions', '#', 'Draft-sort (burst)', 'ptx-draftsortburst', 'Add WikiProject tags to drafts in burst mode')).click(function(e) {		e.preventDefault;		burstmode;	});

if (mw.util.getParamValue('draftsorttrigger')) { burstmode; }

function burstmode {

draftsort;

var nextDraft, cmcontinue; var api = new mw.Api; var query = { "action": "query", "list": "categorymembers", "cmtitle": "Category:Pending_AfC_submissions", "cmprop": "title", "cmnamespace": "118", "cmlimit": "50", "cmsort": "sortkey", "cmdir": "ascending", "cmstartsortkeyprefix": "P" };

function checkTalkPages(r) { //console.log('in checkTalkPages'); //console.log(r); if (r && r.query && r.query.categorymembers) {

cmcontinue = r.continue.cmcontinue; var draftTalkPages = r.query.categorymembers.map(function(e) {					return e.title.replace(/^Draft:/, 'Draft talk:');				}); return api.get({					action: 'query',					titles: draftTalkPages				}); }		}

function selectNextDraft(r) { //console.log('in selectNextDraft'); //console.log(r); if (r && r.query && r.query.pages) { var found = false; var skiplist = {} try { skiplist = JSON.parse(window.localStorage.getItem('draft-sort-burst-skiplist')) || {}; } catch (e) { console.log('[draft-sort-burst]: error reading from localStorage cache'); console.log(						'\t' + e.name + ' message: ' + e.message +						( e.at ? ' at: ' + e.at : '') +						( e.text ? ' text: ' + e.text : '')					); }				$.each(r.query.pages, function(i,e) {					if (parseInt(i) < 0) {						var page = r.query.pages[i].title.replace(/^Draft talk:/, 'Draft:');						if (page === mw.config.get('wgPageName').replace(/_/g, ' ')) {							return true; // continue						}						if (skiplist[page]) {							return true;						}

nextDraft = page; found = true; return false; }				});				//console.log('found:', found);				if (!found) {					//console.log('No suitable next draft found');					query.cmcontinue = cmcontinue;					postQuery;					return;				}

$(document).on('draft_sort:saved', function {					window.location = '//en.wikipedia.org/wiki/' + nextDraft + '?draftsorttrigger=y';				});

$('#draft-sorter-wrapper .draft-sort-skip').click(function {

var currentPage = mw.config.get('wgPageName').replace(/_/g, ' '); try { var skiplist = JSON.parse(window.localStorage.getItem('draft-sort-burst-skiplist')) || {}; skiplist[currentPage] = 1; window.localStorage.setItem('draft-sort-burst-skiplist', JSON.stringify(skiplist)); } catch(e) {}

window.location = '//en.wikipedia.org/wiki/' + nextDraft + '?draftsorttrigger=y'; });

}		}

function postQuery { //console.log(query); api.get(query) .then(checkTalkPages) .then(selectNextDraft) .fail(function(e) {					console.log('API for getting next draft failed ' + e);				}); }

postQuery;

}

});

//