MediaWiki:Gadget-markreview.js: Difference between revisions
Jump to navigation
Jump to search
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
| Line 1: | Line 1: | ||
/* | /* Gadget: MarkReview — One‑click "Mark as reviewed" for page owners */ | ||
mw.loader.using(['mediawiki.api', 'mediawiki.util', 'mediawiki.user']).then(function () { | |||
function run($content) { | |||
// Find the DocMeta table | |||
var $docMeta = $content.find('.doc-meta').first(); | |||
if (!$docMeta.length) { | |||
$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'; | |||
// Only run on view action and if current user is the owner | |||
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' }); | |||
}); | |||
} | |||
// Create the button | |||
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(); | |||
}); | |||
// Place it in .doc-meta-actions if present, otherwise create it after the table | |||
var $actions = $docMeta.closest('table').nextAll('.doc-meta-actions').first(); | |||
if (!$actions.length) { | |||
$actions = $('<div class="doc-meta-actions"></div>').insertAfter($docMeta.closest('table')); | |||
} | |||
$actions.empty().append($btn); | |||
} | } | ||
// Run on initial load and after AJAX loads | |||
mw.hook('wikipage.content').add(run); | |||
}); | }); | ||
Revision as of 09:34, 9 September 2025
/* Gadget: MarkReview — One‑click "Mark as reviewed" for page owners */
mw.loader.using(['mediawiki.api', 'mediawiki.util', 'mediawiki.user']).then(function () {
function run($content) {
// Find the DocMeta table
var $docMeta = $content.find('.doc-meta').first();
if (!$docMeta.length) {
$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';
// Only run on view action and if current user is the owner
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' });
});
}
// Create the button
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();
});
// Place it in .doc-meta-actions if present, otherwise create it after the table
var $actions = $docMeta.closest('table').nextAll('.doc-meta-actions').first();
if (!$actions.length) {
$actions = $('<div class="doc-meta-actions"></div>').insertAfter($docMeta.closest('table'));
}
$actions.empty().append($btn);
}
// Run on initial load and after AJAX loads
mw.hook('wikipage.content').add(run);
});