Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№180111-11-2017 20:18:05

cookiefox
Участник
 
Группа: Members
Зарегистрирован: 10-06-2017
Сообщений: 11
UA: Firefox 35.0

Re: Обсуждение кнопок CB

Приветствую ! Ребята подскажите пожалуйста , кнопку/код , которая/й запрещает на сайте сторонние запросы исключая при этом гугл капчу, аналог third-party для adblock. Может есть кнопка замена adblock/ublock0 ?

Добавлено 11-11-2017 20:21:25
Хотелось бы еще узнать, если кнопка аналог расширений https://addons.mozilla.org/ru/firefox/addon/tile-tabs/ и панели закладок https://addons.mozilla.org/ru/firefox/a … serprofile ?

Отредактировано cookiefox (11-11-2017 20:23:48)

Отсутствует

 

№180215-11-2017 17:40:45

Mishania
Участник
 
Группа: Members
Зарегистрирован: 22-10-2011
Сообщений: 353
UA: unknown 0.0

Re: Обсуждение кнопок CB

В ESR 52 плохо работает CB Mouse Gestures+

скрытый текст
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECB%20Mouse%20Gestures+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEBAwEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAgEBAwAAAAACAQECAAAAAHdLNaSlZkbqkFY60ZNZO9aSWDrWkVY51o9VONaOVDfWjVI11oxSNdaMUDPWhkww0ZdYOupsQCykAAAAAAIBAQIAAAAAc0k1oNebe//0yrD/+djC/vjWv//418D/+Na///fWv//31r//99W///XTuv/11Lz/9tfA/u3Dqf/Jjm//Zz4qoAAAAAAAAAAAq2tL1vXMsf/w4c327di9++nStfvs1bn77Na7++zWu/vs1rv77NS5+/Tk0Pvt2L377NW4+/Ll0vbtxar/mFk61gAAAAAAAAAAl10/0Pvdxv/q07b71quB/9iuhP/VqX//06J0/9Khcf/SonL/z5pm/+7dzf/q1cH/1ah9/+zStPv22MP/hkww0AAAAAAAAAAAnF9C1vzcxv/kxaT70aBw/9mtg//euJX/6c+3/+zVv//s1sD/6tG5//r18P//////48Wo/+bHpvv22ML/i1Az1gAAAAAAAAAAnWBC1v3eyv/iwp/7ypFY/9qwiP/u3Mr/9+7k//jw6P/48Oj/9+/m//z69///////5862/+XHpvv42cT/jFE01gAAAAAAAAAAnmJE1v7hzv/fvZf7wX06/+LBof/27OP/z5dh/8mLTv/JjE//xIE+//Pl1v/05tn/zJJb/963jfv53cv/jVEz1gAAAAAAAAAAn2JE1v/i0f/dt477u28k/+PDo//47+j/w348/8qNUv/JjVH/xoZH/9+6l//VpXf/vnUw/963jvv53cv/jlM11gAAAAAAAAAAoGNF1v/j0f/duJD7u3Ao/+PDpf/48Oj/w4A//8qNU//JjFH/yYxR/8qOVP/KkFb/wX8+/922jfv63cv/j1Q21gAAAAAAAAAAoWVH1v/i0P/gwJ77w4FD/+bLsP/58uv/yo9X/9Cbaf/Pmmf/z5pn/86YZP/Qm2n/yY9Y/+G/m/v63Mr/kVU31gAAAAAAAAAAo2ZJ1v/hz//kyav7ypRf/+jRuv/58uz/0J9w/9Spfv/UqH3/1Kh9/9Wpfv/VqoD/z59v/+XJqfv53Mn/klc51gAAAAAAAAAApGhK1v/fzf/n0Lf70aR5/+3Zx//69fH/166I/9u3lP/btpP/27aT/9u2k//cuJX/1q2H/+fPtvv42sj/k1g71gAAAAAAAAAAoWZJ0P7fz//s3Mr72riZ/+bPuf/s3Mz/3L2e/97Ao//ewKP/3sCj/97Ao//ewaP/3Luf/+7cy/v428n/kFU50AAAAAAAAAAAunhY1vvTvf/u5Nv27+LU++rax/vq2MX77eDP++3fzvvt38777d/O++3fz/vt38778OLT+/Hm3Pb0zLT/p2dG1gAAAAAAAAAAflM+oOSpi//71L7//d/N/v7ey//+383//d3K//zdyv/83cn//NzJ//vcyP/72sf/+tzK/vTNt//XnH3/ckgzoAAAAAACAQECAAAAAINXQaS4d1fqomZK0aVoS9akZ0rWomZJ1qFkR9agZEbWnmNF1p1hRNacYELWl11A0apqSup4TDakAAAAAAIBAQIAAAAAAgEBAwEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAgEBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28%7B%0A%20%20%20//%20%u0416%u0435%u0441%u0442%u044B%20%u043C%u044B%u0448%u0438%20....%0A%20%20%20GESTURES%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%u0439%20................................%0A%20%20%27W-%27%3A%7Bname%3A%27%u0423%u0432%u0435%u043B%u0438%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.enlarge%28%29%20%7D%7D%2C%0A%20%20%27W+%27%3A%7Bname%3A%27%u0423%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reduce%28%29%20%7D%7D%2C%0A%20%20%27UDU%27%3A%7Bname%3A%27%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reset%28%29%20%7D%7D%2C%0A%20%20%27L%3CR%27%3A%7Bname%3A%27%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%27%2Ccmd%3Afunction%28%29%7B%20FullZoom.reset%28%29%20%7D%7D%2C%0A%20%20%27L%27%3A%7Bname%3A%27%u041D%u0430%u0437%u0430%u0434%27%2Ccmd%3Afunction%28%29%7B%20BrowserBack%28%29%20%7D%7D%2C%0A%20%20%27R%27%3A%7Bname%3A%27%u0412%u043F%u0435%u0440%u0451%u0434%27%2Ccmd%3Afunction%28%29%7B%20BrowserForward%28%29%20%7D%7D%2C%0A%20%20//%20%27DR%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%27%2Ccmd%3Afunction%28%29%7B%20gBrowser.reload%28%29%20%7D%7D%2C%0A%20%20%27L%3ER%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%27%2Ccmd%3Afunction%28%29%7B%20gBrowser.reload%28%29%20%7D%7D%2C%0A%20%20%27DR%27%3A%7Bname%3A%27%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%20%u043A%u044D%u0448%27%2Ccmd%3Afunction%28%29%7B%20BrowserReloadSkipCache%28%29%20%7D%7D%2C%0A%20%20%27U%27%3A%7Bname%3A%27%u0421%u0442%u043E%u043F%27%2Ccmd%3Afunction%28%29%7B%20BrowserStop%28%29%20%7D%7D%2C%0A%20%20%7D%2C%0A%0Ainit%3Afunction%28%29%20%7B%0A%20%20%20var%20func%20%3D%20this%3B%0A%0A%20%20%20%5B%22mousedown%22%2C%20%22mousemove%22%2C%20%22mouseup%22%2C%20%22contextmenu%22%2C%20%22draggesture%22%2C%20%22DOMMouseScroll%22%5D%0A%20%20%20%20.forEach%28%28type%29%3D%3E%20addEventListener%28type%2C%20this%2C%20true%2C%20gBrowser%29%20%29%3B%20%0A%7D%2C%0A%0AhandleEvent%3Afunction%28event%29%20%7B%0A%20%20%20%20switch%28event.type%29%20%7B%0A%20%20%20%20%20%20%20%20case%22mousedown%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._startGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.button%20%3D%3D%202%20%26%26%20this._isMouseDownL%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22L%3ER%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28event%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20event.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22L%3CR%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22mousemove%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._progressGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22mouseup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20content.xdTrailArea%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.xdTrailArea.parentNode.removeChild%28%20content.xdTrailArea%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.xdTrailArea%20%3D%20content.document.documentElement.appendChild%28document.createElementNS%28xhtmlns%2C%20%22xdTrailArea%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20event.ctrlKey%20%26%26%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22Reset%20Gesture%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%26%26%20event.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._directionChain%20%29%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._shouldFireContext%20%26%26%20%21this._hideFireContext%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._displayContextMenu%28%20event%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20event.button%20%3D%3D%200%20%26%26%20this._isMouseDownL%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%20%28event.button%20%3D%3D%200%20%7C%7C%20event.button%20%3D%3D%201%29%20%26%26%20event.target.localName%20%3D%3D%27menuitem%27%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20activeItem%20%3D%20event.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20switch%28%20popup.getAttribute%28%22gesturecommand%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22WebSearchPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20selText%20%3D%20popup.getAttribute%28%22selectedtext%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20engine%20%3D%20activeItem.engine%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21engine%20%29%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20engine.getSubmission%28%20selText%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21submission%20%29%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27searchbar%27%29.textbox.value%20%3D%20selText%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28%20submission.uri.spec%2Cnull%2Cnull%2Csubmission.postData%2Cnull%2Cfalse%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22ClosedTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20undoCloseTab%28%20activeItem.index%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22HistoryPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.webNavigation.gotoIndex%28%20activeItem.index%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%22AllTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.mTabs%5BactiveItem.index%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.hidePopup%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20document.getElementById%28%22statusbar-display%22%29.label%20%3D%20%22%22%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22popuphiding%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20popup.removeEventListener%28%22popuphiding%22%2Cthis%2Ctrue%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.documentElement.removeEventListener%28%22mouseup%22%2Cthis%2Ctrue%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%28%20popup.hasChildNodes%28%29%20%29%20popup.removeChild%28%20popup.lastChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22contextmenu%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownL%20%7C%7C%20this._isMouseDownR%20%7C%7C%20this._hideFireContext%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22DOMMouseScroll%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20this._isMouseDownR%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._shouldFireContext%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._hideFireContext%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._directionChain%20%3D%20%22W%22%20+%20%28%20event.detail%20%3E%200%20%3F%20%22+%22%20%3A%20%22-%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._stopGesture%28event%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%22draggesture%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this._isMouseDownL%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%2C%0A%0A_displayContextMenu%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20var%20evt%20%3D%20event.originalTarget.ownerDocument.createEvent%28%22MouseEvents%22%29%3B%0A%20%20%20%20evt.initMouseEvent%28%22contextmenu%22%2Ctrue%2Ctrue%2Cevent.originalTarget.defaultView%2C0%2Cevent.screenX%2Cevent.screenY%2Cevent.clientX%2Cevent.clientY%2Cfalse%2Cfalse%2Cfalse%2Cfalse%2C2%2Cnull%29%3B%0A%20%20%20%20event.originalTarget.dispatchEvent%28evt%29%3B%0A%7D%2C%0A%0A_startGesture%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20this._lastX%20%3D%20event.screenX%3B%0A%20%20%20%20this._lastY%20%3D%20event.screenY%3B%0A%20%20%20%20this._directionChain%20%3D%20%22%22%3B%0A%7D%2C%0A%0A_progressGesture%3Afunction%28%20event%20%29%20%7B%0A%20%20%20%20var%20x%20%3D%20event.screenX%2C%20y%20%3D%20event.screenY%3B%0A%20%20%20%20var%20lastX%20%3D%20this._lastX%2C%20lastY%20%3D%20this._lastY%3B%0A%20%20%20%20var%20subX%20%3D%20x-lastX%2C%20subY%3Dy-lastY%3B%0A%20%20%20%20var%20distX%20%3D%20%28%20subX%20%3E%200%20%3F%20subX%20%3A%20%28-subX%29%20%29%2C%20distY%20%3D%20%28%20subY%20%3E%200%20%3F%20subY%20%3A%20%28%20-subY%20%29%20%29%3B%0A%20%20%20%20var%20direction%3B%0A%20%20%20%20if%20%28%20distX%20%3C%2010%20%26%26%20distY%20%3C%2010%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20if%20%28%20distX%20%3E%20distY%20%29%20direction%20%3D%20subX%20%3C%200%20%3F%20%22L%22%20%3A%20%22R%22%3B%0A%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20direction%20%3D%20subY%20%3C%200%20%3F%20%22U%22%20%3A%20%22D%22%3B%0A%0A%20%20%20%20var%20dChain%20%3D%20this._directionChain%3B%0A%20%20%20%20if%20%28%20direction%20%21%3D%3D%20dChain.charAt%28%20dChain.length-1%20%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20dChain%20+%3D%20direction%3B%0A%20%20%20%20%20%20%20%20%20this._directionChain%20+%3D%20direction%3B%0A%20%20%20%20%20%20%20%20%20var%20gesture%20%3D%20this.GESTURES%5BdChain%5D%3B%0A%20%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22%u0416%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22+%20dChain%20+%20%28%20gesture%20%3F%20%27%20%28%27+%20gesture.name%20+%27%29%27%20%3A%20%27%27%20%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this._lastX%20%3D%20x%3B%0A%20%20%20%20this._lastY%20%3D%20y%3B%0A%7D%2C%0A%0A_stopGesture%3Afunction%28event%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%20dChain%20%3D%20this._directionChain%20%29%20this.GESTURES%5BdChain%5D.cmd%28%20this%2C%20event%20%29%3B%0A%20%20%20%20%20%20%20%20XULBrowserWindow.statusTextField.label%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20XULBrowserWindow.statusTextField.label%20%3D%20%22%u041D%u0435%u0438%u0437%u0432%u0435%u0441%u0442%u043D%u044B%u0439%20%u0436%u0435%u0441%u0442%20%u043C%u044B%u0448%u0438%3A%20%22%20+%20dChain%20%7D%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20XULBrowserWindow.statusTextField.label%20%3D%20%22%22%20%7D%2C%20600%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this._directionChain%20%3D%20%22%22%3B%0A%7D%2C%0A%0AshowAlert%3Afunction%28image%2C%20label%2C%20notification%29%20%7B%0A%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20.showAlertNotification%28image%2C%20label%2C%20notification%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%7D%2C%0A%0A_buildPopup%3Afunction%28event%2C%20gestureCmd%29%20%7B%0A%20%20%20%20var%20popup%20%3D%20document.getElementById%28%27GesturePopup%27%29%3B%0A%20%20%20%20if%20%28%20%21popup%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20popup%20%3D%20document.createElement%28%22popup%22%29%3B%0A%20%20%20%20%20%20%20%20%20popup.id%20%3D%20%27GesturePopup%27%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28%20popup%20%29%3B%0A%20%20%20%20popup.setAttribute%28%22gesturecommand%22%2C%20gestureCmd%20%29%3B%0A%20%20%20%20%0A%20%20%20%20switch%28%20gestureCmd%20%29%20%7B%0A%20%20%20%20%20%20%20%20case%22WebSearchPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20engines%20%3D%20Services.search.getVisibleEngines%28%7B%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20engines.length%20%3C%201%20%29%20throw%22%u041F%u043E%u0438%u0441%u043A%u043E%u0432%u044B%u0435%20%u0441%u0438%u0441%u0442%u0435%u043C%u044B%20%u043D%u0435%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u044B%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B--i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20engine.name%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20engine.iconURI%20%29%20menuitem.setAttribute%28%22src%22%2C%20engine.iconURI.spec%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.insertBefore%28%20menuitem%2C%20popup.firstChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.engine%20%3D%20engine%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20popup.setAttribute%28%22selectedtext%22%2C%20getBrowserSelection%28%29.toString%28%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22ClosedTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21gPrefService.getBoolPref%28%22browser.sessionstore.enabled%22%29%20%29%20throw%22%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u0432%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u044F%20%u0441%u0435%u0441%u0441%u0438%u0439%20%u043E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u0430%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/sessionstore%3B1%22%5D.getService%28Ci.nsISessionStore%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20ss.getClosedTabCount%28window%29%20%3D%3D0%20%29%20throw%22%u041D%u0435%u0442%20%u0432%u043E%u0441%u0441%u0442%u0430%u043D%u0430%u0432%u043B%u0438%u0432%u0430%u0435%u043C%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20%u044D%u0442%u043E%u043C%20%u043E%u043A%u043D%u0435.%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20undoItems%20%3D%20eval%28%22%28%22+ss.getClosedTabData%28window%29+%22%29%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%3D0%2C%20LEN%20%3D%20undoItems.length%3B%20i%3CLEN%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%3Dpopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2CundoItems%5Bi%5D.title%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20iconURL%20%3D%20undoItems%5Bi%5D.image%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20iconURL%20%29%20menuitem.setAttribute%28%22image%22%2C%20iconURL%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22HistoryPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20sessionHistory%20%3D%20gBrowser.webNavigation.sessionHistory%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20sessionHistory.count%3C1%20%29%20throw%22%u041D%u0435%u0442%20%u0438%u0441%u0442%u043E%u0440%u0438%u0438%20%u0432%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435.%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20curIdx%20%3D%20sessionHistory.index%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%2C%20shc%20%3D%20sessionHistory.count%3B%20i%20%3C%20shc%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20entry%20%3D%20sessionHistory.getEntryAtIndex%28i%2Cfalse%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21entry%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popup.insertBefore%28menuitem%2Cpopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2Centry.title%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20iconURL%20%3D%20Cc%5B%22@mozilla.org/browser/favicon-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Ci.nsIFaviconService%29.getFaviconForPage%28entry.URI%29.spec%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.listStyleImage%20%3D%20%22url%28%22+iconURL+%22%29%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20i%3D%3DcurIdx%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.style.listStyleImage%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22type%22%2C%22radio%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22checked%22%2C%22true%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.className%20%3D%20%22unified-nav-current%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20activeItem%20%3D%20menuitem%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.className%20%3D%20i%20%3C%20curIdx%20%3F%20%22unified-nav-back%20menuitem-iconic%22%20%3A%20%22unified-nav-forward%20menuitem-iconic%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20case%22AllTabsPopup%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tabs.length%20%3C%201%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%3D0%2C%20LEN%20%3D%20tabs.length%3B%20i%20%3C%20LEN%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20popup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20tabs%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20tab.label%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22crop%22%2C%20tab.getAttribute%28%22crop%22%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.setAttribute%28%22image%22%2C%20tab.getAttribute%28%22image%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuitem.index%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.selected%20%29%20menuitem.setAttribute%28%22style%22%2C%20%22color%3A%20red%3B%20font-weight%3A%20bold%3B%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.hasAttribute%28%27unread%27%29%20%29%20menuitem.setAttribute%28%22style%22%2C%20%22color%3A%20blue%3B%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20document.popupNode%20%3D%20null%3B%0A%20%20%20%20document.tooltipNode%20%3D%20null%3B%0A%20%20%20%20popup.addEventListener%28%22popuphiding%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20popup.openPopup%28%20null%2C%20%22%22%2C%20event.clientX%2C%20event.clientY%2C%20false%2C%20false%20%29%3B%0A%20%20%20%20document.documentElement.addEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%7D%0A%7D%29.init%28%29%3B%0A%0A%0A%0A%0A//%20%u041A%u043D%u043E%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u043E%u043C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%2C%20%u043E%u0442%2024.11.2016.%20..........................%0A%28%28%29%3D%3E%20%7B%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%20FF51%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u0443%u044E%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20var%20but%20%3D%20document.getElementById%28%27urlbar-zoom-button%27%29%3B%0A%20%20%20if%20%28but%29%20but.style.display%20%3D%20%22none%22%3B%0A%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20var%20zoomButton%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28zoomButton%2C%20urlbarIcons.lastChild%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u043E%u0441%u043B%u0435%u0434%u043D%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20addDestructor%28%28%29%3D%3E%20zoomButton.remove%28%29%29%3B%0A%20%20%20%20%20%0A%20%20%20updateZoomButton%28%29%3B%20%0A%20%20%20zoomButton.id%20%3D%20%22zoomButton%22%3B%0A%20%20%20zoomButton.style.cssText%20%3D%20%22-moz-appearance%3A%20none%3B%20border%3A%200%3B%20margin-right%3A%20-5px%3B%22%3B%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%0A%20%20%20zoomButton.tooltipText%20%3D%20%22%u041B%3A%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%5Cn%u0421%3A%20%u0415%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043D%u0430%20100%25%20%22%3B%0A%0A%20%20%20%0A%20%20%20//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u043A%u043B%u0438%u043A%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20addEventListener%28%22click%22%2C%20e%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20ZoomManager.toggleZoom%28%29%3B%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0440%u0435%u0436%u0438%u043C%20%u0438%u0437%u043C%u0438%u043D%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0435%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%0A%20%20%20%20%20%20%20%20%20%20%20cbu.isPref%28%22CB.zoom.allEvenly%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.allEvenly%22%2C%20%21cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.Percent%22%2C%20ZoomManager.zoom.toFixed%282%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20%7B%20e.preventDefault%28%29%3B%20FullZoom.reset%28%29%3B%20%7D%3B%20//%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%2C%20false%2C%20zoomButton%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20addEventListener%28%22DOMMouseScroll%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20e.detail%20%3E%200%20%3F%20FullZoom.reduce%28%29%20%3A%20FullZoom.enlarge%28%29%3B%0A%20%20%20%7D%2C%20false%2C%20zoomButton%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%0A%20%20%20//%20%u0421%u043B%u0435%u0434%u0438%u043C%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u0435%u043C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0A%20%20%20var%20str%20%3D%20%22%7B%20setTimeout%28%28%29%3D%3E%20%7B%20updateZoomButton%28%29%20%7D%2C%2050%29%3B%22%3B%0A%20%20%20var%20handleEvent%20%3D%20parseInt%28Services.appinfo.version%29%20%3E%2033%20%3F%20FullZoom.handleEvent%20%3A%20FullZoom._handleMouseScrolled%3B%0A%20%20%20var%20array%20%3D%20%5BFullZoom.reset%2C%20FullZoom.reduce%2C%20FullZoom.enlarge%2C%20ZoomManager.toggleZoom%2C%20handleEvent%5D%3B%0A%20%20%20array.forEach%28func%3D%3E%20%7B%20setTimeout%28%28%29%3D%3E%20%7B%20eval%28%20%28func.toString%28%29.replace%28%27_%27%2C%20%27.%27%29.match%28/function%20%28%5B%5E%28%5D*%29%5C%28/%29%5B1%5D%20+%20%22%20%3D%20%22%20+%20func.toString%28%29.replace%28%22%7B%22%2C%20str%29%29%20%29%7D%2C%2050%29%20%7D%29%3B%20%0A%20%20%20addDestructor%28%28%29%3D%3E%20%7B%20%0A%20%20%20%20%20%20array.forEach%28func%3D%3E%20%7B%20eval%28%20%28func.toString%28%29.replace%28%27_%27%2C%20%27.%27%29.match%28/function%20%28%5B%5E%28%5D*%29%5C%28/%29%5B1%5D%20+%20%22%20%3D%20%22%20+%20func.toString%28%29%29.replace%28str%2C%22%7B%22%29%20%29%20%7D%29%3B%20%20%0A%20%20%20%7D%29%3B%20%20%20%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u0438%20%u0438%u0437%u043C%u0435%u043D%u044F%u0442%u044C%20%u0446%u0432%u0435%u0442%20%u0438%20%u0448%u0440%u0438%u0444%u0442%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%u0430%20....%0A%20%20%20function%20updateZoomButton%28e%29%20%7B%0A%20%20%20%20%20%20zoomButton.label%20%3D%20Math.round%28ZoomManager.zoom*100%29%20+%20%22%25%22%3B%20%0A%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%20%0A%20%20%20%20%20%20%20%20%20zoomButton.style.fontWeight%20%3D%20ZoomManager.useFullZoom%20%3F%20%27%27%20%3A%20%27bold%27%3B%0A%20%20%20%20%20%20%20%20%20zoomButton.style.color%20%3D%20cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%3F%20%22red%22%20%3A%20%22%22%3B%0A%20%20%20%20%20%20%7D%2C%205%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0432%20%27about%3Aconfig%27%0A%20%20%20%20%20%20if%20%28%20e%20%3D%3D%20undefined%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28zoomButton.prefTimeout%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20zoomButton.prefTimeout%20%3D%20window.setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28%22CB.zoom.Percent%22%2C%20ZoomManager.zoom.toFixed%282%29%20%29%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20250%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20%u0423%u0441%u0442%u0430%u043D%u0430%u0432%u043B%u0438%u0432%u0430%u0442%u044C%20%u0435%u0434%u0438%u043D%u044B%u0439%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20....%0A%20%20%20addEventListener%28%22TabAttrModified%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20e.target.linkedBrowser.currentURI.spec%20%21%3D%3D%20gBrowser.currentURI.spec%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20cbu.getPrefs%28%22CB.zoom.allEvenly%22%29%20%26%26%20content.location.protocol.startsWith%28%22http%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20value%20%3D%20cbu.getPrefs%28%22CB.zoom.Percent%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20ZoomManager.zoom.toFixed%282%29%20%3D%3D%20value%20%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.markupDocumentViewer%5BZoomManager.useFullZoom%20%3F%20%27fullZoom%27%20%3A%20%27textZoom%27%5D%20%3D%20value%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28e%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%200%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%0A%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20updateZoomButton%28e%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%2C%20true%2C%20gBrowser.tabContainer%29%3B%20%20%20%0A%7D%29%28%29%3B%0A%0A%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

