я то наивный думал что хоть с сайдбаром у них одинаково..
Не-а, там как раз полно отличий, из-за этого даже некий xSidebar есть:
http://xsidebar.mozdev.org/
https://addons.mozilla.org/seamonkey/addon/xsidebar/
http://forums.mozillazine.org/viewtopic … 8&t=568392
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Если возможно,
добавить возможность авто-закрытия боковой панели:
если нет изменений - панель закрывается.
если есть, то не закрывается.
было бы еще лучше )
Отредактировано firepox (30-07-2014 19:13:02)
Отсутствует
добавить возможность авто-закрытия боковой панели:
если нет изменений - панель закрывается.
если есть, то не закрывается.
Все-таки есть там код для проверки без боковой панели.
// See chrome://updatescan/content/autoscan.js and chrome://updatescan/content/updatescan.js // Like USc_autoscan._check(), but check all items like USc_updatescan.scanButtonClick() var me = USc_autoscan; me.scan = new USc_scanner(); me.numChanges = 0; if(me.scan.addItems(USc_places.getRootFolderId(), false /*autoScan*/) > 0) { me.scan.start( me._scanChanged, function onFinished() { me._scanFinished(); if(me.numChanges) { toggleSidebar("viewUpdateScanSidebar", true); } else { var str = document.getElementById("updatescanStrings"); window.openDialog( "chrome://updatescan/content/alert.xul", "alert:alert", "chrome,dialog=yes,titlebar=no,popup=yes", str.getString("statusNoChanges") ); } }, me._scanProgress, me._encodingChanged ); }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
а можно в последнем варианте убрать сообщение, чтобы если нет изменений - ничего и не происходило.
Добавлено 30-07-2014 21:07:50
извините, сам понял как сделать.
Отредактировано firepox (30-07-2014 21:07:50)
Отсутствует
Можно ли сделать кнопку, которая по длинному левому клику на вкладку в таббаре делала бы перезагрузку (reload, refresh) этой вкладки, а по короткому, как обычно - делала бы эту вкладку активной (как сейчас)?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Можно ли сделать кнопку, которая по длинному левому клику на вкладку в таббаре делала бы перезагрузку (reload, refresh) этой вкладки, а по короткому, как обычно - делала бы эту вкладку активной (как сейчас)?
(function f() { const tabbrowser = gBrowser.mTabContainer; addEventListener("click", function(e) { if ( e.button || e.target.nodeName !== "tab" || (Date.now() - f.mouseDownTime) < 600 ) return; BrowserReload(); }, true, tabbrowser ); addEventListener("mousedown", function() f.mouseDownTime = Date.now(), true, tabbrowser ); })();
или:
function tabLongPress(e) { if ( e.button || e.target.nodeName !== "tab" ) return; if ( e.type == "mousedown" ) tabLongPress.time = Date.now(), e.stopPropagation(); else Date.now() - tabLongPress.time > 600 ? gBrowser.reloadTab(e.target) : gBrowser.selectedTab = e.target; }; ["click", "mousedown"].forEach(function(type) addEventListener(type, tabLongPress, true, gBrowser.mTabContainer ));
Отредактировано bunda1 (16-08-2014 21:56:24)
Отсутствует
а можно ?
у меня сейчас вот такой код работает
//Активизировать вкладку наведением курсора...................... var tab_hover={ event:null, tid:null, onLoad: function() { gBrowser.tabContainer.addEventListener("mouseout", tab_hover.onMouseOut, false); gBrowser.tabContainer.addEventListener("mouseover", tab_hover.onMouseOver, false); }, onUnload: function() { gBrowser.tabContainer.removeEventListener("mouseover", tab_hover.onMouseOver, false); gBrowser.tabContainer.removeEventListener("mouseout", tab_hover.onMouseOut, false); }, onMouseOver: function(event) { tab_hover.event=event.target; tab_hover.tid=setTimeout( function(){ gBrowser.selectedTab=tab_hover.event; } , 450); }, onMouseOut: function() { clearTimeout(tab_hover.tid); } }; if (!this.tab_hoverRun) tab_hover.onLoad(); this.tab_hoverRun = true;
можно в него добавить код по короткому левому клику на вкладку в таббаре делала бы перезагрузку (reload, refresh) этой вкладки? спс заранее
Отредактировано sonyas75 (16-08-2014 21:43:52)
Отсутствует
можно в него добавить код по короткому левому клику на вкладку в таббаре делала бы перезагрузку (reload, refresh) этой вкладки? спс заранее
Добавлять не надо, будет работать вместе с твоим кодом:
addEventListener("click", function(e) { if ( e.button == 0 && e.target.nodeName == "tab" ) BrowserReload(); }, true, gBrowser.mTabContainer );
Кстати, советую заменить твой код на:
// Активизировать вкладку наведением курсора, если 'Панель меню' закрыт ................................ (function () { var menubar = document.getElementById('toolbar-menubar'); addEventListener("mouseover", function(e) { if ( menubar.getAttribute("autohide") == 'true' && menubar.getAttribute("inactive") ) { gBrowser.selectedTab = e.target; e.target.setAttribute('read', 'true'); } }, false, gBrowser.tabContainer ); })();
Отсутствует
Уважаемый bunda1,
мне очень нравится Ваше открытие вкладки по наведению курсора - очень удобно.
Единственное,что меня смущало, это то, что когда неаккуратно убираешь курсор с вкладки и "цепляешь" им другую вкладку, то делаешь её активной.
Я своими кривыми ручками внёс маленькое изменение:
// Активизировать вкладку наведением курсора, если 'Панель меню' закрыт ................................ (function () { var menubar = document.getElementById('toolbar-menubar'), dateout = Date.now(); addEventListener("mouseout", function(e) {dateout = Date.now(); }, true, gBrowser.tabContainer ); addEventListener("mouseover", function(e) { if ( menubar.getAttribute("autohide") == 'true' && menubar.getAttribute("inactive") && (Date.now() - dateout > 500 ) ) { gBrowser.selectedTab = e.target; e.target.setAttribute('read', 'true'); } }, false, gBrowser.tabContainer ); addEventListener("click", function(e) { if ( e.button == 0 && e.target.nodeName == "tab" ) BrowserReload(); }, true, gBrowser.mTabContainer ); })();
То есть активизация вкладки происходит по наведению курсора, если курсор "покинул" предыдущую вкладку полсекунды или больше тому назад.
Это помогает при неаккуратном перемещении курсора - случайное цепляние другой вкладки не ведёт к её активации
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Подскажите, а с помощью CB можно сделать имитацию нажатий клавивиатуры, чтобы не запускать vbscript:
Отсутствует
Кнопочка Clear Cache / Delete flash cookie после обновления до FF32 больше не работает, можно её как-то исправить?
Отсутствует
Кнопочка Clear Cache / Delete flash cookie после обновления до FF32 больше не работает, можно её как-то исправить?
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%3EClear%20Cache%20/%20Delete%20flash%20cookies%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAQEBCxMTEyElJSU/KywrWC4sLWUzMzNrPDs8a0NEQ2MsLCxKDg0PKgABAA8AAAAAAgICAAAAAAAAAAAAAAAAAQAAAAIZGhoHQ0NDUGJiYqZxcXHVcXFx6XNzc/STlJT2t7e2+NDP0Pjb3dz11tbY67GwsNtsbWy0JyYnYQICAg8CAgICAAAAAgICAgUAAAAAJykpJ5CRkM64t7f/q6ut/7m5uf/Lx8b/19bW/9nY2P7a2dz+4d/g/+rq6P/r7Or/1NTU/3V1ddkKCwo+AQEBAQEBAQQCAgIDAAABARMTEhdubmy/rq6w/snIyfbj4+H94uXn/d/l7f3W2+X9xc3R/a20u/2oqKr9paWi96Wmpf5ubW3NFRMTNgAAAA4BAQEJAQIBAQICAgUAAQUBhY6UpuDi5f7b2Nj609ng/rfB1v+ssc3/wcja/6qyx/99hqL/iZOr/rW4vfrZ2Nf+io2VuQQHDiICAgETAQEBBgIDBAIDAgEDAQoSAau8wq3/////4Oft+tzm7v7d4On/q6zJ/0tLoP9cXKb/tbXM/9Hb5v7f5/H6/////7K6wrYBDRkNAwEABQICAQECAwQCAQIBAggNEQest7+4+v7+/8rY6Pnf5u7++/r6/6OmzP9kZa//aGmu/8rN4//7+vv/3Obr+Pn9/f+/wsK7ChIWDAIBAQECAwMDAwQEBAEBAQINFhgPprXAvPb////K1OT5vcDX/6SlzP+Bg7z/5ebu/7S11P9+gbv/l5jE/7G60fj1/P7/w8TIwBYYIRcAAQEBBAQEBAQEBQQCAAAAESIsGbTGzMH5////5u70+dTW6P+Dg7//gIC//8PD3f+gocr/OTyf/3J0t/+/xd349P7//73EzsYgIy8hAAAAAAQEBAQEBAUEAAAAABoiLSLAyszH+f///9/q9vj0+Pz/2Nfp/7e32P+9vtz/ubvX/25vtP+/weD/5/D1+Pb////AytHLJSw3KwAAAAAEBAUFBAQFBQAAAAAgKzQrvsvOyvb+/v/I2e/42ef3//L19v/p6Ov//vv7//Hy8v/Jydv/1ODu/97r9Pj9/v//zdHY0C44RjgAAAAABAUFBQQFBQUAAAAAKzpJN8TV2dD4/v7/1Oj++NDq///Q6P7/4PH//+Pw/v/U5fb/xt3z/8Tc9f/X5/f4//7//9PX29c3QktFAAAAAAUFBQUEBQUFAAAAADE5Rj7G09rT8Pr7/8PV6fi60eX/q8ff/63G4P+uxt//s8vl/7PN6//F2fD/0N/r+Pr8/P/W3+TaP09aSwAAAAAFBQUFBAUFBQAAAAA4PUhRqrW/3bK6wP57gIn2cXeD/nh+gv2Rlpf9rrKz/crNz/3c4eT94uft/tDU2/bX2dr+tL3F4kJNWl0AAAAABAUGBgMDAwYAAAAAX15jfq+vsvqjpqb/mJ2f/qmyt/+vvMP+u8nT/8jT3f/R3Ob/2OTs/97l7P/N0dX+wsLE/62usP5WV1uLAAAAAAIDBAUDAwMEAAAAAEdGRkqJiYi6mZma57CztO/Q1tr20tni98PL1vettb/3maGs94uSnfeIjpL3iY2M8ZycnOmZmJfDTUtMVgAAAAACAgIDAAAAAAAAAAAEBAUBDxEQEickJCtAODtEVlFTW2RjZGljYl9yXVxadVdWVHNRUFNqR0RHXT03NkcpJyctFBUWEwgHCAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20const%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%0A%7D%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0A%28function%28%29%20%7B%0A%20%20%20%20var%20title%20%3D%20self.label%20+%20%22%3A%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%3B%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%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
Отсутствует
День добрый. Есть кнопочка CB Mouse Gestures+ (мне её на делали для изменения масштаба страницы ПКМ+колёсико) помогите добавить сброс масштаба по ПКМ+ЛКМ.
// Объявляем переменные для этой вкладки ................................ var _this = this; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService); var ucjsMouseGestures = { // настройки .... enableWheelGestures: true, enableRockerGestures: true, enablePopupGestures: true, _lastX: 0, _lastY: 0, _directionChain: '', _isMouseDownL: false, _isMouseDownR: false, _hideFireContext: false, //for windows _shouldFireContext: false, //for linux POPUP_ID: 'GesturePopup', // Жесты .... GESTURES: { // Управление страницей ................................ 'W-':{name:'Увеличить масштаб',cmd:function(){ FullZoom.enlarge() }}, 'W+':{name:'Уменьшить масштаб',cmd:function(){ FullZoom.reduce() }}, 'UDU':{name:'Сбросить масштаб',cmd:function(){ FullZoom.reset() }}, }, init:function() { var self = this; var events = ["mousedown", "mousemove", "mouseup", "contextmenu"]; if ( this.enableRockerGestures ) events.push("draggesture"); if ( this.enableWheelGestures ) events.push("DOMMouseScroll"); function registerEvents( aAction, eventArray ) { eventArray.forEach(function(aType) { gBrowser.mPanelContainer[aAction + "EventListener"]( aType, self, true ) }); }; registerEvents("add", events); window.addEventListener("unload", function() { registerEvents("remove",events); }, false ); addDestructor(function() { registerEvents("remove", events) }); }, handleEvent:function( event ) { switch( event.type ) { case"mousedown": if ( event.button ==2 ) { this._isMouseDownR = true; this._hideFireContext = false; this._startGesture( event ); } if ( this.enableRockerGestures ) { if ( event.button == 2 && this._isMouseDownL ) { this._isMouseDownL = false; this._isMouseDownR = false; this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "L>R"; this._stopGesture(event); } else if ( event.button == 0 ) { this._isMouseDownL = true; if ( this._isMouseDownR ) { this._isMouseDownL = false; this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "L<R"; this._stopGesture( event ); } } } break; case"mousemove": if ( this._isMouseDownR ) { this._hideFireContext = true; this._progressGesture( event ); } break; case"mouseup": if ( content.xdTrailArea ) { content.xdTrailArea.parentNode.removeChild( content.xdTrailArea ); content.xdTrailArea = content.document.documentElement.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailArea")); } if ( event.ctrlKey && event.button == 2 ) { this._isMouseDownL = false; this._isMouseDownR = false; this._shouldFireContext = false; this._hideFireContext = false; this._directionChain = ''; event.preventDefault(); XULBrowserWindow.statusTextField.label = "Reset Gesture"; break; } if ( this._isMouseDownR && event.button == 2 ) { if ( this._directionChain ) this._shouldFireContext = false; this._isMouseDownR = false; this._stopGesture( event ); if ( this._shouldFireContext && !this._hideFireContext ) { this._shouldFireContext = false; this._displayContextMenu( event ); } } else if ( this.enableRockerGestures && event.button == 0 && this._isMouseDownL ) { this._isMouseDownL = false; this._shouldFireContext = false; } else if ( this.enablePopupGestures && ( event.button == 0 || event.button == 1 ) && event.target.localName =='menuitem' ) { this._isMouseDownL = false; this._shouldFireContext = false; var popup = document.getElementById( this.POPUP_ID ); var activeItem = event.target; switch( popup.getAttribute("gesturecommand") ) { case"WebSearchPopup": var selText = popup.getAttribute("selectedtext"); var engine = activeItem.engine; if ( !engine ) break; var submission = engine.getSubmission( selText, null ); if ( !submission ) break; document.getElementById('searchbar').textbox.value = selText; gBrowser.loadOneTab( submission.uri.spec,null,null,submission.postData,null,false ); break; case"ClosedTabsPopup": undoCloseTab( activeItem.index ); break; case"HistoryPopup": gBrowser.webNavigation.gotoIndex( activeItem.index ); break; case"AllTabsPopup": gBrowser.selectedTab = gBrowser.mTabs[activeItem.index]; break; } popup.hidePopup(); } try { document.getElementById("statusbar-display").label = "" } catch(e) {}; break; case"popuphiding": var popup = document.getElementById( this.POPUP_ID ); popup.removeEventListener("popuphiding",this,true); document.documentElement.removeEventListener("mouseup",this,true); while( popup.hasChildNodes() ) popup.removeChild( popup.lastChild ); break; case"contextmenu": if ( this._isMouseDownL || this._isMouseDownR || this._hideFireContext ) { event.preventDefault(); event.stopPropagation(); this._shouldFireContext = true; this._hideFireContext = false; } break; case"DOMMouseScroll": if ( this.enableWheelGestures&&this._isMouseDownR ) { event.preventDefault(); event.stopPropagation(); this._shouldFireContext = false; this._hideFireContext = true; this._directionChain = "W" + ( event.detail > 0 ? "+" : "-" ); this._stopGesture(event); } break; case"draggesture": this._isMouseDownL = false; break; } }, _displayContextMenu:function( event ) { var evt = event.originalTarget.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent("contextmenu",true,true,event.originalTarget.defaultView,0,event.screenX,event.screenY,event.clientX,event.clientY,false,false,false,false,2,null); event.originalTarget.dispatchEvent(evt); }, _startGesture:function( event ) { this._lastX = event.screenX; this._lastY = event.screenY; this._directionChain = ""; }, _progressGesture:function( event ) { var x = event.screenX, y = event.screenY; var lastX = this._lastX, lastY = this._lastY; var subX = x-lastX, subY=y-lastY; var distX = ( subX > 0 ? subX : (-subX) ), distY = ( subY > 0 ? subY : ( -subY ) ); var direction; if ( distX < 10 && distY < 10 ) return; if ( distX > distY ) direction = subX < 0 ? "L" : "R"; else direction = subY < 0 ? "U" : "D"; var dChain = this._directionChain; if ( direction !== dChain.charAt( dChain.length-1 ) ) { dChain += direction; this._directionChain += direction; var gesture = this.GESTURES[dChain]; XULBrowserWindow.statusTextField.label = "Жест мыши: "+ dChain + ( gesture ? ' ('+ gesture.name +')' : '' ); } this._lastX = x; this._lastY = y; }, _stopGesture:function(event){ try { if ( dChain = this._directionChain ) this.GESTURES[dChain].cmd( this, event ); XULBrowserWindow.statusTextField.label = ""; } catch(e) { setTimeout(function() { XULBrowserWindow.statusTextField.label = "Неизвестный жест мыши: " + dChain }, 0); setTimeout(function() { XULBrowserWindow.statusTextField.label = "" }, 600); } this._directionChain = ""; }, _buildPopup:function( event,gestureCmd ) { if ( !this.enablePopupGestures ) return; var popup = document.getElementById( this.POPUP_ID ); if ( !popup ) { popup = document.createElement("popup"); popup.id = this.POPUP_ID; } document.getElementById("mainPopupSet").appendChild( popup ); popup.setAttribute("gesturecommand", gestureCmd ); switch( gestureCmd ) { case"WebSearchPopup": var searchSvc = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var engines = searchSvc.getVisibleEngines({}); if ( engines.length < 1 ) throw"Поисковые системы не установлены."; for ( var i = engines.length - 1; i >= 0;--i ) { var engine = engines[i]; var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", engine.name ); menuitem.setAttribute("class", "menuitem-iconic"); if ( engine.iconURI ) menuitem.setAttribute("src", engine.iconURI.spec ); popup.insertBefore( menuitem, popup.firstChild ); menuitem.engine = engine; } popup.setAttribute("selectedtext", getBrowserSelection().toString() ); break; case"ClosedTabsPopup": try { if ( !gPrefService.getBoolPref("browser.sessionstore.enabled") ) throw"Функция восстановления сессий отключена."; } catch(e){} var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); if ( ss.getClosedTabCount(window) ==0 ) throw"Нет восстанавливаемых вкладок в этом окне."; var undoItems = eval("("+ss.getClosedTabData(window)+")"); for ( var i=0, LEN = undoItems.length; i<LEN; i++ ) { var menuitem=popup.appendChild(document.createElement("menuitem")); menuitem.setAttribute("label",undoItems[i].title); menuitem.setAttribute("class","menuitem-iconic bookmark-item"); menuitem.index = i; var iconURL = undoItems[i].image; if ( iconURL ) menuitem.setAttribute("image", iconURL ); } break; case"HistoryPopup": var sessionHistory = gBrowser.webNavigation.sessionHistory; if ( sessionHistory.count<1 ) throw"Нет истории в этой вкладке."; var curIdx = sessionHistory.index; for ( var i = 0, shc = sessionHistory.count; i < shc; i++ ) { var entry = sessionHistory.getEntryAtIndex(i,false); if ( !entry ) continue; var menuitem = document.createElement("menuitem"); popup.insertBefore(menuitem,popup.firstChild); menuitem.setAttribute("label",entry.title); try { var iconURL = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.nsIFaviconService).getFaviconForPage( entry.URI ).spec; menuitem.style.listStyleImage = "url("+iconURL+")"; } catch(e){} menuitem.index = i; if ( i==curIdx ) { menuitem.style.listStyleImage = ""; menuitem.setAttribute("type","radio"); menuitem.setAttribute("checked","true"); menuitem.className = "unified-nav-current"; activeItem = menuitem; } else { menuitem.className = i< curIdx ? "unified-nav-back menuitem-iconic" : "unified-nav-forward menuitem-iconic"; } } break; case"AllTabsPopup": var tabs = gBrowser.mTabs; if ( tabs.length < 1 ) return; for ( var i=0, LEN = tabs.length; i < LEN; i++ ) { var menuitem = popup.appendChild(document.createElement("menuitem")); var tab = tabs[i]; menuitem.setAttribute("class", "menuitem-iconic bookmark-item"); menuitem.setAttribute("label", tab.label); menuitem.setAttribute("crop", tab.getAttribute("crop") ); menuitem.setAttribute("image", tab.getAttribute("image")); menuitem.index = i; if ( tab.selected ) menuitem.setAttribute("style", "color: red; font-weight: bold;"); if ( tab.hasAttribute('unread') ) menuitem.setAttribute("style", "color: blue;"); } break; } document.popupNode = null; document.tooltipNode = null; popup.addEventListener("popuphiding", this, true); popup.openPopup( null, "", event.clientX, event.clientY, false, false ); document.documentElement.addEventListener("mouseup", this, true); }, }; ucjsMouseGestures.init();
Отредактировано Mishania (11-09-2014 09:29:34)
Отсутствует
Под:
положи:
Отсутствует