<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://acik.srns.ru/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://acik.srns.ru/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="https://acik.srns.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AEdittools.js"/>
		<link rel="alternate" type="text/html" href="https://acik.srns.ru/index.php?title=MediaWiki:Edittools.js&amp;action=history"/>
		<updated>2026-04-06T14:04:15Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.20.3</generator>

	<entry>
		<id>https://acik.srns.ru/index.php?title=MediaWiki:Edittools.js&amp;diff=175&amp;oldid=prev</id>
		<title>Admin: Новая страница: «// enableForAllFields() feature from commons:MediaWiki:Edittools.js // combined and modified by User:Ilmari Karonen // after making changes to this page and ...»</title>
		<link rel="alternate" type="text/html" href="https://acik.srns.ru/index.php?title=MediaWiki:Edittools.js&amp;diff=175&amp;oldid=prev"/>
				<updated>2011-04-03T17:29:38Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «// enableForAllFields() feature from &lt;a href=&quot;http://commons.wikimedia.org/wiki/MediaWiki:Edittools.js&quot; class=&quot;extiw&quot; title=&quot;commons:MediaWiki:Edittools.js&quot;&gt;commons:MediaWiki:Edittools.js&lt;/a&gt; // combined and modified by &lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Ilmari_Karonen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Ilmari Karonen (страница не существует)&quot;&gt;User:Ilmari Karonen&lt;/a&gt; // after making changes to this page and ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// enableForAllFields() feature from [[commons:MediaWiki:Edittools.js]]&lt;br /&gt;
// combined and modified by [[User:Ilmari Karonen]]&lt;br /&gt;
// after making changes to this page and testing them, update the number after &amp;quot;edittools-version-&amp;quot; in [[MediaWiki:Edittools]] to purge the cache for everyone&lt;br /&gt;
// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
if (typeof (EditTools_set_focus) == 'undefined')&lt;br /&gt;
   var EditTools_set_focus = true;&lt;br /&gt;
 &lt;br /&gt;
if (typeof (EditTools_set_focus_initially) == 'undefined')&lt;br /&gt;
   var EditTools_set_focus_initially = EditTools_set_focus;&lt;br /&gt;
 &lt;br /&gt;
