MediaWiki:UserScripts/Shortcuts.js
MediaWiki interface page
More actions
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.
// MediaWiki:UserScripts/Shortcuts.js
// Shortcuts:
// d -> delete current page
// h -> history
// r -> recent changes
// e -> edit current page
// u -> upload file
// p -> protect current page
//
// Wikitext editor only:
// Ctrl+Enter (or Cmd+Enter) -> Save changes
//
// Notes:
// - D/H/R/E/U/P won't trigger while typing.
// - Ctrl/Cmd+Enter WILL trigger while typing in the wikitext textarea.
(function () {
if (window.__shortcutsInstalled) return;
window.__shortcutsInstalled = true;
function isTypingTarget(el) {
if (!el) return false;
var tag = (el.tagName || '').toLowerCase();
return tag === 'input' || tag === 'textarea' || tag === 'select' || !!el.isContentEditable;
}
function go(title, query) {
location.href = mw.util.getUrl(title, query || {});
}
function trySaveWikitext() {
var btn =
document.querySelector('#wpSave') ||
document.querySelector('button[name="wpSave"]') ||
document.querySelector('input[name="wpSave"]');
if (btn && !btn.disabled) {
btn.click();
return true;
}
return false;
}
document.addEventListener(
'keydown',
function (e) {
var k = (e.key || '').toLowerCase();
// Ctrl+Enter / Cmd+Enter -> Save changes (wikitext edit form)
if ((e.ctrlKey || e.metaKey) && !e.altKey && k === 'enter') {
if (mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') {
if (trySaveWikitext()) {
e.preventDefault();
e.stopPropagation();
}
}
return;
}
// Single-key shortcuts: ignore modifiers + typing
if (e.ctrlKey || e.metaKey || e.altKey) return;
if (isTypingTarget(e.target)) return;
var page = mw.config.get('wgPageName');
if (k === 'e') { e.preventDefault(); go(page, { action: 'edit' }); return; }
if (k === 'h') { e.preventDefault(); go(page, { action: 'history' }); return; }
if (k === 'p') { e.preventDefault(); go(page, { action: 'protect' }); return; }
if (k === 'd') { e.preventDefault(); go(page, { action: 'delete' }); return; }
if (k === 'r') { e.preventDefault(); go('Special:RecentChanges'); return; }
if (k === 'u') { e.preventDefault(); go('Special:Upload'); return; }
},
true
);
})();