User:Novem Linguae/Scripts/RequestedArticleSifter.js

//

// Requested Articles Cleanup Tool // When the user EDITS a page starting with Requested articles/Business and economics/Companies, this script adds a "Remove Bullets With Too Few References" button that the user can click. // Clicking it will delete all bullets with 1 or 0 URL's, because these entries will not pass WP:GNG. // Certain things will safelist the bullet, including clerk endorsement, a link to a draft, and some other conditions. // The WP:RA company lists are massive. So far, this tool has helped delete 150 companies that did not follow our submission instructions that require providing enough sources.

'use strict';

class CleanUp { constructor { this.log = ''; this.deleteCount = 0; }

deleteTooFewReferences( code ) { // \n{{ and \n== and \n* // templates, sections, and bullets (of bulleted list) const sectionDelimiters = /(\n\{\{|\n==|\n\*)/g;

// get strpos of every delimiter let result; const indices = [ 0 ]; while ( ( result = sectionDelimiters.exec( code ) ) ) { indices.push( result.index ); }

// Loop through every chunk. // A chunk is usually one line/bullet/entry, but can also be a section or a template. result = ''; let deleteCount = 0; let safelistedCount = 0; let totalCount = 0; for ( const key in indices ) { // figure out the chunk const startPos = indices[ key ]; const endPos = indices[ ( parseInt( key ) + 1 ).toString ] || code.length; const chunk = code.slice( startPos, endPos );

// determine company name // skip this chunk if it's not a company name // *company name const companyNameRegEx = / *\* *\[\[(.+?)\]\]/; let companyName = chunk.match( companyNameRegEx ); if ( !companyName ) { result += chunk; continue; }			companyName = companyName[ 1 ]; totalCount++;

// count number of links (by searching for http) // let countRegEx = /()\[(?!\[)|[^\[>=\/]http)/g; // let countRegEx = /http/g; const countRegEx = /(http|)/g; const count = ( chunk.match( countRegEx ) || [] ).length;

this.log += totalCount + ' Company Name: ' + companyName + ' || Ref Count: ' + count;

/* skip if				- clerk {{endorsed}} or {{likely}} - draft created - links to wikipedia articles in other languages - link to google search */			const safelistedRegEx = /({{[Ee]ndorse}}|{{[Ll]ikely}}|[Dd]raft|[^en]\.wikipedia\.org|google\.com\/search)/; const safelisted = chunk.match( safelistedRegEx ); if ( safelisted ) { safelistedCount++; this.log += ' || SAFELISTED ====================================\n'; result += chunk; continue; }

// delete? const remove = ( count < 2 ); if ( remove ) { deleteCount++; this.log += ' || DELETED ************************************\n'; } else { result += chunk; this.log += '\n'; }		}

this.log = 'WP:RA Cleanup Tool - Debug Log\nDeleted Entries: ' + deleteCount + '\nSafelisted: ' + safelistedCount + '\nTotal Companies Before: ' + totalCount + '\nTotal Companies After: ' + ( totalCount - deleteCount ) + '\n\n' + this.log;

this.deleteCount = deleteCount;

return result; }

getLog { return this.log; }

getEditSummary { return this.deleteCount ? 'Delete ' + this.deleteCount + ' companies with insufficient sources (0 or 1 sources). Need at least 2, preferrably 3 or more, to prove WP:GNG. See also WP:3REFS. Using userscript User:Novem_Linguae/wp-ra.js' : ''; } }

// if correct page const pageName = mw.config.get( 'wgPageName' ); const isCompanyPage = pageName.startsWith( 'Wikipedia:Requested_articles/Business_and_economics/Companies' ); const isEditPage = ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' /* edit preview */ ); if ( isCompanyPage && isEditPage ) { // create "Remove Bullets With Too Few References" button x2	// must have type="button", or it will submit the form $( '#bodyContent' ).prepend( 'Remove Bullets With Too Few References ' ); $( '.editOptions' ).prepend( `Remove Bullets With Too Few References 	 	` );

$( '.wp-ra-button' ).on( 'click', function {		const cu = new CleanUp;

// execute script // replaces value of edit textarea with our modified wikicode const code = $( '#wpTextbox1' ); code.val( cu.deleteTooFewReferences( code.val ) );

// display debug log $( '#wp-ra-log' ).val( cu.getLog ).show;

// set edit summary $( '#wpSummary' ).val( cu.getEditSummary ); } ); }

/*

TODO: - google search links should not be exempt - Look through other WP:RA's for weird formatting. Make sure this can handle that. - Need to handle nested bulleted lists. - make sure {{isbn|18927639821}} and {{ISBN|892037923}} are counted

//