MediaWiki:Common.js

Baneq留言 | 贡献2026年6月5日 (五) 14:49的版本

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
$( function () {
	mw.hook( 'wikiEditor.toolbarReady' ).add( function ( $textarea ) {
		function btn( pre, peri, post, label, cls ) {
			return {
				action: { type: 'encapsulate', options: { pre: pre, peri: peri || '', post: post || '' } },
				label: label,
				cssClass: cls || ''
			};
		}
		$textarea.wikiEditor( 'addToToolbar', {
			sections: {
				noblecraft: {
					type: 'booklet',
					label: 'Noblecraft 格式',
					pages: {
						colors: { layout: 'characters', label: '颜色 / 强调', characters: [
							btn('{{红|','文字','}}','红','nc-红'),
							btn('{{绿|','文字','}}','绿','nc-绿'),
							btn('{{蓝|','文字','}}','蓝','nc-蓝'),
							btn('{{橙|','文字','}}','橙','nc-橙'),
							btn('{{高亮|','文字','}}','高亮','nc-高亮'),
							btn('{{提示|','提示内容','}}','提示'),
							btn('{{警告|','警告内容','}}','警告'),
							btn('{{成功|','内容','}}','成功')
						] },
						game: { layout: 'characters', label: '游戏元素', characters: [
							btn('{{指令|','/命令','}}','指令'),
							btn('{{命令|语法=/命令|说明=|权限=|示例=}}','','','命令框'),
							btn('{{键|','F3','}}','键'),
							btn('{{坐标|x=','0','|y=0|z=0}}','坐标'),
							btn('{{稀有度|','史诗','}}','稀有度'),
							btn('{{评分星|','4','}}','评分星'),
							btn('{{状态|','可用','}}','状态'),
							btn('{{版本|','1.0','}}','版本')
						] },
						links: { layout: 'characters', label: '链接 / 剧情', characters: [
							btn('{{NPC|','角色名','}}','NPC'),
							btn('{{地点|','地点名','}}','地点'),
							btn('{{物品|','物品名','}}','物品'),
							btn('{{剧透|','剧透内容','}}','剧透'),
							btn('{{对话|角色=角色名|','台词','}}','对话'),
							btn('{{视频|标题=|链接=|平台=}}','','','视频')
						] },
						blocks: { layout: 'characters', label: '区块 / 标记', characters: [
                            btn('{{玩家创作|作者=}}','','','玩家创作'),
							btn('{{剧透警告}}','','','剧透警告'),
							btn('{{框|颜色=蓝|','内容','}}','框'),
							btn('{{框|颜色=蓝|标题=标题|','内容','}}','框·标题'),
							btn('{{折叠|标题=标题|','内容','}}','折叠'),
							btn('{{公告|','公告内容','}}','公告'),
							btn('{{主条目|','页面名','}}','主条目'),
							btn('{{参见|','页面名','}}','参见'),
							btn('{{更新日志|版本=|日期=|内容=}}','','','更新日志')
						] },
						maintain: { layout: 'characters', label: '维护标记', characters: [
							btn('{{待补充}}','','','待补充'),
							btn('{{待更新}}','','','待更新'),
							btn('{{草稿}}','','','草稿'),
							btn('{{精选}}','','','精选'),
							btn('{{待删除|','原因','}}','待删除'),
							btn('{{重复|','目标页面','}}','重复'),
							btn('{{消歧义|','当前主题','|其他条目}}','消歧义')
						] }
					}
				}
			}
		} );

		// ===== 🎨 取色按钮(追加,不影响上面的 Noblecraft 格式 booklet)=====
		var NC_PALETTE = [
			'#c0392b','#d35400','#e67e22','#f1c40f','#27ae60','#16a085','#1a6b7d','#0f4c5c',
			'#2c6fb3','#2980b9','#8e44ad','#9b59b6','#34495e','#7f8c8d','#000000','#ffffff'
		];
		var $ncPanel = null;
		function ncApplyColor( hex ) {
			$textarea.textSelection( 'encapsulateSelection',
				{ pre: '{{色|' + hex + '|', peri: '文字', post: '}}', selectPeri: true } );
			ncClosePanel();
		}
		function ncClosePanel() {
			if ( $ncPanel ) { $ncPanel.remove(); $ncPanel = null; }
			$( document ).off( 'click.nccolor' );
		}
		function ncTogglePanel() {
			if ( $ncPanel ) { ncClosePanel(); return; }
			$ncPanel = $( '<div class="nc-colorpop">' );
			var $grid = $( '<div class="nc-colorpop-grid">' ).appendTo( $ncPanel );
			NC_PALETTE.forEach( function ( c ) {
				$( '<button type="button" class="nc-swatch">' ).css( 'background', c )
					.attr( 'title', c ).on( 'click', function () { ncApplyColor( c ); } ).appendTo( $grid );
			} );
			var $row = $( '<div class="nc-colorpop-row">' ).appendTo( $ncPanel );
			$( '<label>自定义</label>' ).appendTo( $row );
			var $native = $( '<input type="color" value="#1a6b7d">' ).appendTo( $row );
			$( '<button type="button" class="nc-colorpop-ok">应用</button>' )
				.on( 'click', function () { ncApplyColor( $native.val() ); } ).appendTo( $row );
			$ncPanel.appendTo( document.body );
			var $btn = $( '.tool[rel="nccolorpicker"]' );
			var off = $btn.length ? $btn.offset() : { top: 120, left: 120 };
			$ncPanel.css( { top: ( off.top + 30 ) + 'px', left: off.left + 'px' } );
			setTimeout( function () {
				$( document ).on( 'click.nccolor', function ( e ) {
					if ( !$( e.target ).closest( '.nc-colorpop, .tool[rel="nccolorpicker"]' ).length ) ncClosePanel();
				} );
			}, 0 );
		}
		$textarea.wikiEditor( 'addToToolbar', {
			section: 'main',
			group: 'format',
			tools: {
				nccolorpicker: {
					label: '🎨 颜色',
					type: 'button',
					action: { type: 'callback', execute: function () { ncTogglePanel(); } }
				}
			}
		} );
	} );
} );