>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Изменить масштаб http://forum.mozilla-russia.org/viewtopic.php?id=52380 |
bunda1 > 13-11-2011 03:51:31 |
Изменить масштаб( Firefox 24 + ) Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке, от 27.11.2017. .......................... (()=> { // Удалить из адресной строки FF51 стандартную кнопку масштаба .... var but = document.getElementById('urlbar-zoom-button'); if (but) but.style.display = "none"; // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57 urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки addDestructor(()=> zoomButton.remove()); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.setAttribute("context", "event.stopPropagation()"); zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -1px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% "; // Отслеживать клики на кнопке масштаба .... addEventListener("click", e=> { if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 1 ) { // единый масштаб для всех страниц cbu.isPref("CB.zoom.allEvenly", false); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); updateZoomButton(); } if ( e.button == 2 ) FullZoom.reset(); // сбросить масштаб }, false, zoomButton); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, zoomButton); // Следим за изменением масштаба и запускаем обновление кнопки .... var str = "{ setTimeout(()=> { updateZoomButton() }, 50);"; var handleEvent = parseInt(Services.appinfo.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled; var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent]; array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) )}, 50) }); addDestructor(()=> { array.forEach(func=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ) }); }); // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(()=> { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); // запомнить текущий масштаб в 'about:config' if ( e == undefined ) { try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {}; zoomButton.prefTimeout = window.setTimeout(()=> { cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }, 250); } }; // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", e=> { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(()=> { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0); } else updateZoomButton(e); }, true, gBrowser.tabContainer); })(); |
Andrey_Krropotkin > 13-11-2011 09:36:01 |
Добавьте пожалуйста сброс до 100% по правому клику или по двойному. |
mserv > 13-11-2011 10:51:07 |
bunda1 пишет
ПКМ и СКМ тоже |
bunda1 > 13-11-2011 15:36:23 |
Andrey_Krropotkin пишет
Я сделал сброс до 100% по правому клику. 13-11-2011 15:59:39 mserv пишет
Исправил. Спасибо что быстро находишь мои ошибки. |
BBoxerb > 17-11-2011 16:48:10 |
bunda1 |
bunda1 > 17-11-2011 18:05:00 |
BBoxerb пишет
У меня такого не наблюдается, это на каком форуме? Кнопка устанавливает единый масштаб для сайта - под одним адресом, но не для новых страниц, которые находятся на других сайтах. BBoxerb пишет
На все страницы? Мне кажется это будет очень не удобно. Я постоянно меняю масштаб для разных сайтов. Можно зделать так. |
bunda1 > 17-11-2011 21:03:26 |
Изменить масштаб (Firefox 3.6 - 10) |
BBoxerb > 18-11-2011 13:15:33 |
Была у меня ваша кнопка "Zoom2" я решил сделать еще одну кнопку "Изменить масштаб", но поскольку мне нужно чтобы масштаб сохранялся, а не откатывался на 100% я обе кнопки удалил, но в адресной строке масштаб остался |
bunda1 > 18-11-2011 15:26:50 |
BBoxerb пишет
Точно есть такая проблема, самопроизвольный сброс на 100% ,тут надо подумать. |
mserv > 18-11-2011 16:03:22 |
bunda1 |
bunda1 > 18-11-2011 16:48:49 |
mserv |
mserv > 18-11-2011 16:55:22 |
bunda1 |
bunda1 > 18-11-2011 17:03:50 |
mserv пишет
папробуй изменить в userChrome.css высоту для #ucjs_zoom_statuslabel на что то, например на |
bunda1 > 18-11-2011 21:32:44 |
Изменить масштаб (Firefox 3.6 - 10) |
BBoxerb > 18-11-2011 22:39:46 |
bunda1 |
bunda1 > 26-11-2011 23:03:34 |
Изменить масштаб (Firefox 3.6 - 10) |
kveresov > 22-04-2012 15:26:13 |
может не в тему, но есть ли расширение для firefox добавляющее в строку состояния две кнопки "-""+" для масштабирования станицы? чтоб не крутить колёсико мыши удерживая Ctrl |
iluha-mai > 25-04-2012 14:47:46 |
Всем привет! Подскажите, как выставить для мозиллы например масштаб 200 для всех страниц? |
bunda1 > 25-04-2012 19:47:53 |
iluha-mai |
bunda1 > 20-05-2012 18:47:57 |
Изменить масштаб (Firefox 3.6 +) Изменить масштаб(Firefox 3.6 +) |
BBoxerb > 11-06-2012 07:26:21 |
bunda1 |
bunda1 > 11-06-2012 08:17:30 |
BBoxerb пишет
Так и должно быть, ты же включил единый масштаб для всех страниц = 100% 20-05-2012 17:47:57 |
BBoxerb > 11-06-2012 14:36:27 |
bunda1 |
bunda1 > 11-06-2012 18:47:24 |
BBoxerb пишет
Нет не правильно: |
BBoxerb > 12-06-2012 19:02:28 |
bunda1 |
bunda1 > 12-06-2012 22:11:01 |
BBoxerb |
bunda1 > 06-07-2012 22:38:56 |
Изменить масштаб (Firefox 3.6 +) 13-11-2011 02:51:31 Уменьшил потребление ресурсов кодом кнопки. |
BBoxerb > 22-08-2012 19:58:00 |
Cнова я |
bunda1 > 22-08-2012 20:25:30 |
BBoxerb пишет
Если я правильно понял у тебя самопроизвольный уменьшается масштаб ? BBoxerb пишет
Какие кнопки ? |
BBoxerb > 24-10-2012 14:05:19 |
bunda1 |
Mils > 25-10-2012 07:58:19 |
При открытии новых окон не сохраняется масштаб, как исправить? |
bunda1 > 25-10-2012 18:28:08 |
Mils пишет
У меня такой баг не наблюдается. Когда ты устанавливал или обновлял кнопку? Я уже исправлял такой баг 06-07-2012 21:38:56 |
voqabuhe > 27-05-2013 20:09:09 |
bunda1 |
bunda1 > 27-05-2013 21:03:03 |
voqabuhe пишет
Да в коде были ошибки я их исправыл но код все равно не работает как надо и старый код тоже. Похоже на Nightly сломали: Выделить код Код:eval("FullZoom.onLocationChange = " + FullZoom.onLocationChange.toString().replace(/}$/, __cmd)); 27-05-2013 21:03:48 27-05-2013 21:13:28 |
voqabuhe > 27-05-2013 21:40:56 |
bunda1 пишет
Да спасибо, теперь вроде всё работает. Кстати с предыдущей версией у меня никаких проблем не было. |
voqabuhe > 30-05-2013 11:17:22 |
bunda1 |
bunda1 > 30-05-2013 18:40:22 |
Если я правильно понял то после переключения на режим "менять масштаб страниц" переключаясь на другие сайты масштаб меняется но на кнопке отображается ранее установленный масштаб. |
voqabuhe > 30-05-2013 19:30:46 |
bunda1 |
bunda1 > 30-05-2013 19:55:36 |
Увеличить масштаб: Уменьшить масштаб: |
voqabuhe > 30-05-2013 21:33:05 |
bunda1 |
voqabuhe > 30-11-2013 22:03:10 |
bunda1 |
bunda1 > 30-11-2013 22:45:08 |
voqabuhe пишет
Ты уверен, ни какой связи с открытием ссылок на странице не должно быть. Может попробуй: Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке, от 30.11.2013. ................................ (function () { // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore( zoomButton, urlbarIcons.lastChild ); // перед первой иконкой адресной строки addDestructor(function() { urlbarIcons.removeChild( zoomButton ) }); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% "; // Отслеживать клики на кнопке масштаба .... addEventListener("click", function(e) { if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 1 ) { // единый масштаб для всех страниц cbu.isPref("CB.zoom.allEvenly", false ); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); updateZoomButton(); } if ( e.button == 2 ) { e.preventDefault(); FullZoom.reset() }; // сбросить масштаб }, false, zoomButton ); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", function(e) { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, zoomButton ); // Следим за изменением масштаба и запускаем изменения отображения масштаба на кнопке или установку единого масштаба .... var str = "updateZoomButton(); $&";// var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, FullZoom._handleMouseScrolled]; array.forEach(function( func ) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace(/}$/, str)).replace('_', '.') ) }); addDestructor(function() { array.forEach(function( func ) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace('_', '.') ) }); }); // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(function() { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); if ( e == undefined ) cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }; // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", function(e) { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(function() { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0) } else updateZoomButton(e); }, true, gBrowser.tabContainer ); })(); |
voqabuhe > 30-11-2013 23:00:38 |
bunda1 пишет
Конечно уверен, несколько раз пробовал.
|
rbfyec > 01-12-2013 00:49:49 |
Я пользуюсь кнопкой с этого форума, не могу даже сказать точное название. Вот её код скрытый текст Выделить код Код:this.tooltipText = "[L=Zoom+ |M=Page/Text |R=Zoom-]"; var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); var TextIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII='; var PageIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC'; if(prefs.getBoolPref("browser.zoom.full")) this.image = PageIcon; else this.image = TextIcon; this.leftclick = function(e) { document.getElementById("cmd_fullZoomEnlarge").doCommand(); } this.midclick = function (evt){ if(prefs.getBoolPref("browser.zoom.full")) { prefs.setBoolPref("browser.zoom.full", false); this.image = TextIcon; ucjs_zoom.updateZoom(); } else{ prefs.setBoolPref("browser.zoom.full", true); this.image = PageIcon; ucjs_zoom.updateZoom(); } }; this.rightclick = function(event) { document.getElementById("cmd_fullZoomReduce").doCommand(); }; this. gQuot = {}; this. gQuot. __proto__ = custombuttons. gQuot; this. gQuot. dcDelay = 0; this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)'); //Zoom+ ........................................ var ucjs_zoom = { _TAGET_ID: "page-report-button", // Цвет и знаков(default: представляющая режим масштабирования) _ZOOM_MODE: [ { txt: "\Full Zoom", color: "false", font: "font-weight: normal ;" }, // Полный зум, черный { txt: "\Zoom", color: "true", font: "font-weight: bold;" } ], // Масштаб текста синий //Инициализация init: function() { // Zoom var _cmd = "ucjs_zoom.updateZoom(); $&"; // toggleZoom eval("ZoomManager.toggleZoom = " + ZoomManager.toggleZoom.toString().replace(/}$/, _cmd)); // reset eval("FullZoom.reset = " + FullZoom.reset.toString().replace(/}$/, _cmd)); // enlarge eval("FullZoom.enlarge = " + FullZoom.enlarge.toString().replace(/}$/, _cmd)); // reduce eval("FullZoom.reduce = " + FullZoom.reduce.toString().replace(/}$/, _cmd)); // onLocationChange eval("FullZoom.onLocationChange = " + FullZoom.onLocationChange.toString().replace(/}$/, _cmd)); // _handleMouseScrolled _cmd = "setTimeout(ucjs_zoom.updateZoom, 0); $&"; eval("FullZoom._handleMouseScrolled = " + FullZoom._handleMouseScrolled.toString().replace(/}$/, _cmd)); // Zoom Создание панели var zoomPanel = document.createElement("statusbarpanel"); zoomPanel.setAttribute("id", "ucjs_zoom_statuslabel"); zoomPanel.setAttribute("context", "ucjs_zoom-context"); var targetPanel = document.getElementById(this._TAGET_ID); targetPanel.parentNode.insertBefore(zoomPanel, targetPanel.nextSibling); // Zoom Колесико прокрутки на панели zoomPanel.addEventListener("DOMMouseScroll", function(event){ if (event.detail > 0) FullZoom.reduce(); else FullZoom.enlarge(); }, false); //Zoom Reset zoomPanel.addEventListener("click", function(){document.getElementById("cmd_fullZoomReset").doCommand()}, true); }, // Чтобы изменить значение масштаба для определения количества set_Zoom: function(n) { var markupDocumentViewer = getBrowser().markupDocumentViewer; if (!markupDocumentViewer) return; if (ZoomManager.useFullZoom) { if (markupDocumentViewer.textZoom != 1) markupDocumentViewer.textZoom = 1; if (markupDocumentViewer.fullZoom != n) markupDocumentViewer.fullZoom = n; } else { if (markupDocumentViewer.textZoom != n) markupDocumentViewer.textZoom = n; if (markupDocumentViewer.fullZoom != 1) markupDocumentViewer.fullZoom = 1; } ucjs_zoom.updateZoom(); return n; }, // Обновить статус кнопки updateZoom: function(){ // Кнопка для обновления статуса var Zoom = document.getElementById("ucjs_zoom_statuslabel"); Zoom.setAttribute("label", Math.floor((ZoomManager.zoom + 0.005) * 100) + "%"); Zoom.setAttribute("tooltiptext", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].txt); Zoom.setAttribute("ZoomStyle", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].color); Zoom.setAttribute("style", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].font); } }; //Запускаем функцию // не запускаем функцию, если функция уже выполнялась if (!document.getElementById("ucjs_zoom_statuslabel")) ucjs_zoom.init(); //image Change Size....................................... (function imageChangeSize(){ // выходим, если функция уже выполнялась if (document.getElementById("imagechangesize")) return; const MAGNIFICATION = 2; const MAX_MAGNIFICATION = MAGNIFICATION * 8; const MIN_MAGNIFICATION = MAGNIFICATION / 8; const ZOOM_ATTR = "jsa-zoom"; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "imagechangesize"; var locale = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch) .getCharPref("general.useragent.locale"); menu.setAttribute("label", locale.indexOf("ru") == -1 ? "Image zoom" : "Изменить размер"); menu.setAttribute("accesskey", "i"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"\Zoom (+)", command:zoomIn }, { label:"\Zoom (-)", command:zoomOut }, { label:"\Zoom (0)", command:original } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "image-change-size-" + m.label.toString(); menuPopup.appendChild(menuItem); } contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if(gContextMenu.onImage){ document.getElementById("imagechangesize").hidden = false; }else{ document.getElementById("imagechangesize").hidden = true; } } function zoomIn(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; var zoom = imgObj.getAttribute(ZOOM_ATTR); if(zoom == null) zoom = 1; if(MAX_MAGNIFICATION > zoom){ zoom = parseFloat(zoom) * MAGNIFICATION; imgObj.width = imgObj.naturalWidth * zoom; imgObj.height = imgObj.naturalHeight * zoom; imgObj.setAttribute(ZOOM_ATTR, zoom); } } function original(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; imgObj.width = imgObj.naturalWidth; imgObj.height = imgObj.naturalHeight; imgObj.removeAttribute(ZOOM_ATTR); } function zoomOut(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; var zoom = imgObj.getAttribute(ZOOM_ATTR); if(zoom == null) zoom = 1; if(MIN_MAGNIFICATION < zoom){ zoom = parseFloat(zoom) / MAGNIFICATION; if(zoom == 0){ imgObj.width = imgObj.naturalWidth; imgObj.height = imgObj.naturalHeight; }else{ imgObj.width = imgObj.naturalWidth * zoom; imgObj.height = imgObj.naturalHeight * zoom; } imgObj.setAttribute(ZOOM_ATTR, zoom); } } })(); Менять кнопку мне бы не хотелось, эта меня вполне устраивает. Но одно НО - часто в адресной строке показан масштаб 100%, хотя на самом деле он другой. Как бы эту кнопку довести до ума? |
bunda1 > 01-12-2013 01:09:52 |
rbfyec Попробуй: Выделить код Код:this.tooltipText = "[L=Zoom+ |M=Page/Text |R=Zoom-]"; var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); var TextIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII='; var PageIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC'; if(prefs.getBoolPref("browser.zoom.full")) this.image = PageIcon; else this.image = TextIcon; this.leftclick = function(e) { document.getElementById("cmd_fullZoomEnlarge").doCommand(); } this.midclick = function (evt){ if(prefs.getBoolPref("browser.zoom.full")) { prefs.setBoolPref("browser.zoom.full", false); this.image = TextIcon; ucjs_zoom.updateZoom(); } else{ prefs.setBoolPref("browser.zoom.full", true); this.image = PageIcon; ucjs_zoom.updateZoom(); } }; this.rightclick = function(event) { document.getElementById("cmd_fullZoomReduce").doCommand(); }; this. gQuot = {}; this. gQuot. __proto__ = custombuttons. gQuot; this. gQuot. dcDelay = 0; this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)'); //Zoom+ ........................................ var ucjs_zoom = { _TAGET_ID: "page-report-button", // Цвет и знаков(default: представляющая режим масштабирования) _ZOOM_MODE: [ { txt: "\Full Zoom", color: "false", font: "font-weight: normal ;" }, // Полный зум, черный { txt: "\Zoom", color: "true", font: "font-weight: bold;" } ], // Масштаб текста синий //Инициализация init: function() { // Zoom var _cmd = "ucjs_zoom.updateZoom(); $&"; // toggleZoom eval("ZoomManager.toggleZoom = " + ZoomManager.toggleZoom.toString().replace(/}$/, _cmd)); // reset eval("FullZoom.reset = " + FullZoom.reset.toString().replace(/}$/, _cmd)); // enlarge eval("FullZoom.enlarge = " + FullZoom.enlarge.toString().replace(/}$/, _cmd)); // reduce eval("FullZoom.reduce = " + FullZoom.reduce.toString().replace(/}$/, _cmd)); // _handleMouseScrolled _cmd = "setTimeout(ucjs_zoom.updateZoom, 0); $&"; eval("FullZoom._handleMouseScrolled = " + FullZoom._handleMouseScrolled.toString().replace(/}$/, _cmd)); addEventListener("TabAttrModified", function(e) { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; ucjs_zoom.updateZoom(); }, true, gBrowser.tabContainer ); // Zoom Создание панели var zoomPanel = document.createElement("statusbarpanel"); zoomPanel.setAttribute("id", "ucjs_zoom_statuslabel"); zoomPanel.setAttribute("context", "ucjs_zoom-context"); var targetPanel = document.getElementById(this._TAGET_ID); targetPanel.parentNode.insertBefore(zoomPanel, targetPanel.nextSibling); // Zoom Колесико прокрутки на панели zoomPanel.addEventListener("DOMMouseScroll", function(event){ if (event.detail > 0) FullZoom.reduce(); else FullZoom.enlarge(); }, false); //Zoom Reset zoomPanel.addEventListener("click", function(){document.getElementById("cmd_fullZoomReset").doCommand()}, true); }, // Чтобы изменить значение масштаба для определения количества set_Zoom: function(n) { var markupDocumentViewer = getBrowser().markupDocumentViewer; if (!markupDocumentViewer) return; if (ZoomManager.useFullZoom) { if (markupDocumentViewer.textZoom != 1) markupDocumentViewer.textZoom = 1; if (markupDocumentViewer.fullZoom != n) markupDocumentViewer.fullZoom = n; } else { if (markupDocumentViewer.textZoom != n) markupDocumentViewer.textZoom = n; if (markupDocumentViewer.fullZoom != 1) markupDocumentViewer.fullZoom = 1; } ucjs_zoom.updateZoom(); return n; }, // Обновить статус кнопки updateZoom: function(){ // Кнопка для обновления статуса var Zoom = document.getElementById("ucjs_zoom_statuslabel"); Zoom.setAttribute("label", Math.floor((ZoomManager.zoom + 0.005) * 100) + "%"); Zoom.setAttribute("tooltiptext", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].txt); Zoom.setAttribute("ZoomStyle", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].color); Zoom.setAttribute("style", ucjs_zoom._ZOOM_MODE[ZoomManager.useFullZoom? 0: 1].font); } }; //Запускаем функцию // не запускаем функцию, если функция уже выполнялась if (!document.getElementById("ucjs_zoom_statuslabel")) ucjs_zoom.init(); //image Change Size....................................... (function imageChangeSize(){ // выходим, если функция уже выполнялась if (document.getElementById("imagechangesize")) return; const MAGNIFICATION = 2; const MAX_MAGNIFICATION = MAGNIFICATION * 8; const MIN_MAGNIFICATION = MAGNIFICATION / 8; const ZOOM_ATTR = "jsa-zoom"; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "imagechangesize"; var locale = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch) .getCharPref("general.useragent.locale"); menu.setAttribute("label", locale.indexOf("ru") == -1 ? "Image zoom" : "Изменить размер"); menu.setAttribute("accesskey", "i"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"\Zoom (+)", command:zoomIn }, { label:"\Zoom (-)", command:zoomOut }, { label:"\Zoom (0)", command:original } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "image-change-size-" + m.label.toString(); menuPopup.appendChild(menuItem); } contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if(gContextMenu.onImage){ document.getElementById("imagechangesize").hidden = false; }else{ document.getElementById("imagechangesize").hidden = true; } } function zoomIn(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; var zoom = imgObj.getAttribute(ZOOM_ATTR); if(zoom == null) zoom = 1; if(MAX_MAGNIFICATION > zoom){ zoom = parseFloat(zoom) * MAGNIFICATION; imgObj.width = imgObj.naturalWidth * zoom; imgObj.height = imgObj.naturalHeight * zoom; imgObj.setAttribute(ZOOM_ATTR, zoom); } } function original(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; imgObj.width = imgObj.naturalWidth; imgObj.height = imgObj.naturalHeight; imgObj.removeAttribute(ZOOM_ATTR); } function zoomOut(){ var imgObj = gContextMenu.target; if(imgObj.localName.toLowerCase() != "img") return; var zoom = imgObj.getAttribute(ZOOM_ATTR); if(zoom == null) zoom = 1; if(MIN_MAGNIFICATION < zoom){ zoom = parseFloat(zoom) / MAGNIFICATION; if(zoom == 0){ imgObj.width = imgObj.naturalWidth; imgObj.height = imgObj.naturalHeight; }else{ imgObj.width = imgObj.naturalWidth * zoom; imgObj.height = imgObj.naturalHeight * zoom; } imgObj.setAttribute(ZOOM_ATTR, zoom); } } })(); Замени код и сделай рестарт. |
rbfyec > 01-12-2013 20:06:50 |
bunda1 Заодно уже спрошу: как перезапустить (инициализировать заново) кнопку? |
bunda1 > 01-12-2013 20:48:22 |
rbfyec пишет
А зачем, в чём проблема? |
rbfyec > 01-12-2013 21:00:56 |
bunda1 пишет
Кнопка "Открывать всё в новых вкладках, от 17.11.2013" из этого поста http://forum.mozilla-russia.org/viewtop … 66#p633366 вроде работает хорошо, но всё же иногда закладки и др. начинают открываться в текущей вкладке. Помогает перезапуск этой кнопки. |
bunda1 > 01-12-2013 21:30:15 |
rbfyec пишет
Мистика, не возможно. А закладки ты откуда отрываешь? |
rbfyec > 01-12-2013 21:53:31 |
bunda1 пишет
Menubar - Закладки - выпадающий список |
bunda1 > 03-12-2013 20:45:03 |
rbfyec |
rbfyec > 04-12-2013 19:27:54 |
bunda1 пишет
Буду ждать |
bunda1 > 07-12-2013 01:12:30 |
rbfyec пишет
Выделить код Код:// Открывать всё в новых вкладках, от 06.12.2013. ...................................... (function () { // открывать всё в новых вкладках, если пустая страница открывать в текущей .... const where = whereToOpenLink; eval("whereToOpenLink = " + where.toString().replace('return "current";\n}', '\nif ( ["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) return "current"; \nreturn e.originalTarget.id ? "tab" : "current";;\n}')); // открывать закладки и историю в новых вкладках, если букмарклети или пустая страница в текущей .... const openNode = PlacesUIUtils._openNodeIn; eval("PlacesUIUtils._openNodeIn = " + openNode.toString().replace(') {', '){\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) aWhere = "current";\n aWhere = (aWhere == "tab" || aNode.uri.startsWith("javascript:") ) ? "current" : "tab";\n') ); // если JavaScript ссылка или пустая страница открывать в текущей .... const linkIn = openLinkIn; eval("openLinkIn = " + linkIn.toString().replace(';', ';;\n if ( url.startsWith("javascript:") ) where = "current";\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) where = "current";') ); // команды адресной строки открывают всё связанное с адресной строкой в новых вкладках, если alt+ в текущей .... const handle = gURLBar.handleCommand; eval("gURLBar.handleCommand = " + handle.toString().replace(/aTriggeringEvent\s*&&\s*aTriggeringEvent.altKey/, "!($&)")); // удалять изменения из внутренних функций Firefox .... addDestructor(function() { eval("whereToOpenLink = " + where); eval("PlacesUIUtils._openNodeIn = " + openNode); eval("openLinkIn = " + linkIn); eval("gURLBar.handleCommand = " + handle); }); })(); |
rbfyec > 07-12-2013 13:05:34 |
Спасибо! Теперь буду тестить, гонять во всех режимах, смотреть что получится |
rbfyec > 07-12-2013 15:20:58 |
Что замечено: если кликнуть кнопку "Перезагрузить" - это открывает страницу в новой вкладке. Несмотря на нажатый Alt. То же самое если кликнуть стрелку в адресной строке (id="go-button"). |
voqabuhe > 07-12-2013 15:45:45 |
bunda1 |
bunda1 > 07-12-2013 19:13:01 |
rbfyec и voqabuhe |
difabor > 30-12-2013 12:33:10 |
bunda1 пишет
У меня возник вопрос касательно текстового зума. |
bunda1 > 02-01-2014 23:34:42 |
difabor пишет
Возможность такая наверно есть но я не знаю как это сделать. Надо подумать. |
ma3ca > 10-03-2014 14:22:03 |
Спасибо! Менять масштаб только текста это шикарно!!! Заметил небольшую особенность, если добавляешь код инициализации в существующую кнопку, то она мутнеет (обесцвечивается). |
voqabuhe > 10-03-2014 14:31:50 |
ma3ca пишет
|
ma3ca > 10-03-2014 14:37:43 |
voqabuhe пишет
Вставил код, перед инициализацией кода масштаба, но не помогло. Там даже если новую кнопку создавать, то она все-равно обесцвеченная получается. Разобрался, отключил дополнение, которое меняло масштаб, оставил только эту кнопку. И ещё вопрос, можно ли сделать так, что когда выбрана левая кнопка, то масштаб отображается курсивом? |
bunda1 > 10-03-2014 20:49:31 |
ma3ca пишет
Не совсем понял что требуется, но попробуй заменить в коде: на: |
dddaaakkk > 02-06-2014 09:04:36 |
Спасибо bunda1 за отличную кнопку! Давно хотел что-то подобное и вы можно сказать реализовали мою мечту Нашел небольшую проблему: у меня кнопка оказалась не самой левой в ряду иконок: Выделить код Код:... urlbarIcons.insertBefore( zoomButton, urlbarIcons.lastChild ); // перед первой иконкой адресной строки ... заменил lastChild на firstChild и кнопка встала на своё место - самое левое после всех иконок. Проверено на фаере 29, виндоус 7. |
bunda1 > 02-06-2014 23:16:02 |
Похоже что зотеро запускает похожий код добавления кнопки но после того как срабатывает расширение Сustom Buttons и код Изменить масштаб 02-06-2014 23:19:47 |
voqabuhe > 23-08-2014 00:42:43 |
bunda1 |
bunda1 > 23-08-2014 13:07:54 |
voqabuhe пишет
Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке, от 30.11.2013. ................................ (function () { // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore( zoomButton, urlbarIcons.lastChild ); // перед последней кнопкой адресной строки addDestructor(function() { urlbarIcons.removeChild( zoomButton ) }); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% "; // Отслеживать клики на кнопке масштаба .... addEventListener("click", function(e) { if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 1 ) { // единый масштаб для всех страниц cbu.isPref("CB.zoom.allEvenly", false ); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); updateZoomButton(); } if ( e.button == 2 ) { e.preventDefault(); FullZoom.reset() }; // сбросить масштаб }, false, zoomButton ); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", function(e) { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, zoomButton ); // Следим за изменением масштаба и запускаем обновление кнопки .... var str = "updateZoomButton(); $&"; var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, FullZoom.handleEvent]; array.forEach(function( func ) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace(/}$/, str)).replace('_', '.') ) }); addDestructor(function() { array.forEach(function( func ) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace('_', '.') ) }); }); // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(function() { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); // запомнить текущий масштаб в 'about:config' if ( e == undefined ) { try { window.clearTimeout( prefTimeout ) } catch(e) {}; prefTimeout = window.setTimeout(function() { cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }, 250 ); } }; // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", function(e) { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(function() { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0) } else updateZoomButton(e); }, true, gBrowser.tabContainer ); })(); |
voqabuhe > 23-08-2014 15:57:54 |
bunda1 |
Mishania > 14-09-2014 20:56:00 |
А можно соединить эту кнопку с этой: скрытый текст Выделить код Код:// Объявляем переменные для этой вкладки ................................ var _this = this; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService); var ucjsMouseGestures = { // настройки .... enableWheelGestures: true, enableRockerGestures: true, enablePopupGestures: true, _lastX: 0, _lastY: 0, _directionChain: '', _isMouseDownL: false, _isMouseDownR: false, _hideFireContext: false, //for windows _shouldFireContext: false, //for linux POPUP_ID: 'GesturePopup', // Жесты .... GESTURES: { // Управление страницей ................................ 'W-':{name:'Увеличить масштаб',cmd:function(){ FullZoom.enlarge() }}, 'W+':{name:'Уменьшить масштаб',cmd:function(){ FullZoom.reduce() }}, 'UDU':{name:'Сбросить масштаб',cmd:function(){ FullZoom.reset() }}, 'L<R':{name:'Сбросить масштаб',cmd:function(){ FullZoom.reset() }}, }, init:function() { var self = this; var events = ["mousedown", "mousemove", "mouseup", "contextmenu"]; if ( this.enableRockerGestures ) events.push("draggesture"); if ( this.enableWheelGestures ) events.push("DOMMouseScroll"); function registerEvents( aAction, eventArray ) { eventArray.forEach(function(aType) { gBrowser.mPanelContainer[aAction + "EventListener"]( aType, self, true ) }); }; registerEvents("add", events); window.addEventListener("unload", function() { registerEvents("remove",events); }, false ); addDestructor(function() { registerEvents("remove", events) }); }, handleEvent:function( event ) { switch( event.type ) { case"mousedown": if ( event.button ==2 ) { this._isMouseDownR = true; this._hideFireContext = false; this._startGesture( event ); } if ( this.enableRockerGestures ) { if ( event.button == 2 && this._isMouseDownL ) { this._isMouseDownL = false; this._isMouseDownR = false; this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "L>R"; this._stopGesture(event); } else if ( event.button == 0 ) { this._isMouseDownL = true; if ( this._isMouseDownR ) { this._isMouseDownL = false; this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "L<R"; this._stopGesture( event ); } } } break; case"mousemove": if ( this._isMouseDownR ) { this._hideFireContext = true; this._progressGesture( event ); } break; case"mouseup": if ( content.xdTrailArea ) { content.xdTrailArea.parentNode.removeChild( content.xdTrailArea ); content.xdTrailArea = content.document.documentElement.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailArea")); } if ( event.ctrlKey && event.button == 2 ) { this._isMouseDownL = false; this._isMouseDownR = false; this._shouldFireContext = false; this._hideFireContext = false; this._directionChain = ''; event.preventDefault(); XULBrowserWindow.statusTextField.label = "Reset Gesture"; break; } if ( this._isMouseDownR && event.button == 2 ) { if ( this._directionChain ) this._shouldFireContext = false; this._isMouseDownR = false; this._stopGesture( event ); if ( this._shouldFireContext && !this._hideFireContext ) { this._shouldFireContext = false; this._displayContextMenu( event ); } } else if ( this.enableRockerGestures && event.button == 0 && this._isMouseDownL ) { this._isMouseDownL = false; this._shouldFireContext = false; } else if ( this.enablePopupGestures && ( event.button == 0 || event.button == 1 ) && event.target.localName =='menuitem' ) { this._isMouseDownL = false; this._shouldFireContext = false; var popup = document.getElementById( this.POPUP_ID ); var activeItem = event.target; switch( popup.getAttribute("gesturecommand") ) { case"WebSearchPopup": var selText = popup.getAttribute("selectedtext"); var engine = activeItem.engine; if ( !engine ) break; var submission = engine.getSubmission( selText, null ); if ( !submission ) break; document.getElementById('searchbar').textbox.value = selText; gBrowser.loadOneTab( submission.uri.spec,null,null,submission.postData,null,false ); break; case"ClosedTabsPopup": undoCloseTab( activeItem.index ); break; case"HistoryPopup": gBrowser.webNavigation.gotoIndex( activeItem.index ); break; case"AllTabsPopup": gBrowser.selectedTab = gBrowser.mTabs[activeItem.index]; break; } popup.hidePopup(); } try { document.getElementById("statusbar-display").label = "" } catch(e) {}; break; case"popuphiding": var popup = document.getElementById( this.POPUP_ID ); popup.removeEventListener("popuphiding",this,true); document.documentElement.removeEventListener("mouseup",this,true); while( popup.hasChildNodes() ) popup.removeChild( popup.lastChild ); break; case"contextmenu": if ( this._isMouseDownL || this._isMouseDownR || this._hideFireContext ) { event.preventDefault(); event.stopPropagation(); this._shouldFireContext = true; this._hideFireContext = false; } break; case"DOMMouseScroll": if ( this.enableWheelGestures&&this._isMouseDownR ) { event.preventDefault(); event.stopPropagation(); this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "W" + ( event.detail > 0 ? "+" : "-" ); this._stopGesture(event); } break; case"draggesture": this._isMouseDownL = false; break; } }, _displayContextMenu:function( event ) { var evt = event.originalTarget.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent("contextmenu",true,true,event.originalTarget.defaultView,0,event.screenX,event.screenY,event.clientX,event.clientY,false,false,false,false,2,null); event.originalTarget.dispatchEvent(evt); }, _startGesture:function( event ) { this._lastX = event.screenX; this._lastY = event.screenY; this._directionChain = ""; }, _progressGesture:function( event ) { var x = event.screenX, y = event.screenY; var lastX = this._lastX, lastY = this._lastY; var subX = x-lastX, subY=y-lastY; var distX = ( subX > 0 ? subX : (-subX) ), distY = ( subY > 0 ? subY : ( -subY ) ); var direction; if ( distX < 10 && distY < 10 ) return; if ( distX > distY ) direction = subX < 0 ? "L" : "R"; else direction = subY < 0 ? "U" : "D"; var dChain = this._directionChain; if ( direction !== dChain.charAt( dChain.length-1 ) ) { dChain += direction; this._directionChain += direction; var gesture = this.GESTURES[dChain]; XULBrowserWindow.statusTextField.label = "Жест мыши: "+ dChain + ( gesture ? ' ('+ gesture.name +')' : '' ); } this._lastX = x; this._lastY = y; }, _stopGesture:function(event){ try { if ( dChain = this._directionChain ) this.GESTURES[dChain].cmd( this, event ); XULBrowserWindow.statusTextField.label = ""; } catch(e) { setTimeout(function() { XULBrowserWindow.statusTextField.label = "Неизвестный жест мыши: " + dChain }, 0); setTimeout(function() { XULBrowserWindow.statusTextField.label = "" }, 600); } this._directionChain = ""; }, _buildPopup:function( event,gestureCmd ) { if ( !this.enablePopupGestures ) return; var popup = document.getElementById( this.POPUP_ID ); if ( !popup ) { popup = document.createElement("popup"); popup.id = this.POPUP_ID; } document.getElementById("mainPopupSet").appendChild( popup ); popup.setAttribute("gesturecommand", gestureCmd ); switch( gestureCmd ) { case"WebSearchPopup": var searchSvc = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var engines = searchSvc.getVisibleEngines({}); if ( engines.length < 1 ) throw"Поисковые системы не установлены."; for ( var i = engines.length - 1; i >= 0;--i ) { var engine = engines[i]; var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", engine.name ); menuitem.setAttribute("class", "menuitem-iconic"); if ( engine.iconURI ) menuitem.setAttribute("src", engine.iconURI.spec ); popup.insertBefore( menuitem, popup.firstChild ); menuitem.engine = engine; } popup.setAttribute("selectedtext", getBrowserSelection().toString() ); break; case"ClosedTabsPopup": try { if ( !gPrefService.getBoolPref("browser.sessionstore.enabled") ) throw"Функция восстановления сессий отключена."; } catch(e){} var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); if ( ss.getClosedTabCount(window) ==0 ) throw"Нет восстанавливаемых вкладок в этом окне."; var undoItems = eval("("+ss.getClosedTabData(window)+")"); for ( var i=0, LEN = undoItems.length; i<LEN; i++ ) { var menuitem=popup.appendChild(document.createElement("menuitem")); menuitem.setAttribute("label",undoItems[i].title); menuitem.setAttribute("class","menuitem-iconic bookmark-item"); menuitem.index = i; var iconURL = undoItems[i].image; if ( iconURL ) menuitem.setAttribute("image", iconURL ); } break; case"HistoryPopup": var sessionHistory = gBrowser.webNavigation.sessionHistory; if ( sessionHistory.count<1 ) throw"Нет истории в этой вкладке."; var curIdx = sessionHistory.index; for ( var i = 0, shc = sessionHistory.count; i < shc; i++ ) { var entry = sessionHistory.getEntryAtIndex(i,false); if ( !entry ) continue; var menuitem = document.createElement("menuitem"); popup.insertBefore(menuitem,popup.firstChild); menuitem.setAttribute("label",entry.title); try { var iconURL = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.nsIFaviconService).getFaviconForPage( entry.URI ).spec; menuitem.style.listStyleImage = "url("+iconURL+")"; } catch(e){} menuitem.index = i; if ( i==curIdx ) { menuitem.style.listStyleImage = ""; menuitem.setAttribute("type","radio"); menuitem.setAttribute("checked","true"); menuitem.className = "unified-nav-current"; activeItem = menuitem; } else { menuitem.className = i< curIdx ? "unified-nav-back menuitem-iconic" : "unified-nav-forward menuitem-iconic"; } } break; case"AllTabsPopup": var tabs = gBrowser.mTabs; if ( tabs.length < 1 ) return; for ( var i=0, LEN = tabs.length; i < LEN; i++ ) { var menuitem = popup.appendChild(document.createElement("menuitem")); var tab = tabs[i]; menuitem.setAttribute("class", "menuitem-iconic bookmark-item"); menuitem.setAttribute("label", tab.label); menuitem.setAttribute("crop", tab.getAttribute("crop") ); menuitem.setAttribute("image", tab.getAttribute("image")); menuitem.index = i; if ( tab.selected ) menuitem.setAttribute("style", "color: red; font-weight: bold;"); if ( tab.hasAttribute('unread') ) menuitem.setAttribute("style", "color: blue;"); } break; } document.popupNode = null; document.tooltipNode = null; popup.addEventListener("popuphiding", this, true); popup.openPopup( null, "", event.clientX, event.clientY, false, false ); document.documentElement.addEventListener("mouseup", this, true); }, }; ucjsMouseGestures.init(); ? И получится отличная замена MouseZoom |
bunda1 > 14-09-2014 21:55:10 |
В каком смысле соединить, я не понял? |
Mishania > 14-09-2014 22:05:14 |
Оставить масштаб в адресной строке, функции ЛК и СК, а масштаб менять и сбрасывать по ПКМ+колёсико и ПК+ЛК. Чтоб не в адресной строке. |
bunda1 > 14-09-2014 22:28:05 |
Mishania пишет
Да можно и так. |
Quartz1t > 29-09-2014 11:39:44 |
Не отображается изменение масштаба (застопорилось на 100%) - PM 24.7.2 |
bunda1 > 29-09-2014 11:59:21 |
Quartz1t пишет
На FF 24.8.1 работает, а что показывает при переключение масштаба выше 100% на кнопке консоль ошибок: chrome://global/content/console.xul |
Quartz1t > 29-09-2014 12:14:08 |
bunda1 пишет
пусто. попробую на "чистом" профиле, с одним дополнением СВ и одной кнопкой. после отпишусь... 29-09-2014 12:24:11 ---------------------------------- удалил дополнение Zoom Page и всё заработало, а вот простое отключение ничего не дало, что и ввело в заблуждение... |
villa7 > 02-11-2014 08:38:30 |
bunda1 |
difabor > 02-11-2014 21:40:00 |
villa7 пишет
Попробуйте вместо написать Панелька окажется в правом углу |
bunda1 > 02-11-2014 22:20:24 |
difabor пишет
Да можно и так. |
difabor > 02-11-2014 22:31:25 |
bunda1 пишет
А можно ещё как-то для панели вкладок? Чтобы не было в правом углу? |
villa7 > 02-11-2014 22:34:35 |
del |
1fesFFFF > 14-12-2014 04:06:10 |
Waterfox 34 и classic restorer, меняю масштаб колёсиком, но есть проблема: Можно ли сделать по аналогии с ucjs_statusbar_zoom_panel_1.3.uc: |
bunda1 > 14-12-2014 22:17:53 |
1fesFFFF пишет
Измени под себя margin-right: -20 в строке кода: zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; // Css стиль для кнопки масштаба 1fesFFFF пишет
Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке 2, от 14.12.2014. ................................ (function f() { // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); zoomButton.setAttribute("context", "event.stopPropagation()"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore( zoomButton, urlbarIcons.lastChild ); // перед последней кнопкой адресной строки addDestructor(function() { urlbarIcons.removeChild( zoomButton ) }); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Сбросить масштаб на 100%\nС: Единый масштаб для всех страниц \nП: Открыть меню управления масштабом "; // Отслеживать клики на кнопке масштаба .... addEventListener("click", function(e) { // сбросить масштаб if ( e.button == 0 && e.target.localName !== "menuitem" ) FullZoom.reset(); // единый масштаб для всех страниц if ( e.button == 1 ) { cbu.isPref("CB.zoom.allEvenly", false ); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); updateZoomButton(); } // открыть меню управления масштабом if ( e.button == 2 ) { zoomButton.textContent = ""; // удалить старое меню // создать новое меню управления масштабом var zoom = zoomButton.label.replace('%',''); var menu = zoomButton.appendChild( document.createElement("menupopup") ); cbu.getPrefs("toolkit.zoomManager.zoomValues").split(',').forEach(function( val ) { var mItem = menu.appendChild( document.createElement("menuitem") ); var str = Math.round(val*100); mItem.setAttribute("value", val ); mItem.setAttribute("label", str ); mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', str == zoom ); mItem.setAttribute("oncommand", "this.parentNode.setZoom(event)"); }); menu.setZoom = function(e) { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = e.target.value; updateZoomButton(); }; menu.appendChild( document.createElement("menuseparator") ); // добавить разделитель // добавить к новому меню стандартное меню масштаба var popup = document.getElementById("viewFullZoomMenu").lastChild; [...popup.childNodes].forEach(function( mItem ) { popup.lastChild.setAttribute('checked', !ZoomManager.useFullZoom ); menu.appendChild( mItem.cloneNode(true) ); }); menu.showPopup( zoomButton, -1, -1, "popup", "bottomleft", "topleft"); // открыть меню }; }, false, zoomButton ); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", function(e) { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, zoomButton ); // Следим за изменением масштаба и запускаем обновление кнопки .... var str = "updateZoomButton(); $&"; var handleEvent = parseInt(Application.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled; var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent]; array.forEach(function(func) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace(/}$/, str)).replace('_', '.') ) }); addDestructor(function() { array.forEach(function(func) { eval( (func.toString().match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace('_', '.') ) }); }); // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(function() { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); // запомнить текущий масштаб в 'about:config' if ( e == undefined ) { try { window.clearTimeout( f.timeout ) } catch(e) {}; f.timeout = window.setTimeout(function() { cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }, 250 ); } }; // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", function(e) { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(function() { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0) } else updateZoomButton(e); }, true, gBrowser.tabContainer ); })(); |
1fesFFFF > 15-12-2014 01:12:29 |
bunda1 |
god_05 > 08-12-2015 14:27:32 |
Как можно перенести на панель дополнений ? |
difabor > 08-12-2015 18:17:24 |
god_05 пишет
Попробуйте вместо написать (шестая строка кода) |
KNV > 27-12-2015 16:04:53 |
В FF 44 перестала работать. Как исправить? |
bunda1 > 27-12-2015 16:45:10 |
KNV пишет
Конкретно что не работает? |
KNV > 27-12-2015 16:57:51 |
Ничего не делает. В 43 всё отлично. |
voqabuhe > 27-12-2015 17:36:54 |
KNV пишет
|
KNV > 27-12-2015 17:51:32 |
voqabuhe |
voqabuhe > 27-12-2015 17:59:09 |
KNV пишет
А тебе ехать, или шашечки...? |
KNV > 27-12-2015 18:04:19 |
И до какой версии будет ехать без шашечек? Хотя это Мозилла, могут переносить сроки бесконечно... |
KNV > 04-04-2016 16:23:59 |
А как убрать % ? |
bunda1 > 04-04-2016 17:37:30 |
KNV пишет
Удали + "%" в: |
KNV > 04-04-2016 18:37:14 |
Теперь хорошо. Заменил % на пробел. |
KNV > 30-04-2016 19:51:25 |
В бете перестали меняться цифры и цвет. |
bunda1 > 12-05-2016 20:57:34 |
Изменить масштаб перестал работать на FF47 и . Исправил: Изменить масштаб |
voqabuhe > 12-05-2016 21:13:56 |
bunda1 пишет
Почему перестал? У меня в работает. |
bunda1 > 12-05-2016 21:42:27 |
voqabuhe пишет
Вроде не должен работать на потому что в старом коде есть Application который уже из убрали. Мистика однако. |
voqabuhe > 13-05-2016 00:04:46 |
bunda1 |
voqabuhe > 17-05-2016 12:28:03 |
А как задать свой шаг изменения масштаба? |
difabor > 17-05-2016 13:41:09 |
В about:config есть toolkit.zoomManager.zoomValues, который содержит значения зума. Шаг - это выбор следующего значения в ту или иную сторону |
usalex > 17-05-2016 14:24:31 |
voqabuhe пишет
Тоже этот вопрос интересует. |
voqabuhe > 17-05-2016 15:00:34 |
difabor usalex пишет
Согласен, если такую возможность bunda1 добавил бы в настройки кнопки, было бы намного удобней. |
bunda1 > 17-05-2016 17:31:59 |
Как уже писал difabor в about:config есть toolkit.zoomManager.zoomValues где легко можно установить всю свою линейку масштабов целиком. Например если заменить там 1.33 на 1.4 и тогда при увеличении масштаба 120% масштаб увеличится до 140% а не 133% как раньше. 17-05-2016 17:44:25 voqabuhe пишет
В начале кода что то типа: USER_ZOOM_LEVEL: [ 30, 50, 75, 100, 150, 200, 250, 300 ] ? |
voqabuhe > 17-05-2016 18:06:47 |
bunda1 пишет
Не, я веду речь что бы была возможность менять шаг из контекстного меню кнопки в адресной строке. Например задал шаг 10, и все дальнейшие изменения масштаба происходят с шагом 10%... Например как это у тебя сделано в кнопке Toggle Find+ Закрыть через: n секунд. Так и тут ввёл в окошке 10 и всё... Или что-то подобное. Возможно такое? |
usalex > 17-05-2016 18:35:35 |
bunda1 пишет
Отлично! Спасибо. Не знал об этом. |
bunda1 > 17-05-2016 18:47:34 |
usalex пишет
Не знаю как такое сделать. Проблема в том как отличить ещё не посещенные вкладки. 17-05-2016 18:50:35 voqabuhe пишет
Да такое возможно, только тут не кнопка а код. |
oleg.sgh > 17-05-2016 18:54:45 |
usalex
NoSquint :: Дополнения Firefox |
voqabuhe > 17-05-2016 19:12:33 |
bunda1 пишет
Было бы замечательно
Не понял, где тут? |
bunda1 > 17-05-2016 19:16:11 |
voqabuhe пишет
Изменить масштаб не понятно где там присобачить контекстного меню кнопки, все клики заняты. |
xrun1 > 17-05-2016 19:27:49 |
usalex пишет
Можно сразу увеличить дефолтный масштаб всех вкладок layout.css.devPixelsPerPx = 1.1 - будет 110% и т.д. |
voqabuhe > 17-05-2016 19:44:05 |
bunda1 пишет
Ну через любой модификатор, или длинный клик...? |
usalex > 17-05-2016 23:39:04 |
bunda1 пишет
Но ведь расширения типа Zoom Page как-то отличают. oleg.sgh пишет
Спасибо. Опробую - может, подойдёт. xrun1 пишет
Надо пробовать. Спасибо. Сейчас у меня там выставлено минус один |
voqabuhe > 18-05-2016 00:21:59 |
usalex пишет
Кому ж это может понравиться, весь интерфейс сразу испохабила. |
oleg.sgh > 18-05-2016 06:01:40 |
usalex
Индикация текущего масштаба в кнопке. Поставьте 1 процент и будет возможность сделать вообще любой масштаб....правда не понятно для чего может понадобится масштаб...128 процентов. |
usalex > 18-05-2016 16:08:15 |
oleg.sgh пишет
Я не нашел. Там три круглых кнопки: "+", "-" и кнопка сброса масштаба. Никаких процентов я на них не вижу. |
oleg.sgh > 18-05-2016 16:12:47 |
usalex |
usalex > 18-05-2016 19:13:14 |
oleg.sgh |
oleg.sgh > 18-05-2016 19:25:13 |
usalex |
bunda1 > 18-05-2016 20:56:30 |
voqabuhe пишет
На следующей неделе сделаю. |
voqabuhe > 18-05-2016 21:21:17 |
bunda1 пишет
Спасибо. |
voqabuhe > 17-08-2016 13:02:08 |
bunda1 |
Ultima2m > 17-08-2016 13:07:39 |
voqabuhe пишет
Двойная инициализация кнопки? На другую панель не пробовали перенести? |
turbot > 17-08-2016 14:29:02 |
565718 – Show zoom indicator in UI if not at default zoom level |
bunda1 > 17-08-2016 21:24:35 |
voqabuhe пишет
Как тут правильно заметили наверно проблема в двойной инициализации кнопки, такое бывает если кнопка находится в панели меню кнопки меню. Может положи в начале кода инициализации: |
turbot > 17-08-2016 21:31:43 |
bunda1 пишет
Не-не, это в ночнушке впилили. |
bunda1 > 17-08-2016 21:48:22 |
turbot пишет
А ну да, у меня 50, а у тебя уже 51. |
voqabuhe > 17-08-2016 22:07:46 |
turbot пишет Ага спасибо, но это первое что и я сделал, а уж потом здесь сообщил, что бы bunda1 проинформировать. |
bunda1 > 17-08-2016 22:31:39 |
voqabuhe пишет
Спасибо Подправлю свой код. |
stvol > 19-10-2016 13:01:15 |
А как подвинуть кнопку левее? А то наползает: И, что кнопку надо каждый раз запускать при открытии браузера? |
bunda1 > 19-10-2016 13:50:25 |
stvol пишет
В строке кода: Выделить код Код:zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; измени 20 так как тебе лучше. stvol пишет
А ты положи код Изменить масштаб в инициализацию кнопки. |
stvol > 19-10-2016 13:54:10 |
bunda1 bunda1 пишет
Попробую! bunda1 пишет
|
bunda1 > 19-10-2016 14:00:10 |
stvol пишет
В чём тогда проблема, я не понял? |
stvol > 19-10-2016 14:05:28 |
bunda1 bunda1 пишет
Каждый раз, при открытии браузера, приходится запускать её в ручную (или так и должно быть?)! |
bunda1 > 19-10-2016 14:14:28 |
stvol пишет
А как ты запускать её в ручную? |
stvol > 19-10-2016 14:24:21 |
bunda1 пишет
Жму на иконку этой кнопки! Точнее, жму на "меню" и кнопка появляется! |
bunda1 > 19-10-2016 14:33:39 |
Понятно. Да есть такой глюк у Сustom Buttons что кнопки не инициализируется из большого меню пока это меню не открыть. Ничего не поделаешь надо кнопку держать на панели. |
stvol > 19-10-2016 14:44:27 |
bunda1 |
Ultima2m > 19-10-2016 16:56:36 |
stvol пишет
Есть два пути решения проблемы. 2. установить кнопку "Спрятать панель дополнений" (работает совместно с CTR) |
stvol > 19-10-2016 23:33:36 |
Почему-то, у меня эта кнопка не дружит с Menu Wizard (или наоборот: Menu Wizard не дружит с кнопкой)! Пропадают некоторые опции дополнения! |
oleg.sgh > 04-11-2016 10:30:51 |
Можно подружить кнопку и дополнение NoSquint Plus? |
voqabuhe > 04-11-2016 13:36:02 |
oleg.sgh |
oleg.sgh > 04-11-2016 13:38:22 |
voqabuhe |
voqabuhe > 04-11-2016 20:53:12 |
oleg.sgh пишет
А разве они оба не для изменения масштаба? |
oleg.sgh > 04-11-2016 21:01:41 |
voqabuhe |
voqabuhe > 04-11-2016 22:56:17 |
oleg.sgh пишет
В кнопке тоже есть такая возможность
|
oleg.sgh > 05-11-2016 00:39:38 |
voqabuhe |
voqabuhe > 05-11-2016 00:55:41 |
oleg.sgh пишет
А я что как-то этому препятствовал? |
bunda1 > 05-11-2016 21:55:04 |
oleg.sgh пишет
Не получается подружить кнопку и дополнение NoSquint Plus |
oleg.sgh > 05-11-2016 22:08:05 |
bunda1 скрытый текст |
voqabuhe > 05-11-2016 23:04:19 |
bunda1 пишет
Может проще, если есть что-то полезное в NoSquint, то добавить это в кнопку. Хотя на мой взгляд в кнопке есть всё необходимое для комфортного изменения масштаба, но мало ли... |
oleg.sgh > 05-11-2016 23:19:14 |
voqabuhe |
bunda1 > 05-11-2016 23:47:58 |
oleg.sgh пишет
Вот что то намутил: Выделить код Код:var indicator = document.getElementById('zoomlevel-indicator'); var indicatorHandler = new MutationObserver(()=> { if (indicator.value.slice(-5) == '/100%') indicator.value = indicator.value.replace("/100%", ""); }); indicatorHandler.observe(indicator, {attributes: true}); addDestructor(()=> indicatorHandler.disconnect() ); или даже так: Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке ....................... (()=> { // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки addDestructor(()=> zoomButton.remove()); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -12px;"; // Css стиль для кнопки масштаба // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? document.getElementById("menu_zoomReduce").click() : document.getElementById("menu_zoomEnlarge").click(); }, false, zoomButton); // Следим за изменением масштаба и запускаем обновление кнопки .... var indicator = document.getElementById('zoomlevel-indicator'); indicator.hidden = true; var indicatorHandler = new MutationObserver(()=> updateZoomButton() ); indicatorHandler.observe(indicator, {attributes: true}); addDestructor(()=> indicatorHandler.disconnect() ) // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton() { zoomButton.label = indicator.value.replace("/100%", ""); }; updateZoomButton(); })(); 05-11-2016 23:49:04 voqabuhe пишет
Это не просто |
oleg.sgh > 06-11-2016 09:21:22 |
bunda1
Теперь подружилась...даже слишком. Дискретность изменения масштаба стала 10% и при изменении штатными кнопками браузера и клавишами. 2. Оставить только числовое значения масштаба (предпочтительно) или убрать значение масштаба шрифта. (значение масштаба шрифта появляется если он отличен от 100, в глобальных настройках)
3. Сброс масштаба, по правому клику на кнопке, до дефолтных 100% браузера. По п. 1, решено - extensions.zoomlevel.zoomIncrement;5. Тем не менее, желательно, изменение этого параметра добавить в саму кнопку. |
bunda1 > 06-11-2016 12:28:29 |
oleg.sgh пишет
Мой код или даже так: просто отображает в адресной строке информацию от индикатора масштаба NoSquint и прячет этот индикатор. С дискретностью изменения масштаба мой код ни как не связан. И почему у тебя в адресной строке два индикатора? |
oleg.sgh > 06-11-2016 12:39:42 |
bunda1
Не просто отображает а еще меняет масштаб колесом, когда курсор на цыферьках...как в оригинале.
Один показывает масштаб, второй размер шрифта |
bunda1 > 06-11-2016 12:48:05 |
oleg.sgh пишет
Теперь попробуй: Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке ....................... (()=> { // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons"); zoomButton.setAttribute("context", "event.stopPropagation()"); urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки addDestructor(()=> zoomButton.remove()); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -12px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "П: Сбросить масштаб на 100% \nКолёсиком мыши на кнопке можно масштаб"; // Отслеживать клики на кнопке масштаба .... addEventListener("click", e=> { if ( e.button == 2 ) document.getElementById("menu_zoomReset").click(); // сбросить масштаб }, false, zoomButton); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? document.getElementById("menu_zoomReduce").click() : document.getElementById("menu_zoomEnlarge").click(); }, false, zoomButton); // Следим за изменением масштаба и запускаем обновление кнопки .... var indicator = document.getElementById('zoomlevel-indicator'); indicator.hidden = true; var indicatorHandler = new MutationObserver(()=> updateZoomButton() ); indicatorHandler.observe(indicator, {attributes: true}); addDestructor(()=> indicatorHandler.disconnect() ) // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton() { zoomButton.label = indicator.value.slice(0,4).replace("/", ""); }; updateZoomButton(); })(); 06-11-2016 13:04:52 |
bunda1 > 06-11-2016 13:52:17 |
oleg.sgh пишет
Это можно. Но хочу уточнить - получается что NoSquint сам произвольно иногда меняет extensions.zoomlevel.zoomIncrement или как? |
oleg.sgh > 06-11-2016 14:03:45 |
bunda1
Это параметр устанавливает дополнение а значение можно менять в надстройках самого дополнения. Дело только в том, что в интерфейсе дополнения, минимальное 10. Шаг 5, можно установить только в about:config. Эти пляски начались с переходом на новое дополнение (в старом вообще можно было установить шаг 1). Только сегодня нашел как, принудительно, установить шаг 5, для нового дополнения. |
bunda1 > 06-11-2016 14:08:24 |
Понятно. Можно просто добавить в мой код: |
oleg.sgh > 06-11-2016 14:25:16 |
bunda1 |
Stkvsky > 21-11-2016 18:00:22 |
bunda1 |
KNV > 24-11-2016 12:04:35 |
В 51 бете появился свой убогий масштаб в адресной строке. Как убрать? |
bunda1 > 24-11-2016 22:24:41 |
KNV пишет
24-11-2016 22:26:26 Stakhovsky пишет
Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке, от 24.11.2016. .......................... (()=> { // Удалить из адресной строки FF51 стандартную кнопку масштаба .... var but = document.getElementById('urlbar-zoom-button'); if (but) but.style.display = "none"; // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("statusbarpanel"); var urlbarIcons = document.getElementById("urlbar-icons"); urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки addDestructor(()=> zoomButton.remove()); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -20px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% "; // Отслеживать клики на кнопке масштаба .... addEventListener("click", e=> { if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 1 ) { // единый масштаб для всех страниц cbu.isPref("CB.zoom.allEvenly", false); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); updateZoomButton(); } if ( e.button == 2 ) { e.preventDefault(); FullZoom.reset(); }; // сбросить масштаб }, false, zoomButton); // Менять масштаб колесиком мыши на адресной строке .... addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, gURLBar); // Следим за изменением масштаба и запускаем обновление кнопки .... var str = "{ setTimeout(()=> { updateZoomButton() }, 50);"; var handleEvent = parseInt(Services.appinfo.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled; var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent]; array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) )}, 50) }); addDestructor(()=> { array.forEach(func=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ) }); }); // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(()=> { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); // запомнить текущий масштаб в 'about:config' if ( e == undefined ) { try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {}; zoomButton.prefTimeout = window.setTimeout(()=> { cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }, 250); } }; // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", e=> { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(()=> { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0); } else updateZoomButton(e); }, true, gBrowser.tabContainer); })(); |
KNV > 25-11-2016 10:10:17 |
Спасибо. Всё работает. |
bunda1 > 25-11-2016 12:30:49 |
KNV пишет
Как отключить проверку цифровых подписей в дополнениях Firefox | Форум Mozilla Россия |
Stkvsky > 28-11-2016 13:17:55 |
bunda1 |
KNV > 09-12-2016 13:58:09 |
bunda1 |
oleg.sgh > 27-12-2016 14:04:42 |
Обновилось дополнение NoSquint Plus и кнопка перестала показывать значение масштаба Виноват, отбой...после перезапуска , все стало работать как надо. |
bunda1 > 27-11-2017 21:15:33 |
Исправил Изменить масштаб для Firefox 57. |
broker > 28-11-2017 01:12:15 |
О заработала кнопка спасибо мастер bunda1. |
usalex > 06-12-2017 23:58:08 |
bunda1 |
bunda1 > 07-12-2017 11:16:47 |
usalex пишет
В about:config > toolkit.zoomManager.zoomValues измени значение на 1.1,1.2,1.25,1.3,1.35,1.4,1.45,1.5 |
usalex > 07-12-2017 16:03:07 |
bunda1 пишет
Спасибо. Работает. А как там прописать, чтоб все новые страницы открывались в масштабе не 100% а 125% ? |
bunda1 > 07-12-2017 21:38:20 |
usalex пишет
А вот не знаю. Может СКМ на кнопке маштаба поможет. |
usalex > 15-12-2017 14:27:37 |
bunda1 пишет
Увы, этот приём не помогает сделать серфинг комфортней. А нельзя ли добавить в кнопку фичу начального (заданного пользователем) масштаба для впервые посещаемой страницы? Можно такое сделать? |
usalex > 23-12-2017 20:34:49 |
bunda1 |
Mishania > 23-12-2017 21:53:34 |
usalex Выделить код Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECB%20Mouse%20Gestures+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBAwEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAgEBAwAAAAACAQECAAAAAHdLNaSlZkbqkFY60ZNZO9aSWDrWkVY51o9VONaOVDfWjVI11oxSNdaMUDPWhkww0ZdYOupsQCykAAAAAAIBAQIAAAAAc0k1oNebe//0yrD/+djC/vjWv//418D/+Na///fWv//31r//99W///XTuv/11Lz/9tfA/u3Dqf/Jjm//Zz4qoAAAAAAAAAAAq2tL1vXMsf/w4c327di9++nStfvs1bn77Na7++zWu/vs1rv77NS5+/Tk0Pvt2L377NW4+/Ll0vbtxar/mFk61gAAAAAAAAAAl10/0Pvdxv/q07b71quB/9iuhP/VqX//06J0/9Khcf/SonL/z5pm/+7dzf/q1cH/1ah9/+zStPv22MP/hkww0AAAAAAAAAAAnF9C1vzcxv/kxaT70aBw/9mtg//euJX/6c+3/+zVv//s1sD/6tG5//r18P//////48Wo/+bHpvv22ML/i1Az1gAAAAAAAAAAnWBC1v3eyv/iwp/7ypFY/9qwiP/u3Mr/9+7k//jw6P/48Oj/9+/m//z69///////5862/+XHpvv42cT/jFE01gAAAAAAAAAAnmJE1v7hzv/fvZf7wX06/+LBof/27OP/z5dh/8mLTv/JjE//xIE+//Pl1v/05tn/zJJb/963jfv53cv/jVEz1gAAAAAAAAAAn2JE1v/i0f/dt477u28k/+PDo//47+j/w348/8qNUv/JjVH/xoZH/9+6l//VpXf/vnUw/963jvv53cv/jlM11gAAAAAAAAAAoGNF1v/j0f/duJD7u3Ao/+PDpf/48Oj/w4A//8qNU//JjFH/yYxR/8qOVP/KkFb/wX8+/922jfv63cv/j1Q21gAAAAAAAAAAoWVH1v/i0P/gwJ77w4FD/+bLsP/58uv/yo9X/9Cbaf/Pmmf/z5pn/86YZP/Qm2n/yY9Y/+G/m/v63Mr/kVU31gAAAAAAAAAAo2ZJ1v/hz//kyav7ypRf/+jRuv/58uz/0J9w/9Spfv/UqH3/1Kh9/9Wpfv/VqoD/z59v/+XJqfv53Mn/klc51gAAAAAAAAAApGhK1v/fzf/n0Lf70aR5/+3Zx//69fH/166I/9u3lP/btpP/27aT/9u2k//cuJX/1q2H/+fPtvv42sj/k1g71gAAAAAAAAAAoWZJ0P7fz//s3Mr72riZ/+bPuf/s3Mz/3L2e/97Ao//ewKP/3sCj/97Ao//ewaP/3Luf/+7cy/v428n/kFU50AAAAAAAAAAAunhY1vvTvf/u5Nv27+LU++rax/vq2MX77eDP++3fzvvt38777d/O++3fz/vt38778OLT+/Hm3Pb0zLT/p2dG1gAAAAAAAAAAflM+oOSpi//71L7//d/N/v7ey//+383//d3K//zdyv/83cn//NzJ//vcyP/72sf/+tzK/vTNt//XnH3/ckgzoAAAAAACAQECAAAAAINXQaS4d1fqomZK0aVoS9akZ0rWomZJ1qFkR9agZEbWnmNF1p1hRNacYELWl11A0apqSup4TDakAAAAAAIBAQIAAAAAAgEBAwEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAgEBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28%7B%0A%20%20%20//%20%u0416%u0435%u0441%u0442%u044B%20%u043C%u044B%u0448%u0438%20....%0A%20%20%20GESTURES%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%u0439%20................................%0A%20%20%27W-%27%3A%7Bname%3A%27%u0423%u0432%u0435%u043B%u0438%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.enlarge%28%29%20%7D%7D%2C%0A%20%20%27W+%27%3A%7Bname%3A%27%u0423%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reduce%28%29%20%7D%7D%2C%0A%20%20%27UDU%27%3A%7Bname%3A%27%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reset%28%29%20%7D%7D%2C%0A%20%20%27L%3CR%27%3A%7Bname%3A%27%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reset%28%29%20%7D%7D%2C%0A%20%20%27L%27%3A%7Bname%3A%27%u041D%u0430%u0437%u0430%u0434%27%2Ccmd%3Afunction%28%29%7B%20BrowserBack%28%29%20%7D%7D%2C%0A%20%20%27R%27%3A%7Bname%3A%27%u0412%u043F%u0435%u0440%u0451%u0434%27%2Ccmd%3Afunction%28%29%7B%20BrowserForward%28%29%20%7D%7D%2C%0A%20%20//%20%27DR%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%27%2Ccmd%3Afunction%28%29%7B%20gBrowser.reload%28%29%20%7D%7D%2C%0A%20%20%27L%3ER%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%27%2Ccmd%3Afunction%28%29%7B%20gBrowser.reload%28%29%20%7D%7D%2C%0A%20%20%27DR%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%20%u043A%u044D%u0448%27%2Ccmd%3Afunction%28%29%7B%20BrowserReloadSkipCache%28%29%20%7D%7D%2C%0A%20%20%27U%27%3A%7Bname%3A%27%u0421%u0442%u043E%u043F%27%2Ccmd%3Afunction%28%29%7B%20BrowserStop%28%29%20%7D%7D%2C%0A%20%20%7D%2C%0A%0Ainit%3Afunction%28%29%20%7B%0A%20%20%20var%20func%20%3D%20this%3B%0A%0A%20%20%20%5B%22mousedown%22%2C%20%22mousemove%22%2C%20%22mouseup%22%2C%20%22contextmenu%22%2C%20%22draggesture%22%2C%20%22DOMMouseScroll%22%5D%0A%20%20%20%20.forEach%28%28type%29%3D%3E%20addEventListener%28type%2C%20this%2C%20true%2C%20gBrowser%29%20%29%3B%20%0A%7D%2C%0A%0AhandleEvent%3Afunction%28event%29%20%7B%0A%20%20%20%20switch%28event.type%29%20%7B%0A%20%20%20%20%20%20%20%20case%22mousedown%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._startGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.button%20%3D%3D%202%20%26%26%20this._isMouseDownL%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22L%3ER%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28event%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20event.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22L%3CR%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22mousemove%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._progressGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22mouseup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20content.xdTrailArea%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.xdTrailArea.parentNode.removeChild%28%20content.xdTrailArea%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.xdTrailArea%20%3D%20content.document.documentElement.appendChild%28document.createElementNS%28xhtmlns%2C%20%22xdTrailArea%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.ctrlKey%20%26%26%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22Reset%20Gesture%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%26%26%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._directionChain%20%29%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._shouldFireContext%20%26%26%20%21this._hideFireContext%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._displayContextMenu%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20event.button%20%3D%3D%200%20%26%26%20this._isMouseDownL%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20%28event.button%20%3D%3D%200%20%7C%7C%20event.button%20%3D%3D%201%29%20%26%26%20event.target.localName%20%3D%3D%27menuitem%27%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20activeItem%20%3D%20event.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20switch%28%20popup.getAttribute%28%22gesturecommand%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22WebSearchPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20selText%20%3D%20popup.getAttribute%28%22selectedtext%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20engine%20%3D%20activeItem.engine%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21engine%20%29%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20engine.getSubmission%28%20selText%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21submission%20%29%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27searchbar%27%29.textbox.value%20%3D%20selText%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28%20submission.uri.spec%2Cnull%2Cnull%2Csubmission.postData%2Cnull%2Cfalse%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22ClosedTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20undoCloseTab%28%20activeItem.index%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22HistoryPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.webNavigation.gotoIndex%28%20activeItem.index%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22AllTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.mTabs%5BactiveItem.index%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.hidePopup%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20document.getElementById%28%22statusbar-display%22%29.label%20%3D%20%22%22%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22popuphiding%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20popup.removeEventListener%28%22popuphiding%22%2Cthis%2Ctrue%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.documentElement.removeEventListener%28%22mouseup%22%2Cthis%2Ctrue%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%28%20popup.hasChildNodes%28%29%20%29%20popup.removeChild%28%20popup.lastChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22contextmenu%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownL%20%7C%7C%20this._isMouseDownR%20%7C%7C%20this._hideFireContext%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22DOMMouseScroll%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22W%22%20+%20%28%20event.detail%20%3E%200%20%3F%20%22+%22%20%3A%20%22-%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28event%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22draggesture%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%2C%0A%0A_displayContextMenu%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20var%20evt%20%3D%20event.originalTarget.ownerDocument.createEvent%28%22MouseEvents%22%29%3B%0A%20%20%20%20evt.initMouseEvent%28%22contextmenu%22%2Ctrue%2Ctrue%2Cevent.originalTarget.defaultView%2C0%2Cevent.screenX%2Cevent.screenY%2Cevent.clientX%2Cevent.clientY%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2C2%2Cnull%29%3B%0A%20%20%20%20event.originalTarget.dispatchEvent%28evt%29%3B%0A%7D%2C%0A%0A_startGesture%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20this._lastX%20%3D%20event.screenX%3B%0A%20%20%20%20this._lastY%20%3D%20event.screenY%3B%0A%20%20%20%20this._directionChain%20%3D%20%22%22%3B%0A%7D%2C%0A%0A_progressGesture%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20var%20x%20%3D%20event.screenX%2C%20y%20%3D%20event.screenY%3B%0A%20%20%20%20var%20lastX%20%3D%20this._lastX%2C%20lastY%20%3D%20this._lastY%3B%0A%20%20%20%20var%20subX%20%3D%20x-lastX%2C%20subY%3Dy-lastY%3B%0A%20%20%20%20var%20distX%20%3D%20%28%20subX%20%3E%200%20%3F%20subX%20%3A%20%28-subX%29%20%29%2C%20distY%20%3D%20%28%20subY%20%3E%200%20%3F%20subY%20%3A%20%28%20-subY%20%29%20%29%3B%0A%20%20%20%20var%20direction%3B%0A%20%20%20%20if%20%28%20distX%20%3C%2010%20%26%26%20distY%20%3C%2010%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20if%20%28%20distX%20%3E%20distY%20%29%20direction%20%3D%20subX%20%3C%200%20%3F%20%22L%22%20%3A%20%22R%22%3B%0A%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20direction%20%3D%20subY%20%3C%200%20%3F%20%22U%22%20%3A%20%22D%22%3B%0A%0A%20%20%20%20var%20dChain%20%3D%20this._directionChain%3B%0A%20%20%20%20if%20%28%20direction%20%21%3D%3D%20dChain.charAt%28%20dChain.length-1%20%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20dChain%20+%3D%20direction%3B%0A%20%20%20%20%20%20%20%20%20this._directionChain%20+%3D%20direction%3B%0A%20%20%20%20%20%20%20%20%20var%20gesture%20%3D%20this.GESTURES%5BdChain%5D%3B%0A%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22%u0416%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22+%20dChain%20+%20%28%20gesture%20%3F%20%27%20%28%27+%20gesture.name%20+%27%29%27%20%3A%20%27%27%20%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this._lastX%20%3D%20x%3B%0A%20%20%20%20this._lastY%20%3D%20y%3B%0A%7D%2C%0A%0A_stopGesture%3Afunction%28event%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%20dChain%20%3D%20this._directionChain%20%29%20this.GESTURES%5BdChain%5D.cmd%28%20this%2C%20event%20%29%3B%0A%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20XULBrowserWindow.statusTextField.label%20%3D%20%22%u041D%u0435%u0438%u0437%u0432%u0435%u0441%u0442%u043D%u044B%u0439%20%u0436%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22%20+%20dChain%20%7D%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20XULBrowserWindow.statusTextField.label%20%3D%20%22%22%20%7D%2C%20600%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this._directionChain%20%3D%20%22%22%3B%0A%7D%2C%0A%0AshowAlert%3Afunction%28image%2C%20label%2C%20notification%29%20%7B%0A%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20.showAlertNotification%28image%2C%20label%2C%20notification%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%7D%2C%0A%0A_buildPopup%3Afunction%28event%2C%20gestureCmd%29%20%7B%0A%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20if%20%28%20%21popup%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20popup%20%3D%20document.createElement%28%22popup%22%29%3B%0A%20%20%20%20%20%20%20%20%20popup.id%20%3D%20%27GesturePopup%27%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28%20popup%20%29%3B%0A%20%20%20%20popup.setAttribute%28%22gesturecommand%22%2C%20gestureCmd%20%29%3B%0A%20%20%20%20%0A%20%20%20%20switch%28%20gestureCmd%20%29%20%7B%0A%20%20%20%20%20%20%20%20case%22WebSearchPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20engines%20%3D%20Services.search.getVisibleEngines%28%7B%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20engines.length%20%3C%201%20%29%20throw%22%u041F%u043E%u0438%u0441%u043A%u043E%u0432%u044B%u0435%20%u0441%u0438%u0441%u0442%u0435%u043C%u044B%20%u043D%u0435%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u044B%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B--i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20engine.name%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20engine.iconURI%20%29%20menuitem.setAttribute%28%22src%22%2C%20engine.iconURI.spec%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.insertBefore%28%20menuitem%2C%20popup.firstChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.engine%20%3D%20engine%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20popup.setAttribute%28%22selectedtext%22%2C%20getBrowserSelection%28%29.toString%28%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22ClosedTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21gPrefService.getBoolPref%28%22browser.sessionstore.enabled%22%29%20%29%20throw%22%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u0432%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u044F%20%u0441%u0435%u0441%u0441%u0438%u0439%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u0430%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/sessionstore%3B1%22%5D.getService%28Ci.nsISessionStore%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20ss.getClosedTabCount%28window%29%20%3D%3D0%20%29%20throw%22%u041D%u0435%u0442%20%u0432%u043E%u0441%u0441%u0442%u0430%u043D%u0430%u0432%u043B%u0438%u0432%u0430%u0435%u043C%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20%u044D%u0442%u043E%u043C%20%u043E%u043A%u043D%u0435.%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20undoItems%20%3D%20eval%28%22%28%22+ss.getClosedTabData%28window%29+%22%29%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%3D0%2C%20LEN%20%3D%20undoItems.length%3B%20i%3CLEN%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%3Dpopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2CundoItems%5Bi%5D.title%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20iconURL%20%3D%20undoItems%5Bi%5D.image%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20iconURL%20%29%20menuitem.setAttribute%28%22image%22%2C%20iconURL%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22HistoryPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20sessionHistory%20%3D%20gBrowser.webNavigation.sessionHistory%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20sessionHistory.count%3C1%20%29%20throw%22%u041D%u0435%u0442%20%u0438%u0441%u0442%u043E%u0440%u0438%u0438%20%u0432%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435.%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20curIdx%20%3D%20sessionHistory.index%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%2C%20shc%20%3D%20sessionHistory.count%3B%20i%20%3C%20shc%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20entry%20%3D%20sessionHistory.getEntryAtIndex%28i%2Cfalse%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21entry%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.insertBefore%28menuitem%2Cpopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2Centry.title%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20iconURL%20%3D%20Cc%5B%22@mozilla.org/browser/favicon-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Ci.nsIFaviconService%29.getFaviconForPage%28entry.URI%29.spec%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.listStyleImage%20%3D%20%22url%28%22+iconURL+%22%29%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20i%3D%3DcurIdx%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.listStyleImage%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22type%22%2C%22radio%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22checked%22%2C%22true%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.className%20%3D%20%22unified-nav-current%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20activeItem%20%3D%20menuitem%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.className%20%3D%20i%20%3C%20curIdx%20%3F%20%22unified-nav-back%20menuitem-iconic%22%20%3A%20%22unified-nav-forward%20menuitem-iconic%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22AllTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tabs.length%20%3C%201%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%3D0%2C%20LEN%20%3D%20tabs.length%3B%20i%20%3C%20LEN%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20popup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20tabs%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20tab.label%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22crop%22%2C%20tab.getAttribute%28%22crop%22%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22image%22%2C%20tab.getAttribute%28%22image%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.selected%20%29%20menuitem.setAttribute%28%22style%22%2C%20%22color%3A%20red%3B%20font-weight%3A%20bold%3B%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.hasAttribute%28%27unread%27%29%20%29%20menuitem.setAttribute%28%22style%22%2C%20%22color%3A%20blue%3B%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20document.popupNode%20%3D%20null%3B%0A%20%20%20%20document.tooltipNode%20%3D%20null%3B%0A%20%20%20%20popup.addEventListener%28%22popuphiding%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20popup.openPopup%28%20null%2C%20%22%22%2C%20event.clientX%2C%20event.clientY%2C%20false%2C%20false%20%29%3B%0A%20%20%20%20document.documentElement.addEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%7D%0A%7D%29.init%28%29%3B%0A%0A%0A%0A%0A//%20%u041A%u043D%u043E%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u043E%u043C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%2C%20%u043E%u0442%2027.11.2017.%20..........................%0A%28%28%29%3D%3E%20%7B%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%20FF51%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20var%20but%20%3D%20document.getElementById%28%27urlbar-zoom-button%27%29%3B%0A%20%20%20if%20%28but%29%20but.style.display%20%3D%20%22none%22%3B%0A%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20var%20zoomButton%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%20%7C%7C%20document.getElementById%28%22page-action-buttons%22%29%3B%20//%20FF57%0A%20%20%20urlbarIcons.insertBefore%28zoomButton%2C%20urlbarIcons.lastChild%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u043E%u0441%u043B%u0435%u0434%u043D%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20addDestructor%28%28%29%3D%3E%20zoomButton.remove%28%29%29%3B%0A%20%20%20%20%20%0A%20%20%20updateZoomButton%28%29%3B%20%0A%20%20%20zoomButton.id%20%3D%20%22zoomButton%22%3B%0A%20%20%20zoomButton.setAttribute%28%22context%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20zoomButton.style.cssText%20%3D%20%22-moz-appearance%3A%20none%3B%20border%3A%200%3B%20margin-right%3A%20-1px%3B%22%3B%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20%20%20%0A%20%20%20zoomButton.tooltipText%20%3D%20%22%u041B%3A%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%5Cn%u0421%3A%20%u0415%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043D%u0430%20100%25%20%22%3B%0A%0A%20%20%20%0A%20%20%20//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u043A%u043B%u0438%u043A%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20addEventListener%28%22click%22%2C%20e%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20ZoomManager.toggleZoom%28%29%3B%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0440%u0435%u0436%u0438%u043C%20%u0438%u0437%u043C%u0438%u043D%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0435%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%0A%20%20%20%20%20%20%20%20%20%20%20cbu.isPref%28%22CB.zoom.allEvenly%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.allEvenly%22%2C%20%21cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.Percent%22%2C%20ZoomManager.zoom.toFixed%282%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20FullZoom.reset%28%29%3B%20//%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%2C%20false%2C%20zoomButton%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20addEventListener%28%22DOMMouseScroll%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20e.detail%20%3E%200%20%3F%20FullZoom.reduce%28%29%20%3A%20FullZoom.enlarge%28%29%3B%0A%20%20%20%7D%2C%20false%2C%20zoomButton%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%0A%20%20%20//%20%u0421%u043B%u0435%u0434%u0438%u043C%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u0435%u043C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0A%20%20%20var%20str%20%3D%20%22%7B%20setTimeout%28%28%29%3D%3E%20%7B%20updateZoomButton%28%29%20%7D%2C%2050%29%3B%22%3B%0A%20%20%20var%20handleEvent%20%3D%20parseInt%28Services.appinfo.version%29%20%3E%2033%20%3F%20FullZoom.handleEvent%20%3A%20FullZoom._handleMouseScrolled%3B%0A%20%20%20var%20array%20%3D%20%5BFullZoom.reset%2C%20FullZoom.reduce%2C%20FullZoom.enlarge%2C%20ZoomManager.toggleZoom%2C%20handleEvent%5D%3B%0A%20%20%20array.forEach%28func%3D%3E%20%7B%20setTimeout%28%28%29%3D%3E%20%7B%20eval%28%20%28func.toString%28%29.replace%28%27_%27%2C%20%27.%27%29.match%28/function%20%28%5B%5E%28%5D*%29%5C%28/%29%5B1%5D%20+%20%22%20%3D%20%22%20+%20func.toString%28%29.replace%28%22%7B%22%2C%20str%29%29%20%29%7D%2C%2050%29%20%7D%29%3B%20%0A%20%20%20addDestructor%28%28%29%3D%3E%20%7B%20%0A%20%20%20%20%20%20array.forEach%28func%3D%3E%20%7B%20eval%28%20%28func.toString%28%29.replace%28%27_%27%2C%20%27.%27%29.match%28/function%20%28%5B%5E%28%5D*%29%5C%28/%29%5B1%5D%20+%20%22%20%3D%20%22%20+%20func.toString%28%29%29.replace%28str%2C%22%7B%22%29%20%29%20%7D%29%3B%20%20%0A%20%20%20%7D%29%3B%20%20%20%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u0438%20%u0438%u0437%u043C%u0435%u043D%u044F%u0442%u044C%20%u0446%u0432%u0435%u0442%20%u0438%20%u0448%u0440%u0438%u0444%u0442%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20function%20updateZoomButton%28e%29%20%7B%0A%20%20%20%20%20%20zoomButton.label%20%3D%20Math.round%28ZoomManager.zoom*100%29%20+%20%22%25%22%3B%20%0A%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%20%0A%20%20%20%20%20%20%20%20%20zoomButton.style.fontWeight%20%3D%20ZoomManager.useFullZoom%20%3F%20%27%27%20%3A%20%27bold%27%3B%0A%20%20%20%20%20%20%20%20%20zoomButton.style.color%20%3D%20cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%3F%20%22red%22%20%3A%20%22%22%3B%0A%20%20%20%20%20%20%7D%2C%205%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0432%20%27about%3Aconfig%27%0A%20%20%20%20%20%20if%20%28%20e%20%3D%3D%20undefined%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28zoomButton.prefTimeout%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20zoomButton.prefTimeout%20%3D%20window.setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.Percent%22%2C%20ZoomManager.zoom.toFixed%282%29%20%29%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20250%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20%u0423%u0441%u0442%u0430%u043D%u0430%u0432%u043B%u0438%u0432%u0430%u0442%u044C%20%u0435%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20....%0A%20%20%20addEventListener%28%22TabAttrModified%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20e.target.linkedBrowser.currentURI.spec%20%21%3D%3D%20gBrowser.currentURI.spec%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%26%26%20content.location.protocol.startsWith%28%22http%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20value%20%3D%20cbu.getPrefs%28%22CB.zoom.Percent%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20ZoomManager.zoom.toFixed%282%29%20%3D%3D%20value%20%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.markupDocumentViewer%5BZoomManager.useFullZoom%20%3F%20%27fullZoom%27%20%3A%20%27textZoom%27%5D%20%3D%20value%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28e%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%200%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28e%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%2C%20true%2C%20gBrowser.tabContainer%29%3B%20%20%20%0A%7D%29%28%29%3B%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.tooltipText%20%3D%20%22CB%20Mouse%20Gestures+%20%20%5Cn%u0417%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u0442%20%u0436%u0435%u0441%u0442%u0438%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u041F%u041A%u041C%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%5Cn%u041B%3A%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u044D%u0442%u0443%20%u043A%u043D%u043E%u043F%u043A%u0443%22%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u044D%u0442%u0443%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0Acustombuttons.editButton%28this%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E Тут и управление жестами и масштаб в адресной строке. |
usalex > 23-12-2017 23:28:07 |
Mishania Вот только у меня при её использовании не появляется индикатор масштаба в адресной строке. Я удалил из этой двойной кнопки код, относящийся к "Изменить масштаб" и оставил только жесты (кручу колёсиком с зажатой правой кнопкой). |
Бумбик > 23-12-2017 23:52:23 |
usalex пишет
это может расширение MouseZoomer |
usalex > 24-12-2017 03:07:31 |
Бумбик |
Mishania > 24-12-2017 08:04:05 |
Бумбик |
usalex > 24-12-2017 13:59:51 |
Mishania пишет
Да, давали - там я её и взял. Кнопку выложили вы с просьбой исправить для работы с e10s. |
Dumby > 24-12-2017 16:16:33 |
usalex пишет
скрытый текст Выделить код Код:addEventListener("wheel", { flag: false, handleEvent(e) {this[e.type](e);}, contextmenu(e) { this.flag = e.preventDefault(); window.removeEventListener("contextmenu", this); }, wheel(e) { if (e.buttons != 2 || !gBrowser.selectedBrowser.matches(":hover")) return; if (!this.flag) this.flag = !window.addEventListener("contextmenu", this); e.preventDefault(); FullZoom[e.deltaY > 0 ? "reduce" : "enlarge"](); } }, false, gBrowser); FullZoom._globalValue = 1.25; addDestructor(() => delete FullZoom._globalValue); |
usalex > 24-12-2017 18:15:45 |
Dumby |
usalex > 07-01-2018 18:25:00 |
usalex пишет
А, кстати, зачем делать для кнопки поддержку многопроцессности, если само расширение Custom Buttons при установке отключает эту самую многопроцессность? Dumby, спасибо за подробное разъяснение вопроса! |
Dumby > 07-01-2018 23:00:35 |
usalex пишет
скрытый текст Само расширение Custom Buttons, при установке, нигде ничего не отключает. Ни многопроцессорность, ни многопроцессность, ни что-либо другое иное прочее. Само расширение Custom Buttons полностью совместимо с многопроцессностью. Да, лиса может посмотреть, что мол завелось расширение, А в Custom Buttons не заявлено, что оно совместимо с e10s только потому, Те, для кого многопроцессный Firefox является осознанным выбором, Возможно, некоторые из них, осознавая, что в многопроцессном Firefox, Вот такой вот резон «зачем делать для кнопки поддержку многопроцессорности» |
Stkvsky > 24-01-2018 05:49:32 |
Я указал для разных сайтов разные значения масштаба, |
bunda1 > 24-01-2018 11:15:44 |
Stkvsky пишет
Нет, куки тут не причём. Наверно у тебя при перезапуске стираются настройки сайтов. |
Stkvsky > 24-01-2018 15:08:06 |
bunda1 |
Stkvsky > 05-02-2018 14:01:24 |
bunda1 Настройки хочется тоже очищать после закрытия браузера, так как там, оказывается, хранится информация Автономное-веб сожержимое и данные пользователя |
bunda1 > 07-02-2018 10:43:32 |
Stkvsky пишет
Можно, но сложно. Я не возьмусь. |
Dobrov > 11-02-2018 00:31:57 |
bunda1 - подскажите, как включить "Колесико мыши" над всей панелью кнопок, а не только на кнопке Zoom? Удобнее при клике на кнопку "Режим чтения" сразу покрутить Колесико и установить нужный масштаб. Есть вариант с gURLBar, но это не то... Выделить код Код:// Менять масштаб колесиком мыши на кнопке масштаба zoomButton или адресной строке gURLBar addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, gURLBar); |
Stkvsky > 11-02-2018 01:57:44 |
Dobrov > 11-02-2018 04:42:24 |
Stkvsky пишет Внимательней, я уже отметил, что вариант с gURLBar мне не подходит! , нужен Zoom при прокрутке над панелью кнопок! |
bunda1 > 12-02-2018 19:29:14 |
Dobrov пишет
Выделить код Код:// Менять масштаб колесиком мыши на кнопке масштаба zoomButton или адресной строке gURLBar var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57 addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, urlbarIcons); |
Dobrov > 13-02-2018 02:40:08 |
bunda1 - спасибо, но для адресной строки и так работает gURLBar, а иконку ReaderMode я в строке адреса скрыл. У меня отдельная кнопка CustomButtons - вкл/выкл Режим чтения (toggleReaderMode) |
bunda1 > 13-02-2018 08:37:39 |
Dobrov пишет
Что ты называешь панелью кнопок? Dobrov пишет
В инициализацию кнопки Reader mode: |
Dobrov > 13-02-2018 11:21:11 |
bunda1 пишет
это #nav-bar - нужен такой функционал: нажать кнопку "Reader Mode" в #nav-bar-е, затем изменить масштаб Колёсиком мыши. Добавил код в инициализацию, только ролик наоборот работал, поменял условия: А вариант [CB]Изменить масштаб, работающий над всей #nav-bar возможно сделать? |
bunda1 > 13-02-2018 12:22:36 |
Dobrov пишет
Не понял |
Dobrov > 13-02-2018 17:50:31 |
bunda1 - панелью кнопок я называл тулбар, куда все новые кнопки рассширений добавляются по-умолчанию. возможно ли сделать, чтобы масштаб менялся Колёсиком над кнопками этой панели кнопок ? |
bunda1 > 13-02-2018 19:49:17 |
Dobrov пишет
Выделить код Код:var navBar = document.getElementById("nav-bar"); addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, navBar); |
momo2000 > 27-02-2018 08:03:34 |
При многопроцессе не показывает кол-во совпадений: 0/0 |
drage2 > 27-02-2018 10:30:34 |
Я так понимаю, что удалить иконку масштаба при 100% никак? |
drage2 > 27-02-2018 11:49:06 |
bunda1 пишет
а, что это? У меня другой код в 58 , и проблем вроде нет...В SM есть, как бы задать на : |
bunda1 > 27-02-2018 14:51:29 |
drage2 пишет
|
drage2 > 27-02-2018 15:19:02 |
bunda1 bunda1 пишет
Так она совсем пропадает и кнопка A/P не работают.... Выделить код Код:var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath('C:\\PotPlayer\\PotPlayer.exe'); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var args = ["/команда"]; process.init( file ); process.run( false, args, args.length ); А,наоборот, закрыть прогу, выйти можно? Все уже подставлял....никак. Это я хочу прикрутить к кнопке Memory, все работает, но при выходе из браузера |
bunda1 > 27-02-2018 21:39:01 |
drage2 пишет
Выделить код Код:// Пример, код закрывает notepad.exe при выходе из браузера: var closer = { observe: function(subject, topic, data) { if ( data == "shutdown" ){ var VBScript = 'strComputer = "."\ \nSet objWMIService = GetObject("winmgmts:" _\ \n& "{impersonationLevel=impersonate}!\\\\" & strComputer & "\\root\\cimv2")\ \nSet colProcessList = objWMIService.ExecQuery _\ \n("Select * from Win32_Process Where Name = \x27notepad.exe\x27")\ \nFor Each objProcess in colProcessList\ \nobjProcess.Terminate()\ \nNext'; var file = Services.dirsvc.get('ProfD', Ci.nsIFile); file.append("processTerminate.vbs"); custombuttonsUtils.writeFile(file.path, VBScript); file.launch(); } } }; Services.obs.addObserver(closer, "quit-application", false); |
drage2 > 28-02-2018 10:16:00 |
В чем проблема ? Левым кликом + масштаб все ОК! , как правым в минус , так сразу на -5% .. |
bunda1 > 05-03-2018 10:04:06 |
drage2 пишет
Не понял. |
drage2 > 05-03-2018 10:18:08 |
bunda1 bunda1 пишет
ЛКМ- увелиить масштаб, ПКМ- уменьшить , или наоборот... |
bunda1 > 05-03-2018 10:43:16 |
А ты убрал FullZoom.reset(); с ПКМ? |
drage2 > 05-03-2018 11:08:10 |
bunda1 |
bunda1 > 05-03-2018 11:30:22 |
drage2 пишет
Проверил. Вроде всё нормально. |
drage2 > 05-03-2018 12:11:42 |
bunda1 |
bunda1 > 05-03-2018 12:57:50 |
drage2 пишет
|
drage2 > 05-03-2018 13:14:25 |
bunda1 |
bunda1 > 05-03-2018 13:36:24 |
drage2 |
drage2 > 05-03-2018 13:56:58 |
bunda1 bunda1 пишет
Точного масштабирования ....Левая точно масштабирует , а правая -нет! |
momo2000 > 06-03-2018 18:14:21 |
А как сделать свои значения масштабирования или хотя бы шаг? momo2000 пишет
Что то не понял, я вроде писал это в тему [CB]Toggle Find+ и bunda1 ответил что в курсе, но пока не знает как это поправить, но сообщение здесь оказалось. |
drage2 > 06-03-2018 18:39:50 |
Вот, что с ней не так? ПКМ - перескакивает как вздумается. скрытый текст Выделить код Код:/*Initialization Code*/ // Кнопка для управления масштабом страницы в адресной строке (()=> { // Удалить из адресной строки FF51 стандартную кнопку масштаба .... var but = document.getElementById("urlbar-zoom-button"); if (but) but.style.display = "none"; // Создать в адресной строке кнопку масштаба .... var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); if (!urlbarIcons) return; var zoomButton = document.createElement("statusbarpanel"); urlbarIcons.insertBefore(zoomButton, urlbarIcons.firstChild); // перед последней кнопкой адресной строки addDestructor(()=> zoomButton.remove()) updateZoomButton(); zoomButton.id = "ZoomButton"; zoomButton.style.cssText = "-moz-appearance: none; margin-right: -5px !important; margin-left: 5px !important; border: 0 !important;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Сбросить масштаб \nП: Страница (A) - Текст (Р)"; zoomButton.tooltipText = "Л: Сбросить масштаб \nП: Страница (A) - Текст (Р)"; // Отслеживать клики на кнопке масштаба .... addEventListener("click", e=> { if ( e.button == 2 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 0 ) { // сбросить масштаб FullZoom.reset(); } }, false, zoomButton); addEventListener("contextmenu", e=> { e.preventDefault(); }, true, zoomButton); // Следим за изменением масштаба и запускаем обновление кнопки .... var evalcode = () => { window.removeEventListener("MozAfterPaint", evalcode, false); var str = "{ setTimeout(()=> { updateZoomButton(); }, 50);"; var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, FullZoom.handleEvent]; array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace("_", ".").match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) );}, 50); }); addDestructor(()=> { array.forEach(func=> { eval( (func.toString().replace("_", ".").match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ); }); }); }; window.addEventListener("MozAfterPaint", evalcode, false); // Показывать текущий масштаб страницы на кнопке .... function updateZoomButton() { zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; } addEventListener("TabAttrModified", e=> { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; setTimeout(()=> { updateZoomButton(); }, 100); }, false, gBrowser.tabContainer); addEventListener("TabSelect", e=> { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; setTimeout(()=> { updateZoomButton(); }, 100); }, false, gBrowser.tabContainer); })(); // Настройка функций кликов мыши для кнопки .............. this.onclick = this.oncontextmenu = e => { // действие при клике ЛКМ .... if ( e.button == 0 ) FullZoom.enlarge(); // действие при клике СКМ .... if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s)); // действие при клике ПКМ .... if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); FullZoom.reduce(); } showTooltip(); }; this.setAttribute("ondblclick", "event.preventDefault()"); window.addEventListener("load", initZoomButtons, false); // Подсказка для кнопки .............. this.onmouseover =()=> { var value = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%"; this.tooltipText = "ЛКМ: увеличить масштаб \nПКМ: уменьшить масштаб "; }; // Установить нужную иконку кнопки при старте браузера или при изменениях настроек 'about:config' .............. var zoomFull = "browser.zoom.full"; function toggleImage() { self.image = cbu.getPrefs(zoomFull) ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII=' : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC'; } toggleImage(); Services.prefs.addObserver(zoomFull, toggleImage, false); addDestructor(()=> Services.prefs.removeObserver(zoomFull, toggleImage) ); |
bunda1 > 07-03-2018 12:17:09 |
drage2 пишет
Выделить код Код:// Настройка функций кликов мыши для кнопки .............. this.onclick =e=> { // действие при клике ЛКМ .... if ( e.button == 0 ) FullZoom.enlarge(); // действие при клике СКМ .... if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s)); // действие при клике ПКМ .... if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); FullZoom.reduce(); } }; 07-03-2018 12:18:22 и там лишние. |
drage2 > 07-03-2018 13:52:07 |
bunda1 Выделить код Код:// Настройка функций кликов мыши для кнопки .............. this.onclick =e=> { // действие при клике ЛКМ .... if ( e.button == 0 ) FullZoom.enlarge(); // действие при клике СКМ .... if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s)); // действие при клике ПКМ .... if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { FullZoom.reduce(); } }; this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; |
momo2000 > 29-03-2018 08:10:43 |
59+ не отображается масштаб в адресной строке. |
broker > 04-11-2018 22:51:27 |
Мастер bunda1 почините кнопку на последней esr не работает. |
Andrey_Krropotkin > 19-04-2019 23:06:42 |
На 66.03 код вроде бы как работает, но не запоминает настройки - единый масштаб, постоянно сбрасывает к 100% скрытый текст Выделить код Код:// Кнопка для управления масштабом страницы в адресной строке. .......................... (()=> { // Удалить из адресной строки FF51 стандартную кнопку масштаба .... var but = document.getElementById('urlbar-zoom-button'); if (but) but.style.display = "none"; // Создать в адресной строке кнопку масштаба .... var zoomButton = document.createElement("label"); var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57 // urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки urlbarIcons.insertBefore(zoomButton, null); addDestructor(()=> zoomButton.remove()); updateZoomButton(); zoomButton.id = "zoomButton"; zoomButton.setAttribute("context", "event.stopPropagation()"); zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -2px; margin-left: -1px;"; // Css стиль для кнопки масштаба zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\n Жирный - только текст\nС: Единый масштаб для всех страниц - Красный цвет\nП: Сбросить масштаб на 100% \nКолесиком: менять масштаб"; // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... function updateZoomButton(e) { zoomButton.value = Math.round(ZoomManager.zoom*100) + "%"; setTimeout(()=> { zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : ""; }, 5); // запомнить текущий масштаб в 'about:config' if ( e == undefined ) { try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {}; zoomButton.prefTimeout = window.setTimeout(()=> { cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ) }, 250); } }; // Отслеживать клики на кнопке масштаба .... addEventListener("click", e=> { if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба if ( e.button == 1 ) { // единый масштаб для всех страниц cbu.isPref("CB.zoom.allEvenly", false); cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") ); cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) ); } if ( e.button == 2 ) FullZoom.reset(); // сбросить масштаб updateZoomButton(); }, false, zoomButton); // Менять масштаб колесиком мыши на кнопке масштаба .... addEventListener("DOMMouseScroll", e=> { e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge(); }, false, zoomButton); // Следим за изменением масштаба и запускаем обновление кнопки .... var hidden = Object.getOwnPropertyDescriptor(XULElement.prototype, "hidden"); Object.defineProperty(but, "hidden", { configurable: true, enumerable: true, get: hidden.get.bind(but), set: val => { Components.stack.formattedStack.includes("LocationChange") || setTimeout(updateZoomButton, 50); return hidden.set.call(but, val); } }); addDestructor(() => delete but.hidden); // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... addEventListener("TabAttrModified", e=> { if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return; // if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) { if ( cbu.getPrefs("CB.zoom.allEvenly") ) { var value = cbu.getPrefs("CB.zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == value ) return; setTimeout(()=> { gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value; updateZoomButton(e); }, 0); } else updateZoomButton(e); }, true, gBrowser.tabContainer); })(); Уважаемые bunda1, Dumby можете ли Вы починить для новых версий? |