Посмотрите пожалуйста, что не так в этом коде кнопки Google Translate. А то у меня в esr 60.4.0 не работает:
/*Initialization Code*/ var btn = this; btn.lastClick = { X: 0, Y: 0 }; addEventListener("mouseup", function(e) { if (e && e.button == 0 && e.view.top == content) { var lc = btn.lastClick; lc.X = e.clientX; lc.Y = e.clientY; } }, false); var createWindow = function(text, status, title, id, pos, size){ var win = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content; var doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId); var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()}; if(w)w.closeWin(); w = doc.createElement('div'); w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");')); w.id = wId; w.closeWin = function(){ doc.removeEventListener('keydown', keyDown, false); this.parentNode.removeChild(this); }; w.addEle = function(str, style){ var ele = doc.createElement('div'); ele.setAttribute('style', style); if(str){ ele.innerHTML = str; for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){ el = all[i]; if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){ el.parentNode.removeChild(el); }else{ for(var att = el.attributes, j = att.length; j--;){ if(/^on[a-z]+$/i.test(att[j].name))att[j].value = ''; } } } }; return this.appendChild(ele); }; var img = doc.createElement('div'); img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");'); img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close'; img.addEventListener('click', function(){this.parentNode.closeWin()}, false); w.appendChild(img); w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:17px Times New Roman;width:320px;height:160px;overflow:auto;cursor:text;'); w.addEle(status, 'display:table;color:#555;font:13px Times New Roman;width:auto;height:auto;padding:0;margin:0 3px;cursor:text;'); w.addEventListener('mousedown', function(e){ if(e.target == w){ e.preventDefault(); var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top); var mouseMove = function(ev){ w.style.left = origX+ev.clientX-grabX+'px'; w.style.top = origY+ev.clientY-grabY+'px'; }; doc.addEventListener('mousemove', mouseMove, false); doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false); } }, false); doc.documentElement.appendChild(w); if(size){ cnt.style.height = size.height; cnt.style.width = size.width; }else{ for(var i = 3; i < 10; i++){ if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){ cnt.style.height = 80*i+'px'; cnt.style.width = 180*i+'px'; }else break; } }; var docEle = doc.compatMode == 'CSS1Compat' ? doc.documentElement : doc.body; var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight; if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0}; if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0}; var hW = parseInt(w.offsetWidth/2); w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px'; w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px'; w.style.visibility = 'visible'; doc.addEventListener('keydown', keyDown, false); }; var getSel = function (w) { var s, d = w.document; if (d.selection) { var r = d.selection.createRange(); s = r ? r.text : '' } else { s = d.getSelection().toString(); if (!s) { var e, t = d.getElementsByTagName('textarea'), u = d.getElementsByTagName('input'), i = t.length; while(e = (i > 0) ? t[--i] : u[-i--])try{ if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break }catch(x){} } }; if (!s) for (var j = 0, f; f = w.frames[j]; j++) { try { if (s = getSel(f)) break } catch(x) {} }; return s }; var getHash = function (txt) { TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())'); function sM(a) { var b; if (null !== yr) b = yr; else { b = wr(String.fromCharCode(84)); var c = wr(String.fromCharCode(75)); b = [b(), b()]; b[1] = c(); b = (yr = window[b.join(c())] || "") || "" } var d = wr(String.fromCharCode(116)) , c = wr(String.fromCharCode(107)) , d = [d(), d()]; d[1] = c(); c = "&" + d.join("") + "="; d = b.split("."); b = Number(d[0]) || 0; for (var e = [], f = 0, g = 0; g < a.length; g++) { var l = a.charCodeAt(g); 128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = l >> 18 | 240, e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224, e[f++] = l >> 6 & 63 | 128), e[f++] = l & 63 | 128) } a = b; for (f = 0; f < e.length; f++) a += e[f], a = xr(a, "+-a^+6"); a = xr(a, "+-3^+b+-f"); a ^= Number(d[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return c + (a.toString() + "." + (a ^ b)) } var yr = null; var wr = function(a) { return function() { return a } } , xr = function(a, b) { for (var c = 0; c < b.length - 2; c += 3) { var d = b.charAt(c + 2) , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d) , d = "+" == b.charAt(c + 1) ? a >>> d : a << d; a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d } return a }; return sM(txt); }; var ujs_google_translate = function (dir){ var win = content, lng = win.navigator.language.slice(0, 2), txt = getSel(win), l = dir.split('|'); if (txt) { var xhr = new XMLHttpRequest(); var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); xhr.onreadystatechange = function() { try{ if (xhr.readyState == 4 && xhr.status == 200) { var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0')); for(var i = 0, n; n = tmp[0][i]; i++){ if(n[0])result += n[0].toString(); }; result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>'; status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase(); createWindow(result, status, '<a href="'+url.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:17px Times New Roman;">Google Translate</a>', '_gt', btn.lastClick); } } catch (x){LOG(x)}; }; xhr.send('q=' + encodeURIComponent(txt)); } else { win.open('http://translate.google.com/translate?u='+escape(win.location.href)+'&hl='+lng+'&langpair='+dir+'&tbb=1'); }; }; btn.onclick = function(e){if(e.button == 0)ujs_google_translate('auto|ru')}; var contextMenu = document.getElementById("contentAreaContextMenu"); var nextEleMenu = document.getElementById("context-inspect"); var menuId = "context-ext-google-translate"; var menuItem = document.getElementById(menuId); if (menuItem) { contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem); }; menuItem = document.createElement("menuitem"); menuItem.setAttribute("id", menuId); menuItem.setAttribute("label", "Перевести на русский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC"); menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); menuItem = document.createElement("menuitem"); menuItem.setAttribute("label", "Перевести на английский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII="); menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); contextMenu.insertBefore(document.createElement("menuseparator"), nextEleMenu); addEventListener('keydown', function (e){ if(e.shiftKey && !e.ctrlKey && e.altKey && e.keyCode == 84)ujs_google_translate('auto|ru'); }, false);
Добавлено 14-01-2019 21:03:43
vitalii201
Эта кнопка у меня в esr 60 работает странно, при нажатии на кнопку, происходит вот это:
Отредактировано kokoss (14-01-2019 21:03:43)
Win7
Отсутствует
kokoss,
Отсутствует
У меня лучше(удобней) всего работает перевод из Flagfox(ни разу не отказал) или S3.Translator(не на всех сайтах срабатывает).
Самому приходится пользоваться расширением Country Flags & IP WHOIS в основном из за Google Translate. Просто с кнопкой было бы удобнее. Что касается S3 Переводчика, то у него к сожалению в esr 60 не работает перевод страниц. Я им пользуюсь только в 56 и esr 52.
Win7
Отсутствует
Dumby Вы не могли бы мне подсказать, раньше у меня работал вот такой код для перевода текста (заменял на странице выделенный текст с другого языка на русский. Выдает ошибку - TypeError: tempResz[1] is undefined и ссылается на строку - var kimenet = tempResz[1].split('</span></div>'); )
//----------Заменить текст переводом------------ function ujs_TexReplace_translate() { var win = content, txt = getSel(win); if (txt) { var httpRequest = null; //var baseUrl = "http://translate.google.com/translate_t"; var urlParams = "text=" + encodeURIComponent(txt) + "&hl==ru&langpair=auto|ru&tbb=1"; var baseUrl="http://translate.google.com/translate_t?"+ urlParams; function removeHTMLTags(mitkell) { var strTagStrippedText = mitkell.replace(/this.style.backgroundColor='#fff'/ig, "").replace(/this.style.backgroundColor='#ebeff9'/ig, ""); return strTagStrippedText; } function infoReceived() { var output = httpRequest.responseText; if (txt[0] == " ") { var kezdospace = " "; } else { var kezdospace = ""; } if (txt[txt.length - 1] == " ") { var vegespace = " "; } else { var vegespace = ""; } if (output.length) { output = output.replace(/"/gi,'"'); output = output.replace(/</gi,'<'); output = output.replace(/>/gi,'>'); output = output.replace(/&/gi,'&'); output = output.replace(/'/gi,"'"); var fieldArray = output.split('</head>'); if (fieldArray[1].search('class="short_text"')!=-1) { var tempResz = fieldArray[1].split('<span id=result_box class="short_text">'); } else if (fieldArray[1].search('class="medium_text"')!=-1) { var tempResz = fieldArray[1].split('<span id=result_box class="medium_text">'); } else { var tempResz = fieldArray[1].split('<span id=result_box class="long_text">'); } var kimenet = tempResz[1].split('</span></div>'); var range = content.getSelection().getRangeAt(0); range.deleteContents(); range.insertNode(range. createContextualFragment(kezdospace + removeHTMLTags(kimenet[0])+ vegespace)); } } httpRequest = new XMLHttpRequest(); httpRequest.open("GET", baseUrl, true); httpRequest.onload = infoReceived; httpRequest.send(null); } };
Отсутствует
Насчет перевода
1. kokoss Google Translate у меня работает и на 64 без проблем (кроме некоторых сайтов, например - https://addons.mozilla.org и еще наподобие
2. Есть скрипт, который работает на всех версиях Google Translator Tooltip Expanded Fork
Отредактировано Andrey_Krropotkin (18-01-2019 08:30:56)
Отсутствует
3. У меня на 64 работает вот такая кнопка недоделанная до конца, нет времени - Перевод
Кнопка работает прекрасно, а нельзя ли к ней приделать функцию перевода из буфера обмена, довольно часто это нужно.
Отсутствует
Есть скрипт, который работает на всех версиях Google Translator Tooltip Expanded Fork
В esr 60 не работает...
У меня на 64 работает вот такая кнопка недоделанная до конца, нет времени - Перевод
В esr 60 не устанавливается.
Win7
Отсутствует
rubel это можно, но куда впихнуть не знаю, вот пример:
/*Initialization Code*/ //Варианты выбора языка переводчика для перевода текста в окне. Нужное разкоментировать. Остальное закоментировать. //Google, var langFrom_google_text = "auto";//авто var langTo_google_text = "ru"; var mainicon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQtJREFUKM9VkSFOhFEQg799/CjEihWAwKDgIFwAyWHgLDjuAGfZgMCQDQkG8abtQ/z8u9A0k4rOTCez2u0GB0gCsLELbCuxLduJy0zAZgOQBBqQALEbtOQoyRgjSZLt9nOaJyf5K2zPjr01SWst8ermZtzd5euLhCQ2Y9iOHXssIvZYr1f39x/T87Ourtr7O3ZUyK6KlN5HVRaOqlxcNGACJKRItigdHFXpFdXoPVWRGmSac0suRYWUWhz7zt5/BXh65Pi6Hr7rI/IopZyqpSqldLsq9onPX3iabuHYr6o3pCVHP2Sa11nIzZdnMAmOSpyejiocVEhtjrwc15L5l4HVDgReCGTR+V9n/AAByma0J+vVwwAAAABJRU5ErkJggg=="; function readFromClipboard() { var string; try { var clipboard = Cc["@mozilla.org/widget/clipboard;1"]. getService(Ci.nsIClipboard); var trans = Cc["@mozilla.org/widget/transferable;1"]. createInstance(Ci.nsITransferable); trans.addDataFlavor("text/unicode"); if (clipboard.supportsSelectionClipboard()) { clipboard.getData(trans, clipboard.kSelectionClipboard); } else { clipboard.getData(trans, clipboard.kGlobalClipboard); } var data = {}; var dataLen = {}; trans.getTransferData("text/unicode", data, dataLen); if (data) { data = data.value.QueryInterface(Ci.nsISupportsString); string = data.data.substring(0, dataLen.value / 2); } } catch (ex) { } return string; } //--------Перевести текст в Google в новой вкладке-------------- function ujs_GoogleTextPageNewa_translate() { //var win = content, txt = getSel(win); txt = readFromClipboard(); var encTxt = encodeURIComponent(txt); var ctabpos = gBrowser.selectedTab._tPos +1; var url="http://translate.google.com/translate_t?text="+encTxt+"&sl=auto&tl=ru&hl=ru&eotf=0&ujs=gtt"; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //Контекстное меню для перевода текста------------------------------------------- (function () { if ( document.getElementById("TranslateBufer") ) return; var contextMenu = document.getElementById("contentAreaContextMenu"); var Item = document.createElement("menuitem"); Item.setAttribute("Id", "TranslateBufer"); Item.setAttribute("label", "Перевод из буфера"); Item.setAttribute("class", "menuitem-iconic"); Item.setAttribute("image", mainicon); Item.addEventListener("command", function(){ujs_GoogleTextPageNewa_translate()}, false); contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection") ); })();
Отредактировано Andrey_Krropotkin (17-01-2019 10:39:31)
Отсутствует
rubel это можно, но куда впихнуть не знаю, вот пример:
Вставил этот код в ваш основной после кода первой строки. Переводит из буфера в новой вкладке, а хочется чтоб было в окне Google.
Можно это поправить?
Отсутствует
rubel
/*Initialization Code*/ //--------------------------------Перевод---------------------------------------- //Варианты выбора языка переводчика для перевода текста в окне. Нужное разкоментировать. Остальное закоментировать. //Google, var langFrom_google_text = "auto";//авто var langTo_google_text = "ru"; //Microsoft var langFrom_Microsoft_text = "";//авто var langTo_Microsoft_text = "ru"; //Promt var langFrom_PROMT_text = "a";//авто var langTo_PROMT_text = "r"; //Яндекс var langFrom_yandex_text = ""; //авто //var langFrom_yandex_text = "en-"; //английский и так же другие языки, тире обязательно var langTo_yandex_text = "ru"; var safeHTMLParser = function(code) { var gUnescapeHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML); var doc = document.implementation.createDocument(xhtmlns, "html", null); var body = document.createElementNS(xhtmlns, "body"); doc.documentElement.appendChild(body); body.appendChild(gUnescapeHTML.parseFragment(code, false, null, body)); return doc; }; //Назначаем иконки var mainicon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQtJREFUKM9VkSFOhFEQg799/CjEihWAwKDgIFwAyWHgLDjuAGfZgMCQDQkG8abtQ/z8u9A0k4rOTCez2u0GB0gCsLELbCuxLduJy0zAZgOQBBqQALEbtOQoyRgjSZLt9nOaJyf5K2zPjr01SWst8ermZtzd5euLhCQ2Y9iOHXssIvZYr1f39x/T87Ourtr7O3ZUyK6KlN5HVRaOqlxcNGACJKRItigdHFXpFdXoPVWRGmSac0suRYWUWhz7zt5/BXh65Pi6Hr7rI/IopZyqpSqldLsq9onPX3iabuHYr6o3pCVHP2Sa11nIzZdnMAmOSpyejiocVEhtjrwc15L5l4HVDgReCGTR+V9n/AAByma0J+vVwwAAAABJRU5ErkJggg=="; var gticon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADPElEQVR4nGWTTWhjZRSG3/uTNr39mTqTn1KacagTqyKIlYJ2ExQCUhiprgpduRVFpLvZjOCsXEgWFqRk0RZcWLopmOnCQcPUsVBiTEZbalrGTJOZJm2aNGm++92b737fcdGZTfvAuznwnMV7OBouEI/HdSHEyNzcXCwajb7r8/n6T09P99bW1u4PDw8/SiQSbHd396IGBINBJJPJQDqdvssYK0kpO0SkiIiUUlII0SqVSr8lk8n3JycnjUsLZmdnb5bL5T+klPK5RNzp0BlzyHEFKXU+cxynubKy8tXExIQJABoAzM/PB6amptYikch70DRtv3iMh5kClPQglcKzozMMXhnAh7E3EL0RhCcEX19f/6xSqSxhdHRUT6VS39i2LYUQtJ7epm9/uEdHtSZJKUkpRa0zm75fvE+f3/mRmM3JcRyqVqulmZmZl7G6uhopl8sHtm3TduEpffH1T1Srn9FFavUmnTRaJKUkx3Go0WiojY2N22aj0Yj5fL6wJyVS6R289koYVwd7L3V07aUBAICUEkopSCk1v99/Sw+Hw5NSyi7OXZQrTQwFBy6f6DlKKSil4HkeOp0ODMO4btq23S+EgFQaAAKzO1BKQdd1AICmaSAiEBGUlBBCwHVduK4LzrlpHh4e7nHOVW+vofdbPmxkHuPWB6/D6vFD13UoRfj38TPsP6mBOxJjN64gdNUC5xz1er2l5/P5XxqNBvNEByPBLmS2n+LXzQK4zcH5ebp9GkAeEksPwJgNxhhs20axWMzo7Xb7US6Xyx7Xanh7LIhXRywklh7i9z/30Wy1YNsMfT0mrG4DGoCO64Ixhlqt5uTz+UVjZ2dHDA0NFYPB4Cd9fVb3W2MhnDZb+DldwD+FCk5OWvivVEX27ycY7APevHkNouNSNpu9l8vlvtMAIBQKGfF4/Mvp6em7oVCoxzAMOB0PjAsQEfxdPvi7DBgG4Dgu5fP5vxYWFj4uFAoHBgAwxmhvby8jpTywLOsdy7IGfKah9XSb56IOeJ7A0dGxs7m5mVpeXv60Xq8fcM7Pf+EFsVhMq1Qq18fHx2ej0ehHgUAgYpqm2W63W6VSKVMsFhe3trYeVKtV/sL5HwhICaDODiyAAAAAAElFTkSuQmCC"; var promticon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADQ0lEQVQ4jX2TX2xTdRTHT7O4GWL0gSwKmphoi3SsdFXHZiRjDExGSIxGHoTgwzDAUoM4skgEE6ckmiiEB2D8GYqbo2LLrmxZ51rWlob+W1e2ua2z2tp1ZVzrunZr161r7/3drw9TCLr4Sc7b+Zycc3IO0QNkY4M333LrD19zGbSc64aWc/VoOZepnnOZD3KuHi3nNB9rCQQcW2kl7CPjH3tPF7OUjpAxEbKDhNwEQUgSxBRBiD8GYWY/UlONzHO76YJery+4LwcmJmrHZtL5tlOVmGsjzPcQFgcIuRBBmCaIaYKYJIip18HyHiylv2Ae5wUtERGFef5ZZzQWS4sSmjgO060yzBsJi/2E3G8E4Y/lDpajDJIwDEkMwW2rHvf5fI/QlZHQFc+CBO8CQ9efOVw8s225gIewFCDkeRnEuSKwzGqw7PuQWAySlMFcrJ4NeIyv0SFv+N5nvIjdgSx2+NLYZ/Sio7nW4uTqdE7jIZ3TfFzntH6u03ON9g/aq9DQvgkftlfg5A+1aGk50EG77MHEK3cyKLHPQm6aRrkljqYu+/V/L/mNjroual0HuqwAnVeAzsix9og6Rg23xjmlLQm5OQ65OQ7FzRlstUyJtoHB7f/Ivf6+2kdNKpFMSlC3EvTjepDhBexo3tNLY+Ep9YaeyaX1tiSU9llscKSw0TOPPTecQ8FgsCgYDBZtt789Sv6NoGEVaKAU5C5F4fWSrHPIW05ERMetQxfV/fPQ+Bbw8nAWFaM5vDq6iK9tt9+77Pnu8NOz20AJDSimAd0tA4XVOGhovHR/vkgksqbqVjC5+VcBVSGGLb8zbAkxVHe642+OvpuQiSqQoAblNaClF1Hs2jQdjUbXPrSks1bHR5UjWZQPZqDxpKFyzEJ17VNckr5HIZOD2HMgUQHKrsOpn84e+c8p8zy/6qVzvZFnDJN46moYxedM+HKyGUPSCOpZI9awUjzBFCjr2+zneX7Viv/Q2tm3t+CEixWccKC68ygmhCj8wi8wCr04JnyCkruqfHd/984V5b+RnbxqbNj11VHLzrZ9kRr9O9ka614orTXseUPZvW8s39b9n/wQfr+/MBwOP+n+2V3huOOoTCQSj6+U9xeWlBixn0UlkAAAAABJRU5ErkJggg=="; var yndicon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC8UlEQVQ4jY2TTWgcZQCGv1OLgkX0UlChaC8iEUo1kNJV0UiTNl1SFasYk2pELeohVkOgWkILDSTR2tWGjRILhigVoxIbf1oaWkJtIokmYWOa3253t2T/Z2dnZmfnm5nv8RZIhdIXnst7eE7vK+oH5JvPfSe5HfZ963SImxPsL9E45PD6r/KWvDYsCfaXnN2nzYp1gt2nDZqGbJqGbJrP2ixrPpZU+AoMR5GxFCNRj6Yhmxe/t6j9uji6TvDsV3kaBk1az5XQy4q0pbia8WgYNMmVFA2DJhdWXCypaPrJJPhNgere/ME1wZM9aQ78oOMrGItJlIJIyiVf8rFdxWLW4+UzBfSyImv5vDCg8URPKlf1afw+IYQQO07eIGv5jMcc+v+2OPhjnqThkbV89g9kee9njZzlM5Fw+GXOpueKwa4vU1R9dmNACCHEY91RMqbH5Ws2ZVcR01ySRY/OCwXq+5LU9yWJaS5ayeeV/hQ5y6e+L8nOkzG2dy3vEYETK8Q0l7pwgpThURdOUBdOkLc89vYmiGkug9MGe3sTRHMSWyrqwgme+fw6FccXF0XFsTl026cmFGUx7VATilITihK+lKfsKjr/yKx1CymHklTUhKIEupd4uH32H/HQRzMYZZ94XlJ2FasFyWpBcmneIFN0CYZWqO5e4vlT15CeQrM8qruXeKQ9woOHp3aKB1onieccaj9ZIKW7PNVxdY1dXfOkiy77Ty2TNVzmV21az8R59MgM93842SuEEGJzyxjVx/9Fs1xe+mKB85ECgaMRAkcj1HbOYTk+17Nl9nTNkdIljx+ZZnPLldym5j/vEUIIce+7o1R9PEWwaxbD9nA9RVqXzMRMpqImTx+bwSx7pHVJoH2aLe+Pcfc7o6+uDWnT2yNUtk1Q2TbBjsOTXJzVsKVPseRxcVYjrUtOnI1T2TbB1pbL3PXWyPop3/nGebYdGmf7B3/dkm2Hxrmj+Zyzsfn3resEGxqHOzYc+I3bonH4f3f+Dz63ssfSaOz4AAAAAElFTkSuQmCC"; var bingicon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABMUlEQVQ4jY2SsU7DMBCG/TJYYqpEPDojcbq0NGM7sXdnggnigYFOyVDqLLBAkRJLTIwJSwdYw8gj8AQ/Q0kaO6HNSZbPp/P332+ZkJ7hSo2uvNdFV2rwMEOVGw28UVjl5bZZaqi8hA3aqzB/KOBKDVWUrcZ6ir/dgLlSY/HxAx5mmD++d15u7jzMjDNxpcbZyzeE+mz563o4bteaY9nj2bktwP97F7upS72yUgdLfNDIA428g9SD/6APZG84SoDGwoDQeFurly3CEh+OEmBKIFgPcWwBCCHkKPJwt7nA+dvIFBg/C9wUV3VhsbnF4L4NmKYT0Fjg9HVoApgSSL/WBuBkZQKm6QQ08jDLgraF8ZPAdX6JJnCw3AFo5IHGArMs2NVsi44SYIkPlviozraFrvgFK3TyTsPvtF8AAAAASUVORK5CYII="; function readFromClipboard() { var string; try { var clipboard = Cc["@mozilla.org/widget/clipboard;1"]. getService(Ci.nsIClipboard); var trans = Cc["@mozilla.org/widget/transferable;1"]. createInstance(Ci.nsITransferable); trans.addDataFlavor("text/unicode"); if (clipboard.supportsSelectionClipboard()) { clipboard.getData(trans, clipboard.kSelectionClipboard); } else { clipboard.getData(trans, clipboard.kGlobalClipboard); } var data = {}; var dataLen = {}; trans.getTransferData("text/unicode", data, dataLen); if (data) { data = data.value.QueryInterface(Ci.nsISupportsString); string = data.data.substring(0, dataLen.value / 2); } } catch (ex) { } return string; }; function GetXmlHttpObject(){ if (window.XMLHttpRequest){ return new XMLHttpRequest();} if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP");} return null; }; var btn = this; btn.lastClick = { X: 0, Y: 0 }; addEventListener("mouseup", function(e) { if (e && e.button == 0 && e.view.top == content) { var lc = btn.lastClick; lc.X = e.clientX; lc.Y = e.clientY; } }, false); var createWindow = function(text, status, title, id, pos, size){ var win = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content; var doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId); var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()}; if(w)w.closeWin(); w = doc.createElement('div'); w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");')); w.id = wId; w.closeWin = function(){ doc.removeEventListener('keydown', keyDown, false); this.parentNode.removeChild(this); }; w.addEle = function(str, style){ var ele = doc.createElement('div'); ele.setAttribute('style', style); if(str){ ele.innerHTML = str; for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){ el = all[i]; if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){ el.parentNode.removeChild(el); }else{ for(var att = el.attributes, j = att.length; j--;){ if(/^on[a-z]+$/i.test(att[j].name))att[j].value = ''; } } } }; return this.appendChild(ele); }; var img = doc.createElement('div'); img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");'); img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close'; img.addEventListener('click', function(){this.parentNode.closeWin()}, false); w.appendChild(img); w.addEle(title, 'display:table;color:#000;font:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;'); w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); w.addEventListener('mousedown', function(e){ if(e.target == w){ e.preventDefault(); var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top); var mouseMove = function(ev){ w.style.left = origX+ev.clientX-grabX+'px'; w.style.top = origY+ev.clientY-grabY+'px'; }; doc.addEventListener('mousemove', mouseMove, false); doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false); } }, false); doc.documentElement.appendChild(w); if(size){ cnt.style.height = size.height; cnt.style.width = size.width; }else{ for(var i = 3; i < 10; i++){ if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){ cnt.style.height = 50*i+'px'; cnt.style.width = 100*i+'px'; }else break; } }; var docEle = doc.compatMode == 'CSS1Compat' ? doc.documentElement : doc.body; var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight; if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0}; if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0}; var hW = parseInt(w.offsetWidth/2); w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px'; w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px'; w.style.visibility = 'visible'; doc.addEventListener('keydown', keyDown, false); }; var getSel = function (w) { var s, d = w.document; if (d.selection) { var r = d.selection.createRange(); s = r ? r.text : '' } else { s = d.getSelection().toString(); if (!s) { var e, t = d.getElementsByTagName('textarea'), u = d.getElementsByTagName('input'), i = t.length; while(e = (i > 0) ? t[--i] : u[-i--])try{ if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break }catch(x){} } }; if (!s) for (var j = 0, f; f = w.frames[j]; j++) { try { if (s = getSel(f)) break } catch(x) {} }; return s }; var getHash = function (txt) { TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())'); function sM(a) { var b; if (null !== yr) b = yr; else { b = wr(String.fromCharCode(84)); var c = wr(String.fromCharCode(75)); b = [b(), b()]; b[1] = c(); b = (yr = window[b.join(c())] || "") || "" } var d = wr(String.fromCharCode(116)) , c = wr(String.fromCharCode(107)) , d = [d(), d()]; d[1] = c(); c = "&" + d.join("") + "="; d = b.split("."); b = Number(d[0]) || 0; for (var e = [], f = 0, g = 0; g < a.length; g++) { var l = a.charCodeAt(g); 128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = l >> 18 | 240, e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224, e[f++] = l >> 6 & 63 | 128), e[f++] = l & 63 | 128) } a = b; for (f = 0; f < e.length; f++) a += e[f], a = xr(a, "+-a^+6"); a = xr(a, "+-3^+b+-f"); a ^= Number(d[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return c + (a.toString() + "." + (a ^ b)) } var yr = null; var wr = function(a) { return function() { return a } } , xr = function(a, b) { for (var c = 0; c < b.length - 2; c += 3) { var d = b.charAt(c + 2) , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d) , d = "+" == b.charAt(c + 1) ? a >>> d : a << d; a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d } return a }; return sM(txt); }; //----------Перевести текст из буфера в окне Google------------ var ujs_google_translat = function (dir){ var win = content, lng = win.navigator.language.slice(0, 2), txt = readFromClipboard(), l = dir.split('|'); if (txt) { var xhr = new XMLHttpRequest(); var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); xhr.onreadystatechange = function() { try{ if (xhr.readyState == 4 && xhr.status == 200) { var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0')); for(var i = 0, n; n = tmp[0][i]; i++){ if(n[0])result += n[0].toString(); }; result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>'; status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase(); createWindow(result, status, '<a href="'+url.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', btn.lastClick); } } catch (x){LOG(x)}; }; xhr.send('q=' + encodeURIComponent(txt)); } else { win.open('http://translate.google.com/translate?u='+escape(win.location.href)+'&hl='+lng+'&langpair='+dir+'&tbb=1'); }; }; //----------Перевести выделенный текст в окне Google------------ var ujs_google_translate = function (dir){ var win = content, lng = win.navigator.language.slice(0, 2), txt = getSel(win), l = dir.split('|'); if (txt) { var xhr = new XMLHttpRequest(); var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); xhr.onreadystatechange = function() { try{ if (xhr.readyState == 4 && xhr.status == 200) { var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0')); for(var i = 0, n; n = tmp[0][i]; i++){ if(n[0])result += n[0].toString(); }; result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>'; status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase(); createWindow(result, status, '<a href="'+url.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', btn.lastClick); } } catch (x){LOG(x)}; }; xhr.send('q=' + encodeURIComponent(txt)); } else { win.open('http://translate.google.com/translate?u='+escape(win.location.href)+'&hl='+lng+'&langpair='+dir+'&tbb=1'); }; }; //----------Перевести выделенный текст в окне Microsoft------------ function ujs_Microsoft_translate (){ var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); if (txt) { var xhr = new XMLHttpRequest(); var encTxt = encodeURIComponent(txt), post = encTxt.length > 1024; var urlt = 'http://www.bing.com/translator/?from='+langFrom_Microsoft_text+'&to='+langTo_Microsoft_text+'&SourceText=' + encTxt; var keyus = "366EA718B7846D2CBD6E0129E55F518D31E741BE"; var uridetect = "http://api.microsofttranslator.com/V2/Ajax.svc/Detect?appId="+keyus+"&text="+ encTxt; var url="http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId="+keyus+"&from="+langFrom_Microsoft_text+"&to="+langTo_Microsoft_text+"&text="+ encTxt; if (txt && location. hostname != 'http://api.microsofttranslator.com/') { var result="Подождите идет перевод", status=""; createWindow(result, status,'<a href="'+url.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Bing</a>', '_gt', btn.lastClick); } function gettransdata(){ xmlhttp=GetXmlHttpObject(); xmlhttp.onreadystatechange=stateChanged; xmlhttp.open(post ? 'POST' : 'GET', url, true); if(post)xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(post ? encTxt : null); xmlhttp1=GetXmlHttpObject(); xmlhttp1.onreadystatechange=stateChanged; xmlhttp1.open('GET', uridetect, true); xmlhttp1.send(null); } function stateChanged(){ if (xmlhttp.readyState==4 && xmlhttp1.readyState==4) { var tryain=xmlhttp.responseText; tryain=tryain.replace(/\"/g, '').replace(/\\u000d/g, " ").replace(/\\u000a/g, "<br />").replace(/\//g, ''); var tryain1=xmlhttp1.responseText; tryain1=tryain1.replace(/\"/g, ''); var result = tryain; var status =(tryain1 +' -\u203A '+ "ru").toUpperCase(); createWindow(result, status, '<a href="'+urlt.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Bing</a>', '_gt', btn.lastClick); } } gettransdata(); } }; //----------Перевести текст в окне Яндекс------------ function ujs_yandex_translate() { var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); if (txt) { var xhr = new XMLHttpRequest(); var encTxt = encodeURIComponent(txt); var keyuser = "региструемся на сайте яндекс и беспалатно получаем ключ и вставляем вместо этого соощения"; var url ="https://translate.yandex.net/api/v1.5/tr.json/translate?key="+keyuser+"&lang="+langFrom_yandex_text+langTo_yandex_text+"&text=" + encTxt; function gettransdata(){ xmlhttp=GetXmlHttpObject(); xmlhttp.onreadystatechange=stateChanged; xmlhttp.open('GET', url, true); xmlhttp.send(null); } function stateChanged(){ if (xmlhttp.readyState==4) { var tryain=xmlhttp.responseText; tryain=tryain.replace(/\\n/g, "<br />"); var data = JSON.parse( tryain ); var result,status; if (data.code == "401") {result = "Неправильный ключ API"; status = "";} if (data.code == "402") {result = "Ключ API заблокирован"; status = "";} if (data.code == "403") {result = "Превышено суточное ограничение на количество запросов"; status = "";} if (data.code == "404") {result = "Превышено суточное ограничение на объем переведенного текста"; status = "";} if (data.code == "413") {result = "Превышен максимально допустимый размер текста"; status = "";} if (data.code == "422") {result = "Текст не может быть переведен"; status = "";} if (data.code == "501") {result = "Заданное направление перевода не поддерживается"; status = "";} if (data.code == "200") {result = data.text; var status1 = data.lang; status =(status1.replace(/\-/g, "-\u203A")).toUpperCase();} var urlt = 'http://translate.yandex.ru/?text=' + encTxt + '&lang=' + status1; createWindow(result, status, '<a href="'+urlt.replace(/&/g,'&')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Яндекс</a>', '_gt', btn.lastClick); } } gettransdata(); } }; //--------Перевести страницу с Google-------------- function ujs_googlePage_translate() { var urlt = content.document.location.href; var url = "http://translate.google.com/translate?hl=ru&sl=auto&tl=ru&u="+ encodeURIComponent(urlt) + "&sandbox=1"; //loadURI(url); getBrowser (). loadURI(url, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); }; //---------Перевести страницу с Promt--------------- function ujs_PromtPage_translate() { var urlt = content.document.location.href; var url = "http://www.translate.ru/siteTranslation/autolink/?direction=ar&template=General&sourceURL="+encodeURIComponent(urlt); //loadURI(url); getBrowser (). loadURI(url, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); }; //---------Перевести страницу с Microsoft--------------- function ujs_MicrosoftPage_translate() { var urlt = content.document.location.href; var url = "http://www.microsofttranslator.com/bv.aspx?from=&to=ru&a="+encodeURIComponent(urlt); //loadURI(url); getBrowser (). loadURI(url, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); }; //---------Перевести страницу с Microsoft в новой вкладке --------------- function ujs_MicrosoftPageNew_translate() { var urlt = content.document.location.href; var url = "http://www.microsofttranslator.com/bv.aspx?from=&to=ru&a="+encodeURIComponent(urlt); var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //---------Перевести страницу с Promt в новой вкладке --------------- function ujs_PromtPageNew_translate() { var urlt = content.document.location.href; var url = "http://www.translate.ru/site/General/au-ru/?url="+ encodeURIComponent(urlt) + ""; var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //--------Перевести страницу с Google в новой вкладке -------------- function ujs_GooglePageNew_translate() { var urlt = content.document.location.href; var url = "http://translate.google.com/translate?hl=ru&sl=auto&tl=ru&u="+ encodeURIComponent(urlt) + "&sandbox=1"; var ctabpos = gBrowser.selectedTab._tPos +1; var css = '@-moz-document domain("translate.google.com") {\ #gb, #gt-c:not([class="g-section"]) { display: none !important; }\ #contentframe { top: 0 !important; }\ }'; var uri = makeURI("data:text/css," + encodeURIComponent(css)); var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService); try { sss.unregisterSheet(uri, sss.AGENT_SHEET) } catch(e) { sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET) } gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //--------Перевести текст в Google в новой вкладке-------------- function ujs_GoogleTextPageNew_translate() { var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); var ctabpos = gBrowser.selectedTab._tPos +1; var url="http://translate.google.com/translate_t?text="+encTxt+"&sl=auto&tl=ru&hl=ru&eotf=0&ujs=gtt"; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //--------Перевести текст в Яндексе в новой вкладке-------------- function ujs_yandexTextPageNew_translate() { var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); var ctabpos = gBrowser.selectedTab._tPos +1; var urlt="http://translate.yandex.ru/?text=" + encTxt + "&lang=" + "-ru"; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(urlt), ctabpos); }; //---------Перевести текст в PROMT в новой вкладке--------------- function ujs_PROMTTextPageNew_translate(){ var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); var ctabpos = gBrowser.selectedTab._tPos +1; var url="http://www.translate.ru/?External=IE8Accelerator&formEncoding=utf-8&direction=ar&prmtlang=ru&status=translate&template=General&source="+encTxt; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //---------Перевести текст в Microsoft в новой вкладке--------------- function ujs_MicrosoftTextPageNew_translate(){ var ctabpos = gBrowser.selectedTab._tPos +1; var win = content, txt = getSel(win); var encTxt = encodeURIComponent(txt); var url="http://www.bing.com/translator/?to=ru&Text="+encTxt; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; //Контекстное меню для перевода из буфера------------------------------------------- (function () { if ( document.getElementById("TranslateBufer") ) return; var contextMenu = document.getElementById("contentAreaContextMenu"); var Item = document.createElement("menuitem"); Item.setAttribute("Id", "TranslateBufer"); Item.setAttribute("label", "Перевод из буфера"); Item.setAttribute("class", "menuitem-iconic"); Item.setAttribute("image", mainicon); Item.addEventListener("command", function(){ujs_google_translat('auto|ru')}, false); contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection") ); })(); //Контекстное меню для перевода страниц------------------------------------------- (function () { if ( document.getElementById("TranslatePage") ) return; var menu = document.createElement("menu"); var menuPopup = document.createElement("menupopup"); var contextMenu = document.getElementById("contentAreaContextMenu"); menu.id = "TranslatePage"; menu.setAttribute("label", "Перевести страницу"); menu.setAttribute("class", "menu-iconic"); menu.setAttribute("image", mainicon); contextMenu.insertBefore(menu, document.getElementById("context-viewsource") ); menu.appendChild( menuPopup ); addDestructor(function() { contextMenu.removeChild( menu ) }); var array = [ {label:"Google", func: ujs_googlePage_translate, image:gticon}, {label:"Promt ", func: ujs_PromtPageNew_translate, image:promticon}, {label:"Microsoft", func: ujs_MicrosoftPage_translate, image:bingicon}, { separator: '' }, {label:"Google в новой вкладке", func: ujs_GooglePageNew_translate, image:gticon}, {label:"Promt в новой вкладке", func: ujs_PromtPageNew_translate, image:promticon}, {label:"Microsoft в новой вкладке", func: ujs_MicrosoftPageNew_translate, image:bingicon} ]; array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("image", m.image); mItem.addEventListener("command", m.func, false); menuPopup.appendChild( mItem ); }); addEventListener("popupshowing", function() { menu.hidden = gContextMenu.isTextSelected || gContextMenu.onImage || gContextMenu.onTextInput ; }, true, contextMenu ); })(); //Контекстное меню для перевода текста------------------------------------------- (function () { if ( document.getElementById("TranslateSelected") ) return; var menu = document.createElement("menu"); var menuPopup = document.createElement("menupopup"); var contextMenu = document.getElementById("contentAreaContextMenu"); menu.id = "TranslateSelected"; menu.setAttribute("label", "Перевести выделенный текст"); menu.setAttribute("class", "menu-iconic"); menu.setAttribute("image", mainicon); contextMenu.insertBefore(menu, document.getElementById("context-viewpartialsource-selection") ); menu.appendChild( menuPopup ); addDestructor(function() { contextMenu.removeChild( menu ) }); var Item = document.createElement("menuitem"); Item.setAttribute("label", "В окне Google"); Item.setAttribute("class", "menuitem-iconic"); Item.setAttribute("image", gticon); Item.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false); menuPopup.appendChild( Item ); var array = [ {label:"В окне Яндекс", func: ujs_yandex_translate, image:yndicon}, {label:"В окне Microsoft", func: ujs_Microsoft_translate, image:bingicon}, { separator: ''}, {label:"В Google в новой вкладке", func: ujs_GoogleTextPageNew_translate, image:gticon}, {label:"В Яндексе в новой вкладке", func: ujs_yandexTextPageNew_translate, image:yndicon}, {label:"В PROMT в новой вкладке", func: ujs_PROMTTextPageNew_translate, image:promticon}, {label:"В Microsoft в новой вкладке", func: ujs_MicrosoftTextPageNew_translate, image:bingicon} ]; array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("image", m.image); mItem.addEventListener("command", m.func, false); menuPopup.appendChild( mItem ); }); addEventListener("popupshowing", function() { menu.hidden = !gContextMenu.isTextSelected; }, false, contextMenu ); })();
Отсутствует
Andrey_Krropotkin
Огромное спасибо за прекрасную кнопку перевода! Попробовал переводить один текст во всех 4 переводчиках. Лучше всех переводит Google, IMHO. А вот Перевести выделенный текст в окне Яндекс у меня не работает. Вот такое показывает:
Отсутствует
rubel там же в коде написано var keyuser = "региструемся на сайте яндекс и беспалатно получаем ключ и вставляем вместо этого сообщения";
иначе если все будут пользоваться, то быстро слетит
Отсутствует
Есть кнопка https://forum.mozilla-russia.org/viewto … 60#p458560. Это кнопка № 23- Autocopy. Работает хорошо. Нельзя ли сделать, чтобы значок (иконка) кнопки мигала при выделении текста, а не сам текст.
Отредактировано nbuh (18-01-2019 16:18:09)
Отсутствует
Что то никто не отвечает! Наверно задача не выполнимая.....
Задам другой вопрос, более важный для меня. Есть портабельный ФФ 56.02. Установлены несколько кнопок. Работает нормально, но при переходе на другую ось, или при запуске в другом компьютере, Сustom Buttons как бы отключает свою работу....Т.е. сама она есть, в дополениях - установлена, а кнопок - нет, пропали из панелей....Приходится Сustom Buttons переустановить, ну, а кнопки сразу все появляются и функционируют. Можно это как-то решить, исправить?
P.S. Сustom Buttons хоть подписанная, хоть нет, одинаковая трабла..Все так мучаются?
Отсутствует
nbuh
Портабельная? и профиль очищается?
А так редко кто тут отвечает да и вообще форум тихо умирает), пик был пару лет назад...
Кстати вроде кидали какие-та версий Autocopy тута, посмотри... или через пойск.
https://forum.mozilla-russia.org/viewtopic.php?pid=766152#p766152
Отсутствует
momo2000, Спасибо!
extensions.json надо удалить из папки профиля
Да! Мне об этом уже сказал, в личку, один хороший человек! И это работает! Это в несколько раз лучше, чем переустанавливать Сustom Buttons. Может есть спецы, которые могут сделать такую фичу, чтобы при закрытии этого портабла, файл extensions.json, удалялся...Может скрипт, или батник, или ещё что.....?!
Отредактировано nbuh (24-01-2019 11:39:46)
Отсутствует
func4ptch4 Спасибо за ответ!
Правда, я не такой продвинутый юзер, больше - пользователь...
Если, я правильно понял, то надо:
1. Создать кнопку с выложенным кодом, вытащить её на панель...
2. Файлы: user_chrome_files и SQL.vbs положить в папку chrome.
На остальное моих мозгов не хватит, если будет время и желание, ответить, подробнее, поправить, буду рад.
Отсутствует
func4ptch4, Привет! Спасибо!
1.Кнопку, с выложенным кодом, создал.
2.Файлы user_chrome_files и SQL.vbs положил в папку профиля, в них ничего не менял.
Но, при закрытии браузера,просто сам открывается, блокнотом, файл SQL.vbs. Видимо, что-то с ним надо сделать.
Пока файл extensions.json не удаляется....
Отсутствует
func4ptch4, Привет!
Проверь просто закрыв браузер если в папке профиля удаляются файлы
Какие, конкретно, не весь же профиль?
но удаление extensions.json надо добавить в sqlite[Fix].bat.
Да, там "китайская грамота", для меня! Что, в выложенном (рекомендованном вами) батнике, это не прописано?
А в SQL.vbs, надо прописывать, какие-то пути? Если надо, то как? Например......
Неужели эти вопросы нигде не обсуждались, у всех хорошо портаблы работают, или ими пользуются только программисты!?
Отсутствует
nbuh
https://anonfile.com/o1Dft8s2b6/profile_rar
Перезалил, теперь все кидай в профиль... добавил в список extensions.json+всякий хлам.
В общем, ты заметишь удаление и сжатие.
Ах да для открытия батника и т.д. лучше использовать notepad++, а блокнотом там каракули)
//======================================================================================= //[+?] AutoDelSql+trash try{document.getElementById("context-viewimage").setAttribute("onclick","gBrowser.selectedTab=gBrowser.addTab(checkForMiddleClick(this,event))");} catch(e){};var closer={observe:function(subject,topic,data){if(data=="shutdown"){ var file=Services.dirsvc.get("ProfD",Ci.nsIFile); //file.append("g.vbs"); file.append("SQL.vbs");if(file.exists())file.launch();}}}; Services.obs.addObserver(closer,"quit-application",false); /**/ //= = = = = = = = = = = = /* //Drage - forum.ru-board.com/topic.cgi?forum=2&topic=4283&start=2100#21 var closer={observe:function(subject,topic,data){if(data=="shutdown"){ var profile=Services.dirsvc.get('ProfD',Ci.nsIFile); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(profile.path+"\\..\\nir\\m.vbs");file.launch(); file.initWithPath(profile.path+"\\sqlite.vbs");file.launch();}}}; Services.obs.addObserver(closer,"quit-application",false); */ //= = = /* //Vitaliy V. работает на всех плат.Windows+Lin... var closer={observe: function(subject,topic,data){if(data=="shutdown"){ var profile=Services.dirsvc.get('ProfD',Ci.nsIFile); var dirs=profile.parent; dirs.append("memreduct");dirs.append("h.vbs");if(dirs.exists())dirs.launch(); profile.append("SQLite.vbs");if(profile.exists())profile.launch();}}}; Services.obs.addObserver(closer,"quit-application",false); */ //= = = /* //Dumby - forum.mozilla-russia.org/viewtopic.php?pid=765700#p765700||765705#p765705 var closer={observe:function(subject,topic,data){if(data=="shutdown"){ var file=Services.dirsvc.get('ProfD',Ci.nsIFile); ["custombuttons","backup","buttonsoverlay.xul.bak"].forEach(file.append);file.reveal(); file.initWithPath(profile.path+"\\SQLite.vbs");file.launch();}}}; Services.obs.addObserver(closer,"quit-application",false); */
Отредактировано func4ptch4 (01-02-2019 11:21:13)
Отсутствует
func4ptch4, спасибо за желание помочь!
Но есть вопросы!
1.
для открытия батника и т.д. лучше использовать notepad+
Да установил. Есть, батнике строка под №137. Там надо менять пути?
Ну, если только добавить так: REM %appdata%\Mozilla\Firefox\Profiles\700whmgz.default
Или не так надо?
Вообще-то путь, такой же и у стационарно установленного ФФ, только конечная папка другая.
2.
Код CB в /*Initialization Code*/
Зачем нужна эта кнопка?
Отсутствует
nbuh
1. Нет только то что светится, если не подсвечен то не работает... это называется закомментировать(то есть тот код не пашет, пока не уберешь :: )
Код на удаление папок начинается с 31 строки и там он берет прямо с профиля, никакие пути не нужны.
Я писал про код на 137 строке, это код который я не перебрал его можно вообще убрать...
Хотел разобраться в нем чтобы применить к себе, это автобекап профиля.
2. Этот код следит за закрытием браузера и запускает SQL.vbs с профиля, без него все смысла нет во всем остальном.
SQL.vbs запускает sqlite[Fix].bat>sqlite3.exe идет стирание лишних файлов и сжатие .sqlite ...
Ах да вам надо выбрать один из них, можете оставить первый.
Можете все скопировать все равно остальные закомментил.
Отсутствует
Есть кнопка_Add-on's, вроде работает в 52, но эта кнопка_Extension List показывает: Add-on's "ошибка инициализации". Что нужно изменить???
Отредактировано kokoss (22-04-2019 20:17:39)
Win7
Отсутствует