「MediaWiki:Minerva.js」の版間の差分
Common.js と同期 |
Minerva: #mw-mf-viewport 内に footer を append (body 直下だと viewport 外で記事中央に出る問題) |
||
| (同じ利用者による、間の2版が非表示) | |||
| 81行目: | 81行目: | ||
el.innerHTML = html; | el.innerHTML = html; | ||
// | // 挿入位置: | ||
// | // - Minerva: <body> 直下が #mw-mf-viewport 1 個だけで全 content を内包している。 | ||
var | // そこに body.appendChild すると viewport の「外」に出てしまい、Minerva の | ||
if ( | // レイアウト計算 (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 { | } 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(); | |||
} | } | ||
}() ); | }() ); | ||