<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>http://wiki.lilauid.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AEdittools.js</id>
	<title>MediaWiki:Edittools.js - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lilauid.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AEdittools.js"/>
	<link rel="alternate" type="text/html" href="http://wiki.lilauid.com/mediawiki/index.php?title=MediaWiki:Edittools.js&amp;action=history"/>
	<updated>2026-07-01T11:18:39Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://wiki.lilauid.com/mediawiki/index.php?title=MediaWiki:Edittools.js&amp;diff=61&amp;oldid=prev</id>
		<title>Lilauid：​建立內容為「/*! * EditTools support * * Add a selector, change into true buttons, enable for all text input fields * If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar * The special characters to insert are defined at MediaWiki:Edittools. */ // &lt;nowiki&gt; /* global jQuery, mediaWiki */ /* eslint indent:[&quot;error&quot;,&quot;tab&quot;,{&quot;outerIIFEBody&quot;:0}] */ ( function ( $, mw ) { &#039;use strict&#039;;  var oldEdittools, 	$currentFocused, 	$spec, 	$sb, 	$toolbar…」的新頁面</title>
		<link rel="alternate" type="text/html" href="http://wiki.lilauid.com/mediawiki/index.php?title=MediaWiki:Edittools.js&amp;diff=61&amp;oldid=prev"/>
		<updated>2025-03-05T16:08:51Z</updated>

		<summary type="html">&lt;p&gt;建立內容為「&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;! * EditTools support * * Add a selector, change into true buttons, enable for all text input fields * If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar * The special characters to insert are defined at &lt;a href=&quot;/mediawiki/index.php/MediaWiki:Edittools&quot; title=&quot;MediaWiki:Edittools&quot;&gt;MediaWiki:Edittools&lt;/a&gt;.：​&lt;/span&gt; // &amp;lt;nowiki&amp;gt; &lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;global jQuery, mediaWiki：​&lt;/span&gt; &lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;eslint indent:[&amp;quot;error&amp;quot;,&amp;quot;tab&amp;quot;,{&amp;quot;outerIIFEBody&amp;quot;:0}]：​&lt;/span&gt; ( function ( $, mw ) { &amp;#039;use strict&amp;#039;;  var oldEdittools, 	$currentFocused, 	$spec, 	$sb, 	$toolbar…」的新頁面&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*!&lt;br /&gt;
