MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
(the format varies per action so just make it easier to customize) |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
var config = mw.config.values; | var config = mw.config.values; | ||
window.dev = window.dev || {}; | |||
window.dev.waitFor = function(query, callback, extraDelay) { | |||
if ('function' == typeof callback && 'string' == typeof query) { | |||
extraDelay = extraDelay || 0; | |||
if (document.querySelector(query)) { | |||
setTimeout(callback, extraDelay); | |||
} else { | |||
// set up the mutation observer | |||
var observer = new MutationObserver(function (mutations, me) { | |||
// mutations is an array of mutations that occurred | |||
// me is the MutationObserver instance | |||
var targetNode = document.querySelector(query); | |||
if (targetNode) { | |||
setTimeout(callback, extraDelay); | |||
me.disconnect(); // stop observing | |||
return; | |||
} | |||
}); | |||
// start observing | |||
observer.observe(document, { | |||
childList: true, | |||
subtree: true | |||
}); | |||
} | |||
} | |||
}; | |||
// Load site JS | // Load site JS | ||
[ | [ | ||
'ThemeToggle.js', // Add link button on sidebar for mass renaming files and pages | |||
'MassRename.js', // Add link button on sidebar for mass renaming files and pages | |||
'BetterUpload.js', // Improvements to Special:Upload | 'BetterUpload.js', // Improvements to Special:Upload | ||
'BetterDiff.js' // Aids with patrolling and with diff viewing on RC, page history and user contribs | 'BetterDiff.js' // Aids with patrolling and with diff viewing on RC, page history and user contribs | ||
] | ] | ||
.forEach(function( | .forEach(function(src){ | ||
importScript('MediaWiki:'+ | importScript('MediaWiki:'+src); | ||
}); | }); | ||
// | // Run when page content is added and loaded | ||
mw.hook('wikipage.content').add(function(){ | mw.hook('wikipage.content').add(function(){ | ||
// Add navigational keybinds | |||
if (config.wgAction=='view') { | if (config.wgAction=='view') { | ||
var actions = { | |||
e: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=edit'; }, | |||
h: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=history'; }, | |||
m: function(page){ return config.wgServer+mw.util.getUrl('Special:MovePage/'+page); }, | |||
d: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=delete'; }, | |||
}; | |||
var url = new URL(document.location.href); | var url = new URL(document.location.href); | ||
var title = | var title = | ||
Line 34: | Line 64: | ||
}); | }); | ||
} | } | ||
// Run through sidebar to make sure classes align with collapse status | |||
window.dev.waitFor('#mw-navigation > .collapsible-nav > nav', function() { | |||
$('#mw-navigation > .collapsible-nav > nav').each(function(_, nav) { | |||
if (getComputedStyle(nav).display!=='none') { | |||
if ( | |||
nav.classList.contains('collapsed') && | |||
getComputedStyle(nav.querySelector('.vector-menu-content')).display!=='none' | |||
) { | |||
nav.classList.remove('collapsed'); | |||
nav.classList.add('expanded'); | |||
} else if ( | |||
nav.classList.contains('expanded') && | |||
getComputedStyle(nav.querySelector('.vector-menu-content')).display=='none' | |||
) { | |||
nav.classList.add('collapsed'); | |||
nav.classList.remove('expanded'); | |||
} | |||
} | |||
}); | |||
}); | |||
}); | }); | ||
Latest revision as of 03:05, 19 July 2024
var config = mw.config.values;
window.dev = window.dev || {};
window.dev.waitFor = function(query, callback, extraDelay) {
if ('function' == typeof callback && 'string' == typeof query) {
extraDelay = extraDelay || 0;
if (document.querySelector(query)) {
setTimeout(callback, extraDelay);
} else {
// set up the mutation observer
var observer = new MutationObserver(function (mutations, me) {
// mutations is an array of mutations that occurred
// me is the MutationObserver instance
var targetNode = document.querySelector(query);
if (targetNode) {
setTimeout(callback, extraDelay);
me.disconnect(); // stop observing
return;
}
});
// start observing
observer.observe(document, {
childList: true,
subtree: true
});
}
}
};
// Load site JS
[
'ThemeToggle.js', // Add link button on sidebar for mass renaming files and pages
'MassRename.js', // Add link button on sidebar for mass renaming files and pages
'BetterUpload.js', // Improvements to Special:Upload
'BetterDiff.js' // Aids with patrolling and with diff viewing on RC, page history and user contribs
]
.forEach(function(src){
importScript('MediaWiki:'+src);
});
// Run when page content is added and loaded
mw.hook('wikipage.content').add(function(){
// Add navigational keybinds
if (config.wgAction=='view') {
var actions = {
e: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=edit'; },
h: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=history'; },
m: function(page){ return config.wgServer+mw.util.getUrl('Special:MovePage/'+page); },
d: function(page){ return config.wgServer+mw.util.getUrl(page)+'?action=delete'; },
};
var url = new URL(document.location.href);
var title =
url.searchParams.get('title') || // for `/w/index.php?title=XYZ` links
url.pathname.replace(/^.*?wi?k?i?\//, ''); // for `/wiki/XYZ` links
$(document).on('keydown', function(e) {
var key = e.key.toLocaleLowerCase();
if (
actions[key] &&
!(e.target && ['INPUT', 'TEXTAREA'].includes(e.target.nodeName)) &&
config.wgCanonicalSpecialPageName===false
) {
document.location.href= actions[key](title);
}
});
}
// Run through sidebar to make sure classes align with collapse status
window.dev.waitFor('#mw-navigation > .collapsible-nav > nav', function() {
$('#mw-navigation > .collapsible-nav > nav').each(function(_, nav) {
if (getComputedStyle(nav).display!=='none') {
if (
nav.classList.contains('collapsed') &&
getComputedStyle(nav.querySelector('.vector-menu-content')).display!=='none'
) {
nav.classList.remove('collapsed');
nav.classList.add('expanded');
} else if (
nav.classList.contains('expanded') &&
getComputedStyle(nav.querySelector('.vector-menu-content')).display=='none'
) {
nav.classList.add('collapsed');
nav.classList.remove('expanded');
}
}
});
});
});
// Load personal JS & CSS if logged in user
if (config.wgUserName && config.wgUserName.length>0) {
importScript('User:'+config.wgUserName+'/common.js');
importStylesheet('User:'+config.wgUserName+'/common.css');
}