User:Eatcha/rollbackconf.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
Documentation for this user script can be added at User:Eatcha/rollbackconf. |
mw.loader.using(['oojs-ui'], function() {
"use strict";
function getRollbackStatus(pageType, deviceType) {
var defaultConfig = {
desktop: {
watchlist: 'confirm',
contributions: 'confirm',
recentchanges: 'confirm',
relatedchanges: 'confirm',
history: 'confirm',
diff: 'confirm'
},
mobile: {
watchlist: 'confirm',
contributions: 'confirm',
recentchanges: 'confirm',
relatedchanges: 'confirm',
history: 'confirm',
diff: 'confirm'
}
};
var scriptConfig = window.ConfirmRollback || {};
var deviceDefaults = defaultConfig[deviceType];
function resolveRollbackStatus(cfg) {
var ret;
if (typeof(cfg) === 'object') {
if (cfg.mobile || cfg.desktop) {
return resolveRollbackStatus(cfg[deviceType]);
} else {
ret = cfg[pageType];
}
} else if (cfg === 'hide' || cfg === 'allow' || cfg === 'confirm') {
ret = cfg;
}
return ret || deviceDefaults[pageType] || 'confirm';
}
return resolveRollbackStatus(scriptConfig);
}
function makeRollbackMessage(event) {
var targetText = $(event.target).text();
var count = targetText.match(/\d/) ? targetText.match(/\d+/)[0] : null;
var edits = count ? count + ' edits' : 'edit';
var user = mw.util.getParamValue('from', event.target.href);
return 'Rollback ' + edits + ' by User:' + user + ' ?';
}
function handleMobileClicks($rollbackLinks) {
$rollbackLinks.click(function(event) {
var message = makeRollbackMessage(event);
if (!confirm(message)) {
return event.preventDefault();
}
});
}
function handleDesktopClicks($rollbackLinks) {
// Initialize the dialog object.
var confirmationDialog = new OO.ui.MessageDialog();
var windowManager = new OO.ui.WindowManager();
$('body').append(windowManager.$element);
windowManager.addWindows([confirmationDialog]);
$rollbackLinks.click(function(event) {
event.preventDefault();
var message = makeRollbackMessage(event);
windowManager.openWindow(confirmationDialog, {
title: 'Confirm rollback',
message: message,
actions: [{
action: 'rollback',
label: 'OK',
flags: ['primary', 'destructive']
},
{
label: 'Cancel'
}
]
}).then(function(opening) {
opening.then(function(opened) {
opening.then(function(closing, data) {
if (data && data.action === 'rollback') {
window.open($(event.target).attr('href'), '_top');
}
});
});
});
});
}
var pageType, deviceType, rollbackStatus, $rollbackLinks;
var mwConfig = mw.config.get(['wgCanonicalSpecialPageName', 'wgAction']);
if (mwConfig.wgCanonicalSpecialPageName === 'Watchlist') {
pageType = 'watchlist';
} else if (mwConfig.wgCanonicalSpecialPageName === 'Contributions') {
pageType = 'contributions';
} else if (mwConfig.wgCanonicalSpecialPageName === 'Recentchanges') {
pageType = 'recentchanges';
} else if (mwConfig.wgCanonicalSpecialPageName === 'Recentchangeslinked') {
pageType = 'relatedchanges';
} else if (mwConfig.wgAction === 'history') {
pageType = 'history';
} else if ($(location).attr('href').indexOf('&diff') !== -1) {
pageType = 'diff';
} else {
return;
}
deviceType = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( navigator.userAgent ) ? 'mobile' : 'desktop';
rollbackStatus = getRollbackStatus(pageType, deviceType);
$rollbackLinks = $('.mw-rollback-link');
if (rollbackStatus === 'hide') {
$rollbackLinks.css('display', 'none');
} else if (rollbackStatus === 'allow') {
$rollbackLinks.css('display', 'inline');
} else if (rollbackStatus === 'confirm') {
// Display rollback links if they are hidden.
$rollbackLinks.css('display', 'inline');
// Handle rollback clicks.
if (deviceType === 'mobile') {
handleMobileClicks($rollbackLinks);
} else {
handleDesktopClicks($rollbackLinks);
}
}
});
// </nowiki>