「MediaWiki:Common.js」の版間の差分
提供: 小樽のじかん事典
編集の要約なし |
編集の要約なし タグ: 差し戻し済み |
||
| 52行目: | 52行目: | ||
} | } | ||
} | } | ||
})(); | |||
(function () { | |||
window.RLQ = window.RLQ || []; | |||
window.RLQ.push(function () { | |||
var TEXT_SORT = '日付順に並べ替え'; | |||
var TEXT_AUTO = 'コメントの自動更新を有効化'; | |||
function trim(s) { | |||
return (s || '').replace(/^\s+|\s+$/g, ''); | |||
} | |||
function dispatchChange(input) { | |||
try { | |||
if (document.createEvent) { | |||
var ev = document.createEvent('HTMLEvents'); | |||
ev.initEvent('change', true, false); | |||
input.dispatchEvent(ev); | |||
} | |||
} catch (e) {} | |||
} | |||
function hideByText(text) { | |||
var scope = document.getElementById('mw-data-after-content') || document.body; | |||
if (!scope) return; | |||
var nodes = scope.querySelectorAll('label, a, span, div, li, p'); | |||
for (var i = 0; i < nodes.length; i++) { | |||
var el = nodes[i]; | |||
var t = trim(el.textContent); | |||
if (!t) continue; | |||
if (t.indexOf(text) === -1) continue; | |||
// ラベルがチェックボックスを指していればOFF化 | |||
var forId = el.getAttribute ? el.getAttribute('for') : null; | |||
if (forId) { | |||
var input = document.getElementById(forId); | |||
if (input && input.type === 'checkbox' && input.checked) { | |||
input.checked = false; | |||
dispatchChange(input); | |||
} | |||
} | |||
// 近い親要素を隠す(closest を使わない) | |||
var box = el; | |||
for (var step = 0; step < 6; step++) { | |||
if (!box || !box.parentNode) break; | |||
var cls = String(box.className || ''); | |||
if (cls.indexOf('oo-ui') !== -1 || cls.indexOf('mw-ui') !== -1 || cls.indexOf('comments') !== -1) { | |||
break; | |||
} | |||
box = box.parentNode; | |||
} | |||
(box || el).style.display = 'none'; | |||
} | |||
} | |||
function apply() { | |||
hideByText(TEXT_SORT); | |||
hideByText(TEXT_AUTO); | |||
} | |||
function boot() { | |||
apply(); | |||
var watchRoot = document.getElementById('mw-data-after-content') || document.body; | |||
if (watchRoot && window.MutationObserver) { | |||
var obs = new MutationObserver(function () { | |||
apply(); | |||
}); | |||
obs.observe(watchRoot, { childList: true, subtree: true }); | |||
} else { | |||
setInterval(apply, 1000); | |||
} | |||
} | |||
// comments-body が出るまで少し待つ | |||
var tries = 0; | |||
var timer = setInterval(function () { | |||
tries++; | |||
if (document.getElementById('comments-body') || document.querySelector('.comments')) { | |||
clearInterval(timer); | |||
boot(); | |||
return; | |||
} | |||
if (tries > 40) { | |||
clearInterval(timer); | |||
} | |||
}, 250); | |||
}); | |||
})(); | })(); | ||
2026年1月8日 (木) 08:54時点における版
/**
* MediaWiki 1.44.3 アカウント作成画面 無限ループ防止版
* 既に書き換え済みの場合は処理をスキップするように修正しました。
*/
(function() {
var enforce = function() {
if (mw.config.get('wgCanonicalSpecialPageName') !== 'CreateAccount') return;
// 1. メールアドレスの書き換え
var labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; i++) {
var label = labels[i];
// 「(省略可能)」が含まれている場合のみ書き換える(無限ループ防止)
if (label.getAttribute('for') === 'wpEmail' || label.innerHTML.indexOf('メールアドレス') !== -1) {
if (label.innerHTML.indexOf('(省略可能)') !== -1) {
label.innerHTML = 'メールアドレス';
}
}
// 本名の書き換え
if (label.getAttribute('for') === 'wpRealName' || label.innerHTML.indexOf('HN') !== -1) {
if (label.innerHTML.indexOf('(省略可能)') !== -1) {
label.innerHTML = 'HN(省略可能)';
}
}
}
// 2. 必須属性の付与
var emailInput = document.getElementById('wpEmail');
if (emailInput && !emailInput.required) {
emailInput.required = true;
emailInput.setAttribute('required', 'required');
}
};
if (mw.config.get('wgCanonicalSpecialPageName') === 'CreateAccount') {
// 初回実行
enforce();
// 監視対象を限定し、無限ループを回避
var observer = new MutationObserver(function(mutations) {
for (var i = 0; i < mutations.length; i++) {
if (mutations[i].addedNodes.length > 0) {
enforce();
break;
}
}
});
var target = document.getElementById('mw-content-text');
if (target) {
observer.observe(target, {childList: true, subtree: true});
}
}
})();
(function () {
window.RLQ = window.RLQ || [];
window.RLQ.push(function () {
var TEXT_SORT = '日付順に並べ替え';
var TEXT_AUTO = 'コメントの自動更新を有効化';
function trim(s) {
return (s || '').replace(/^\s+|\s+$/g, '');
}
function dispatchChange(input) {
try {
if (document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent('change', true, false);
input.dispatchEvent(ev);
}
} catch (e) {}
}
function hideByText(text) {
var scope = document.getElementById('mw-data-after-content') || document.body;
if (!scope) return;
var nodes = scope.querySelectorAll('label, a, span, div, li, p');
for (var i = 0; i < nodes.length; i++) {
var el = nodes[i];
var t = trim(el.textContent);
if (!t) continue;
if (t.indexOf(text) === -1) continue;
// ラベルがチェックボックスを指していればOFF化
var forId = el.getAttribute ? el.getAttribute('for') : null;
if (forId) {
var input = document.getElementById(forId);
if (input && input.type === 'checkbox' && input.checked) {
input.checked = false;
dispatchChange(input);
}
}
// 近い親要素を隠す(closest を使わない)
var box = el;
for (var step = 0; step < 6; step++) {
if (!box || !box.parentNode) break;
var cls = String(box.className || '');
if (cls.indexOf('oo-ui') !== -1 || cls.indexOf('mw-ui') !== -1 || cls.indexOf('comments') !== -1) {
break;
}
box = box.parentNode;
}
(box || el).style.display = 'none';
}
}
function apply() {
hideByText(TEXT_SORT);
hideByText(TEXT_AUTO);
}
function boot() {
apply();
var watchRoot = document.getElementById('mw-data-after-content') || document.body;
if (watchRoot && window.MutationObserver) {
var obs = new MutationObserver(function () {
apply();
});
obs.observe(watchRoot, { childList: true, subtree: true });
} else {
setInterval(apply, 1000);
}
}
// comments-body が出るまで少し待つ
var tries = 0;
var timer = setInterval(function () {
tries++;
if (document.getElementById('comments-body') || document.querySelector('.comments')) {
clearInterval(timer);
boot();
return;
}
if (tries > 40) {
clearInterval(timer);
}
}, 250);
});
})();