MediaWiki:Gadget-site-js.js
MediaWiki界面页面
更多操作
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/**********************
* 模块 0:vConsole 加载(移动端专用)
**********************/
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) && !window.localStorage.getItem('disableVConsole')) {
var vConsoleScript = document.createElement('script');
vConsoleScript.src = 'https://cdn.bootcdn.net/ajax/libs/vConsole/3.15.1/vconsole.min.js';
vConsoleScript.onload = function() {
try {
if (window.VConsole) {
new window.VConsole();
}
} catch (e) {
alert('调试工具初始化失败,请重试或联系管理员');
}
};
vConsoleScript.onerror = function() {
alert('调试工具加载失败,请检查网络连接');
};
document.body.appendChild(vConsoleScript);
}
/**********************
* 模块 1:CSS 变量 RGB 转换
**********************/
(function () {
var cachedRgb = '';
var mo = new MutationObserver(function() {
var root = document.documentElement;
var hex = getComputedStyle(root).getPropertyValue('--background-color-base').trim();
hex = hex.replace(/^#/, '');
if (hex.length === 3) {
hex = hex.split('').map(function(c) { return c + c; }).join('');
}
if (hex.length !== 6) {
root.style.setProperty('--background-color-rgb', '0, 0, 0');
return;
}
var r = parseInt(hex.substring(0, 2), 16);
var g = parseInt(hex.substring(2, 4), 16);
var b = parseInt(hex.substring(4, 6), 16);
var rgb = r + ', ' + g + ', ' + b;
if (rgb !== cachedRgb) {
root.style.setProperty('--background-color-rgb', rgb);
cachedRgb = rgb;
}
});
mo.observe(document.documentElement, { attributes: true, attributeFilter: ['style'] });
})();
/**********************
* 模块 2:上传页引导弹窗
**********************/
if (window.mw && mw.config && mw.config.get('wgCanonicalSpecialPageName') === 'Upload') {
var pref = mw.storage.get('uploadPreference');
if (pref === 'wizard') {
window.location.href = mw.util.getUrl('Special:UploadWizard');
} else if (pref !== 'classic') {
document.addEventListener('click', function initDialog() {
document.removeEventListener('click', initDialog);
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets']).then(function() {
var UploadDialog = function() {};
UploadDialog.static = {
name: 'UploadDialog',
title: '请选择上传方式',
actions: [{ action: 'classic', label: '❌ 传统方式', flags: ['safe'] }]
};
UploadDialog.prototype.initialize = function() {
OO.ui.ProcessDialog.prototype.initialize.apply(this, arguments);
this._remember = new OO.ui.CheckboxInputWidget();
var wizardBtn = new OO.ui.ButtonWidget({
label: '✅ 上传向导',
flags: ['primary'],
href: mw.util.getUrl('Special:UploadWizard'),
target: '_self'
});
wizardBtn.on('click', function() {
if (this._remember.isSelected()) {
mw.storage.set('uploadPreference', 'wizard');
}
}.bind(this));
this.$body.append(
$('<p>').text('请选择上传方式:'),
wizardBtn.$element,
new OO.ui.FieldLayout(this._remember, {
label: '记住选择',
align: 'inline'
}).$element
);
};
UploadDialog.prototype.getActionProcess = function(action) {
if (action === 'classic') {
if (this._remember.isSelected()) {
mw.storage.set('uploadPreference', 'classic');
}
return new OO.ui.Process(function() {
this.close();
}.bind(this));
}
return OO.ui.ProcessDialog.prototype.getActionProcess.apply(this, arguments);
};
var wm = new OO.ui.WindowManager();
document.body.appendChild(wm.$element);
wm.addWindows([new UploadDialog()]);
wm.openWindow('UploadDialog');
});
});
}
}
/**********************
* 模块 3:加载指示器
**********************/
(function () {
var indicator = null;
var timerId = null;
function createIndicator() {
var div = document.createElement('div');
div.style.position = 'fixed';
div.style.width = '256px';
div.style.height = '256px';
div.style.bottom = '20px';
div.style.right = '20px';
div.style.zIndex = '99999';
div.style.background = 'url(https://wiki.ottohub.cn/images/0/02/Loading.png) center/contain no-repeat';
div.style.opacity = '0';
div.style.transition = 'opacity 300ms';
div.style.pointerEvents = 'none';
return div;
}
function show() {
if (indicator) return;
indicator = createIndicator();
document.body.appendChild(indicator);
setTimeout(function() {
indicator.style.opacity = '1';
}, 10);
timerId = setTimeout(hide, 15000);
}
function hide() {
if (!indicator) return;
indicator.style.opacity = '0';
setTimeout(function() {
if (indicator && indicator.parentNode) {
indicator.parentNode.removeChild(indicator);
}
indicator = null;
}, 300);
clearTimeout(timerId);
}
document.addEventListener('DOMContentLoaded', show);
window.addEventListener('load', hide);
})();