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

提供:百科事典.com
ナビゲーションに移動検索に移動
編集の要約なし
(メインページに「最近の更新(7件)」をタイトル+差分リンク付きで表示するための完全版コード003)
編集の要約なし
1行目: 1行目:
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* ============================================================
/* ============================================================
   メインページに「最近の更新(7件)」を表示するスクリプト
   メインページに「最近の更新(7件)」を表示するスクリプト
5行目: 8行目:
   - localStorage による5分キャッシュ
   - localStorage による5分キャッシュ
   - API の maxage/smaxage による HTTP キャッシュ
   - API の maxage/smaxage による HTTP キャッシュ
   - MediaWiki 1.39.3 で動作確認済み
   - MediaWiki 1.39.3 で動作確認済み(ES5対応版)
   ============================================================ */
   ============================================================ */


11行目: 14行目:


     // ▼ メインページ名の判定(あなたの wiki は「メインページ」)
     // ▼ メインページ名の判定(あなたの wiki は「メインページ」)
     const page = mw.config.get('wgPageName');
     var page = mw.config.get('wgPageName');
     if (page !== 'メインページ' && page !== 'Main_Page') {
     if (page !== 'メインページ' && page !== 'Main_Page') {
         return; // メインページ以外では実行しない
         return; // メインページ以外では実行しない
17行目: 20行目:


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


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


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


     if (cached && cachedTime && now - cachedTime < ttl) {
     if (cached && cachedTime && now - cachedTime < ttl) {
47行目: 50行目:
     }, function (data) {
     }, function (data) {


         let html = '<ul>';
         var html = '<ul>';


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


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


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


案内メニュー