跳转到内容

User:Aizag/common.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// 未經許可,請勿更改
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=User:SuperHamster/CiteUnseen.js&action=raw&ctype=text/javascript' ); // Backlink: [[m:Meta:Cite Unseen]]
mw.loader.load( '/w/index.php?title=User:Aizag/interlangRefCount.js&action=raw&ctype=text/javascript' ); // 跨語言連結顯示引用數
( function () {
	'use strict';

	var processed = 0;

	function update( gallery, counter ) {
		var boxes = gallery.querySelectorAll( 'li.gallerybox' );
		var current = gallery.querySelector( 'li.gallerybox.slideshow-current' );
		var index = Array.prototype.indexOf.call( boxes, current );
		counter.textContent = '(' + ( index + 1 ) + '/' + boxes.length + ')';
	}

	function enhance( buttons ) {
		if ( buttons.dataset.galleryCounter ) {
			return;
		}
		var gallery = buttons.closest( 'ul.mw-gallery-slideshow' );
		if ( !gallery ) {
			return;
		}
		buttons.dataset.galleryCounter = '1';
		processed++;

		// 三顆按鈕依序為:上一張、切換縮圖、下一張
		var widgets = buttons.querySelectorAll( '.oo-ui-buttonWidget' );
		if ( widgets.length < 3 ) {
			return;
		}
		widgets[ 1 ].classList.add( 'zh-slideshow-toggle' );

		var counter = document.createElement( 'span' );
		counter.className = 'zh-slideshow-counter';
		widgets[ 2 ].parentNode.insertBefore( counter, widgets[ 2 ] );

		update( gallery, counter );
		new MutationObserver( function () {
			update( gallery, counter );
		} ).observe( gallery, {
			attributes: true,
			attributeFilter: [ 'class' ],
			subtree: true
		} );
	}

	function scan() {
		Array.prototype.forEach.call(
			document.querySelectorAll( '.mw-gallery-slideshow-buttons' ),
			enhance
		);
		return processed >= document.querySelectorAll( 'ul.mw-gallery-slideshow' ).length;
	}

	// carousel 由核心模組動態產生,需等它插入 DOM 後才處理
	var observer = new MutationObserver( function () {
		if ( scan() && processed > 0 ) {
			observer.disconnect();
		}
	} );

	mw.hook( 'wikipage.content' ).add( function () {
		if ( !scan() ) {
			observer.observe( document.body, { childList: true, subtree: true } );
		}
	} );
}() );