<?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-shiftrefs.js</id>
	<title>ميدياويكي:Gadget-shiftrefs.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-shiftrefs.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-shiftrefs.js&amp;action=history"/>
	<updated>2026-04-11T06:32:37Z</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-shiftrefs.js&amp;diff=8476&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-shiftrefs.js&amp;diff=8476&amp;oldid=prev"/>
		<updated>2021-03-19T00:41:24Z</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;
	/*&lt;br /&gt;
	// Temporary copy from https://ru.wikipedia.org/wiki/Участник:Ignatus/shiftrefs.js&lt;br /&gt;
	// Authors: https://ru.wikipedia.org/wiki/Участник:Ignatus/shiftrefs.js?action=history&lt;br /&gt;
	function lebedevrefs()&lt;br /&gt;
	{&lt;br /&gt;
		var diglasttext;&lt;br /&gt;
		var getsimpletext;&lt;br /&gt;
		diglasttext = function (n)&lt;br /&gt;
		{&lt;br /&gt;
			return n.lastChild ? diglasttext(n.lastChild) : n&lt;br /&gt;
		};&lt;br /&gt;
		getsimpletext = function (n)&lt;br /&gt;
		{&lt;br /&gt;
			return n.innerHTML.replace(/&amp;lt;(?:&amp;quot;(?:\\\\|\\&amp;quot;|\\[^&amp;quot;]|[^\\&amp;quot;])*&amp;quot;|'(?:\\\\|\\'|\\[^']|[^\\'])*'|[^&amp;quot;'&amp;gt;])+&amp;gt;/ig, ''); //'&lt;br /&gt;
		}; //innerText работает не везде&lt;br /&gt;
		var zone = document.getElementById('wikiPreview') || document.getElementById('bodyContent') ||&lt;br /&gt;
			document.getElementById('mw_contentholder') || document.getElementById('article') || document.getElementsByClassName(&amp;quot;wikEdFrameBodySyntax&amp;quot;)[0];&lt;br /&gt;
&lt;br /&gt;
		var alles = Array();&lt;br /&gt;
		{&lt;br /&gt;
			var j = zone.getElementsByTagName('*');&lt;br /&gt;
			for (var i = 0; i &amp;lt; j.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				alles[i] = j[i]&lt;br /&gt;
			};&lt;br /&gt;
		};&lt;br /&gt;
		var getdots = /^([\s\S]*?)([.,…،؛]*)$/;&lt;br /&gt;
		var i = 0;&lt;br /&gt;
		var f = function ()&lt;br /&gt;
		{&lt;br /&gt;
			if (i &amp;lt; alles.length)&lt;br /&gt;
			{&lt;br /&gt;
				var ch = alles[i].childNodes;&lt;br /&gt;
				// Ищем последовательности элементов класса reference&lt;br /&gt;
				// а также рассматриваем ноды до и после них&lt;br /&gt;
				for (var j = 0; j &amp;lt; ch.length; j++)&lt;br /&gt;
				{&lt;br /&gt;
					var l = 0;&lt;br /&gt;
					while (j + l &amp;lt; ch.length // &amp;amp;&amp;amp;&lt;br /&gt;
						&amp;amp;&amp;amp;&lt;br /&gt;
						(ch[j + l].nodeType == 1) // &amp;amp;&amp;amp; // элемент&lt;br /&gt;
						&amp;amp;&amp;amp;&lt;br /&gt;
						/(^|\s)reference(\s|$)/i.test(ch[j + l].className)&lt;br /&gt;
					)&lt;br /&gt;
					{&lt;br /&gt;
						l++&lt;br /&gt;
					};&lt;br /&gt;
					if (l)&lt;br /&gt;
					{ //есть группа&lt;br /&gt;
						var grp = document.createElement('span');&lt;br /&gt;
						for (var k = 0; k &amp;lt; l; k++)&lt;br /&gt;
						{&lt;br /&gt;
							grp.appendChild(ch[j]);&lt;br /&gt;
							//alles[i].removeChild(ch[j]);//автоматом&lt;br /&gt;
						};&lt;br /&gt;
						if (j &amp;lt; ch.length)&lt;br /&gt;
						{&lt;br /&gt;
							alles[i].insertBefore(grp, ch[j])&lt;br /&gt;
						}&lt;br /&gt;
						else&lt;br /&gt;
						{&lt;br /&gt;
							alles[i].appendChild(grp)&lt;br /&gt;
						};&lt;br /&gt;
						grp.style.whiteSpace = 'nowrap';&lt;br /&gt;
						var ppw = 0.;&lt;br /&gt;
						if (j)&lt;br /&gt;
						{&lt;br /&gt;
							if (ch[j - 1].nodeType == 3)&lt;br /&gt;
							{ // текст&lt;br /&gt;
								var a = /^([\S\s]*\s)?(\S*?)([،؛.,…]*)?$/.exec(ch[j - 1].nodeValue);&lt;br /&gt;
								ch[j - 1].nodeValue = a[1] || '';&lt;br /&gt;
								var b = document.createElement('span');&lt;br /&gt;
								var t = document.createTextNode(a[3] || a[2]);&lt;br /&gt;
								b.appendChild(t);&lt;br /&gt;
								grp.insertBefore(b, grp.firstChild);&lt;br /&gt;
								if (a[3])&lt;br /&gt;
								{&lt;br /&gt;
									if (mw.config.get('wgPageContentLanguage') == 'ar')&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginLeft = '-' + b.offsetWidth + 'px';&lt;br /&gt;
									}&lt;br /&gt;
									else&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginRight = '-' + b.offsetWidth + 'px';&lt;br /&gt;
&lt;br /&gt;
									}&lt;br /&gt;
									t.nodeValue = a[2] + t.nodeValue;&lt;br /&gt;
								};&lt;br /&gt;
								ppw = b.offsetWidth;&lt;br /&gt;
							}&lt;br /&gt;
							else&lt;br /&gt;
							{ // если предыдущий узел - элемент&lt;br /&gt;
								var lt = diglasttext(ch[j - 1]);&lt;br /&gt;
								var a = getdots.exec(lt.nodeValue);&lt;br /&gt;
								if (a[2])&lt;br /&gt;
								{ //финишные точки выделяем&lt;br /&gt;
									lt.nodeValue = a[1];&lt;br /&gt;
									var b = document.createElement('span');&lt;br /&gt;
									b.appendChild(document.createTextNode(a[2]));&lt;br /&gt;
									lt.parentNode.appendChild(b);&lt;br /&gt;
									ppw = b.offsetWidth;&lt;br /&gt;
									if (mw.config.get('wgPageContentLanguage') == 'ar')&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginLeft = '-' + ppw + 'px';&lt;br /&gt;
									}&lt;br /&gt;
									else&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginRight = '-' + ppw + 'px';&lt;br /&gt;
&lt;br /&gt;
									}&lt;br /&gt;
								};&lt;br /&gt;
								if (/nowrap|pre$/.test(ch[j - 1].style.whiteSpace) || !/\s/.test(getsimpletext(ch[j - 1])))&lt;br /&gt;
								{&lt;br /&gt;
									//если его можно втащить в неразрывный текст, делаем это&lt;br /&gt;
									grp.insertBefore(ch[j - 1], grp.firstChild);&lt;br /&gt;
									ppw += grp.firstChild.offsetWidth;&lt;br /&gt;
								}&lt;br /&gt;
							}; //else  &lt;br /&gt;
						}; //if ( j )&lt;br /&gt;
						if (grp.nextSibling)&lt;br /&gt;
						{ //Смотрим дальше, если текст, отрезаем начальную точку&lt;br /&gt;
							if (grp.nextSibling.nodeType == 3)&lt;br /&gt;
							{&lt;br /&gt;
								var a = /^([.،؛,…]*)([\s\S]*?)$/.exec(grp.nextSibling.nodeValue);&lt;br /&gt;
								if (a[1])&lt;br /&gt;
								{&lt;br /&gt;
									grp.nextSibling.nodeValue = a[2];&lt;br /&gt;
									var b = document.createElement('span');&lt;br /&gt;
									b.appendChild(document.createTextNode(a[1]));&lt;br /&gt;
									grpw = grp.offsetWidth;&lt;br /&gt;
									grp.appendChild(b);&lt;br /&gt;
									if (mw.config.get('wgPageContentLanguage') == 'ar')&lt;br /&gt;
									{&lt;br /&gt;
										b.previousSibling.style.marginLeft = (ppw - grpw) + 'px';&lt;br /&gt;
									}&lt;br /&gt;
									else&lt;br /&gt;
									{&lt;br /&gt;
										b.previousSibling.style.marginRight = (ppw - grpw) + 'px';&lt;br /&gt;
&lt;br /&gt;
									}&lt;br /&gt;
									b.previousSibling.style.position = 'relative';&lt;br /&gt;
									if (mw.config.get('wgPageContentLanguage') == 'ar')&lt;br /&gt;
									{&lt;br /&gt;
										b.previousSibling.style.right = '2px';&lt;br /&gt;
									}&lt;br /&gt;
									else&lt;br /&gt;
									{&lt;br /&gt;
										b.previousSibling.style.left = '2px';&lt;br /&gt;
&lt;br /&gt;
									}&lt;br /&gt;
									b.previousSibling.style.borderBottom = 'red 2px dotted';&lt;br /&gt;
									if (mw.config.get('wgPageContentLanguage') == 'ar')&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginLeft = (grpw - ppw - b.offsetWidth) + 'px';&lt;br /&gt;
									}&lt;br /&gt;
									else&lt;br /&gt;
									{&lt;br /&gt;
										b.style.marginRight = (grpw - ppw - b.offsetWidth) + 'px';&lt;br /&gt;
&lt;br /&gt;
									}&lt;br /&gt;
								} //if(a[1])&lt;br /&gt;
							} //if( grp.nextSibling.nodeType==3 )&lt;br /&gt;
						} //if(grp.nextSibling)&lt;br /&gt;
					} //if(l)&lt;br /&gt;
				}; //for(ch)&lt;br /&gt;
				i++;&lt;br /&gt;
				window.setTimeout(f, 0); //обрабатываем действия пользователя, затем идём дальше&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{ //(i&amp;gt;=alles.length)&lt;br /&gt;
				f = null; //помогаем мусорнице&lt;br /&gt;
			}; //if(i&amp;lt;alles.length)&lt;br /&gt;
		}; //f&lt;br /&gt;
		if (alles.length)&lt;br /&gt;
		{&lt;br /&gt;
			f()&lt;br /&gt;
		}; //запускаем выполнение&lt;br /&gt;
	};&lt;br /&gt;
	if (mw.config.get('wgNamespaceNumber') &amp;gt;= 0 &amp;amp;&amp;amp; mw.config.get('wgUserName')) $(lebedevrefs);&lt;br /&gt;
	log('loaded shiftrefs');&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//زر صندوق التحرير&lt;br /&gt;
&lt;br /&gt;
//importScript( 'User:Erutuon/scripts/footnoteCleanup.js' ); // Backlink: [[User:Erutuon/scripts/footnoteCleanup.js]] // Moves refs and citation needed tags after punctuation.&lt;br /&gt;
&lt;br /&gt;
var customizeToolbar = function ()&lt;br /&gt;
{&lt;br /&gt;
	$('#wpTextbox1').wikiEditor('addToToolbar',&lt;br /&gt;
	{&lt;br /&gt;
		'section': 'advanced',&lt;br /&gt;
		'group': 'format',&lt;br /&gt;
		'tools':&lt;br /&gt;
		{&lt;br /&gt;
			'section':&lt;br /&gt;
			{&lt;br /&gt;
				label: 'تصويب مكان علامات المراجع',&lt;br /&gt;
				type: 'button',&lt;br /&gt;
				icon: '//upload.wikimedia.org/wikipedia/commons/e/e0/نقطة_مرجع_محرر_الويكي.png',&lt;br /&gt;
				action:&lt;br /&gt;
				{&lt;br /&gt;
					type: 'callback',&lt;br /&gt;
					execute: function (context)&lt;br /&gt;
					{&lt;br /&gt;
						cleanUpFootnotes();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */&lt;br /&gt;
