Jump to content

User:Novem Linguae/Scripts/DontForgetG12.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>

/*
- Check if article is unreviewed
- If so, display a giant "copyright check" button at the top, to remind you to run Earwig's copyvio detector on the article first thing.
- Many submissions are copyright violations, and catching it before you perform a bunch of other steps in the NPP/AFC flowchart saves time.
*/

class DontForgetG12 {
	constructor() {
		this.mw = mw;
		this.$ = $;
	}

	async execute() {
		if ( !await this.shouldRunOnThisPage() ) {
			return;
		}

		// Only run if 1) draft is submitted
		const isDraftspaceOrUserspace = [ 118, 2 ].includes( this.namespace );
		const draftIsSubmitted = this.wikicode.match( /(?:{{AfC submission}}|{{AfC submission\|}}|{{AfC submission\|\|)/i ) && isDraftspaceOrUserspace;
		if ( draftIsSubmitted ) {
			this.insertButton( this.title );
		}

		// or 2) article is not marked as reviewed by NPP
		this.mw.hook( 'ext.pageTriage.toolbar.ready' ).add( async function () {
			const pageID = this.mw.config.get( 'wgArticleId' );
			if ( !( await this.isReviewed( pageID ) ) ) {
				this.insertButton( this.title );
			}
		}.bind( this ) );
	}

	async shouldRunOnThisPage() {
		// don't run when not viewing articles
		const action = this.mw.config.get( 'wgAction' );
		if ( action !== 'view' ) {
			return false;
		}

		// don't run when viewing diffs
		const isDiff = this.mw.config.get( 'wgDiffNewId' );
		if ( isDiff ) {
			return false;
		}

		const isDeletedPage = ( !this.mw.config.get( 'wgCurRevisionId' ) );
		if ( isDeletedPage ) {
			return false;
		}

		this.namespace = this.mw.config.get( 'wgNamespaceNumber' );
		const isMainspaceDraftspaceOrUserspace = [ 0, 118, 2 ].includes( this.namespace );
		if ( !isMainspaceDraftspaceOrUserspace ) {
			return false;
		}

		this.title = this.getArticleName();
		this.wikicode = await this.getWikicode( this.title );

		// Don't run on redirect pages
		const isRedirect = this.wikicode.match( /^#REDIRECT \[\[/i );
		if ( isRedirect ) {
			return false;
		}

		return true;
	}

	/**
	 * @return {string} pagename, including the namespace name, but with spaces replaced by underscores
	 */
	getArticleName() {
		return this.mw.config.get( 'wgPageName' );
	}

	async getWikicode( title ) {
		if ( !this.mw.config.get( 'wgCurRevisionId' ) ) {
			return '';
		}
		// if page is deleted, return blank
		let wikicode = '';
		title = encodeURIComponent( title );
		await this.$.ajax( {
			url: `https://en.wikipedia.org/w/api.php?action=parse&page=${ title }&prop=wikitext&formatversion=2&format=json`,
			success: function ( result ) {
				wikicode = result.parse.wikitext;
			},
			dataType: 'json'
		} );
		return wikicode;
	}

	insertButton( title ) {
		this.$( '#contentSub' ).before( `
			<a style="display: inline-block; color: black; margin-top: 0.5em; border: 2px solid black; padding: 0.25em 3em; background-color: #FFDC00; font-size: 1.5em;" href="https://copyvios.toolforge.org/?lang=en&project=wikipedia&title=` + encodeURIComponent( title ) + `" target="_blank">
				Copyvio check
			</a>
		` );
	}

	async isReviewed( pageId ) {
		const api = new this.mw.Api();
		const response = await api.get( {
			action: 'pagetriagelist',
			format: 'json',
			page_id: pageId
		} );

		// no result
		if ( response.pagetriagelist.result !== 'success' || response.pagetriagelist.pages.length === 0 ) {
			return true;
		// 1, 2, or 3
		} else if ( parseInt( response.pagetriagelist.pages[ 0 ].patrol_status ) > 0 ) {
			return true;
		// 0
		} else {
			return false;
		}
	}
}

$( async function () {
	await mw.loader.using( [ 'mediawiki.api' ], async () => {
		await ( new DontForgetG12( mw, $ ) ).execute();
	} );
} );

// </nowiki>