User:TheDJ/Edittools.js

From Wikipedia, the free encyclopedia

If a message on your talk page led you here, please be wary of who left it. Code that you insert on this page could contain malicious content capable of compromising your account. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. If this is a .js page, the code will be executed when previewing the page.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
//Commons-style Edittools, see http://www.mediawiki.org/wiki/User_talk:Alex_Smotrov/edittools.js <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 = '·'
 
 
edittools_appendCSS('\
div#edittools-main2 {\
 text-align:center;\
 border:1px solid #aaa;\
 font-size:120%;\
 padding:1px;\
 margin-top:10px;\
}\
div#edittools-main2 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;\
}\
div#edittools-main2 a:hover {\
 background-color: #bbccdd;\
 border: 1px #F0F0F0 inset;\
}')
 
 
createEditTools();
 
 
function createEditTools(){
 //find div#edittools-main2
 var box = document.getElementById('edittools-main2')
 if (!box) return
 box.title = 'Click on the character or tag to insert it into edit window'
 box.appendChild(document.createElement('hr'))
 
 //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 edittools_appendCSS(text) {
	var s = document.createElement('style');
	s.type = 'text/css';
	s.rel = 'stylesheet';
	if (s.styleSheet) s.styleSheet.cssText = text //IE
	else s.appendChild(document.createTextNode(text + '')) //Safari sometimes borks on null
	document.getElementsByTagName('head')[0].appendChild(s);
	return s;
} // edittools_appendCSS </nowiki>