コンテンツにスキップ

MediaWiki:Minerva.js

提供: owarai.wiki

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
/* 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;

		// 挿入位置:
		//  - Minerva: <body> 直下が #mw-mf-viewport 1 個だけで全 content を内包している。
		//    そこに body.appendChild すると viewport の「外」に出てしまい、Minerva の
		//    レイアウト計算 (transform / position) から外れて記事の途中に見えることがある。
		//    → #mw-mf-viewport の「内側末尾」に入れる。
		//  - Vector / その他: #mw-mf-viewport が無いので body 末尾に入れる
		//    (これで .mw-page-container の外、sidebar の影響を受けない viewport 全幅となる)
		var mobileViewport = document.getElementById( 'mw-mf-viewport' );
		if ( mobileViewport ) {
			mobileViewport.appendChild( el );
		} else {
			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();
	}
}() );