1(function() { 2 var preSelection = "<!!!>"; 3 var postSelection = "<!!!>"; 4 var snippetMaxLen = 60; 5 var textMaxLen = 256; 6 var messages = { // Russian (Ð ÑÑÑкий) 7 alt: "ÐÑделиÑе оÑÑогÑаÑиÑеÑкÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¼ÑÑÑÑ Ð¸ нажмиÑе Ctrl+Enter. Сделаем ÑзÑк ÑиÑе!", 8 badbrowser: "ÐÐ°Ñ Ð±ÑаÑÐ·ÐµÑ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÐµÑÐµÑ Ð²Ð°Ñа вÑделенного ÑекÑÑа или IFRAME. "+ 9 "Ðозможно, ÑлиÑком ÑÑаÑÐ°Ñ Ð²ÐµÑÑиÑ, а возможно, еÑе какаÑ-нибÑÐ´Ñ Ð¾Ñибка.", 10 toobig: "ÐÑ Ð²ÑбÑали ÑлиÑком болÑÑой обÑем ÑекÑÑа!", 11 thanks: "СпаÑибо за ÑоÑÑÑдниÑеÑÑво!", 12 subject: "ÐÑÑогÑаÑиÑеÑÐºÐ°Ñ Ð¾Ñибка", 13 docmsg: "ÐокÑменÑ:", 14 intextmsg: "ÐÑÑогÑаÑиÑеÑÐºÐ°Ñ Ð¾Ñибка в ÑекÑÑе:", 15 ifsendmsg: "ÐоÑлаÑÑ ÑообÑение об оÑибке ÑедакÑоÑÑ ÑайÑа?\nÐÐ°Ñ Ð±ÑаÑÐ·ÐµÑ Ð¾ÑÑанеÑÑÑ Ð½Ð° ÑÑой же ÑÑÑаниÑе.", 16 newwin: "СÑÑаниÑа оÑкÑоеÑÑÑ Ð² новом окне.", 17 }; 18 var cssMarker = "css"; 19 var w = window; 20 var d = w.document; 21 var de = d.documentElement; 22 var b = d.body; 23 var orphoDiv = null; 24 var orphoObject = {}; 25 var isFormEnabled = false; 26 var inputValue = ""; 27 var changeStatus = function() { 28 var n = 0; 29 var delayStatus = function() { 30 if (++n > 20) { 31 return; 32 } 33 w.status = (n % 5) ? messages.thanks : " "; 34 setTimeout(delayStatus, 100); 35 }; 36 delayStatus(); 37 }; 38 var hideDiv = function(e) { 39 e.style.position = "absolute"; 40 e.style.top = "-10000px"; 41 if (b.lastChild) { 42 b.insertBefore(e, b.lastChild); 43 } else { 44 b.appendChild(e); 45 } 46 }; 47 var createDiv = function(text) { 48 var div = d.createElement("DIV"); 49 div.innerHTML = "<iframe name=\"" + text + "\"></iframe>"; 50 hideDiv(div); 51 return d.childNodes[0]; 52 }; 53 var createForm = function(url, selection, comment) { 54 var iframeID = "orphus_ifr"; 55 if (!orphoDiv) { 56 orphoDiv = createDiv(iframeID); 57 } 58 var f = d.createElement("FORM"); 59 f.style.position = "absolute"; 60 f.style.top = "-10000px"; 61 f.action = "/spellcheck/"; 62 f.method = "post"; 63 f.target = iframeID; 64 var formFields = { 65 ref: url, 66 c_pre: selection.pre, 67 c_sel: selection.text, 68 c_suf: selection.suf, 69 c_pos: selection.pos, 70 charset: d.charset || d.characterSet || "", 71 comment: comment 72 }; 73 for (var k in formFields) { 74 var h = d.createElement("INPUT"); 75 h.type = "hidden"; 76 h.name = k; 77 h.value = formFields[k]; 78 f.appendChild(h); 79 } 80 hideDiv(f); 81 f.submit(); 82 f.parentNode.removeChild(f); 83 }; 84 var getDimensions = function() { 85 var width = 0, 86 height = 0; 87 if (typeof(w.innerWidth) == "number") { 88 width = w.innerWidth; 89 height = w.innerHeight; 90 } else { 91 if (de && (de.clientWidth || de.clientHeight)) { 92 width = de.clientWidth; 93 height = de.clientHeight; 94 } else { 95 if (b && (b.clientWidth || b.clientHeight)) { 96 width = b.clientWidth; 97 height = b.clientHeight; 98 } 99 } 100 } 101 var offsetX = 0, 102 offsetY = 0; 103 if (typeof(w.pageYOffset) == "number") { 104 offsetY = w.pageYOffset; 105 offsetX = w.pageXOffset; 106 } else { 107 if (b && (b.scrollLeft || b.scrollTop)) { 108 offsetY = b.scrollTop; 109 offsetX = b.scrollLeft; 110 } else { 111 if (de && (de.scrollLeft || de.scrollTop)) { 112 offsetY = de.scrollTop; 113 offsetX = de.scrollLeft; 114 } 115 } 116 } 117 return { 118 w: width, 119 h: height, 120 x: offsetX, 121 y: offsetY 122 }; 123 }; 124 orphoObject.confirm = function(confirmMessage, flag, showConfirm) { 125 var ts = new Date().getTime(); 126 var confirmResult = confirm(messages.docmsg + "\n " + d.location.href + "\n" + messages.intextmsg + "\n \"" + confirmMessage + "\"\n\n" + messages.ifsendmsg); 127 var dt = new Date().getTime() - ts; 128 if (confirmResult) { 129 flag(""); 130 } else { 131 if (!showConfirm && dt < 50) { 132 var sv = d.onkeyup; 133 d.onkeyup = function(e) { 134 if (!e) { 135 e = window.event; 136 } 137 if (e.keyCode == 17) { 138 d.onkeyup = sv; 139 orphoObject.confirm(confirmMessage, flag, true); 140 } 141 }; 142 } 143 } 144 }; 145 orphoObject.css = function(userSelection, commentValue) { 146 if (isFormEnabled) return; 147 isFormEnabled = true; 148 var div = d.createElement("DIV"); 149 var w = 550; 150 if (w > b.clientWidth - 10) { 151 w = b.clientWidth - 10; 152 } 153 div.style.zIndex = "10001"; 154 div.innerHTML = "" + '<div class="block-orphochecker" style="width:' + w + 'px;
154 z-index:10001;">' + 155 "<a href=\"javascript:void(0)\" onclick=\"$(this).parent('.block-orphochecker').find('form .buttons input:last').click();\" class=\"close\">Ã</a>" + 156 '<div class="header">ÐÑÑогÑаÑиÑеÑÐºÐ°Ñ Ð¾Ñибка в ÑекÑÑе:</div>' + 157 '<div class="item">«...' + userSelection.replace(preSelection, '<u style="color:red;">').replace(postSelection, '</u>') + '...»</div>' + 158 '<div class="message">ÐоÑлаÑÑ ÑообÑение об оÑибке ÑедакÑоÑÑ ÑайÑа?<br>ÐÐ°Ñ Ð±ÑаÑÐ·ÐµÑ Ð¾ÑÑанеÑÑÑ Ð½Ð° ÑÑой же ÑÑÑаниÑе.</div>' + 159 '<form><input type="text" maxlength="250" placeholder="ÐомменÑаÑий Ð´Ð»Ñ ÑедакÑоÑа (необÑзаÑелÑно):" style="width:98%;" />' + 160 '<div class="buttons"><input type="submit" value="ÐÑпÑавиÑÑ"> ' + 161 '<input type="button" value="ÐÑмена" class="cancel">' + 162 '</div></form></div>'; 163 hideDiv(div); 164 var inputsArray = div.getElementsByTagName("input"); 165 var formsArray = div.getElementsByTagName("form"); 166 var t = inputsArray[0]; 167 var documentKeyDownCode = null; 168 var formElements = []; 169 var hideForm = function() { 170 d.onkeydown = documentKeyDownCode; 171 documentKeyDownCode = null; 172 div.parentNode.removeChild(div); 173 for (var i = 0; i < formElements.length; i++) { 174 formElements[i][0].style.visibility = formElements[i][1]; 175 } 176 isFormEnabled = false; 177 inputValue = t.value; 178 }; 179 var pos = function(p) { 180 var s = { 181 x: 0, 182 y: 0 183 }; 184 while (p.offsetParent) { 185 s.x += p.offsetLeft; 186 s.y += p.offsetTop; 187 p = p.offsetParent; 188 } 189 return s; 190 }; 191 setTimeout(function() { 192 var w = div.clientWidth; 193 var h = div.clientHeight; 194 var dim = getDimensions(); 195 var x = (dim.w - w) / 2 + dim.x; 196 if (x < 10) { 197 x = 10; 198 } 199 var y = (dim.h - h) / 2 + dim.y - 10; 200 if (y < 10) { 201 y = 10; 202 } 203 div.style.left = x + "px"; 204 div.style.top = y + "px"; 205 if (navigator.userAgent.match(/MSIE (\d+)/) && RegExp.$1 < 7) { 206 var selectsArray = d.getElementsByTagName("SELECT"); 207 for (var i = 0; i < selectsArray.length; i++) { 208 var s = selectsArray[i]; 209 var p = pos(s); 210 if (p.x > x + w || p.y > y + h || p.x + s.offsetWidth < x || p.y + s.offsetHeight < y) { 211 continue; 212 } 213 formElements[formElements.length] = [s, s.style.visibility]; 214 s.style.visibility = "hidden"; 215 } 216 } 217 t.value = inputValue; 218 t.focus(); 219 t.select(); 220 documentKeyDownCode = d.onkeydown; 221 d.onkeydown = function(e) { 222 if (!e) { 223 e = window.event; 224 } 225 if (e.keyCode == 27) { 226 hideForm(); 227 } 228 }; 229 formsArray[0].onsubmit = function() { 230 commentValue(t.value); 231 hideForm(); 232 inputValue = ""; 233 return false; 234 }; 235 inputsArray[2].onclick = function() { 236 hideForm(); 237 }; 238 }, 10); 239 }; 240 var stripSpace = function(text) { 241 return ("" + text).replace(/[\r\n]+/g, " ").replace(/^\s+|\s+$/g, ""); 242 }; 243 var getUserSelection = function() { 244 try { 245 var text = null; 246 var selection = null; 247 if (w.getSelection) { 248 selection = w.getSelection(); 249 } else { 250 if (d.getSelection) { 251 selection = d.getSelection(); 252 } else { 253 selection = d.selection; 254 } 255 } 256 var marker = null; 257 if (selection != null) { 258 var pre = "", 259 text = null, 260 suf = "", 261 pos = -1; 262 if (selection.getRangeAt) { 263 var r = selection.getRangeAt(0); 264 text = r.toString(); 265 var subSelection1 = d.createRange(); 266 subSelection1.setStartBefore(r.startContainer.ownerDocument.body); 267 subSelection1.setEnd(r.startContainer, r.startOffset); 268 pre = subSelection1.toString(); 269 var subSelection2 = r.cloneRange(); 270 subSelection2.setStart(r.endContainer, r.endOffset); 271 subSelection2.setEndAfter(r.endContainer.ownerDocument.body); 272 suf = subSelection2.toString(); 273 } else { 274 if (selection.createRange) { 275 var r = selection.createRange(); 276 text = r.text; 277 var subSelection1 = selection.createRange(); 278 subSelection1.moveStart("character", -snippetMaxLen); 279 subSelection1.moveEnd("character", -text.length); 280 pre = subSelection1.text; 281 var subSelection2 = selection.createRange(); 282 subSelection2.moveEnd("character", snippetMaxLen); 283 subSelection2.moveStart("character", text.length); 284 suf = subSelection2.text; 285 } else { 286 text = "" + selection; 287 } 288 } 289 var p; 290 var s = (p = text.match(/^(\s*)/)) && p[0].length; 291 var e = (p = text.match(/(\s*)$/)) && p[0].length; 292 pre = pre + text.substring(0, s); 293 suf = text.substring(text.length - e, text.length) + suf; 294 text = text.substring(s, text.length - e); 295 if (text == "") { 296 return null; 297 } 298 return { 299 pre: pre, 300 text: text, 301 suf: suf, 302 pos: pos 303 }; 304 } else { 305 alert(messages.badbrowser); 306 return; 307 } 308 } catch (e) { 309 return null; 310 } 311 }; 312 313 d.onkeypress = function(e) { 314 var correctKeyCode = 0; 315 var we = w.event; 316 if (we) { 317 correctKeyCode = we.keyCode == 10 || (we.keyCode == 13 && we.ctrlKey); 318 } else { 319 if (e) { 320 correctKeyCode = (e.which == 10 && e.modifiers == 2) || (e.keyCode == 0 && e.charCode == 106 && e.ctrlKey) || (e.keyCode == 13 && e.ctrlKey); 321 } 322 } 323 if (correctKeyCode) { 324 if (navigator.appName.indexOf("Netscape") != -1 && eval(navigator.appVersion.substring(0, 1)) < 5) { 325 alert(messages.badbrowser); 326 return; 327 } 328 var selectedText = getUserSelection(); 329 if (!selectedText) { 330 return; 331 } 332 with(selectedText) { 333 pre = pre.substring(pre.length - snippetMaxLen, pre.length).replace(/^\S{1,10}\s+/, ""); 334 suf = suf.substring(0, snippetMaxLen).replace(/\s+\S{1,10}$/, ""); 335 }
336 var correctedText = stripSpace(selectedText.pre + preSelection + selectedText.text + postSelection + selectedText.suf); 337 if (correctedText.length > textMaxLen) { 338 alert(messages.toobig); 339 return; 340 } 341 orphoObject[cssMarker](correctedText, function(comment) { 342 createForm(d.location.href, selectedText, comment); 343 changeStatus(); 344 }); 345 return false; 346 } 347 }; 348})();
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.