Жесты срабатывают через раз, грешил на мышь, но с заменой мыши проблемы не ушли. Может кто проверит на работоспособность?

Отредактировано Mishania (15-11-2017 17:52:37)

Отсутствует

 

№180316-11-2017 04:25:31

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3446
UA: Firefox 57.0

Re: Обсуждение кнопок CB

В Firefox 57 не работают кнопки, отвечающие за запуск внешних программ/батников.
Например Запуск программы( Firefox24+ ) от 28.01.2017
Или, к примеру, такой код, работающий на 55:

скрытый текст

Выделить код

Код:

/*CODE*/
var prgpath="C:\\Portable\\test.cmd";
var args = ['']; 
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(prgpath);
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, args, args.length)


Это какие-то ограничения новой версии или всё-таки запустить можно?

Отсутствует

 

№180416-11-2017 07:41:19

Mishania
Участник
 
Группа: Members
Зарегистрирован: 22-10-2011
Сообщений: 353
UA: unknown 0.0

Re: Обсуждение кнопок CB

Coroner
Научите как установить CB в 57?? Пробовал custom_buttons-0.0.5.8.9-fixed7pre, и отключал совместимость. Не завелось.

Отсутствует

 

№180516-11-2017 11:30:03

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3446
UA: Firefox 55.0

