User:Funa-enpitu/Forum
Appearance
Forum.jsは、Funa-enpituが開発したMediaWiki用掲示板プログラムです。以下に示した最後の「common.js」を除く4つのファイル及びこのドキュメントはCC BY-SA 4.0でライセンスされています。「common.js」はパブリックドメインに置いています。
ファイル名 | 説明 |
---|---|
installer.js | インストーラ |
Forum.js | 本体 |
thread.lua | スレッド一覧取得用モジュール |
post.tpl | 投稿のテンプレート |
post-styles.css | 投稿のスタイルシート |
common.js | WikiのCommon.jsに追加するコード |
インストール・アップデート
[edit]- あなたのウィキのあなたの利用者JSページに以下のインストールスクリプトを追加します。
mw.loader.load('//www.mediawiki.org/w/index.php?title=User:Funa-enpitu/Forum/installer.js&action=raw&ctype=text/javascript');
- ページのキャッシュを破棄し(Shift + 再読み込み)、サイドバー(Vector 2022はツールタブ)内のツールボックスに「Install Forum.js」の項目が増えているので、そこをクリック。
- 手順に従って「次へ」を押していきます。
- インストール画面に遷移すると、上のファイルから順にインストールが始まっていきます。
- 「状態」がすべて「Done」なら、インストールが完了しています。「掲示板に行く」を押して掲示板を使い始めることができます。
- 「状態」に「Fail」が含まれる場合、インストールは失敗しています。「再試行」を押して再インストールしてください。
概要
[edit]このスクリプトは昔作成した掲示板スクリプトBb.jsを一から書き直したものになります。Bb.jsとの相違点は以下の通り。
- 投稿部分にWikiEditorを採用
- プレビュー機能の追加
- スレッド一覧に最終投稿者・日時、総投稿数などの情報を追加(Luaを使用)
- スレッド一覧にSticky機能を追加
- 返信された場合に通知を送信
- 読み込み方式に変更(プログラムファイルがWiki内設置不要)
- MediaWiki UI使用
IP投稿廃止ver.1.5 対応しました- jQuery不使用(mwオブジェクトを介して実行されるもの以外)
WikiのCommon.jsに設置することを想定しています。
他の一般的な掲示板システムに付属している「ボード」機能は、規定では使うことができませんが、簡単に実装できます。#ボード機能の追加節の解説を参考にするといいです。
動作環境
[edit]Forum.jsを利用するためには、以下の環境が必要になります。古いバージョンでもある程度動作すると思われますが、誤作動を引き起こす可能性があります。
- MediaWiki ≧1.40.0
- Scribunto
- ParserFunctions ≧1.6.0
- Echo
- WikiEditor ≧0.5.3
- TemplateStyles ≧1.0
また、返信機能を利用するためには$wgEchoMaxMentionsInEditSummary
を1以上に設定する必要があります。
設定
[edit]すべての設定はmw.forum
オブジェクトから読み込まれます。
キー | 規定値 | 説明 |
---|---|---|
toppage |
undefined |
掲示板のトップページ。この設定は必須です。 |
sticky |
[] |
スティッキースレッド。配列に{title: '(スティッキーするスレッド名)'} のような連想配列を追加します。
|
threads |
'20' |
スレッド一覧に一度に表示するスレッドの数。 |
msg |
[object Object] {loading: '<p>読み込み中...</p>',postform: '<div id="f-form"><h2>投稿</h2><div class="mw-ui-checkbox" style="margin-bottom:.3em;"><input type="checkbox" class="mw-ui-checkbox" id="f-reply-cb"><label for="f-reply-cb" style="user-select:none;">返信する</label></div><input type="number" id="f-reply" class="mw-ui-input" style="widht:50%;margin-bottom:.5em;"><textarea accesskey="," id="wpTextbox1" cols="80" rows="25" class="mw-editfont-monospace"></textarea><input type="button" id="f-post" value="投稿" class="mw-ui-button mw-ui-progressive" style="margin-top:.5em;"><input type="button" id="f-preview" value="プレビュー" class="mw-ui-button" style="margin: .5em 0 0 .5em;"><fieldset hidden><legend>プレビュー</legend><div id="f-preview-content"></div></fieldset><style>.mw-ui-checkbox:has(#f-reply-cb:checked)+input{display:block;}#f-reply{display:none;}</style></div>',postsummary: 'post',replysummary: 'reply to',toppage_css: "<style>.f-sticky>td:first-child>a::before{content:'';background-image:url(https://upload.wikimedia.org/wikipedia/commons/a/a5/OOjs_UI_icon_pushPin.svg);width:.8em;height:.8em;margin-right:.2em;display:inline-block;background-size:.8em}#f-loadmore{display:block;margin-left:auto;margin-right:auto;}</style>",load_more: '<input type="button" value="もっと読み込む" class="mw-ui-button" id="f-loadmore">',create: '<input type="button" class="mw-ui-button mw-ui-progressive" value="スレッドを作成">',createform: '<div id="f-form"><label>スレッド名: <input type="text" id="f-threadname" class="mw-ui-input" style="margin-bottom:.5em;"></label><textarea accesskey="," id="wpTextbox1" cols="80" rows="25" class="mw-editfont-monospace"></textarea><input type="button" value="スレッドを作成" id="f-create" class="mw-ui-button mw-ui-progressive" style="margin-top:.5em;"><input type="button" id="f-preview" value="プレビュー" class="mw-ui-button" style="margin: .5em 0 0 .5em;"><fieldset hidden><legend>プレビュー</legend><div id="f-preview-content"></div></fieldset></div>',createthreadsummary: 'スレッドの作成',posterror: 'エラー: 投稿できませんでした'
}
|
スクリプトで使用するメッセージの一覧。 |
追加予定の機能
[edit]- 投稿の編集フォームの追加
- 他人の投稿を編集できないようにする(不正利用フィルター)
- 未読投稿への自動リダイレクト
- 複数人への返信
ボード機能の追加
[edit]この節では、Forum.jsに標準実装されていない「ボード機能」の実装方法について解説しています。
ボード機能とは
[edit]一般的な掲示板は、次のような仕組みになっています。
├── ボード(板) 1 │ ├── スレッド(話題) 1 │ │ ├── レス(投稿) #1 │ │ └── レス #2 │ └── スレッド 2 │ ├── レス #1 │ └── レス #2 └── ボード 2 ├── スレッド 1 │ ├── レス #1 │ └── レス #2 └── スレッド 2 ├── レス #1 └── レス #2
この中のボード1
やボード2
がボードです。
手順
[edit]実装方法はいたって簡単で、以下のコードを自分のウィキに合わせ調整するだけです。
- MediaWiki:Common.js
switch(true){
case mw.config.get('wgPageName').startsWith('Project:掲示板/ボード1'): //「Project:掲示板/ボード1」の部分は適宜書き換え
mw.forum = {
toppage: 'Project:掲示板/ボード1', // 同上
sticky: [],
threads: '20',
msg: {}
};
break;
/* ここに追記 */
default: mw.forum={toppage:''};
}
mw.loader.load('//www.mediawiki.org/w/index.php?title=User:Funa-enpitu/Forum/Forum.js&action=raw&ctype=text/javascript');
ボードを増やしたい場合、/* ここに追記 */
の部分に以下の定型文を書き換えて追加していきます。
case mw.config.get('wgPageName').startsWith('(ボードのページ名)'):
mw.forum = {
toppage: '(ボードのページ名)',
sticky: [],
threads: '20',
msg: {}
};
break;
後は各ボードに空白のトップページを作成すれば、完成です。
リリースノート
[edit]- 1.1 2024/01/25 : 掲示板以外で投稿ボックスが表示されるバグの修正
- 1.2 2024/01/25 : 設定の規定値を設定
- 1.3 2024/01/26 : 要約内のポストリンク修正
- 1.4 2024/02/04 : システムメッセージの修正
- 1.5 2024/05/12 : IPユーザーに対応
問題と解決策
[edit]- 返信されても通知が届かない
$wgEchoMaxMentionsInEditSummary
が1以上に設定されているか確認してください。0の場合、編集の要約内で言及することができず、通知が届きません。- スレッドの一覧画面に「スクリプトに割り当てた時間が終了しました。」と表示される
- ポスト数の多いスレッドが複数存在している可能性があります。使っていないスレッドをほかのページに移動させる、ボード機能を使用するなどしてください。それでも改善されない場合、スレッドの分割などを試してみてください。それでも動かない場合、サーバー側の問題である可能性があります。管理者にお問い合わせください。