2023年政策修订增补工作正在进行中,欢迎参与!
User:SinonJZH/js/PreviewWithVariant.js
< User:SinonJZH | 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>