<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://ejwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Editsuggest.js</id>
	<title>MediaWiki:Gadget-Editsuggest.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://ejwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Editsuggest.js"/>
	<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Editsuggest.js&amp;action=history"/>
	<updated>2026-05-16T03:32:26Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://ejwiki.org/index.php?title=MediaWiki:Gadget-Editsuggest.js&amp;diff=388395&amp;oldid=prev</id>
		<title>Mliris: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Editsuggest.js&amp;diff=388395&amp;oldid=prev"/>
		<updated>2010-03-11T07:47:53Z</updated>

		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 07:47, 11 марта 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mliris</name></author>
	</entry>
	<entry>
		<id>https://ejwiki.org/index.php?title=MediaWiki:Gadget-Editsuggest.js&amp;diff=25641&amp;oldid=prev</id>
		<title>Ariely: переименовал «MediaWiki:Editsuggest.js» в «MediaWiki:Gadget-Editsuggest.js»</title>
		<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Editsuggest.js&amp;diff=25641&amp;oldid=prev"/>
		<updated>2010-02-27T23:09:16Z</updated>

		<summary type="html">&lt;p&gt;переименовал «&lt;a href=&quot;/index.php/MediaWiki:Editsuggest.js&quot; title=&quot;MediaWiki:Editsuggest.js&quot;&gt;MediaWiki:Editsuggest.js&lt;/a&gt;» в «&lt;a href=&quot;/index.php/MediaWiki:Gadget-Editsuggest.js&quot; title=&quot;MediaWiki:Gadget-Editsuggest.js&quot;&gt;MediaWiki:Gadget-Editsuggest.js&lt;/a&gt;»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//script config&lt;br /&gt;
