User:Alex Smotrov/edittools.js

From mediawiki.org

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
//<nowiki>
var charinsert = {
'Standard': '[+]  [[+]]  [[+|+]]  {{+}}  – —  “+” ‘+’ «+» ‹+› „+“ ‚+‘  … ~ | ° &nbsp;  ≈ ≠ ≤ ≥ ± − × ÷ ← → ² ³ ½ · § \n [[Category:+]]  [[:Image:+]]  +<includeonly>  +<noinclude>  #REDIRECT[[+]]  {{DEFAULTSORT:+}}',
'Latin': 'ÁáĆćÉéÍíÓóŚśÚúÝýǾǿ  ÀàÈèÌìÒòÙù  ÂâĈĉÊêĜĝĤĥÎîĴĵÔôŝŜÛû  ÄäËëÏïÖöÜüÿ  ÃãÑñÕõ  Å å  Ç ç  Č芚ŭ  Ł ł  ŐőŰű  Ø ø  ĀāĒēĪīŌōŪū  ß  Æ挜  ÐðÞþ|',
'Greek': 'ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ  αάβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώ', 
'IPA': 'ʈɖɟɡɢʡʔ  ɸʃʒɕʑʂʐʝɣʁʕʜʢɦ  ɱɳɲŋɴ  ʋɹɻɰ  ʙʀɾɽ  ɫɬɮɺɭʎʟ  ɥʍɧ  ɓɗʄɠʛ  ʘǀǃǂǁ  ɨʉɯ  ɪʏʊ  ɘɵɤ  ɚ  ɛɜɝɞʌɔ  ɐɶɑɒ  ʰʷʲˠˤⁿˡ  ˈˌːˑ',
'Arabic': 'ابتثجحخدذرزسشصضطظعغفقكلمنهوي  ﺍﺑﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻃﻇﻋﻏﻓﻗﻛﻟﻣﻧﻫﻭﻳ\
  ﺍﺒﺘﺜﺠﺤﺨﺪﺬﺮﺰﺴﺸﺼﻀﻄﻈﻌﻐﻔﻘﻜﻠﻤﻨﻬﻮﻴ  ﺎﺐﺖﺚﺞﺢﺦﺪﺬﺮﺰﺲﺶﺺﺾﻂﻆﻊﻎﻒﻖﻚﻞﻢﻦﻪﻮﻲ\
  ء- ّ- ْ- ً- ِ- آأإةؤئى  پچژگﭪڠ۰۱۲۳٤٥٦٧۸۹',
'Cyrillic': 'АБВГДЂЕЁЖЗЅИЙЈКЛЉМНЊОПРСТЋУФХЦЧЏШЩЪЫЬЭЮЯ  абвгдђеёжзѕийјклљмнњопрстћуфхцчџшщъыьэюя',
'Catalan': 'ÁáÀàÇçÉéÈèËëÍíÏïÓóÒòÖöÚúÙù',
'Czech': 'ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž',
'Devanagari': 'ँ ं ः अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ ऑ ऒ ओ औ क क़ ख ख़ ग ग़ घ ङ च छ ज ज़ झ ञ ट ठ ड ड़ द ढ ढ़ ण त थ ध न ऩ प फ फ़ ब भ म य य़ र ऱ ल ळ ऴ व श ष स ह ़ ऽ ा ि ॊ ो ौ ् ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॐ ॑ ॒ ॓ ॔ ॠ ॡ ॢ ॣ । ॥ ॰',
'Esperanto': 'ĈĉĜĝĤĥĴĵŜŝŬŭ',
'Estonian': 'Č芚ŽžÕõÄäÖöÜü',
'French': 'ÀàÂâÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿ',
'German': 'ÄäÖöÜüß',
'Hawaiian': 'ĀāĒēĪīŌōŪūʻ',
'Hebrew': 'אבגדהוזחטיכךלמםנןסעפףצץקרשת־״׳',
'Hungarian': 'ŐőŰű',
'Icelandic': 'ÁáÐðÉéÍíÓóÚúÝýÞþÆæÖö',
'Italian': 'ÁáÀàÉéÈèÍíÌìÓóÒòÚúÙù',
'Latvian': 'ĀāČčĒēĢģĪīĶķĻļŅņŠšŪūŽž',
'Lithuanian': 'ĄąČčĘęĖėĮįŠšŲųŪūŽž',
'Maltese': 'ĊċĠġĦħŻż',
'Old English': 'ĀāÆæǢǣǼǽĊċÐðĒēĠġĪīŌōŪūǷƿȲȳÞþȜȝ',
'Pinyin': 'ÁáÀàǍǎĀāÉéÈèĚěĒēÍíÌìǏǐĪīÓóÒòǑǒŌōÚúÙùÜüǓǔŪūǗǘǛǜǙǚǕǖ',
'Polish': 'ąĄćĆęĘłŁńŃóÓśŚźŹżŻ',
'Portuguese': 'ÁáÀàÂâÃãÇçÉéÊêÍíÓóÔôÕõÚúÜü',
'Romaji': 'ĀāĒēĪīŌōŪū',
'Romanian': 'ĂăÂâÎŢţ',
'Scandinavian': 'ÀàÉéÅåÆæÄäØøÖö',
'Serbian': 'АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш',
'Spanish': 'ÁáÉéÍíÑñÓóÚúÜü¡¿',
'Turkish': 'ÇçĞğİıÖöŞşÜüÂâÎîÛû',
'Vietnamese': 'ÀàẢảÁáẠạÃãĂăẰằẲẳẴẵẮắẶặÂâẦầẨẩẪẫẤấẬậĐđÈèẺẻẼẽÉéẸẹÊêỀềỂểỄễẾếỆệỈỉĨĩÍíỊịÌìỎỏÓóỌọÒòÕõÔôỒồỔổỖỗỐốỘộƠơỜờỞởỠỡỚớỢợÙùỦủŨũÚúỤụƯưỪừỬửỮữỨứỰựỲỳỶỷỸỹỴỵÝý',
'Welsh': 'ÁáÀàÂâÄäÉéÈèÊêËëÌìÎîÏïÓóÒòÔôÖöÙùÛûẀẁŴŵẄẅÝýỲỳŶŷŸÿ',
'Yiddish': 'א אַ אָ ב בֿ ג ד ה ו וּ װ ױ ז זש ח ט י יִ ײ ײַ כ ך כּ ל ל מ ם נ ן ס ע ע פ פּ פֿ ף צ ץ ק ר ש שׂ תּ ת ׳ ״ ־'
}
var charinsertDivider = '·'


