User:靜雨/js/Gadget-internalLinkHelper-redtipsy.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

( function( $, mw, window ) { $( function() {

	var bindEvent = function( $content ) {
		$( '.ilh-all', $content ).not( '.ilh-blue' ).on( 'internalLinkHelper-close', function( event ) {
			var $this = $( this );
			if ( $this.data( 'internalLinkHelper-showing' ) ) {
				$( this ).removeClass( 'ilh-active' ).find( '.ilh-page a' ).tipsy( 'hide' ).end()
					.data( 'internalLinkHelper-showing', false );
			}
		} ).each( function() {
			var origTitle = $( this ).data( 'orig-title' ),
				$foreignSpan = $( '.ilh-link', this ),
				$linkAnchor = $( '.ilh-page a', this ),
				$langSpan = $( '.ilh-lang', this ),
				langName = $langSpan.text(),
				$that = $( this ).data( 'internalLinkHelper-showing', false );

			if ( !$linkAnchor.length ) {
				return;
			}

			var timeout = null;
			
			var maybeClearTimeout = function() {
				if ( timeout !== null ) {
					clearTimeout( timeout );
				}
			}, autoSetTimeout = function() {
				maybeClearTimeout();
				timeout = setTimeout.apply( null, arguments );
			};
			
			var mouseleave = function() {
				autoSetTimeout( function() {
					$that.trigger( 'internalLinkHelper-close' );
				}, 500 );
			}, mouseenter = function() {
				if ( $that.data( 'internalLinkHelper-showing' ) ) {
					maybeClearTimeout();
				} else {
					$( '.ilh-all', $content ).not( $that ).trigger( 'internalLinkHelper-close' );
					$that.addClass( 'ilh-active' ).data( 'internalLinkHelper-showing', true );
					$linkAnchor.tipsy( 'show' ).tipsy( true ).tip().mouseleave( mouseleave ).mouseenter( mouseenter );
				}
			};
			$linkAnchor.tipsy( {
				className: 'ilh-tipsy',
				gravity: 'nw',
				html: true,
				trigger: 'manual',
				title: function() {
					return '<div>'
						+ wgUVS( '条目“', '條目「' )
						+ $( '<span>' ).text( origTitle ).html()
						+ wgUVS( '”尚未创建,可参考', '」尚未創建,可參考' )
						+ $( '<span>' ).text( langName ).html()
						+ wgUVS( '维基百科的对应页面:', '維基百科的對應頁面:' )
						+ $foreignSpan.html()
						+ '。</div>';
				}
			} )
			.mouseleave( mouseleave ).mouseenter( mouseenter );
		} );
	};

	mw.hook( 'wikipage.content' ).add( bindEvent );
	
	if (window.MutationObserver) {
		var observer = new MutationObserver(function(mutations) {
			mutations.forEach(function(mutation) {
				if (mutation.addedNodes) {
					for (var i=0; i<mutation.addedNodes.length; i++) {
						var el = mutation.addedNodes[i];
						if (el.classList.contains('referencetooltip')) {
							bindEvent(el);
						}
					}
				}
			});
		});

		observer.observe(document.getElementById('mw-content-text'), {
			attributes: true,
			childList: true,
			characterData: true
		});
	}
	
} ); } )( jQuery, mediaWiki, window );