2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:SinonJZH/js/PreviewWithVariant.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/User:SinonJZH/js/PreviewWithVariant.js?_=1}-
// @author Tranve
// @license MIT
// <nowiki>

( function () {
	if (
		!mw.config.get( 'wgAction' ).match( /^(edit|submit)$/ ) ||
		mw.config.get( 'wgPageContentModel' ) !== 'wikitext'
	) {
		return;
	}

	mw.messages.set( {
		'pwv-previewwith': wgULS( '预览字词转换', '預覽字詞轉換' ),
		'pwv-dropdown': wgULS( '使用该语言变体显示预览:', '使用該語言變體顯示預覽:' ),
		'pwv-zh': wgULS( '不转换', '不轉換' ),
		'pwv-zh-hans': '简体',
		'pwv-zh-hant': '繁體',
		'pwv-zh-cn': '大陆简体',
		'pwv-zh-hk': '香港繁體',
		'pwv-zh-tw': '臺灣繁體'
	} );

	var DATA = [
		{ var: 'zh', msg: 'pwv-zh' },
		{ var: 'zh-hans', msg: 'pwv-zh-hans' },
		{ var: 'zh-hant', msg: 'pwv-zh-hant' },
		{ var: 'zh-cn', msg: 'pwv-zh-cn' },
		{ var: 'zh-hk', msg: 'pwv-zh-hk' },
		{ var: 'zh-tw', msg: 'pwv-zh-tw' }
	];
	var OLD_VARIANT = mw.config.get( 'wgUserVariant' );

	function createMenus() {
		return DATA.map( function ( item ) {
			return new OO.ui.MenuOptionWidget( {
				data: item.var,
				label: mw.msg( item.msg ) /* eslint-disable-line mediawiki/msg-doc */
			} );
		} );
	}

	function applyVariant( $form, variant ) {
		$form.attr(
			'action',
			new mw.Uri( $form.attr( 'action' ) )
				.extend( { variant: variant } )
				.getRelativePath()
		);
	}

	function getCheckboxState() {
		return Object.hasOwnProperty.call( new mw.Uri().query, 'variant' );
	}

	function init() {
		var $layout, $editForm, checkbox, checkboxField, dropdown, dropdownField;

		$layout = $( '.editCheckboxes .oo-ui-horizontalLayout' );
		if ( !$layout.length ) {
			return;
		}

		$editForm = $( '#editform' );
		checkbox = new OO.ui.CheckboxInputWidget( {
			selected: getCheckboxState()
		} );
		checkboxField = new OO.ui.FieldLayout( checkbox, {
			align: 'inline',
			label: mw.msg( 'pwv-previewwith' )
		} );
		dropdown = new OO.ui.DropdownWidget( {
			$overlay: true,
			disabled: !checkbox.isSelected(),
			menu: {
				items: createMenus()
			}
		} );
		dropdownField = new OO.ui.FieldLayout( dropdown, {
			align: 'top',
			label: mw.msg( 'pwv-dropdown' ),
			invisibleLabel: true
		} );

		dropdown.getMenu().selectItemByData( mw.config.get( 'wgUserVariant' ) );
		checkbox.on( 'change', function ( selected ) {
			dropdown.setDisabled( !selected );
		} );
		$( '#wpPreview, input[name=wpTemplateSandboxPreview]' ).on( 'click.pwv', function () {
			if ( checkbox.isSelected() ) {
				applyVariant( $editForm, dropdown.getMenu().findSelectedItem().getData() );
			}
		}
		);

		if ( mw.user.options.get( 'uselivepreview' ) ) {
			$( '#wpPreview' ).off( 'click.pwv' ).on( 'click.pwv', function () {
				var variant = dropdown.getMenu().findSelectedItem().getData();
				// FIXME: wgUserLanguage should be changed to wgUserVariant
				// After T284625 is resolved
				mw.config.set( 'wgUserLanguage', checkbox.isSelected() ? variant : OLD_VARIANT );
			} );
		}

		$layout.append( checkboxField.$element, dropdownField.$element );
	}

	$( init );
}() );

mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init' ).then(function () {
	mw.libs.ve.addPlugin( 'ext.gadget.PreviewWithVariant2017' );
} );
// </nowiki>