appendCSS('\
.mw-editTools {text-align:center;\
 border:1px solid #aaa;\
 font-size:120%;\
 padding:1px;\
 margin-top:10px;\
}\
.mw-editTools a {\
 color: black !important;\
 background-color: #ccddee;\
 font-weight: bold;\
 font-size: 0.9em;\
 text-decoration: none !important;\
 border: 1px #006699 outset;\
 padding: 0 0.1em 0.1em 0.1em;\
}\
.mw-editTools a:hover {\
 background-color: #bbccdd;\
 border: 1px #F0F0F0 inset;\
}')


createEditTools()


function createEditTools(){

 //find div#mw-editTools
 var box = document.getElementById('wpTextbox1')
 while ((box=box.nextSibling) && box.className!='mw-editTools');
 if (!box) return
 box.title = 'Click on the character or tag to insert it into edit window'

 //append user-defined  sets
 if (window.charinsertCustom)
   for (id in charinsertCustom)
	   if (charinsert[id]) charinsert[id] += ' ' + charinsertCustom[id]
		 else charinsert[id] = charinsertCustom[id]

 //create drop-down select
 var prevSubset = 0, curSubset = 0
 var sel = document.createElement('select'), id
 for (id in charinsert)
   sel.options[sel.options.length] = new Option(id, id)
 sel.style.cssFloat = sel.style.styleFloat = 'left'
 sel.style.marginRight = '5px'
 sel.title = 'Choose character subset'
 sel.onchange = sel.onkeyup = selectSubset
 box.appendChild(sel)
 //create "recall" switch
 if (window.editToolsRecall){
   var recall = document.createElement('span')
   recall.appendChild(document.createTextNode('↕')) //↔
   recall.onclick = function(){ sel.selectedIndex = prevSubset; selectSubset() }
   with (recall.style) { cssFloat = styleFloat = 'left'; marginRight = '5px'; cursor = 'pointer' }
   box.appendChild(recall)
 }
 //show standard set
 selectSubset()
 return

 function selectSubset(){
  //remember previous (for "recall" button)
  prevSubset = curSubset
  curSubset = sel.selectedIndex
  //hide other subsets
	var pp = box.getElementsByTagName('p') 
  for (var i=0; i<pp.length; i++)
    pp[i].style.display = 'none'
  //show/create current subset
  var id = sel.options[curSubset].value
  var p = document.getElementById(id)
  if (!p){
    p = document.createElement('p')
    p.id = id
    if (id == 'Arabic'){ p.style.fontSize = '120%'; p.dir = 'rtl'}
    createTokens(p, charinsert[id])
    box.appendChild(p)
	}
  p.style.display = 'inline'
 } 

}//createEditTools


 
function createTokens(paragraph, str){
 var tokens = str.split(' '), token, i, n
 for (i in tokens) {
   token = tokens[i]
   n = token.indexOf('+')
   if (token == '' || token == '_')
     addText(charinsertDivider + ' ')
   else if (token == '\n')
     paragraph.appendChild(document.createElement('br'))
   else if (token == '___')
     paragraph.appendChild(document.createElement('hr'))
   else if (token.charAt(token.length-1) == ':')  // : at the end means just text
     addBold(token)
   else if (n == 0) // +<tag>  ->   <tag>+</tag>
     addLink(token.substring(1), '</' + token.substring(2), token.substring(1))
   else if (n > 0) // <tag>+</tag>
     addLink(token.substring(0,n), token.substring(n+1))
   else if (token.length > 2 && token.charCodeAt(0) > 127) //a string of insertable characters
     for (var i=0; i < token.length; i++) addLink(token.charAt(i), '')
   else
     addLink(token, '')
  }

 function addLink(tagOpen, tagClose, name){
  var a = document.createElement('a')
  tagOpen = tagOpen.replace(/\./g,' ')
  tagClose = tagClose ? tagClose.replace(/_/g,' ') : ''
  name = name || tagOpen + tagClose
  name = name.replace(/\\n/g,'')
  a.appendChild(document.createTextNode(name))
  a.href = "javascript:insertTags('" + tagOpen + "','" + tagClose + "','')"
  paragraph.appendChild(a)
  addText(' ')
 }       

 function addBold(text){
  var b = document.createElement('b')
  b.appendChild(document.createTextNode(text.replace(/_/g,' ')))
  paragraph.appendChild(b)
  addText(' ')
 }       

 function addText(txt){
  paragraph.appendChild(document.createTextNode(txt))
 }

}//createTokens


function appendCSS(text){
 var s = document.createElement('style')
 s.setAttribute('type', 'text/css')
 if (s.styleSheet) s.styleSheet.cssText = text //IE
 else s.appendChild(document.createTextNode(text))
 document.getElementsByTagName('head')[0].appendChild(s)
 return s
}
//</nowiki>