User:Cryptic/smiley.js

// var smiley = new Array ( //        regexp               image name   location width height new Array("[:=]\\)|:-\\)",     "Smile.png",    "2/26", 20, 20), new Array("[:=]D|:-D",         "Teeth.png",    "7/72", 22, 22), new Array("[:=]\\(|:-\\(",     "Sad.png",      "d/d8", 20, 20), new Array(";-?[)D]",           "Smile_eye.png","9/94", 20, 20), new Array("[:=][pP]|:-[pP]",  "Tongue.png",   "c/c4", 22, 22), new Array("[:=]'\\(|:'-\\(",  "Cry.png",      "d/d8", 22, 22), new Array("8-?[)D]",          "Shade.png",    "d/dc", 22, 22) );

function smileys { var i;  for (i = 0; i < smiley.length; ++i) {     smiley[i].push(new RegExp("^(" + smiley[i][0] + ")$")); smiley[i].push(new RegExp("\\W(" + smiley[i][0] + ")$")); smiley[i].push(new RegExp("^(" + smiley[i][0] + ")\\W")); smiley[i].push(new RegExp("\\W(" + smiley[i][0] + ")\\W")); } add_smileys(document); }

function smiley_image(i) { var n = document.createElement("img"); n.src = "http://upload.wikimedia.org/wikipedia/commons/" + smiley[i][2] + "/" + smiley[i][1]; n.width = smiley[i][3]; n.height = smiley[i][4]; return n; }

function add_smileys(n) { if (!n) return; add_smileys(n.firstChild); var i, j, k, a, next = n.nextSibling; if (n.nodeType == Node.TEXT_NODE) {     for (i = 0; i < smiley.length; ++i) {         for (j = 5; j <= 8; ++j) if (a = smiley[i][j].exec(n.data)) {               switch (j) {                   case 5: // just replace n.parentNode.replaceChild(smiley_image(i), n); break; case 6: // stuff before, but not after k = n.splitText(a.index + 1); n.parentNode.replaceChild(smiley_image(i), k); break; case 7: // stuff after, but not before k = n.splitText(a[1].length); next = smiley_image(i); n.parentNode.replaceChild(next, n); next = next.nextSibling; break; case 8: // stuff before and after k = n.splitText(a.index + 1); j = k.splitText(a[1].length); next = smiley_image(i); n.parentNode.replaceChild(next, k); next = next.nextSibling; break; }               i = smiley.length; break; }       }    }  add_smileys(next); }

addOnloadHook(smileys); //