<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AGribochek%2Fedittools.js</id>
	<title>Участник:Gribochek/edittools.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AGribochek%2Fedittools.js"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gribochek/edittools.js&amp;action=history"/>
	<updated>2026-11-04T10:59:17Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gribochek/edittools.js&amp;diff=41305&amp;oldid=prev</id>
		<title>imported&gt;Gribochek: Новая: // copied from mw:User:Alex Smotrov/edittools.js, modified for use on the English Wikipedia. // enableForAllFields() feature from commons:MediaWiki:Edittools.js // combined and m...</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gribochek/edittools.js&amp;diff=41305&amp;oldid=prev"/>
		<updated>2009-08-22T19:21:30Z</updated>

		<summary type="html">&lt;p&gt;Новая: // copied from &lt;a href=&quot;https://www.mediawiki.org/wiki/User:Alex_Smotrov/edittools.js&quot; class=&quot;extiw&quot; title=&quot;mw:User:Alex Smotrov/edittools.js&quot;&gt;mw:User:Alex Smotrov/edittools.js&lt;/a&gt;, modified for use on the English Wikipedia. // enableForAllFields() feature from &lt;a href=&quot;https://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 m...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// copied from [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia.&lt;br /&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) == &amp;#039;undefined&amp;#039;)&lt;br /&gt;
   var EditTools_set_focus = true;&lt;br /&gt;
