コンテンツにスキップ

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

提供: owarai.wiki
Common.js と同期 (perf-link 存在チェック追加)
Common.js と同期 (body 直下挿入)
81行目: 81行目:
el.innerHTML = html;
el.innerHTML = html;


// MW 標準フッター (minerva-footer / mw-footer-container) の「直後」に挿入する。
// 必ず <body> 直下に append する。
// 最終更新バー・言語切替・MW ロゴなどの wiki UI 要素の下に WP 共通フッターが来る。
// Vector 2022 の .mw-page-container 内に置くと sidebar 込みの幅に縛られて grid が崩れるので、
var anchor = document.querySelector( '.minerva-footer, .mw-footer-container' );
// page container の外 = body 末尾 に出して viewport 全幅を取れるようにする。
if ( anchor && anchor.parentNode ) {
// 結果: Vector では「.mw-page-container の下」、Minerva では「.minerva-footer の下」 = 最終更新の下。
if ( anchor.nextSibling ) {
document.body.appendChild( el );
anchor.parentNode.insertBefore( el, anchor.nextSibling );
} else {
anchor.parentNode.appendChild( el );
}
} else {
document.body.appendChild( el );
}
}
}



2026年5月7日 (木) 22:48時点における版

/* WP 共通フッター — 全 wiki ページに挿入する。
 * MediaWiki:Common.js (Vector ほか) と MediaWiki:Minerva.js (mobile) の両方で使う。
 * 挿入先:
 *   - .mw-footer-container (Vector 2022 / 旧 Vector の MW フッターコンテナ) があれば、その「前」に挿入
 *   - .minerva-footer (Minerva mobile) があれば、その「前」に挿入
 *   - どちらも無ければ <body> の末尾に append
 * これで MW 標準フッター (lastmod/language/MW logo) は素直に下に残る。 */
