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

Common.js と同期
Minerva: #mw-mf-viewport 内に footer を append (body 直下だと viewport 外で記事中央に出る問題)
 
(同じ利用者による、間の2版が非表示)
81行目: 81行目:
el.innerHTML = html;
el.innerHTML = html;


// MW 標準フッター (minerva-footer / mw-footer-container) の「直後」に挿入する。
// 挿入位置:
// 最終更新バー・言語切替・MW ロゴなどの wiki UI 要素の下に WP 共通フッターが来る。
//  - Minerva: <body> 直下が #mw-mf-viewport 1 個だけで全 content を内包している。
var anchor = document.querySelector( '.minerva-footer, .mw-footer-container' );
//    そこに body.appendChild すると viewport の「外」に出てしまい、Minerva の
if ( anchor && anchor.parentNode ) {
//    レイアウト計算 (transform / position) から外れて記事の途中に見えることがある。
if ( anchor.nextSibling ) {
//    → #mw-mf-viewport の「内側末尾」に入れる。
anchor.parentNode.insertBefore( el, anchor.nextSibling );
//  - Vector / その他: #mw-mf-viewport が無いので body 末尾に入れる
} else {
//   (これで .mw-page-container の外、sidebar の影響を受けない viewport 全幅となる)
anchor.parentNode.appendChild( el );
var mobileViewport = document.getElementById( 'mw-mf-viewport' );
}
if ( mobileViewport ) {
mobileViewport.appendChild( el );
} else {
} else {
document.body.appendChild( el );
document.body.appendChild( el );
99行目: 100行目:
} else {
} else {
build();
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();
}
}
}() );
}() );