User:Mike Dillon/Scripts/edittools.js

/*

 */

// XXX: This should be in a regular CSS file

(function () {

var head = document.getElementsByTagName("head")[0];

if (head) {

var style = document.createElement("style");

style.setAttribute("type", "text/css")

style.appendChild(document.createTextNode(

"div#edittools_main {" +

" font-size: inherit;" +

" border-bottom: 1px solid #aaa;" +

"}" +

"div.edittools-group {" +

" font-size: smaller;" +

"}"

));

head.appendChild(style);

}

})();

function EdittoolsGroup(name, label) {

this.label = label || name;

this.elements = [];

function addElement(group, type, e) {

group.elements[group.elements.length] = [ type, e ];

return group;

}

this.addLabel = function (label) {

var b = document.createElement("b");

b.appendChild(document.createTextNode(label));

return addElement(this, "label", b);

};

this.addInsert = function (open, close, sample) {

if (!open) open = '';

if (!close) close = '';

if (!sample) sample = '';

var display = open + close;

if (display.match(/^[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/)) {

display = "\u034F" + display;

}

var a = document.createElement("a");

a.setAttribute("href", "#");

a.setAttribute("title", "Insert text: " + display);

a.appendChild(document.createTextNode(display));

a.onclick = function () {

insertTags(open, close, sample);

return false;

};

return addElement(this, "insert", a);

};

this.addInsertList = function (chars) {

if (!chars) return;

var list = chars.split(/\s+/);

for (var n in list) {

if (list[n] != '') this.addInsert(list[n]);

}

return this;

};

this.addGap = function () {

return addElement(this, "gap", document.createTextNode("\xA0"));

};

this.addBullet = function () {

return addElement(this, "bullet", document.createTextNode("\xA0•\xA0"));

};

this.addWikiLink = function (page, label) {

var parts = page.split(/#/, 2);

var url = wgArticlePath.replace(/\$1/, encodeURIComponent(parts[0]));

if (parts[1]) {

url += "#" + encodeURIComponent(parts[1]).replace(/%/g, ".");

}

var a = document.createElement("a");

a.setAttribute("href", url);

a.setAttribute("title", page.replace(/_/g, " "));

a.appendChild(document.createTextNode(label || page));

var span = document.createElement("span");

span.appendChild(document.createTextNode("("));

span.appendChild(a);

span.appendChild(document.createTextNode(")"));

return addElement(this, "link", span);

};

}

var Edittools = new function () {

this.style = "full";

this.clear = true;

this.groups = {};

this.createGroup = function (name, label) {

if (!this.groups[name]) {

this.groups[name] = new EdittoolsGroup(name, label);

}

return this.groups[name];

};

this.getGroup = function (name) {

return this.groups[name];

};

this.removeGroup = function (name) {

delete this.groups[name];

};

this.removeAllGroups = function () {

this.groups = {};

};

this.install = function (container) {

if (container && container.nodeType == null) {

container = document.getElementById(container);

}

if (!container) return;

if (this.clear) {

while (container.firstChild) container.removeChild(container.firstChild);

}

var groupEls = {};

if (this.style == 'compact') {

var select = document.createElement("select");

select.onchange = function () {

var sel = this.options[this.selectedIndex].value;

for (var name in groupEls) {

groupEls[name].style.display = (name == sel) ? "inline" : "none";

}

};

container.appendChild(select);

container.appendChild(document.createTextNode(" "));

}

var first = true;

var elType = (this.style == 'compact') ? "span" : "div";

for (var name in this.groups) {

var group = this.groups[name];

if (this.style == 'compact') {

var opt = document.createElement("option");

opt.setAttribute("value", name);

opt.appendChild(document.createTextNode(group.label));

select.appendChild(opt);

}

var groupEl = document.createElement(elType);

groupEl.setAttribute("id", "edittools_" + name);

groupEl.setAttribute("class", "edittools-group");

if (!first && this.style == 'compact') {

groupEl.setAttribute("style", "display: none");

}

for (var n in group.elements) {

var element = group.elements[n];

if (element[0] == 'label' && this.style == 'compact') continue;

if (groupEl.childNodes.length) {

groupEl.appendChild(document.createTextNode(" "));

}

groupEl.appendChild(element[1]);

}

container.appendChild(groupEl);

groupEls[name] = groupEl;

first = false;

}

};

};

with (Edittools) {

// Main group

var main = createGroup("main", "Standard");

with (main) {

addLabel("Insert:");

addInsertList("– — … ° ≈ ≠ ≤ ≥ ± − × ÷ ← → · §").addGap();

addLabel("Sign your username:");

addInsert("~~" + "~~");

}

// Wiki markup

var wikimarkup = createGroup("wikimarkup", "Wiki markup");

with (wikimarkup) {

addLabel("Wiki markup:");

addInsert("{{", "}}").addGap();

addInsert("|").addGap();

addInsert("[", "]").addGap();

addInsert("", "").addGap();

addInsert("Category:", "").addGap();

addInsert("#REDIRECT", "").addGap();

addInsert("", "").addGap();

addInsert("", "").addGap();

addInsert("", "").addGap();

addInsert("", "").addGap();

addInsert("

", "
").addGap();

addInsert("", "").addGap();

addInsert("{{Reflist}}").addGap();

addInsert("").addGap();

addInsert("", "").addGap();

addInsert("", "").addGap();

addInsert("{{DEFAULTSORT:", "}}").addGap();

addInsert("", "").addGap();

addInsert("").addGap();

addInsert("", "");

addBullet();

addWikiLink("Wikipedia:Template messages", "templates");

}

// Symbols

var symbols = createGroup("symbols", "Symbols");

with (symbols) {

addLabel("Symbols:");

addInsertList("~ | ¡ ¿ † ‡ ↔ ↑ ↓ • ¶").addGap();

addInsertList("# ¹ ² ³ ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞ ∞").addGap();

addInsertList("‘ “ ’ ”").addGap();

addInsertList("¤ ₳ ฿ ₵ ¢ ₡ ₢ $ ₫ ₯ € ₠ ₣ ƒ ₴ ₭ ₤ ℳ ₥ ₦ ₧ ₰");

addInsertList("£ ៛ ₨ ₪ ৳ ₮ ₩ ¥").addGap();

addInsertList("♠ ♣ ♥ ♦");

}

// Characters

var characters = createGroup("characters", "Characters");

with (characters) {

addLabel("Characters:");

addInsertList("Á á Ć ć É é Í í Ĺ ĺ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź").addGap();

addInsertList("À à È è Ì ì Ò ò Ù ù").addGap();

addInsertList("Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û Ŵ ŵ Ŷ ŷ").addGap();

addInsertList("Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ").addGap();

addInsertList("ß").addGap();

addInsertList("Ã ã Ẽ ẽ Ĩ ĩ Ñ ñ Õ õ Ũ ũ Ỹ ỹ").addGap();

addInsertList("Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ").addGap();

addInsertList("Đ đ").addGap();

addInsertList("Ů ů").addGap();

addInsertList("Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž").addGap();

addInsertList("Ā ā Ē ē Ī ī Ō ō Ū ū Ȳ ȳ Ǣ ǣ").addGap();

addInsertList("ǖ ǘ ǚ ǜ").addGap();

addInsertList("Ă ă Ĕ ĕ Ğ ğ Ĭ ĭ Ŏ ŏ Ŭ ŭ").addGap();

addInsertList("Ċ ċ Ė ė Ġ ġ İ ı Ż ż").addGap();

addInsertList("Ą ą Ę ę Į į Ǫ ǫ Ų ų").addGap();

addInsertList("Ḍ ḍ Ḥ ḥ Ḷ ḷ Ḹ ḹ Ṃ ṃ Ṇ ṇ Ṛ ṛ Ṝ ṝ Ṣ ṣ Ṭ ṭ").addGap();

addInsertList("Ł ł").addGap();

addInsertList("Ő ő Ű ű").addGap();

addInsertList("Ŀ ŀ").addGap();

addInsertList("Ħ ħ").addGap();

addInsertList("Ð ð Þ þ").addGap();

addInsertList("Œ œ").addGap();

addInsertList("Æ æ Ø ø Å å").addGap();

addInsertList("Ə ə");

addBullet();

addInsert("{{Unicode|", "}}");

}

// Greek

var greek = createGroup("greek", "Greek");

with (greek) {

addLabel("Greek:");

addInsertList("Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ").addGap();

addInsertList("Α α Β β Γ γ Δ δ").addGap();

addInsertList("Ε ε Ζ ζ Η η Θ θ").addGap();

addInsertList("Ι ι Κ κ Λ λ Μ μ").addGap();

addInsertList("Ν ν Ξ ξ Ο ο Π π").addGap();

addInsertList("Ρ ρ Σ σ ς Τ τ Υ υ").addGap();

addInsertList("Φ φ Χ χ Ψ ψ Ω ω").addGap();

addInsertList("");

addBullet();

addInsert("{{Polytonic|", "}}");

addBullet();

addWikiLink("Polytonic_orthography#Examples_of_polytonic_characters", "polytonic");

}

// Cyrillic

var cyrillic = createGroup("cyrillic", "Cyrillic");

with (cyrillic) {

addLabel("Cyrillic:");

addInsertList("А а Б б В в Г г").addGap();

addInsertList("Ґ ґ Ѓ ѓ Д д Ђ ђ").addGap();

addInsertList("Е е Ё ё Є є Ж ж").addGap();

addInsertList("З з Ѕ ѕ И и І і").addGap();

addInsertList("Ї ї Й й Ј ј К к").addGap();

addInsertList("Ќ ќ Л л Љ љ М м").addGap();

addInsertList("Н н Њ њ О о П п").addGap();

addInsertList("Р р С с Т т Ћ ћ").addGap();

addInsertList("У у Ў ў Ф ф Х х").addGap();

addInsertList("Ц ц Ч ч Џ џ Ш ш").addGap();

addInsertList("Щ щ Ъ ъ Ы ы Ь ь").addGap();

addInsertList("Э э Ю ю Я я");

}

// IPA

var ipa = createGroup("ipa", "IPA");

with (ipa) {

addLabel("IPA:");

addInsertList("t̪ d̪ ʈ ɖ ɟ ɡ ɢ ʡ ʔ").addGap();

addInsertList("ɸ ʃ ʒ ɕ ʑ ʂ ʐ ʝ ɣ ʁ ʕ ʜ ʢ ɦ").addGap();

addInsertList("ɱ ɳ ɲ ŋ ɴ").addGap();

addInsertList("ʋ ɹ ɻ ɰ").addGap();

addInsertList("ʙ ʀ ɾ ɽ").addGap();

addInsertList("ɫ ɬ ɮ ɺ ɭ ʎ ʟ").addGap();

addInsertList("ɥ ʍ ɧ").addGap();

addInsertList("ɓ ɗ ʄ ɠ ʛ").addGap();

addInsertList("ʘ ǀ ǃ ǂ ǁ").addGap();

addInsertList("ɨ ʉ ɯ").addGap();

addInsertList("ɪ ʏ ʊ").addGap();

addInsertList("ɘ ɵ ɤ").addGap();

addInsertList("ə ɚ").addGap();

addInsertList("ɛ ɜ ɝ ɞ ʌ ɔ").addGap();

addInsertList("ɐ ɶ ɑ ɒ").addGap();

addInsertList("ʰ ʷ ʲ ˠ ˤ ⁿ ˡ").addGap();

addInsertList("ˈ ˌ ː ˑ ̪");

addBullet();

addInsert("{{IPA|", "}}");

}

}

addOnloadHook(function () {

Edittools.install("editpage-specialchars");

});

/*

*/