>Форум 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=55481 |
Tiger.711 > 30-06-2012 11:55:09 |
Подобная тема, как мне кажется, будет актуальна. По аналогии с "Ищу расширение" Для начала, мой список расширений Aaapptabs About startup Adblock Plus Add Bookmark Here ² Add to Search Bar Addon Update Checker Addons Manager Hilite BBCopy bug582139(Allow bookmarks button in the nav bar) ColorResults Context Search RG Copy HTML Copy Link Name Customizations for Adblock Plus Customize about:newtab Element Hiding Helper для Adblock Plus Enjoy Reading Expire history by days Extension Options Menu FindBar Tweak Flash Video Downloader Youtube Downloader Go Parent Folder Google Search by Image Google/Yandex search link fix Grab and Drag GReader Panel ImageFit InlineDisposition InstantFox KillSpinners Location Bar Enhancer More In Content UI Movable Firefox Button Mozilla Archive Format New Tab Tools NoSquint Open about:permissons Organize Search Engines PDF Viewer Peek Personal Menu Places Maintenance Pretty Install ProfileSwitcher Progress Bar on Tab Puzzle Quick Translator Recognize It Reload Tab On Double-Click Restartless App Button Quit Save File to Saved Password Editor Searchbar Autosizer Secure Login Send Tab to Device Set As Bookmarks Toolbar Folder Show my Password SmartVideo For YouTube SortPlaces Stay-Open Menu Suspend background tabs Tab Auto Reload Tab Scope tabcopy TabGroups Menu Table2Clipboard Tabs Open Relative (Modified) TabSubmit url-addon-bar Менеджер сессий absolute load control App Button Remove CacheViewer Fx6 Clearly F6 Flagfox Foobar FVD Speed Dial with Online Sync Google Instant Integration History Search Sorted HyperTranslate Informational Tab (Информативные вкладки) Java Quick Starter Lazarus: Form Recovery MailCatch: Temporary Emails Mozilla Labs App Runtime Mozilla Labs: Prospector - AwesomeBar HD Mozilla Labs: Prospector - Instant Preview Reload Plus SelectionSK Springpad Extension Super Tab Mode Tab Mix Lite Tab Utilities Tamper Data Thumbnail Expander Transmaker URL Tooltip User Agent RG Vaka: Inline Translator (16.06.2012) WideSearchBar Yahoo! Axis for Firefox |
voqabuhe > 30-06-2012 12:25:25 |
Очень полезная тема (без иронии). Может Tab Mix plus, Tab Utilities выделить в отдельную тему, в виде заявки на создание кнопок для их замены? В связи с особой глючностью или отсутствием поддержки, это наиболее актуально. ИМХО. |
Крошка Ру > 30-06-2012 12:25:39 |
Tiger.711 Adblock Plus Add-on Compatibility Reporter Clearly CoLT Custom Buttons Edit Bookmark Plus Element Hiding Helper для Adblock Plus Flat Bookmarks Google Reader Watcher leftsidedBookMarkStar Menu Icons Plus Pearl Crescent Page Saver Basic Personal Menu Quick Translator Russian spellchecking dictionary Scriptish Search By Image (by Google) Status-4-Evar Stylish |
iDev.Pi > 30-06-2012 12:58:09 |
кто-нибудь, расскажите, пожалуйста: а зачем дополнения заменять кнопками CB? И помните, что КБ-кнопки не обладают теми же возможностями, какими обладают расширения, в силу того, что кнопки загружаются не сразу. |
Крошка Ру > 30-06-2012 12:58:47 |
okkamas_knife ,Quick Translator - с учётом фишек которые его отличают от других или просто как переводчик? |
Крошка Ру > 30-06-2012 13:13:25 |
iDev.Pi, Можно третий пункт добавить или второй разделить на а) и б) Функция интересная, полезная, но жаба душит целое расширение ставить когда реализация возможна посредством кнопки , скрипта, стиля ... 30-06-2012 13:15:48
okkamas_knife, Ну так подозревал , видя какие чудеса творят кнопки |
voqabuhe > 30-06-2012 13:17:48 |
А ещё FireGestures/..., жестами ну очень много расширений и CB заменить. |
Крошка Ру > 30-06-2012 13:18:58 |
okkamas_knife пишет
Вообще бы запилить показательную сборочку нафаршированную исключительно этим всем 30-06-2012 13:26:15 iDev.Pi пишет
Как не сразу .... |
hydrolizer > 30-06-2012 13:56:36 |
iDev.Pi пишет
Если бы только в силу этого. |
Tiger.711 > 30-06-2012 14:14:08 |
Сразу уточню, чтобы небыло недопонимания. Эти расширения стоят на тестовом профиле, планирую выкинуть больше половины из них в итоге. Кроме того, большая часть из них фиксит интерфейс и точно может быть заменена кнопками/стилями. |
bunda1 > 30-06-2012 15:30:07 |
voqabuhe пишет
Эсть кнопки которые заменяют FireGestures. iDev.Pi пишет
А зачем использовать стили для Stylish, userChrome.css и userContent.css если все то что они могут можно сделать дополнениями и если есть особые пожелания то можно попросить создателей чтобы дополнили свои расширения. iDev.Pi пишет
Ни кто при запуске браузера не будет нажимать кнопки, я использую много CB кнопок и у меня с этой задержкой в 0.5-1 секунду проблемы никогда не было. |
Крошка Ру > 30-06-2012 17:01:11 |
okkamas_knife ,Исключительная дремучесть ..... |
Крошка Ру > 30-06-2012 17:51:13 |
okkamas_knife, Так далеко не все желаемые кнопки существуют в природе |
>ORG@niZM< > 22-08-2013 07:06:16 |
Странно, что тема заглохла. Ведь вопрос по разгрузке от ненужных (нужных, но тяжёлых/иногда глючных) расширений актуален и по сей день. Буквально вчера прошёлся по теме готовых кнопок и повыкидывал не менее 10-ти расширений, а заодно и обновил (жаль нет автообновления) некоторые кнопки. мой список. омг! [*]Adblock Plus 2.3.2
Скажи "нет" рекламе!
Добавление поискового плагина для любой страницы в панель поиска. [*]Add-on Tools in App Button 1.0.1
Makes the app button's Add-ons have a menu with the Tools menu's add-on items.
Добавляет пункт в меню Инструменты и кнопку для проверки обновлений установленных дополнений. [*]Automatic Save Folder 1.0.4
Автоматически выбирает папку для сохранения загружаемого файла по имени или домену.
AutoPager — это расширение для Firefox и Mozilla, автоматически подгружающее страницы в фоновом режиме. А еще его можно использовать как генератор XPath.
Proxy management made easy.
Automatically upload .torrent files to your favorite BitTorrent client's Web Interface. [*]Brief 1.6.4
Расширение для чтения RSS-лент. [*]BugMeNot 2.2
Bypass compulsory web registration with the context menu via www.bugmenot.com. [*]Check for Updates in Help Menu 1.1
Adds a 'Check for Updates' entry to the Help menu.
Colorful Tabs colors every tab in a different color and makes them easy to distinguish while beautifying the overall appeal of the interface.
Позволяет создавать кнопки для панелей инструментов. [*]Download Manager Tweak 0.9.8
Позволяет открывать менеджер загрузок во вкладке или боковой панели и немного изменяет его внешний вид.
Replacement for the standard statusbar download text
Просмотр и управление загрузкой файлов при помощи компактной панели над строкой состояния
Менеджер загрузок для Firefox. [*]Element Hiding Helper для Adblock Plus 1.2.3
Помогает при создании правил скрытия для Adblock Plus, эффективное средство борьбы с текстовой рекламой.
Строка состояния с показателями скорости, размера, процента и времени загрузки страницы (нечто подобное Опере). [*]Extension List Dumper 1.15.2
Создает список установленных расширений.
Визуальные закладки
The width of the specified tab becomes small up to the size of favicon.
"Save as" title as default like in IE
Anything between simple tweaks such as placing the findbar in the top corner, to the powerful "Find in All Tabs" tool, FindBar Tweak will make your find toolbar "just right"!
Заменяет Flash-объекты на кнопку, нажав которую вы сможете просмотреть их.
Позволяет закачивать все или только выбранные файлы при помощи наиболее популярных менеджеров закачки для Windows, Mac OS X, Linux и FreeBSD (см. полный список на домашней странице расширения). FlashGot также может собирать галереи мультимедиа на одной странице для быстрой и удобной закачки. [*]Form History Control 1.3.1.0
Управление записями истории форм (просмотр, редактирование, удаление, экспорт/импорт) [*]forum.ru-board bookmarks checker 0.1
Check new messages on forum.ru-board topics added to bookmarks
Прогноз погоды от Gismeteo.Ru
Go Parent Folder In Library
Менеджер пользовательских скриптов для Firefox [*]How Many Times Can I Back? 0.2.2011012001
Counts up the numbner of histories in Back and Forward buttons.
HP Product Detection Plugin for Mozilla
Encrypt the Web! Automatically use HTTPS security on many sites. [*]JSONView 0.7
Просмотр документов в формате JSON прямо в браузере. [*]KeeFox 1.2.3
Простое и защищённое управление паролями. Автоматическая авторизация, никогда не забывает ни один из паролей, не теряет контроля над ними и увеличивает их защищённость. Использует всемирно известный KeePass Password Safe.
Rebind your keys.
Be with KOLOBOK smiles in any forum and blog!
Меняет курсор согласно контенту по ссылке.
Предоставляет расширенные свойства для ссылок: размер файла по ссылке, дату последнего изменения и т.п.
Быстрая подписка на обновления для Listen Trackers (litr.cc). Работает с rutracker.org, free-torrents.org, tapochek.net и другие. Полный список поддерживаемых трекров можно посомтреть на litr.cc
Pops elements as resizable windows. [*]Load Tabs Progressively 1.6.1
Загрузка вкладок друг за другом.
Выделяет имя домена и расшифровывает адрес для более удобного восприятия. [*]LogMeIn, Inc. Remote Access Plugin 1.0.0.1024
Replaces the error page with a lolifox appearance with additional features. [*]MinimizeToTray revived (MinTrayR) 1.1.2
Сворачивает текущее окно в трей
Zoom with the mouse. [*]Mozilla Labs: Prospector - Find Suggest 5
Suggest words from the page when finding
Interactive console for Mozilla applications [*]Muter 1.0.3
Let you mute the Firefox browser.
Экстра защита для Firefox: С помощью NoScript вы сможете разрешать исполнение JavaScript, Java (и других плагинов) только для доменов, установленных вами (например, ваш веб-сайт). Белый список, базирующийся на принципе упреждающего блокирования, позволяет предотвратить использование уязвимостей (известных и ещё не известных!) без потери функциональности… Эксперты соглашаются: Firefox действительно безопаснее с NoScript :-)
Manage site-specific zoom levels and color settings [*]oldbar 1.2
URL bar uses Firefox 2 style results
Extends the "Save" dialog by a button to open the file directly. [*]Organize Search Engines 1.7
Упорядочите свои средства поиска с помощью папок и разделителей.
Расширение для организации значков на строке состояния.
Добавляет кнопку для редактирования просматриваемой страницы в Firefox.
KeePass Login Manager Storage and Integration using the KeePassHttp plugin [*]Personal Titlebar 1.0.20111112
Personalize your Firefox Title Bar! Anything placed on Menu Bar will be moved to Title Bar.
about:config без неиспользуемых настроек [*]Preserve Download Modification Timestamp 2011.03.21.22
Preserve the modification timestamp, sent by the server, for downloaded files
Добавляет имя профиля во всплывающую подсказку строки состояния и настройки для запуска других профилей
Supercharge your reload button and hotkeys! [*]Ru-Board Navigation 2011.11.15u
Легкая навигация по компьютерному порталу и форуму Ru-Board.com. [*]Russian/English spell dictionary 1.0.0.1
Добавление некоторых удобств в работу с Rutracker.Org.
Helps you to save Web pages and organize the collection.
Highlights previous scroll position [*]Scroll Search Engines 1.0.3
Scrolls through search engines in the search bar
Browse for folders of a website. [*]Search on Engine Change 1.2
Search for the text in the search box when you select a search engine.
Jump-to-word buttons and highlighting for the search box content [*]Session Manager Export Tool 0.2
Allows you to export the sessions stored by Session Manager as a bookmarks.html file. [*]Status-4-Evar 2012.11.11.16b
Элементы и индикаторы бывшей строки состояния для Firefox 4+
Преобрази интернет вместе со Stylish - менеджером пользовательских стилей.
Предварительный просмотр вкладок и навигация по веб-страницам с помощью всплывающих окон.
Расширенное управление вкладками и многое другое.
Access firefox tabgroups using a dropdown menu. [*]UnMHT 6.2.11
UnMHT умеет открывать веб-архивы формата MHT (MHTML), а также сохранять веб-страницы полностью в один-единственный MHT-файл.
Проверяет веб-страницы на наличие обновлений
Дефрагментация базы данных places.sqlite для увеличения скорости работы Firefox
Добавление множества функций для сайта ВКонтакте.ру
Allows XHTML Mobile Profile to be displayed in the browser.
µTorrent status in my browser and one click submission of torrents.
Функциональный менеджер сессий. Сохраняет и восстанавливает состояние всех окон.
Быстрый доступ ко всем возможностям Яндекса По причине нестабильности некоторых старых расширений на новом или новых, но конфликтующих между собой, всё ещё сижу на 16.0.2 |
villa7 > 22-08-2013 10:44:15 |
>ORG@niZM<
ширина вкладок будет уменьшаться в зависимости от их количества. |
>ORG@niZM< > 22-08-2013 11:06:10 |
villa7 |
Pony_Smile_Pack > 22-08-2013 13:53:33 |
>ORG@niZM< пишет
И что дальше? Хотел то чего? Заменить адблок кнопкой? Есть тема мои расширения. |
>ORG@niZM< > 22-08-2013 13:59:29 |
Pony_Smile_Pack пишет
Того же, что и другие в этой теме. Не понятно?! Читаем название темы. А список приведён общий. 22-08-2013 14:05:57 |
feas > 22-08-2013 14:20:35 |
>ORG@niZM< пишет
Список ваших расширений | Форум Mozilla Россия >ORG@niZM< пишет
как вам сказать список что надо ни у кого терпения не хватит, тем более что там и тут вам нужно немного другое. |
>ORG@niZM< > 22-08-2013 14:24:35 |
feas >ORG@niZM< пишет
22-08-2013 14:28:56 feas пишет
у меня не завёлся нормально. Именно его хотел на замену кучи кнопок от Я.Б Да, уберу из списка отключенные расширения. |
Pony_Smile_Pack > 22-08-2013 14:48:19 |
>ORG@niZM< пишет
Там надо прописать адреса. |
feas > 22-08-2013 14:53:08 |
Блокировщик Google Analytics 0.9.6 - подписки в адблоке на приватность и антисчетчик. 22-08-2013 14:55:03 Pony_Smile_Pack пишет
не адреса а скрипты поставить ну тут их ок 160 чтоли. Там не только почты да и их можно отдельно иконки ставить - в таком ящике столько в таком столько итд... |
>ORG@niZM< > 22-08-2013 15:01:44 |
Pony_Smile_Pack okkamas_knife пишет
К ней и стремлюсь. |
Pony_Smile_Pack > 22-08-2013 15:03:23 |
>ORG@niZM< пишет
Именно под йаху он и затачивается. |
>ORG@niZM< > 22-08-2013 15:03:56 |
feas пишет
один под utorrent, второй под transmission, да и функции они разные немного выполняют (в чём-то сходятся, а в чём-то и дополняют друг-друга) |
feas > 22-08-2013 15:05:37 |
>ORG@niZM< пишет
там яндекс, там контакт, смотрите, ищите скрипты поставить ну тут их ок 160 чтоли 22-08-2013 15:08:21 |
>ORG@niZM< > 22-08-2013 15:17:33 |
feas 22-08-2013 15:18:23 feas пишет
хм, для своего города не замечал |
feas > 22-08-2013 15:25:52 |
>ORG@niZM< пишет
http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE% … 0%B8%D0%B8 >ORG@niZM< пишет
справа снизу ))))))) >ORG@niZM< пишет
закладки,xnotifer все? >ORG@niZM< пишет
а он ещё существует, вроде бы им... каюк не? теперь яндекс предлагает скачать либо через клиент диска либо на скорости 10Кб - куча ора мата уже что никто скачать не может, лучше перезалейте на дропбокс или rghost. |
Pony_Smile_Pack > 22-08-2013 15:28:10 |
>ORG@niZM< пишет
Должно сообщать на почту и так. Галочку поставить только. |
>ORG@niZM< > 22-08-2013 15:29:14 |
feas пишет
да, вижу кнопку, но можно ли сделать, чтобы дефрагментация выполнялась автоматом, например при старте? feas пишет
заменил пока на джетпак Findbar Tweak, но кнопку возьму на заметку и при случае обкатаю в бою feas пишет
склоняюсь таки к https://forum.mozilla-russia.org/viewtopic.php?id=52227 feas пишет
с натяжкой, но принимается feas пишет
лень, однако. приятнее одной рукой с мышой зумить feas пишет
принято, спасибо. feas пишет
но такой способ не поддерживает белые списки. или ...? feas пишет
не понял, вопрос ли это, но отвечу - нет. первый - замена почившему гуглоридеру, второй - собирает и хранит фиды локально (в профиле) feas пишет
буду использовать в связке, ибо первый даёт то, что вы можете видеть в моём первом посте в этой теме (чего нет в кнопке) feas пишет
дополняют друг друга feas пишет
вообще-то было отключено, можно было не обращать внимание )) feas пишет
расширение было отключено, а кнопка по мне так через раз работает, однако взял её ещё до обращения в эту тему feas пишет
закладки не так наглядно, как интерактивная кнопка, меняющая свой вид при изменениях в соц.сетях + выпадающие меню с быстрым доступом к нужному (изменённому) разделу )) |
>ORG@niZM< > 22-08-2013 21:46:32 |
feas пишет
имел ввиду, что не замечал корявости прогнозов для своего города 22-08-2013 21:56:08 feas пишет
немного не понял, какая это подписка. у меня используются Ruadlist+Easylist, BitBlock (иногда отключаю) и Counters - других на сайте не обнаружил |
feas > 22-08-2013 22:15:13 |
>ORG@niZM< пишет
все просто №3 и любая закладка становится кнопкой (в новой вкладке тут) |
bunda1 > 22-08-2013 22:15:39 |
>ORG@niZM< Выделить код Код:// Двойным левым кликом на папке закладок добавлять закладку в папку закладок ................................... addEventListener("dblclick", function(e) { var target = e.originalTarget; if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return; var docTitle = ( content.document.title || gBrowser.mCurrentTab.label).substr(0, 50); var folderId = PlacesUtils.getConcreteItemId( target._placesNode ); var currentURI = Services.io.newURI( content.location, null, null ); PlacesUtils.bookmarks.insertBookmark( folderId, currentURI, 0, docTitle ); // всплывающая подсказка .... var folderTitle = PlacesUtils.bookmarks.getItemTitle( folderId ); var favicon = ( !!gBrowser.mCurrentTab.image ) ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/Portrait.png"; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); alertsService.showAlertNotification( favicon, "Добавил в папку " + folderTitle + ":", docTitle, false, "", null, ""); }, false, window ); |
feas > 22-08-2013 22:17:03 |
>ORG@niZM< пишет
настройки фильтров, добавить подписку - добавить другие подписки |
>ORG@niZM< > 22-08-2013 22:19:54 |
feas пишет
но ведь это будет просто статичная кнопка без отображения хотя бы температуры, так ведь? |
bunda1 > 22-08-2013 22:22:56 |
>ORG@niZM< |
feas > 22-08-2013 22:25:36 |
>ORG@niZM< пишет
№91 с помощью её вытащите иконку и отредактируйте кнопку. 22-08-2013 22:27:18 >ORG@niZM< пишет
|
bunda1 > 22-08-2013 22:27:47 |
>ORG@niZM< |
>ORG@niZM< > 22-08-2013 22:41:10 |
bunda1 пишет
забрал, спасибо. Минус 1. bunda1 пишет
Немного не то. Расширение даёт возможность автоматической проверки с заданным интервалом, а кнопка, я так понял, выполняет проверку после нажатия. feas пишет
так мы же про rp5 говорили 22-08-2013 22:43:33 bunda1 пишет
да, оказывается код с позавчера лежит в кнопке, а расширение удалить забыл. Минус одно! 22-08-2013 22:53:44 feas пишет
кстати в коллекции с недавних пор, но редко пользовался. пересмотрел её функции и выкинул abduction |
feas > 22-08-2013 23:19:00 |
>ORG@niZM< пишет
Хочешь знать почему я не люблю гисметео яндеска майловые погодники. |
>ORG@niZM< > 22-08-2013 23:29:44 |
feas |
feas > 27-08-2013 21:47:43 |
VT + почему-то не дружит с моим советом хотя расширение работает без проблем Vertical Toolbar |
>ORG@niZM< > 28-08-2013 06:38:36 |
feas |
Zaycoff > 28-08-2013 07:06:23 |
>ORG@niZM< пишет
Присоединяюсь к вопросу, можно ли её расположить под адресной строкой и вместо панели дополнений. И чтобы сразу несколько кнопок VT одновременно работали и не конфликтовали? |
villa7 > 28-08-2013 07:31:52 |
>ORG@niZM< |
>ORG@niZM< > 28-08-2013 07:56:58 |
villa7 |
Andrey_Krropotkin > 10-11-2013 21:53:17 |
Замена расширения Add-ons Manager Context Menu с некоторыми изменениями (положить в инициализацию) Задействованы разделы:расширения, темы, плагины, стили, скрипты, кнопки, службы. скрытый текст Выделить код Код://Добавление в меню расширений дополнительных пунктов (function(){ var iconURL = null; let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/AddonManager.jsm"); Cu.import("resource://gre/modules/XPIProvider.jsm"); const usoRegx = /^https?:\/\/userscripts.org\/scripts\/source\/\d+.\w+.js$/; window.AMD_Helper = { init: function(){ document.addEventListener("DOMContentLoaded", this, false); this.addHomePageForScriptish(); }, handleEvent: function(event){ switch(event.type){ case "DOMContentLoaded": var doc = event.target; var win = doc.defaultView; if (["about:addons","chrome://mozapps/content/extensions/extensions.xul"].indexOf(doc.URL) == -1) return; this.addPopupMenu(doc); win.AMD_Helper = AMD_Helper; this.win = win; var observer = new MutationObserver(function(e) { e = e[e.length-1]; if(e.attributeName == "loading") { var doc = e.target.ownerDocument; } }); observer.observe(doc.getElementById("detail-view"), {attributes: true}); break; case "popupshowing": this.getAddon(this.win.document.popupNode.value, this.setItemsAttributes, event); break; } }, addHomePageForScriptish: function(){ if(!window.Scriptish_config) return; Scriptish_config.scripts.forEach(function(script){ if(!script.homepageURL && script.updateURL){ if(usoRegx.test(script.updateURL)){ script.homepageURL = script.updateURL.replace(/source/, "show").replace(/.\w+.js$/, ""); } } }); }, //Создаем меню addPopupMenu: function(doc){ var mainicon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1wcREBAg9OD7NAAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAH6SURBVHjaxVNBaxNBFP4mGRNp06bSaGu9qXhRLOSQX6Dg0d48SMWC4Mmbv8AfYA7Sgp6UgteCF29CKahBsKKWglgam4rRxGxiks3u7Mz6zZIlSVHRk7N8vLcz7/vemzczwP8eorSCgtLJJeXpUGtMBQHgK5RptxbuYJUx5o8CL5bx+OzCkyuZ2cLIwtPihbVW9a1GiCyFQyusFD4S2zfv4x5DtI2TAphOZk8zbXFE4NKt5ctInDmY8OLd6zNrtI+IlhURG0Xs55dezZXXF9Gq7CA9NQvNbAH19W/wo+6gWXeaN1aQkybEXLv2Bb36Z+SvfUAynYLgB9Y+GLEv6Sl4HTdcvX0yy4kZqdkit1nFWC4Pme4ydvMXxNiOwwTfIVP5OCBlK0Cv8Y4C5xnXYM+bB0ixTwjWHwpUdzbh+ijZSWlYQefrcxwrLJJcIZxRAWM33qP1KTCOwJ9ErbyLno8trvqRgOrsITV5ik6pT2IXvbZdINmjVr8CmYMx09h7/8wKMBtUtIWgu4/DE8e5lxob4pLsDkhhvxJrjYfE2Am065/Et1ZUQRAJTBxJIDQJZrgKZDiRwYA03AlxCF1Ho92oYGM7ElCS5/qmVjXzLx+cg71tMex5D/8Pw+ng4etd2GYpER0ucJRI26v9l2/Ivg82CI2YIP+BPCyifwI91AzKs/qQkQAAAABJRU5ErkJggg=="; var mainicon1="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABVUlEQVQ4y2P4//8/AyWYoALpQsb9ftPM/4tnM+4nywCQ5s5jRf8d+7T+k2VAxHzH/TUHkv57TDMgzgWyJYz74xZ6/E9Y4vU/ZaXv/9Jd0f/LDkb+j13v8N9xmtp/oy6J/xqN/P+5Ihj2YzUApHnxtb7/My83/e8+W/C/9nj8//yD/v+T99j/D99u8N9nk/J/h9Vi/+Vq2P5jNQBkMz7NTuvE/1ut5v0vV8+M3QCQs3Fptlsh+l93Ktd/pTaW/wKpjAgDYFEFCjCQn3HZDNLME8tYANLDEcrgADcAFlWg0AYFGC5nK3ew/McaC6BEAopnUFSBQhubZpMVbP81JrFgdwEyBkUVup9BNoM0681hBdMYYYCMQfGMzc8gGqQZ5BIQxhkLoEQCimeQs0E2IcuB+CDNxkvZ/ktX4jAAlMJAiQRkA8iZML+CaBAfJA7SDOTvJyovEMIAruB4gKjNkYMAAAAASUVORK5CYII="; var mainicon2="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAwAAAP8AAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAD/AAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAA/wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAP8AAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAD/AAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAA8wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAPAAAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAHsAAAD/AAAAkAAAAAAAAADwAAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAIQAAAD/AAAAjQAAAAAAAAB1AAAA/wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAIoAAAD/AAAAigAAAAAAAABpAAAAAAAAAAAAAAB7AAAA/wAAAIcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAigAAAAAAAAB7AAAA8AAAAAAAAACEAAAA/wAAAIcAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAhwAAAAAAAACBAAAA/wAAAPAAAACKAAAA/wAAAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAAAP8AAAD/AAAA/wAAAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIQAAAAAAAAAAAAAAAAAAAAAAB8AAAAfAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAxAAAAIgAAAAWAAAAJEAAAEDAAD+BwAA+A8AAA=="; var ins = doc.getElementById("menuitem_uninstallItem"); if(!ins) return; ins = ins.nextSibling; var popup = ins.parentNode; var menuitem = $C("menuseparator", { id: "AMD-separator-1" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AMD-browse-dir", class: "menu-iconic", image: mainicon, label: "Место установки", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.browseDir);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AMD-browse-Folder", class: "menu-iconic", image: mainicon1, label: "Папка установки", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.Folder);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AMD-browse-goHome", label: "Домашняя страница", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.goHome);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AMD-browse-goAMO", label: "Страница на AMO", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.goAMO);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AMD-browse-support", label: "Страница поддержки", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.support);" }); popup.insertBefore(menuitem, ins); var menu = $C("menu", { id: "AMD-menu", class: "menu-iconic", image: mainicon2, label: "Копировать", }); popup.insertBefore(menu, ins); var menuPopup = $C("menupopup", { id: "AMD-menupopup", }); menu.appendChild(menuPopup); menuitem = $C("menuitem", { id: "AMD-copy-name", label: "Копировать имя", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.copyName);" }); menuPopup.appendChild(menuitem); menuitem = $C("menuitem", { id: "AMD-copy-version", label: "Копировать версию", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.copyVersion);" }); menuPopup.appendChild(menuitem); menuitem = $C("menuitem", { id: "AMD-copy-NameVersion", label: "Копировать имя и версию", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.copyNameVersion);" }); menuPopup.appendChild(menuitem); menuitem = $C("menuitem", { id: "AMD-copy-id", label: "Копировать id", oncommand: "AMD_Helper.getAddon(AMD_Helper.getPopupNode(this).value, AMD_Helper.copyID);" }); menuPopup.appendChild(menuitem); menuitem = $C("menuitem", { id: "AMD-go-uso", class: "greasemonkey", hidden: true, label: "Страница на Userscripts.org", oncommand: "openURL(this.tooltipText);" }); popup.appendChild(menuitem); menuitem = $C("menuitem", { id: "AMD-find-uso", class: "greasemonkey", hidden: true, label: "Поиск по Userscripts.org", oncommand: "openURL(this.getAttribute('find-on-uso'));" }); popup.appendChild(menuitem); popup.addEventListener("popupshowing", this, true); }, //Указываем где и когда показывать элементы меню setItemsAttributes: function(aAddon, event){ var popup = event.target; var doc = popup.ownerDocument; var isExtension = (aAddon.type == "extension"); var isTheme = (aAddon.type == "theme"); var isPlugin = (aAddon.type == "plugin"); var isUserStyle = (aAddon.type == "userstyle"); var isScriptish = (aAddon.type == "userscript"); var isUserScript = (aAddon.type == "user-script") || // Greasemonkey (aAddon.type == "userscript") || // Scriptish (aAddon.type == "greasemonkey-user-script"); // Greasemonkey 1.7+ var isCustomButton = (aAddon.type == "custombuttons"); var isService = (aAddon.type == "service"); var browseDirItem = doc.getElementById("AMD-browse-dir"); browseDirItem.hidden = isUserStyle || isUserScript || isCustomButton || isService; var browseFolderItem = doc.getElementById("AMD-browse-Folder"); browseFolderItem.hidden = isUserStyle || isUserScript || isCustomButton || isPlugin || isService; var copyNameItem = doc.getElementById("AMD-copy-name"); copyNameItem.tooltipText = aAddon.name; copyNameItem.className = isUserScript ? isScriptish ? "" : "greasemonkey" : ""; var copyNameVersionItem = doc.getElementById("AMD-copy-NameVersion"); copyNameVersionItem.hidden = isUserStyle || isCustomButton || isService; copyNameVersionItem.tooltipText = aAddon.name + " " + aAddon.version; copyNameVersionItem.className = isUserScript ? isScriptish ? "" : "greasemonkey" : ""; var copyIDItem = doc.getElementById("AMD-copy-id"); copyIDItem.tooltipText = "ID: " + aAddon.id; copyIDItem.className = isUserScript ? isScriptish ? "" : "greasemonkey" : ""; var copyVersionItem = doc.getElementById("AMD-copy-version"); copyVersionItem.tooltipText = aAddon.version; copyVersionItem.hidden = isUserStyle || isCustomButton || isService; copyVersionItem.className = isUserScript ? isScriptish ? "" : "greasemonkey" : ""; var opengoAMOItem = doc.getElementById("AMD-browse-goAMO"); opengoAMOItem.hidden = isUserStyle || isUserScript || isCustomButton || isPlugin || isService; var amoURL = aAddon.reviewURL ? aAddon.reviewURL.replace(/\/reviews\//, "/") : null; opengoAMOItem.tooltipText = amoURL; opengoAMOItem.hidden = !amoURL || /addons.mozilla.org/.test(aAddon.homepageURL); var opengoHomeItem = doc.getElementById("AMD-browse-goHome"); opengoHomeItem.hidden = isUserScript || isCustomButton || isPlugin; if (aAddon.homepageURL) { opengoHomeItem.tooltipText = aAddon.homepageURL; } else if (aAddon.reviewURL) { opengoHomeItem.tooltipText = amoURL; } opengoHomeItem.hidden = !(aAddon.homepageURL || aAddon.reviewURL); var opensupportItem = doc.getElementById("AMD-browse-support"); opensupportItem.hidden = isUserStyle || isUserScript || isCustomButton || isPlugin || isService; opensupportItem.tooltipText = aAddon.supportURL; opensupportItem.hidden = !aAddon.supportURL; if(isUserScript && !isScriptish){ var usoURL = ""; if (aAddon._script) { var usDownloadURL = aAddon._script._downloadURL; var usUpdateURL = aAddon._script._updateURL; if (usoRegx.test(usDownloadURL)) { usoURL = usDownloadURL; } else if (usoRegx.test(usUpdateURL)) { usoURL = usUpdateURL; } } var usoItem = doc.getElementById("AMD-go-uso"); usoItem.disabled = !usoRegx.test(usoURL); usoItem.className = isUserScript ? usoItem.disabled ? "" : "greasemonkey" : ""; usoItem.tooltipText = usoURL.replace(/source/, "show") .replace(/.\w+.js$/, ""); var fusoItem = doc.getElementById("AMD-find-uso"); fusoItem.disabled = usoRegx.test(usoURL); fusoItem.className = isUserScript ? fusoItem.disabled ? "" : "greasemonkey" : ""; fusoItem.setAttribute("find-on-uso", "http://userscripts.org/scripts/search?q=" + encodeURIComponent(aAddon.name)); } }, getPopupNode: function (aNode) { var doc = aNode.ownerDocument; return "triggerNode" in aNode.parentNode ? aNode.parentNode.triggerNode : doc.popupNode; }, getAddon: function (aId, aCallback, aEvent) { var self = this; if (this.win.gDetailView._addon) { aCallback.apply(this, [this.win.gDetailView._addon, aEvent]); return; } AddonManager.getAllAddons(function(aAddons) { for (var i = 0; i < aAddons.length; i++) { if (aAddons[i].id == aId) { aCallback.apply(self, [aAddons[i], aEvent]); return; } } }); }, //Домашняя страница goHome: function (aAddon) { var url = aAddon.homepageURL; if (!url) { if (aAddon.reviewURL) { url = aAddon.reviewURL.replace(/\/reviews\/.*$/, "/"); } else { url = "https://addons.mozilla.org/search/?q=" + encodeURIComponent(aAddon.name); } } openURL(url); }, //Страница на АМО goAMO: function (aAddon) { var sourceTracker = "/?src=external-Add-ons_Manager_Context_Menu-extension"; if (aAddon.reviewURL) { var amoURL = aAddon.reviewURL.replace(/\/reviews\//, "/") .replace(/\/(firefox|seamonkey|thunderbird|android)/, "") .replace(/\/\?src\=api/, sourceTracker); } if (/personas.mozilla.org$/.test(aAddon.id)) { amoURL = "https://addons.mozilla.org/addon/" + aAddon.id.match(/\d+/) + sourceTracker; } openURL(amoURL); }, //Страница поддержки support: function (aAddon) { openURL(aAddon.supportURL); }, //Открыть место установки browseDir: function (aAddon) { switch(aAddon.type){ case "plugin": var pathes = aAddon.pluginFullpath; for (var i = 0; i < pathes.length; i++) { this.revealPath(pathes[i]); } return; } var gecko = parseInt(Services.appinfo.platformVersion); var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile", "initWithPath"); var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append("extensions"); dir.append(aAddon.id); var fileOrDir = dir.path + (dir.exists() ? "" : ".xpi"); try { (new nsLocalFile(fileOrDir)).reveal(); } catch (ex) { var addonDir = /.xpi$/.test(fileOrDir) ? dir.parent : dir; try { if (addonDir.exists()) { addonDir.launch(); } } catch (ex) { var uri = Services.io.newFileURI(addonDir); var protSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"]. getService(Ci.nsIExternalProtocolService); protSvc.loadUrl(uri); } } }, //Открыть папку установки Folder: function (aAddon) { var gecko = parseInt(Services.appinfo.platformVersion); var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile", "initWithPath"); var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append('extensions'); dir.append(aAddon.id); if ( dir.exists() ) dir.launch(); var file = Components.classes['@mozilla.org/file/directory_service;1'] .getService(Components.interfaces.nsIProperties) .get('ProfD', Components.interfaces.nsILocalFile); file.append('extensions'); file.append( aAddon.id + '.xpi' ) if ( file.exists() ) file.launch(); return; }, //Копировать имя copyName: function (aAddon) { this.copyToClipboard(aAddon.name); }, //Копировать ID copyID: function (aAddon) { this.copyToClipboard("ID: " + aAddon.id); }, //Копировать версию copyVersion: function (aAddon) { this.copyToClipboard(aAddon.version); }, //Копировать имя и версию copyNameVersion: function (aAddon) { this.copyToClipboard(aAddon.name + " " + aAddon.version); }, //Вспомогательные функции revealPath: function(path){ var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); file.initWithPath(path); if(file.exists()) file.reveal(); }, copyToClipboard: function (aString) { Cc["@mozilla.org/widget/clipboardhelper;1"]. getService(Ci.nsIClipboardHelper).copyString(aString); } }; AMD_Helper.init(); function $C(name, attr) { var el = document.createElement(name); if (attr) Object.keys(attr).forEach(function(n) el.setAttribute(n, attr[n])); return el; } })(); |
>ORG@niZM< > 11-11-2013 13:13:58 |
Andrey_Krropotkin |
voqabuhe > 11-11-2013 13:34:31 |
>ORG@niZM< пишет
Всё работает, отличная кнопка. Може ты просто мало на"клал"? |
>ORG@niZM< > 11-11-2013 15:31:45 |
voqabuhe |
villa7 > 11-11-2013 15:55:39 |
Northtech > 11-11-2013 16:53:55 |
А нет такой кнопки, которая заменяет расширение Add To Search Bar? |
Pony_Smile_Pack > 11-11-2013 17:00:10 |
Northtech пишет
Оно и так restartless, зачем его заменять. |
Northtech > 11-11-2013 19:59:23 |
Pony_Smile_Pack пишет
А зачем заменять кнопками другие расширения? Вот для того же самого. |
>ORG@niZM< > 12-11-2013 07:13:30 |
villa7 пишет
Работает только на 24.*/25.* (ESR). На моём 17.0.10 ESR не пашет. Проверено на свежем профиле. 12-11-2013 07:17:51 |
>ORG@niZM< > 12-11-2013 13:51:14 |
okkamas_knife "Это же всё же, всё, шо нажито непосильным трудом, — всё погибло! Магнитофон импортный, пиджак замшевый…" «Иван Васильевич меняет профессию» |
voqabuhe > 26-11-2013 14:07:01 |
Andrey_Krropotkin №51
Если в заняться перетаскиванием кнопок по панелям, то после этого все пункты меню начинают дублироваться. |
1fesFFFF > 29-12-2013 11:58:49 |
Есть ли кнопа, которая показывает в полях ввода пароля сам пароль, а не точки, как это делает дополнение Show My Password ? |
bunda1 > 29-12-2013 17:55:20 |
1fesFFFF пишет
Или так: Выделить код Код:// Показать или спрятать пароль в окошке вода пароля двойным кликом мыши на странице ................................ function handleDblClick(e) { var node = e.target; if ( node.hasAttribute("typechanged") ) { node.type = "password"; node.removeAttribute("typechanged"); return; } if ( node.hasAttribute("type") && node.getAttribute("type").toLowerCase() == "password" ) { node.type = "text"; node.setAttribute("typechanged", true); } }; addEventListener("dblclick", handleDblClick, false, gBrowser ); |
VORON > 29-12-2013 18:41:41 |
1fesFFFF |
Mishania > 01-05-2014 15:08:41 |
Есть расширение MouseZoom, зажимаешь ПКМ и колесиком мышки управляешь масштабом. А кнопкой его нельзя заменить? |
VORON > 01-05-2014 15:38:43 |
Mishania |
Mishania > 01-05-2014 17:45:18 |
VORON |
Kamui > 02-05-2014 10:28:24 |
Mishania пишет
Так это к жестам - FireGestures |
Mishania > 02-05-2014 14:14:58 |
Kamui |
etoins srldu > 02-05-2014 22:14:13 |
Mishania пишет
Выделить код Код: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//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20_this%20%3D%20this%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0Avar%20bmsvc%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%0A%0Avar%20ucjsMouseGestures%20%3D%20%7B%0A%0A%20%20%20//%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20....%0A%20%20%20enableWheelGestures%3A%20true%2C%0A%20%20%20enableRockerGestures%3A%20true%2C%0A%20%20%20enablePopupGestures%3A%20true%2C%0A%0A%20%20%20_lastX%3A%200%2C%0A%20%20%20_lastY%3A%200%2C%0A%20%20%20_directionChain%3A%20%27%27%2C%0A%20%20%20_isMouseDownL%3A%20false%2C%0A%20%20%20_isMouseDownR%3A%20false%2C%0A%20%20%20_hideFireContext%3A%20false%2C%20%20%20%20//for%20windows%0A%20%20%20_shouldFireContext%3A%20false%2C%20//for%20linux%0A%20%20%20POPUP_ID%3A%20%27GesturePopup%27%2C%0A%20%20%20%0A%20%20%20//%20%u0416%u0435%u0441%u0442%u044B%20....%0A%20%20%20GESTURES%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%0A//%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%7D%2C%0A%0Ainit%3Afunction%28%29%20%7B%0A%20%20%20%20var%20self%20%3D%20this%3B%0A%20%20%20%20var%20events%20%3D%20%5B%22mousedown%22%2C%20%22mousemove%22%2C%20%22mouseup%22%2C%20%22contextmenu%22%5D%3B%0A%20%20%20%20if%20%28%20this.enableRockerGestures%20%29%20events.push%28%22draggesture%22%29%3B%0A%20%20%20%20if%20%28%20this.enableWheelGestures%20%29%20events.push%28%22DOMMouseScroll%22%29%3B%0A%20%20%20%20function%20registerEvents%28%20aAction%2C%20eventArray%20%29%20%7B%0A%20%20%20%20%20%20%20eventArray.forEach%28function%28aType%29%20%7B%20gBrowser.mPanelContainer%5BaAction%20+%20%22EventListener%22%5D%28%20aType%2C%20self%2C%20true%20%29%20%7D%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20registerEvents%28%22add%22%2C%20events%29%3B%0A%0A%20%20%20%20window.addEventListener%28%22unload%22%2C%20function%28%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20registerEvents%28%22remove%22%2Cevents%29%3B%0A%20%20%20%20%7D%2C%20false%20%29%3B%0A%20%20%20%20addDestructor%28function%28%29%20%7B%20registerEvents%28%22remove%22%2C%20events%29%20%7D%29%3B%20%0A%7D%2C%0A%0AhandleEvent%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20switch%28%20event.type%20%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%3D2%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%20this.enableRockerGestures%20%29%20%7B%0A%20%20%20%20%20%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%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._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._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._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%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%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%20%20%20%20%20%7D%0A%20%20%20%20%20%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%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%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%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%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%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%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%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%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%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%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%28%22http%3A//www.w3.org/1999/xhtml%22%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%20this.enableRockerGestures%20%26%26%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%20this.enablePopupGestures%20%26%26%20%28%20event.button%20%3D%3D%200%20%7C%7C%20event.button%20%3D%3D%201%20%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%20this.POPUP_ID%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%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%20this.POPUP_ID%20%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.enableWheelGestures%26%26this._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%20%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%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%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%0A_buildPopup%3Afunction%28%20event%2CgestureCmd%20%29%20%7B%0A%20%20%20%20if%20%28%20%21this.enablePopupGestures%20%29%20return%3B%0A%20%20%20%20var%20popup%20%3D%20document.getElementById%28%20this.POPUP_ID%20%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%20this.POPUP_ID%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%20searchSvc%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20engines%20%3D%20searchSvc.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.getService%28Ci.nsIFaviconService%29.getFaviconForPage%28%20entry.URI%20%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%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%2C%0A%20%20%7D%3B%0AucjsMouseGestures.init%28%29%3B%20%20%0A%0A%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 |
difabor > 03-05-2014 00:03:25 |
etoins srldu пишет
Не знаю почему, но у меня меняется зум, когда кручу колёсико и без правого клика |
Mishania > 03-05-2014 07:37:16 |
etoins srldu |
difabor > 04-05-2014 05:53:00 |
Как перевести на кнопку аддон MileWideBack? |
Vladik > 23-07-2014 11:12:46 |
Что-то в 31.0esr перестало работать Add-ons Manager Context Menu с третьей страницы. |
KOT040188 > 28-07-2014 23:29:37 |
Не знаю в правильную ли тему пишу, но: имею такой код инициализации кнопки: скрытый текст Выделить код Код:(function() { if (gBrowser.currentURI.spec == "about:customizing") return; var bot = BrowserOpenTab; BrowserOpenTab = function BrowserOpenTab() openUILinkIn(BROWSER_NEW_TAB_URL, "tab", { relatedToCurrent: true, inBackground: false }); addDestructor(function() BrowserOpenTab = bot); })(); Он открывает новую вкладку рядом с текущей. Можно ли его как-то изменить (не потеряв текущий функционал), чтобы рядом с текущей открывались и ссылки из внешних приложений и закладки из библиотеки по СКМ? В обоих случаях владки открываются в крайней правой позиции. Спасибо |
KOT040188 > 29-07-2014 07:45:26 |
okkamas_knife пишет
Обсалютно не годится. Мне не надо убить фишку лисы, когда она открывает вкладки по СКМ сначало рядом с текущей, а потом правее. Это поведение мне не надо менять. |
bunda1 > 29-07-2014 12:21:13 |
KOT040188 пишет
Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 08.04.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок lab == newTabLab ? setTimeout(function() gBrowser.moveTabTo( e.target, tabpos + 1 ), 50) // если восстановление вкладки : gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
KOT040188 > 29-07-2014 16:26:29 |
bunda1 |
bunda1 > 29-07-2014 19:52:07 |
KOT040188 пишет
Я проверил свой код на FF31 и и закладки из библиотеки по СКМ и ссылки "из управления дополнениями" открываются рядом с текущей |
KOT040188 > 29-07-2014 21:14:03 |
bunda1 пишет
Проверяю на виртуалке на голой 31 лисе. Поставил только custom buttons, custom tab width, no close tab buttons и super tab mode. Всё кроме custom buttons отключил, но поведение прежнее. Что делать? |
bunda1 > 29-07-2014 22:39:04 |
KOT040188 пишет
Мистика однако, может попробуй чистый профиль Localization | PortableApps.com - Portable software for USB, portable and cloud drives |
KOT040188 > 30-07-2014 00:15:04 |
Попробую завтра. Но ведь профиль в виртуалке и так почти чистый (не считая установки парочки расширений, которые я отключил) и совсем непользованый |
KOT040188 > 30-07-2014 20:37:05 |
В общем удалил на виртуалке профиль и ваша кнопка заработала как надо, но на этот раз убило фишку лисы (при открытии СКМ ссылок с одной страницы каждая новая вкладка открывается правее предыдущей) Можно ли это как-то поправить?????????????????? Дополнительно решил выяснить в чём было дело раньше. Установил те расширения список которых я приводил. Последним установил Super Tab Mode. Он то и оказался подозрительным. Поведение вашей кнопки на этот раз не нарушилось, но после установки Super Tab Mode, возник другой глюк: ссылки из "управления дополнениями" открываются по две вкладки сразу. Видимо Super Tab Mode в прошлый раз даже в выключенном состоянии влиял на поведение вкладок. Странное какое-то влияние, нестабильное. В связи с этим просьба, можно ли заменить Super Tab Mode всё той же кнопкой (добавить в ту же), а именно следующий его функционал: при закрытии вкладки фокус переходит на предыдущую использованную вкладку, а не как по умолчанию в лисе на соседнюю? Вопрос как раз по теме |
KOT040188 > 25-09-2014 18:11:38 |
Можно ли заменить Super Tab Mode кнопкой, а именно следующий его функционал: при закрытии вкладки фокус переходит на предыдущую использованную вкладку, а не как по умолчанию в лисе на соседнюю? Теперь это расширение не совместимо с последней лисой, да и глючное оно… |
bunda1 > 25-09-2014 19:50:49 |
KOT040188 пишет
Выделить код Код:const st = gBrowser.selectedTab; const tc = gBrowser.tabContainer; var pTab = st, cTab = st; function onTabSelect(e) { pTab = cTab; cTab = e.target; } function onTabClose(e) { if (e.target == cTab) gBrowser.selectedTab = pTab; } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc); |
KOT040188 > 25-09-2014 20:48:09 |
bunda1 |
2k1dmg > 25-09-2014 22:27:05 |
KOT040188 Выделить код Код:const tc = gBrowser.tabContainer; var tabs = []; function onTabSelect(e) { for (let i = 0; i < tabs.length; i++) { if (e.target != tabs[i]) continue; tabs.splice(i, 1); break; } tabs.push(e.target); } function onTabClose(e) { if (tabs.length > 1) gBrowser.selectedTab = tabs[tabs.length - 2]; tabs.splice(tabs.length - 1, 1); } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc); |
KOT040188 > 25-09-2014 22:36:27 |
2k1dmg |
2k1dmg > 26-09-2014 11:14:19 |
KOT040188 Выделить код Код:const tc = gBrowser.tabContainer; let tabs = []; function onTabSelect(e) { for (let i = 0; i < tabs.length; i++) { if (e.target.linkedPanel != tabs[i]) continue; tabs.splice(i, 1); break; } tabs.push(e.target.linkedPanel); } function onTabClose(e) { let allTabs = Array.slice(tc.childNodes); let allTabsLP = allTabs.map(function(tab) { return tab.linkedPanel; }); if (e.target == gBrowser.selectedTab && tabs.length >= 1) { let tab; let lp = tabs[tabs.length - (tabs.length == 1 ? 1 : 2)]; for (let i = 0; i < allTabsLP.length; i++) { if (lp != allTabsLP[i]) continue; tab = allTabs[i]; break; } if (tab) gBrowser.selectedTab = tab; } if (tabs.length != 0) { tabs = tabs.filter(function(tab) { return allTabsLP.indexOf(tab) != -1 ? true : false; }); tabs.splice(tabs.length - (tabs.length == 1 ? 1 : 2), 1); } } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc); |
KOT040188 > 26-09-2014 15:02:17 |
2k1dmg |
toltec > 26-09-2014 16:30:46 |
Софорумчане, А не встречал ли кто кнопку - аналог вот этого расширения: https://addons.mozilla.org/ru/firefox/a … -dl-rating? Буду благодарен за указку или за создание таковой |
KOT040188 > 27-09-2014 17:44:22 |
Осталось как-то поправить этот код: Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 08.04.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок lab == newTabLab ? setTimeout(function() gBrowser.moveTabTo( e.target, tabpos + 1 ), 50) // если восстановление вкладки : gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); что бы он не действовал в случаях: восстановление закрытой вкладки (восстанавливается не там где была, а рядом с текущей), открытие нескольких ссылок подряд СКМ. И тогда будет вообще идеально. Я уже отказался от тормозного и глючного TMP, в последней его версии полностью поломали функционал, который я сейчас заменяю этими кнопками… |
bunda1 > 27-09-2014 21:05:44 |
KOT040188 пишет
Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 27.09.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
KOT040188 > 27-09-2014 21:22:05 |
bunda1 |
bunda1 > 27-09-2014 22:36:15 |
KOT040188 пишет
Я проверил и у меня работает, но может я тебя не правильно понял, объясни подробней где должны открываться ссылки по СКМ. |
KOT040188 > 28-09-2014 01:55:59 |
bunda1 пишет
Странно как-то. Действительно требуемое мне поведение работает на страницах и вы правильно меня поняли, но вот из библиотеки открытой во вкладке (не люблю окна) не работает - это меня и спутало… Но это мелочь, как и то, что при закрытии вкладки изредка перебрасывает на соседнюю (не могу понять заканамеерность)… Всё равно спасибо |
bunda1 > 28-09-2014 02:12:57 |
KOT040188 |
KOT040188 > 28-09-2014 02:44:25 |
bunda1
Вот это бы ещё поправить. Ну и редкие переключения на соседнюю вкладку при закрытии. Но если нельзя, то нельзя… |
bunda1 > 28-09-2014 03:01:07 |
KOT040188 пишет
Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 27.09.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick|CT_onClick/.test(new Error().stack) ) return; // если открыть ссылку или закладку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
KOT040188 > 28-09-2014 14:41:08 |
bunda1 |
bunda1 > 28-09-2014 16:28:51 |
Ну так и должно быть по умолчанию, разве нет? |
KOT040188 > 28-09-2014 17:15:44 |
bunda1 пишет
Ну вообще-то да. Извиняюсь за неточное поставленную задачу. Просто уже сам путаюсь. Но в данной ситуации я хотел бы такое же поведение как и со страницами. Тоесть первая закладка открывается справа от библиотеки, вторая справа от уже открытой и т.д. |
KOT040188 > 21-10-2014 18:33:37 |
bunda1 откликнитесь! Прошу помощи. Долго не мог понять почему лиса восстанавливая вкладки при запуске зеркалирует их, то есть разворачивает их задом на перёд. Оказалось виноват этот код: Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 27.09.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); Можно это как-то поправить? И заодно открытие закладок из библиотеки (открытой во вкладке), чтобы они открывались так же как ссылки со страницы в лисе по умолчанию (ну вы в курсе про последовательность: сначала справа от текущей вкладки, затем справа от толькоо что открытой…) |
bunda1 > 21-10-2014 18:36:41 |
Завтра посмотрю. |
KOT040188 > 21-10-2014 19:19:47 |
Жду с нетерпением |
bunda1 > 22-10-2014 23:00:52 |
Я проверил на FF33 и код вкладки при запуске не зеркалирует, может я что не понял или опять конфликт с расширениями. |
KOT040188 > 23-10-2014 00:03:01 |
Блин!!!!!!!!!!! Ну сейчас попробую в виртуалке… действительно в виртуалке этот код не зеркалирует вкладки. Я в отчаянии Практически все мои расширения далеки от вкладок. Вы не знаете как сохранить список расширений, чтобы я вылажил сюда, а вы смогли посмотреть опытным глазом? Но повторюсь, если вышеприведённый код убрать вкладки востанавливаются нормально. |
Mishania > 23-10-2014 07:07:17 |
KOT040188 "CB "Список расширений"" Выделить код Код:try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {} function gatherInfo(type) { var tmp = [], map = {}, sort = []; items.forEach(function(item) { if (item.type != type) return; var name = item.name ? item.name.toUpperCase() : "UNNAMED"; name += item.id tmp.push(name); map[name] = item; }); tmp.sort(); tmp.forEach(function(name) { sort.push(map[name]) }); var list = "", enabled = 0, disabled = 0; sort.forEach(function(item) { list += (item.name || "unnamed") + " " + (item.version || ""); if (item.type != "custombuttons" && (item.userDisabled || item.appDisabled)) { list += " [ выключен ]\n"; disabled++; return; } else if (item.type == "custombuttons") { var str = item.id; var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length); var button = document.getElementById(id); if (!button) { list += " [ НЕ ВЫТАЩЕНА ]\n"; disabled++; return; } if (button.hasAttribute("initializeerror")) { list += " [ ОШИБКА ИНИЦИАЛИЗАЦИИ ]\n"; disabled++; return; } } enabled++; list += "\n"; }); return [enabled + disabled, enabled, disabled, list]; } var items = []; function extensionsCallback(extensions) { var list = ""; items = extensions; var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); list += info.vendor + " " + info.name + " " + info.version + " (build " + info.appBuildID + ")\n"; list += "User Agent: " + navigator.userAgent + "\n\n"; for(var type in AddonManager.addonTypes) { var name; var addonType = AddonManager.addonTypes[type]; if (addonType.name) name = addonType.name; else if (addonType.id == "custombuttons") name = "Кнопки"; list += "*** " + name; var ext = gatherInfo(addonType.id); list += " ( Включено: " + ext[1] + ", Отключено: " + ext[2] + ", Всего: " + ext[0] + " )\n" + ext[3] + "\n"; } var dialog = '\ <?xml-stylesheet href="chrome://global/skin/"?>\n\ <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\ xmlns:html="http://www.w3.org/1999/xhtml"\n\ id="cbbExtensionsLister"\n\ persist="width height screenX screenY"\n\ title="Список расширений"\n\ width="640" height="480"\n\ buttons="accept,extra1"\n\ buttonlabelextra1="Копировать все…"\n\ onload="init()"\n\ ondialogextra1="copy()">\n\ <script type="application/x-javascript">\n\ <![CDATA[\n\ function init () {}\n\ function copy () {\n\ var tb = document.getElementById("addonslist");\n\ window.arguments[0].write((opener.navigator.platform.indexOf("Win") != -1) ? tb.value.replace(/\\n/g, "\\r\\n") : tb.value);\n\ tb.focus ();\n\ }\n\ ]]>\n\ </script>\n\ <textbox id="addonslist" flex="1" multiline="true" />\n\ </dialog>'; dialog = "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(dialog); // var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no,minimizable", custombuttonsUtils.gClipboard); var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no", custombuttonsUtils.gClipboard); addEventListener("load", function() { var doc = win.document; var textbox = doc.querySelector("textbox"); textbox.value = list; textbox.inputField.selectionStart = textbox.inputField.selectionEnd = 0; }, true, win); } AddonManager.getAllAddons(extensionsCallback); Положить в в "код". |
voqabuhe > 23-10-2014 11:11:08 |
KOT040188 пишет
about:support |
KOT040188 > 23-10-2014 17:15:32 |
Поздравьте меня, я выяснил в виртуалке с чем конфликтует вышепреведённый код. Оказалось он конфликтует с другим кодом в той же кнопке в которой лежит. Тоесть: вышеприедённый код без остальной кнопки не приводит к глюку, кнопка без кода тоже (об этом я уже писал). Вот она. А вместе - глюк. Прошу bunda1 снова откликнутся, проверить кнопку на глюк у себя, и поомочь исправить её. Заранее спасибо. |
bunda1 > 23-10-2014 17:23:36 |
Не могу открыть |
KOT040188 > 23-10-2014 17:33:31 |
А нет там http://. Я просто не в курсе как выкладывать кнопки, положил как ссылку. Как выкладывать? скрытый текст Выделить код Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u043E%u0438%u0441%u043A%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAFhYAAAEAIAAQCAAAFgAAACgAAAAWAAAALAAAAAEAIAAAAAAA6AcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQMAAgAAAAALOAMeHIEKYR19C2USUwYsAAAAAAABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAwMLAAsAAAAAF2MIXi/wDewv+gvxKKsPmAILAAABBAAHAgcABQACAAEAAAAAAAAAAAAAAAABAQEDAQEBBQAAAAQAAAADAAAAAAAAAAAAAAAAAAEAAAAAAAABBgAHAAAAABVXCWMp7wr+Jv8F/yWmDqUAAAAAAAEAAgAAAAAAAAAAAAAAAAEBAQACAgIEAAAAAwcHBwAODg4AAQEBAAAAAAAAAAAAAAEAAAAAAAAFFQMNDzcHKQ0rBhQcbg1yI9cK9x7jBf0mohCoDzcGGQ81BygNMwYdAgoCAwAAAAACAgIHAAAAABQUFBErKyt5GxsbmQwMDCYAAAAAAAAAAwACAAMAAAAAFmgKYhunCLMXoAWuGqsFyxXGAv0SyAD/G7gF4hiiB68YowW2IKUOpQ0vCBkDAQIAAAAAARUVFQ8qKip9HBwc9icnJ/IzMzN4AAAAAAEBAQYAAQAEAAcAADGqH7FH6jb/Q941/jzPLv40wCf/M74m/znHLP8/1jD+Qt4y/0fiNf8WRg80AAAAABQUEwYwMTB8FRUV8BkZGf9FRUXDJiYmQAAAAAABAQEDAQEBAgAEAAAwgiV3W7tQylivUcZbtlLcb8Zo/3LIbf5jwVnlWLRPulitUb5OqUSuDCkHIAgFCQAuLi5wFxkX6RsbG/9KSkrDMTExQwAAAAACAgICAQEBAAAAAAEAAAAADCkHEBZBECkLMAYSK28hdnbHcPuCxoD7RJQ4vx5TFmQeRBllGTsUOgMMAQA8PDtIOjo63ikpKf9JSUi8MDAwPgAAAAADAwMIAQEBAQAAAAAAAAAAAAAAAAAAAAIDBQQHAAAAACVRH2GG0YL6k8uV/TptM/ABAAHiGxkc5R0bHskaGxphW1xarYOCgvFkZGSuHR0dLAAAAAADAwMIAQEBAQAAAAAAAAAAAAAAAAAAAAABBAEFBgYGBAAAAAArWSSCltCU/6naqfxHij63AA4ALw8TD1AYGhiuICAg/GVlZdtZWVk8ExMTAAAAAAUCAgICAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYJBgAEBgVSFC0Q2U+KSNlruGSeNHIsYQABAAAAAQAEAAEAAxcXF3grKyv1FRUVVgAAAAAAAAAEAQEBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUDBAMAAQEBrhAUEcgSGhEmAQkACggNBwwFBAUCBAQEAwQEBAIFBQUAICAgzCcnJ68LCwsaAAAAAAEBAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABwcHEAAAAM9jY2SjrKutAD46PgMGAwcBAQEBAAAAAAEAAAAEAAAAAB0dHZEkJCTTCQkJPwAAAAACAgIHAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEEAAAAAA0ODRsUFBTQlpaWpv///xLa3Nsotra1GJSUlA+YmJgMj4+PFbGxsQB+fn6GNzc31gkJCUUAAAAAAgICCAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAwAAAAMUFBQBLy8vvYWFhc3o6OhD////SP39/Uz///9A////Pf7+/jj///8TjIyMvE9PT8UaGhotAAAAAAMDAwcAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAHCAgIAFBQUH1ra2v0n5+fo////1b9/f1n/v7+Zf///1z///9JqqqqdW1tbf5aWlqDHBwcAgAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAwMDBQAAAABCQkIcfHx8toODg/+qqqqz0dHRkdbW1ojU1NSMuLi4pnh4ePqAgIDOPT09KgICAgAAAAAEAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwABAQEFAwMDAF1dXTKSkpK1cXFx9oaGhueRkZHajY2N6nl5efuVlZXNXFxcOw0NDQAAAAACAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAAAAAUHBwcARUVFFYaGhm+Li4u3jY2Nx46OjruRkZGAXFxcFgsLCwAAAAACAgICAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAAwMDAwAAAAMFBQUALS0tAFJSUgA6OjoACAgIAAAAAAMEBAQDAgICAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgADAwMDAQEBBQAAAAIAAAABAAAAAgEBAQUEBAQDAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*%20---------------------------------------------------------------------------%0A%20%20%20%20%20%u0443%u0431%u0440%u0430%u0442%u044C%20%u0444%u043E%u043A%u0443%u0441%20%u0432%20%u043F%u0430%u043D%u0435%u043B%u0438%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%0A%20%20%20---------------------------------------------------------------------------%20*/%0Avar%20focusAndSelectUrlBar%20%3D%20window.focusAndSelectUrlBar%3B%0Awindow.focusAndSelectUrlBar%20%3D%20function%28%29%20%7B%0A%20%20%20%20new%20Error%28%29.stack.indexOf%28%22%5CnopenLinkIn@chrome%3A//browser/content/utilityOverlay.js%3A%22%29%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20return%20focusAndSelectUrlBar.apply%28this%2C%20arguments%29%3B%0A%7D%3B%0A/*%20---------------------------------------------------------------------------%0A%20%20%20%20%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u043B%u044E%u0431%u0443%u044E%20%u043D%u043E%u0432%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u043E%u0442%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%0A%20%20%20---------------------------------------------------------------------------%20*/%20%0AaddEventListener%28%22TabOpen%22%2C%20function%28e%29%20%7B%0A%20%20%20var%20newTab%20%3D%20e.target%3B%0A%20%20%20var%20lab%20%3D%20newTab.label%3B%20%0A%20%20%20var%20tabpos%20%3D%20gBrowser.selectedTab._tPos%3B%0A%20%20%20var%20newTabLab%20%3D%20gBrowser.mStringBundle.getString%28%22tabs.emptyTabTitle%22%29%3B%20%20%0A%0A%20%20%20if%20%28%20tabpos%20%3D%3D%200%20%26%26%20lab%20%3D%3D%20newTabLab%20%29%20return%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0435%u0441%u043B%u0438%20%u0432%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0435%u0441%u0441%u0438%u0438%0A%20%20%20if%20%28%20new%20Error%28%29.stack.indexOf%28%22openContainer%22%29%20%21%3D%3D%20-1%20%29%20return%3B%20%20%20//%20%u0435%u0441%u043B%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0451%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%20%u0438%u0437%20%u043F%u0430%u043F%u043A%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%20%0A%20%20%20if%20%28%20/handleLinkClick/.test%28new%20Error%28%29.stack%29%20%29%20return%3B%20%20%20%20%20%20%20%20%20%20%20//%20%u0435%u0441%u043B%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0443%20%u043F%u043E%20%u0421%u041A%u041C%20%0A%0A%20%20%20gBrowser.moveTabTo%28%20e.target%2C%20tabpos%20+%201%20%29%3B%0A%20%20%20%0A%20%20%20//%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0437%u0430%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%22custombutton%22%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%0A%20%20%20if%20%28%20lab.startsWith%28%22custombutton%3A//%25%22%29%20%29%20setTimeout%28function%28%29%20gBrowser.removeTab%28%20newTab%20%29%2C%200%29%3B%0A%0A%7D%2C%20false%2C%20gBrowser.tabContainer%20%29%3B%0A/*%20---------------------------------------------------------------------------%0A%20%20%20%20%20%u0432%u043E%u0437%u0432%u0440%u0430%u0442%20%u043D%u0430%20%u043F%u0440%u0435%u0434%u044B%u0434%u0443%u0449%u0443%u044E%20%u0430%u043A%u0442%u0438%u0432%u043D%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%0A%20%20%20---------------------------------------------------------------------------%20*/%0Aconst%20tc%20%3D%20gBrowser.tabContainer%3B%0Alet%20tabs%20%3D%20%5B%5D%3B%0Afunction%20onTabSelect%28e%29%20%7B%0A%20%20%20%20for%20%28let%20i%20%3D%200%3B%20i%20%3C%20tabs.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28e.target.linkedPanel%20%21%3D%20tabs%5Bi%5D%29%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20tabs.splice%28i%2C%201%29%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20tabs.push%28e.target.linkedPanel%29%3B%0A%7D%0Afunction%20onTabClose%28e%29%20%7B%0A%20%20%20%20let%20allTabs%20%3D%20Array.slice%28tc.childNodes%29%3B%0A%20%20%20%20let%20allTabsLP%20%3D%20allTabs.map%28function%28tab%29%20%7B%0A%20%20%20%20%20%20%20%20return%20tab.linkedPanel%3B%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20if%20%28e.target%20%3D%3D%20gBrowser.selectedTab%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20tabs.length%20%3E%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20let%20tab%3B%0A%20%20%20%20%20%20%20%20let%20lp%20%3D%20tabs%5Btabs.length%20-%20%28tabs.length%20%3D%3D%201%20%3F%201%20%3A%202%29%5D%3B%0A%20%20%20%20%20%20%20%20for%20%28let%20i%20%3D%200%3B%20i%20%3C%20allTabsLP.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lp%20%21%3D%20allTabsLP%5Bi%5D%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20tab%20%3D%20allTabs%5Bi%5D%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%20%20%20%20%20%20%20%20if%20%28tab%29%0A%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20tab%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28tabs.length%20%21%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20tabs%20%3D%20tabs.filter%28function%28tab%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20allTabsLP.indexOf%28tab%29%20%21%3D%20-1%20%3F%20true%20%3A%20false%3B%0A%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20tabs.splice%28tabs.length%20-%20%28tabs.length%20%3D%3D%201%20%3F%201%20%3A%202%29%2C%201%29%3B%0A%20%20%20%20%7D%0A%7D%0AaddEventListener%28%22TabSelect%22%2C%20onTabSelect%2C%20false%2C%20tc%29%3B%0AaddEventListener%28%22TabClose%22%2C%20onTabClose%2C%20false%2C%20tc%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BloadURI%28%22javascript%3Aopen%28%27http%3A//yandex.by/yandsearch%3Ftext%3Dsite%3A%27+location.host%29%28%29%3B%22%29%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 АУ! |
difabor > 23-10-2014 22:32:15 |
KOT040188 пишет
Скорее всего Вы имеете в виду Search in Website+( Firefox ) |
KOT040188 > 23-10-2014 23:44:42 |
Я ж написал код кнопки!!!!!!!!!!!!!!!!!! bunda1 отзовитесь |
difabor > 23-10-2014 23:52:09 |
KOT040188 пишет
То, что Вы дали, мягко выражаясь, "несъедобно". |
KOT040188 > 24-10-2014 00:29:55 |
Я хотел чтобы кто-нибудь испробовал эту кнопку, дабы убедиться в том что глюк связан именно с ней. Выделить код Код:loadURI("javascript:open('http://yandex.by/yandsearch?text=site:'+location.host)();") Инициализация: скрытый текст Выделить код Код:/* --------------------------------------------------------------------------- убрать фокус в панели адреса новой вкладки --------------------------------------------------------------------------- */ var focusAndSelectUrlBar = window.focusAndSelectUrlBar; window.focusAndSelectUrlBar = function() { new Error().stack.indexOf("\nopenLinkIn@chrome://browser/content/utilityOverlay.js:") return true; return focusAndSelectUrlBar.apply(this, arguments); }; /* --------------------------------------------------------------------------- Открывать любую новую вкладку справа от текущей --------------------------------------------------------------------------- */ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); /* --------------------------------------------------------------------------- возврат на предыдущую активную вкладку --------------------------------------------------------------------------- */ const tc = gBrowser.tabContainer; let tabs = []; function onTabSelect(e) { for (let i = 0; i < tabs.length; i++) { if (e.target.linkedPanel != tabs[i]) continue; tabs.splice(i, 1); break; } tabs.push(e.target.linkedPanel); } function onTabClose(e) { let allTabs = Array.slice(tc.childNodes); let allTabsLP = allTabs.map(function(tab) { return tab.linkedPanel; }); if (e.target == gBrowser.selectedTab && tabs.length >= 1) { let tab; let lp = tabs[tabs.length - (tabs.length == 1 ? 1 : 2)]; for (let i = 0; i < allTabsLP.length; i++) { if (lp != allTabsLP[i]) continue; tab = allTabs[i]; break; } if (tab) gBrowser.selectedTab = tab; } if (tabs.length != 0) { tabs = tabs.filter(function(tab) { return allTabsLP.indexOf(tab) != -1 ? true : false; }); tabs.splice(tabs.length - (tabs.length == 1 ? 1 : 2), 1); } } addEventListener("TabSelect", onTabSelect, false, tc); addEventListener("TabClose", onTabClose, false, tc); Так пойдёт? Не знаю как по другому напечатать… С нетерпением жду ответа bunda1 |
bunda1 > 24-10-2014 11:16:57 |
KOT040188 Выделить код Код:/* --------------------------------------------------------------------------- убрать фокус в панели адреса новой вкладки --------------------------------------------------------------------------- */ var focusAndSelectUrlBar = window.focusAndSelectUrlBar; window.focusAndSelectUrlBar = function() { new Error().stack.indexOf("\nopenLinkIn@chrome://browser/content/utilityOverlay.js:") return true; return focusAndSelectUrlBar.apply(this, arguments); }; |
KOT040188 > 24-10-2014 15:37:08 |
bunda1, огромное вам спасибо за терпение. Вы были правы, в создании глюка участвуют также и расширение! Для стопроцентного воспроизведения глюка нужно это расширение и этот код: Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 27.09.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); Не знаю что за конфликт между ними но это приводит к разворачиванию вкладок при восстановление. Если у кого-нибудь будет желание проверьте у себя. bunda1, может что-нибудь посоветуете? Как быть? Расширение очень нужное… И код тоже… |
bunda1 > 24-10-2014 16:15:11 |
KOT040188 пишет
Ну я у себя просто открываю закладки в вкладке с адресом chrome://browser/content/bookmarks/bookmarksPanel.xul. |
KOT040188 > 24-10-2014 16:27:36 |
Я тоже иногда пользуюсь этим (в Bookmarks Tab не отображаются мобильные закладки), но: при перезагрузке лисы сбрасывается папка открытая в закладках, а у меня их много (и ззакладок и папок). Ещё расширение позволяет увеличить масштаб. Так что не вариант… Может можно как-то изменить код, чтобы не было конфликта? Может кто знает аналогичное расширение? Его автор похоже забросил, а у меня есть пару предложений по его изменению. |
bunda1 > 24-10-2014 19:00:06 |
У меня при перезагрузке лисы не сбрасывается. Опять наверно какое расширение чудит. Я посмотрю в чем там проблема с Bookmarks Tab |
KOT040188 > 24-10-2014 19:41:28 |
bunda1 пишет
Я извиняюсь, имел в виду chrome://browser/content/places/places.xul (невнимательно прочитал ваше сообщение), он сбрасывает папку если перезагрузить страницу. А chrome://browser/content/bookmarks/bookmarksPanel.xul мне не удобен, ибо папок много и получается их постоянно надо будет сворачивать после разворачивания, чтобы не закопаться… А ещё в Bookmarks Tab можно назначить папку закладок которая будет открываться при создании новой вкладки… |
bunda1 > 24-10-2014 20:12:46 |
Попробуй: Открывать библиотеку в вкладке и последнюю активную папку библиотеки и не будет папка сбрасываться.
Ну вот ....
|
KOT040188 > 24-10-2014 20:49:52 |
bunda1 пишет
Спасибо, добавил для удобства, но Bookmarks Tab чуточку удобнее: при перезагрузках не сбрасывается папка, а в новой вкладке показывается заранее заданная папка закладок. Разница не большая, но она есть… bunda1 пишет
Про это я знаю, но не понял к чему это сейчас. Bookmarks Tab работает и без этой настройки. |
bunda1 > 24-10-2014 22:48:46 |
KOT040188 Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 24.10.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); // если восстановление сессии if ( tabpos == 0 && (lab == newTabLab || lab == 'chrome://bookmarks/content/bookmarks.html') ) return; if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
KOT040188 > 24-10-2014 23:04:02 |
А изменения какие? Не будет глюка с разворачиванием вкладок? |
bunda1 > 24-10-2014 23:20:46 |
KOT040188 пишет
Не будет глюка с разворачиванием вкладок. |
KOT040188 > 25-10-2014 00:01:10 |
Неа, всё равно разворачивает! |
bunda1 > 25-10-2014 00:20:38 |
KOT040188 пишет
Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 24.10.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( tabpos == 0 && lab == '' ) return; // если восстановление сессии с Bookmarks Tab if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); |
KOT040188 > 25-10-2014 01:01:52 |
Спасибо! Вот теперь не разворачивает! И кстати по моему лиса стала меньше тупить при старте! Можно ли теперь сделать следующее (чтобы довести до идеального): чтобы открытие закладок из chrome://browser/content/places/places.xul происходило так же как и ссылки со страницы в лисе по умолчанию (ну вы в курсе про последовательность: сначала справа от текущей вкладки, затем справа от только что открытой и тд…) |
bunda1 > 25-10-2014 01:10:04 |
Наверно в понедельник посмотрю что можно сделать. |
KOT040188 > 25-10-2014 01:18:30 |
Я вас не тороплю |
LittleMontana > 25-10-2014 19:08:56 |
Помогите найти кнопку, которая при нажатии на неё скрывает/показывает добавленную мной через настройки панельку (там где яндекс бары, панель меню и прочее, только с названием своим) |
KOT040188 > 26-10-2014 22:51:58 |
bunda1, снова типа багрепорт. Использую группы вкладок, в некоторых из них если находится на первой слева вкладке новая вкладка открывается в конце справа, на остальных вкладках рядом. Закрыл такую группу, в другой группе где не было такого глюка он появился… |
Александр Колесников > 22-11-2014 09:00:21 |
Уважаемые знатоки, не мог бы кто модифицировать код из 135-го поста на этой странице "Открывать любую новую вкладку справа от текущей, от 24.10.2014" так, чтобы при долгом клике СКМ по ссылке она открывалась справа от текущей? скрытый текст Выделить код Код:// Открывать любую новую вкладку справа от текущей, от 24.10.2014. ................................ addEventListener("TabOpen", function(e) { var newTab = e.target; var lab = newTab.label; var tabpos = gBrowser.selectedTab._tPos; var newTabLab = gBrowser.mStringBundle.getString("tabs.emptyTabTitle"); if ( tabpos == 0 && lab == newTabLab ) return; // если восстановление сессии if ( tabpos == 0 && lab == '' ) return; // если восстановление сессии с Bookmarks Tab if ( new Error().stack.indexOf("openContainer") !== -1 ) return; // если открыть всё во вкладках из папки закладок if ( /handleLinkClick/.test(new Error().stack) ) return; // если открыть ссылку по СКМ gBrowser.moveTabTo( e.target, tabpos + 1 ); // автоматически закрывать "custombutton" вкладку if ( lab.startsWith("custombutton://%") ) setTimeout(function() gBrowser.removeTab( newTab ), 0); }, false, gBrowser.tabContainer ); Просто по СКМ ссылки у меня открываются в новых вкладках после всех вкладок в таббаре. Но иногда было бы очень хорошо открывать их сразу после текущей... Чтобы не делать лишней работы, достаточно, чтобы это поведение реализовывалось только на обычных ссылках (интернет-страничек). Но если так будет и из "Журнала" и "Закладок", то пусть, тоже хорошо. Просто для них у меня уже работает нижеприведённый код и я не знаю, не будет ли конфликтов каких-то... скрытый текст Выделить код Код://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // https://forum.mozilla-russia.org/viewtopic.php?pid=626886#p626886 // Kод даёт возможность открывать закладки средним кликом на закладке не закрывая меню закладок. Код не работает в боковой панели закладок. // Открывать закладки средним кликом в новой вкладке не закрывая меню закладок, от 16.09.2013. ................................ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (function() { const str = 'p"', rep = 'p" && !aEvent.button', obj = BookmarksEventHandler, func = obj.onClick; eval("BookmarksEventHandler.onClick = " + String.replace(func, str, rep)); addDestructor(function() obj.onClick = func); })(); ; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // https://forum.mozilla-russia.org/viewtopic.php?pid=667273#p667273 // Открывать средним кликом вкладки из Журнала (кроме "Показать весь журнал") в новой вкладке, не закрывая меню Журнал, от 6.11.2014. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (popup => { popup.checkForMiddleClick = (node, e) => { var trg = e.target; if (trg.getAttribute("disabled") == "true" || e.button != 1) return; popup.parentNode._placesView._onCommand(e); if (trg.mozMatchesSelector('#historyUndoPopup > [oncommand*="undoCloseTab"]')) { trg.classList.contains("restoreallitem") && trg.doCommand(); popup.parentNode._placesView.populateUndoSubmenu(); var menupopup = popup.querySelector('.recentlyClosedTabsMenu[disabled="true"] > menupopup'); menupopup && menupopup.hidePopup(); } else if (!trg.mozMatchesSelector("#goPopup > .bookmark-item")) closeMenus(trg); } addDestructor(() => delete popup.checkForMiddleClick); })(document.getElementById("goPopup")); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //https://forum.mozilla-russia.org/viewtopic.php?pid=607274#p607274 //Автор: Dumby, bunda1 Версия: от 05-11-2014 19:47:41 //Описание: Kод открывает библиотеку как активную вкладку рядом с текущей вкладкой и открывает в в библиотеке: //1. папку закладок которая была открыта перед закрытием библиотеки если в главном меню или в меню кнопки меню вы нажали Показать все закладки //2. Загрузки или Неподшитые закладки если в главном меню или в меню кнопки меню вы нажали эти пункты, //3. первую папку истории( Сегодня ) отсортированную по адресу если в главном меню или в меню кнопки меню вы нажали Показать весь журнал, в коде можно // отключить сортировку по адресу и указать другую папку истории для открытия. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Открывать библиотеку во вкладке и последнюю активную папку библиотеки, от 05.11.2014. ............................ (function () { var historyFolderNum = 1; // папка истории которую откроет код var sortHistoryFolder = true; // сортировать папку истории которую откроет код var command; const pn = "CB.lastUsedLibraryFolder"; const library = "chrome://browser/content/places/places.xul"; // Перехватывать открытие библиотеки и открывать её в вкладке рядом с текущей .... function libraryInTab(e) { command = e.target.getAttribute("oncommand"); if ( !/showPlacesOrganizer|DownloadsUI|DownloadsPanel/.test( command ) ) return; if ( /showPlacesOrganizer|UnfiledBookmarks/.test( command ) && e.type == 'click' ) return; e.stopPropagation(); // закрыть все вкладки библиотеки кроме первой .... var libTab = null; Array.slice( gBrowser.tabs ).forEach(function(tab) { if ( tab.linkedBrowser.currentURI.spec !== library ) return; !libTab ? libTab = tab : gBrowser.removeTab( tab ); }); // переместить или открыть библиотеку рядом с текущей вкладкой .... var selTab = gBrowser.selectedTab; if ( libTab !== selTab ) { if ( libTab && gBrowser.visibleTabs.indexOf( libTab ) == -1 ) TabView.moveTabTo( libTab, TabView._window.GroupItems._activeGroupItem.id ); libTab = libTab || gBrowser.addTab( library ); var pos = selTab._tPos + ( libTab._tPos > selTab._tPos ); gBrowser.moveTabTo( libTab, pos ); gBrowser.selectedTab = libTab; // если уже открытая библиотека была перемещена if ( !libTab.hasAttribute('busy') ) openLastUsedFolder(); } else openLastUsedFolder(); // если библиотека уже в текущей вкладке }; addEventListener("command", libraryInTab, true, window ); addEventListener("click", libraryInTab, true, document.getElementById('appmenuSecondaryPane') ); // Открывать и запоминать последнюю активную папку если библиотека открыта как вкладка .... function openLastUsedFolder( e ) { var win = e ? e.target.defaultView : content.document.defaultView; if ( win.location != library ) return; // получить нужную папку try { var value = cbu.getPrefs( pn ) } catch(e) { value = '' }; if ( /DownloadsUI|DownloadsPanel/.test( command ) ) value = 'place:transition=7&sort=4'; if ( /UnfiledBookmarks/.test( command ) ) value = 'place:folder=UNFILED_BOOKMARKS&excludeItems=1&expandQueries=0'; // закрыть меню большой кнопки и кнопки загрузок setTimeout(function() { try { document.getElementById("appmenu-popup").hidePopup(); document.getElementById("downloadsPanel").hidePopup(); } catch(e) {} }, 10 ); // открыть нужную папку используя рекурсию (function f() { if ( win.location != library ) return; try { if ( /'History'/.test( command ) ) { var doc = win.document; var view = doc.getElementById('placesList').view; if ( view ) view.selection.select( historyFolderNum ); // открыть указанную папку // сортировать папку истории по адресу if ( sortHistoryFolder && view ) { doc.getElementById('viewMenu').open = true; doc.getElementById('viewSort').open = true; doc.getElementById('viewMenu').open = false; doc.getElementById('menucol_placesContentUrl').doCommand(); } } else { win.PlacesOrganizer.location = value; win.PlacesOrganizer._places.focus(); } } catch(e) { setTimeout(function() f(), 0) }; })(); // запоминать последнюю папку при закрытии библиотеки if ( e == undefined ) return; win.addEventListener("unload", function f(e) { win.removeEventListener( e.type, f); var loc = win.PlacesOrganizer.location; /place:folder|place:sort/.test( loc ) && cbu.setPrefs( pn, loc ); }); }; addEventListener("DOMContentLoaded", openLastUsedFolder, false, gBrowser ); })(); В начале кнопки идёт код "mergeInitialization": скрытый текст Выделить код Код://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // https://github.com/Infocatcher/Custom_Buttons/blob/master/code_snippets/mergeInitialization.js // Example for safely use only one button for initialization of many "buttons" without UI (Для любителей засовывать кучу разных кодов в инициализацию одной кнопки). //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var _destructors = []; function destructor() { var args = arguments; _destructors.forEach(function(destructor) { try { destructor.apply(this, args); } catch(e) { Components.utils.reportError(e); } }, this); } if("defineProperty" in Object) { // Firefox 4+ Object.defineProperty(this, "onDestroy", { get: function() { return _destructors.length ? destructor : undefined; }, set: function(f) { _destructors.push(f); }, enumerable: true, configurable: true }); } else { this.__defineGetter__("onDestroy", function() { return _destructors.length ? destructor : undefined; }); this.__defineSetter__("onDestroy", function(f) { _destructors.push(f); }); } |
Dumby > 22-11-2014 14:35:24 |
Александр Колесников скрытый текст Выделить код Код:(() => { const delay = 500; var longMiddleClick = false, mousedownTime = 0; var handler = { handleEvent: e => e.button == 1 && handler[e.type](), mousedown: () => mousedownTime = Date.now(), mouseup: () => setTimeout(() => longMiddleClick = false, 50, longMiddleClick = Date.now() - mousedownTime > delay ) }; for(var type of ["down", "up"]) addEventListener("mouse" + type, handler); addEventListener("TabOpen", e => longMiddleClick && gBrowser.moveTabTo(e.target, gBrowser.selectedTab._tPos + 1) , false, gBrowser.tabContainer); })(); |
Александр Колесников > 22-11-2014 15:04:46 |
Dumby Спасибо, работает из на ссылках, и из Закладок\Журнала! Захотелось JS выучить, хоть я и самоучка в том, что связано с компами :-) |
manuk > 22-11-2014 19:26:40 |
Никак не получается отключить стандартное меню по ПКМ. Кусок кода: скрытый текст bClick: function(e) { if (e.button !== 0 && e.button !== 2) { return false; } if (inspector4pda.user.id) { switch (e.button) { } else { Пытался вставить скрытый текст if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ // ПКМ e.preventDefault(); |
zoomlin > 05-02-2015 11:40:38 |
Всем привет. Есть такое расширение Double click close tab. Можно его как то заменить с помощью сабжа. Конкретно из функционала интересует закрытие текущей вкладки по двойному нажатию правой кнопкой мыши внутри страницы. И еще расширение Scrollbar anywhere, позволяющее листать страницу при зажатой правой клавиши мыши. Заранее благодарю за помощь. |
bunda1 > 05-02-2015 19:56:55 |
zoomlin пишет
Выделить код Код:// Закрыть вкладку двойным правым кликом, от 05.02.2015. ................................ addEventListener("dblclick", (e)=>{ if ( e.button == 2 ) { e.preventDefault(); gBrowser.removeCurrentTab(); document.getElementById("contentAreaContextMenu").hidePopup(); } }, false, gBrowser ); 05-02-2015 20:16:12 zoomlin пишет
А вот это так просто не сделать, разве только переделать для Сustom Buttons этот код: https://github.com/ardiman/userChrome.j … grabscroll |
zoomlin > 06-02-2015 07:57:05 |
Благодарю, Закрыть вкладку двойным правым кликом работает. Еще у меня установлено расширение dblclicker(открытие ссылок в новом табе по двойному левому клику) и auto context(автоматическое открытие контекстного меню при выделении текста). Наверно их тоже можно заменить? |
HaGEN > 20-03-2015 13:51:47 |
Приветствую. HTTP Request Logger.js code Выделить код Код:Components.utils.import('resource://gre/modules/XPCOMUtils.jsm'); function HttpRequestLogger() { var httpRequestLogger = { observe: function(subject, topic, data) { if (topic == "http-on-modify-request") { var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel); var ref = httpChannel.referrer ? httpChannel.referrer.spec : "(none)"; var buffer = ref + " " + httpChannel.requestMethod + " " + httpChannel.URI.spec + "\n"; fos.write(buffer, buffer.length); } } }; var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("Desk", Components.interfaces.nsIFile); file.append("http-request-log.txt"); var fos = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); // PR_WRONLY | PR_CREATE_FILE | PR_APPEND fos.init(file, 0x02 | 0x08 | 0x10, -1, 0); var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); observerService.addObserver(httpRequestLogger, "http-on-modify-request", false); } HttpRequestLogger.prototype.classID = Components.ID('{c4a9bb50-b9b2-11e0-a4dd-0800200c9a66}'); HttpRequestLogger.prototype.classDescription = 'Http Request Logger XPCOM Component'; HttpRequestLogger.prototype.contractID = '@prekageo/HttpRequestLogger;1'; var NSGetFactory = XPCOMUtils.generateNSGetFactory([HttpRequestLogger]); кусок лога из файла Выделить код Код:(none) GET http://s3.dotua.org/fsua_items/cover/00/18/73/9/00187342.jpg (none) GET http://s1.dotua.org/fsua_items/cover/00/37/41/9/00374195.jpg http://fs.to/video/serials/fl_our/?page=2 GET http://fs.to/video/serials/i4ELKIr7MQTKe8iPEROuVgI-chastnyj-zakaz.html http://fs.to/video/serials/fl_our/?page=2 GET http://fs.to/video/serials/fl_our/?page=4 (none) GET http://fsua.dotua.org/cssmin/v957992426/default.aimg.min.css (none) GET http://fsua.dotua.org/cssmin/v245054101/theme-video.aimg.min.css (none) POST http://q77.queuev4.vk.com/im357 (none) POST http://q77.queuev4.vk.com/im357 (none) GET http://myowndesign.com.ua/mod/vk/DarkSide/upload.gif Можно ли это сделать как кнопку шобы по нажатии было ВКЛ/ВЫКЛ запись в файл? Оч. удобно при создании фильтров рекламы, изучении сайтов, скачивания видео и прочего. |
HaGEN > 20-03-2015 22:00:38 |
Приятным будет даже просто вердикт от гуру со словами: |
Dumby > 20-03-2015 22:51:35 |
HaGEN пишет
Уговорил. Сам поправь, если что не так. скрытый текст Выделить код Код: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%3EUnnamed%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5BgBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%20%7C%7C%20%28%28%29%20%3D%3E%20%7B%0A%09var%20fileName%20%3D%20%22http-request-log.txt%22%3B%0A%09var%20file%20%3D%20Services.dirsvc.get%28%22Desk%22%2C%20Ci.nsIFile%29%3B%0A%09file.append%28fileName%29%3B%0A%0A%09var%20obsId%20%3D%20%22httpRequestLogger%22%3B%0A%09var%20pn%20%3D%20%22CB.%22%20+%20obsId%20+%20%22.on%22%3B%0A%09cbu.isPref%28pn%2C%20false%29%3B%0A%09var%20pref%20%3D%20Application.prefs.get%28pn%29%3B%0A%0A%09function%20obsConstructor%28%29%20%7B%0A%09%09var%20obs%20%3D%20Application.storage.get%28obsId%2C%20null%29%3B%0A%09%09if%20%28%21obs%29%20%7B%0A%09%09%09obs%20%3D%20%7B%0A%09%09%09%09topic%3A%20%22http-on-modify-request%22%2C%0A%09%09%09%09init%3A%20function%28%29%20Services.obs.addObserver%28this%2C%20this.topic%2C%20false%29%2C%0A%09%09%09%09destroy%3A%20function%28%29%20%7B%0A%09%09%09%09%09try%20%7BServices.obs.removeObserver%28this%2C%20this.topic%29%3B%7D%0A%09%09%09%09%09catch%28ex%29%20%7BCu.reportError%28ex%29%3B%7D%0A%09%09%09%09%7D%2C%0A%09%09%09%09observe%3A%20function%28subj%29%20%7B%0A%09%09%09%09%09var%20channel%20%3D%20subj.QueryInterface%28Ci.nsIHttpChannel%29%3B%0A%09%09%09%09%09var%20ref%20%3D%20channel.referrer%20%3F%20channel.referrer.spec%20%3A%20%22%28none%29%22%3B%0A%09%09%09%09%09var%20str%3D%20ref%20+%20%22%20%22%20+%20channel.requestMethod%20+%20%22%20%22%20+%20channel.URI.spec%20+%20%22%5Cr%5Cn%22%3B%0A%09%09%09%09%09str%20%3D%20this.suc.ConvertFromUnicode%28str%29%3B%0A%09%09%09%09%09this.fos.write%28str%2C%20str.length%29%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09get%20fos%28%29%20%7B%0A%09%09%09%09%09delete%20this.fos%3B%0A%09%09%09%09%09var%20fos%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0A%09%09%09%09%09//%20PR_WRONLY%20%7C%20PR_CREATE_FILE%20%7C%20PR_APPEND%0A%09%09%09%09%09fos.init%28file%2C%20parseInt%28%220x02%22%29%20%7C%20parseInt%28%220x08%22%29%20%7C%20parseInt%28%220x10%22%29%2C%20-1%2C%200%29%3B%0A%09%09%09%09%09return%20this.fos%20%3D%20fos%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09get%20suc%28%29%20%7B%0A%09%09%09%09%09delete%20this.suc%3B%0A%09%09%09%09%09var%20suc%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%09%09%09%09%09suc.charset%20%3D%20%22utf-8%22%3B%0A%09%09%09%09%09return%20this.suc%20%3D%20suc%3B%0A%09%09%09%09%7D%0A%09%09%09%09%0A%09%09%09%7D%3B%0A%09%09%09Application.storage.set%28obsId%2C%20obs%29%3B%0A%09%09%09obs.init%28%29%3B%0A%09%09%7D%0A%09%7D%0A%09function%20obsDestructor%28reason%29%20%7B%0A%09%09if%20%28%21%22update%20delete%22.contains%28reason%29%29%20return%3B%0A%09%09var%20obs%20%3D%20Application.storage.get%28obsId%2C%20null%29%3B%0A%09%09if%20%28obs%29%20%7B%0A%09%09%09obs.destroy%28%29%3B%0A%09%09%09Application.storage.set%28obsId%2C%20null%29%3B%0A%09%09%7D%0A%09%09reason%20%3D%3D%20%22delete%22%20%26%26%20pref.reset%28%29%3B%0A%09%7D%0A%09addDestructor%28reason%20%3D%3E%20%7B%0A%09%09obsDestructor%28reason%29%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09custombuttons.palette.querySelector%28%27toolbarbutton%5Bid%3D%22%27%20+%20_id%20+%20%27%22%5D%27%29%20%26%26%20obsDestructor%28%22delete%22%29%3B%0A%09%09%7D%2C%20500%29%3B%0A%09%7D%29%3B%0A%0A%09var%20imgON%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%09function%20setState%28on%29%20%7B%0A%09%09on%20%3F%20obsConstructor%28%29%20%3A%20obsDestructor%28%22delete%22%29%3B%0A%09%09pref.value%20%3D%20on%3B%0A%09%09var%20src%20%3D%20on%20%3F%20imgON%20%3A%20self.image%3B%0A%09%09var%20en%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%09%09while%28en.hasMoreElements%28%29%29%20%7B%0A%09%09%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%09%09%09var%20btn%20%3D%20doc.getElementById%28_id%29%3B%0A%09%09%09var%20%5Bimg%5D%20%3D%20doc.getAnonymousNodes%28btn%29%3B%0A%09%09%09if%20%28img%29%20img.src%20%3D%20src%3B%0A%09%09%7D%0A%09%7D%0A%09setState%28pref.value%29%3B%0A%09self.onclick%20%3D%20e%20%3D%3E%20%7B%0A%09%09if%20%28%21e.button%29%20setState%28%21pref.value%29%3B%0A%09%09else%20if%20%28e.button%20%3D%3D%201%29%20file.exists%28%29%20%26%26%20file.launch%28%29%3B%0A%09%7D%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%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 |
HaGEN > 21-03-2015 10:05:35 |
Как жеж это прекрасно. Балагодарю Dumby ! |
xrun1 > 21-03-2015 16:00:22 |
HaGEN |
toltec > 17-04-2015 12:37:38 |
Перешел с PM24.7 на Cyberfox 37 и обнаружил, что не работает кнопка Add-ons Manager Context Menu. Кто-нибуть сможет помочь? |
foxboy > 06-06-2015 10:32:15 |
Можно ли заменить Muter CB-кнопкой |
turbot > 06-06-2015 16:23:49 |
foxboy Почему бы не обойтись вообще без кнопок и расширений? |
foxboy > 11-08-2015 02:26:12 |
Можно ли сделать кнопку для https://addons.mozilla.org/ru/firefox/addon/export-cookies/?src=api turbot пишет
Потому как портабле, а на ХР этого нет. |
turbot > 11-08-2015 04:26:50 |
foxboy пишет
Сто лет не пользовался, но на 99.999% процентов уверен, что микшер громкости в нем есть. Про кнопку из muter'а можете забыть - он с бинарниками. Да и он сам скоро отвалится. В последних ночнушках можно отключать звук кнопкой на табах (и для html5 и для 19-ой беты флеш-плеера). 11-08-2015 04:27:56 turbot пишет
Гугл подтверждает. |
foxboy > 11-08-2015 09:07:28 |
turbot пишет
Ничего он не подтверждает. Кто-то сказал, что нет микшера, я не говорил. Он есть, но он не умеет регулировать громкость приложений, всего навсего такая мелочь. В 7 есть, это да. Можно вообще подсунуть фальшивый msacm32.dll и звука не будет. Речь об отключении/включении звука с панели браузера. |
villa7 > 11-08-2015 12:31:11 |
foxboy |
turbot > 11-08-2015 15:42:00 |
foxboy пишет
А, вот как. Был неправ, извиняюсь. |
KOT040188 > 06-02-2016 22:24:59 |
Возникла безумная идея заменить два расширения. Сомневаюсь, что такое возможно, но вдруг. Расширения Gmail Notifier и GKeep Panel. Первое проверяет почту, загружает заголовки, по клику открывает почту во вкладке. Второе по сути просто загружает страницу в дочернем окне. А вдруг возможно? |
Coroner > 09-02-2016 22:41:31 |
KOT040188 пишет
Меняются на одно Simple Mail 2.86.7.1-signed.1-let-fixed , в результате при тех-же потребляемых ресурсах имеем почти полноценный почтовый клиент с уведомлением и фильтрами. |
KOT040188 > 09-02-2016 22:43:11 |
Coroner |
Крошка Ру > 14-02-2016 23:42:23 |
|
mssign > 17-02-2016 20:13:47 |
Крошка Ру пишет
Открыть страницу в другом браузере из контекстного меню( Firefox 24 + ) |
Крошка Ру > 18-02-2016 05:17:20 |
mssign, Спасибо - не заметил что обновление было Хотя с выпадающим контекстнвм меню не так удобно,но хоть что-то |
villa7 > 18-02-2016 08:53:03 |
Крошка Ру |
Крошка Ру > 27-02-2016 17:54:42 |
villa7,Спасибо - снова попробую Не вспомню почему отказался |
broker > 28-02-2016 23:24:52 |
Есть ли такая кнопка заменяющая Extended Statusbar? Очень хотелось как в Опера сем лет сидел пока хромоподобние не пошли |
bugmenot > 14-03-2016 10:35:26 |
Может ли кто-нить сделать кнопку, заменяющую расширения "load tab on select" и "open link in silent tab"? Первое расширение - если включено, то открываемые в фоне вкладки не загружают свое содержимое, пока не переключишься на нее, второе добавляет пункт в контекстное меню ссылок с тем же функционалом. |
Артик > 15-03-2016 03:45:49 |
Здравствуйте. Нуждаюсь в кнопке, которая бы полностью заменяла дополнение TabGroups Menu, включая внешний вид (если внешний вид будет навороченне то ещё лучше)). Можно добавить кончено и многие новые возможности, например вход в группу вкладок, как было в более старых версиях и тд. У кого есть такая кнопка или коды для нее? СПасибо |
turbot > 15-03-2016 04:01:57 |
bugmenot |
Артик > 15-03-2016 04:08:15 |
turbot пишет
Тогда помогите приобрести кнопку: Скрывает/показывает панель дополнений, с учётом того что перезагрузке браузера показывается последнее положение панели дополнения; 15-03-2016 04:22:35 turbot пишет
Если вы не можете или не знаете, то найдутся те, кто может и знает. Вот к тем я и обращаюсь. Если не найдутся, значит не найдутся. Скорее всего, я буду просить замены тех или иных любых дополнений, тем более, что то дополнение которое прошу я, указано в самом начале этой темы. |
turbot > 15-03-2016 04:58:43 |
Артик пишет
Для начала, в фф уже давно нет панели дополнений. И для того, чтобы что-то сделать, надо написать, от какого она дополнения. И подобная кнопка уже есть: Спрятать панель дополнений. Но в ней вам придется править селекторы на свои, поскольку #addon-bar уже нет. например, у меня так, под панель от CTR: Выделить код Код:// Спрятать панель дополнений this._handleClick =()=> cbu.setPrefs(s, !cbu.getPrefs(s)); var right = 4; // отступ справа в px var s = 'CB.hideAddonBar'; function toggleButton() { var val = cbu.getPrefs(s); document.getElementById("ctraddon_addon-bar").setAttribute('hideElements', val ); var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon"); icon.style.transform = val ? "rotate(180deg)" : ""; // перевернуть иконку self.tooltipText = val ? 'Показать панель дополнений' : 'Спрятать панель дополнений'; }; toggleButton(); gPrefService.addObserver( s, toggleButton, false ); addDestructor(function() { gPrefService.removeObserver( s, toggleButton, false ) }); // Стиль для панели дополнений ................................ var uri = makeURI('data:text/css,'+ encodeURIComponent('\ /* минимальный и прозрачный */\ #ctraddon_addon-bar {\ bottom: 0;\ margin: 0;\ border-color: transparent!important;\ width: auto;\ height: 24px!important;\ max-height: 24px!important;\ min-height: 24px!important;\ position: fixed!important;\ padding-right: 4px;\ right: ' + right + 'px;\ background: transparent !important;\ z-index: 2147483647 !important;\ }\ #ctraddon_addon-bar toolbarbutton {\ -moz-appearance:toolbarbutton!important;\ vertical-align: middle !important;\ height: 24px!important;\ max-height: 24px!important;\ min-height: 24px!important;\ max-width: 22px!important;\ }\ #ctraddon_addon-bar toolbarbutton > .toolbarbutton-icon{\ max-width: 18px!important;\ }\ #ctraddon_addon-bar dropmarker {\ width: 15px!important;\ max-width: 15px!important;\ min-width: 15px!important;\ }\ /* если открыть настройку инструментов */\ #ctraddon_addon-bar[customizing] {\ background: -moz-Dialog;\ border-radius: 7px 0 0 0;\ visibility: visible !important;\ }\ /* убираем лишние элементы, убираем кнопки при добавлении атрибута hideElements */\ #ctraddon_addon-bar-closebutton,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] label,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] hbox,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] .statusbarpanel-iconic,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] toolbarbutton-icon,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] statusbarpanel,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] toolbaritem,\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] toolbarbutton:not([id="' + _id + '"]):not([id=custombuttons-button30]),\ #ctraddon_addon-bar:not([customizing])[hideElements="true"] #UserScriptLoader-icon {\ display: none !important;\ }\ \ #ctraddon_statusbar > statusbar > statusbarpanel:not([customizing]) {\ position: relative;\ margin-right:-4px;\ margin: 0 !important;\ padding: 0 !important;\ width: auto;\ height: 24px!important;\ max-height: 24px!important;\ min-height: 24px!important;\ }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); setTimeout(()=> sss.loadAndRegisterSheet(uri, sss.USER_SHEET), 300); addDestructor(function() { sss.unregisterSheet(uri, sss.USER_SHEET) }); В поиске селекторов поможет DOM Inspector + [CB] Attributes Inspector (для разработчиков) Артик пишет
Да ради бога. Я просто пытался вам сэкономить время и силы. |
bugmenot > 15-03-2016 09:02:00 |
turbot пишет
Эти расширения мелкие, функция у каждого ровно одна, даже настроек нет. Поскольку функционал похож, но не пересекается, в одной кнопке две этих функции (по одной из каждого расширения) вполне уживутся. turbot пишет
+1 |
Xant1k > 15-03-2016 10:35:29 |
del |
Stkvsky > 26-05-2016 17:51:07 |
Помогите пожалуйста если можно достать из набора для ютуба YouTube Center |
turbot > 26-05-2016 19:10:12 |
Stakhovsky |
Stkvsky > 26-05-2016 19:18:09 |
turbot |
KOT040188 > 27-05-2016 13:51:55 |
Magic actions for youtube корректно останавливает воспроизведение для любых плееров youtube. |
Stkvsky > 27-05-2016 13:59:34 |
KOT040188 |
KOT040188 > 27-05-2016 14:06:42 |
К сожалению на AMO они расширение не держат. Не знаю почему. Ищите их сайт. Поиск рулит. |
Stkvsky > 27-05-2016 14:12:59 |
KOT040188 |
KOT040188 > 27-05-2016 14:21:12 |
Это и есть их сайт. Но что-то вместо сайта с настройками во фрейме меня перебрасывает на resource://magicactions/opt6888.html?s=68827 и показывает настройки во весь экран. Что-то у них поломалось. Но расширение пока работает корректно. Раньше они часто обновляли расширение в связи с изменениями на youtube. Теперь не знаю… Расширение у меня сто лет стоит. |
Stkvsky > 27-05-2016 14:37:09 |
KOT040188 27-05-2016 14:40:10 27-05-2016 14:44:04 27-05-2016 14:45:32 |
KOT040188 > 27-05-2016 14:47:53 |
Я знаю где это находится, но там сего несколько штук с осмысленными названиями, остальные с набором цифр… |
Stkvsky > 27-05-2016 14:49:39 |
KOT040188 |
KOT040188 > 27-05-2016 14:51:21 |
Stakhovsky пишет
Вы уж извините, но я этим заниматься не хочу Stakhovsky пишет
Да. |
rgdru > 27-05-2016 15:57:27 |
Stakhovsky |
Stkvsky > 27-05-2016 19:18:39 |
KOT040188 |
becool > 19-05-2017 19:39:04 |
Можно ли заменить эти расширения кнопками CB? |
Rag > 19-05-2017 22:59:15 |
За кнопки не знаю,а для greasemonkey есть что то подобное |
becool > 20-05-2017 08:46:01 |
Rag, хотелось бы для CB, greasemonkey не установлен... |
Rag > 20-05-2017 11:38:27 |
Этим в полне можно заменить greasemonkey.Пусть не на все 100% но всё же. |
Andrey_Krropotkin > 19-12-2017 00:30:03 |
Пора этой теме снова воскресать, так как, связи с переходом на FF57 много расширений отвалилось, а Custom Buttons стараниями наших уважаемых форумчан продолжает жить. 1. Цветная полоса загрузки в адресной строке при загрузке страниц скрытый текст Выделить код Код://Полоса загрузки в адресной строке, цвет меняется в стиле от звездочки до звездочки (function(){ var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(17,238,238,.7) 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; transition: background-size 350ms ease 0s !important; } #urlbar:not([style="background-size: 0% 100%;"]) { animation: progress-bar-stripes 2s linear infinite; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })(); 2.Подчеркивание различных частей адреса в адресной строке и переход по ним скрытый текст Выделить код Код://Подчеркивание домена (function () { if (location != "chrome://browser/content/browser.xul") return; var URLBarInput = gURLBar.mInputField; var locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.display = "none"; URLBarInput.parentNode.addEventListener("click", function () { if (URLBarInput.style.display === "none") { URLBarInput.style.display = ""; locationBar.style.display = "none"; gURLBar.select(); } }, false); URLBarInput.parentNode.addEventListener("mouseout", function () { if (document.activeElement !== gURLBar.inputField) { locationBar.style.display = "none"; URLBarInput.style.display = ""; gURLBar._urlTooltip && gURLBar._hideURLTooltip(); } }, false); URLBarInput.addEventListener("mouseover", function (event) { if (event.ctrlKey || document.activeElement === gURLBar.inputField) { return; } locationBar.parentNode.removeChild(locationBar); locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.overflow = "hidden"; locationBar.style.width = URLBarInput.clientWidth + "px"; gURLBar.value.split("?")[0].split("/").map(function (value, index, arr) { return index + 1 === arr.length ? (gURLBar.value.split("?")[1] ? (value + "?" + gURLBar.value.split("?")[1]) : value) : value; }).map(function (value, index, arr) { var sec = locationBar.appendChild(document.createElement("label")); sec.style.margin = 0; sec.value = value; if (index < arr.length - 1) sec.value = value.replace(/[^\/]$/, "$&/"); index === 0 && (sec.style.marginLeft = "1px"); if (index === 0 && /:\/$/.test(sec.value)) { sec.value += "/"; } else { sec.onmouseover = function () { this.style.textDecoration = "underline"; this.style.cursor = "pointer"; } sec.onmouseout = function () { this.style.textDecoration = ""; } sec.onclick = function (event) { if (event.button === 0) { loadURI(URLBarInput.value.split(this.value)[0] + this.value); while (this.nextSibling) { this.nextSibling.parentNode.removeChild(this.nextSibling); } event.stopPropagation(); } } URLBarInput.style.display = "none"; locationBar.style.display = ""; } }) }, false); })(); 3. Осталось найти, может кто поможет, средствами кнопок или стилями - выделение домена другим цветом в адресной строке - создание адонбара - переноса кнопки Reload в адресную строку |
sonyas75 > 19-12-2017 00:36:25 |
Andrey_Krropotkin пишет
вау! сенькью |
Viatcheslav > 19-12-2017 10:19:40 |
Andrey_Krropotkin пишет
'Classic' CSS tweaks for Firefox 57+ - внутри архива есть файл userChrome.css. Начиная со строки 355 (версия 1.5.2) описывается создание аддон-бара. Если раскомментировать строку 361, в нижней части главного окна появляется эта самая панель, сам пользоваться ей не пробовал Andrey_Krropotkin пишет
Наверное, не совсем по теме, но существует дополнение - Reload in address bar. И делает оно то, о чём Вы спрашиваете Andrey_Krropotkin пишет
Отличная замена прогрессбара Объясните, если можно, подробнее - как поменять цвет заливки? Для определённости - основной цвет Hex #80ff80, rgb(128, 255, 128). Спасибо |
Andrey_Krropotkin > 19-12-2017 13:09:24 |
Viatcheslav |
Andrey_Krropotkin > 19-12-2017 21:48:38 |
Нашел у alice0775 скрипт скрытый текст Выделить код Код:/*Initialization Code*/ var addToolbarInsideLocationBar = { init: function() { const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; Components.utils.import("resource:///modules/CustomizableUI.jsm"); //создаем toolbar let toolbar = document.createElementNS(kNSXUL, "toolbar"); toolbar.setAttribute("id", "ucjs-Locationbar-toolbar"); toolbar.setAttribute("customizable", "true"); toolbar.setAttribute("mode", "icons"); toolbar.setAttribute("iconsize", "small"); toolbar.setAttribute("context", "toolbar-context-menu"); toolbar.setAttribute("class", "toolbar-primary chromeclass-toolbar customization-target"); toolbar.setAttribute("fullscreentoolbar", "true"); toolbar.setAttribute("toolbarname", "Панель в LocationBar"); toolbar.setAttribute("toolboxid", "navigator-toolbox"); toolbar.setAttribute("hidden", "true"); setTimeout(function(){toolbar.removeAttribute("hidden");}, 0) // блокировать дублирование пункта при открытии настройки панелей if ( document.getElementById("ucjs-Locationbar-toolbar") ) return; //регистрируем toolbar.id if (CustomizableUI.getAreaType("ucjs-Locationbar-toolbar")) { } else try { CustomizableUI.registerArea("ucjs-Locationbar-toolbar", { type: CustomizableUI.TYPE_TOOLBAR, defaultPlacements: ["feed-button"] }); } catch(e) {} let ref = this.getInsertPoint(); ref.appendChild(toolbar); gURLBar.onDrop_addToolbarInsideLocationBar = gURLBar.onDrop; gURLBar.onDrop = function(event) { var toolbar = document.getElementById("ucjs-Locationbar-toolbar"); var target = event.originalTarget; while(target) { if (target == toolbar) { return; } target = target.parentNode; } gURLBar.onDrop_addToolbarInsideLocationBar(event); }; window.addEventListener("beforecustomization", this, true); // BookmarkingUI._updateCustomizationState(); }, getInsertPoint: function() { return (document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons") ); }, handleEvent: function(event) { let toolbar = document.getElementById("ucjs-Locationbar-toolbar"); switch(event.type) { case "beforecustomization": window.addEventListener("customizationending", this, false); this.placeholder = toolbar.parentNode.insertBefore(document.createElement("hbox"), toolbar); let ref = document.getElementById("nav-bar-customization-target"); toolbar.setAttribute("tooltiptext", "Toolbar inside LocationBar"); ref.parentNode.insertBefore(toolbar, ref); break; case "customizationending": window.removeEventListener("customizationending", this, false); this. placeholder.parentNode.replaceChild(toolbar, this. placeholder); toolbar.removeAttribute("tooltiptext"); break; } } }; addToolbarInsideLocationBar.init(); Особенность в том, что кнопки надо добавлять в следующем порядке: 1. Открываем вкладку "Настройка Firefox" (где находятся все значки) 2. В левой части Nav-bara появляется эта панель и на нее перетаскиваем или удаляем нужные кнопки Вот картинки скрытый текст |
Viatcheslav > 20-12-2017 00:06:16 |
Andrey_Krropotkin пишет
Да, всё верно. Я пробовал эту панель включать, но после появления кнопки на неё обычным "перетаскиванием" не переносятся - чистейшая эмуляция Andrey_Krropotkin, помогите, пожалуйста, разобраться с работой прогресс-бара. Фрагмент кода, отвечающий за стиль, насколько я понял, такой: скрытый текст Выделить код Код:background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(17,238,238,.7) 100%); background-size:0 0; За цвет отвечает параметр rgba(17,238,238, .7) - тут разобрался. А вот как отключить анимацию справа-налево (возврат шкалы в исходное положение) или сделать её полностью прозрачной - не пойму |
unter_officer > 20-12-2017 03:15:26 |
Andrey_Krropotkin пишет
Если я вас правильно понял, то посмотрите здесь: https://forum.mozilla-russia.org/viewto … 46#p748946 |
Viatcheslav > 20-12-2017 08:20:54 |
unter_officer пишет
Там такой же вариант эмуляции, а именно Andrey_Krropotkin пишет
|
Andrey_Krropotkin > 20-12-2017 08:58:25 |
Viatcheslav Я сам пока не разбирался, но вот посмотрите на статью где расписано все про linear-gradient |
mssign > 20-12-2017 09:00:18 |
Viatcheslav пишет
https://forum.mozilla-russia.org/viewtopic.php?pid=748946#p748946 |
Viatcheslav > 20-12-2017 10:27:00 |
mssign пишет
Да, прошу прощение Или свой какой-то стиль блокировал, или версия панели ещё до исправления была... Короче, на чистом userChrome.css из архива Vitaliy V. аддон-бар включается, кнопки переносятся |
Andrey_Krropotkin > 20-12-2017 10:36:09 |
ViatcheslavПопробуй этот вариант скрытый текст Выделить код Код:var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); где заливка #33FF66 0%- от какого цвета, #33FF66 100% - до какого |
Viatcheslav > 20-12-2017 10:54:14 |
Andrey_Krropotkin пишет
Вообще не работает - по краней мере, никакого прогресс-бара в адресной строке нет |
Andrey_Krropotkin > 20-12-2017 11:50:55 |
Viatcheslav Я выложил кусок кода для замены в старом коде, а не для замены всего кода скрытый текст Выделить код Код://Полоса загрузки в адресной строке (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; // transition: background-size 350ms ease 0s !important; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })(); |
Viatcheslav > 20-12-2017 13:04:34 |
Andrey_Krropotkin пишет
Семён Семёныч, а я даже и не посмотрел Andrey_Krropotkin пишет
Ну так это совсем другое дело Благодарствую премного UPDATE |
Andrey_Krropotkin > 20-12-2017 15:34:19 |
Viatcheslav Не получается. Проценты накладываются на адрес и потом висят в адресной строке. Спросите у более опытных. |
Viatcheslav > 21-12-2017 09:09:12 |
Andrey_Krropotkin пишет
Спасибо за Ваши старания и труды, в существующем варианте прогресс-бар очень даже хорош И с нюансами разберёмся |
usalex > 13-01-2018 18:28:23 |
В таких расширениях, как OmniSidebar и All-in-One Sidebar есть удобный переключатель боковой панели - несколько пикселей по левому краю окна. |
css > 27-01-2018 00:25:13 |
Есть такое расширение ImageToolbar. Очень полезное для тех, кто часто и много сохраняет изображения. Естественно, оно не работает на квантуме. Замены нет. Есть ли возможность изобразить что-то подобное с СВ? То есть, появляющиеся кнопки при наведении на картинку. Хотя бы сохранить и копировать адрес. И сохранить с открытием диалога сохранения. |
mokujin > 29-01-2018 04:02:53 |
css |
css > 29-01-2018 13:05:35 |
mokujin, спасибо, но сохранение в заранее заданные папки – не вариант. Нужен именно диалог для сохранения каждой картинки. И мне совершенно не нужны всплывающие из превьюхи полноразмеры. |
mokujin > 29-01-2018 13:21:50 |
css пишет
css пишет
- Ваш Porsche плохой, потому что не торохтит и нету прЫцепа |
css > 29-01-2018 13:33:58 |
mokujin пишет
Смысл этого? Или Вы считаете, что то, как Вы пользуетесь браузером – единственный вариант? Ок. По Вашей же аналогии: мне нужен внедорожник для сложной местности. Порш сдохнет на первом же километре. |
Dobrov > 13-02-2018 18:38:26 |
Нужна замена расширения Star-Button In Urlbar, оно показывает в строке адреса иконку-Звёздочку. При нажатии на иконку адрес добавляется в избранное и белая иконка станет жёлтой. Искал по форуму, но для строки адреса есть только [CB]Zoom, может кто-то делал такую кнопку? |
difabor > 14-02-2018 16:41:21 |
Dobrov пишет
Есть аддон Add Bookmark Here ² – Дополнения для Firefox, правда не для вебэкстенсион |
Dobrov > 15-02-2018 00:44:33 |
difabor пишет
…Сабж… зачем мне расширение, как сделать [CB] кнопку - замену Star-Button In Urlbar? |
difabor > 15-02-2018 05:27:43 |
Dobrov пишет
Ради бога, не надо - и на здоровье. |
Mishania > 21-02-2018 19:22:42 |
https://forum.mozilla-russia.org/viewtopic.php?pid=632733#p632733 |