var EditTools =&lt;br /&gt;
{&lt;br /&gt;
  charinsert : {&lt;br /&gt;
     'Insert': ' – — ‘+’ “+” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ √ ← → · §  Sign_your_posts_on_talk_pages: ~~\~~  Cite_your_sources: &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;',&lt;br /&gt;
     'Wiki markup': 'Insert:  – — ‘+’ “+” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ √ ← → · § ~~\~~ &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;  Wiki_markup:  {\{+}}  {\{\{+}}}  |  [+]  [\[+]]  [\[Category:+]]  #REDIRECT.[\[+]]  &amp;amp;nbsp;  &amp;lt;s&amp;gt;+&amp;lt;/s&amp;gt;  &amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt;  &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;  &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;  &amp;lt;pre&amp;gt;+&amp;lt;/pre&amp;gt;  &amp;lt;blockquote&amp;gt;+&amp;lt;/blockquote&amp;gt;  &amp;lt;ref.name=&amp;quot;+&amp;quot;/&amp;gt;  {\{#tag:ref|+|group=&amp;quot;note&amp;quot;}}  {\{Reflist}}  &amp;lt;references/&amp;gt;  &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt;  &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt;  {\{DEFAULTSORT:+}}  &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;  &amp;lt;!--.+_--&amp;gt;  &amp;lt;span.class=&amp;quot;plainlinks&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;',&lt;br /&gt;
     'Symbols': '~ | ¡¿†‡↔↑↓•¶  # ½⅓⅔¼¾⅛⅜⅝⅞∞  ‘+’ “+” ‹+› «+»  ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩¥  ♠♣♥♦  m² m³  ♭♯♮  ©®™', &lt;br /&gt;
     'Latin': 'A a Á á À à Â â Ä ä Ǎ ǎ Ă ă Ā ā Ã ã Å å Ą ą Æ æ Ǣ ǣ  B b  C c Ć ć Ċ ċ Ĉ ĉ Č č Ç ç  D d Ď ď Đ đ Ḍ ḍ Ð ð  E e É é È è Ė ė Ê ê Ë ë Ě ě Ĕ ĕ Ē ē Ẽ ẽ Ę ę Ə ə  F f  G g Ġ ġ Ĝ ĝ Ğ ğ Ģ ģ  H h Ĥ ĥ Ħ ħ Ḥ ḥ  I i İ ı Í í Ì ì Î î Ï ï Ǐ ǐ Ĭ ĭ Ī ī Ĩ ĩ Į į  J j Ĵ ĵ  K k Ķ ķ  L l Ĺ ĺ Ŀ ŀ Ľ ľ Ļ ļ Ł ł Ḷ ḷ Ḹ ḹ  M m Ṃ ṃ  N n Ń ń Ň ň Ñ ñ Ņ ņ Ṇ ṇ  O o Ó ó Ò ò Ô ô Ö ö Ǒ ǒ Ŏ ŏ Ō ō Õ õ Ǫ ǫ Ő ő Ø ø Œ œ  P p  Q q  R r Ŕ ŕ Ř ř Ŗ ŗ Ṛ ṛ Ṝ ṝ  S s Ś ś Ŝ ŝ Š š Ş ş Ṣ ṣ ß  T t Ť ť Ţ ţ Ṭ ṭ Þ þ  U u Ú ú Ù ù Û û Ü ü Ǔ ǔ Ŭ ŭ Ū ū Ũ ũ Ů ů Ų ų Ű ű Ǘ ǘ Ǜ ǜ Ǚ ǚ Ǖ ǖ  V v  W w Ŵ ŵ  X x  Y y Ý ý Ŷ ŷ Ÿ ÿ Ỹ ỹ Ȳ ȳ  Z z Ź ź Ż ż Ž ž  ß Ð ð Þ þ Ə ə  {\{Unicode|+}}',&lt;br /&gt;
     'Greek': 'ΆάΈέΉήΊίΌόΎύΏώ  ΑαΒβΓγΔδ  ΕεΖζΗηΘθ  ΙιΚκΛλΜμ  ΝνΞξΟοΠπ  ΡρΣσςΤτΥυ  ΦφΧχΨψΩω  ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ  ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ  ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ  ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷ  ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ  ῤῬῥ  ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗ  ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ   {\{Polytonic|+}}',&lt;br /&gt;
     'Cyrillic': 'АаБбВвГг  ҐґЃѓДдЂђ  ЕеЁёЄєЖж  ЗзЅѕИиІі  ЇїЙйЈјКк  ЌќЛлЉљМм  НнЊњОоПп  РрСсТтЋћ  УуЎўФфХх  ЦцЧчЏџШш  ЩщЪъЫыЬь  ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ  ҔҕӢӣӮӯҘҙ  ҠҡҤҥҪҫӐӑ  ӒӓӔӕӖӗӰӱ  ӲӳӸӹӀ  ҞҟҦҧҨҩҬҭ  ҴҵҶҷҼҽҾҿ  ӁӂӃӄӇӈӋӌ  ӚӛӜӝӞӟӠӡ  ӤӥӦӧӪӫӴӵ  ́',&lt;br /&gt;
     'Hebrew': 'אבגדהוזחטיךכלםמןנסעףפץצקרשת  ׳ ״  װױײ',&lt;br /&gt;
     'Arabic': 'ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ',&lt;br /&gt;
     'IPA (English)': 'ˈ ˌ ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ  iː ɪ uː ʊ ʌ ɜr eɪ ɛ æ oʊ ɒ ɔː ɔɪ ɔr ɑː ɑr aɪ aʊ  ə ər ɨ ɵ ʉ  {\{IPA-en|+}} {\{IPA|/+/}} ‹+›',&lt;br /&gt;
     'IPA': 'ʈɖɟɡɢʡʔ  ɸβθðʃʒɕʑʂʐçʝɣχʁħʕʜʢɦ  ɱɳɲŋɴ  ʋɹɻɰ  ʙⱱʀɾɽ  ɬ ɮ ɺ ɭʎʟ  ʍɥɧ  ʼ ɓɗʄɠʛ  ʘǀǃǂǁ  ɨʉɯ ɪʏʊ øɘɵɤ ə ɛœɜɞʌɔ æ ɐ ɶɑɒ  ʰʱʷʲˠˤˀ ᵊ k̚ ⁿˡ  ˈˌːˑ t̪ d̪ s̺ s̻ θ̼ s̬ n̥ ŋ̊ a̤ a̰  β̞ ˕ r̝ ˔ o˞ ɚ ɝ e̘ e̙ u̟ i̠ ɪ̈ e̽ ɔ̹ ɔ̜ n̩ ə̆ ə̯ ə̃ ȷ̃ ɫ z̴ ə̋ ə́ ə̄ ə̀ ə̏ ə̌ ə̂ ə᷄ ə᷅ ə᷇ ə᷆ ə᷈ ə᷉ t͡ʃ d͡ʒ t͜ɬ ‿  ˥ ˦ ˧ ˨ ˩ ꜛ ꜜ | ‖ ↗ ↘  k͈ s͎ {\{IPA|+}}',&lt;br /&gt;
     'Math and logic': '− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ {\{frac|+|}} &amp;amp;nbsp; &amp;amp;minus; &amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt; {\{math|+}}'&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  charinsertDivider : &amp;quot;\240&amp;quot;,&lt;br /&gt;
 &lt;br /&gt;
  extraCSS : '\&lt;br /&gt;
    #editpage-specialchars {\&lt;br /&gt;
      margin-top: 15px;\&lt;br /&gt;
      border-width: 1px;\&lt;br /&gt;
      border-style: solid;\&lt;br /&gt;
      border-color: #aaaaaa;\&lt;br /&gt;
      padding: 2px;\&lt;br /&gt;
    }\&lt;br /&gt;
    #editpage-specialchars a {\&lt;br /&gt;
    }\&lt;br /&gt;
    #editpage-specialchars a:hover {\&lt;br /&gt;
    }\&lt;br /&gt;
  ',&lt;br /&gt;
 &lt;br /&gt;
  appendExtraCSS : function ()&lt;br /&gt;
  {&lt;br /&gt;
     appendCSS(EditTools.extraCSS);&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  cookieName : 'edittoolscharsubset',&lt;br /&gt;
 &lt;br /&gt;
  createEditTools : function (placeholder)&lt;br /&gt;
  {&lt;br /&gt;
     var box = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
     box.id = &amp;quot;editpage-specialchars&amp;quot;;&lt;br /&gt;
     box.title = 'Click on the character or tag to insert it into the edit window';&lt;br /&gt;
 &lt;br /&gt;
     //append user-defined sets&lt;br /&gt;
     if (window.charinsertCustom)&lt;br /&gt;
	for (id in charinsertCustom)&lt;br /&gt;
	   if (EditTools.charinsert[id]) EditTools.charinsert[id] += ' ' + charinsertCustom[id];&lt;br /&gt;
	   else EditTools.charinsert[id] = charinsertCustom[id];&lt;br /&gt;
 &lt;br /&gt;
     //create drop-down select&lt;br /&gt;
     var prevSubset = 0, curSubset = 0;&lt;br /&gt;
     var sel = document.createElement('select'), id;&lt;br /&gt;
     for (id in EditTools.charinsert)&lt;br /&gt;
	sel.options[sel.options.length] = new Option(id, id);&lt;br /&gt;
     sel.selectedIndex = 0;&lt;br /&gt;
     sel.style.cssFloat = sel.style.styleFloat = 'left';&lt;br /&gt;
     sel.style.marginRight = '5px';&lt;br /&gt;
     sel.title = 'Choose character subset';&lt;br /&gt;
     sel.onchange = sel.onkeyup = selectSubset;&lt;br /&gt;
     box.appendChild(sel);&lt;br /&gt;
 &lt;br /&gt;
     //create &amp;quot;recall&amp;quot; switch&lt;br /&gt;
     if (window.editToolsRecall) {&lt;br /&gt;
	var recall = document.createElement('span');&lt;br /&gt;
	recall.appendChild(document.createTextNode('↕')); // ↔&lt;br /&gt;
	recall.onclick = function () {&lt;br /&gt;
	   sel.selectedIndex = prevSubset;&lt;br /&gt;
	   selectSubset();&lt;br /&gt;
	}&lt;br /&gt;
	with (recall.style) { cssFloat = styleFloat = 'left'; marginRight = '5px'; cursor = 'pointer'; }&lt;br /&gt;
	box.appendChild(recall);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     // load latest selection from cookies&lt;br /&gt;
     try {&lt;br /&gt;
        var cookieRe = new RegExp (&amp;quot;(?:^|;)\\s*&amp;quot; + EditTools.cookieName + &amp;quot;=(\\d+)\\s*(?:;|$)&amp;quot;);&lt;br /&gt;
        var m = cookieRe.exec(document.cookie);&lt;br /&gt;
        if (m &amp;amp;&amp;amp; m.length &amp;gt; 1 &amp;amp;&amp;amp; parseInt(m[1]) &amp;lt; sel.options.length)&lt;br /&gt;
           sel.selectedIndex = parseInt(m[1]);&lt;br /&gt;
     } catch (err) { /* ignore */ }&lt;br /&gt;
 &lt;br /&gt;
     placeholder.parentNode.replaceChild(box, placeholder);&lt;br /&gt;
     selectSubset();&lt;br /&gt;
     return;&lt;br /&gt;
 &lt;br /&gt;
     function selectSubset ()&lt;br /&gt;
     {&lt;br /&gt;
	//remember previous (for &amp;quot;recall&amp;quot; button)&lt;br /&gt;
	prevSubset = curSubset;&lt;br /&gt;
	curSubset = sel.selectedIndex;&lt;br /&gt;
        //save into cookies for persistence&lt;br /&gt;
        try {&lt;br /&gt;
           var expires = new Date ();&lt;br /&gt;
           expires.setTime( expires.getTime() + 30 * 24 * 60 * 60 * 1000 );  // + 30 days&lt;br /&gt;
           document.cookie = EditTools.cookieName + &amp;quot;=&amp;quot; + curSubset + &amp;quot;;path=/;expires=&amp;quot; + expires.toUTCString();&lt;br /&gt;
        } catch (err) { /* ignore */ }&lt;br /&gt;
	//hide other subsets&lt;br /&gt;
	var pp = box.getElementsByTagName('p') ;&lt;br /&gt;
	for (var i=0; i&amp;lt;pp.length; i++)&lt;br /&gt;
	   pp[i].style.display = 'none';&lt;br /&gt;
	//show/create current subset&lt;br /&gt;
	var id = sel.options[curSubset].value;&lt;br /&gt;
	var p = document.getElementById(id);&lt;br /&gt;
	if (!p){&lt;br /&gt;
	   p = document.createElement('p');&lt;br /&gt;
	   p.id = id;&lt;br /&gt;
	   if (id == 'Arabic' || id == 'Hebrew'){ p.style.fontSize = '120%'; p.dir = 'rtl'; }&lt;br /&gt;
	   EditTools.createTokens(p, EditTools.charinsert[id]);&lt;br /&gt;
	   box.appendChild(p);&lt;br /&gt;
	}&lt;br /&gt;
	p.style.display = 'inline';&lt;br /&gt;
     } &lt;br /&gt;
  },&lt;br /&gt;
  createTokens : function (paragraph, str)&lt;br /&gt;
  {&lt;br /&gt;
     var tokens = str.split(' '), token, i, n;&lt;br /&gt;
     for (i = 0; i &amp;lt; tokens.length; i++) {&lt;br /&gt;
	token = tokens[i];&lt;br /&gt;
	n = token.indexOf('+');&lt;br /&gt;
	if (token == '' || token == '_')&lt;br /&gt;
	   addText(EditTools.charinsertDivider + ' ');&lt;br /&gt;
	else if (token == '\n')&lt;br /&gt;
	   paragraph.appendChild(document.createElement('br'));&lt;br /&gt;
	else if (token == '___')&lt;br /&gt;
	   paragraph.appendChild(document.createElement('hr'));&lt;br /&gt;
	else if (token.charAt(token.length-1) == ':')  // : at the end means just text&lt;br /&gt;
	   addBold(token);&lt;br /&gt;
	else if (n == 0) // +&amp;lt;tag&amp;gt;  -&amp;gt;   &amp;lt;tag&amp;gt;+&amp;lt;/tag&amp;gt;&lt;br /&gt;
	   addLink(token.substring(1), '&amp;lt;/' + token.substring(2), token.substring(1));&lt;br /&gt;
	else if (n &amp;gt; 0) // &amp;lt;tag&amp;gt;+&amp;lt;/tag&amp;gt;&lt;br /&gt;
	   addLink(token.substring(0,n), token.substring(n+1));&lt;br /&gt;
	else if (token.length &amp;gt; 2 &amp;amp;&amp;amp; token.charCodeAt(0) &amp;gt; 127) //a string of insertable characters&lt;br /&gt;
	   for (var j=0; j &amp;lt; token.length; j++) addLink(token.charAt(j), '');&lt;br /&gt;
	else&lt;br /&gt;
	   addLink(token, '');&lt;br /&gt;
     }&lt;br /&gt;
     return;&lt;br /&gt;
 &lt;br /&gt;
     function addLink (tagOpen, tagClose, name)&lt;br /&gt;
     {&lt;br /&gt;
	var a = document.createElement('a');&lt;br /&gt;
	tagOpen = tagOpen.replace(/\./g,' ');&lt;br /&gt;
	tagClose = tagClose ? tagClose.replace(/_/g,' ') : '';&lt;br /&gt;
	name = name || tagOpen + tagClose;&lt;br /&gt;
	name = name.replace(/\\n/g,'');&lt;br /&gt;
	a.appendChild(document.createTextNode(name));&lt;br /&gt;
	a.href = &amp;quot;#&amp;quot;;&lt;br /&gt;
	addHandler( a, 'click', new Function( &amp;quot;evt&amp;quot;, &amp;quot;insertTags('&amp;quot; + tagOpen + &amp;quot;', '&amp;quot; + tagClose + &amp;quot;', ''); return killEvt( evt );&amp;quot; ) );&lt;br /&gt;
	paragraph.appendChild(a);&lt;br /&gt;
	addText(' ');&lt;br /&gt;
     }&lt;br /&gt;
     function addBold (text)&lt;br /&gt;
     {&lt;br /&gt;
	var b = document.createElement('b');&lt;br /&gt;
	b.appendChild(document.createTextNode(text.replace(/_/g,' ')));&lt;br /&gt;
	paragraph.appendChild(b);&lt;br /&gt;
	addText(' ');&lt;br /&gt;
     }     &lt;br /&gt;
     function addText (txt)&lt;br /&gt;
     {&lt;br /&gt;
	paragraph.appendChild(document.createTextNode(txt));&lt;br /&gt;
     }&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  enableForAllFields : function ()&lt;br /&gt;
  {&lt;br /&gt;
     if (typeof (insertTags) != 'function' || window.WikEdInsertTags) return;&lt;br /&gt;
     // insertTags from the site-wide /skins-1.5/common/edit.js just inserts in the first&lt;br /&gt;
     // textarea in the document. Evidently, that's not good if we have multiple textareas.&lt;br /&gt;
     // My first idea was to simply add a hidden textarea as the first one, and redefine&lt;br /&gt;
     // insertTags such that it copied first the last active textareas contents over to that hidden&lt;br /&gt;
     // field, set the cursor or selection there, let the standard insertTags do its thing, and&lt;br /&gt;
     // then copy the hidden field's text, cursor position and selection back to the currently&lt;br /&gt;
     // active field. Unfortunately, that is just as complex as simply copying the whole code&lt;br /&gt;
     // from wikibits to here and let it work on the right text field in the first place.&lt;br /&gt;
     var texts = document.getElementsByTagName ('textarea');    &lt;br /&gt;
     for (var i = 0; i &amp;lt; texts.length; i++) {&lt;br /&gt;
	addHandler (texts[i], 'focus', EditTools.registerTextField);&lt;br /&gt;
     }&lt;br /&gt;
     // While we're at it, also enable it for input fields&lt;br /&gt;
     texts = document.getElementsByTagName ('input');&lt;br /&gt;
     for (var i = 0; i &amp;lt; texts.length; i++) {&lt;br /&gt;
	if (texts[i].type == 'text') addHandler (texts[i], 'focus', EditTools.registerTextField);&lt;br /&gt;
     }&lt;br /&gt;
     insertTags = EditTools.insertTags; // Redefine the global insertTags&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  last_active_textfield : null,&lt;br /&gt;
 &lt;br /&gt;
  registerTextField : function (evt)&lt;br /&gt;
  {&lt;br /&gt;
     var e = evt || window.event;&lt;br /&gt;
     var node = e.target || e.srcElement;&lt;br /&gt;
     if (!node) return;&lt;br /&gt;
     EditTools.last_active_textfield = node.id;&lt;br /&gt;
     return true;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  getTextArea : function ()&lt;br /&gt;
  {&lt;br /&gt;
     var txtarea = null;&lt;br /&gt;
     if (EditTools.last_active_textfield &amp;amp;&amp;amp; EditTools.last_active_textfield != &amp;quot;&amp;quot;)&lt;br /&gt;
	txtarea = document.getElementById (EditTools.last_active_textfield);&lt;br /&gt;
     if (!txtarea) {&lt;br /&gt;
	// Fallback option: old behaviour&lt;br /&gt;
	if (document.editform) {&lt;br /&gt;
	   txtarea = document.editform.wpTextbox1;&lt;br /&gt;
	} else {&lt;br /&gt;
	   // Some alternate form? Take the first one we can find&lt;br /&gt;
	   txtarea = document.getElementsByTagName ('textarea');&lt;br /&gt;
	   if (txtarea.length &amp;gt; 0) txtarea = txtarea[0]; else txtarea = null;&lt;br /&gt;
	}&lt;br /&gt;
     }&lt;br /&gt;
     return txtarea;&lt;br /&gt;
  },&lt;br /&gt;
 &lt;br /&gt;
  insertTags : function (tagOpen, tagClose, sampleText)&lt;br /&gt;
  {&lt;br /&gt;
     var txtarea = EditTools.getTextArea ();&lt;br /&gt;
     if (!txtarea) return;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     /* Usability initiative compatibility */&lt;br /&gt;
     if ( typeof $j != 'undefined' &amp;amp;&amp;amp; typeof $j.fn.textSelection != 'undefined' ) {&lt;br /&gt;
          $j( txtarea ).textSelection(&lt;br /&gt;
          'encapsulateSelection', { 'pre': tagOpen, 'peri': sampleText, 'post': tagClose }&lt;br /&gt;
          );&lt;br /&gt;
          return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     var selText, isSample = false;&lt;br /&gt;
 &lt;br /&gt;
     function checkSelectedText ()&lt;br /&gt;
     {&lt;br /&gt;
	if (!selText) {&lt;br /&gt;
	   selText = sampleText; isSample = true;&lt;br /&gt;
	} else if (selText.charAt (selText.length - 1) == ' ') { // Exclude ending space char&lt;br /&gt;
	   selText = selText.substring (0, selText.length - 1);&lt;br /&gt;
	   tagClose += ' ';&lt;br /&gt;
	} &lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     if (document.selection &amp;amp;&amp;amp; document.selection.createRange) { // IE/Opera&lt;br /&gt;
	// Save window scroll position&lt;br /&gt;
	var winScroll = 0;&lt;br /&gt;
	if (document.documentElement &amp;amp;&amp;amp; document.documentElement.scrollTop)&lt;br /&gt;
	   winScroll = document.documentElement.scrollTop;&lt;br /&gt;
	else if (document.body)&lt;br /&gt;
	   winScroll = document.body.scrollTop;&lt;br /&gt;
	// Get current selection  &lt;br /&gt;
	txtarea.focus();&lt;br /&gt;
	var range = document.selection.createRange();&lt;br /&gt;
	selText = range.text;&lt;br /&gt;
	// Insert tags&lt;br /&gt;
	checkSelectedText ();&lt;br /&gt;
	range.text = tagOpen + selText + tagClose;&lt;br /&gt;
	// Mark sample text as selected&lt;br /&gt;
	if (isSample &amp;amp;&amp;amp; range.moveStart) {&lt;br /&gt;
	   if (window.opera) tagClose = tagClose.replace (/\n/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	   range.moveStart( 'character', - tagClose.length - selText.length); &lt;br /&gt;
	   range.moveEnd ('character', - tagClose.length); &lt;br /&gt;
	}&lt;br /&gt;
	range.select ();   &lt;br /&gt;
	// Restore window scroll position&lt;br /&gt;
	if (document.documentElement &amp;amp;&amp;amp; document.documentElement.scrollTop)&lt;br /&gt;
	   document.documentElement.scrollTop = winScroll;&lt;br /&gt;
	else if (document.body)&lt;br /&gt;
	   document.body.scrollTop = winScroll;&lt;br /&gt;
     } else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla&lt;br /&gt;
	// Save textarea scroll position&lt;br /&gt;
	var textScroll = txtarea.scrollTop;&lt;br /&gt;
	// Get current selection&lt;br /&gt;
	txtarea.focus();&lt;br /&gt;
	var startPos = txtarea.selectionStart;&lt;br /&gt;
	var endPos   = txtarea.selectionEnd;&lt;br /&gt;
	selText = txtarea.value.substring (startPos, endPos);&lt;br /&gt;
	// Insert tags&lt;br /&gt;
	checkSelectedText ();&lt;br /&gt;
	txtarea.value = txtarea.value.substring (0, startPos)&lt;br /&gt;
	+ tagOpen + selText + tagClose&lt;br /&gt;
	+ txtarea.value.substring (endPos);&lt;br /&gt;
	// Set new selection&lt;br /&gt;
	if (isSample) {&lt;br /&gt;
	   txtarea.selectionStart = startPos + tagOpen.length;&lt;br /&gt;
	   txtarea.selectionEnd = startPos + tagOpen.length + selText.length;&lt;br /&gt;
	} else {&lt;br /&gt;
	   txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;&lt;br /&gt;
	   txtarea.selectionEnd = txtarea.selectionStart;&lt;br /&gt;
	}&lt;br /&gt;
	// Restore textarea scroll position&lt;br /&gt;
	txtarea.scrollTop = textScroll;&lt;br /&gt;
     }&lt;br /&gt;
  }, // end insertTags&lt;br /&gt;
 &lt;br /&gt;
  setup : function ()&lt;br /&gt;
  {&lt;br /&gt;
     var placeholder = document.getElementById(&amp;quot;editpage-specialchars&amp;quot;);&lt;br /&gt;
     if (!placeholder) return;  // has this already been run once?&lt;br /&gt;
     EditTools.appendExtraCSS ();&lt;br /&gt;
     EditTools.createEditTools (placeholder);&lt;br /&gt;
     EditTools.enableForAllFields ();&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}; // end EditTools&lt;br /&gt;
 &lt;br /&gt;
// No need to hook this, as the loading of this page is itself hooked.&lt;br /&gt;
EditTools.setup();&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>