MediaWiki:Gadget-markreview.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* global mw, $ */
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'mediawiki.user' ] ).then( function () {
function run( $content ) {
// Find the DocMeta table and owner
var $docMeta = $content.find( '.doc-meta' ).first();
if ( !$docMeta.length ) {
// Try outside content as a fallback
$docMeta = $( '.doc-meta' ).first();
if ( !$docMeta.length ) return;
}
var owner = $docMeta.attr( 'data-owner' );
var user = mw.config.get( 'wgUserName' );
var action = mw.config.get( 'wgAction' ) || 'view';
if ( action !== 'view' ) return;
if ( !owner || !user || owner.toLowerCase() !== user.toLowerCase() ) return;
function doReview() {
var page = mw.config.get( 'wgPageName' );
var stamp = new Date().toISOString();
var api = new mw.Api();
api.postWithToken( 'csrf', {
action: 'edit',
title: page,
summary: 'Mark as reviewed',
appendtext: '\n<!-- review-ping: ' + stamp + ' -->',
minor: true,
nocreate: true
} ).done( function () {
location.reload();
} ).fail( function ( err ) {
mw.notify( 'Review failed: ' + ( err && err.error && err.error.info ? err.error.info : err ), { type: 'error' } );
} );
}
// Try to add to actions menu; fall back gracefully
var linkId = 'ca-markreview';
var link = mw.util.addPortletLink( 'p-cactions', '#', 'Mark as reviewed', linkId, 'Mark this page as reviewed' );
if ( !link ) {
link = mw.util.addPortletLink( 'p-views', '#', 'Mark as reviewed', linkId, 'Mark this page as reviewed' );
}
if ( !link ) {
link = mw.util.addPortletLink( 'p-tb', '#', 'Mark as reviewed', linkId, 'Mark this page as reviewed' );
}
if ( link ) {
link.addEventListener( 'click', function ( e ) {
e.preventDefault();
doReview();
} );
return;
}
// If no menu exists (e.g., certain skins), inject a button under the DocMeta table
var $btn = $( '<a>' )
.attr( 'href', '#' )
.text( 'Mark as reviewed' )
.css( {
display: 'inline-block',
marginTop: '8px',
padding: '4px 8px',
background: '#f0f0f0',
border: '1px solid #ccc',
borderRadius: '2px',
textDecoration: 'none'
} )
.on( 'click', function ( e ) {
e.preventDefault();
doReview();
} );
// Insert after the table
$docMeta.after( $( '<div>' ).append( $btn ) );
}
// Run on initial load and after AJAX loads
mw.hook( 'wikipage.content' ).add( run );
} );