跳转到内容

MediaWiki:Gadget-PreviewWithVariant.js:修订间差异

添加的内容 删除的内容
Lakejason0
Lakejason0留言 | 贡献 (建立内容为“// <nowiki> /* 本工具會在「顯示預覽」按鈕增加選單,選單裏有各種地區字詞轉換的語言 當按下「顯示預覽」後,便會以…”的新页面)
 
第1行: 第1行:
/**
* @file Add a "Preview with variant" option to the edit form.
* @author [[zh:User:Diskdance]]
* @author [[zh:User:Lt2818]]
* @license MIT
*/
// <nowiki>
// <nowiki>
( function () {
/*
var initialized = false;
本工具會在「顯示預覽」按鈕增加選單,選單裏有各種地區字詞轉換的語言
mw.hook( 'wikipage.editform' ).add( function ( $editForm ) {
當按下「顯示預覽」後,便會以選單中所選的地區字詞來預覽
if ( initialized ) {
這可以毋須在保存後再切換用字模式才能看到效果,直接用預覽便可檢視各種用字模式,從而減少bug的保存
return;
*/
}


var $templateSandboxPreview = $editForm.find( 'input[name="wpTemplateSandboxPreview"]' );
$(function() {
// It is possible that a user want to preview a page with a non-wikitext module
//偵測「顯示預覽」按鈕
// Do not return in this case
$('#wpPreview, input[name=wpTemplateSandboxPreview]').each( function(){
if (
var $this=$(this);
mw.config.get( 'wgPageContentModel' ) !== 'wikitext' &&
!$templateSandboxPreview.length
//建立菜單
) {
var $listVariant=this.$listVariant=$('<select />')
return;
.attr("name", ("listVariant_"+$this.attr("name")) || ("listVariant_"+$this.attr("id")) )
}
.attr("id" , ("listVariant_"+$this.attr("id")) || ("listVariant_"+$this.attr("name")) )

;
var $layout = $editForm.find( '.editCheckboxes .oo-ui-horizontalLayout' );
if ( !$layout.length ) {
//建立菜單選項
return;
(function addVarOpt(text, variant){
}
$("<option />")
initialized = true;
.text(text)

.each( function(){
var VARIANTS = [
this.selected=this.defaultSelected=(mw.config.get('wgUserVariant')==(this.value=variant));
{ data: 'zh', label: wgULS( '不转换', '不轉換' ) },
})
{ data: 'zh-hans', label: '简体' },
.appendTo($listVariant)
{ data: 'zh-hant', label: '繁體' },
;
{ data: 'zh-cn', label: '大陆简体' },
{ data: 'zh-hk', label: '香港繁體' },
return addVarOpt;
{ data: 'zh-mo', label: '澳門繁體' },
})
{ data: 'zh-my', label: '大马简体' },
(wgULS("不转换","不轉換"), "zh")
{ data: 'zh-sg', label: '新加坡简体' },
("简体", "zh-hans")
{ data: 'zh-tw', label: '臺灣正體' }
("繁體", "zh-hant")
];
("大陆简体", "zh-cn")
var uriVariant = new mw.Uri().query.variant;
("香港繁體", "zh-hk")
var checkbox = new OO.ui.CheckboxInputWidget( {
("澳門繁體", "zh-mo")
selected: uriVariant
("马来西亚简体", "zh-my")
} );
("新加坡简体", "zh-sg")
var dropdown = new OO.ui.DropdownWidget( {
("臺灣正體", "zh-tw")
$overlay: true,
;
disabled: !checkbox.isSelected(),
menu: {
//为了保障OOUI下button所包裹其span的功能,将button与其包裹的span作为整体去调整
items: VARIANTS.map( function ( item ) {
var $insertBlock=$this.parent("span");
return new OO.ui.MenuOptionWidget( { data: item.data, label: item.label } );
//安排位置
$('<span />')
} )
.css({
}
} );
"border" : "1px dashed grey"
dropdown.getMenu().selectItemByData( mw.config.get( 'wgUserVariant' ) || uriVariant || mw.user.options.get( 'variant' ) );
,"white-space" : "nowrap"
checkbox.on( 'change', function ( selected ) {
,"padding" : "10px"
dropdown.setDisabled( !selected );
})
} );
.text("以")

.append($listVariant)
function getSelectedVariant() {
.insertAfter($insertBlock)
if ( !checkbox.isSelected() ) {
.append($insertBlock)
;
return null;
}
var selectedItem = dropdown.getMenu().findSelectedItem();
//修改預覽按鈕單擊動作
return selectedItem ? selectedItem.getData() : null;
$this.click( function(){
}
//被按下時在表單傳送字串添加variant參數

var listVariantValue=this.$listVariant.find("option:selected").get(0).value;
function manipulateActionUrl() {
var selectedVariant = getSelectedVariant(),
mw.config.set('wgUserLanguage', listVariantValue);
originalAction = $editForm.attr( 'action' );
var $form=$this.parents("form");
if ( selectedVariant && originalAction ) {
$form.attr(
"action"
$editForm.attr(
,$form
'action',
.attr("action")
new mw.Uri( originalAction )
.replace(/\&variant\=[^\&\?\#]*($|\&)/g, "$1")
.extend( { variant: selectedVariant } )
.getRelativePath()
.replace(/\?variant\=[^\&\?\#]*(?:$|\&)/, "?")
.replace(/\?/,"?variant="+listVariantValue+"&")
.replace(/\&$/, "")
);
);
});
}
}

});
function manipulateVariantConfig() {
});
mw.config.set( 'wgUserVariant', getSelectedVariant() || mw.user.options.get( 'variant' ) );
}

$editForm.find( '#wpPreview' ).on(
'click',
!mw.user.options.get( 'uselivepreview' ) ? manipulateActionUrl : manipulateVariantConfig
);
$templateSandboxPreview.on( 'click', manipulateActionUrl );

var checkboxField = new OO.ui.FieldLayout( checkbox, {
align: 'inline',
label: wgULS( '预览字词转换', '預覽字詞轉換' )
} );
var dropdownField = new OO.ui.FieldLayout( dropdown, {
align: 'top',
label: wgULS( '使用该语言变体显示预览:', '使用該語言變體顯示預覽:' ),
invisibleLabel: true
} );
$layout.append( checkboxField.$element, dropdownField.$element );
} );


// Register 2017 wikitext editor version to VE
mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init' ).then( function () {
mw.libs.ve.addPlugin( 'ext.gadget.PreviewWithVariant2017' );
} );
}() );
// </nowiki>
// </nowiki>

