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();
} );
} );
//