var es_namespaces = [0, 10, 14, 6]&lt;br /&gt;
var es_namespaces_names = {0: &amp;#039;&amp;#039;,  6:&amp;#039;Image&amp;#039;, 10:&amp;#039;\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0{\{\u00A0&amp;#039;, &lt;br /&gt;
 14:&amp;#039;Category&amp;#039;}&lt;br /&gt;
if (wgContentLanguage == &amp;#039;ru&amp;#039;) {&lt;br /&gt;
 es_namespaces_names[14] = &amp;#039;Категория&amp;#039;&lt;br /&gt;
 es_namespaces_names[6]  = &amp;#039;Изображение&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var editSuggest = new function(){ //global wrapper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var esForm, esText, linkName, esNS, isCtrlOrShift, txtBox, keyPrev&lt;br /&gt;
var selRange, selScroll, selWorking&lt;br /&gt;
&lt;br /&gt;
this.start = function(){&lt;br /&gt;
 if (!esForm) init()&lt;br /&gt;
 if (esForm.style.display == &amp;#039;none&amp;#039;){&lt;br /&gt;
   esText.value = getWikiText()&lt;br /&gt;
   setNS(0)&lt;br /&gt;
   showForm(true)&lt;br /&gt;
 }else{ &lt;br /&gt;
   focusTextarea() //second click - hide form&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
this.insert = ev_onsubmit&lt;br /&gt;
&lt;br /&gt;
function init(){&lt;br /&gt;
 txtBox = document.getElementById(&amp;#039;wpTextbox1&amp;#039;) &lt;br /&gt;
 //create form&lt;br /&gt;
 esForm = document.createElement(&amp;#039;form&amp;#039;)&lt;br /&gt;
 esForm.id = &amp;#039;es_form&amp;#039;&lt;br /&gt;
 esForm.action = &amp;#039;javascript:editSuggest.insert()&amp;#039;&lt;br /&gt;
 esForm.style.cssText = &amp;#039;position:absolute; z-index:100; border:1px solid gray; padding:1px; background:#E0E0E0; opacity:0.8&amp;#039;&lt;br /&gt;
 //try { esForm.style.background = &amp;#039;inherit&amp;#039;} catch(e){esForm.style.background = &amp;#039;white&amp;#039;} //damn IE&lt;br /&gt;
 //add label&lt;br /&gt;
 var lbl = document.createElement(&amp;#039;span&amp;#039;)&lt;br /&gt;
 lbl.id = &amp;#039;es_label&amp;#039;&lt;br /&gt;
 lbl.style.cssText = &amp;#039;background:inherit; width:2em; font-size:125%; cursor:pointer; padding-right:5px&amp;#039;&lt;br /&gt;
 addHandler(lbl, &amp;#039;click&amp;#039;, cycleNS)&lt;br /&gt;
 esForm.appendChild(lbl)&lt;br /&gt;
 //add text field&lt;br /&gt;
 esText = appendInput(&amp;#039;text&amp;#039;, &amp;#039;es_text&amp;#039;, &amp;#039;width:350px&amp;#039;)&lt;br /&gt;
 esText.tabIndex = 0&lt;br /&gt;
 addHandler(esText, &amp;#039;keydown&amp;#039;, ev_onkeydown)&lt;br /&gt;
 addHandler(esText, &amp;#039;keyup&amp;#039;, ev_onkeyup)&lt;br /&gt;
 //add NS field&lt;br /&gt;
 esNS = appendInput(&amp;#039;hidden&amp;#039;, &amp;#039;es_namespace&amp;#039;)&lt;br /&gt;
 esNS.value = 1&lt;br /&gt;
 //position form&lt;br /&gt;
 var pos = os_getElementPosition(&amp;#039;wpTextbox1&amp;#039;)&lt;br /&gt;
 esForm.style.top  = (pos.top +2)+&amp;#039;px&amp;#039;&lt;br /&gt;
 esForm.style.left = (pos.left+2)+&amp;#039;px&amp;#039;&lt;br /&gt;
 //attach form and enable autosuggest&lt;br /&gt;
 document.body.appendChild(esForm)&lt;br /&gt;
 os_enableSuggestionsOn(&amp;#039;es_text&amp;#039;, &amp;#039;es_form&amp;#039;)&lt;br /&gt;
 os_createContainer(os_map[&amp;#039;es_text&amp;#039;])&lt;br /&gt;
 esForm.style.display = &amp;#039;none&amp;#039; //so it&amp;#039;s not hidden by ev_onfocusTextarea&lt;br /&gt;
 return&lt;br /&gt;
 function appendInput(type, id, css){&lt;br /&gt;
   var inp = document.createElement(&amp;#039;input&amp;#039;)&lt;br /&gt;
   inp.type = type&lt;br /&gt;
   if (id) inp.id = inp.name = id&lt;br /&gt;
   if (css) inp.style.cssText = css&lt;br /&gt;
   esForm.appendChild(inp)&lt;br /&gt;
   return inp&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// *** METHODS *** &lt;br /&gt;
&lt;br /&gt;
function showForm(isOn){&lt;br /&gt;
 isOn = isOn==true&lt;br /&gt;
 esText.disabled = !isOn&lt;br /&gt;
 esForm.style.display = isOn ? &amp;#039;&amp;#039; : &amp;#039;none&amp;#039;&lt;br /&gt;
 var el = document.getElementById(&amp;#039;es_textSuggest&amp;#039;)&lt;br /&gt;
 if (el) el.style.display = isOn ? &amp;#039;&amp;#039; : &amp;#039;none&amp;#039; //&amp;quot;hidden&amp;quot; is not enouugh here: text cursor disappears under it in Firefox&lt;br /&gt;
 if (isOn){ &lt;br /&gt;
   esText.focus()&lt;br /&gt;
   esText.select()&lt;br /&gt;
   fetchResults()&lt;br /&gt;
   setTimeout(setTextareaFocusHandler, 20) //if we set it now, weird IE6 will execute it&lt;br /&gt;
 }else{&lt;br /&gt;
   delHandler(txtBox, &amp;#039;focus&amp;#039;, ev_onfocusTextarea)&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setTextareaFocusHandler(){ addHandler(txtBox, &amp;#039;focus&amp;#039;, ev_onfocusTextarea) }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getWikiText(){ //returns target to search, remembers link name&lt;br /&gt;
 linkName = selGet()&lt;br /&gt;
 var targ, ma&lt;br /&gt;
 if (ma=linkName.match(/ *\[\[([^\]\|]+)\|?([^\]]+)?\]\] */)){ //user selected existing wikilink&lt;br /&gt;
   targ = ma[1]; linkName = ma[2] || &amp;#039;&amp;#039;&lt;br /&gt;
 }else&lt;br /&gt;
   targ = linkName&lt;br /&gt;
 return targ.replace(/́/g,&amp;#039;&amp;#039;).replace(/ +$/, &amp;#039;&amp;#039;) //remove accent and spaces at the end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fetchResults(){&lt;br /&gt;
 var r = os_map[&amp;#039;es_text&amp;#039;]&lt;br /&gt;
 //r.query = &amp;#039;---&amp;#039; //null old query so the results are always shown&lt;br /&gt;
 r.original = &amp;#039;&amp;#039;&lt;br /&gt;
 //injectSpinner(esText, &amp;#039;es&amp;#039;)&lt;br /&gt;
 os_fetchResults(r, esText.value, 0)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function setWikiText(targ, name){&lt;br /&gt;
 //remove space at the end&lt;br /&gt;
 var isSpace = / +$/.test(name)&lt;br /&gt;
 if (isSpace) name = name.replace(/ +$/, &amp;#039;&amp;#039;)&lt;br /&gt;
 var txt&lt;br /&gt;
 if (getNS() == 10){ //template&lt;br /&gt;
   txt = &amp;#039;{\{&amp;#039; + targ.substring(targ.indexOf(&amp;#039;:&amp;#039;)) + &amp;#039;|&amp;#039; + name + &amp;#039;}}&amp;#039;&lt;br /&gt;
 }else{ //construct wiki link&lt;br /&gt;
   txt =  &amp;#039;[\[&amp;#039;&lt;br /&gt;
   if (normalize(name).indexOf(normalize(targ)) == 0) //target is substring&lt;br /&gt;
     txt += name.substring(0, targ.length) + &amp;#039;]]&amp;#039; + name.substring(targ.length) &lt;br /&gt;
   else //target is different&lt;br /&gt;
     txt +=  targ + &amp;#039;|&amp;#039; + name + &amp;#039;]]&amp;#039;&lt;br /&gt;
 }&lt;br /&gt;
 //insert link&lt;br /&gt;
 if (isSpace) txt += &amp;#039; &amp;#039; &lt;br /&gt;
 selSet(txt, true)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function focusSuggest(){esText.focus()}&lt;br /&gt;
function focusTextarea(){txtBox.focus(); selSelect()}&lt;br /&gt;
&lt;br /&gt;
function setNS(ns){&lt;br /&gt;
 esNS.name = &amp;#039;ns&amp;#039; + ns&lt;br /&gt;
 if (typeof es_namespaces_names[ns] != &amp;#039;undefined&amp;#039;) ns = es_namespaces_names[ns]&lt;br /&gt;
 document.getElementById(&amp;#039;es_label&amp;#039;).innerHTML = ns&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getNS(){&lt;br /&gt;
 var ns = esNS.name&lt;br /&gt;
 return  ns = ns ? ns.substring(2) : 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function cycleNS(){&lt;br /&gt;
 var ns = getNS()&lt;br /&gt;
 for (var i=0; i&amp;lt;es_namespaces.length; i++)  if (ns == es_namespaces[i]) break  //find it in the list&lt;br /&gt;
 i++;  if (i &amp;gt;= es_namespaces.length) i = 0 //get next in the list&lt;br /&gt;
 setNS(es_namespaces[i]) //set new namespace&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// *** EVENTS ***&lt;br /&gt;
&lt;br /&gt;
function ev_onkeydown(e){&lt;br /&gt;
 e = e || window.event&lt;br /&gt;
 var key = (window.Event) ? e.which : e.keyCode&lt;br /&gt;
 switch (key){&lt;br /&gt;
  //Ctrl or Shift&lt;br /&gt;
  case 16: case 17: isCtrlOrShift = true; break&lt;br /&gt;
  //Escape&lt;br /&gt;
  case 27:&lt;br /&gt;
   //if (keyPrev==27 || !esText.value) &lt;br /&gt;
   setTimeout(focusTextarea, 50)&lt;br /&gt;
   //else setTimeout(focusSuggest, 50) // bring cursor back after Escape, mwsuggest Opera issue&lt;br /&gt;
   break&lt;br /&gt;
 }&lt;br /&gt;
 keyPrev = key &lt;br /&gt;
 //if (key == 9) focusTextarea() //Tab&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ev_onfocusTextarea(){&lt;br /&gt;
 if (esForm &amp;amp;&amp;amp; (esForm.style.display != &amp;#039;none&amp;#039;)) setTimeout(showForm, 20)&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
function ev_onkeyup(e){&lt;br /&gt;
 e = e || window.event&lt;br /&gt;
 var key = (window.Event) ? e.which : e.keyCode&lt;br /&gt;
 switch (key){&lt;br /&gt;
  /*Ctrl or Shift*/ case 16: case 17: isCtrlOrShift = false; break&lt;br /&gt;
  // /*Escape*/ case 27:    //e.cancelBubble = true;  if (e.stopPropagation) e.stopPropagation()   //break&lt;br /&gt;
  /*Space*/ case 32: if (!esText.value.replace(/ /g,&amp;#039;&amp;#039;)){ cycleNS(); esText.value = &amp;#039;&amp;#039;}; break&lt;br /&gt;
  /*PgDnl*/ case 34: /*ScrollLock*/ case 145: cycleNS(); fetchResults(); break&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ev_onsubmit(e){&lt;br /&gt;
 if (isCtrlOrShift){&lt;br /&gt;
   window.open (wgServer + wgArticlePath.replace(&amp;#039;\$1&amp;#039;, esText.value))&lt;br /&gt;
 }else{&lt;br /&gt;
   setWikiText(esText.value, linkName)&lt;br /&gt;
   showForm(false)&lt;br /&gt;
   setTimeout(focusTextarea, 100)&lt;br /&gt;
 }&lt;br /&gt;
 return&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// *** misc ***&lt;br /&gt;
&lt;br /&gt;
function normalize(tt){ return (tt.substring(0,1).toUpperCase() + tt.substring(1)).replace(/_/g, &amp;#039; &amp;#039;) }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function delHandler(element, event, handler){&lt;br /&gt;
 if (window.removeEventListener) element.removeEventListener(event, handler, false)&lt;br /&gt;
 else if (window.detachEvent) element.detachEvent(&amp;#039;on&amp;#039; + event, handler)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//cross-browser textarea selection, need txtBox var&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function selGet(){&lt;br /&gt;
 if (document.selection) { //IE/Opera&lt;br /&gt;
   selScroll = document.documentElement.scrollTop&lt;br /&gt;
   txtBox.focus() &lt;br /&gt;
   selRange = document.selection.createRange()&lt;br /&gt;
   return selRange.text&lt;br /&gt;
  }else if (txtBox.selectionStart || txtBox.selectionStart == &amp;#039;0&amp;#039;) { // Mozilla&lt;br /&gt;
   selScroll = txtBox.scrollTop&lt;br /&gt;
   //this.selStart = txtBox.selectionStart&lt;br /&gt;
   //txtBox.focus()&lt;br /&gt;
   return txtBox.value.substring(txtBox.selectionStart, txtBox.selectionEnd)&lt;br /&gt;
  }else return null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function selSelect(){ if(selRange) selRange.select() } //for IE only&lt;br /&gt;
&lt;br /&gt;
function selSet(txt, isSelect){&lt;br /&gt;
  txtBox.focus()&lt;br /&gt;
  if (document.selection) { //IE/Opera&lt;br /&gt;
    selRange.text = txt&lt;br /&gt;
    selRange.select()&lt;br /&gt;
    //no need to restore scroll if the action is not instant&lt;br /&gt;
    //document.documentElement.scrollTop = this.selScroll //restore window scroll position&lt;br /&gt;
 }else if (txtBox.selectionStart || txtBox.selectionStart == &amp;#039;0&amp;#039;) { // Mozilla&lt;br /&gt;
    var p1 = txtBox.selectionStart, p2 = txtBox.selectionEnd&lt;br /&gt;
    txtBox.value = txtBox.value.substring(0, p1) + txt + txtBox.value.substring(p2, txtBox.value.length)&lt;br /&gt;
    txtBox.selectionStart = p1 + txt.length //restore cursor position at end&lt;br /&gt;
    txtBox.selectionEnd = txtBox.selectionStart&lt;br /&gt;
    txtarea.scrollTop = selScroll //restore txtarea scroll&lt;br /&gt;
  }&lt;br /&gt;
  if (isSelect) selMove (-txt.length)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function selMove(mv1, mv2){&lt;br /&gt;
  if (document.selection) { //IE/Opera&lt;br /&gt;
   if (!selRange.moveStart) return&lt;br /&gt;
   if (mv1) selRange.moveStart(&amp;#039;character&amp;#039;, mv1) &lt;br /&gt;
   if (mv2) selRange.moveEnd (&amp;#039;character&amp;#039;,  mv2)&lt;br /&gt;
 }else if (txtBox.selectionStart || txtBox.selectionStart == &amp;#039;0&amp;#039;) { // Mozilla&lt;br /&gt;
   if (mv1) txtBox.selectionStart += mv1&lt;br /&gt;
   if (mv2) txtBox.selectionEnd   += mv2&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (window.wgMWSuggestTemplate &amp;amp;&amp;amp; (wgAction==&amp;#039;edit&amp;#039; || wgAction==&amp;#039;submit&amp;#039;))&lt;br /&gt;
 addOnloadHook(editSuggestButton)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function editSuggestButton(){&lt;br /&gt;
 var tlb = document.getElementById(&amp;#039;toolbar&amp;#039;)&lt;br /&gt;
 if (!tlb) return&lt;br /&gt;
 var btn = document.createElement(&amp;#039;input&amp;#039;); btn.type = &amp;#039;button&amp;#039;&lt;br /&gt;
 btn.style.cssText = &amp;#039;background:#adbede; height:22px; vertical-align:middle; padding:0&amp;#039;&lt;br /&gt;
 btn.value = &amp;#039;[\[↓]]&amp;#039;; btn.title = &amp;#039;Suggest link&amp;#039;&lt;br /&gt;
 btn.onclick = editSuggest.start; btn.id = &amp;#039;editSuggest&amp;#039;&lt;br /&gt;
 tlb.appendChild(btn)&lt;br /&gt;
 if (window.es_accesskey){&lt;br /&gt;
   btn.accessKey = es_accesskey&lt;br /&gt;
   btn.title += &amp;#039; [&amp;#039;+es_accesskey+&amp;#039;]&amp;#039;&lt;br /&gt;
   updateTooltipAccessKeys([btn])&lt;br /&gt;
 } &lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Ariely</name></author>
	</entry>
</feed>