Re: Обсуждение кнопок CB

Mishania пишет:

Научите как установить CB в 57?? Пробовал custom_buttons-0.0.5.8.9-fixed7pre, и отключал совместимость. Не завелось.

У меня сейчас закладки на нужные комментарии нет, поэтому сейчас скину в личку ссылку на инструкцию "как у меня делалось".
Делал вроде с custom_buttons-0.0.5.8.9-fixed6pre, но думаю что без разницы.

Отсутствует

 

№180616-11-2017 12:13:23

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4279
UA: Firefox 56.0

Re: Обсуждение кнопок CB

Mishania пишет:

и отключал совместимость. Не завелось.

Старая распорка от совместимости более не работает, нужна новая.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№180716-11-2017 12:24:13

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3446
UA: Firefox 55.0

Re: Обсуждение кнопок CB

Infocatcher, а 6pre или 7pre — без разницы?
Я товарищу как раз ссылку давал на новую распорку, но у него 7, а у меня 6 и работает всё.

Отсутствует

 

№180816-11-2017 12:56:53

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 916
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Coroner пишет:

Или, к примеру, такой код, работающий на 55:

скрытый текст

Выделить код

Код:

/*CODE*/
var prgpath="C:\\Portable\\test.cmd";
var args = ['']; 
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(prgpath);
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, args, args.length)


