< 利用者:野獣2世
編集の要約なし |
編集の要約なし |
||
| 48行目: | 48行目: | ||
</div> | </div> | ||
`; | `; | ||
// ------- left recent sidebar ------- | |||
function setupLeftRecentSidebar(){ | |||
if (document.getElementById('left-recent-sidebar')) return; | |||
var articleBody = document.getElementById('article-body'); | |||
if (!articleBody) return; | |||
var sidebar = document.createElement('aside'); | |||
sidebar.id = 'left-recent-sidebar'; | |||
sidebar.innerHTML = ` | |||
<h2 class="lrs-title"> | |||
<a href="/wiki/特別:最近の更新?hidebots=1&namespace=0&limit=50&days=7"> | |||
⌛ 最近の更新 | |||
</a> | |||
</h2> | |||
<div class="rc-loading">取得中…</div> | |||
`; | |||
articleBody.prepend(sidebar); | |||
var apiBase = (mw.util && mw.util.wikiScript) | |||
? mw.util.wikiScript('api') | |||
: '/api.php'; | |||
var params = { | |||
action:'query', | |||
format:'json', | |||
list:'recentchanges', | |||
rcprop:'title|timestamp', | |||
rclimit:'100', | |||
rcnamespace:'0', | |||
rcshow:'!bot' | |||
}; | |||
var query = apiBase + '?' + Object.keys(params) | |||
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])) | |||
.join('&'); | |||
fetch(query) | |||
.then(r => r.json()) | |||
.then(data => { | |||
if (!data.query || !data.query.recentchanges) return; | |||
var seen = new Set(); | |||
var grouped = {}; | |||
var order = []; | |||
data.query.recentchanges.forEach(rc => { | |||
if (seen.has(rc.title)) return; | |||
seen.add(rc.title); | |||
var d = new Date(rc.timestamp); | |||
var key = d.getFullYear() + '年' + (d.getMonth()+1) + '月' + d.getDate() + '日'; | |||
if (!grouped[key]) { | |||
grouped[key] = []; | |||
order.push(key); | |||
} | |||
grouped[key].push(rc.title); | |||
}); | |||
sidebar.innerHTML = ` | |||
<h2 class="lrs-title">⌛ 最近の更新</h2> | |||
`; | |||
order.slice(0,5).forEach(date => { | |||
var details = document.createElement('details'); | |||
details.open = true; | |||
var summary = document.createElement('summary'); | |||
summary.textContent = date; | |||
details.appendChild(summary); | |||
var ul = document.createElement('ul'); | |||
grouped[date].slice(0,20).forEach(title => { | |||
var li = document.createElement('li'); | |||
var a = document.createElement('a'); | |||
a.href = mw.util.getUrl(title); | |||
a.textContent = title; | |||
li.appendChild(a); | |||
ul.appendChild(li); | |||
}); | |||
details.appendChild(ul); | |||
sidebar.appendChild(details); | |||
}); | |||
}); | |||
} | |||
mw.hook('wikipage.content').add(setupLeftRecentSidebar); | |||
articleBody.prepend(left); | articleBody.prepend(left); | ||
})(); | })(); | ||
2026年1月9日 (金) 13:08時点における版
(function () {
'use strict';
const articleBody = document.getElementById('article-body');
if (!articleBody) return;
const pageName =
(mw.config && mw.config.get('wgPageName')) ||
location.pathname.replace('/wiki/', '');
const left = document.createElement('div');
left.className = 'left-gutter';
left.innerHTML = `
<div style="font-family:inherit; font-size:12px; line-height:1.4;">
<h2 style="font-size:14px;margin:6px 0;">📌 メニュー</h2>
<ul style="padding-left:18px;margin:0 0 8px 0;">
<li><a href="/wiki/Hikakin_Mania_Wiki:メインページ">トップページ</a></li>
<li><a href="/wiki/Hikakin_Mania_Wiki:お知らせ">お知らせ</a></li>
<li><a href="/wiki/Hikakin_Mania_Wiki:Hikakin_Mania_Wikiについて">本Wikiについて</a></li>
<li><a href="/wiki/特別:おまかせ表示">おまかせ表示</a></li>
<li><a href="/wiki/Portal:最近の出来事">最近の出来事</a></li>
<li><a href="/wiki/特別:特別ページ一覧">特別ページ</a></li>
</ul>
<details style="margin-bottom:8px;">
<summary>🛠 編集者向け</summary>
<ul style="padding-left:18px;margin:6px 0 0 0;">
<li><a href="/wiki/Hikakin_Mania_Wiki:管理人問い合わせフォーム">管理人問い合わせフォーム</a></li>
<li><a href="/wiki/Hikakin_Mania_Wiki:使えるマークアップ">使えるマークアップ</a></li>
<li><a href="/wiki/Hikakin_Mania_Wiki:サンドボックス">サンドボックス</a></li>
<li><a href="/wiki/Hikakin_Mania_Wiki:方針とガイドライン">方針とガイドライン</a></li>
</ul>
</details>
<h2 style="font-size:14px;margin:6px 0;">🧰 ツール</h2>
<ul style="padding-left:18px;margin:0 0 8px 0;">
<li><a href="/wiki/${pageName}?action=purge">キャッシュ削除</a></li>
<li><a href="/wiki/特別:リンク元/${pageName}">リンク元</a></li>
<li><a href="/index.php?title=${pageName}&action=info">ページ情報</a></li>
<li><a href="/wiki/特別:リダイレクト作成/${pageName}">転送作成</a></li>
</ul>
<div style="height:1px;background:#e0e0e0;margin:8px 0;"></div>
<div style="font-size:11px;color:#666;">
© Hikakin Mania Wiki
</div>
</div>
`;
// ------- left recent sidebar -------
function setupLeftRecentSidebar(){
if (document.getElementById('left-recent-sidebar')) return;
var articleBody = document.getElementById('article-body');
if (!articleBody) return;
var sidebar = document.createElement('aside');
sidebar.id = 'left-recent-sidebar';
sidebar.innerHTML = `
<h2 class="lrs-title">
<a href="/wiki/特別:最近の更新?hidebots=1&namespace=0&limit=50&days=7">
⌛ 最近の更新
</a>
</h2>
<div class="rc-loading">取得中…</div>
`;
articleBody.prepend(sidebar);
var apiBase = (mw.util && mw.util.wikiScript)
? mw.util.wikiScript('api')
: '/api.php';
var params = {
action:'query',
format:'json',
list:'recentchanges',
rcprop:'title|timestamp',
rclimit:'100',
rcnamespace:'0',
rcshow:'!bot'
};
var query = apiBase + '?' + Object.keys(params)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
.join('&');
fetch(query)
.then(r => r.json())
.then(data => {
if (!data.query || !data.query.recentchanges) return;
var seen = new Set();
var grouped = {};
var order = [];
data.query.recentchanges.forEach(rc => {
if (seen.has(rc.title)) return;
seen.add(rc.title);
var d = new Date(rc.timestamp);
var key = d.getFullYear() + '年' + (d.getMonth()+1) + '月' + d.getDate() + '日';
if (!grouped[key]) {
grouped[key] = [];
order.push(key);
}
grouped[key].push(rc.title);
});
sidebar.innerHTML = `
<h2 class="lrs-title">⌛ 最近の更新</h2>
`;
order.slice(0,5).forEach(date => {
var details = document.createElement('details');
details.open = true;
var summary = document.createElement('summary');
summary.textContent = date;
details.appendChild(summary);
var ul = document.createElement('ul');
grouped[date].slice(0,20).forEach(title => {
var li = document.createElement('li');
var a = document.createElement('a');
a.href = mw.util.getUrl(title);
a.textContent = title;
li.appendChild(a);
ul.appendChild(li);
});
details.appendChild(ul);
sidebar.appendChild(details);
});
});
}
mw.hook('wikipage.content').add(setupLeftRecentSidebar);
articleBody.prepend(left);
})();