&lt;br /&gt;
if (typeof (EditTools_set_focus_initially) == &amp;#039;undefined&amp;#039;)&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;
&amp;#039;Быстрая вставка&amp;#039;: &amp;#039;«+» „+“ — – … | {\{+}} [\[|+]] [\[Категория:+]]  #REDIRECT.[\[+]]  &amp;amp;nbsp; &amp;lt;br /&amp;gt; &amp;lt;br.clear=&amp;quot;both&amp;quot;/&amp;gt; [\[Участник:+]] Анонимус&amp;#039;,&lt;br /&gt;
&amp;#039;Разметка&amp;#039;: &amp;quot;Ж: &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; К: &amp;#039;&amp;#039;+&amp;#039;&amp;#039; П: &amp;lt;u&amp;gt;+&amp;lt;/u&amp;gt; З: &amp;lt;s&amp;gt;+&amp;lt;/s&amp;gt; &amp;lt;sup&amp;gt;надстр&amp;lt;/sup&amp;gt;: &amp;lt;sup&amp;gt;+&amp;lt;/sup&amp;gt; &amp;lt;sub&amp;gt;подстр&amp;lt;/sub&amp;gt;: &amp;lt;sub&amp;gt;+&amp;lt;/sub&amp;gt;  ==.+_==  ===.+_===  —~~\~~  —~~\~~~  &amp;lt;&amp;gt;+&amp;lt;/&amp;gt; &amp;lt;!--.+_--&amp;gt;  &amp;lt;pre&amp;gt;+&amp;lt;/pre&amp;gt;  &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;  &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt;&amp;quot;,&lt;br /&gt;
&amp;#039;Цитирование&amp;#039;: &amp;#039;{\{NSFW|title=|content=+}}  {\{Q|+|Достоевский}}  {\{Q-Pre|+|Пушкин}}  {\{Цитата|width=auto|pre=|+|}}  &amp;lt;blockquote&amp;gt;+&amp;lt;/blockquote&amp;gt;&amp;#039;,&lt;br /&gt;
&amp;#039;Внешние ссылки&amp;#039;: &amp;#039;на_педивикии: [\[:w:+]]  [\[:en.w:+]]  [\[:commons:+]]  на_православные_ресурсы: [\[:lm:+]]  [\[:ae:+]]  [\[:urban:+]]  [\[:tv:+]]&amp;#039;,&lt;br /&gt;
&amp;#039;Шаблоны&amp;#039;: &amp;#039;{\{shitty|+}}  {\{moar|+}}  {\{facepalm}}  {\{cleanup}}  {\{rewrite}}  {\{merge|+}}  {\{delete|+}}  {\{subst:gracedel|+}}  {\{педивикия|+}}  {\{nopic}}  {\{КЛБ}}  {\{design}}  {\{ссылкота}}  {\{Rename}}  {\{Split}}  {\{Луркоёб}}  {\{Луркота}}  {\{stub|+}}  {\{spoiler|+}}  {\{lolwhat}}  {\{prooflink}}&amp;#039;,&lt;br /&gt;
&amp;#039;Сноски&amp;#039;: &amp;#039;==.Примечания_==  &amp;lt;references./&amp;gt;  ==.См._также_==  ==.Ссылки_==&amp;#039;,&lt;br /&gt;
&amp;#039;Контент&amp;#039;: &amp;#039;[\[Изображение:+.jpg|thumb|right|]]  {\{YouTube|+|width=300|}}  {\{Note|yt|+|}}  ==.Галерея_==  &amp;lt;gallery.widths=120px.heights=120px.perrow=4&amp;gt;Изображение:+.jpg|NSFW|&amp;lt;/gallery&amp;gt;&amp;#039;,&lt;br /&gt;
&amp;#039;Категоризация&amp;#039;: &amp;#039;{\{dp|title=+|subtitle=|source=|tags=|lang=}}  {\{mindfuck|object=+|position=|tags=}}  {\{macro|caption=+|source=|tags=|lang=}}&amp;#039;,&lt;br /&gt;
&amp;#039;Интервики&amp;#039;: &amp;#039;[\[&amp;gt;w:{{PAGENAME}}]] [\[&amp;gt;en.w:{{PAGENAME}}]] [\[&amp;gt;ae:{{PAGENAME}}]]&amp;#039;,&lt;br /&gt;
&amp;#039;Лунные руны&amp;#039;: &amp;#039;• ™ ® © · {\{subst:уд}}  Æ æ Ѣ ѣ Ѳ ѳ Ѵ ѵ І і Ї ї Ґ ґ Є є  Ä ä Å Ö ö Ü ü ß  Α α Β β Γ γ Δ δ Ε ε Ζ ζ Λ λ Μ μ Π π Σ σ ς Φ φ Ψ ψ Ω ω  あ です  œ ∂ ∆ ƒ ˚ ¬ ≈ ¡ ∞ ^ ¶ ª º – ≠ — ± ~ ÷&amp;#039;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  charinsertDivider : &amp;quot;\240&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  extraCSS : &amp;#039;\&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;
  &amp;#039;,&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 : &amp;#039;edittoolscharsubset&amp;#039;,&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 = &amp;#039;Click on the character or tag to insert it into the edit window&amp;#039;;&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] += &amp;#039; &amp;#039; + 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(&amp;#039;select&amp;#039;), 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 = &amp;#039;left&amp;#039;;&lt;br /&gt;
     sel.style.marginRight = &amp;#039;5px&amp;#039;;&lt;br /&gt;
     sel.title = &amp;#039;Choose character subset&amp;#039;;&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(&amp;#039;span&amp;#039;);&lt;br /&gt;
    recall.appendChild(document.createTextNode(&amp;#039;↕&amp;#039;)); // ↔&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 = &amp;#039;left&amp;#039;; marginRight = &amp;#039;5px&amp;#039;; cursor = &amp;#039;pointer&amp;#039;; }&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(&amp;#039;p&amp;#039;) ;&lt;br /&gt;
    for (var i=0; i&amp;lt;pp.length; i++)&lt;br /&gt;
       pp[i].style.display = &amp;#039;none&amp;#039;;&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(&amp;#039;p&amp;#039;);&lt;br /&gt;
       p.id = id;&lt;br /&gt;
       if (id == &amp;#039;Arabic&amp;#039; || id == &amp;#039;Hebrew&amp;#039;){ p.style.fontSize = &amp;#039;120%&amp;#039;; p.dir = &amp;#039;rtl&amp;#039;; }&lt;br /&gt;
       EditTools.createTokens(p, EditTools.charinsert[id]);&lt;br /&gt;
       box.appendChild(p);&lt;br /&gt;
    }&lt;br /&gt;
    p.style.display = &amp;#039;inline&amp;#039;;&lt;br /&gt;
     } &lt;br /&gt;
  },&lt;br /&gt;
  createTokens : function (paragraph, str)&lt;br /&gt;
  {&lt;br /&gt;
     var tokens = str.split(&amp;#039; &amp;#039;), 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(&amp;#039;+&amp;#039;);&lt;br /&gt;
    if (token == &amp;#039;&amp;#039; || token == &amp;#039;_&amp;#039;)&lt;br /&gt;
       addText(EditTools.charinsertDivider + &amp;#039; &amp;#039;);&lt;br /&gt;
    else if (token == &amp;#039;\n&amp;#039;)&lt;br /&gt;
       paragraph.appendChild(document.createElement(&amp;#039;br&amp;#039;));&lt;br /&gt;
    else if (token == &amp;#039;___&amp;#039;)&lt;br /&gt;
       paragraph.appendChild(document.createElement(&amp;#039;hr&amp;#039;));&lt;br /&gt;
    else if (token.charAt(token.length-1) == &amp;#039;:&amp;#039;)  // : 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;#039;&amp;lt;/&amp;#039; + 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), &amp;#039;&amp;#039;);&lt;br /&gt;
    else&lt;br /&gt;
       addLink(token, &amp;#039;&amp;#039;);&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(&amp;#039;a&amp;#039;);&lt;br /&gt;
    tagOpen = tagOpen.replace(/\./g,&amp;#039; &amp;#039;);&lt;br /&gt;
    tagClose = tagClose ? tagClose.replace(/_/g,&amp;#039; &amp;#039;) : &amp;#039;&amp;#039;;&lt;br /&gt;
    name = name || tagOpen + tagClose;&lt;br /&gt;
    name = name.replace(/\\n/g,&amp;#039;&amp;#039;);&lt;br /&gt;
    a.appendChild(document.createTextNode(name));&lt;br /&gt;
    a.href = &amp;quot;javascript:insertTags(&amp;#039;&amp;quot; + tagOpen + &amp;quot;&amp;#039;,&amp;#039;&amp;quot; + tagClose + &amp;quot;&amp;#039;,&amp;#039;&amp;#039;)&amp;quot;;&lt;br /&gt;
    paragraph.appendChild(a);&lt;br /&gt;
    addText(&amp;#039; &amp;#039;);&lt;br /&gt;
     }&lt;br /&gt;
     function addBold (text)&lt;br /&gt;
     {&lt;br /&gt;
    var b = document.createElement(&amp;#039;b&amp;#039;);&lt;br /&gt;
    b.appendChild(document.createTextNode(text.replace(/_/g,&amp;#039; &amp;#039;)));&lt;br /&gt;
    paragraph.appendChild(b);&lt;br /&gt;
    addText(&amp;#039; &amp;#039;);&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) != &amp;#039;function&amp;#039; || 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&amp;#039;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&amp;#039;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 (&amp;#039;textarea&amp;#039;);    &lt;br /&gt;
     for (var i = 0; i &amp;lt; texts.length; i++) {&lt;br /&gt;
    addHandler (texts[i], &amp;#039;focus&amp;#039;, EditTools.registerTextField);&lt;br /&gt;
     }&lt;br /&gt;
     // While we&amp;#039;re at it, also enable it for input fields&lt;br /&gt;
     texts = document.getElementsByTagName (&amp;#039;input&amp;#039;);&lt;br /&gt;
     for (var i = 0; i &amp;lt; texts.length; i++) {&lt;br /&gt;
    if (texts[i].type == &amp;#039;text&amp;#039;) addHandler (texts[i], &amp;#039;focus&amp;#039;, 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 (&amp;#039;textarea&amp;#039;);&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;
     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) == &amp;#039; &amp;#039;) { // Exclude ending space char&lt;br /&gt;
       selText = selText.substring (0, selText.length - 1);&lt;br /&gt;
       tagClose += &amp;#039; &amp;#039;;&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( &amp;#039;character&amp;#039;, - tagClose.length - selText.length); &lt;br /&gt;
       range.moveEnd (&amp;#039;character&amp;#039;, - 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 == &amp;#039;0&amp;#039;) { // 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>imported&gt;Gribochek</name></author>
	</entry>
</feed>