「MediaWiki:Common.js」の版間の差分

提供: 小樽のじかん事典
編集の要約なし
編集の要約なし
1行目: 1行目:
/**
/**
  * アカウント作成画面のラベル強制書き換えおよびバリデーション
  * アカウント作成画面 強制書き換えスクリプト
  * MediaWiki 1.44.3 対応版
  * キャッシュを突き破るために、あらゆるタイミングで実行します。
  */
  */
(function() {
(function() {
     // アカウント作成画面(Special:CreateAccount)でのみ実行
     var runCustomization = function() {
    if (mw.config.get('wgCanonicalSpecialPageName') === 'CreateAccount') {
        if (mw.config.get('wgCanonicalSpecialPageName') === 'CreateAccount') {
       
             // 1. メールアドレスのラベル変更
        var customizeAccountForm = function() {
             var labels = document.getElementsByTagName('label');
             // 1. メールアドレスのラベル変更(省略可能を削除)
             for (var i = 0; i < labels.length; i++) {
             // 複数のセレクタを用いて、確実に要素を特定します
                if (labels[i].getAttribute('for') === 'wpEmail' || labels[i].innerHTML.indexOf('メールアドレス') !== -1) {
             var $emailLabel = $('label[for="wpEmail"], #mw-createaccount-join-form label:contains("メールアドレス")');
                    labels[i].innerHTML = 'メールアドレス';
            if ($emailLabel.length) {
                }
                $emailLabel.text('メールアドレス');
                if (labels[i].getAttribute('for') === 'wpRealName' || labels[i].innerHTML.indexOf('本名') !== -1) {
                    labels[i].innerHTML = 'HN(省略可能)';
                }
             }
             }
              
              
             // 2. 本名のラベルを「HN(省略可能)」に変更
             // 2. メールアドレス入力を必須にする
             var $realNameLabel = $('label[for="wpRealName"], #mw-createaccount-join-form label:contains("本名")');
             var emailInput = document.getElementById('wpEmail');
             if ($realNameLabel.length) {
             if (emailInput) {
                 $realNameLabel.text('HN(省略可能)');
                 emailInput.required = true;
                emailInput.setAttribute('required', 'required');
             }
             }
           
        }
            // 3. メールアドレス入力をブラウザレベルで必須にする
    };
            var $emailInput = $('#wpEmail');
            if ($emailInput.length) {
                $emailInput.prop('required', true);
                // HTML5のバリデーションを有効化
                $emailInput.attr('aria-required', 'true');
            }
           
            // 4. アカウント作成ボタンが押された際の最終チェック
            var $submitButton = $('#wpCreateaccount');
            if ($submitButton.length) {
                $submitButton.on('click', function(e) {
                    if ($emailInput.length && !$emailInput.val()) {
                        alert('メールアドレスは必須項目です。');
                        $emailInput.focus();
                        e.preventDefault();
                        return false;
                    }
                });
            }
        };


        // DOMの構築を待って実行
    // 読み込み時、1秒後、3秒後にしつこく実行
        $(document).ready(function() {
    runCustomization();
            customizeAccountForm();
    window.addEventListener('load', runCustomization);
            // 動的な変更を監視(MutationObserver)
    setTimeout(runCustomization, 1000);
            if (window.MutationObserver) {
    setTimeout(runCustomization, 3000);
                var observer = new MutationObserver(function() {
                    customizeAccountForm();
                });
                observer.observe(document.body, { childList: true, subtree: true });
            }
        });
       
        // フォールバック:0.5秒後と2秒後にも実行
        setTimeout(customizeAccountForm, 500);
        setTimeout(customizeAccountForm, 2000);
    }
})();
})();

2025年12月27日 (土) 10:53時点における版

/**
 * アカウント作成画面 強制書き換えスクリプト
 * キャッシュを突き破るために、あらゆるタイミングで実行します。
 */
(function() {
    var runCustomization = function() {
        if (mw.config.get('wgCanonicalSpecialPageName') === 'CreateAccount') {
            // 1. メールアドレスのラベル変更
            var labels = document.getElementsByTagName('label');
            for (var i = 0; i < labels.length; i++) {
                if (labels[i].getAttribute('for') === 'wpEmail' || labels[i].innerHTML.indexOf('メールアドレス') !== -1) {
                    labels[i].innerHTML = 'メールアドレス';
                }
                if (labels[i].getAttribute('for') === 'wpRealName' || labels[i].innerHTML.indexOf('本名') !== -1) {
                    labels[i].innerHTML = 'HN(省略可能)';
                }
            }
            
            // 2. メールアドレス入力を必須にする
            var emailInput = document.getElementById('wpEmail');
            if (emailInput) {
                emailInput.required = true;
                emailInput.setAttribute('required', 'required');
            }
        }
    };

    // 読み込み時、1秒後、3秒後にしつこく実行
    runCustomization();
    window.addEventListener('load', runCustomization);
    setTimeout(runCustomization, 1000);
    setTimeout(runCustomization, 3000);
})();