nsILocalFile выпилен в Firefox 57

Если для кнопки не планируется устанавливать её ещё и на лису древнее чем Firefox 14,
то просто замени nsILocalFile на nsIFile

А если такая вероятность имеется, то пиши что-то типа
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile || Components.interfaces.nsIFile);

Отсутствует

 

№180916-11-2017 12:58:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4279
UA: Firefox 56.0

Re: Обсуждение кнопок CB

В Firefox 57 должны работать обе версии, без визуальных отличий.
В свежих Nightly – только custom_buttons-0.0.5.8.9-fixed7pre.xpi.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№181016-11-2017 13:23:00

Coroner
Участник
 
Группа: Members
Зарегистрирован: 29-10-2012
Сообщений: 3446
UA: Firefox 55.0

Re: Обсуждение кнопок CB

Dumby, спасибо, добрый человек :beer: Первый вариант работает, второй не пробовал, но и не понадобится!
Infocatcher, спасибо :beer: , вопрос решился, на 57 работают обе версии, на свежих Nightly — действительно нужно custom_buttons-0.0.5.8.9-fixed7pre.xpi

Отсутствует

 

№181119-11-2017 22:19:19

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: Firefox 57.0

Re: Обсуждение кнопок CB

"Переключаться на левую вкладку после закрытии текущей вкладки" посмотрите ато мозиловцы совсем все поломали:cry:.

скрытый текст

Выделить код

Код:

// Переключаться на левую вкладку после закрытии текущей вкладки,  от 22.08.2013. ................................
 function tabCloseHandler(e) {
    var tab = e.target;
    if ( tab == gBrowser.mCurrentTab ) { 
         if ( !gBrowser.visibleTabs.length ) gBrowser.addTab("about:blank");
         else             
              if ( !tab.hasAttribute('first-visible-tab') ) { gBrowser.mTabContainer.advanceSelectedTab(-1,true) }; 
         }
 }
 addEventListener("TabClose", tabCloseHandler, true, gBrowser.tabContainer );

Отредактировано broker (22-11-2017 16:15:33)

Отсутствует

 

№181222-11-2017 00:45:40

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

Народ, нельзя ничего исправить?:cry: или тема умерла?:(

Отсутствует

 

№181322-11-2017 11:52:55

Gladius333
Забанен
 
Группа: Members
Зарегистрирован: 11-02-2017
Сообщений: 92
UA: Firefox 52.0

Re: Обсуждение кнопок CB

broker пишет:

Народ, нельзя ничего исправить?:cry: или тема умерла?:(

Попробуй обновить кнопку: forum.mozilla-russia.org/viewtopic.php? … 40#p493040

A так да, мало кто ответит) тема при смерти.
Здесь хоть кто то ответит: forum.mozilla-russia.org/viewtopic.php? … 81#p748081

Отредактировано Gladius333 (22-11-2017 11:55:15)

Отсутствует

 

№181422-11-2017 16:17:12

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

Gladius333
Спасибо, заработало я не обновлял ее давно сам виноват.

Отсутствует

 

№181525-11-2017 13:25:25

drage2
Забанен
 
Группа: Members
Откуда: Донецк
Зарегистрирован: 23-11-2017
Сообщений: 392
UA: Firefox 56.0

Re: Обсуждение кнопок CB

Copy the text of the link ,тако веб.аддонство есть в FF57/ А, кноп можно? , у Sm надо...Она веб.аддоны не берет.

Отсутствует

 

№181627-11-2017 18:14:25

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 574
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Есть несколько отвалившихся кнопок.
Может кто поправит

скрытый текст

Выделить код

Код:


// Кнопка для управления масштабом страницы в адресной строке, от 24.11.2016. ..........................................................................
(()=> {   
   // Удалить из адресной строки FF51 стандартную кнопку масштаба ....
   var but = document.getElementById('urlbar-zoom-button');
   if (but) but.style.display = "none";
         
   // Создать в адресной строке кнопку масштаба ....
   var zoomButton = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки
   addDestructor(()=> zoomButton.remove());
         
   updateZoomButton(); 
   zoomButton.id = "zoomButton";
   zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -6px;"; // Css стиль для кнопки масштаба
   zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% ";

   
   // Отслеживать клики на кнопке масштаба ....           
   addEventListener("click", e=> {                  
      if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изменения масштаба
      
      if ( e.button == 1 ) { // единый масштаб для всех страниц
           cbu.isPref("CB.zoom.allEvenly", false);
           cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") );
           cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) );
                
           updateZoomButton();
           }

      if ( e.button == 2 ) { e.preventDefault(); FullZoom.reset(); }; // сбросить масштаб
               
   }, false, zoomButton);

         
   // Менять масштаб колесиком мыши на кнопке масштаба ....
   addEventListener("DOMMouseScroll", e=> {
      e.detail > 0 ? FullZoom.enlarge() : FullZoom.reduce();
   }, false, zoomButton);
           
 
   // Следим за изменением масштаба и запускаем обновление кнопки ....
   var str = "{ setTimeout(()=> { updateZoomButton() }, 50);";
   var handleEvent = parseInt(Services.appinfo.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled;
   var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent];
   array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) )}, 50) }); 
   addDestructor(()=> { 
      array.forEach(func=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ) });  
   });   
   
   
   // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба ....
   function updateZoomButton(e) {
      zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; 
      setTimeout(()=> {  
         zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold';
         zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : "";
      }, 5);
      
      // запомнить текущий масштаб в 'about:config'
      if ( e == undefined ) { 
           try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {};
           zoomButton.prefTimeout = window.setTimeout(()=> {
              cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) )  
           }, 250);
           }     
   };
     
     
   // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' ....
   addEventListener("TabAttrModified", e=> {
      if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return;
             
      if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) {
           var value = cbu.getPrefs("CB.zoom.Percent");
           if ( ZoomManager.zoom.toFixed(2) == value ) return;

           setTimeout(()=> { 
              gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value;
              updateZoomButton(e);   
           }, 0); 
           }      
      else 
           updateZoomButton(e);
                 
   }, true, gBrowser.tabContainer);   
})();




// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 05.06.2015. ...........................................................
((contextMenu) => {
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Поиск изображения в ...");
  menu.setAttribute("class", "menu-iconic");
  menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADTUlEQVQ4ja2TX2xTZRjGv62xg4lpUoRME+e/YcYWxRS3BEEDF0SLtIvA2RpDx+lKTqTr2c7Xc77v/U47twPRYVyMGqlothEaiLCOcWGWUIgaySALZpmRsnVubGNs4IClsGwsJkBeL8QlGvXK5/r5vTfv7yHk/45lWa7W1tbDx48dH+nqOnkrkUhgPB6fampquiBE9H0AKPxH0DCMlalU6vzA4CBmMhns6+vD7u5uTCQS9/bv/xAbGt5DIUwEEAsAUP8XWNdjT/f0nMv29vZiW1v7uCwHbnq9FQ+kSh9u9b6Na8vWoWtt+X2v13stHFYn/jgEghBCSCgUWtbZ2TWVTHYOVVZWpRv37us/23PuwWcHDmLj3mbc4avGVSUutC11Yvn6TfdaPv6kZcuWrT9yDiOUiiIihGDRaMMXO6tl6/r0zI25+QX8uuMEyrv34A5fNZa9ugmXP/EsErsD7csex9m5ecyMTDRv3vzGpwAgSJ2m+c/8cN7ff3Hwt+lbWZy7u4BHjiXxRdc6XFXiWoSJ3YHPF7+Md2bn8af0IPanh9rD4fBGEtL1Dae+PfvdpV/G8eeBIbwzO48z2dtY/FIZ2pY6F2Fid2D8yzYcvjyO6aGx+6fPfN9sAHgIY6zA984uJf7VofbM6EQ2PZDByalfcXTsCm6v8uOKJ5/DNa9swAMHW3H0yiQOX74619HR2Q5gfkAplBJJKrVzrq0OBAO7K7ZXfdR2+MiJi5eGrw6PTeD0zSxOXZvGGzO3cWzy+t2T35y6oGqRo7puxHWTbwtFYk8tfoJzvtqIxTy7gkEuVfk+3+mvObqnNpJSNeN0fYSn/H45WVdXfwgAWkzeEGAac9Fg0PmnfbmWx8oHgEJOY+WmaXpNzoNCRHXBRZMQ0X0mY41cCAYA1Yyar9UrUCjL8pKHKmEOISRHVd15QRp0apr2TAQia3QdXmeMvWkYUMG5uQ0MeIsxc70VMV+wKHUqivLI343OJYTkbpTlJYqiOFiIFVBKi/SwWayregmltFRQWmQxVuD3+x8lJGn7t03lEEJy3W41T/FY+YoCjoCqrjDeNVbW1tYur6mpeUySJPvD3n8mhxBis0olu+p253kUT76iKPmSJdklSbIRQsjv4dqcl7QFgvMAAAAASUVORK5CYII=");
  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Bing', 'https://www.bing.com/s/a/bing_p.ico', 'http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='],
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     gBrowser.selectedTab = gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
  
})(document.getElementById("contentAreaContextMenu") );



// CB code 2 link (кликабельные custombutton ссылки)....................................................................................................
addEventListener(
    "DOMContentLoaded",
    function(e) {
        var doc = e.target;
        var win = doc.defaultView;
        if(win != win.top) // Ignore frames
            return;

if (doc.location.host=="forum.mozilla-russia.org"){
var boxes = [];
var pres = doc.getElementsByTagName("pre");

 for(var i = 0, l = pres.length; i < l; ++i) {
        var pre = pres[i];
        if(pre.parentNode.parentNode.parentNode.className == "codebox")
            boxes.push(pre);
    }
for(var i = 0, l = boxes.length; i < l; ++i) {
        var box = boxes[i];
        if(box.hasAttribute("data-highlight-js-parsed"))
            continue;
        box.setAttribute("data-highlight-js-parsed", "true");

        // Special "codes"
        var tc = box.textContent;
        if(
            /^custombutton:\/\/\S+%3C\/custombutton%3E\s*$/.test(tc)
            || /^data:[\w-]+\/[\w-]+;base64,\S+\s*$/.test(tc)
        ) {
            tc = tc.replace(/\s+$/, "");
            var a = doc.createElement("a");
            a.href = tc;

            var icon;
            if(/^data:image\//.test(tc))
                icon = tc;
            else if(
                /^custombutton:\/\//.test(tc)
                && /%3Cimage%3E%3C%21%5BCDATA%5B(data%3A\S+)%5D%5D%3E%3C\/image%3E/.test(tc)
            )
                try { icon = decodeURIComponent(RegExp.$1); } catch(e) {}
            if(icon) {
                var img = doc.createElement("img");
                img.src = icon;
                img.alt = "";
                var s = img.style;
                s.marginRight = "4px";
                s.verticalAlign = "middle";
                a.appendChild(img);
            }

            a.appendChild(doc.createTextNode(tc));
            var s = a.style;
            s.background = "none";
            s.margin = s.padding = 0;

            box.innerHTML = "";
            box.appendChild(a);
            continue;
        }
    }

  }
},
    true,
    document.getElementById("appcontent")
);



// Добавлять новые СВ кнопки справа от этой кнопки ......................................................................................................
this._handleClick =()=> cbu.setPrefs(s, !cbu.getPrefs(s));


var observer = {
   observe: button=> {
      if ( !cbu.getPrefs(s) ) return;
      var toolbar = self.parentNode;
      toolbar.insertBefore(button, self.nextSibling);
      custombuttons.persistCurrentSets(toolbar.id, _id, button.id);

      if ( parseInt(Services.appinfo.version) < 43 ) return;

      function observer(subject, topic, data) {
         setTimeout(()=> Services.ww.unregisterNotification(observer), 500);
         subject.close();
      };
      Services.ww.registerNotification(observer);      
    }
};
var notificationPrefix = custombuttons.notificationPrefix + "installButton";
Services.obs.addObserver(observer, notificationPrefix, false);
addDestructor(()=> Services.obs.removeObserver(observer, notificationPrefix) );


var s = "CB.newButtonAtRightFromCurrent";
function toggleImage() self.style.filter = cbu.getPrefs(s) ? '' : 'grayscale(1)';  
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


Отсутствует

 

№181727-11-2017 21:32:20

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4780
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Ultima2m пишет:

Есть несколько отвалившихся кнопок.
Может кто поправит

Выделить код

Код:

// Кнопка для управления масштабом страницы в адресной строке, от 27.11.2017. ..........................
(()=> {
   // Удалить из адресной строки FF51 стандартную кнопку масштаба ....
   var but = document.getElementById('urlbar-zoom-button');
   if (but) but.style.display = "none";
   
   // Создать в адресной строке кнопку масштаба ....userContext-icons  page-action-buttons
   var zoomButton = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57
   urlbarIcons.insertBefore(zoomButton, urlbarIcons.lastChild); // перед последней кнопкой адресной строки
   addDestructor(()=> zoomButton.remove());
     
   updateZoomButton(); 
   zoomButton.id = "zoomButton";
   zoomButton.setAttribute("context", "event.stopPropagation()");
   zoomButton.style.cssText = "-moz-appearance: none; border: 0; margin-right: -1px;"; // Css стиль для кнопки масштаба   
   zoomButton.tooltipText = "Л: Менять масштаб страницы или только текста\nС: Единый масштаб для всех страниц \nП: Сбросить масштаб на 100% ";

   
   // Отслеживать клики на кнопке масштаба ....           
   addEventListener("click", e=> {                  
      if ( e.button == 0 ) ZoomManager.toggleZoom(); // переключить режим изминения масштаба
      
      if ( e.button == 1 ) { // единый масштаб для всех страниц
           cbu.isPref("CB.zoom.allEvenly", false);
           cbu.setPrefs("CB.zoom.allEvenly", !cbu.getPrefs("CB.zoom.allEvenly") );
           cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) );
                
           updateZoomButton();
           }

      if ( e.button == 2 ) FullZoom.reset(); // сбросить масштаб
               
   }, false, zoomButton);

         
   // Менять масштаб колесиком мыши на кнопке масштаба ....
   addEventListener("DOMMouseScroll", e=> {
      e.detail > 0 ? FullZoom.reduce() : FullZoom.enlarge();
   }, false, zoomButton);
           
 
   // Следим за изменением масштаба и запускаем обновление кнопки ....
   var str = "{ setTimeout(()=> { updateZoomButton() }, 50);";
   var handleEvent = parseInt(Services.appinfo.version) > 33 ? FullZoom.handleEvent : FullZoom._handleMouseScrolled;
   var array = [FullZoom.reset, FullZoom.reduce, FullZoom.enlarge, ZoomManager.toggleZoom, handleEvent];
   array.forEach(func=> { setTimeout(()=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString().replace("{", str)) )}, 50) }); 
   addDestructor(()=> { 
      array.forEach(func=> { eval( (func.toString().replace('_', '.').match(/function ([^(]*)\(/)[1] + " = " + func.toString()).replace(str,"{") ) });  
   });   
   
   
   // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба ....
   function updateZoomButton(e) {
      zoomButton.label = Math.round(ZoomManager.zoom*100) + "%"; 
      setTimeout(()=> {  
         zoomButton.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold';
         zoomButton.style.color = cbu.getPrefs("CB.zoom.allEvenly") ? "red" : "";
      }, 5);
      
      // запомнить текущий масштаб в 'about:config'
      if ( e == undefined ) { 
           try { window.clearTimeout(zoomButton.prefTimeout) } catch(e) {};
           zoomButton.prefTimeout = window.setTimeout(()=> {
              cbu.setPrefs("CB.zoom.Percent", ZoomManager.zoom.toFixed(2) )  
           }, 250);
           }     
   };
     
     
   // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' ....
   addEventListener("TabAttrModified", e=> {
      if ( e.target.linkedBrowser.currentURI.spec !== gBrowser.currentURI.spec ) return;
             
      if ( cbu.getPrefs("CB.zoom.allEvenly") && content.location.protocol.startsWith("http") ) {
           var value = cbu.getPrefs("CB.zoom.Percent");
           if ( ZoomManager.zoom.toFixed(2) == value ) return;

           setTimeout(()=> { 
              gBrowser.markupDocumentViewer[ZoomManager.useFullZoom ? 'fullZoom' : 'textZoom'] = value;
              updateZoomButton(e);   
           }, 0); 
           }      
      else 
           updateZoomButton(e);
                 
   }, true, gBrowser.tabContainer);   
})();



// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 05.06.2015. ...........................................................
((contextMenu) => {
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Поиск изображения в ...");
  menu.setAttribute("class", "menu-iconic");
  menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADTUlEQVQ4ja2TX2xTZRjGv62xg4lpUoRME+e/YcYWxRS3BEEDF0SLtIvA2RpDx+lKTqTr2c7Xc77v/U47twPRYVyMGqlothEaiLCOcWGWUIgaySALZpmRsnVubGNs4IClsGwsJkBeL8QlGvXK5/r5vTfv7yHk/45lWa7W1tbDx48dH+nqOnkrkUhgPB6fampquiBE9H0AKPxH0DCMlalU6vzA4CBmMhns6+vD7u5uTCQS9/bv/xAbGt5DIUwEEAsAUP8XWNdjT/f0nMv29vZiW1v7uCwHbnq9FQ+kSh9u9b6Na8vWoWtt+X2v13stHFYn/jgEghBCSCgUWtbZ2TWVTHYOVVZWpRv37us/23PuwWcHDmLj3mbc4avGVSUutC11Yvn6TfdaPv6kZcuWrT9yDiOUiiIihGDRaMMXO6tl6/r0zI25+QX8uuMEyrv34A5fNZa9ugmXP/EsErsD7csex9m5ecyMTDRv3vzGpwAgSJ2m+c/8cN7ff3Hwt+lbWZy7u4BHjiXxRdc6XFXiWoSJ3YHPF7+Md2bn8af0IPanh9rD4fBGEtL1Dae+PfvdpV/G8eeBIbwzO48z2dtY/FIZ2pY6F2Fid2D8yzYcvjyO6aGx+6fPfN9sAHgIY6zA984uJf7VofbM6EQ2PZDByalfcXTsCm6v8uOKJ5/DNa9swAMHW3H0yiQOX74619HR2Q5gfkAplBJJKrVzrq0OBAO7K7ZXfdR2+MiJi5eGrw6PTeD0zSxOXZvGGzO3cWzy+t2T35y6oGqRo7puxHWTbwtFYk8tfoJzvtqIxTy7gkEuVfk+3+mvObqnNpJSNeN0fYSn/H45WVdXfwgAWkzeEGAac9Fg0PmnfbmWx8oHgEJOY+WmaXpNzoNCRHXBRZMQ0X0mY41cCAYA1Yyar9UrUCjL8pKHKmEOISRHVd15QRp0apr2TAQia3QdXmeMvWkYUMG5uQ0MeIsxc70VMV+wKHUqivLI343OJYTkbpTlJYqiOFiIFVBKi/SwWayregmltFRQWmQxVuD3+x8lJGn7t03lEEJy3W41T/FY+YoCjoCqrjDeNVbW1tYur6mpeUySJPvD3n8mhxBis0olu+p253kUT76iKPmSJdklSbIRQsjv4dqcl7QFgvMAAAAASUVORK5CYII=");
  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Bing', 'https://www.bing.com/s/a/bing_p.ico', 'http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='],
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     gBrowser.selectedTab = gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
  
})(document.getElementById("contentAreaContextMenu") );



