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

編集の要約なし
編集の要約なし
25行目: 25行目:
         // UIモジュールの読み込み
         // UIモジュールの読み込み
         mw.loader.load(['mediawiki.ui.button','mediawiki.ui.input','mediawiki.ui.checkbox']);
         mw.loader.load(['mediawiki.ui.button','mediawiki.ui.input','mediawiki.ui.checkbox']);
        // ========== 直接編集の非表示(管理者以外) ==========
        // 掲示板ページで「編集」「ソースを編集」タブを隠し、
        // 直接ウィキテキストを操作して投稿を削除できないようにする。
        // ※ JS無効化や直接APIアクセスは防げないため、完全な保護が
        //  必要な場合は LocalSettings.php でページを保護してください。
        if(!mw.config.get('wgUserGroups').includes('sysop')){
            const editBlockStyle = document.createElement('style');
            editBlockStyle.textContent = [
                '#ca-edit',          // 「編集」タブ
                '#ca-ve-edit',      // VisualEditorタブ
                '#ca-editsource',    // 「ソースを編集」タブ
                '.mw-editsection',  // 節編集リンク
                '#t-permalink',      // 念のため固定リンクも非表示
            ].join(',') + '{display:none!important;}';
            document.head.appendChild(editBlockStyle);
        }
        // =====================================================
          
          
         mw.loader.using(['mediawiki.util', 'mediawiki.user', 'mediawiki.api'], function() {
         mw.loader.using(['mediawiki.util', 'mediawiki.user', 'mediawiki.api'], function() {
140行目: 158行目:
   <label style="display:block;margin-bottom:.4em;">
   <label style="display:block;margin-bottom:.4em;">
     トリップキー:
     トリップキー:
     <input type="password" id="f-anon-trip" class="mw-ui-input" placeholder="秘密のキー(省略可)" style="width:200px;display:inline-block;margin-left:.5em;" autocomplete="new-password">
     <input type="text" id="f-anon-trip" class="mw-ui-input" placeholder="秘密のキー(省略可・日本語可)" style="width:200px;display:inline-block;margin-left:.5em;" autocomplete="off">
   </label>
   </label>
   <span id="f-trip-preview" style="font-size:.9em;color:#555;display:block;margin-bottom:.4em;"></span>
   <span id="f-trip-preview" style="font-size:.9em;color:#555;display:block;margin-bottom:.4em;"></span>
282行目: 300行目:
                             let content = '';
                             let content = '';
                             if(mw.forum.zeroTemplate){
                             if(mw.forum.zeroTemplate){
                                 content += `{{post|System|0|{{subst:#timel:Y/m/d H:i}}|4=${mw.forum.zeroTemplate}}}\n`;
                                 content += `{{post|System|0|{{subst:#timel:Y/m/d H:i:s}}|4=${mw.forum.zeroTemplate}}}\n`;
                             }
                             }
                             // スレッド作成者がログイン済みかどうかで anon フラグを付与
                             // スレッド作成者がログイン済みかどうかで anon フラグを付与
                             const anonParam = isAnon ? '|anon=1' : '';
                             const anonParam = isAnon ? '|anon=1' : '';
                             content += `{{post|${mw.forum.username}|1|{{subst:#timel:Y/m/d H:i}}|4=${document.querySelector('#wpTextbox1').value}${anonParam}}}`;
                             content += `{{post|${mw.forum.username}|1|{{subst:#timel:Y/m/d H:i:s}}|4=${document.querySelector('#wpTextbox1').value}${anonParam}}}`;
                             new mw.Api().postWithToken('csrf', {
                             new mw.Api().postWithToken('csrf', {
                                 action: 'edit',
                                 action: 'edit',
358行目: 376行目:
                             [fedit ? 'text' : 'appendtext']: fedit
                             [fedit ? 'text' : 'appendtext']: fedit
                                 ? source.replace(new RegExp(`\\{\\{post\\|(.*?)\\|${fedit}\\|(.*?)\\|4=((.|\n)*?)}}`), `{{post|$1|${fedit}|$2|4=${document.querySelector('#wpTextbox1').value}}}`)
                                 ? source.replace(new RegExp(`\\{\\{post\\|(.*?)\\|${fedit}\\|(.*?)\\|4=((.|\n)*?)}}`), `{{post|$1|${fedit}|$2|4=${document.querySelector('#wpTextbox1').value}}}`)
                                 : `\n{{post|${mw.forum.username}|${lp}|{{subst:#timel:Y/m/d H:i}}|4=${document.querySelector('#wpTextbox1').value}${document.querySelector('#f-reply-cb').checked ? '|re='+document.querySelector('#f-reply').value : ''}${anonParam}}}`,
                                 : `\n{{post|${mw.forum.username}|${lp}|{{subst:#timel:Y/m/d H:i:s}}|4=${document.querySelector('#wpTextbox1').value}${document.querySelector('#f-reply-cb').checked ? '|re='+document.querySelector('#f-reply').value : ''}${anonParam}}}`,
                             summary: summary,
                             summary: summary,
                             format: 'json'
                             format: 'json'