1 2var Smile = { 3 smiles: {":-)": "ulibka", ":-(": "gruschu", ":D": "smeus", ";-)": "podmigivau", ":P": "pokazivauYazik", ":-D": "kataus_popolu", ":-*": "pocelui", "=-O": "udivlyaus", 4 ":'(": "plachu", "(disappointment)": "razocharovanie", "(yawn)": "zevau", "(redden)": "krasneu", "(party)": "prazdnik", "(wait)": "zdu", ":@": "zloy", 5 ":-[": "smuschen", ":-!": "toshnit", "(hug)": "obnimau", ":X":"rotNaZamke", ":-|": "vozmuschenie", ":O": "glaza_na_lbu", "(like)": "obozau", "(watch)": "slezhuZaToboi", 6 ":|": "sderzan", "(love)": "vlublen", "(skeptical)": "skeptichen", "(talk)": "boltau", "(clap)": "ovacii", "(meditate)": "mediciruyu", "(think)": "dumau", 7 "(y)": "soglashaus", "(n)": "otkazivaus", "|-(": "skushno", "(ill)": "boleu", "(fear)": "ispug", "|-)": "splu", "(wave)": "preved", "(bye)": "poka", "(thanks)": "spasibo", 8 "8)": "krosavcheg", "8-)": "krupoi", "%-)": "besumnii", "8-|": "ochkarik", "]:->": "besitMenya", ":-X": "neznau", "]:)": "uhmilka", "(sweat)": "zarko", "(cold)": "holodno", 9 "(handshake)": "rukopozatie", "(dance)": "tancuiu", "(work)": "rabotau", "(relax)": "otdihau", "(present)":"podarok", "(h)": "serdce", "@}---": "cvetok"}, 10 smilesTitles: {"ulibka": "УлÑбаÑÑÑ", "prazdnik": "ÐÑаздник", "kataus_popolu": "ÐаÑаÑÑÑ Ð¿Ð¾ Ð¿Ð¾Ð»Ñ Ð¾Ñ Ð¼ÐµÑ Ð°", "smeus": "СмеÑÑÑ", "gruschu": "ÐÑÑÑÑ", "razocharovanie"
10: "РазоÑаÑование", 11 "toshnit": "ТоÑниÑ", "plachu": "ÐлаÑÑ", "zdu": "ÐдÑ", "zarko": "ÐаÑко", "zloy": "Ðлой", "vozmuschenie": "ÐозмÑÑеннÑй", "soglashaus": "СоглаÑаÑÑÑ", "otkazivaus": "ÐÑказÑваÑÑÑ", 12 "boltau": "ÐолÑаÑ", "zevau": "ÐеваÑ", "smuschen": "СмÑÑен", "obnimau": "ÐбнимаÑ", "obozau": "ÐбожаÑ", "udivlyaus": "УдивлÑÑÑÑ", "glaza_na_lbu": "Ðлаза на лбÑ", "podmigivau": "ÐодмигиваÑ", 13 "pokazivauYazik": "ÐоказÑÐ²Ð°Ñ ÑзÑк", "slezhuZaToboi": "Ð¡Ð»ÐµÐ¶Ñ Ð·Ð° Ñобой", "uhmilka": "Ð£Ñ Ð¼Ñлка", "krosavcheg": "ÐÑаÑавÑик", "sderzan": "СдеÑжан", "mediciruyu": "ÐедиÑиÑÑÑ", "ochkarik": "ÐÑкаÑик", 14 "neznau": "Ðе знаÑ", "holodno": "Холодно", "krupoi": "ÐÑÑÑой", "besumnii": "СÑмаÑÑедÑий", "podarok": "ÐодаÑок", "boleu": "ÐолеÑ", "rotNaZamke": "Ð Ð¾Ñ Ð½Ð° замке", "rabotau": "РабоÑаÑ", "ispug": "ÐÑпÑг", 15 "splu": "СоннÑй", "ovacii": "ÐваÑии", "poka": "Ðока", "krasneu": "ÐÑаÑнеÑ", "skeptichen": "СкепÑиÑен", "spasibo": "СпаÑибо", "besitMenya": "ÐеÑÐ¸Ñ Ð¼ÐµÐ½Ñ", "preved": "ÐÑивеÑ", 16 "pocelui": "ÐоÑелÑй", "tancuiu": "ТанÑÑÑ", "serdce": "СеÑдÑе", "skushno": "СкÑÑаÑ", "rukopozatie": "Ð ÑкопожаÑие", "vlublen": "ÐлÑблен", "dumau": "ÐÑмаÑ", "otdihau": "ÐÑдÑÑ Ð°Ñ", "cvetok": "ЦвеÑок"}, 17 18 processSmiles: function(msg) { 19 $.each(Smile.smiles, function(index, value) { 20 msg = msg.replaceAll(index, "<span class='smile " + value + " active' title='" + Smile.smilesTitles[value] + "'/>"); 21 }) 22 return msg; 23 }, 24 buildSmilesMenu: function(smiles) { 25 $.each(Smile.smiles, function(index, value) { 26 var html = $("<div class='smile " + value + "' text=\"" + index + "\"><div class='hint'>" + Smile.smilesTitles[value] + "<div class='pointer'/><div class='right'/></div>" + 27 "<div class='border'><div class='corner lt'/><div class='corner rt'/><div class='corner lb'/><div class='corner rb'/></div></div>"); 28 smiles.append(html); 29 }); 30 Smile.initHints(smiles); 31 }, 32 initHints: function(smiles) { 33 smiles.find(".smile").unbind("hover").hover( function() { 34 var smile = $(this); 35 $(document).stopTime("smileHint").oneTime(500, "smileHint", function() { 36 var hint = $(smile).find(".hint"); 37 hint.show(); 38 hint.css("left", -hint.width()/2 + 6 + "px" ); 39 } ); 40 }, 41 function() { 42 $(document).stopTime("smileHint"); 43 $(this).find(".hint").hide(); 44 }) 45 }, 46 initSmileIcon: function(smiles, smilesIcon, documentElement) { 47 documentElement = !documentElement ? document: documentElement; 48 smilesIcon.unbind("click").click( function() { 49 if(smiles.is(":visible")) { 50 smiles.hide(); 51 } else { 52 smiles.show(); 53 var closePanel = function(e){ 54 //if( smiles.is(":visible") && $(e.target).parents(".smiles").length == 0 ) { 55 smiles.hide(); 56 $(documentElement).unbind("click", closePanel); 57 if(document != documentElement) { 58 $(document).unbind("click", closePanel); 59 } 60 //} 61 }; 62 $(documentElement).unbind("click", closePanel).click( closePanel ); 63 if(document != documentElement) { 64 $(document).unbind("click", closePanel).click( closePanel ); 65 } 66 } 67 return false; 68 }); 69 }, 70 initSmilesTextarea: function(smiles, smilesIcon, textarea, buildMenu) { 71 if(buildMenu) { 72 Smile.buildSmilesMenu(smiles); 73 } 74 var range; 75 if(document.selection) { 76 $(textarea).click(function() { 77 range = document.selection.createRange(); 78 }).keydown( function() { 79 range = document.selection.createRange(); 80 });
81 } 82 smiles.find(".smile").unbind("click").click( function() { 83 Smile.insertText($(this).attr("text"), textarea, range); 84 smiles.hide(); 85 }); 86 Smile.initSmileIcon(smiles, smilesIcon); 87 Smile.initHints(smiles); 88 }, 89 initSmilesDiv: function(smiles, smilesIcon, contentEditableElement, contentWindow, isBuildMenu, onChange) { 90 var documentElement = contentEditableElement.length > 0 ? contentEditableElement[0].ownerDocument : document; 91 var windowElement = contentWindow ? contentWindow : window; 92 93 if(isBuildMenu) { 94 Smile.buildSmilesMenu(smiles); 95 } 96 Smile.initSmileIcon(smiles, smilesIcon, documentElement); 97 98 var range; 99 insertTextAtCursor = function(documentElement, windowElement, text) { 100 var sel, range, html; 101 if (windowElement.getSelection) { 102 sel = windowElement.getSelection(); 103 if (sel.getRangeAt && sel.rangeCount) { 104 range = sel.getRangeAt(0); 105 var node = documentElement.createTextNode(text); 106 range.insertNode( node ); 107 range.selectNodeContents(node); 108 range.collapse(false); 109 } 110 } else if (documentElement.selection && documentElement.selection.createRange) { 111 range = documentElement.selection.createRange(); 112 range.pasteHTML(text); 113 } 114 } 115 saveSelection = function() { 116 var sel; 117 if (windowElement.getSelection) { 118 sel = windowElement.getSelection(); 119 if (sel.getRangeAt && sel.rangeCount) { 120 return sel.getRangeAt(0); 121 } 122 } else if (documentElement.selection && documentElement.selection.createRange) { 123 return documentElement.selection.createRange(); 124 } 125 return null; 126 } 127 restoreSelection = function(range) { 128 if (range) { 129 if (windowElement.getSelection) { 130 sel = windowElement.getSelection(); 131 sel.removeAllRanges(); 132 sel.addRange(range); 133 } else if (documentElement.selection && range.select) { 134 range.select(); 135 } 136 } else { 137 if(documentElement.createRange) { 138 range = documentElement.createRange(); 139 range.selectNodeContents(contentEditableElement[0]); 140 range.collapse(false); 141 selection = windowElement.getSelection(); 142 selection.removeAllRanges(); 143 selection.addRange(range); 144 } else if(documentElement.selection) { 145 range = documentElement.body.createTextRange(); 146 range.moveToElementText(contentEditableElement[0]); 147 range.collapse(false); 148 range.select(); 149 } 150 } 151 } 152 contentEditableElement.keypress( function() { 153 setTimeout(function(){ 154 range = saveSelection(); 155 }, 200); 156 } ).click( function() { 157 range = saveSelection(); 158 }); 159 160 161 smiles.find(".smile").each( function() { 162 $(this).unbind("click").click( function() { 163 restoreSelection(range); 164 insertTextAtCursor(documentElement, windowElement, $(this).attr("text")); 165 smiles.hide(); 166 //Smile.setEndOfContenteditable(contentEditableElement[0]); 167 $(contentEditableElement).focus(); 168 if ( onChange ) onChange(); 169 }); 170 }); 171 Smile.initHints(smiles); 172 }, 173 insertText: function insertAtCaret(text, txtarea, range) { 174 var scrollPos = txtarea.scrollTop; 175 var strPos = 0; 176 var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false ) ); 177 if (br == "ie") { 178 txtarea.focus(); 179 if(!range) { 180 alert("null"); 181 range = document.selection.createRange(); 182 } 183 var length = range.htmlText.length; 184 while(range.htmlText.length - length <= 1) { 185 length = range.htmlText.length; 186 range.moveStart ('character', -1); 187 } 188 strPos = range.text.length; 189 } else if (br == "ff") 190 strPos = txtarea.selectionStart; 191 192 var front = (txtarea.value).substring(0, strPos); 193 var back = (txtarea.value).substring(strPos, txtarea.value.length);
194 txtarea.value=front + text + back; 195 strPos = strPos + text.length; 196 if (br == "ie") { 197 txtarea.focus(); 198 var range = document.selection.createRange(); 199 range.moveStart ('character', strPos); 200 range.moveEnd ('character', 0); 201 range.select(); 202 } else if (br == "ff") { 203 txtarea.selectionStart = strPos; 204 txtarea.selectionEnd = strPos; 205 txtarea.focus(); 206 } 207 txtarea.scrollTop = scrollPos; 208 }, 209 setEndOfContenteditable: function ( contentEditableElement ) { 210 var range,selection; 211 if(document.createRange) { 212 range = document.createRange(); 213 selection = window.getSelection(); 214 selection.removeAllRanges(); 215 selection.addRange(range); 216 range.selectNodeContents(contentEditableElement); 217 range.collapse(false); 218 } else if(document.selection) { 219 range = document.body.createTextRange(); 220 range.moveToElementText(contentEditableElement); 221 range.collapse(false); 222 range.select(); 223 } 224 } 225}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.