2022年6月22日 (三) 07:18的版本

/**
 * @file Add a "Preview with variant" option to the edit form.
 * @author [[zh:User:Diskdance]]
 * @author [[zh:User:Lt2818]]
 * @license MIT
 */
// <nowiki>
( function () {
	var initialized = false;
	mw.hook( 'wikipage.editform' ).add( function ( $editForm ) {
		if ( initialized ) {
			return;
		}

		var $templateSandboxPreview = $editForm.find( 'input[name="wpTemplateSandboxPreview"]' );
		// It is possible that a user want to preview a page with a non-wikitext module
		// Do not return in this case
		if (
			mw.config.get( 'wgPageContentModel' ) !== 'wikitext' &&
			!$templateSandboxPreview.length
		) {
			return;
		}

		var $layout = $editForm.find( '.editCheckboxes .oo-ui-horizontalLayout' );
		if ( !$layout.length ) {
			return;
		}
		initialized = true;

		var VARIANTS = [
			{ data: 'zh', label: wgULS( '不转换', '不轉換' ) },
			{ data: 'zh-hans', label: '简体' },
			{ data: 'zh-hant', label: '繁體' },
			{ data: 'zh-cn', label: '大陆简体' },
			{ data: 'zh-hk', label: '香港繁體' },
			{ data: 'zh-mo', label: '澳門繁體' },
			{ data: 'zh-my', label: '大马简体' },
			{ data: 'zh-sg', label: '新加坡简体' },
			{ data: 'zh-tw', label: '臺灣正體' }
		];
		var uriVariant = new mw.Uri().query.variant;
		var checkbox = new OO.ui.CheckboxInputWidget( {
			selected: uriVariant
		} );
		var dropdown = new OO.ui.DropdownWidget( {
			$overlay: true,
			disabled: !checkbox.isSelected(),
			menu: {
				items: VARIANTS.map( function ( item ) {
					return new OO.ui.MenuOptionWidget( { data: item.data, label: item.label } );
				} )
			}
		} );
		dropdown.getMenu().selectItemByData( mw.config.get( 'wgUserVariant' ) || uriVariant || mw.user.options.get( 'variant' ) );
		checkbox.on( 'change', function ( selected ) {
			dropdown.setDisabled( !selected );
		} );

		function getSelectedVariant() {
			if ( !checkbox.isSelected() ) {
				return null;
			}
			var selectedItem = dropdown.getMenu().findSelectedItem();
			return selectedItem ? selectedItem.getData() : null;
		}

		function manipulateActionUrl() {
			var selectedVariant = getSelectedVariant(),
				originalAction = $editForm.attr( 'action' );
			if ( selectedVariant && originalAction ) {
				$editForm.attr(
					'action',
					new mw.Uri( originalAction )
						.extend( { variant: selectedVariant } )
						.getRelativePath()
				);
			}
		}

		function manipulateVariantConfig() {
			mw.config.set( 'wgUserVariant', getSelectedVariant() || mw.user.options.get( 'variant' ) );
		}

		$editForm.find( '#wpPreview' ).on(
			'click',
			!mw.user.options.get( 'uselivepreview' ) ? manipulateActionUrl : manipulateVariantConfig
		);
		$templateSandboxPreview.on( 'click', manipulateActionUrl );

		var checkboxField = new OO.ui.FieldLayout( checkbox, {
			align: 'inline',
			label: wgULS( '预览字词转换', '預覽字詞轉換' )
		} );
		var dropdownField = new OO.ui.FieldLayout( dropdown, {
			align: 'top',
			label: wgULS( '使用该语言变体显示预览:', '使用該語言變體顯示預覽:' ),
			invisibleLabel: true
		} );
		$layout.append( checkboxField.$element, dropdownField.$element );
	} );

	// Register 2017 wikitext editor version to VE
	mw.loader.using( 'ext.visualEditor.desktopArticleTarget.init' ).then( function () {
		mw.libs.ve.addPlugin( 'ext.gadget.PreviewWithVariant2017' );
	} );
}() );
// </nowiki>
Cookie帮助我们提供我们的服务。通过使用我们的服务,您同意我们使用cookie。