if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1)&lt;br /&gt;
{&lt;br /&gt;
	mw.loader.using('user.options').then(function ()&lt;br /&gt;
	{&lt;br /&gt;
		// This can be the string &amp;quot;0&amp;quot; if the user disabled the preference ([[phab:T54542#555387]])&lt;br /&gt;
		if (mw.user.options.get('usebetatoolbar') == 1)&lt;br /&gt;
		{&lt;br /&gt;
			$.when(&lt;br /&gt;
				mw.loader.using('ext.wikiEditor'), $.ready&lt;br /&gt;
			).then(customizeToolbar);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Add the customizations to LiquidThreads' edit toolbar, if available&lt;br /&gt;
mw.hook('ext.lqt.textareaCreated').add(customizeToolbar);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function cleanUpFootnotes()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	var textbox = $(&amp;quot;#wpTextbox1&amp;quot;);&lt;br /&gt;
	if (!textbox)&lt;br /&gt;
		return;&lt;br /&gt;
	const oldContents = textbox.val();&lt;br /&gt;
	var contents = oldContents;&lt;br /&gt;
	var escaped = [];&lt;br /&gt;
	var i = 0;&lt;br /&gt;
	var replacements = [];&lt;br /&gt;
	var count = 0;&lt;br /&gt;
	var escape = function (text, regexString)&lt;br /&gt;
	{&lt;br /&gt;
		var regex = new RegExp(regexString, &amp;quot;g&amp;quot;);&lt;br /&gt;
		text = text.replace(&lt;br /&gt;
			regex,&lt;br /&gt;
			function (match)&lt;br /&gt;
			{&lt;br /&gt;
				escaped[i] = match;&lt;br /&gt;
				var replacement = &amp;quot;%%&amp;quot; + i + &amp;quot;%%&amp;quot;;&lt;br /&gt;
				i += 1;&lt;br /&gt;
				return replacement;&lt;br /&gt;
			}&lt;br /&gt;
		);&lt;br /&gt;
		return text;&lt;br /&gt;
	};&lt;br /&gt;
	var puncRegex = /((?:%%\d+%%)+)([\؛\،\.\,\;\:\&amp;quot;]{1,3})/g;&lt;br /&gt;
	var reorder = function (match, capture1, capture2)&lt;br /&gt;
	{&lt;br /&gt;
		count += 1;&lt;br /&gt;
		var replacement = capture2 + capture1;&lt;br /&gt;
		replacements.push(replacement);&lt;br /&gt;
		return replacement;&lt;br /&gt;
	};&lt;br /&gt;
	var fixPunctuationPlacement = function (text)&lt;br /&gt;
	{&lt;br /&gt;
		while (puncRegex.test(text))&lt;br /&gt;
			text = text.replace(&lt;br /&gt;
				/((?:%%\d+%%)+)([\؛\،\.\,\;\:\&amp;quot;]{1,3})/g,&lt;br /&gt;
				reorder&lt;br /&gt;
			);&lt;br /&gt;
		return text;&lt;br /&gt;
	};&lt;br /&gt;
	/* Escape various things:&lt;br /&gt;
	ref tags */&lt;br /&gt;
	contents = escape(&lt;br /&gt;
		contents,&lt;br /&gt;
		&amp;quot;&amp;lt;ref[^&amp;gt;]*&amp;gt;[^&amp;lt;]+&amp;lt;\\/ref&amp;gt;&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
	contents = escape(&lt;br /&gt;
		contents,&lt;br /&gt;
		&amp;quot;&amp;lt;ref[^\\/]+\\/&amp;gt;&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
	// citation needed&lt;br /&gt;
	contents = escape(&lt;br /&gt;
		contents,&lt;br /&gt;
		&amp;quot;\\{\\{(?:[Cc]itation needed|[Cc]n|[Ff]act|[Cc]b|[Cc]tn|[Rr]ef\\?)\\|[^\}]+\\}\\}&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
	contents = fixPunctuationPlacement(contents);&lt;br /&gt;
	// footnote templates&lt;br /&gt;
	/* Handles up to one level of nested templates.&lt;br /&gt;
	Any more, and there may be problems. */&lt;br /&gt;
	contents = escape(&lt;br /&gt;
		contents,&lt;br /&gt;
		&amp;quot;\\{\\{(?:sfn|efn|rfn)\\|(?:[^\\}]*?(?:\\{\\{[^\\}]+\\}\\})?)+\\}\\}&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
	if (i &amp;gt; 0)&lt;br /&gt;
	{&lt;br /&gt;
		mw.notify(i + &amp;quot; refs found.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	contents = fixPunctuationPlacement(contents);&lt;br /&gt;
	if (count &amp;gt; 0)&lt;br /&gt;
	{&lt;br /&gt;
		mw.notify(count + &amp;quot; correction&amp;quot; + ((count &amp;gt; 1 &amp;amp;&amp;amp; &amp;quot;s&amp;quot;) || &amp;quot;&amp;quot;) + &amp;quot; made: &amp;quot; + replacements.join());&lt;br /&gt;
	}&lt;br /&gt;
	/* Unescape the various things escaped above.&lt;br /&gt;
	This has to be done twice, since escaping was done twice. */&lt;br /&gt;
	contents = contents.replace(&lt;br /&gt;
		/%%(\d+)%%/g,&lt;br /&gt;
		function (wholematch, number)&lt;br /&gt;
		{&lt;br /&gt;
			number = Number(number);&lt;br /&gt;
			return escaped[number];&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	contents = contents.replace(&lt;br /&gt;
		/%%(\d+)%%/g,&lt;br /&gt;
		function (wholematch, number)&lt;br /&gt;
		{&lt;br /&gt;
			number = Number(number);&lt;br /&gt;
			return escaped[number];&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
	var isUnchanged = (oldContents === contents);&lt;br /&gt;
	if (isUnchanged)&lt;br /&gt;
	{&lt;br /&gt;
		mw.notify(&amp;quot;No misplaced footnotes or tagging templates were found.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	textbox.val(contents);&lt;br /&gt;
	$(&amp;quot;#wpSummary&amp;quot;).val(function (index, summary)&lt;br /&gt;
	{&lt;br /&gt;
		var addition = &amp;quot;[[:ar:mediawiki:gadget-shiftrefs|تصويب مكان علامة المرجع]]&amp;quot;;&lt;br /&gt;
		const afterSectionName = summary.match(/^(?:\/\*[^\*]+\*\/)?\s*(.+)/);&lt;br /&gt;
		if (afterSectionName &amp;amp;&amp;amp; afterSectionName[1].length &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			addition = &amp;quot;; &amp;quot; + addition;&lt;br /&gt;
		}&lt;br /&gt;
		if (!isUnchanged &amp;amp;&amp;amp; (!afterSectionName || !afterSectionName[1].includes(addition)))&lt;br /&gt;
			return summary + addition;&lt;br /&gt;
		else&lt;br /&gt;
			return summary;&lt;br /&gt;
	});&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Gerges</name></author>
	</entry>
</feed>