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.
;(function($, mw) {
'use strict';
var preloads = 2;
function globalFileUsage(i18n) {
if (window.globalFileUsageInit) return;
window.globalFileUsageInit = true;
var action = mw.config.values.wgAction;
var config = window.globalFileUsageConfig;
if (mw.config.values.wgCanonicalSpecialPageName == 'Movepage') {
action = 'move';
if (!mw.config.values.wgTitle.includes('MovePage/File:')) return;
}
var space = mw.config.values.wgNamespaceNumber;
if ((space != 6 && space != -1) || (action != 'view' && (action != 'delete' && action != 'move') ) || (action == 'delete' && config.hide_on_delete) || (action == 'move' && config.hide_on_move)) return;
if (!window.globalFileUsageConfig || !window.globalFileUsageConfig.lang) {
console.warn('File Global Usage: Add some languages in your config. Read manual for more information.');
return;
}
importArticle({
type: 'style',
article: 'u:dev:MediaWiki:GlobalFileUsage.css'
});
var fullLangs = config.lang;
var format = '&format=json';
var defaultSiteUrl = mw.config.values.wgServer;
var fileName = mw.config.values.wgTitle;
if (action == 'move')
fileName = fileName.replace('MovePage/File:', '');
var baseParams = '/api.php?action=query&titles=File:' + fileName;
function showGUContainer(place, title, i18n) {
// $('#global-usage-container').remove(); // for tests
$(place).append('<div id="global-usage-container">' + title + '<p><button class="wds-button" id="show-global-usage-btn"><span>' + i18n.msg('button-show').plain() + '</span></button></p></div>');
$('#show-global-usage-btn').click(function(){
showGUTable(i18n);
});
}
function showGUTable(i18n) {
$('#global-usage-list').remove();
$('#global-usage-container').append('<table id="global-usage-list" class="wikitable" style="width:100%"><tbody><tr><th>' + i18n.msg('lang').plain() + '</th><th>' + i18n.msg('page').plain() + '</th></tr></tbody></table>');
fullLangs.forEach(function(fullLang) {
var simpleLang = fullLang.split(':')[0];
var langSubDomain = fullLang.split(':')[1];
if ((simpleLang === mw.config.values.wgContentLanguage) && ((langSubDomain + '.fandom.com' === mw.config.values.wgServerName) ||(langSubDomain === undefined))) return;
$('#global-usage-list').append('<tbody data-lang="' + fullLang + '"></tbody>');
checkFile(defaultSiteUrl, baseParams, fullLang, i18n);
});
$('#show-global-usage-btn').text(i18n.msg('button-update').plain()).prop('disabled', true);
setTimeout(function(){
$('#show-global-usage-btn').prop('disabled', false);
}, 1200);
}
var deleteWarning = '<div id="global-usage-delete-warning" hidden>' + i18n.msg('delete-warn').plain() + '</div>';
var headerID = 'globalusage-dev';
switch (action) {
case 'view':
showGUContainer('#mw-imagepage-section-linkstoimage, #mw-imagepage-nolinkstoimage', '<h3 id="' + headerID + '">' + i18n.msg('global').plain() + '</h3>', i18n);
if (config.auto_show || $('#ca-delete').length)
showGUTable(i18n);
break;
case 'delete':
if (!config.hide_on_delete) {
$('#mw-img-deleteconfirm').append(deleteWarning);
showGUContainer('#mw-content-text', '<h2 id="' + headerID + '">' + i18n.msg('global-usage').plain() + '</h2>', i18n);
showGUTable(i18n);
}
break;
case 'move':
if (!config.hide_on_move) {
$('#movepage').append(deleteWarning);
showGUContainer('#mw-content-text', '<h2 id="' + headerID + '">' + i18n.msg('global-usage').plain() + '</h2>', i18n);
showGUTable(i18n);
}
break;
}
function checkFile(defaultSiteUrl, baseParams, fullLang, i18n) {
var infoParams = baseParams + '&prop=imageinfo' + format + '&origin=*';
var langUrl;
var simpleLang = fullLang.split(':')[0];
var langSubDomain = fullLang.split(':')[1];
var langPath = (simpleLang === 'en') ? '' : '/' + simpleLang;
if (langSubDomain == undefined) {
langUrl = defaultSiteUrl + langPath;
} else {
langUrl = 'https://' + langSubDomain + '.fandom.com' + langPath;
}
var infoUrl = langUrl + infoParams;
fetch(infoUrl)
.then(function(response){
return response.json();
})
.then(function(response) {
var pages = response.query.pages;
var repo = pages[Object.keys(pages)[0]].imagerepository;
if (repo !== 'local') {
var usageParams = baseParams + '&prop=fileusage' + format + '&origin=*';
usageQuery(defaultSiteUrl, usageParams, fullLang, i18n);
}
});
}
function usageQuery(defaultSiteUrl, params, fullLang, i18n) {
var usageUrl;
var fullUrl;
var simpleLang = fullLang.split(':')[0];
var langSubDomain = fullLang.split(':')[1];
var langPath = (simpleLang === 'en') ? '' : '/' + simpleLang;
if (langSubDomain == undefined) {
fullUrl = defaultSiteUrl + langPath;
usageUrl = defaultSiteUrl + langPath + params;
} else {
fullUrl = 'https://' + langSubDomain + '.fandom.com' + langPath;
usageUrl = 'https://' + langSubDomain + '.fandom.com' + langPath + params;
}
var $langRow = $('#global-usage-list [data-lang="' + fullLang + '"]');
var langLabel = (config.show_subdomain_if_different) ? fullLang : simpleLang;
config.showDeleteWarning = false;
$('#global-usage-delete-warning').hide();
fetch(usageUrl)
.then(function(response){
if (!response.ok) {
$langRow.append('<tr class="global-usage-error"><td>' + langLabel + '</td><td colspan="2">' + i18n.msg('connection-error', fullUrl).plain() + '</td></tr>');
}
return response.json();
})
.then(function(response) {
var pages = response.query.pages;
var usageInfo = pages[Object.keys(pages)[0]].fileusage;
if (!usageInfo) return;
if (!config.showDeleteWarning) {
config.showDeleteWarning = true;
$('#global-usage-delete-warning').show();
}
var list = '';
usageInfo.forEach(function(item) {
var fileLink = fullUrl + '/wiki/' + item.title;
list += '<tr><td>' + langLabel + '</td><td><a href="' + fileLink + '" target="_blank">' + item.title + '</a></td></tr>';
});
$langRow.append(list);
});
}
function globalFileUsageError(text) {
$('#global-usage-container').append('<div class="warningbox">' + text + '</div>');
}
}
function preload() {
if (--preloads>0) return;
window.dev.i18n.loadMessages('GlobalFileUsage').done(function(i18no) {
i18no.useUserLang();
globalFileUsage(i18no);
});
}
mw.hook('wikipage.content').add(preload);
mw.hook('dev.i18n').add(preload);
importArticle({ type: 'script', article: 'u:dev:MediaWiki:I18n-js/code.js' });
})(window.jQuery, window.mediaWiki);