( function () {
	'use strict';
	if ( document.getElementById( 'owarai-wp-footer' ) ) return;

	function build() {
		var html = ''
			+ '<div class="owarai-wp-footer-inner">'
			+   '<div class="owarai-wp-footer-top">'
			+     '<a href="/" class="owarai-wp-footer-logo" aria-label="owarai.wiki">'
			+       '<img class="owarai-wp-footer-icon" src="/wp-content/themes/owarai/assets/img/mw-icon.svg" alt="" aria-hidden="true">'
			+       '<span class="owarai-wp-footer-logo-text">'
			+         '<img class="owarai-wp-footer-wordmark" src="/wp-content/themes/owarai/assets/img/mw-wordmark.svg" alt="owarai.wiki">'
			+         '<span class="owarai-wp-footer-tag">お笑いの入口</span>'
			+       '</span>'
			+     '</a>'
			+     '<div class="owarai-wp-footer-cta">'
			+       '<a href="/wiki/" class="owarai-wp-btn-primary">Wikiトップ</a>'
			+       '<a href="/live/" class="owarai-wp-btn-secondary">ライブを探す</a>'
			+     '</div>'
			+   '</div>'

			+   '<div class="owarai-wp-footer-cols">'
			+     '<nav><h3>ライブ</h3><ul>'
			+       '<li><a href="/live/?date_range=today">今日</a></li>'
			+       '<li><a href="/live/?date_range=weekend">今週末</a></li>'
			+       '<li><a href="/live/?ticket_status=%E5%8F%97%E4%BB%98%E4%B8%AD">受付中</a></li>'
			+       '<li><a href="/live/?has_door_ticket=1">当日券あり</a></li>'
			+       '<li><a href="/live/?has_streaming=1">配信あり</a></li>'
			+       '<li><a href="/live/">すべてのライブ →</a></li>'
			+       '<li><a href="/live-series/">ライブシリーズ →</a></li>'
			+       '<li><a href="/live/finished/">終了したライブ →</a></li>'
			+     '</ul></nav>'

			+     '<nav><h3>分類</h3><ul>'
			+       '<li><a href="/performer-person/">芸人</a></li>'
			+       '<li><a href="/performer-group/">グループ</a></li>'
			+       '<li><a href="/venue/">会場</a></li>'
			+       '<li><a href="/area/">地域</a></li>'
			+       '<li><a href="/genre/">ライブ種別</a></li>'
			+       '<li><a href="/organizer/">事務所・主催</a></li>'
			+     '</ul></nav>'

			+     '<nav><h3>サイト</h3><ul>'
			+       '<li><a href="/">ポータル</a></li>'
			+       '<li><a href="/?type=all">横断検索</a></li>'
			+       '<li><a href="/contact/">お問い合わせ</a></li>'
			+       '<li><a href="/terms/">利用規約</a></li>'
			+       '<li><a href="/privacy-policy/">プライバシーポリシー</a></li>'
			+       '<li><a href="/disclaimer/">免責事項</a></li>'
			+     '</ul></nav>'

			+     '<nav><h3>Wiki</h3><ul>'
			+       '<li><a href="/wiki/">Wikiトップ</a></li>'
			+       '<li><a href="/wiki/特別:全ページ">全ページ</a></li>'
			+       '<li><a href="/wiki/特別:カテゴリ">カテゴリ</a></li>'
			+       '<li><a href="/wiki/特別:検索">Wiki内検索</a></li>'
			+       '<li><a href="/wiki/特別:最近の更新">最近の更新</a></li>'
			+     '</ul></nav>'
			+   '</div>'

			+   '<div class="owarai-wp-footer-disclaimer">'
			+     'owarai.wiki は非公式のお笑い情報ポータルです。掲載情報は公式サイト・チケット販売ページ・主催者告知等の公開情報をもとに引用・整理したものであり、最新性・正確性を保証するものではありません。ライブ・チケット情報は必ず公式サイト・販売ページをご確認ください。掲載される固有名詞・商標等の権利は各権利者に帰属します。当サイトは非公式であり、各権利者との提携・承認を示すものではありません。'
			+   '</div>'

			+   '<div class="owarai-wp-footer-copy">'
			+     '<span>© owarai.wiki</span>'
			+     '<a href="/">owarai.wiki</a>'
			+   '</div>'
			+ '</div>';

		var el = document.createElement( 'footer' );
		el.id = 'owarai-wp-footer';
		el.className = 'owarai-wp-footer';
		el.innerHTML = html;

		// 必ず <body> 直下に append する。
		// Vector 2022 の .mw-page-container 内に置くと sidebar 込みの幅に縛られて grid が崩れるので、
		// page container の外 = body 末尾 に出して viewport 全幅を取れるようにする。
		// 結果: Vector では「.mw-page-container の下」、Minerva では「.minerva-footer の下」 = 最終更新の下。
		document.body.appendChild( el );
	}

	if ( document.readyState === 'loading' ) {
		document.addEventListener( 'DOMContentLoaded', build );
	} else {
		build();
	}
}() );

/* Wiki Infobox の owarai-perf-link 行を「該当 term が存在しない」場合のみ削除する。
 * Template:Infobox 人物 / コンビ / コンビ・グループ から /performer-(person|group)/<name>/ への
 * 直リンクが描画される。リンク href の path から name と kind を抽出し
 * /api/perf-exists で照合して、exists:false のときのみ <tr> を消す。 */
( function () {
	'use strict';
	function check() {
		var rows = document.querySelectorAll( '.owarai-perf-link' );
		if ( !rows.length ) return;
		rows.forEach( function ( row ) {
			var a = row.querySelector( 'a[href*="/performer-"]' );
			if ( !a ) return;
			var m = a.getAttribute( 'href' ).match( /\/performer-(person|group)\/([^/?#]+)\/?/ );
			if ( !m ) return;
			var kind = m[1];
			var name;
			try { name = decodeURIComponent( m[2] ); } catch ( e ) { name = m[2]; }
			fetch( '/api/perf-exists?name=' + encodeURIComponent( name ) + '&kind=' + kind )
				.then( function ( r ) { return r.json(); } )
				.then( function ( d ) {
					if ( !d || !d.exists ) {
						if ( row.parentNode ) row.parentNode.removeChild( row );
					}
				} )
				.catch( function () { /* on error, leave row visible */ } );
		} );
	}
	if ( document.readyState === 'loading' ) {
		document.addEventListener( 'DOMContentLoaded', check );
	} else {
		check();
	}
}() );