MediaWiki:Gadget-PreviewWithVariant.js:修订间差异
来自存档计划,Project Archive by Lakejason0
添加的内容 删除的内容
Lakejason0(留言 | 贡献) |
|||
第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 } ); |
|||
//安排位置 |
|||
} ) |
|||
} |
|||
} ); |
|||
"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( |
|||
$editForm.attr( |
|||
, |
'action', |
||
. |
new mw.Uri( originalAction ) |
||
.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>