<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A%3AGadget-Extra-Edittools3.js</id>
	<title>ميدياويكي:Gadget-Extra-Edittools3.js - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A%3AGadget-Extra-Edittools3.js"/>
	<link rel="alternate" type="text/html" href="https://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-Extra-Edittools3.js&amp;action=history"/>
	<updated>2026-06-21T22:08:55Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-Extra-Edittools3.js&amp;diff=8610&amp;oldid=prev</id>
		<title>Gerges: مراجعة واحدة</title>
		<link rel="alternate" type="text/html" href="https://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-Extra-Edittools3.js&amp;diff=8610&amp;oldid=prev"/>
		<updated>2021-03-19T00:58:00Z</updated>

		<summary type="html">&lt;p&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;
'use strict';&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;
					'encapsulateSelection', {&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;lt;select&amp;gt;' ).on( 'change', this.chooseCharSubset );&lt;br /&gt;
&lt;br /&gt;
			$sb.each( function ( i ) {&lt;br /&gt;
				var id = $( this ).attr( 'id' ).replace( /.([0-9A-F][0-9A-F])/g, '%$1' ).replace( /_/g, ' ' );&lt;br /&gt;
				$sel.append(&lt;br /&gt;
					$( '&amp;lt;option value=&amp;quot;' + i + '&amp;quot;&amp;gt;' ).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;
			$( '#editpage-copywarn' ).parent().before( $spec.parent() );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		chooseCharSubset: function () {&lt;br /&gt;
			var id = $spec.find( 'select' ).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( 'display', 'inline' );&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( 'onclick' ), // TODO: outdated? For FF, IE8, Chrome&lt;br /&gt;
				$self = $( self ),&lt;br /&gt;
				start = $self.data( 'mw-charinsert-start' ),&lt;br /&gt;
				end = $self.data( 'mw-charinsert-end' );&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, '', 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, '' ) ); }&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, 'events' ).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( 'click', onclick );&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		makeButtons: function ( $wanted ) {&lt;br /&gt;
			var $links = $wanted.find( 'a' ),&lt;br /&gt;
				self = this;&lt;br /&gt;
&lt;br /&gt;
			$links.each( function () {&lt;br /&gt;
				var $button = $( '&amp;lt;button type=&amp;quot;button&amp;quot;&amp;gt;' )&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( 'button' ).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( 'addToToolbar', {&lt;br /&gt;
				sections: {&lt;br /&gt;
					Edittools: {&lt;br /&gt;
						type: 'booklet',&lt;br /&gt;
						label: 'أدوات',&lt;br /&gt;
						pages: {&lt;br /&gt;
							Edittools1: {&lt;br /&gt;
								layout: 'characters',&lt;br /&gt;
								label: 'Edittools2'&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( 'a' )&lt;br /&gt;
				.each( function () {&lt;br /&gt;
					var $button = $( '&amp;lt;span&amp;gt;' )&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;
			$( '.page-Edittools1 div' )&lt;br /&gt;
				.append( section )&lt;br /&gt;
				.addClass( 'com-editbuttons' );&lt;br /&gt;
&lt;br /&gt;
			// Must start after toolbar creation&lt;br /&gt;
			this.createSelector();&lt;br /&gt;
			// $( '.mw-editTools' ).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( 'focus', 'textarea, input:text, .CodeMirror', function () {&lt;br /&gt;
				// CodeMirror hooks into #wpTextbox1 for textSelection changes&lt;br /&gt;
				$currentFocused = $( this );&lt;br /&gt;
				if ( $currentFocused.hasClass( 'CodeMirror' ) ) { $currentFocused = $( '#wpTextbox1' ); }&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( 'wikiEditor-toolbar-doneInitialSections', 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( 'ext.wikiEditor', 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( '//ar.wikipedia.org/?title=MediaWiki:Edittools.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
			$sb = $spec.find( 'p.specialbasic' );&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; !$( '#wpUploadDescription' ).length ) {&lt;br /&gt;
				this.handleToolbarQueue();&lt;br /&gt;
			} else {&lt;br /&gt;
				this.createSelector();&lt;br /&gt;
			}&lt;br /&gt;
			mw.hook( 'wikipage.content' ).add( this.enableForAllFields );&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
$( function () {&lt;br /&gt;
	$spec = $( '#specialchars' );&lt;br /&gt;
	// Don't do anything if no edittools present.&lt;br /&gt;
	if ( !$spec.length ) { return; }&lt;br /&gt;
	mw.loader.using( 'user.options', function () {&lt;br /&gt;
		// Check user preferences&lt;br /&gt;
		oldEdittools = mw.user.options.get( 'gadget-OldEdittools' );&lt;br /&gt;
		if ( ( mw.user.options.get( 'usebetatoolbar' ) || mw.loader.getState( 'ext.wikiEditor' ) !== 'registered' ) &amp;amp;&amp;amp; !oldEdittools ) {&lt;br /&gt;
			$toolbar = $( '#wpTextbox1' );&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>Gerges</name></author>
	</entry>
</feed>