User:Novem Linguae/Scripts/ReviewStatus.js

//

/* - Displays whether or not a mainspace page is marked as reviewed. This info is placed on the right of the page title using a small icon. - Without a script like this, you need to be a new page reviewer or admin and look at the Page Curation toolbar. Or you need to use Special:Log -> Page Curation Log. And there is also some complex logic. For example, the absence of a log entry means the page is marked as reviewed.

// TODO: display whether the page is indexed or not. can do this by using JS to look for "noindex", or can do this by checking the first revision date. // TODO: display in all namespaces // TODO: do I need to use different code to check if marked as patrolled? I think that uses recentchanges table... maybe?

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

const pageID = mw.config.get( 'wgArticleId' ); const boolIsReviewed = await this.isReviewed( pageID ); let htmlToInsert = '';

// modules/ext.pageTriage.views.toolbar/images/icons/

if ( boolIsReviewed ) { htmlToInsert = ' '; } else { htmlToInsert = ' '; }

if ( this.pageHasSections ) { $( '#firstHeading .mw-editsection' ).before( htmlToInsert ); } else { $( '#firstHeading' ).append( htmlToInsert ); }	}

/**	 * @param {number} pageID The page ID number. A positive number with no commas. */	async isReviewed( pageID ) { const api = new mw.Api; const response = await api.get( {			action: 'query',			format: 'json',			formatversion: '2',			prop: 'isreviewed',			pageids: pageID		} ); return response.query.pages[ 0 ].isreviewed; }

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

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

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

// Only run in mainspace const namespace = mw.config.get( 'wgNamespaceNumber' ); const isMainspaceOrDraftspace = ( [ 0 ].includes( namespace ) ); if ( !isMainspaceOrDraftspace ) { return false; }

return true; }

pageHasSections { return $( '#firstHeading .mw-editsection' ).length; } }

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

//