「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=" | <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' | ||