Jump to content

User:SunAfterRain/global.js

From Meta, a Wikimedia project coordination wiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* eslint-disable new-cap, camelcase, no-jquery/no-global-selector */
/* global load, loadjs */

$( function () {
	if ( [ 'zh', 'zh-hant', 'zh-tw', 'zh-hk', 'zh-mo' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
		$( '#pt-mycontris a' ).text( '我的貢獻 (' + mw.config.get( 'wgUserEditCount' ) + ')' );
	} else if ( [ 'zh-hans', 'zh-cn', 'zh-my', 'zh-sg' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
		$( '#pt-mycontris a' ).text( '我的贡献 (' + mw.config.get( 'wgUserEditCount' ) + ')' );
	} else if ( mw.config.get( 'wgUserLanguage' ) === 'qqx' ) {
		$( '#pt-mycontris a' ).text( '(mycontris)-(wgUserEditCount)' );
	} else {
		$( '#pt-mycontris a' ).text( $( '#pt-mycontris a' ).text() + '(' + mw.config.get( 'wgUserEditCount' ) + ')' );
	}
	
	function implWrapper() {
		var args = Array.from( arguments );
		if ( typeof mw.loader.impl === 'function' ) {
			return mw.loader.impl( function () {
				return args;
			} );
		}
		return mw.loader.implement.apply( mw.loader, args );
	}
	
	if ( !mw.loader.getState( 'userscript.SunAfterRain.load' ) ) {
		implWrapper( 'userscript.SunAfterRain.load@', [
			'//meta.wikimedia.org/w/index.php?title=User:SunAfterRain/global.js/load.js&action=raw&ctype=text/javascript'
		] );
	}

	mw.hook( 'userscript.SunAfterRain.load' ).add( function ( Loader ) {
		Loader.globalInstance.push( [
			[
				{
					js: [ 'User:SunAfterRain/js/sectionlink.js' ],
					css: [ 'User:SunAfterRain/js/sectionlink.css' ]
				},
				'//meta.wikimedia.org'
			],
			[ 'User:SunAfterRain/js/Difflink.js', '//meta.wikimedia.org' ],
			[ 'User:SunAfterRain/js/download.js', '//zh.wikipedia.org' ],
			// [ 'User:SunAfterRain/js/importer.js', '//meta.wikimedia.org' ],
			[ 'User:SunAfterRain/js/markrights.js', '//meta.wikimedia.org' ],
			[ 'User:SunAfterRain/js/mw-config-global.js', '//meta.wikimedia.org' ],
			[ 'User:SunAfterRain/js/special-canonical.js', '//meta.wikimedia.org' ],

			[ 'User:SunAfterRain/js/zh-varient.js', 'https://meta.wikimedia.org' ],
			
			[ 'User:SunAfterRain/articleInfo.js', '//zh.wikipedia.org', [], { restrictOnWMFMain: true } ],

			[ 'User:Xiplus/TwinkleGlobal.js', '//meta.wikimedia.org', [], { restrictOnWMFWiki: true } ],
			[ 'User:WhitePhosphorus/js/AutoUndo.js', 'https://meta.wikimedia.org', [], { restrictOnWMFMain: true } ],
			
			[ 'User:BrandonXLF/ShowTemplates.js', '//en.wikipedia.org' ],
			[ 'User:Msz2001/abusefilter-analyzer-primer.js', '//pl.wikipedia.org' ]
		] );
	
		if (
			window.location.origin.endsWith( '.wikimedia.org' )
			|| window.location.origin.endsWith( '.wikimedia.beta.wmflabs.org' )
			|| [ 'mediawikiwiki', 'wikidatawiki', 'testwiki', 'test2wiki', 'testwikidatawiki', 'wikifunctionswiki' ].includes( mw.config.get( 'wgDBname' ) )
		) {
			window.wgUseZhVarientAutoRedirectToVarient = 'zh-tw';
		}
	} );
	
	if ( mw.loader.getState( 'ext.gadget.HanAssist' ) ) {
		mw.loader.register( 'userscript.SunAfterRain.HanAssist', null, [ 'ext.gadget.HanAssist' ] );
		mw.loader.register( 'userscript.SunAfterRain.HanAssist.shim', null );
		mw.loader.using( [ 'ext.gadget.HanAssist' ] ).then( function () {
			implWrapper( 'userscript.SunAfterRain.HanAssist@', {
				main: 'index.js',
				files: {
					'index.js': function ( require, module ) {
						module.exports = require( 'ext.gadget.HanAssist' );
					}
				}
			} );
			if ( mw.loader.getState( 'userscript.SunAfterRain.HanAssist' ) === 'missing' ) {
				mw.loader.state( {
					'userscript.SunAfterRain.HanAssist': 'loaded'
				} );
			}
		
			if ( !( 'wgULS' in window ) ) {
				implWrapper(
					'userscript.SunAfterRain.HanAssist.shim@',
					[ '//meta.wikimedia.org/w/index.php?title=User:SunAfterRain/js/HanAssist.js/shim.js&action=raw&ctype=text/javascript' ]
				);
				if ( mw.loader.getState( 'userscript.SunAfterRain.HanAssist.shim' ) === 'missing' ) {
					mw.loader.state( {
						'userscript.SunAfterRain.HanAssist.shim': 'loaded'
					} );
				}
			} else {
				mw.loader.state( {
					'userscript.SunAfterRain.HanAssist.shim': 'ready'
				} );
			}
		} );
	} else {
		try {
			mw.loader.register( 'userscript.SunAfterRain.HanAssist', null, [] );
			implWrapper( 'userscript.SunAfterRain.HanAssist@', [
				'//meta.wikimedia.org/w/index.php?title=User:SunAfterRain/js/HanAssist.js&action=raw&ctype=text/javascript'
			] );
			mw.loader.register(
				'userscript.SunAfterRain.HanAssist.shim',
				null,
				[ 'userscript.SunAfterRain.HanAssist' ],
				null,
				null,
				'mw.libs.HanAssist.isShimmed'
			);
			implWrapper( 'userscript.SunAfterRain.HanAssist.shim@', {
				main: 'index.js',
				files: {
					'index.js': function ( require, module ) {
						require( 'userscript.SunAfterRain.HanAssist' ).shimUXS();
					}
				}
			} );
		} catch ( error ) {
		}
		mw.loader.using( [ 'userscript.SunAfterRain.HanAssist' ] );
	}

	/*
	SpecialInterlanguageLink = {
		'lang': {
			'm': 'Meta',
			'c': 'Commons'
			'w:zh': '中文'
		},
		'namespace': [-1]
	};
	mw.loader.load('https://zh.wikipedia.org/w/index.php?title=User:Xiplus/js/SpecialInterlanguageLink.js&action=raw&ctype=text/javascript'); */

	if ( $( 'nav#p-lang' ).find( 'li' ).length === 0 ) {
		$( 'nav#p-lang' ).remove();
	}

	/**
	* warn jQuery deprecate with stack
	*/
	mw.log.deprecate( jQuery, 'isFunction', function ( obj ) {
		return typeof obj === 'function';
	}, '', 'jQuery.isFunction' );

	mw.log.deprecate( jQuery, 'trim', function ( text ) {
		return text == null ? '' : ( text + '' ).trim();
	}, '', 'jQuery.trim' );	
	
	mw.loader.using( [ 'mediawiki.api', 'mediawiki.ForeignApi' ], function () {
		// 阻止發出未登入請求
		var OldApi = mw.Api;

		mw.Api = function ( options ) {
			options = options || {};
			options.parameters = options.parameters || {};
			options.parameters.assert = 'user';
			OldApi.call( this, options );
			return this;
		};

		mw.Api.prototype = OldApi.prototype;
		
		window.api = new mw.Api();
	} );

	( function () {
		// fork from [[zh:Special:Diff/70642469/71502073]]
		try {
			var ref = new URL( window.document.referrer, window.location.href ),
				refWikiHost = ref.host.replace( /\.m\./, '.' ),
				loc = new URL( window.location.href ),
				locWikiHost = loc.host.replace( /\.m\./, '.' );
			
			if ( loc.searchParams.has( 'mob' ) && loc.searchParams.get( 'mob' ) !== '0' ) {
				return;
			}
			
			function checkMobDiff() {
				if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'MobileDiff' ) {
					if ( loc.searchParams.has( 'title' ) ) {
						var title = loc.searchParams.get( 'title' ).split( '/' );
						title[ 0 ] = 'Special:Diff';
						loc.searchParams.set( 'title', title.join( '/' ).replace( /^Special:Diff\/(\d+)\.{3}(\d+)$/, 'Special:Diff/$1/$2' ) );
					} else {
						mw.messages.set( 'wgArticlePath', mw.config.get( 'wgArticlePath' ) );
						var path = loc.pathname.replace( mw.msg( 'wgArticlePath', '' ), '' );
						if ( path.match( '/' ) ) {
							loc.pathname = loc.pathname.replace(
								mw.msg( 'wgArticlePath', path.split( '/' ).shift() ),
								mw.msg( 'wgArticlePath', 'Special:Diff' )
							).replace( /\bSpecial:Diff\/(\d+)\.{3}(\d+)$/, 'Special:Diff/$1/$2' );
						} else {
							loc.pathname = mw.msg( 'wgArticlePath', 'Special:Diff' );
						}
					}
				}
			}

			if ( document.referrer.trim() !== '' && refWikiHost !== locWikiHost && window.location.host.match( /\.m\./ ) ) {
				loc.host = locWikiHost;
				if ( /\.wiki[a-z]+\./.test( ref.host ) ) {
					loc.searchParams.set( 'mobileaction', 'toggle_view_desktop' );
				}
				checkMobDiff();
			}

			if ( /\.google\./.test( ref.host ) ) {
				loc.pathname = loc.pathname.replace( /^\/zh(-[^/]+)?\//, '/wiki/' );
			}
		
			if ( mw.config.get( 'skin' ) !== 'minerva' ) {
				checkMobDiff();
			}

			if ( loc.href !== window.location.href ) {
				window.location.replace( loc.href );
			}
		} catch ( e ) {
		}
	}() );
	
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
		$( '.mw-contributions-user-tools > .mw-changeslist-links' )
			.append(
				$( '<span>' )
					.append(
						$( '<a>' )
							.attr( {
								href: mw.util.getUrl( 'Special:Log', {
									page: mw.Title.makeTitle( 2, mw.config.get( 'wgRelevantUserName' ) ).toString()
								} )
							} )
							.text( '使用者日誌' )
					)
			);
	}

	if ( mw.config.get( 'wgRelevantUserName' ) && !mw.config.get( 'wgPageName' ).match( '/' ) ) {
		mw.loader.using( [ 'mediawiki.util' ] ).then( function () {
			new mw.Api().loadMessagesIfMissing( [ 'contributions' ] ).then( function () {
				mw.util.addPortletLink(
					'p-namespaces',
					'/wiki/Special:Contributions/' + mw.config.get( 'wgRelevantUserName' ),
					mw.msg( 'contributions' ),
					'ca-contributions'
				);
			} );
		} );
	}
} );