<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-charinsert-core.js</id>
	<title>MediaWiki:Gadget-charinsert-core.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-charinsert-core.js"/>
	<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;action=history"/>
	<updated>2026-04-08T07:16:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://pool.calebcooper.ie/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=10086&amp;oldid=prev</id>
		<title>Caleb Cooper: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=10086&amp;oldid=prev"/>
		<updated>2020-01-28T15:04:26Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&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;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:04, 28 January 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Caleb Cooper</name></author>
	</entry>
	<entry>
		<id>https://pool.calebcooper.ie/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=10085&amp;oldid=prev</id>
		<title>powerstorewiki&gt;Caleb Cooper: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=MediaWiki:Gadget-charinsert-core.js&amp;diff=10085&amp;oldid=prev"/>
		<updated>2020-01-21T18:20:59Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Copied from [[mw:User:Alex Smotrov/edittools.js]], modified for use on the English Wikipedia.&lt;br /&gt;
 *&lt;br /&gt;
 * Configuration (to be set from [[Special:MyPage/common.js]]):&lt;br /&gt;
 *   window.charinsertCustom – Object. Merged into the default charinsert list. For example, setting&lt;br /&gt;
 *       this to { Symbols: &amp;#039;‽&amp;#039; } will add the interrobang to the end of the Symbols section.&lt;br /&gt;
 *   window.editToolsRecall – Boolean. Set true to create a recall switch.&lt;br /&gt;
 *   window.charinsertDontMove – Boolean. Set true to leave the box in its default position, rather&lt;br /&gt;
 *       than moving it above the edit summary.&lt;br /&gt;
 *   window.updateEditTools() – Function. Call after updating window.charinsertCustom to regenerate the&lt;br /&gt;
 *       EditTools window.&lt;br /&gt;
 */&lt;br /&gt;
/* global jQuery, mw, charinsertCustom */&lt;br /&gt;
&lt;br /&gt;
window.updateEditTools = function () {&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
jQuery( document ).ready( function ( $ ) {&lt;br /&gt;
	var $currentFocused,&lt;br /&gt;
		editTools;&lt;br /&gt;
&lt;br /&gt;
    function getSelectedSection() {&lt;br /&gt;
		var selectedSection = mw.storage.get( editTools.storageKey )&lt;br /&gt;
			|| mw.storage.session.get( editTools.storageKey );&lt;br /&gt;
		&lt;br /&gt;
		return selectedSection;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function saveSelectedSection( newIndex ) {&lt;br /&gt;
		mw.storage.set( editTools.storageKey, newIndex )&lt;br /&gt;
			|| mw.storage.session.set( editTools.storageKey, newIndex );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    editTools = {&lt;br /&gt;
        // Entries prefixed with ␥ (U+2425 SYMBOL FOR DELETE FORM TWO) will not appear in the article namespace (namespace 0).&lt;br /&gt;
        // Please make any changes to [[MediaWiki:Edittools]] as well, however, instead of using the ␥ symbol, use {{#ifeq:{{NAMESPACE}}|{{ns:0}}| | }}.&lt;br /&gt;
        charinsert: {&lt;br /&gt;
            &amp;#039;Insert&amp;#039;: &amp;#039; – — ° ′ ″ ≈ ≠ ≤ ≥ ± − × ÷ ← → · §  ␥Sign_your_posts_on_talk_pages: ␥~~\~~  Cite_your_sources: &amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;Wiki markup&amp;#039;: &amp;#039;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;nb&amp;quot;|name=&amp;quot;&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;&amp;#039;,&lt;br /&gt;
            &amp;#039;Symbols&amp;#039;: &amp;#039;~ | ¡¿†‡↔↑↓•¶#∞  ‘+’ “+” ‹+› «+» {\{angle.bracket|+}}  ¤₳฿₵¢₡₢$₫₯€₠₣ƒ₴₭₤ℳ₥₦№₧₰£៛₨₪৳₮₩¥  ♠♣♥♦  ♭♯♮  ©®™ ◌&amp;#039;,&lt;br /&gt;
            &amp;#039;Latin&amp;#039;: &amp;#039;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 Ź ź Ż ż Ž ž  ß Ð ð Þ þ Ŋ ŋ Ə ə Ɂ ɂ  Ꞌ ꞌ  ʻ  ʼ  ʽ  ꞉ ꞏ&amp;#039;,	&lt;br /&gt;
            &amp;#039;Greek&amp;#039;: &amp;#039;ΆάΈέΉήΊίΌόΎύΏώ  ΑαΒβΓγΔδ  ΕεΖζΗηΘθ  ΙιΚκΛλΜμ  ΝνΞξΟοΠπ  ΡρΣσςΤτΥυ  ΦφΧχΨψΩω Ϝϝυ̯ι̯  ᾼᾳᾴᾺὰᾲᾶᾷἈἀᾈᾀἉἁᾉᾁἌἄᾌᾄἊἂᾊᾂἎἆᾎᾆἍἅᾍᾅἋἃᾋᾃἏἇᾏᾇ  ῈὲἘἐἙἑἜἔἚἒἝἕἛἓ  ῌῃῄῊὴῂῆῇἨἠᾘᾐἩἡᾙᾑἬἤᾜᾔἪἢᾚᾒἮἦᾞᾖἭἥᾝᾕἫἣᾛᾓἯἧᾟᾗ  ῚὶῖἸἰἹἱἼἴἺἲἾἶἽἵἻἳἿἷΪϊΐῒῗ  ῸὸὈὀὉὁὌὄὊὂὍὅὋὃ  ῤῬῥ  ῪὺῦὐὙὑὔὒὖὝὕὛὓὟὗΫϋΰῢῧ  ῼῳῴῺὼῲῶῷὨὠᾨᾠὩὡᾩᾡὬὤᾬᾤὪὢᾪᾢὮὦᾮᾦὭὥᾭᾥὫὣᾫᾣὯὧᾯᾧ ᾹᾱᾸᾰῙῑῘῐῩῡῨῠ {{lang|el|+}} {{lang|grc|+}}&amp;#039;,&lt;br /&gt;
            &amp;#039;Cyrillic&amp;#039;: &amp;#039;АаБбВвГг  ҐґЃѓДдЂђ  ЕеЁёЄєЖж  ЗзЅѕИиІі  ЇїЙйЈјКк  ЌќЛлЉљМм  НнЊњОоПп  РрСсТтЋћ  УуЎўФфХх  ЦцЧчЏџШш  ЩщЪъЫыЬь  ЭэЮюЯя ӘәӨөҒғҖҗ ҚқҜҝҢңҮү ҰұҲҳҸҹҺһ  ҔҕӢӣӮӯҘҙ  ҠҡҤҥҪҫӐӑ  ӒӓӔӕӖӗӰӱ  ӲӳӸӹӀ  ҞҟҦҧҨҩҬҭ  ҴҵҶҷҼҽҾҿ  ӁӂӃӄӇӈӋӌ  ӚӛӜӝӞӟӠӡ  ӤӥӦӧӪӫӴӵ  ́&amp;#039;,&lt;br /&gt;
            &amp;#039;Hebrew&amp;#039;: &amp;#039;אבגדהוזחטיכךלמםנןסעפףצץקרשת  ׳ ״  װױײ&amp;#039;,&lt;br /&gt;
            &amp;#039;Arabic&amp;#039;: &amp;#039;  Transliteration: ʾ  ā ī ū ṯ ḥ ḫ ẖ ḏ š ṣ ḍ ṭ ẓ ʿ ġ ẗ á ا ﺁ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه ة و ي ى ء أ إ ؤ ئ&amp;#039;,&lt;br /&gt;
            &amp;#039;IPA (English)&amp;#039;: &amp;#039;ˈ ˌ  ŋ ɡ tʃ dʒ ʃ ʒ θ ð ʔ  ɑː ɒ æ aɪ aʊ ɛ ɛər+ eɪ ɪ ɪər+ iː ɔː ɔɪ oʊ ʊ ʊər+ uː ʌ ɜːr+  ə ər  ɒ̃ æ̃  {\{IPAc-en|+}} {\{IPA|+}} {\{angle.bracket|+}}&amp;#039;,&lt;br /&gt;
            &amp;#039;IPA&amp;#039;: &amp;#039;Consonants: ɱɳɲŋɴ : t̪ d̪ ʈɖɟɡɢʡʔ : ɸβθð  ʃʒʂʐɕʑ  çʝɣχʁ  ħʕʜʢɦɧ : ʋɹɻɥɰʍ : ʙⱱɾɽʀ  ɺ  ɫɬɮɭʎʟ : ɓɗᶑʄɠʛ  ʘǀǃǂǁ  Vowels: ɪʏɨʉɯʊ : øɘɵɤ  ə ɚ  ɛœɜɝɞʌɔ : æɶɐɑɒ  Spacing_diacritics: ˈˌːˑʼˀˤᵝᵊᶢˠʰʱʲˡⁿᵑʷᶣ˞‿˕˔  Combining_diacritics: ̚ ̪ ̺ ̻ ̼ ̬  ̊ ̥ ̞ ̝ ̘ ̙ ̽ ̟ ̠  ̈ ̤ ̹ ̜ ̍ ̩  ̆ ̯  ̃ ̰ ͡ ͜  Tone:  ̋  ́  ̄  ̀  ̏  ̌  ̂ ᷄ ᷅ ᷇ ᷆ ᷈ ᷉  ˥˦˧˨˩ꜛꜜ : ↗↘‖  extIPA: ͈ ͉ ͎ ̣ ̫ ͊ ᷽ ͇ : ˭ᵻᵿ  {\{angle.bracket|+}} {\{IPA|+}} {\{IPA.link|+}}&amp;#039;,&lt;br /&gt;
            &amp;#039;Math and logic&amp;#039;: &amp;#039;− × ÷ ⋅ ° ∗ ∘ ± ∓ ≤ ≥ ≠ ≡ ≅ ≜ ≝ ≐ ≃ ≈ ⊕ ⊗ ⇐ ⇔ ⇒ ∞ ← ↔ → ≪ ≫ ∝ √ ∤ ≀ ◅ ▻ ⋉ ⋊ ⋈ ∴ ∵ ↦ ¬ ∧ ∨ ⊻ ∀ ∃ ∈ ∉ ∋ ⊆ ⊈ ⊊ ⊂ ⊄ ⊇ ⊉ ⊋ ⊃ ⊅ ∪ ∩ ∑ ∏ ∐ ′ ∫ ∬ ∭ ∮ ∇ ∂ ∆ ∅ ℂ ℍ ℕ ℙ ℚ ℝ ℤ ℵ ⌊ ⌋ ⌈ ⌉ ⊤ ⊥ ⊢ ⊣ ⊧ □ ∠ ⟨ ⟩ &amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt; {\{math|+}} {\{mvar|+}} {\{frac|+|}} {\{sfrac|+|}}&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
&lt;br /&gt;
        charinsertDivider: &amp;quot;\240&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
        storageKey: &amp;#039;edittoolscharsubset&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
        createEditTools: function ( placeholder ) {&lt;br /&gt;
            var sel, id;&lt;br /&gt;
            var box = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
            var prevSubset = 0, curSubset = 0;&lt;br /&gt;
            box.id = &amp;#039;editpage-specialchars&amp;#039;;&lt;br /&gt;
            box.className = &amp;quot;nopopups&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] ) {&lt;br /&gt;
                        editTools.charinsert[id] = &amp;#039;&amp;#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // create drop-down select&lt;br /&gt;
            sel = document.createElement( &amp;#039;select&amp;#039; );&lt;br /&gt;
            for ( id in editTools.charinsert ) {&lt;br /&gt;
                sel.options[sel.options.length] = new Option( id, id );&lt;br /&gt;
            }&lt;br /&gt;
            sel.selectedIndex = 0;&lt;br /&gt;
            sel.style.marginRight = &amp;#039;.3em&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;
                recall.style.cssFloat = &amp;#039;left&amp;#039;;&lt;br /&gt;
                recall.style.marginRight = &amp;#039;5px&amp;#039;;&lt;br /&gt;
                recall.style.cursor = &amp;#039;pointer&amp;#039;;&lt;br /&gt;
                box.appendChild( recall );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
			if ( getSelectedSection() ) {&lt;br /&gt;
				sel.selectedIndex = getSelectedSection();&lt;br /&gt;
			}&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;
                // 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 web storage for persistence&lt;br /&gt;
                saveSelectedSection( curSubset );&lt;br /&gt;
                &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;
                }&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.className = &amp;#039;nowraplinks&amp;#039;;&lt;br /&gt;
                    p.id = id;&lt;br /&gt;
                    if ( id == &amp;#039;Arabic&amp;#039; || id == &amp;#039;Hebrew&amp;#039; ) {&lt;br /&gt;
                        p.style.fontSize = &amp;#039;120%&amp;#039;;&lt;br /&gt;
                        p.dir = &amp;#039;rtl&amp;#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                    var tokens = editTools.charinsert[id];&lt;br /&gt;
                    if ( window.charinsertCustom &amp;amp;&amp;amp; charinsertCustom[id] ) {&lt;br /&gt;
                        if ( tokens.length &amp;gt; 0 ) {&lt;br /&gt;
                            tokens += &amp;#039; &amp;#039;;&lt;br /&gt;
                        }&lt;br /&gt;
                        tokens += charinsertCustom[id];&lt;br /&gt;
                    }&lt;br /&gt;
                    editTools.createTokens( p, tokens );&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;
&lt;br /&gt;
        createTokens: function ( paragraph, str ) {&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.charAt( 0 ) === &amp;#039;␥&amp;#039; ) {&lt;br /&gt;
                    if ( token.length &amp;gt; 1 &amp;amp;&amp;amp; mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; ) === 0 ) {&lt;br /&gt;
                        continue;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        token = token.substring( 1 );&lt;br /&gt;
                    }&lt;br /&gt;
                }&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++ ) {&lt;br /&gt;
                        addLink( token.charAt( j ), &amp;#039;&amp;#039; );&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    addLink( token, &amp;#039;&amp;#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
            function addLink( tagOpen, tagClose, name ) {&lt;br /&gt;
                var handler;&lt;br /&gt;
                var dle = tagOpen.indexOf( &amp;#039;\x10&amp;#039; );&lt;br /&gt;
                var a = document.createElement( &amp;#039;a&amp;#039; );&lt;br /&gt;
                &lt;br /&gt;
                if ( dle &amp;gt; 0 ) {&lt;br /&gt;
                    var path = tagOpen.substring( dle + 1 ).split( &amp;#039;.&amp;#039; );&lt;br /&gt;
                    tagOpen = tagOpen.substring( 0, dle );&lt;br /&gt;
                    handler = window;&lt;br /&gt;
                    for ( var i = 0; i &amp;lt; path.length; i++ ) {&lt;br /&gt;
                        handler = handler[path[i]];&lt;br /&gt;
                    }&lt;br /&gt;
	                $( a ).on( &amp;#039;click&amp;#039;, handler );&lt;br /&gt;
                } else {&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;
                    $( a ).on( &amp;#039;click&amp;#039;, {&lt;br /&gt;
                    	tagOpen: tagOpen,&lt;br /&gt;
                    	sampleText: &amp;#039;&amp;#039;,&lt;br /&gt;
                    	tagClose: tagClose&lt;br /&gt;
                    }, insertTags );&lt;br /&gt;
                }&lt;br /&gt;
&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;#039;&amp;#039;;&lt;br /&gt;
                paragraph.appendChild( a );&lt;br /&gt;
                addText( &amp;#039; &amp;#039; );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function addBold( text ) {&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;
                paragraph.appendChild( document.createTextNode( txt ) );&lt;br /&gt;
            }&lt;br /&gt;
            function insertTags( e ) {&lt;br /&gt;
            	e.preventDefault();&lt;br /&gt;
            	if ( $currentFocused &amp;amp;&amp;amp; $currentFocused.length &amp;amp;&amp;amp; !$currentFocused.prop( &amp;#039;readonly&amp;#039; ) ) {&lt;br /&gt;
					$currentFocused.textSelection(&lt;br /&gt;
						&amp;#039;encapsulateSelection&amp;#039;, {&lt;br /&gt;
							pre: e.data.tagOpen,&lt;br /&gt;
							peri: e.data.sampleText,&lt;br /&gt;
							post: e.data.tagClose&lt;br /&gt;
						}&lt;br /&gt;
					);&lt;br /&gt;
				}&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
&lt;br /&gt;
        setup: function () {&lt;br /&gt;
            var placeholder;&lt;br /&gt;
            if ( $( &amp;#039;#editpage-specialchars&amp;#039; ).length ) {&lt;br /&gt;
                placeholder = $( &amp;#039;#editpage-specialchars&amp;#039; )[0];&lt;br /&gt;
            } else {&lt;br /&gt;
                placeholder = $( &amp;#039;&amp;lt;div id=&amp;quot;editpage-specialchars&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;#039; ).prependTo( &amp;#039;.mw-editTools&amp;#039; )[0];&lt;br /&gt;
            }&lt;br /&gt;
            if ( !placeholder ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( !window.charinsertDontMove ) {&lt;br /&gt;
                $( &amp;#039;.editOptions&amp;#039; ).before( placeholder );&lt;br /&gt;
            }&lt;br /&gt;
            // Find the element that is focused&lt;br /&gt;
            $currentFocused = $( &amp;#039;#wpTextbox1&amp;#039; );&lt;br /&gt;
            // Apply to dynamically created textboxes as well as normal ones&lt;br /&gt;
			$( document ).on( &amp;#039;focus&amp;#039;, &amp;#039;textarea, input:text&amp;#039;, function () {&lt;br /&gt;
				$currentFocused = $( this );&lt;br /&gt;
			} );&lt;br /&gt;
&lt;br /&gt;
			// Used to determine where to insert tags&lt;br /&gt;
            editTools.createEditTools( placeholder );&lt;br /&gt;
            window.updateEditTools = function () {&lt;br /&gt;
                editTools.createEditTools( $( &amp;#039;#editpage-specialchars&amp;#039; )[0] );&lt;br /&gt;
            };&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }; // end editTools&lt;br /&gt;
&lt;br /&gt;
    editTools.setup();&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>powerstorewiki&gt;Caleb Cooper</name></author>
	</entry>
</feed>