* EditTools support&lt;br /&gt;
*&lt;br /&gt;
* Add a selector, change into true buttons, enable for all text input fields&lt;br /&gt;
* If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar&lt;br /&gt;
* The special characters to insert are defined at [[MediaWiki:Edittools]].&lt;br /&gt;
*/&lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* global jQuery, mediaWiki */&lt;br /&gt;
/* eslint indent:[&amp;quot;error&amp;quot;,&amp;quot;tab&amp;quot;,{&amp;quot;outerIIFEBody&amp;quot;:0}] */&lt;br /&gt;
( function ( $, mw ) {&lt;br /&gt;
&amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
var oldEdittools,&lt;br /&gt;
	$currentFocused,&lt;br /&gt;
	$spec,&lt;br /&gt;
	$sb,&lt;br /&gt;
	$toolbar,&lt;br /&gt;
	EditTools = window.EditTools = {&lt;br /&gt;
&lt;br /&gt;
		insertTags: function ( start, peri, end ) {&lt;br /&gt;
			if ( $currentFocused.length ) {&lt;br /&gt;
				$currentFocused.textSelection(&lt;br /&gt;
					&amp;#039;encapsulateSelection&amp;#039;, {&lt;br /&gt;
						pre: start,&lt;br /&gt;
						peri: peri,&lt;br /&gt;
						post: end&lt;br /&gt;
					}&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		createSelector: function () {&lt;br /&gt;
			var $sel;&lt;br /&gt;
			// Only care if there is more than one&lt;br /&gt;
			if ( $sb.length &amp;lt;= 1 ) { return; }&lt;br /&gt;
&lt;br /&gt;
			$sel = $( &amp;#039;&amp;lt;select&amp;gt;&amp;#039; ).on( &amp;#039;change&amp;#039;, this.chooseCharSubset );&lt;br /&gt;
&lt;br /&gt;
			$sb.each( function ( i ) {&lt;br /&gt;
				var id = $( this ).attr( &amp;#039;id&amp;#039; ).replace( /.([0-9A-F][0-9A-F])/g, &amp;#039;%$1&amp;#039; ).replace( /_/g, &amp;#039; &amp;#039; );&lt;br /&gt;
				$sel.append(&lt;br /&gt;
					$( &amp;#039;&amp;lt;option value=&amp;quot;&amp;#039; + i + &amp;#039;&amp;quot;&amp;gt;&amp;#039; ).text( decodeURIComponent( id ) )&lt;br /&gt;
				);&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			$spec.prepend( $sel );&lt;br /&gt;
			this.chooseCharSubset();&lt;br /&gt;
			// Move old edittools just below&lt;br /&gt;
			$( &amp;#039;#editpage-copywarn&amp;#039; ).parent().before( $spec.parent() );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		chooseCharSubset: function () {&lt;br /&gt;
			var id = $spec.find( &amp;#039;select&amp;#039; ).val(),&lt;br /&gt;
				$wanted = $sb.eq( id );&lt;br /&gt;
&lt;br /&gt;
			$sb.hide();&lt;br /&gt;
			EditTools.makeButtons( $wanted );&lt;br /&gt;
			$wanted.css( &amp;#039;display&amp;#039;, &amp;#039;inline&amp;#039; );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		bindOnClick: function ( $button, self ) {&lt;br /&gt;
		// Copy event&lt;br /&gt;
			var onclick = self.getAttribute( &amp;#039;onclick&amp;#039; ), // TODO: outdated? For FF, IE8, Chrome&lt;br /&gt;
				$self = $( self ),&lt;br /&gt;
				start = $self.data( &amp;#039;mw-charinsert-start&amp;#039; ),&lt;br /&gt;
				end = $self.data( &amp;#039;mw-charinsert-end&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			if ( !$.isFunction( onclick ) ) {&lt;br /&gt;
				if ( start || end ) {&lt;br /&gt;
				// Create new event&lt;br /&gt;
					onclick = function ( e ) {&lt;br /&gt;
						e.preventDefault();&lt;br /&gt;
						EditTools.insertTags( start, &amp;#039;&amp;#039;, end );&lt;br /&gt;
					};&lt;br /&gt;
					// Shorten button text&lt;br /&gt;
					if ( start &amp;amp;&amp;amp; end ) { $button.text( $self.text().replace( end, &amp;#039;&amp;#039; ) ); }&lt;br /&gt;
				} else if ( !onclick &amp;amp;&amp;amp; $.isFunction( $._data ) ) {&lt;br /&gt;
				// Fallback hack for backward compatibility&lt;br /&gt;
					onclick = $._data( self, &amp;#039;events&amp;#039; ).click;&lt;br /&gt;
					if ( $.isArray( onclick ) &amp;amp;&amp;amp; onclick.length ) {&lt;br /&gt;
						onclick = onclick[ 0 ].handler;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			$button.on( &amp;#039;click&amp;#039;, onclick );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeButtons: function ( $wanted ) {&lt;br /&gt;
			var $links = $wanted.find( &amp;#039;a&amp;#039; ),&lt;br /&gt;
				self = this;&lt;br /&gt;
&lt;br /&gt;
			$links.each( function () {&lt;br /&gt;
				var $button = $( &amp;#039;&amp;lt;button type=&amp;quot;button&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
					.text( $( this ).text() );&lt;br /&gt;
&lt;br /&gt;
				self.bindOnClick( $button, this );&lt;br /&gt;
&lt;br /&gt;
				$( this ).replaceWith( $button ).blur();&lt;br /&gt;
			} );&lt;br /&gt;
			$wanted.contents().not( &amp;#039;button&amp;#039; ).remove();&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeToolbarButtons: function () {&lt;br /&gt;
			EditTools.done = 1;&lt;br /&gt;
			var section = [],&lt;br /&gt;
				self = this;&lt;br /&gt;
&lt;br /&gt;
			// Add Edittool section&lt;br /&gt;
			$toolbar.wikiEditor( &amp;#039;addToToolbar&amp;#039;, {&lt;br /&gt;
				sections: {&lt;br /&gt;
					Edittools: {&lt;br /&gt;
						type: &amp;#039;booklet&amp;#039;,&lt;br /&gt;
						label: &amp;#039;Edittools&amp;#039;,&lt;br /&gt;
						pages: {&lt;br /&gt;
							Edittools1: {&lt;br /&gt;
								layout: &amp;#039;characters&amp;#039;,&lt;br /&gt;
								label: &amp;#039;Edittools2&amp;#039;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			$sb.eq( 0 ).find( &amp;#039;a&amp;#039; )&lt;br /&gt;
				.each( function () {&lt;br /&gt;
					var $button = $( &amp;#039;&amp;lt;span&amp;gt;&amp;#039; )&lt;br /&gt;
						.text( $( this ).text() );&lt;br /&gt;
					self.bindOnClick( $button, this );&lt;br /&gt;
					section.push( $button );&lt;br /&gt;
				} );&lt;br /&gt;
			$( &amp;#039;.page-Edittools1 div&amp;#039; )&lt;br /&gt;
				.append( section )&lt;br /&gt;
				.addClass( &amp;#039;com-editbuttons&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
			// Must start after toolbar creation&lt;br /&gt;
			this.createSelector();&lt;br /&gt;
			// $( &amp;#039;.mw-editTools&amp;#039; ).remove(); // The full remove is not implicit and there is more as only the standard buttons&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		enableForAllFields: function () {&lt;br /&gt;
			$currentFocused = $toolbar;&lt;br /&gt;
			// Apply to dynamically created textboxes as well as normal ones&lt;br /&gt;
			$( document ).on( &amp;#039;focus&amp;#039;, &amp;#039;textarea, input:text, .CodeMirror&amp;#039;, function () {&lt;br /&gt;
				// CodeMirror hooks into #wpTextbox1 for textSelection changes&lt;br /&gt;
				$currentFocused = $( this );&lt;br /&gt;
				if ( $currentFocused.hasClass( &amp;#039;CodeMirror&amp;#039; ) ) { $currentFocused = $( &amp;#039;#wpTextbox1&amp;#039; ); }&lt;br /&gt;
			} );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// As elements from ext.wikiEditor are not immediately ready on load.&lt;br /&gt;
		handleToolbarQueue: function () {&lt;br /&gt;
			// FIXME: the current sync load is a bit hackish (double try) [[phab:T30563]]&lt;br /&gt;
			// Try early as possible to put the event&lt;br /&gt;
			$toolbar.on( &amp;#039;wikiEditor-toolbar-doneInitialSections&amp;#039;, function () {&lt;br /&gt;
				if ( !EditTools.done ) { EditTools.makeToolbarButtons(); }&lt;br /&gt;
			} );&lt;br /&gt;
			// Try again if we missed the event.&lt;br /&gt;
			mw.loader.using( &amp;#039;ext.wikiEditor&amp;#039;, function () {&lt;br /&gt;
				if ( !EditTools.done ) { EditTools.makeToolbarButtons(); }&lt;br /&gt;
			} );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		setup: function () {&lt;br /&gt;
			mw.loader.load( &amp;#039;//commons.wikimedia.org/?title=MediaWiki:Edittools.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;#039;, &amp;#039;text/css&amp;#039; );&lt;br /&gt;
			$sb = $spec.find( &amp;#039;p.specialbasic&amp;#039; );&lt;br /&gt;
			// Decide whether to use the toolbar&lt;br /&gt;
			if ( $toolbar &amp;amp;&amp;amp; $toolbar[ 0 ] &amp;amp;&amp;amp; !( window.oldEdittools || oldEdittools ) &amp;amp;&amp;amp; !$( &amp;#039;#wpUploadDescription&amp;#039; ).length ) {&lt;br /&gt;
				this.handleToolbarQueue();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.createSelector();&lt;br /&gt;
			}&lt;br /&gt;
			mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( this.enableForAllFields );&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
$( function () {&lt;br /&gt;
	$spec = $( &amp;#039;#specialchars&amp;#039; );&lt;br /&gt;
	// Don&amp;#039;t do anything if no edittools present.&lt;br /&gt;
	if ( !$spec.length ) { return; }&lt;br /&gt;
	mw.loader.using( &amp;#039;user.options&amp;#039;, function () {&lt;br /&gt;
		// Check user preferences&lt;br /&gt;
		oldEdittools = mw.user.options.get( &amp;#039;gadget-OldEdittools&amp;#039; );&lt;br /&gt;
		if ( ( mw.user.options.get( &amp;#039;usebetatoolbar&amp;#039; ) || mw.loader.getState( &amp;#039;ext.wikiEditor&amp;#039; ) !== &amp;#039;registered&amp;#039; ) &amp;amp;&amp;amp; !oldEdittools ) {&lt;br /&gt;
			$toolbar = $( &amp;#039;#wpTextbox1&amp;#039; );&lt;br /&gt;
			EditTools.setup();&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
} );&lt;br /&gt;
}( jQuery, mediaWiki ) );&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lilauid</name></author>
	</entry>
</feed>