Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Adds a contextual IPA key after the tooltip text in any element which has class=IPA

// modified version of [[User:Nohat/IPA.js]]
// raw script is at /w/index.php?title=User:Mzajac/monobook.js&action=raw&ctype=text/javascript

var IPAkey = new Array();

// consonants
IPAkey["dz"] = "poDS";
IPAkey["ʣ"] = "poDS";
IPAkey["dʒ"] = "riDGe";
IPAkey["ʤ"] = "riDGe";
IPAkey["ɡ"] = "piG";
IPAkey["ʒ"] = "beiGE";
IPAkey["j"] = "Yes";
IPAkey["ŋ"] = "riNG";
IPAkey["ŋɡ"] = "fiNGer";
IPAkey["ɹ"] = "Red";
IPAkey["ʃ"] = "SHoe";
IPAkey["tʃ"] = "CHoose";
IPAkey["θ"] = "THing";
IPAkey["ð"] = "THis";
IPAkey["ʍ"] = "WHat";
IPAkey["hw"] = "WHat";
IPAkey["ʔ"] = "uh-oh";

// vowels
IPAkey["ɑ"] = "spA";
IPAkey["ɑɹ"] = "cAR";
IPAkey["ɒ"] = "rOd";
IPAkey["æ"] = "bAd";
IPAkey["ɔ"] = "lAW";
IPAkey["ɔɹ"] = "nORth";
IPAkey["ə"] = "About";
IPAkey["ɚ"] = "winnER";
IPAkey["ɛ"] = "bEd";
IPAkey["ɝ"] = "shIRt";
IPAkey["ɜr"] = "hER";
IPAkey["i"] = "shE";
IPAkey["ɪ"] = "bIg";
IPAkey["ɨ"] = "rosEs";
IPAkey["ʧ"] = "CHoose";
IPAkey["ʊ"] = "bOOk";
IPAkey["ʊɹ"] = "tOUR";
IPAkey["u"] = "fOOd";
IPAkey["ʌ"] = "rUn";

// diphthongs
IPAkey["aɪ"] = "crY";
IPAkey["aʊ"] = "nOW";
IPAkey["eɪ"] = "mAId";
IPAkey["əʊ"] = "sOAp";
IPAkey["ɔɪ"] = "bOY";
IPAkey["oʊ"] = "sOAp";
IPAkey["ju"] = "cUE";

// regional
IPAkey["ɑ̃"] = "frANglais";
IPAkey["æ̃"] = "biEN";
IPAkey["ɜː"] = "dEUX";
IPAkey["ɔ̃"] = "bON";
IPAkey["x"] = "loCH";


function IPAkeys() {
    var ipaSpans = getElementsByClassName(document, "span", "IPA");
    for (var i = 0; i < ipaSpans.length ; i++) {
        var span = ipaSpans[i];

        var str = IPA_getInnerText(span);
        
        var helpText = '';
        var foundMatches = new Array();

        for (var j = 0; j < str.length; j++) {
            var one = str.charAt(j);
            var two = one + str.charAt(j+1);
            var IPA_match = '';

            if (IPAkey[two]) {
                IPA_match = two;
                j++;
            } else if (IPAkey[one]) {
                IPA_match = one;
            }

            if (IPA_match && !foundMatches[IPA_match] && IPAkey[IPA_match]) {
                if (helpText > '') {
                    helpText += ', ';
                }
                foundMatches[IPA_match] = 1;
                helpText += IPA_match + ' ' + IPAkey[IPA_match];
            }
        }
        if (helpText != '') {
            span.title += ': ' + helpText;
        }
    }
}

function IPA_getInnerText(el) {
    if (typeof el == "string") return el;
    if (typeof el == "undefined") { return el };
    if (el.innerText) return el.innerText;  // Not needed but it is faster
    var str = "";

    var cs = el.childNodes;
    var l = cs.length;
    for (var i = 0; i < l; i++) {
        switch (cs[i].nodeType) {
            case 1: //ELEMENT_NODE
                str += IPA_getInnerText(cs[i]);
                break;
            case 3: //TEXT_NODE
                str += cs[i].nodeValue;
                break;
        }
    }
    return str;
}

$(IPAkeys);