// CB code 2 link (кликабельные custombutton ссылки)....................................................................................................
addEventListener(
    "DOMContentLoaded",
    function(e) {
        var doc = e.target;
        var win = doc.defaultView;
        if(win != win.top) // Ignore frames
            return;

if (doc.location.host=="forum.mozilla-russia.org"){
var boxes = [];
var pres = doc.getElementsByTagName("pre");

 for(var i = 0, l = pres.length; i < l; ++i) {
        var pre = pres[i];
        if(pre.parentNode.parentNode.parentNode.className == "codebox")
            boxes.push(pre);
    }
for(var i = 0, l = boxes.length; i < l; ++i) {
        var box = boxes[i];
        if(box.hasAttribute("data-highlight-js-parsed"))
            continue;
        box.setAttribute("data-highlight-js-parsed", "true");

        // Special "codes"
        var tc = box.textContent;
        if(
            /^custombutton:\/\/\S+%3C\/custombutton%3E\s*$/.test(tc)
            || /^data:[\w-]+\/[\w-]+;base64,\S+\s*$/.test(tc)
        ) {
            tc = tc.replace(/\s+$/, "");
            var a = doc.createElement("a");
            a.href = tc;

            var icon;
            if(/^data:image\//.test(tc))
                icon = tc;
            else if(
                /^custombutton:\/\//.test(tc)
                && /%3Cimage%3E%3C%21%5BCDATA%5B(data%3A\S+)%5D%5D%3E%3C\/image%3E/.test(tc)
            )
                try { icon = decodeURIComponent(RegExp.$1); } catch(e) {}
            if(icon) {
                var img = doc.createElement("img");
                img.src = icon;
                img.alt = "";
                var s = img.style;
                s.marginRight = "4px";
                s.verticalAlign = "middle";
                a.appendChild(img);
            }

            a.appendChild(doc.createTextNode(tc));
            var s = a.style;
            s.background = "none";
            s.margin = s.padding = 0;

            box.innerHTML = "";
            box.appendChild(a);
            continue;
        }
    }

  }
},
    true,
    document.getElementById("appcontent")
);



// Добавлять новые СВ кнопки справа от этой кнопки ......................................................................................................
this._handleClick =()=> cbu.setPrefs(s, !cbu.getPrefs(s));


var observer = {
   observe: button=> {
      if ( !cbu.getPrefs(s) ) return;
      var toolbar = self.parentNode;
      toolbar.insertBefore(button, self.nextSibling);
      custombuttons.persistCurrentSets(toolbar.id, _id, button.id);

      if ( parseInt(Services.appinfo.version) < 43 ) return;

      function observer(subject, topic, data) {
         setTimeout(()=> Services.ww.unregisterNotification(observer), 500);
         subject.close();
      };
      Services.ww.registerNotification(observer);      
    }
};
var notificationPrefix = custombuttons.notificationPrefix + "installButton";
Services.obs.addObserver(observer, notificationPrefix, false);
addDestructor(()=> Services.obs.removeObserver(observer, notificationPrefix) );


var s = "CB.newButtonAtRightFromCurrent";
function toggleImage() self.style.filter = cbu.getPrefs(s) ? '' : 'grayscale(1)';  
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


Отсутствует

 

№181828-11-2017 01:30:18

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 367
UA: Firefox 57.0

Re: Обсуждение кнопок CB

здрасти. в связи с возвратом на ФФ и почти полного допиливания этого субъекта появилось парочку вопросов. Уважаемые мастера, никак не могу заставить функционировать Save( Firefox 24 + ) от 07.03.2017. Конкретно - не могу сохранять ярлыки страниц, в смысле значки сайтов. при этом иконки и выделенный текст прекрасно сохраняются. это у меня руки кривые опять или же можно что-то подправить в коде? спс заранее :blush:

Отредактировано sonyas75 (28-11-2017 01:31:34)

Отсутствует

 

№181928-11-2017 01:51:10

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

sonyas75
Подтверждаю не работает данный пункт меню.

Отсутствует

 

№182028-11-2017 14:51:50

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 916
UA: Firefox 52.0

Re: Обсуждение кнопок CB

broker пишет:

"Переключаться на левую вкладку после закрытии текущей вкладки" посмотрите ато мозиловцы совсем все поломали:cry:.

скрытый текст

Выделить код

Код:

// Переключаться на левую вкладку после закрытии текущей вкладки,  от 22.08.2013. ................................
 function tabCloseHandler(e) {
    var tab = e.target;
    if ( tab == gBrowser.mCurrentTab ) { 
         if ( !gBrowser.visibleTabs.length ) gBrowser.addTab("about:blank");
         else             
              if ( !tab.hasAttribute('first-visible-tab') ) { gBrowser.mTabContainer.advanceSelectedTab(-1,true) }; 
         }
 }
 addEventListener("TabClose", tabCloseHandler, true, gBrowser.tabContainer );


Ну, можно попробовать приглядеться
как себя поведёт такой, например, код

скрытый текст

Выделить код

Код:

((tabs, flag) => {
    if (!tabs) return;
    addEventListener("TabSelect", () => flag = new Error().stack.includes(
        "\n_blurTab@chrome://browser/content/tabbrowser.xml:"
    ), false, tabs);
    addEventListener("TabClose", ({target: tab}) => {
        if (flag) while((tab = tab.previousSibling)) {
            if (tab.hidden || tab.closing) continue;
            if (!tab.selected) gBrowser.selectedTab = tab;
            break;
        }
    }, false, tabs);
})(gBrowser.tabContainer);

Отсутствует

 

№182128-11-2017 20:16:26

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 225
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Поигрался с главным меню в Firefox 57. Добавил новое меню "Папки" в главное меню

скрытый текст

Выделить код

Код:

// Добавить новый пункт "Папки" в главном меню от 28.11.2017. ......................

(function() {
var info1="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAkAAAAPAAAAFgAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABYAAAAQAAAACgAAAAUAAAAOAAAAdAAAAH0AAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAAB9AAAAeAAAABAAAAAGKa3W/ymt1v8prdb/Ka3W/ymt1v8prdb/Ka3W/ymt1v8prdb/Ka3W/ymt1v8prdb/Ka3W/wAAAH0AAAAWAAAABymt1v947f7/g+7+/47w/v+V8f7/mvH+/5zy/v+a8f7/lfH+/47w/v+D7v7/eO3+/ymt1v8AAACCAAAAGQAAAAcprdb/cez+/3zu/v+G7/7/jvD+/5Lw/v+U8f7/kvD+/47w/v+G7/7/fO7+/3Hs/v8prdb/AAAAggAAABkAAAAHKa3W/2jr/v9y7P7/e+3+/4Hu/v+G7/7/h+/+/4bv/v+B7v7/e+3+/3Ls/v9o6/7/Ka3W/wAAAIIAAAAZAAAABymt1v9b6f7/ZOr+/2vr/v9x7P7/de3+/3bt/v917f7/cez+/2vr/v9k6v7/W+n+/ymt1v8AAACCAAAAGQAAAAcprdb/S+f+/1Lo/v9Z6f7/Xer+/2Dq/v9h6v7/YOr+/13q/v9Z6f7/Uuj+/0vn/v8prdb/AAAAggAAABkAAAAGKa3W/2Dp/f9l6v3/aer9/23r/v9u6/3/b+z+/27r/f9t6/7/aer9/2Xq/f9g6f3/Ka3W/wAAAH0AAAAWAAAABSmt1v9/7f3/ge7+/4Pu/f+F7v3/he7+/4bu/f+F7v7/he79/4Pu/f+B7v7/f+39/ymt1v8AAAB0AAAADwAAAAMprdb/pPL9/6Xy/v+m8v3/p/P+/6fz/v8prdb/Ka3W/ymt1v8prdb/Ka3W/ymt1v8prdb/AAAADgAAAAkAAAABAAAABCmt1v/Q+P7/0Pj+/9D4/v8prdb/AAAAFQAAAA0AAAAIAAAABgAAAAYAAAAGAAAABQAAAAQAAAADAAAAAAAAAAEAAAAEKa3W/ymt1v8prdb/AAAADwAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AADAfwAA//8AAA==";
var info2="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjVJivzgAAACwElEQVQ4T7VUX0hTcRRWCV+0i5lRiRhqRbCEULSZ/5qa021ddd1td3Nuu9P5Z+ZmuimSGRVWD4H1EpFPIT1IEPQYBtWLEaXMHqSyh9CiOVqmoj2eft9tDnMJ9dCFH+d+3/nOdw/n/La4uP/9fPiydJid/E0n56+/yYp2RwwSYJCUnDKTtCeTOC51KmIIHh9I3dYUQre316QsLr0QeD9fAJylyCOVzkiIwOCR9/oHDMAxZugEJty+A+vph3IpLT37SWBuoUBZUUuCvZ0QgcEjz+3NXPcNDOlZXcpvZozIqak3Dh49XkbVDRYqrNBQoap2tuaMlcwtXYQIDB55RWEpaepNA6wuK6arz+HVKqHRMaERGknf5CKt0U4awRI9wOCRN1gdjz+FVyu3dhPdTnBprc7sbJ8VbG102mhdHBt/OBxe/dGKCCzYWsnS0vEGupht/tpO6sz+gwo6VlJJvEUiXrTT3Xv3Ly18XSli+XhEYPA6UZJ10HNcmrxNuTO85OTmk84skYnNw9HlJ53RSs9eBtQslxjRJAKDRx466LNZXaSzeNmoXK2dPsUL1NDoJLu7hxqamkmU2rojop2IwODlPNNBX16tmd7cUUZoed2IWcwvht0uj29O6vJRBW8I1+jFvmu37mgRgR1nfeTy+N8Fv620Q486ZpQRHToDOyYDb5X5xaqnpmY3dfYPkeTxk97mIrXBKkdg8CZnB+UVn5TvGatL2Lq5I0Uq9ZUSNU9Obx85Os9Rz+DlqQ7/IPUP3yBEYPCS108nqjRUqdX34/5tNeJGx8btZWrtUp1oI1dn90Roec1gd3vp/PURNhcvAYNHHrqxB49EZpQccyE/hpaVz1+87r55e3Rk457wZhv1XrxKiBgqeOQnXwU80G/7w2XCXewoNq4FL4jTdWITIW5sB/ng9zXuX/5SotuM2c4fXH4C3BQJxGxDNfsAAAAASUVORK5CYII=";
var info3="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25JREFUeNosU1toHFUY/s6ZM7szuzs72e4t1zVGrZEoRBOQUo1W0QpSKIKXBymKmPrgQ9EKaV4EH4w+CH2Qgn0Q8fbSSrFQ8RJtaQm1thVrSwJtitnGbDbJZm+zO/eZ48zggZ/znfNfz3++n3DOceu1/EkAc/d9sXV18uDxycGVP9/sS3WmLuemCsE9XMddcW2nDI5TUkr+Kry78tl0uIH8H4CHhyN3nv9QU4uvfKp+PnLthgbt5HZkVK21ceG3RSzfXMPkP9//fED54QPHNBdCHf1IEl4NQWbEx1zpzGzoHGLb9rDVdVHrOLDAkOwrIG63MHtAe9aW0vPqUPalKEBCEZ6kqhBlyj+sInUvi7Bp+ci9sAPfjWehcwKiSAAT4Q7fhfGXxyTdpMfzY4VemkyTCTFFfaZm4No+PJ3Cs4DHd+2I5BEV2NBcOIIIW5Dw43UVudEiMgOyamnOEZrKkP644tMordEGNzlss4jcc2/gwsU61r/dRKvtYbtiwA8qWFy20Wq5GJjIwtWMPSye9NOgXuRvWwTCWCnCTFyEGAe2VuvgnSY6lQo8X8DVJQo5sKcZCZbujTImO3H4gOA38Nd5HbVvrsCNR5+Cw4PvQz53HowJIKYG2xMw3KOjJ11H0zDg2S6jgarTWHPgBNkffExGXvGhKMA7hRlQScbRzhzmkl/D6nThGl08MXgHaNRhlzfAYkRn1MKv1WV7f2GAIaVS5EoxFAnB2cQxJCUXbV/G3/Nn4d39NMR2GQfHl2BVbWxfqwcM868zFzhhNqy96zeZ3LczhtKEgtYax2a1i3LZQ72pYyY7g9ftE9i3T0dWsNC81UT5Ng0qLP5CTu9FAjpZSLD4+OijEmKSAMsIxBRx+VIL6FWQIF2UCg6Gh+MwAlKt39YCksntnmz+/pA1uhnjb7UN6zT+4IXSAxIU1UfQXOx+Kg5GTDgmgRsE1DY86NRBXXPNpZr29j31ZjWi3Yvz/NKhh8j0Tss+Ztxw+9UYQyYdtJcScJGAMgLPc1AzOBoG9DMr/qH9JR4NVfiEaDWsIcmudvbobutoKo3BbJonaIyDhEpOYYPamxVsi7TnPTErn8rEV/UowEgiMsHC/E/o3fUM3h1i/UGfdkscUyLQF85LwOx/LUp+92P83CerbmX5y48xfXgWawFr/xNgANPvgmYH0Mg8AAAAAElFTkSuQmCC";
var info4="chrome://global/skin/dirListing/folder.png";   
var info5="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==";

//Добавить подменю "Папки"
    var menuItem = document.createElement("panelview");
    menuItem.setAttribute("id", "appMenu-Folders");               
    menuItem.setAttribute("title", "Папки");
    menuItem.setAttribute("class", "PanelUI-subView");
    var it = document.getElementById("PanelUI-bookmarkingTools");
    it.parentNode.insertBefore(menuItem, it);  
//Добавить новый пункт "Папки" в главном меню  
    var menuItem1 = document.createElement("toolbarbutton");
    menuItem1.setAttribute("id", "Folders-menu");               
    menuItem1.setAttribute("label", "Папки");
    menuItem1.setAttribute("closemenu", "none");
    menuItem1.setAttribute("class", "subviewbutton subviewbutton-nav");
    menuItem1.setAttribute("image", info1 );
    menuItem1.setAttribute("oncommand", "PanelUI.showSubView('appMenu-Folders', this)");   
    var it = document.getElementById("appMenu-more-button");
    it.parentNode.insertBefore(menuItem1, it);
//Добавить пункты подменю "Папки"  
    var menuItem2 = document.createElement("toolbarbutton");
    menuItem2.setAttribute("id", "Folders2");
    menuItem2.setAttribute("label", "Текущий профиль");
    menuItem2.setAttribute("class", "subviewbutton");
    menuItem2.setAttribute("image", info2);
    menuItem2.addEventListener("command", Folders2, false);
    menuItem.insertBefore(menuItem2, null);
    
    var menuItem3 = document.createElement("toolbarbutton");
    menuItem3.setAttribute("id", "Folders3");
    menuItem3.setAttribute("label", "Папка Firefox");
    menuItem3.setAttribute("class", "subviewbutton");
    menuItem3.setAttribute("image", info3);
    menuItem3.addEventListener("command", Folders3, false);
    menuItem.insertBefore(menuItem3, null);
    
    var menuItem4 = document.createElement("toolbarbutton");
    menuItem4.setAttribute("id", "Folders4");
    menuItem4.setAttribute("label", "Папка Chrome");
    menuItem4.setAttribute("class", "subviewbutton");
    menuItem4.setAttribute("image", info4);
    menuItem4.addEventListener("command", Folders4, false);
    menuItem.insertBefore(menuItem4, null);
 
    var menuItem5 = document.createElement("toolbarbutton");
    menuItem5.setAttribute("id", "Folders5");
    menuItem5.setAttribute("label", "Папка Extensions");
    menuItem5.setAttribute("class", "subviewbutton");
    menuItem5.setAttribute("image", info5);
    menuItem5.addEventListener("command", Folders5, false);
    menuItem.insertBefore(menuItem5, null);
 
//----------Текущий профиль------------   
function Folders2(){
var file = Components.classes["@mozilla.org/file/directory_service;1"]
                 .getService(Components.interfaces.nsIProperties)
                 .get("ProfD", Components.interfaces.nsIFile);
    file.launch();  
}

 //----------Папка Firefox------------
function Folders3(){
var file = Components.classes["@mozilla.org/file/directory_service;1"]
                 .getService(Components.interfaces.nsIProperties)
                 .get("GreD", Components.interfaces.nsIFile);
    file.launch();   
}

//----------Папка Chrome------------
function Folders4(){
 var file = Components.classes["@mozilla.org/file/directory_service;1"]
                 .getService(Components.interfaces.nsIProperties)
                 .get("ProfD", Components.interfaces.nsIFile);
    file.append("chrome");
    file.launch();   
}

//-----------Папка Extensions-------------
function Folders5(){
var file = Components.classes["@mozilla.org/file/directory_service;1"]
                 .getService(Components.interfaces.nsIProperties)
                 .get("ProfD", Components.interfaces.nsIFile);
    file.append("extensions");
    file.launch();       
}

 })();


Вопрос к знающим людям. Как можно сократить код? Или как по другому добавлять в главное меню - новые пункты с подменю?

Отсутствует

 

№182229-11-2017 01:30:31

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

Dumby
Кнопка работает но есть одно но, после закрытия текущей вкладки, грузится левая и правая одновременно но фокус на левой.

Отсутствует

 

№182329-11-2017 14:18:23

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 247
UA: Firefox 57.0

Re: Обсуждение кнопок CB

About: (Firefox24+) от 13.01.2015

При нажатии ПКМ по этой кнопке происходит наложение контекстного меню расширения Custom Buttons и самой кнопки (на скриншоте видно). bunda1, посмотрите, пожалуйста - может, чего можно подправить. Версия Сustom Buttons 0.0.5.8.9-fixed5-signed

http://images.vfl.ru/ii/1511955622/08ff64b9/19615824_s.png

Отредактировано Viatcheslav (29-11-2017 14:40:50)

Отсутствует

 

№182429-11-2017 15:16:49

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4780
UA: Firefox 24.0

Re: Обсуждение кнопок CB

Viatcheslav пишет:

При нажатии ПКМ по этой кнопке происходит наложение контекстного меню расширения Custom Buttons и самой кнопки (на скриншоте видно). bunda1, посмотрите, пожалуйста - может, чего можно подправить. Версия Сustom Buttons 0.0.5.8.9-fixed5-signed

About

Отсутствует

 

№182529-11-2017 16:26:43

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 139
UA: Firefox 48.0

Re: Обсуждение кнопок CB

На FF57 перестали работать:
Экспорт/импорт закладок в HTML-файл
Кодировать изображение или текстовой файл в base64
Save snapshot to html

Если возможно, то поправьте пожалуйста.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]