bunda1 пишетДа "Открывать всё в новых вкладках, от 17.11.2013" глючит буду исправлять.
Буду ждать
// Открывать всё в новых вкладках, от 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); }); })();
Отредактировано bunda1 (07-12-2013 01:13:06)
Отсутствует
Что замечено: если кликнуть кнопку "Перезагрузить" - это открывает страницу в новой вкладке. Несмотря на нажатый Alt.
То же самое если кликнуть стрелку в адресной строке (id="go-button").
А вот если нажимать Enter (фокус в адресной строке) - тогда да, без Alt адрес открывается в новой вкладке, с Alt - в текущей.
Отсутствует
bunda1
А можешь сделать чтобы Открывать всё в новых вкладках работала с Location Bar Enhancer в адресной строке?
Отсутствует
rbfyec и voqabuhe
Лучше перенести обсуждение Открывать всё в новых вкладках сюда Custom Buttons | Форум Mozilla Россия
Отсутствует
Изменить масштаб( Firefox 3.6 + )
Автор: bunda1
Версия: от 30.11.2013.
Описание: Kод создает в адресной строке кнопку которая показывает размер масштаба текущей страницы.Колесиком мыши на кнопке можно менять масштаб текущей страницы.
Левым кликом на кнопке можно переключить режим изменения масштаба - менять масштаб страниц или менять масштаб только текста на страницах, если переключена на менять только текст размер масштаба в адресной строке будет отображаться жирным шрифтом.
Средним кликом на кнопке можно переключить - единый масштаб для всех страниц или только для сайта, если переключена на единый масштаб для всех страниц - размер масштаба в адресной строке будет красного цвета.
Правым кликом на кнопке можно сбросить масштаб на 100%.Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
У меня возник вопрос касательно текстового зума.
Не знаю, правда, или это в принципе возможно, но если да, то хотелось бы иметь эту возможность (или если можно, покажите как её добавить)
Допустим у меня полный зум ( и текст и остальное) равен 90%.
Левым кликом я оставлю текст в 90%, а всё остальное будет переведено в 100%.
Далее я могу регулировать как угодно зум текста колёсиком.
Это - то, что мы имеем на сегодня.
Есть ли возможность ввести режим (назовём его "Текст1"), при переключении на который полный зум останется таким как был до переключения (а не 100% безусловно), а текстовый зум я смогу менять как угодно?
Или это просто в принципе невозможно?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Есть ли возможность ввести режим (назовём его "Текст1"), при переключении на который полный зум останется таким как был до переключения (а не 100% безусловно), а текстовый зум я смогу менять как угодно?
Или это просто в принципе невозможно?
Возможность такая наверно есть но я не знаю как это сделать. Надо подумать.
Отсутствует
Спасибо! Менять масштаб только текста это шикарно!!!
Заметил небольшую особенность, если добавляешь код инициализации в существующую кнопку, то она мутнеет (обесцвечивается).
Это можно поправить?
Отсутствует
№5914
Вставил код, перед инициализацией кода масштаба, но не помогло.
Там даже если новую кнопку создавать, то она все-равно обесцвеченная получается.
Разобрался, отключил дополнение, которое меняло масштаб, оставил только эту кнопку.
И ещё вопрос, можно ли сделать так, что когда выбрана левая кнопка, то масштаб отображается курсивом?
Отредактировано ma3ca (10-03-2014 14:42:54)
Отсутствует
И ещё вопрос, можно ли сделать так, что когда выбрана левая кнопка, то масштаб отображается курсивом?
Не совсем понял что требуется, но попробуй заменить в коде:
на:
Отсутствует
Спасибо bunda1 за отличную кнопку!
Давно хотел что-то подобное и вы можно сказать реализовали мою мечту
Нашел небольшую проблему: у меня кнопка оказалась не самой левой в ряду иконок:
Проверял на чистом профайле, там кнопка встала слева от звезды, но после зотеро.
Помогло изменение в коде в данной строке:
... urlbarIcons.insertBefore( zoomButton, urlbarIcons.lastChild ); // перед первой иконкой адресной строки ...
заменил lastChild на firstChild и кнопка встала на своё место - самое левое после всех иконок.
Проверено на фаере 29, виндоус 7.
Отсутствует
Похоже что зотеро запускает похожий код добавления кнопки но после того как срабатывает расширение Сustom Buttons и код Изменить масштаб
Добавлено 02-06-2014 23:19:47
Мда, фраза перед первой иконкой адресной строки немного водит в заблуждение. Исправлю. Спасибо
Отредактировано bunda1 (02-06-2014 23:19:47)
Отсутствует
bunda1
В показывает одинаковый масштаб для всех страниц. Сама кнопка стала тусклой, как не активная, а в сборных кнопка вообще не работает. Если можно поправь, плиз.
// Кнопка для управления масштабом страницы в адресной строке, от 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 ); })();
Отсутствует
А можно соединить эту кнопку с этой:
// Объявляем переменные для этой вкладки ................................ 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();
Отсутствует
Оставить масштаб в адресной строке, функции ЛК и СК, а масштаб менять и сбрасывать по ПКМ+колёсико и ПК+ЛК. Чтоб не в адресной строке.
Я пока положил в одну инициализацию, в принципе работает и так.
Отсутствует
Не отображается изменение масштаба (застопорилось на 100%) - PM 24.7.2
На FF 24.8.1 работает, а что показывает при переключение масштаба выше 100% на кнопке консоль ошибок: chrome://global/content/console.xul
Отсутствует
что показывает при переключение масштаба выше 100% на кнопке консоль ошибок: chrome://global/content/console.xul
пусто. попробую на "чистом" профиле, с одним дополнением СВ и одной кнопкой. после отпишусь...
Добавлено 29-09-2014 12:24:11
с "чистым" всё работает правильно. какая-то несовместимость... зря поднял шум. разберусь самостоятельно. спасибо.
----------------------------------
удалил дополнение Zoom Page и всё заработало, а вот простое отключение ничего не дало, что и ввело в заблуждение...
Отредактировано Quartz1t (29-09-2014 13:17:06)
Отсутствует