MediaWiki:Gadget-specialchars.js

La bibliothèque libre.

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
function keycheck() {
	tb = document.getElementById("wpTextbox1");
	if(tb && mw.config.get('wgNamespaceNumber')!=8) {
		tb.onkeyup = function(e) {
			var key = (window.event) ? event.key : e.key;
			var charCode = key.charCodeAt(0); // pour compatibilité sur divers navigateurs
			startPos = tb.selectionStart;
			endPos = tb.selectionEnd;
			if(endPos == startPos && (charCode == 34 || charCode == 39 || (charCode >= 44 && charCode <= 46) || (charCode >= 48 && charCode <= 62) || (charCode >= 65 && charCode <= 90) || charCode == 94 || charCode == 95 || (charCode >= 97 && charCode <= 122)) ) {
				m2 = tb.value.substring(startPos - 2, startPos);
				m3 = tb.value.substring(startPos - 3, startPos);
				m4 = tb.value.substring(startPos - 4, startPos);
				m2_pre = tb.value.substring(startPos - 1, startPos+1);
				f = tb.value.substring(startPos);	
				todo = false;

				// Raccourcis de quatre caractères
				if(!todo) {
					i = 4;
					m = m4; 
					todo = true;
					switch(m) {
            			case "’ ''" : m = "’''"; break;
            			default : todo = false;
					}
				}

				// Raccourcis de trois caractères
				if(!todo) {
					i = 3;
					m = m3; 
					todo = true;
					switch(m) {
						// Ponctuation
            			case "..." : m = "…"; break;
            			case "---" : m = "—"; break;
						// Ligatures et lettres latines exotiques
            			case "a~e" : m = "æ"; break;
            			case "A~E" : m = "Æ"; break;
            			case "o~e" : m = "œ"; break;
            			case "O~E" : m = "Œ"; break;
            			case "s~s" : m = "ß"; break;
            			case "t~h" : m = "þ"; break;
            			case "T~H" : m = "Þ"; break;
            			case "d~h" : m = "ð"; break;
            			case "D~H" : m = "Ð"; break;
            			// Barres horizontales inscrites
            			case "d~-" : m = "đ"; break;
            			case "D~-" : m = "Đ"; break;
            			case "h~-" : m = "ħ"; break;
            			case "H~-" : m = "Ħ"; break;
            			// Barres obliques inscrites
            			case "o~/" : m = "ø"; break;
            			case "O~/" : m = "Ø"; break;
            			case "l~/" : m = "ł"; break;
            			case "L~/" : m = "Ł"; break;
            			// Accents aigus
            			case "a^'" : m = "á"; break;
            			case "A^'" : m = "Á"; break;
            			case "c^'" : m = "ć"; break;
            			case "C^'" : m = "Ć"; break;
            			case "e^'" : m = "é"; break;
            			case "E^'" : m = "É"; break;
            			case "i^'" : m = "í"; break;
            			case "I^'" : m = "Í"; break;
            			case "n^'" : m = "ń"; break;
            			case "N^'" : m = "Ń"; break;
            			case "o^'" : m = "ó"; break;
            			case "O^'" : m = "Ó"; break;
            			case "s^'" : m = "ś"; break;
            			case "S^'" : m = "Ś"; break;
            			case "u^'" : m = "ú"; break;
            			case "U^'" : m = "Ú"; break;
            			case "z^'" : m = "ź"; break;
            			case "Z^'" : m = "Ź"; break;
            			// Accents graves
            			case "a^`" : m = "à"; break;
            			case "A^`" : m = "À"; break;
            			case "e^`" : m = "è"; break;
            			case "E^`" : m = "È"; break;
            			case "i^`" : m = "ì"; break;
            			case "I^`" : m = "Ì"; break;
            			case "o^`" : m = "ò"; break;
            			case "O^`" : m = "Ò"; break;
            			case "u^`" : m = "ù"; break;
            			case "U^`" : m = "Ù"; break;
            			// Trémas
            			case "a^:" : m = "ä"; break;
            			case "A^:" : m = "Ä"; break;
            			case "e^:" : m = "ë"; break;
            			case "E^:" : m = "Ë"; break;
            			case "i^:" : m = "ï"; break;
            			case "I^:" : m = "Ï"; break;
            			case "o^:" : m = "ö"; break;
            			case "O^:" : m = "Ö"; break;
            			case "u^:" : m = "ü"; break;
            			case "U^:" : m = "Ü"; break;
            			case "y^:" : m = "ÿ"; break;
            			case "Y^:" : m = "Ÿ"; break;
            			// Tildes
            			case "a^~" : m = "ã"; break;
            			case "A^~" : m = "Ã"; break;
            			case "e^~" : m = "ẽ"; break;
            			case "E^~" : m = "Ẽ"; break;
            			case "i^~" : m = "ĩ"; break;
            			case "I^~" : m = "Ĩ"; break;
            			case "n^~" : m = "ñ"; break;
            			case "N^~" : m = "Ñ"; break;
            			case "o^~" : m = "õ"; break;
            			case "O^~" : m = "Õ"; break;
            			case "u^~" : m = "ũ"; break;
            			case "U^~" : m = "Ũ"; break;
            			// Circonflexes
            			case "a^^" : m = "â"; break;
            			case "A^^" : m = "Â"; break;
            			case "c^^" : m = "ĉ"; break;
            			case "C^^" : m = "Ĉ"; break;
            			case "e^^" : m = "ê"; break;
            			case "E^^" : m = "Ê"; break;
            			case "g^^" : m = "ĝ"; break;
            			case "G^^" : m = "Ĝ"; break;
            			case "h^^" : m = "ĥ"; break;
            			case "H^^" : m = "Ĥ"; break;
            			case "i^^" : m = "î"; break;
            			case "I^^" : m = "Î"; break;
            			case "j^^" : m = "ĵ"; break;
            			case "J^^" : m = "Ĵ"; break;
            			case "o^^" : m = "ô"; break;
            			case "O^^" : m = "Ô"; break;
            			case "s^^" : m = "ŝ"; break;
            			case "S^^" : m = "Ŝ"; break;
            			case "u^^" : m = "û"; break;
            			case "U^^" : m = "Û"; break;
            			// Carons
            			case "a^v" : m = "ǎ"; break;
            			case "A^v" : m = "Ǎ"; break;
            			case "c^v" : m = "č"; break;
            			case "C^v" : m = "Č"; break;
            			case "d^v" : m = "ď"; break;
            			case "D^v" : m = "Ď"; break;
            			case "e^v" : m = "ě"; break;
            			case "E^v" : m = "Ě"; break;
            			case "g^v" : m = "ǧ"; break;
            			case "G^v" : m = "Ǧ"; break;
            			case "i^v" : m = "ǐ"; break;
            			case "I^v" : m = "Ǐ"; break;
            			case "l^v" : m = "ľ"; break;
            			case "L^v" : m = "Ľ"; break;
            			case "n^v" : m = "ň"; break;
            			case "N^v" : m = "Ň"; break;
            			case "o^v" : m = "ǒ"; break;
            			case "O^v" : m = "Ǒ"; break;
            			case "r^v" : m = "ř"; break;
            			case "R^v" : m = "Ř"; break;
            			case "s^v" : m = "š"; break;
            			case "S^v" : m = "Š"; break;
            			case "t^v" : m = "ť"; break;
            			case "T^v" : m = "Ť"; break;
            			case "u^v" : m = "ǔ"; break;
            			case "U^v" : m = "Ǔ"; break;
            			case "z^v" : m = "ž"; break;
            			case "Z^v" : m = "Ž"; break;
            			// Macrons
            			case "a^_" : m = "ā"; break;
            			case "A^_" : m = "Ā"; break;
            			case "e^_" : m = "ē"; break;
            			case "E^_" : m = "Ē"; break;
            			case "i^_" : m = "ī"; break;
            			case "I^_" : m = "Ī"; break;
            			case "o^_" : m = "ō"; break;
            			case "O^_" : m = "Ō"; break;
            			case "u^_" : m = "ū"; break;
            			case "U^_" : m = "Ū"; break;
            			case "y^_" : m = "ȳ"; break;
            			case "Y^_" : m = "Ȳ"; break;
            			// Brèves
            			case "a^-" : m = "ă"; break;
            			case "A^-" : m = "Ă"; break;
            			case "e^-" : m = "ĕ"; break;
            			case "E^-" : m = "Ĕ"; break;
            			case "g^-" : m = "ğ"; break;
            			case "G^-" : m = "Ğ"; break;
            			case "i^-" : m = "ĭ"; break;
            			case "I^-" : m = "Ĭ"; break;
            			case "o^-" : m = "ŏ"; break;
            			case "O^-" : m = "Ŏ"; break;
            			case "u^-" : m = "ŭ"; break;
            			case "U^-" : m = "Ŭ"; break;
            			// Double accent aigu
            			case "o^" : m = "ő"; break;
            			case "O^" : m = "Ő"; break;
            			case "u^" : m = "ű"; break;
            			case "U^" : m = "Ű"; break;
            			// Ronds en chef
            			case "a^°" : m = "å"; break;
            			case "A^°" : m = "Å"; break;
            			case "u^°" : m = "ů"; break;
            			case "U^°" : m = "Ů"; break;
            			// Points souscrits
            			case "d_." : m = "ḍ"; break;
            			case "D_." : m = "Ḍ"; break;
            			case "h_." : m = "ḥ"; break;
            			case "H_." : m = "Ḥ"; break;
            			case "l_." : m = "ḷ"; break;
            			case "L_." : m = "Ḷ"; break;
            			case "m_." : m = "ṃ"; break;
            			case "M_." : m = "Ṃ"; break;
            			case "n_." : m = "ṇ"; break;
            			case "N_." : m = "Ṇ"; break;
            			case "r_." : m = "ṛ"; break;
            			case "R_." : m = "Ṛ"; break;
            			case "s_." : m = "ṣ"; break;
            			case "S_." : m = "Ṣ"; break;
            			case "t_." : m = "ṭ"; break;
            			case "T_." : m = "Ṭ"; break;
            			case "z_." : m = "ẓ"; break;
            			case "Z_." : m = "Ẓ"; break;
            			// Cédilles et virgules souscrites
            			case "c_z" : m = "ç"; break;
            			case "C_z" : m = "Ç"; break;
            			case "c_," : m = "ç"; break;
            			case "C_," : m = "Ç"; break;
            			case "d_," : m = "ḑ̦"; break;
            			case "D_," : m = "Ḑ̦"; break;
            			case "k_," : m = "ķ"; break;
            			case "K_," : m = "Ķ"; break;
            			case "l_," : m = "ļ"; break;
            			case "L_," : m = "Ļ"; break;
            			case "n_," : m = "ņ"; break;
            			case "N_," : m = "Ņ"; break;
            			case "r_," : m = "ŗ"; break;
            			case "R_," : m = "Ŗ"; break;
            			case "s_," : m = "ş"; break;
            			case "S_," : m = "Ş"; break;
            			case "t_," : m = "ţ"; break;
            			case "T_," : m = "Ţ"; break;
            			// Ogoneks
            			case "a_;" : m = "ą"; break;
            			case "A_;" : m = "Ą"; break;
            			case "e_;" : m = "ę"; break;
            			case "E_;" : m = "Ę"; break;
            			case "i_;" : m = "į"; break;
            			case "I_;" : m = "Į"; break;
            			case "u_;" : m = "ų"; break;
            			case "U_;" : m = "Ų"; break;
            			// Macrons souscrits
            			case "d__" : m = "ḏ"; break;
            			case "D__" : m = "Ḏ"; break;
            			case "t__" : m = "ṯ"; break;
            			case "T__" : m = "Ṯ"; break;
            			// Brèves souscrites
            			case "h_-" : m = "ḫ"; break;
            			case "H_-" : m = "Ḫ"; break;
            			
            			default : todo = false;
					}
				}

				// Raccourcis de deux caractères
				if(!todo) {
					i = 2;
					m = m2;
					todo = true; 
					switch(m) {
						// Ponctuation
            			case "<<" : m = "«"; break;
            			case ">>" : m = "»"; break;
            			// Lettres additionnelles
						case "^s" : m = "ſ"; break;
            			case "^0" : m = "⁰"; break;
            			case "^1" : m = "¹"; break;
            			case "^2" : m = "²"; break;
            			case "^3" : m = "³"; break;
            			case "^4" : m = "⁴"; break;
            			case "^5" : m = "⁵"; break;
            			case "^6" : m = "⁶"; break;
            			case "^7" : m = "⁷"; break;
            			case "^8" : m = "⁸"; break;
            			case "^9" : m = "⁹"; break;
						default : todo = false;
					}
				}

				// Apostrophes courbes automatiques
				if(!todo) {
					i = 2;
					m = m2;
					if(m[1] == "'") {
						if(m[0] == "’")
							m = "''"; 
						else if(m[0] != "'" && m[0] != "^" && m[0] != " " && m2_pre != "''")
							m = m[0] + "’";
						todo = true;
					}
					else if(m == "’’") {
						m = "''";
						todo = true;
					}
				}

				if(todo) {
					var textScroll = tb.scrollTop;
					h = tb.value.substring(0, startPos - i);
					tb.value = h + m + f;
					tb.selectionStart = startPos - i + m.length;
					tb.selectionEnd = tb.selectionStart;
					tb.scrollTop = textScroll;
				}
			}
		};
	}
}

$(document).ready(keycheck);