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

提供:百科事典.com
ナビゲーションに移動 検索に移動
(メインページに「最近の更新(7件)」をタイトル+差分リンク付きで表示するための完全版コード)
 
(完全修正版(日本語メインページ対応・差分リンク安全化・日本語コメント付き)002)
1行目: 1行目:
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */




13行目: 14行目:
$(function () {
$(function () {


     // ▼ メインページ以外では実行しない(重要)
     // ▼ メインページ名の判定(日本語版と英語版の両方に対応)
     if (mw.config.get('wgPageName') !== 'Main_Page' &&
     const page = mw.config.get('wgPageName');
        mw.config.get('wgPageName') !== 'メインページ') {
    if (page !== 'Main_Page' && page !== 'メインページ') {
         return;
         return; // メインページ以外では実行しない
     }
     }


54行目: 55行目:
         data.query.recentchanges.forEach(rc => {
         data.query.recentchanges.forEach(rc => {


             // ▼ 差分リンクの生成
             // ▼ old_revid が null(新規作成)の場合は差分リンクを作らない
             const diffUrl = mw.util.getUrl(rc.title, {
            let diffLink = '';
                diff: rc.revid,
             if (rc.old_revid && rc.revid) {
                oldid: rc.old_revid
                const diffUrl = mw.util.getUrl(rc.title, {
             });
                    diff: rc.revid,
                    oldid: rc.old_revid
                });
                diffLink = `<a href="${diffUrl}">差分</a>`;
             } else {
                diffLink = '(新規)';
            }


             // ▼ リスト項目の HTML
             // ▼ リスト項目の HTML
65行目: 72行目:
                     <a href="/wiki/${rc.title}">${rc.title}</a>
                     <a href="/wiki/${rc.title}">${rc.title}</a>
                     &nbsp;
                     &nbsp;
                     <a href="${diffUrl}">差分</a>
                     ${diffLink}
                     &nbsp;
                     &nbsp;
                     (${rc.timestamp})
                     (${rc.timestamp})

2026年2月20日 (金) 10:35時点における版

/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */




/* ============================================================
   メインページに「最近の更新(7件)」を表示するスクリプト
   - タイトル+差分リンク付き
   - localStorage による5分キャッシュ
   - API の maxage/smaxage による HTTP キャッシュ
   - MediaWiki 1.39.3 で動作確認済み
   ============================================================ */

$(function () {

    // ▼ メインページ名の判定(日本語版と英語版の両方に対応)
    const page = mw.config.get('wgPageName');
    if (page !== 'Main_Page' && page !== 'メインページ') {
        return; // メインページ以外では実行しない
    }

    // ▼ localStorage 用のキー
    const key = 'recentchanges-cache';
    const keyTime = key + '-time';

    // ▼ キャッシュの有効期限(ミリ秒)→ 5分
    const ttl = 5 * 60 * 1000;
    const now = Date.now();

    // ▼ localStorage にキャッシュがあれば利用
    const cached = localStorage.getItem(key);
    const cachedTime = localStorage.getItem(keyTime);

    if (cached && cachedTime && now - cachedTime < ttl) {
        $('#recentchanges-container').html(cached);
        return; // API を叩かず終了
    }

    // ▼ MediaWiki API を呼び出して最近の更新を取得
    $.getJSON(mw.util.wikiScript('api'), {
        action: 'query',
        list: 'recentchanges',
        rclimit: 7,                     // 取得件数
        rcprop: 'title|timestamp|ids',  // タイトル・時刻・差分ID
        rcshow: '!bot',                 // Bot 編集を除外(不要なら削除)
        format: 'json',

        // ▼ HTTP キャッシュ(ブラウザ・CDN)
        maxage: 300,   // ブラウザキャッシュ 5分
        smaxage: 300   // CDNキャッシュ 5分
    }, function (data) {

        let html = '<ul>';

        data.query.recentchanges.forEach(rc => {

            // ▼ old_revid が null(新規作成)の場合は差分リンクを作らない
            let diffLink = '';
            if (rc.old_revid && rc.revid) {
                const diffUrl = mw.util.getUrl(rc.title, {
                    diff: rc.revid,
                    oldid: rc.old_revid
                });
                diffLink = `<a href="${diffUrl}">差分</a>`;
            } else {
                diffLink = '(新規)';
            }

            // ▼ リスト項目の HTML
            html += `
                <li>
                    <a href="/wiki/${rc.title}">${rc.title}</a>
                    &nbsp;
                    ${diffLink}
                    &nbsp;
                    (${rc.timestamp})
                </li>
            `;
        });

        html += '</ul>';

        // ▼ localStorage にキャッシュ保存
        localStorage.setItem(key, html);
        localStorage.setItem(keyTime, now);

        // ▼ メインページに表示
        $('#recentchanges-container').html(html);
    });
});