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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№120120-04-2016 14:49:04

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

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

День добрый. На ff42 пользовался кнопочкой GrabScroll, обновился до ff45 и работать перестала. Можно поправить?

Выделить код

Код:

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%3EGrabScroll%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAACUklEQVQ4jaWUzUsbQRjGn8nHhE1J0ICuEbOY2s0HBETxHoJHlVw8+Be4YtCTh5CLNESSowFzkMXiCtVeIpqWEA8t9FoW91a855TkD8jx6WUVSWtQOvCc5sdveGfed4Axi6Tn9vb2Q7PZfE/SM44dK2k0GrFIJFKPRCL1RqMRe7OMpHAcZ0LX9T0hxL0Q4l7X9T3HcSZIireI/NlsdkNK2QFgA7CllJ1sNrtB0v9aiUJynuQqSWMkq+6eMrYckn6S80KInwAeADwoivJLCPFbSnkvpXR8Pt8PV+b/q0ySHsdxJnK53BrJBIDvAO4A3MVisU9er7c9PT39eXJy8ksgEGiTTORyuTX3zjxPEtM051KplCGlvHZFX5eXl89qtdrHcrlcrVar5UqlcrS0tHQO4BvJhJTyOpVKGaZpzpH0oNVqxVVVPRJCdADcuKJmJpM5IKmSfOdGzWQyBwCaLnMjhOioqlpptVpx2La9kM/na4qiXAC4cqGrZDK5TzL0rPxQMpncf84oinKRz+drtm0vgKSv1+stFovFHU3T6i5kpdPpXZJTJENuptLp9C4Ai2RC07R6sVjc6fV6iyR9j6f5hsOhZlnWpisyw+HwcTweLz9POBw+BmCSTFiWtTkcDrUnycjzh1zRCYBTAOcjOQVwQjLhsi93OcnZfzTiaGZfFIzI/IVCYT0ajV4CaANoR6PRy0KhsP7qEXkss9/vz5RKpa1gMHgYDAYPS6XSVr/fn3nT0LoyT7fb1Q3D2DYMY7vb7er/8yd5B4PBymAwWCHpHcf+AbaLjoOEBHabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/**%0A%20*%20%20Button%20based%20on%20a%20script%20created%20for%20userChrome.js%20extension.%20http%3A//userchromejs.mozdev.org/%0A%20*%20%20Author%3A%20Alice0775%20https%3A//github.com/alice0775%0A%20*%20%20Source%3A%20https%3A//github.com/alice0775/userChrome.js/blob/master/GrabScroll_Fx29.uc.xul%0A%20*/%0Aconst%20_UID%20%3D%20%22grab_scroll%22%20+%20%28self.id%29.split%28%22custombuttons%22%29%5B1%5D%3B%0A%0Aconst%20_LTN%20%3D%20%22listeners_%22%20+%20_UID%3B%0A%0Aconst%20PREF_BRANCH%20%3D%20%22extensions.custombuttons.GrabScroll.Id%22%20+%20%28self.id%29.split%28%22-button%22%29%5B1%5D%20+%20%22.%22%3B%0A%0Aif%20%28%21%28%22Services%22%20in%20window%29%29%0A%09Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0A%0A//START//%20Default%20preferences%20management%0AbtnPref.root%20%3D%20PREF_BRANCH%3B%0A%0AbtnPref.defaults%20%3D%20%7B%0A%09%22GrabScrollEnabled%22%20%3A%20true%2C%0A%09%22MouseButton%22%20%3A%200%2C%0A%09%22MoveRate%22%20%3A%20-1%2C%0A%09%22Timer%22%20%3A%20500%2C%0A%09%22InertiaEnabled%22%20%3A%20false%2C%0A%09%22InertiaThreshold%22%20%3A%2020%2C%0A%09%22InertiaRate%22%20%3A%2050%2C%0A%09%22NotClicableLink%22%20%3A%20true%2C%0A%09%22NotImage%22%20%3A%20false%2C%0A%09%22Tolerance%22%20%3A%203%2C%0A%09%22ToleranceWhenNoHScroll%22%20%3A%205%0A%7D%3B%0A%0Alet%28branch%20%3D%20Services.prefs.getDefaultBranch%28btnPref.root%29%29%20%7B%0A%09for%20%28let%5Bkey%2C%20val%5Din%20Iterator%28btnPref.defaults%29%29%20%7B%0A%09%09switch%20%28typeof%20val%29%20%7B%0A%09%09case%20%22boolean%22%3A%0A%09%09%09branch.setBoolPref%28key%2C%20val%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22number%22%3A%0A%09%09%09branch.setIntPref%28key%2C%20val%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22string%22%3A%20%7B%0A%09%09%09%09let%20str%20%3D%20Cc%5B%22@mozilla.org/supports-string%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Ci.nsISupportsString%29%3B%0A%09%09%09%09str.data%20%3D%20val%3B%0A%09%09%09%09branch.setComplexValue%28%28key%29%2C%20Ci.nsISupportsString%2C%20str%29%3B%0A%09%09%09%7D%0A%09%09%09break%3B%0A%09%09%7D%0A%09%7D%0A%7D%3B%0A%0AbtnPref.observe%20%3D%20function%20%28aPrefs%2C%20aCallback%29%20%7B%0A%09let%20%7B%0A%09%09root%0A%09%7D%0A%09%09%20%3D%20btnPref%3B%0A%09function%20observe%28subject%2C%20topic%2C%20data%29%20%7B%0A%09%09if%20%28topic%20%21%3D%3D%20%22nsPref%3Achanged%22%29%0A%09%09%09return%3B%0A%09%09let%20pref%20%3D%20data.slice%28root.length%29%3B%0A%09%09if%20%28aPrefs.indexOf%28pref%29%20%3D%3D%3D%20-1%29%0A%09%09%09return%3B%0A%09%09aCallback%28pref%29%3B%0A%09%7D%0A%09Services.prefs.addObserver%28root%2C%20observe%2C%20false%29%3B%0A%09unload%28function%20%28%29Services.prefs.removeObserver%28root%2C%20observe%29%29%3B%0A%7D%3B%0A%0Afunction%20btnPref%28aKey%29%20%7B%0A%09let%20%7B%0A%09%09branch%2C%0A%09%09defaults%0A%09%7D%0A%09%09%20%3D%20btnPref%3B%0A%09if%20%28%21branch%29%0A%09%09branch%20%3D%20Services.prefs.getBranch%28btnPref.root%29%3B%0A%09switch%20%28typeof%20defaults%5BaKey%5D%29%20%7B%0A%09case%20%22boolean%22%3A%0A%09%09return%20branch.getBoolPref%28aKey%29%3B%0A%09%09break%3B%0A%09case%20%22number%22%3A%0A%09%09return%20branch.getIntPref%28aKey%29%3B%0A%09%09break%3B%0A%09case%20%22string%22%3A%0A%09%09return%20branch.getComplexValue%28aKey%2C%20Ci.nsISupportsString%29.data%3B%0A%09%09break%3B%0A%09%7D%0A%09return%20null%3B%0A%7D%0A%0Afunction%20unload%28aCallback%2C%20aContainer%29%20%7B%0A%09let%20unloaders%20%3D%20unload.unloaders%3B%0A%09if%20%28unloaders%20%3D%3D%3D%20null%29%0A%09%09unloaders%20%3D%20unload.unloaders%20%3D%20%5B%5D%3B%0A%09if%20%28aCallback%20%3D%3D%3D%20null%29%20%7B%0A%09%09unloaders.slice%28%29.forEach%28function%20%28unloader%29unloader%28%29%29%3B%0A%09%09%09unloaders.length%20%3D%200%3B%0A%09%7D%0A%09if%20%28aContainer%20%21%3D%3D%20null%29%20%7B%0A%09%09aContainer.addEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%09%09let%20origCallback%20%3D%20aCallback%3B%0A%09%09callback%20%3D%20function%20%28%29%20%7B%0A%09%09%09aContainer.removeEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%09%09%09origCallback%28%29%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%0A%09function%20unloader%28%29%20%7B%0A%09%09try%20%7B%0A%09%09%09callback%28%29%3B%0A%09%09%7D%20catch%20%28err%29%20%7B%0A%09%09%09Components.utils.reportError%28err%29%3B%0A%09%09%7D%0A%09%7D%0A%09unloaders.push%28unloader%29%3B%0A%09function%20removeUnloader%28%29%20%7B%0A%09%09let%20index%20%3D%20unloaders.indexOf%28unloader%29%3B%0A%09%09if%20%28index%20%21%3D%3D%20-1%29%0A%09%09%09unloaders.splice%28index%2C%201%29%3B%0A%09%7D%0A%09return%20removeUnloader%3B%0A%7D%0A//END//%20Default%20preferences%20management%0A%0Avar%20GrabScroll%20%3D%20%7B%0A%09mStatus%20%3A%200%2C%20//0%3AIdle%2C%201%3A%20during%20mousedown%2C%202%3A%20during%20mousemove%2C%203%3A%20mouseup%20After%20scrolling%0A%09mLastX%20%3A%200%2C%0A%09mLastY%20%3A%200%2C%0A%09_target%20%3A%20null%2C%20//%20Element%20the%20mouse%20is%20pointing%0A%09_target2%20%3A%20null%2C%20//%20Element%20the%20mouse%20is%20pointing%0A%09_isImage%20%3A%20false%2C%0A%09_timer%20%3A%200%2C%20//%20Save%20time%20when%20mouseup%20to%20determine%20the%20threshold.%0A%09_mtimer%20%3A%20false%2C%0A%09cScroll%20%3A%20false%2C%0A%09cSpeedX%20%3A%200%2C%0A%09cSpeedY%20%3A%200%2C%0A%09_doc%20%3A%20null%2C%0A%09_MOVERATEpZoom%20%3A%201%2C%0A%09_window%20%3A%20null%2C%0A%09initGrabScroll%20%3A%20function%20%28%29%20%7B%0A%09%09if%20%28GrabScroll.activeBrowser%28%29.mPanelContainer%29%20%7B%0A%09%09%09this._window%20%3D%20GrabScroll.activeBrowser%28%29.mPanelContainer%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09this._window%20%3D%20document.getElementById%28%27content%27%29%3B%0A%09%09%7D%0A%09%09this._window.setCapture%28%29%3B%0A%09%09if%20%28%21window%5B_LTN%5D%29%20%7B%0A%09%09%09this._window.addEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.addEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.addEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09gBrowser.addEventListener%28%27pagehide%27%2C%20this%2C%20false%29%3B%0A%09%09%09window%5B_LTN%5D%20%3D%20true%3B%0A%09%09%7D%0A%09%7D%2C%0A%09uninitGrabScroll%20%3A%20function%20%28%29%20%7B%0A%09%09if%20%28this._window%29%20%7B%0A%09%09%09this._window.removeEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.removeEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.removeEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09gBrowser.removeEventListener%28%27pagehide%27%2C%20this%2C%20false%29%3B%0A%09%09%09this.mStatus%20%3D%3D%3D%200%3B%0A%09%09%09this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%0A%09%09delete%20window%5B_LTN%5D%3B%0A%09%7D%2C%0A%09activeBrowser%20%3A%20function%20%28%29%20%7B%0A%09%09return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%29%0A%09%09%20%7C%7C%20gBrowser%3B%0A%09%7D%2C%0A%09handleEvent%20%3A%20function%20%28event%29%20%7B%0A%09%09event%20%3D%20new%20XPCNativeWrapper%28event%29%3B%0A%09%09switch%20%28event.type%29%20%7B%0A%09%09case%20%22mousedown%22%3A%0A%09%09%09if%20%28this.cScroll%29%20%7B%0A%09%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09%09this.cSpeedX%20%3D%20this.cSpeedY%20%3D%200%3B%0A%09%09%09%7D%0A%09%09%09if%20%28btnPref%28%22GrabScrollEnabled%22%29%20%26%26%0A%09%09%09%09%21event.shiftKey%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.altKey%29%20%7B%0A%09%09%09%09this.grabStart%28event%29%3B%0A%09%09%09%7D%20else%20if%20%28%21btnPref%28%22GrabScrollEnabled%22%29%20%26%26%0A%09%09%09%09event.shiftKey%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.altKey%29%20%7B%0A%09%09%09%09this.grabStart%28event%29%3B%0A%09%09%09%7D%0A%09%09%09break%3B%0A%09%09case%20%22mousemove%22%3A%0A%09%09%09this.mousemove%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22click%22%3A%0A%09%09%09this.click%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22mouseup%22%3A%0A%09%09%09this.mouseup%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%27pagehide%27%3A%0A%09%09%09this._doc%20%3D%20null%3B%0A%09%09%09this._target%20%3D%20null%3B%0A%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09this._isImage%20%3D%20null%3B%0A%09%09%09this.NS%20%3D%20this.EW%20%3D%20this.NSEW%20%3D%20null%3B%0A%09%09%09break%3B%0A%09%09%7D%0A%09%7D%2C%0A%09grabStart%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28this.mStatus%20%3D%3D%3D%203%29%0A%09%09%09this.mStatus%20%3D%200%3B%0A%09%09//%20Do%20not%20start%20GrabScroll%20if%20you%20fire%20the%20mouse%20down%20continuously.%0A%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%29%20%7B%0A%09%09%09if%20%28Math.abs%28this.mLastX%20-%20event.screenX%29%20%3C%205%20%26%26%0A%09%09%09%09Math.abs%28this.mLastY%20-%20event.screenY%29%20%3C%205%29%0A%09%09%09%09return%0A%09%09%7D%0A%09%09var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%09%09if%20%28%21doc%29%0A%09%09%09return%3B%0A%09%09if%20%28doc.contentType%20%3D%3D%3D%20%27application/vnd.mozilla.xul+xml%27%29%0A%09%09%09return%3B%0A%09%09this._doc%20%3D%20doc%3B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%200%29%20%7B%0A%09%09%09this._target%20%3D%20event.originalTarget%3B%0A%09%09%09if%20%28/%5E%28html%7Cbody%29%24/.test%28this._target.localName.toLowerCase%28%29%29%20%7C%7C%20this._target.clientHeight%20%3E%2030000%29%0A%09%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09else%20if%20%28/div/.test%28this._target.localName.toLowerCase%28%29%29%20%26%26%20this._target.clientHeight%20%3E%201000%29%0A%09%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09else%0A%09%09%09%09this._target2%20%3D%20this._target%3B%0A%09%09%09//%20Editable%20element%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentEditableNode%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Draggable%20element%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentDraggableNode%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Factors%20to%20be%20steamed%20does%20not%20start%20the%20GrabScroll%0A%09%09%09if%20%28this.isIgnore%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Video%20control%20does%20not%20start%20the%20GrabScroll%0A%09%09%09if%20%28this.isVideoControl%28event.target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Clickable%20links%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentClickableNode%28this._target%29%29%20%7B%0A%09%09%09%09if%20%28btnPref%28%22NotClicableLink%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09//%20Blocking%20of%20DragStart%20on%20links%0A%09%09%09%09if%20%28%21%28%27linkDragSelection%27%20in%20window%29%29%0A%09%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%7D%0A%09%09%09//%20On%20images%0A%09%09%09this._isImage%20%3D%20this.isImage%28event%29%3B%0A%09%09%09if%20%28this._isImage%29%20%7B%0A%09%09%09%09//%20Images%20does%20not%20start%20the%20GrabScroll%0A%09%09%09%09if%20%28btnPref%28%22NotImage%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09//%20DragStart%20block%20on%20images%0A%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%7D%0A%09%09%09//Compativility%20with%20ResizeTa%0A%09%09%09var%20target%20%3D%20this._target%3B%0A%09%09%09while%20%28target%29%20%7B%0A%09%09%09%09if%20%28%22getAttribute%22%20in%20target%20%26%26%20target.getAttribute%28%22draggable%22%29%20%3D%3D%3D%20%22true%22%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09var%20style%20%3D%20this._doc.defaultView.getComputedStyle%28target%2C%20null%29%3B%0A%09%09%09%09%09if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22cursor%22%29%29%29%0A%09%09%09%09%09%09return%3B%0A%09%09%09%09%09else%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22auto%22%29%29%29%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%09%09target%20%3D%20target.parentNode%3B%0A%09%09%09%7D%0A%09%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3E%200%29%20%7B%0A%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%09event.stopPropagation%28%29%3B%0A%09%09%09%7D%0A%09%09%09this._timer%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%09%09%09this.mLastX%20%3D%20event.screenX%3B%0A%09%09%09this.mLastY%20%3D%20event.screenY%3B%0A%09%09%09this.mStatus%20%3D%201%3B%0A%09%09%09this._MOVERATEpZoom%20%3D%20btnPref%28%22MoveRate%22%29%20/%20%28ZoomManager.useFullZoom%20%3F%20ZoomManager.zoom%20%3A%201%29%3B%0A%09%09%09%5Bthis.NS%2C%20this.EW%2C%20this.NSEW%5D%20%3D%20this.getScrollView%28event%29%3B%0A%09%09%09this._window.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09adjustedTimer%20%3A%20function%20%28%29%20%7B%0A%09%09var%20magTimer%20%3D%20btnPref%28%22Timer%22%29%3B%0A%09%09return%20magTimer%3B%0A%09%7D%2C%0A%09grabFinish%20%3A%20function%20%28%29%20%7B%0A%09%09this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%09%09if%20%28selCon%29%0A%09%09%09selCon.setDisplaySelection%28selCon.SELECTION_ON%29%3B%0A%09%7D%2C%0A%09mousemove%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28this.mStatus%20%3D%3D%3D%202%20%7C%7C%20this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09var%20x%20%3D%20event.screenX%3B%0A%09%09%09var%20y%20%3D%20event.screenY%3B%0A%09%09%09var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%09%09%09if%20%28this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%09if%20%28%21this._isImage%20%26%26%0A%09%09%09%09%09%28new%20Date%28%29.getTime%28%29%20-%20this._timer%29%20%3E%20this.adjustedTimer%28%29%29%20%7B%0A%09%09%09%09%09this.grabFinish%28%29%3B%0A%09%09%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%09if%20%28Math.abs%28x%20-%20this.mLastX%29%20%3C%20btnPref%28%22ToleranceWhenNoHScroll%22%29%29%0A%09%09%09%09%09var%20movingh%20%3D%20Math.abs%28x%20-%20this.mLastX%29%20%3E%20Math.abs%28y%20-%20this.mLastY%29%20*%2050%3B%0A%09%09%09%09if%20%28%21this._isImage%20%26%26%20btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%20%26%26%20this.isText%28event%29%20%26%26%20movingh%20%26%26%20%21this.EW%29%20%7B%0A%09%09%09%09%09this.grabFinish%28%29%3B%0A%09%09%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%09if%20%28Math.abs%28x%20-%20this.mLastX%29%20+%20Math.abs%28y%20-%20this.mLastY%29%20%3C%20btnPref%28%22Tolerance%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%29%20%7B%0A%09%09%09%09%09var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%09%09%09%09%09if%20%28selCon%29%20%7B%0A%09%09%09%09%09%09var%20selection%20%3D%20selCon.getSelection%28selCon.SELECTION_NORMAL%29%3B%0A%09%09%09%09%09%09selection.removeAllRanges%28%29%3B%0A%09%09%09%09%09%09selCon.setDisplaySelection%28selCon.SELECTION_OFF%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09if%20%28%22ucjsMouseGestures%22%20in%20window%29%20%7B%0A%09%09%09%09%09%09ucjsMouseGestures._isMouseDownR%20%3D%20false%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09this.mLastX%20%3D%20x%20-%20%28x%20-%20this.mLastX%29%20/%2010%3B%0A%09%09%09%09this.mLastY%20%3D%20y%20-%20%28y%20-%20this.mLastY%29%20/%2010%3B%0A%09%09%09%09this.mStatus%20%3D%202%3B%0A%09%09%09%7D%0A%09%09%09if%20%28this._mtimer%29%0A%09%09%09%09return%3B%0A%09%09%09this.cSpeedX%20%3D%20this._MOVERATEpZoom%20*%20%28x%20-%20this.mLastX%29%3B%0A%09%09%09this.cSpeedY%20%3D%20this._MOVERATEpZoom%20*%20%28y%20-%20this.mLastY%29%3B%0A%09%09%09this.scroll%28event%29%3B%0A%09%09%09this.mLastX%20%3D%20x%3B%0A%09%09%09this.mLastY%20%3D%20y%3B%0A%09%09%7D%0A%09%7D%2C%0A%09getSelconForDoc%20%3A%20function%20getSelconForDoc%28doc%29%20%7B%0A%09%09if%20%28%21doc%29%0A%09%09%09return%20null%3B%0A%09%09var%20aFrame%20%3D%20doc.defaultView%3B%0A%09%09if%20%28%21aFrame%29%0A%09%09%09return%20null%3B%0A%09%09var%20docShell%20%3D%20this.getDocShellForFrame%28aFrame%29%3B%0A%09%09var%20selCon%20%3D%20docShell%0A%09%09%09.QueryInterface%28Ci.nsIInterfaceRequestor%29%0A%09%09%09.getInterface%28Ci.nsISelectionDisplay%29%0A%09%09%09.QueryInterface%28Ci.nsISelectionController%29%3B%0A%09%09return%20selCon%3B%0A%09%7D%2C%0A%09getDocShellForFrame%20%3A%20function%20getDocShellForFrame%28aFrame%29%20%7B%0A%09%09return%20aFrame%0A%09%09.QueryInterface%28Ci.nsIInterfaceRequestor%29%0A%09%09.getInterface%28Ci.nsIWebNavigation%29%0A%09%09.QueryInterface%28Ci.nsIDocShell%29%3B%0A%09%7D%2C%0A%09click%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%202%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%7D%0A%09%09if%20%28event.button%20%3D%3D%3D%200%20%26%26%20this.mStatus%20%3E%3D%202%20%26%26%20this._doc%20instanceof%20Ci.nsIImageDocument%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%7D%0A%09%09this.grabFinish%28%29%3B%0A%09%09this.mStatus%20%3D%200%3B%0A%09%7D%2C%0A%09mouseup%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3E%201%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%09this.grabFinish%28%29%3B%0A%09%09%09if%20%28this.mStatus%20%3D%3D%3D%202%29%0A%09%09%09%09this.mStatus%20%3D%203%3B%0A%09%09%09if%20%28btnPref%28%22InertiaEnabled%22%29%20%26%26%0A%09%09%09%09%28Math.abs%28this.cSpeedX%29%20%3E%20btnPref%28%22InertiaThreshold%22%29%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20btnPref%28%22InertiaThreshold%22%29%29%29%20%7B%0A%09%09%09%09if%20%28this.cScroll%29%0A%09%09%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09%09var%20v%20%3D%20btnPref%28%22InertiaRate%22%29%3B%0A%09%09%09%09if%20%28this.cSpeedX%20%3E%200%29%0A%09%09%09%09%09this.cSpeedX%20%3D%20Math.min%28this.cSpeedX%2C%20v%29%3B%0A%09%09%09%09else%0A%09%09%09%09%09this.cSpeedX%20%3D%20Math.max%28this.cSpeedX%2C%20-v%29%3B%0A%09%09%09%09if%20%28this.cSpeedY%20%3E%200%29%0A%09%09%09%09%09this.cSpeedY%20%3D%20Math.min%28this.cSpeedY%2C%20v%29%3B%0A%09%09%09%09else%0A%09%09%09%09%09this.cSpeedY%20%3D%20Math.max%28this.cSpeedY%2C%20-v%29%3B%0A%09%09%09%09this.scroll2%28event%29%3B%0A%09%09%09%09scrolling%28event%2C%20this%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09this.grabFinish%28%29%3B%0A%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%7D%0A%09%7D%2C%0A%09scroll2%20%3A%20function%20%28event%29%20%7B%0A%09%09var%20ay%20%3D%20Math.abs%28this.cSpeedY%29%3B%0A%09%09var%20ax%20%3D%20Math.abs%28this.cSpeedX%29%3B%0A%09%09if%20%28ay%20%3C%201%20%26%26%20ax%20%3C%201%29%20%7B%0A%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09this.scroll%28event%29%3B%0A%09%09if%20%28ax%20%3E%3D%20100%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%20100%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%2020%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%2010%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%205%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%201%29%0A%09%09%09this.cSpeedX%20%3D%200%3B%0A%09%09if%20%28ay%20%3E%3D%20100%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%20100%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%2020%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%2010%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%205%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%201%29%0A%09%09%09this.cSpeedY%20%3D%200%3B%0A%09%7D%2C%0A%09scroll%20%3A%20function%20%28event%29%20%7B%0A%09%09this._mtimer%20%3D%20true%3B%0A%09%09if%20%28this.NS%20%26%26%20this.NS%20%3D%3D%3D%20this.EW%29%20%7B%0A%09%09%09if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%09%09%09%09this.NS.scrollBy%28this.cSpeedX%2C%20this.cSpeedY%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09this.NS.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%09%09%09%09this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09if%20%28this.NS%29%20%7B%0A%09%09%09%09if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%09%09%09%09%09this.NS.scrollBy%280%2C%20this.cSpeedY%29%3B%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09if%20%28this.EW%29%20%7B%0A%09%09%09%09if%20%28%22scrollBy%22%20in%20this.EW%29%20%7B%0A%09%09%09%09%09this.EW.scrollBy%28this.cSpeedX%2C%200%29%3B%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09this.EW.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09setTimeout%28function%20%28self%29%20%7B%0A%09%09%09self._mtimer%20%3D%20false%3B%0A%09%09%7D%2C%2020%2C%20this%29%3B%0A%09%7D%2C%0A%09isText%20%3A%20function%20%28event%29%20%7B%0A%09%09return%20event.explicitOriginalTarget.nodeType%20%3D%3D%3D%20document.TEXT_NODE%3B%0A%09%7D%2C%0A%09isImage%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.target%20instanceof%20Ci.nsIImageLoadingContent%29%0A%09%09%09return%20event.target%3B%0A%09%09else%0A%09%09%09return%20null%3B%0A%09%7D%2C%0A%09isIgnore%20%3A%20function%20%28aNode%29%20%7B%0A%09%09while%20%28aNode%29%20%7B%0A%09%09%09var%20name%20%3D%20aNode.nodeName.toLowerCase%28%29%3B%0A%09%09%09if%20%28name%20%3D%3D%3D%20%22html%22%29%0A%09%09%09%09return%20false%3B%0A%09%09%09if%20%28/%28scrollbar%7Cselect%7Coption%7Cembed%7Cobject%7Ctree%7Capplet%7Cstatusbar%29/.test%28name%29%29%0A%09%09%09%09return%20true%3B%0A%09%09%09aNode%20%3D%20aNode.parentNode%3B%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09isParentClickableNode%20%3A%20function%20%28aNode%29%20%7B%0A%09%09if%20%28%21aNode%29%0A%09%09%09return%20null%3B%0A%09%09var%20d%20%3D%20aNode.ownerDocument%3B%0A%09%09try%20%7B%0A%09%09%09var%20xpathResult%20%3D%20d.evaluate%28%0A%09%09%09%09%09/*%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%20and%20@href%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C*/%0A%09%09%09%09%09%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C%0A%09%09%09%09%09aNode%2C%0A%09%09%09%09%09this.NSResolver%2C%0A%09%09%09%09%09XPathResult.FIRST_ORDERED_NODE_TYPE%2C%0A%09%09%09%09%09null%29%3B%0A%09%09%7D%20catch%20%28e%29%20%7B%0A%09%09%09return%20null%3B%0A%09%09%7D%0A%09%09return%20xpathResult.singleNodeValue%3B%0A%09%7D%2C%0A%09NSResolver%20%3A%20%7B%0A%09%09lookupNamespaceURI%20%3A%20function%20%28aPrefix%29%20%7B%0A%09%09%09switch%20%28aPrefix%29%20%7B%0A%09%09%09case%20%27xul%27%3A%0A%09%09%09%09return%20%27http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%27%3B%0A%09%09%09case%20%27html%27%3A%0A%09%09%09case%20%27xhtml%27%3A%0A%09%09%09%09return%20%27http%3A//www.w3.org/1999/xhtml%27%3B%0A%09%09%09case%20%27xlink%27%3A%0A%09%09%09%09return%20%27http%3A//www.w3.org/1999/xlink%27%3B%0A%09%09%09default%3A%0A%09%09%09%09return%20%27%27%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%2C%0A%09isParentEditableNode%20%3A%20function%20%28node%29%20%7B%0A%09%09try%20%7B%0A%09%09%09if%20%28node.ownerDocument.designMode%20%3D%3D%3D%20%27on%27%29%0A%09%09%09%09return%20node%3B%0A%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%0A%09%09while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09if%20%28%21%28node%20instanceof%20Ci.nsIDOMNSEditableElement%29%29%0A%09%09%09%09%09throw%200%3B%0A%09%09%09%09node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%09%09%09%09return%20node%3B%0A%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%09node%20%3D%20node.parentNode%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09isParentDraggableNode%20%3A%20function%20%28node%29%20%7B%0A%09%09while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%09%09%09if%20%28node.getAttribute%28%27draggable%27%29%20%3D%3D%3D%20%27true%27%29%0A%09%09%09%09return%20node%3B%0A%09%09%09node%20%3D%20node.parentNode%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09isVideoControl%20%3A%20function%20%28node%29%20%7B%0A%09%09if%20%28/%5E%28audio%7Cvideo%29%24/i.test%28node.localName%29%29%20%7B%0A%09%09%09return%20true%3B%0A%09%09%09var%20i%20%3D%200%3B%0A%09%09%09while%20%28i%20%3C%20node.childNodes.length%29%20%7B%0A%09%09%09%09var%20child%20%3D%20node.childNodes%5Bi%5D%3B%0A%09%09%09%09if%20%28child.hasAttribute%28%27controls%27%29%20%26%26%20child.getAttribute%28%27controls%27%29%20%3D%3D%3D%20%27controls%27%29%20%7B%0A%09%09%09%09%09return%20true%3B%0A%09%09%09%09%7D%0A%09%09%09%09i++%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09button%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Mouse%20button%20%28L%20M%20R%29%3A%20%22%2C%20%22LMR%22.substr%28btnPref%28%22MouseButton%22%29%2C%201%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09switch%20%28value.toUpperCase%28%29%29%20%7B%0A%09%09case%20%22M%22%3A%0A%09%09%09value%20%3D%201%3B%0A%09%09%09break%3B%0A%09%09case%20%22R%22%3A%0A%09%09%09value%20%3D%202%3B%0A%09%09%09break%3B%0A%09%09default%3A%0A%09%09case%20%22L%22%3A%0A%09%09%09value%20%3D%200%3B%0A%09%09%09break%3B%0A%09%09%7D%0A%09%09sIP%28%22MouseButton%22%2C%20value%29%3B%0A%09%7D%2C%0A%09threshold%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Stop%20GrabScroll%20if%20mouse%20button%20is%20pressed%20longer%20than%20this%20time%20%28In%20milliseconds%29.%22%2C%20btnPref%28%22Timer%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09let%20timer%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28timer%20%3C%3D%200%20%7C%7C%20%21timer%29%0A%09%09%09timer%20%3D%201000%3B%0A%09%09sIP%28%22Timer%22%2C%20timer%29%3B%0A%09%7D%2C%0A%09moverate%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Drag%20direction%20and%20speed%3A%5Cn%20Negative%20or%20positive%20values.%22%2C%20btnPref%28%22MoveRate%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09let%20moveRate%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21moveRate%29%0A%09%09%09moveRate%20%3D%20-1%3B%0A%09%09sIP%28%22MoveRate%22%2C%20moveRate%29%3B%0A%09%7D%2C%0A%09inertiaToggle%20%3A%20function%20%28%29%20%7B%0A%09%09let%20inertia%20%3D%20%21btnPref%28%22InertiaEnabled%22%29%3B%0A%09%09sBP%28%22InertiaEnabled%22%2C%20inertia%29%3B%0A%09%7D%2C%0A%09inertiaThreshold%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20threshold%3A%20%22%2C%20btnPref%28%22InertiaThreshold%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09let%20inertiaThreshold%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21inertiaThreshold%29%0A%09%09%09inertiaThreshold%20%3D%2020%3B%0A%09%09sIP%28%22InertiaThreshold%22%2C%20inertiaThreshold%29%3B%0A%09%7D%2C%0A%09inertiarate%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20speed%3A%20%22%2C%20btnPref%28%22InertiaRate%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09let%20inertiaRate%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21inertiaRate%29%0A%09%09%09inertiaRate%20%3D%2050%3B%0A%09%09sIP%28%22InertiaRate%22%2C%20inertiaRate%29%3B%0A%09%7D%2C%0A%09clickable%20%3A%20function%20%28%29%20%7B%0A%09%09let%20notClicableLink%20%3D%20%21btnPref%28%22NotClicableLink%22%29%3B%0A%09%09sBP%28%22NotClicableLink%22%2C%20notClicableLink%29%3B%0A%09%7D%2C%0A%09getScrollView%20%3A%20function%20%28event%29%20%7B%0A%09%09var%20NS%2C%0A%09%09EW%2C%0A%09%09NSEW%3B%0A%09%09NS%20%3D%20EW%20%3D%20NSEW%20%3D%20null%3B%0A%09%09var%20_scrollingView%20%3D%20null%3B%0A%09%09var%20overflowx%2C%0A%09%09overflowy%2C%0A%09%09ox%2C%0A%09%09oy%3B%0A%09%09var%20scw%2C%0A%09%09sch%2C%0A%09%09horz%2C%0A%09%09vert%3B%0A%09%09var%20doc%2C%0A%09%09style%3B%0A%09%09var%20borderTop%3B%0A%09%09var%20borderBottom%3B%0A%09%09var%20borderLeft%3B%0A%09%09var%20borderRight%3B%0A%09%09if%20%28event.originalTarget.ownerDocument.contentType%20%3D%3D%3D%20%22application/xml%22%29%20%7B%0A%09%09%09_scrollingView%20%3D%20event.originalTarget.ownerDocument.defaultView%3B%0A%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%09%09%09%09if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09NSEW%20%3D%20_scrollingView%3B%0A%09%09%09%09%09NS%20%3D%20_scrollingView%3B%0A%09%09%09%09%7D%0A%09%09%09%09EW%20%3D%20_scrollingView%3B%0A%09%09%09%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09NS%20%3D%20_scrollingView%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09for%20%28_scrollingView%20%3D%20event.originalTarget%3B%20_scrollingView%3B%20_scrollingView%20%3D%20_scrollingView.parentNode%29%20%7B%0A%09%09%09%09if%20%28_scrollingView%20instanceof%20HTMLElement%29%20%7B%0A%09%09%09%09%09if%20%28_scrollingView.localName.toUpperCase%28%29%20%3D%3D%3D%20%22HTML%22%20%7C%7C%0A%09%09%09%09%09%09_scrollingView.localName.toUpperCase%28%29%20%3D%3D%3D%20%22BODY%22%29%20%7B%0A%09%09%09%09%09%09_scrollingView%20%3D%20_scrollingView.ownerDocument.defaultView%3B%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%20%26%26%0A%09%09%09%09%09%09%09_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%09%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.frameElement%20%26%26%20%21NS%20%26%26%20%21EW%20%26%26%20%21NSEW%29%20%7B%0A%09%09%09%09%09%09%09return%20this.getScrollView%28%7B%0A%09%09%09%09%09%09%09%09originalTarget%20%3A%20_scrollingView.frameElement%0A%09%09%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28_scrollingView.localName.toLowerCase%28%29%20%3D%3D%3D%20%22select%22%29%20%7B%0A%09%09%09%09%09%09_scrollingView.parentNode.focus%28%29%3B%0A%09%09%09%09%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09overflowx%20%3D%20%22%22%3B%0A%09%09%09%09%09overflowy%20%3D%20%22%22%3B%0A%09%09%09%09%09ox%20%3D%20true%3B%0A%09%09%09%09%09oy%20%3D%20true%3B%0A%09%09%09%09%09try%20%7B%0A%09%09%09%09%09%09doc%20%3D%20_scrollingView.ownerDocument%3B%0A%09%09%09%09%09%09style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%09%09%09%09%09%09overflowx%20%3D%20style.getPropertyValue%28%22overflow-x%22%29%3B%0A%09%09%09%09%09%09ox%20%3D%20overflowx%20%21%3D%3D%20%22hidden%22%20%26%26%20overflowx%20%21%3D%3D%20%22visible%22%3B%0A%09%09%09%09%09%09overflowy%20%3D%20style.getPropertyValue%28%22overflow-y%22%29%3B%0A%09%09%09%09%09%09oy%20%3D%20overflowy%20%21%3D%3D%20%22hidden%22%20%26%26%20overflowy%20%21%3D%3D%20%22visible%22%3B%0A%09%09%09%09%09%7D%20catch%20%28ex%29%20%7B%7D%0A%09%09%09%09%09borderTop%20%3D%200%3B%0A%09%09%09%09%09borderBottom%20%3D%200%3B%0A%09%09%09%09%09borderLeft%20%3D%200%3B%0A%09%09%09%09%09borderRight%20%3D%200%3B%0A%09%09%09%09%09if%20%28/%5E%28table%7Ctd%7Cth%29%24/i.test%28_scrollingView.localName%29%29%20%7B%0A%09%09%09%09%09%09try%20%7B%0A%09%09%09%09%09%09%09doc%20%3D%20_scrollingView.ownerDocument%3B%0A%09%09%09%09%09%09%09style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%09%09%09%09%09%09%09borderTop%20%3D%20style.getPropertyValue%28%22border-top-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderBottom%20%3D%20style.getPropertyValue%28%22border-bottom-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderLeft%20%3D%20style.getPropertyValue%28%22border-left-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderRight%20%3D%20style.getPropertyValue%28%22border-right-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%7D%20catch%20%28ex%29%20%7B%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09scw%20%3D%20_scrollingView.clientWidth%3B%0A%09%09%09%09%09horz%20%3D%20ox%20%26%26%20scw%20%21%3D%3D%200%20%26%26%0A%09%09%09%09%09%09scw%20+%20borderLeft%20+%20borderRight%20%3C%20_scrollingView.scrollWidth%3B%0A%09%09%09%09%09sch%20%3D%20_scrollingView.clientHeight%3B%0A%09%09%09%09%09vert%20%3D%20oy%20%26%26%20sch%20%21%3D%3D%200%20%26%26%0A%09%09%09%09%09%09sch%20+%20borderTop%20+%20borderBottom%20%3C%20_scrollingView.scrollHeight%3B%0A%09%09%09%09%09if%20%28horz%20%26%26%20vert%29%20%7B%0A%09%09%09%09%09%09NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28horz%29%20%7B%0A%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28vert%29%20%7B%0A%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%20//%20for%0A%09%09%7D%0A%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20scrolling%28aEvt%2C%20aSelf%29%20%7B%0A%09let%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%09aSelf.scroll2%28aEvt%29%3B%0A%09aSelf.cScroll%20%3D%20setTimeout%28arguments.callee%2C%0A%09%09%09Math.max%2825%20-%20%28%28new%20Date%28%29%29.getTime%28%29%20-%20Start%29%2C%200%29%2C%20aEvt%2C%20aSelf%29%3B%0A%7D%0A%0Aif%20%28btnPref%28%22GrabScrollEnabled%22%29%29%0A%09GrabScroll.initGrabScroll%28%29%3B%0Athis.onDestroy%20%3D%20function%20%28aReason%29%20%7B%0A%09%28aReason%20%3D%3D%3D%20%22update%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22delete%22%29%20%26%26%20GrabScroll.uninitGrabScroll%28%29%3B%0A%7D%3B%0A%0Afunction%20sBP%28aKey%2C%20aVal%2C%20aBranch%29%20%7B%20//Set%20Boolean%20Pref%0A%09Services.prefs.setBoolPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%2C%20aVal%29%3B%0A%7D%0A%0Afunction%20sIP%28aKey%2C%20aVal%2C%20aBranch%29%20%7B%20//Set%20Integer%20Pref%0A%09Services.prefs.setIntPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%2C%20aVal%29%3B%0A%7D%0A%0Afunction%20gBP%28aKey%2C%20aBranch%29%20%7B%20//Get%20Boolean%20Pref%0A%09return%20Services.prefs.getBoolPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%29%3B%0A%7D%0A%0Athis.toggleGrabScroll%20%3D%20function%20%28%29%20%7B%0A%09let%20state%20%3D%20btnPref%28%22GrabScrollEnabled%22%29%3B%0A%09sBP%28%22GrabScrollEnabled%22%2C%20%21state%29%3B%0A%09notifyme%28null%2C%20%22GrabScroll%20%22%20+%20%28btnPref%28%22GrabScrollEnabled%22%29%20%3F%20%22ENABLED%22%20%3A%20%22DISABLED%22%29%2C%20%22%22%29%3B%0A%09self.init%28%29%3B%0A%7D%3B%0A%0Afunction%20%24XML%28aXML%29%20%7B%20//%20Return%20parsed%20XML%0A%09aXML%20%3D%20aXML.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%20//%20Linearize%20XML%0A%09return%20%28new%20DOMParser%29.parseFromString%28aXML%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%0A%0Afunction%20notifyme%28aImg%2C%20aTitle%2C%20aMsg%29%20%7B%20//%20Notification%20function%0A%09let%20notFeature%20%3D%20gBP%28%22notification.feature.enabled%22%2C%20true%29%3B%0A%09try%20%7B%0A%09%09let%20ASrv%20%3D%20Cc%5B%27@mozilla.org/alerts-service%3B1%27%5D.getService%28Ci.nsIAlertsService%29%3B%0A%09%09if%20%28%21notFeature%29%20%7B%0A%09%09%09sBP%28%22notification.feature.enabled%22%2C%20true%2C%20true%29%3B%0A%09%09%09setTimeout%28function%20%28%29%20%7B%0A%09%09%09%09ASrv.showAlertNotification%28aImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%22%22%2C%20null%29%3B%0A%09%09%09%09sBP%28%22notification.feature.enabled%22%2C%20false%2C%20true%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%20else%0A%09%09%09ASrv.showAlertNotification%28aImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%22%22%2C%20null%29%3B%0A%09%7D%20catch%20%28aEr%29%20%7B%0A%09%09let%20win%20%3D%20Components.classes%5B%27@mozilla.org/embedcomp/window-watcher%3B1%27%5D.%0A%09%09%09getService%28Components.interfaces.nsIWindowWatcher%29.%0A%09%09%09openWindow%28null%2C%20%27chrome%3A//global/content/alerts/alert.xul%27%2C%0A%09%09%09%09%27_blank%27%2C%20%27chrome%2Ctitlebar%3Dno%2Cpopup%3Dyes%27%2C%20null%29%3B%0A%09%09win.arguments%20%3D%20%5BaImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%27%27%5D%3B%0A%09%7D%0A%7D%0A%0Athis.onclick%20%3D%20function%20%28aEvt%29%20%7B%0A%09if%20%28aEvt.button%20%3D%3D%3D%201%20%26%26%20%21aEvt.shiftKey%20%26%26%20%21aEvt.ctrlKey%20%26%26%20%21aEvt.altKey%29%20%7B%0A%09%09self.appendChild%28%24XML%28%0A%09%09%09%09%22%3Cmenupopup%20xmlns%3D%5C%22%22%20+%20xulns%20+%20%22%5C%22%20id%3D%5C%22%22%20+%20_UID%20+%20%22-mpop%5C%22%22%20+%0A%09%09%09%09%22%20onpopuphiding%3D%5C%22this.parentNode.init%28%29%3B%5C%22%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Button%20to%20start%20the%20GrabScroll%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27button%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20tooltiptext%3D%5C%22Choose%20the%20mouse%20button%20with%20which%20to%20start%20the%20GrabScroll.%5C%22/%3E%22%20+%0A%09%09%09%09%22%3Cmenuseparator/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22GrabScroll%20start%20threshold%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27threshold%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20tooltiptext%3D%5C%22Time%20in%20milliseconds%20after%20which%20the%20GrabScroll%20is%20canceled%20if%20the%20cursor%20is%20not%20moved.%5C%22/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22GrabScroll%20speed%20%26amp%3B%20direction%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27moverate%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20tooltiptext%3D%5C%22Drag%20direction%20and%20speed.%20With%20a%20negative%20value%2C%20the%20page%20content%20moves%20in%20the%20same%20direction%20as%20the%20cursor.%5C%22/%3E%22%20+%0A%09%09%09%09%22%3Cmenuseparator/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Scroll%20inertia%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27inertiaToggle%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20checked%3D%5C%22%22%20+%20btnPref%28%22InertiaEnabled%22%29%20+%20%22%5C%22%22%20+%0A%09%09%09%09%22%20type%3D%5C%22checkbox%5C%22%20/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Scroll%20inertia%20threshold%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27inertiaThreshold%27%29%3Bevent.stopPropagation%28%29%3B%5C%22/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Scroll%20inertia%20speed%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27inertiarate%27%29%3Bevent.stopPropagation%28%29%3B%5C%22/%3E%22%20+%0A%09%09%09%09%22%3Cmenuseparator/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Cancel%20GrabScroll%20on%20images%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27NotImage%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20tooltiptext%3D%5C%22Do%20not%20start%20GrabScroll%20if%20cursor%20is%20over%20an%20image.%5C%22%22%20+%0A%09%09%09%09%22%20checked%3D%5C%22%22%20+%20btnPref%28%22NotImage%22%29%20+%20%22%5C%22%22%20+%0A%09%09%09%09%22%20type%3D%5C%22checkbox%5C%22%20/%3E%22%20+%0A%09%09%09%09%22%3Cmenuitem%20label%3D%5C%22Cancel%20GrabScroll%20on%20links%5C%22%22%20+%0A%09%09%09%09%22%20oncommand%3D%5C%22this.parentNode.parentNode.cmds%28%27clickable%27%29%3Bevent.stopPropagation%28%29%3B%5C%22%22%20+%0A%09%09%09%09%22%20tooltiptext%3D%5C%22Do%20not%20start%20GrabScroll%20if%20cursor%20is%20over%20a%20clickable%20link.%5C%22%22%20+%0A%09%09%09%09%22%20checked%3D%5C%22%22%20+%20btnPref%28%22NotClicableLink%22%29%20+%20%22%5C%22%22%20+%0A%09%09%09%09%22%20type%3D%5C%22checkbox%5C%22%20/%3E%22%20+%0A%09%09%09%09%22%3C/menupopup%3E%22%29%29%3B%0A%09%09document.getElementById%28_UID%20+%20%22-mpop%22%29.openPopup%28self%2C%20%22after_start%22%2C%20null%2C%20null%2C%20false%2C%20null%2C%20null%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.cmds%20%3D%20function%20%28aCmd%29%20%7B%0A%09switch%20%28aCmd%29%20%7B%0A%09case%20%22button%22%3A%0A%09%09GrabScroll.button%28%29%3B%0A%09%09break%3B%0A%09case%20%22threshold%22%3A%0A%09%09GrabScroll.threshold%28%29%3B%0A%09%09break%3B%0A%09case%20%22moverate%22%3A%0A%09%09GrabScroll.moverate%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiaToggle%22%3A%0A%09%09GrabScroll.inertiaToggle%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiaThreshold%22%3A%0A%09%09GrabScroll.inertiaThreshold%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiarate%22%3A%0A%09%09GrabScroll.inertiarate%28%29%3B%0A%09%09break%3B%0A%09case%20%22clickable%22%3A%0A%09%09GrabScroll.clickable%28%29%3B%0A%09%09break%3B%0A%09case%20%22NotImage%22%3A%0A%09%09sBP%28%22NotImage%22%2C%20%21btnPref%28%22NotImage%22%29%29%3B%0A%09%09break%3B%0A%09%7D%0A%7D%3B%0A%0Athis.style.opacity%20%3D%20btnPref%28%22GrabScrollEnabled%22%29%20%3F%20%221%22%20%3A%20%22.50%22%3B%0A%0Athis.tooltipText%20%3D%20%22%5Cn%5Ct%22%20+%20%28self.label%20%7C%7C%20self.name%29%20+%20%22%5Cn%5Cn%22%20+%0A%09%22%5CtL%3D%20Enable/Disable%20GrabScroll%5Ct%5Cn%22%20+%0A%09%22%5CtM%3D%20Open%20Options%20menu%5Ct%5Cn%5Cn%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.toggleGrabScroll%28%29%3B%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

Отсутствует

 

№120220-04-2016 22:12:17

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

Mishania
Поправил:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGrabScroll%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAACUklEQVQ4jaWUzUsbQRjGn8nHhE1J0ICuEbOY2s0HBETxHoJHlVw8+Be4YtCTh5CLNESSowFzkMXiCtVeIpqWEA8t9FoW91a855TkD8jx6WUVSWtQOvCc5sdveGfed4Axi6Tn9vb2Q7PZfE/SM44dK2k0GrFIJFKPRCL1RqMRe7OMpHAcZ0LX9T0hxL0Q4l7X9T3HcSZIireI/NlsdkNK2QFgA7CllJ1sNrtB0v9aiUJynuQqSWMkq+6eMrYckn6S80KInwAeADwoivJLCPFbSnkvpXR8Pt8PV+b/q0ySHsdxJnK53BrJBIDvAO4A3MVisU9er7c9PT39eXJy8ksgEGiTTORyuTX3zjxPEtM051KplCGlvHZFX5eXl89qtdrHcrlcrVar5UqlcrS0tHQO4BvJhJTyOpVKGaZpzpH0oNVqxVVVPRJCdADcuKJmJpM5IKmSfOdGzWQyBwCaLnMjhOioqlpptVpx2La9kM/na4qiXAC4cqGrZDK5TzL0rPxQMpncf84oinKRz+drtm0vgKSv1+stFovFHU3T6i5kpdPpXZJTJENuptLp9C4Ai2RC07R6sVjc6fV6iyR9j6f5hsOhZlnWpisyw+HwcTweLz9POBw+BmCSTFiWtTkcDrUnycjzh1zRCYBTAOcjOQVwQjLhsi93OcnZfzTiaGZfFIzI/IVCYT0ajV4CaANoR6PRy0KhsP7qEXkss9/vz5RKpa1gMHgYDAYPS6XSVr/fn3nT0LoyT7fb1Q3D2DYMY7vb7er/8yd5B4PBymAwWCHpHcf+AbaLjoOEBHabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/**%0A%20*%20%20Button%20based%20on%20a%20script%20created%20for%20userChrome.js%20extension.%20http%3A//userchromejs.mozdev.org/%0A%20*%20%20Author%3A%20Alice0775%20https%3A//github.com/alice0775%0A%20*%20%20Source%3A%20https%3A//github.com/alice0775/userChrome.js/blob/master/GrabScroll_Fx29.uc.xul%0A%20*/%0Avar%20_UID%20%3D%20%22grab_scroll%22%20+%20%28self.id%29.split%28%22custombuttons%22%29%5B1%5D%3B%0A%0Avar%20_LTN%20%3D%20%22listeners_%22%20+%20_UID%3B%0A%0Avar%20PREF_BRANCH%20%3D%20%22extensions.custombuttons.GrabScroll.Id%22%20+%20%28self.id%29.split%28%22-button%22%29%5B1%5D%20+%20%22.%22%3B%0A%0Aif%20%28%21%28%22Services%22%20in%20window%29%29%0A%09Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0A%0A//START//%20Default%20preferences%20management%0AbtnPref.root%20%3D%20PREF_BRANCH%3B%0A%0AbtnPref.defaults%20%3D%20%7B%0A%09%22GrabScrollEnabled%22%20%3A%20true%2C%0A%09%22MouseButton%22%20%3A%200%2C%0A%09%22MoveRate%22%20%3A%20-1%2C%0A%09%22Timer%22%20%3A%20500%2C%0A%09%22InertiaEnabled%22%20%3A%20false%2C%0A%09%22InertiaThreshold%22%20%3A%2020%2C%0A%09%22InertiaRate%22%20%3A%2050%2C%0A%09%22NotClicableLink%22%20%3A%20true%2C%0A%09%22NotImage%22%20%3A%20false%2C%0A%09%22Tolerance%22%20%3A%203%2C%0A%09%22ToleranceWhenNoHScroll%22%20%3A%205%0A%7D%3B%0A%0Avar%20branch%20%3D%20Services.prefs.getDefaultBranch%28btnPref.root%29%3B%0Afor%20%28var%5Bkey%2C%20val%5Din%20Iterator%28btnPref.defaults%29%29%20%7B%0A%09switch%20%28typeof%20val%29%20%7B%0A%09%09case%20%22boolean%22%3A%0A%09%09%09branch.setBoolPref%28key%2C%20val%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22number%22%3A%0A%09%09%09branch.setIntPref%28key%2C%20val%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22string%22%3A%20%7B%0A%09%09%09var%20str%20%3D%20Cc%5B%22@mozilla.org/supports-string%3B1%22%5D%0A%09%09%09.createInstance%28Ci.nsISupportsString%29%3B%0A%09%09%09str.data%20%3D%20val%3B%0A%09%09%09branch.setComplexValue%28%28key%29%2C%20Ci.nsISupportsString%2C%20str%29%3B%0A%09%09%7D%0A%09%09%09break%3B%0A%09%7D%0A%7D%3B%0A%0AbtnPref.observe%20%3D%20function%20%28aPrefs%2C%20aCallback%29%20%7B%0A%09var%20%7B%0A%09%09root%0A%09%7D%0A%09%09%20%3D%20btnPref%3B%0A%09function%20observe%28subject%2C%20topic%2C%20data%29%20%7B%0A%09%09if%20%28topic%20%21%3D%3D%20%22nsPref%3Achanged%22%29%0A%09%09%09return%3B%0A%09%09var%20pref%20%3D%20data.slice%28root.length%29%3B%0A%09%09if%20%28aPrefs.indexOf%28pref%29%20%3D%3D%3D%20-1%29%0A%09%09%09return%3B%0A%09%09aCallback%28pref%29%3B%0A%09%7D%0A%09Services.prefs.addObserver%28root%2C%20observe%2C%20false%29%3B%0A%09unload%28function%20%28%29Services.prefs.removeObserver%28root%2C%20observe%29%29%3B%0A%7D%3B%0A%0Afunction%20btnPref%28aKey%29%20%7B%0A%09var%20%7B%0A%09%09branch%2C%0A%09%09defaults%0A%09%7D%0A%09%09%20%3D%20btnPref%3B%0A%09if%20%28%21branch%29%0A%09%09branch%20%3D%20Services.prefs.getBranch%28btnPref.root%29%3B%0A%09switch%20%28typeof%20defaults%5BaKey%5D%29%20%7B%0A%09case%20%22boolean%22%3A%0A%09%09return%20branch.getBoolPref%28aKey%29%3B%0A%09%09break%3B%0A%09case%20%22number%22%3A%0A%09%09return%20branch.getIntPref%28aKey%29%3B%0A%09%09break%3B%0A%09case%20%22string%22%3A%0A%09%09return%20branch.getComplexValue%28aKey%2C%20Ci.nsISupportsString%29.data%3B%0A%09%09break%3B%0A%09%7D%0A%09return%20null%3B%0A%7D%0A%0Afunction%20unload%28aCallback%2C%20aContainer%29%20%7B%0A%09var%20unloaders%20%3D%20unload.unloaders%3B%0A%09if%20%28unloaders%20%3D%3D%3D%20null%29%0A%09%09unloaders%20%3D%20unload.unloaders%20%3D%20%5B%5D%3B%0A%09if%20%28aCallback%20%3D%3D%3D%20null%29%20%7B%0A%09%09unloaders.slice%28%29.forEach%28function%20%28unloader%29unloader%28%29%29%3B%0A%09%09%09unloaders.length%20%3D%200%3B%0A%09%7D%0A%09if%20%28aContainer%20%21%3D%3D%20null%29%20%7B%0A%09%09aContainer.addEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%09%09var%20origCallback%20%3D%20aCallback%3B%0A%09%09callback%20%3D%20function%20%28%29%20%7B%0A%09%09%09aContainer.removeEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%09%09%09origCallback%28%29%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%0A%09function%20unloader%28%29%20%7B%0A%09%09try%20%7B%0A%09%09%09callback%28%29%3B%0A%09%09%7D%20catch%20%28err%29%20%7B%0A%09%09%09Components.utils.reportError%28err%29%3B%0A%09%09%7D%0A%09%7D%0A%09unloaders.push%28unloader%29%3B%0A%09function%20removeUnloader%28%29%20%7B%0A%09%09var%20index%20%3D%20unloaders.indexOf%28unloader%29%3B%0A%09%09if%20%28index%20%21%3D%3D%20-1%29%0A%09%09%09unloaders.splice%28index%2C%201%29%3B%0A%09%7D%0A%09return%20removeUnloader%3B%0A%7D%0A//END//%20Default%20preferences%20management%0A%0Avar%20GrabScroll%20%3D%20%7B%0A%09mStatus%20%3A%200%2C%20//0%3AIdle%2C%201%3A%20during%20mousedown%2C%202%3A%20during%20mousemove%2C%203%3A%20mouseup%20After%20scrolling%0A%09mLastX%20%3A%200%2C%0A%09mLastY%20%3A%200%2C%0A%09_target%20%3A%20null%2C%20//%20Element%20the%20mouse%20is%20pointing%0A%09_target2%20%3A%20null%2C%20//%20Element%20the%20mouse%20is%20pointing%0A%09_isImage%20%3A%20false%2C%0A%09_timer%20%3A%200%2C%20//%20Save%20time%20when%20mouseup%20to%20determine%20the%20threshold.%0A%09_mtimer%20%3A%20false%2C%0A%09cScroll%20%3A%20false%2C%0A%09cSpeedX%20%3A%200%2C%0A%09cSpeedY%20%3A%200%2C%0A%09_doc%20%3A%20null%2C%0A%09_MOVERATEpZoom%20%3A%201%2C%0A%09_window%20%3A%20null%2C%0A%09initGrabScroll%20%3A%20function%20%28%29%20%7B%0A%09%09if%20%28GrabScroll.activeBrowser%28%29.mPanelContainer%29%20%7B%0A%09%09%09this._window%20%3D%20GrabScroll.activeBrowser%28%29.mPanelContainer%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09this._window%20%3D%20document.getElementById%28%27content%27%29%3B%0A%09%09%7D%0A%09%09this._window.setCapture%28%29%3B%0A%09%09if%20%28%21window%5B_LTN%5D%29%20%7B%0A%09%09%09this._window.addEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.addEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.addEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09gBrowser.addEventListener%28%27pagehide%27%2C%20this%2C%20false%29%3B%0A%09%09%09window%5B_LTN%5D%20%3D%20true%3B%0A%09%09%7D%0A%09%7D%2C%0A%09uninitGrabScroll%20%3A%20function%20%28%29%20%7B%0A%09%09if%20%28this._window%29%20%7B%0A%09%09%09this._window.removeEventListener%28%22mousedown%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.removeEventListener%28%22click%22%2C%20this%2C%20true%29%3B%0A%09%09%09this._window.removeEventListener%28%22mouseup%22%2C%20this%2C%20true%29%3B%0A%09%09%09gBrowser.removeEventListener%28%27pagehide%27%2C%20this%2C%20false%29%3B%0A%09%09%09this.mStatus%20%3D%3D%3D%200%3B%0A%09%09%09this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%0A%09%09delete%20window%5B_LTN%5D%3B%0A%09%7D%2C%0A%09activeBrowser%20%3A%20function%20%28%29%20%7B%0A%09%09return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%29%0A%09%09%20%7C%7C%20gBrowser%3B%0A%09%7D%2C%0A%09handleEvent%20%3A%20function%20%28event%29%20%7B%0A%09%09event%20%3D%20new%20XPCNativeWrapper%28event%29%3B%0A%09%09switch%20%28event.type%29%20%7B%0A%09%09case%20%22mousedown%22%3A%0A%09%09%09if%20%28this.cScroll%29%20%7B%0A%09%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09%09this.cSpeedX%20%3D%20this.cSpeedY%20%3D%200%3B%0A%09%09%09%7D%0A%09%09%09if%20%28btnPref%28%22GrabScrollEnabled%22%29%20%26%26%0A%09%09%09%09%21event.shiftKey%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.altKey%29%20%7B%0A%09%09%09%09this.grabStart%28event%29%3B%0A%09%09%09%7D%20else%20if%20%28%21btnPref%28%22GrabScrollEnabled%22%29%20%26%26%0A%09%09%09%09event.shiftKey%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.altKey%29%20%7B%0A%09%09%09%09this.grabStart%28event%29%3B%0A%09%09%09%7D%0A%09%09%09break%3B%0A%09%09case%20%22mousemove%22%3A%0A%09%09%09this.mousemove%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22click%22%3A%0A%09%09%09this.click%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22mouseup%22%3A%0A%09%09%09this.mouseup%28event%29%3B%0A%09%09%09break%3B%0A%09%09case%20%27pagehide%27%3A%0A%09%09%09this._doc%20%3D%20null%3B%0A%09%09%09this._target%20%3D%20null%3B%0A%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09this._isImage%20%3D%20null%3B%0A%09%09%09this.NS%20%3D%20this.EW%20%3D%20this.NSEW%20%3D%20null%3B%0A%09%09%09break%3B%0A%09%09%7D%0A%09%7D%2C%0A%09grabStart%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28this.mStatus%20%3D%3D%3D%203%29%0A%09%09%09this.mStatus%20%3D%200%3B%0A%09%09//%20Do%20not%20start%20GrabScroll%20if%20you%20fire%20the%20mouse%20down%20continuously.%0A%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%29%20%7B%0A%09%09%09if%20%28Math.abs%28this.mLastX%20-%20event.screenX%29%20%3C%205%20%26%26%0A%09%09%09%09Math.abs%28this.mLastY%20-%20event.screenY%29%20%3C%205%29%0A%09%09%09%09return%0A%09%09%7D%0A%09%09var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%09%09if%20%28%21doc%29%0A%09%09%09return%3B%0A%09%09if%20%28doc.contentType%20%3D%3D%3D%20%27application/vnd.mozilla.xul+xml%27%29%0A%09%09%09return%3B%0A%09%09this._doc%20%3D%20doc%3B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%200%29%20%7B%0A%09%09%09this._target%20%3D%20event.originalTarget%3B%0A%09%09%09if%20%28/%5E%28html%7Cbody%29%24/.test%28this._target.localName.toLowerCase%28%29%29%20%7C%7C%20this._target.clientHeight%20%3E%2030000%29%0A%09%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09else%20if%20%28/div/.test%28this._target.localName.toLowerCase%28%29%29%20%26%26%20this._target.clientHeight%20%3E%201000%29%0A%09%09%09%09this._target2%20%3D%20null%3B%0A%09%09%09else%0A%09%09%09%09this._target2%20%3D%20this._target%3B%0A%09%09%09//%20Editable%20element%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentEditableNode%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Draggable%20element%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentDraggableNode%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Factors%20to%20be%20steamed%20does%20not%20start%20the%20GrabScroll%0A%09%09%09if%20%28this.isIgnore%28this._target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Video%20control%20does%20not%20start%20the%20GrabScroll%0A%09%09%09if%20%28this.isVideoControl%28event.target%29%29%0A%09%09%09%09return%3B%0A%09%09%09//%20Clickable%20links%20does%20not%20start%20GrabScroll%0A%09%09%09if%20%28this.isParentClickableNode%28this._target%29%29%20%7B%0A%09%09%09%09if%20%28btnPref%28%22NotClicableLink%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09//%20Blocking%20of%20DragStart%20on%20links%0A%09%09%09%09if%20%28%21%28%27linkDragSelection%27%20in%20window%29%29%0A%09%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%7D%0A%09%09%09//%20On%20images%0A%09%09%09this._isImage%20%3D%20this.isImage%28event%29%3B%0A%09%09%09if%20%28this._isImage%29%20%7B%0A%09%09%09%09//%20Images%20does%20not%20start%20the%20GrabScroll%0A%09%09%09%09if%20%28btnPref%28%22NotImage%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09//%20DragStart%20block%20on%20images%0A%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%7D%0A%09%09%09//Compativility%20with%20ResizeTa%0A%09%09%09var%20target%20%3D%20this._target%3B%0A%09%09%09while%20%28target%29%20%7B%0A%09%09%09%09if%20%28%22getAttribute%22%20in%20target%20%26%26%20target.getAttribute%28%22draggable%22%29%20%3D%3D%3D%20%22true%22%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09var%20style%20%3D%20this._doc.defaultView.getComputedStyle%28target%2C%20null%29%3B%0A%09%09%09%09%09if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22cursor%22%29%29%29%0A%09%09%09%09%09%09return%3B%0A%09%09%09%09%09else%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22auto%22%29%29%29%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%09%09target%20%3D%20target.parentNode%3B%0A%09%09%09%7D%0A%09%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3E%200%29%20%7B%0A%09%09%09%09event.preventDefault%28%29%3B%0A%09%09%09%09event.stopPropagation%28%29%3B%0A%09%09%09%7D%0A%09%09%09this._timer%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%09%09%09this.mLastX%20%3D%20event.screenX%3B%0A%09%09%09this.mLastY%20%3D%20event.screenY%3B%0A%09%09%09this.mStatus%20%3D%201%3B%0A%09%09%09this._MOVERATEpZoom%20%3D%20btnPref%28%22MoveRate%22%29%20/%20%28ZoomManager.useFullZoom%20%3F%20ZoomManager.zoom%20%3A%201%29%3B%0A%09%09%09%5Bthis.NS%2C%20this.EW%2C%20this.NSEW%5D%20%3D%20this.getScrollView%28event%29%3B%0A%09%09%09this._window.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09adjustedTimer%20%3A%20function%20%28%29%20%7B%0A%09%09var%20magTimer%20%3D%20btnPref%28%22Timer%22%29%3B%0A%09%09return%20magTimer%3B%0A%09%7D%2C%0A%09grabFinish%20%3A%20function%20%28%29%20%7B%0A%09%09this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%09%09var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%09%09if%20%28selCon%29%0A%09%09%09selCon.setDisplaySelection%28selCon.SELECTION_ON%29%3B%0A%09%7D%2C%0A%09mousemove%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28this.mStatus%20%3D%3D%3D%202%20%7C%7C%20this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09var%20x%20%3D%20event.screenX%3B%0A%09%09%09var%20y%20%3D%20event.screenY%3B%0A%09%09%09var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%09%09%09if%20%28this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%09if%20%28%21this._isImage%20%26%26%0A%09%09%09%09%09%28new%20Date%28%29.getTime%28%29%20-%20this._timer%29%20%3E%20this.adjustedTimer%28%29%29%20%7B%0A%09%09%09%09%09this.grabFinish%28%29%3B%0A%09%09%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%09if%20%28Math.abs%28x%20-%20this.mLastX%29%20%3C%20btnPref%28%22ToleranceWhenNoHScroll%22%29%29%0A%09%09%09%09%09var%20movingh%20%3D%20Math.abs%28x%20-%20this.mLastX%29%20%3E%20Math.abs%28y%20-%20this.mLastY%29%20*%2050%3B%0A%09%09%09%09if%20%28%21this._isImage%20%26%26%20btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%20%26%26%20this.isText%28event%29%20%26%26%20movingh%20%26%26%20%21this.EW%29%20%7B%0A%09%09%09%09%09this.grabFinish%28%29%3B%0A%09%09%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%09%09%09return%3B%0A%09%09%09%09%7D%0A%09%09%09%09if%20%28Math.abs%28x%20-%20this.mLastX%29%20+%20Math.abs%28y%20-%20this.mLastY%29%20%3C%20btnPref%28%22Tolerance%22%29%29%0A%09%09%09%09%09return%3B%0A%09%09%09%09if%20%28btnPref%28%22MouseButton%22%29%20%3D%3D%3D%200%29%20%7B%0A%09%09%09%09%09var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%09%09%09%09%09if%20%28selCon%29%20%7B%0A%09%09%09%09%09%09var%20selection%20%3D%20selCon.getSelection%28selCon.SELECTION_NORMAL%29%3B%0A%09%09%09%09%09%09selection.removeAllRanges%28%29%3B%0A%09%09%09%09%09%09selCon.setDisplaySelection%28selCon.SELECTION_OFF%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09if%20%28%22ucjsMouseGestures%22%20in%20window%29%20%7B%0A%09%09%09%09%09%09ucjsMouseGestures._isMouseDownR%20%3D%20false%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09this.mLastX%20%3D%20x%20-%20%28x%20-%20this.mLastX%29%20/%2010%3B%0A%09%09%09%09this.mLastY%20%3D%20y%20-%20%28y%20-%20this.mLastY%29%20/%2010%3B%0A%09%09%09%09this.mStatus%20%3D%202%3B%0A%09%09%09%7D%0A%09%09%09if%20%28this._mtimer%29%0A%09%09%09%09return%3B%0A%09%09%09this.cSpeedX%20%3D%20this._MOVERATEpZoom%20*%20%28x%20-%20this.mLastX%29%3B%0A%09%09%09this.cSpeedY%20%3D%20this._MOVERATEpZoom%20*%20%28y%20-%20this.mLastY%29%3B%0A%09%09%09this.scroll%28event%29%3B%0A%09%09%09this.mLastX%20%3D%20x%3B%0A%09%09%09this.mLastY%20%3D%20y%3B%0A%09%09%7D%0A%09%7D%2C%0A%09getSelconForDoc%20%3A%20function%20getSelconForDoc%28doc%29%20%7B%0A%09%09if%20%28%21doc%29%0A%09%09%09return%20null%3B%0A%09%09var%20aFrame%20%3D%20doc.defaultView%3B%0A%09%09if%20%28%21aFrame%29%0A%09%09%09return%20null%3B%0A%09%09var%20docShell%20%3D%20this.getDocShellForFrame%28aFrame%29%3B%0A%09%09var%20selCon%20%3D%20docShell%0A%09%09%09.QueryInterface%28Ci.nsIInterfaceRequestor%29%0A%09%09%09.getInterface%28Ci.nsISelectionDisplay%29%0A%09%09%09.QueryInterface%28Ci.nsISelectionController%29%3B%0A%09%09return%20selCon%3B%0A%09%7D%2C%0A%09getDocShellForFrame%20%3A%20function%20getDocShellForFrame%28aFrame%29%20%7B%0A%09%09return%20aFrame%0A%09%09.QueryInterface%28Ci.nsIInterfaceRequestor%29%0A%09%09.getInterface%28Ci.nsIWebNavigation%29%0A%09%09.QueryInterface%28Ci.nsIDocShell%29%3B%0A%09%7D%2C%0A%09click%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%202%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%7D%0A%09%09if%20%28event.button%20%3D%3D%3D%200%20%26%26%20this.mStatus%20%3E%3D%202%20%26%26%20this._doc%20instanceof%20Ci.nsIImageDocument%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%7D%0A%09%09this.grabFinish%28%29%3B%0A%09%09this.mStatus%20%3D%200%3B%0A%09%7D%2C%0A%09mouseup%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3E%201%29%20%7B%0A%09%09%09event.preventDefault%28%29%3B%0A%09%09%09event.stopPropagation%28%29%3B%0A%09%09%09this.grabFinish%28%29%3B%0A%09%09%09if%20%28this.mStatus%20%3D%3D%3D%202%29%0A%09%09%09%09this.mStatus%20%3D%203%3B%0A%09%09%09if%20%28btnPref%28%22InertiaEnabled%22%29%20%26%26%0A%09%09%09%09%28Math.abs%28this.cSpeedX%29%20%3E%20btnPref%28%22InertiaThreshold%22%29%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20btnPref%28%22InertiaThreshold%22%29%29%29%20%7B%0A%09%09%09%09if%20%28this.cScroll%29%0A%09%09%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09%09var%20v%20%3D%20btnPref%28%22InertiaRate%22%29%3B%0A%09%09%09%09if%20%28this.cSpeedX%20%3E%200%29%0A%09%09%09%09%09this.cSpeedX%20%3D%20Math.min%28this.cSpeedX%2C%20v%29%3B%0A%09%09%09%09else%0A%09%09%09%09%09this.cSpeedX%20%3D%20Math.max%28this.cSpeedX%2C%20-v%29%3B%0A%09%09%09%09if%20%28this.cSpeedY%20%3E%200%29%0A%09%09%09%09%09this.cSpeedY%20%3D%20Math.min%28this.cSpeedY%2C%20v%29%3B%0A%09%09%09%09else%0A%09%09%09%09%09this.cSpeedY%20%3D%20Math.max%28this.cSpeedY%2C%20-v%29%3B%0A%09%09%09%09this.scroll2%28event%29%3B%0A%09%09%09%09scrolling%28event%2C%20this%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20if%20%28event.button%20%3D%3D%3D%20btnPref%28%22MouseButton%22%29%20%26%26%20this.mStatus%20%3D%3D%3D%201%29%20%7B%0A%09%09%09this.grabFinish%28%29%3B%0A%09%09%09this.mStatus%20%3D%200%3B%0A%09%09%7D%0A%09%7D%2C%0A%09scroll2%20%3A%20function%20%28event%29%20%7B%0A%09%09var%20ay%20%3D%20Math.abs%28this.cSpeedY%29%3B%0A%09%09var%20ax%20%3D%20Math.abs%28this.cSpeedX%29%3B%0A%09%09if%20%28ay%20%3C%201%20%26%26%20ax%20%3C%201%29%20%7B%0A%09%09%09clearTimeout%28this.cScroll%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09this.scroll%28event%29%3B%0A%09%09if%20%28ax%20%3E%3D%20100%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%20100%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%2020%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%2010%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%205%29%0A%09%09%09this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%09%09else%20if%20%28ax%20%3C%201%29%0A%09%09%09this.cSpeedX%20%3D%200%3B%0A%09%09if%20%28ay%20%3E%3D%20100%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%20100%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%2020%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%2010%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%205%29%0A%09%09%09this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%09%09else%20if%20%28ay%20%3C%201%29%0A%09%09%09this.cSpeedY%20%3D%200%3B%0A%09%7D%2C%0A%09scroll%20%3A%20function%20%28event%29%20%7B%0A%09%09this._mtimer%20%3D%20true%3B%0A%09%09if%20%28this.NS%20%26%26%20this.NS%20%3D%3D%3D%20this.EW%29%20%7B%0A%09%09%09if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%09%09%09%09this.NS.scrollBy%28this.cSpeedX%2C%20this.cSpeedY%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09this.NS.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%09%09%09%09this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09if%20%28this.NS%29%20%7B%0A%09%09%09%09if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%09%09%09%09%09this.NS.scrollBy%280%2C%20this.cSpeedY%29%3B%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09if%20%28this.EW%29%20%7B%0A%09%09%09%09if%20%28%22scrollBy%22%20in%20this.EW%29%20%7B%0A%09%09%09%09%09this.EW.scrollBy%28this.cSpeedX%2C%200%29%3B%0A%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09this.EW.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09setTimeout%28function%20%28self%29%20%7B%0A%09%09%09self._mtimer%20%3D%20false%3B%0A%09%09%7D%2C%2020%2C%20this%29%3B%0A%09%7D%2C%0A%09isText%20%3A%20function%20%28event%29%20%7B%0A%09%09return%20event.explicitOriginalTarget.nodeType%20%3D%3D%3D%20document.TEXT_NODE%3B%0A%09%7D%2C%0A%09isImage%20%3A%20function%20%28event%29%20%7B%0A%09%09if%20%28event.target%20instanceof%20Ci.nsIImageLoadingContent%29%0A%09%09%09return%20event.target%3B%0A%09%09else%0A%09%09%09return%20null%3B%0A%09%7D%2C%0A%09isIgnore%20%3A%20function%20%28aNode%29%20%7B%0A%09%09while%20%28aNode%29%20%7B%0A%09%09%09var%20name%20%3D%20aNode.nodeName.toLowerCase%28%29%3B%0A%09%09%09if%20%28name%20%3D%3D%3D%20%22html%22%29%0A%09%09%09%09return%20false%3B%0A%09%09%09if%20%28/%28scrollbar%7Cselect%7Coption%7Cembed%7Cobject%7Ctree%7Capplet%7Cstatusbar%29/.test%28name%29%29%0A%09%09%09%09return%20true%3B%0A%09%09%09aNode%20%3D%20aNode.parentNode%3B%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09isParentClickableNode%20%3A%20function%20%28aNode%29%20%7B%0A%09%09if%20%28%21aNode%29%0A%09%09%09return%20null%3B%0A%09%09var%20d%20%3D%20aNode.ownerDocument%3B%0A%09%09try%20%7B%0A%09%09%09var%20xpathResult%20%3D%20d.evaluate%28%0A%09%09%09%09%09/*%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%20and%20@href%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C*/%0A%09%09%09%09%09%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C%0A%09%09%09%09%09aNode%2C%0A%09%09%09%09%09this.NSResolver%2C%0A%09%09%09%09%09XPathResult.FIRST_ORDERED_NODE_TYPE%2C%0A%09%09%09%09%09null%29%3B%0A%09%09%7D%20catch%20%28e%29%20%7B%0A%09%09%09return%20null%3B%0A%09%09%7D%0A%09%09return%20xpathResult.singleNodeValue%3B%0A%09%7D%2C%0A%09NSResolver%20%3A%20%7B%0A%09%09lookupNamespaceURI%20%3A%20function%20%28aPrefix%29%20%7B%0A%09%09%09switch%20%28aPrefix%29%20%7B%0A%09%09%09case%20%27xul%27%3A%0A%09%09%09%09return%20%27http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%27%3B%0A%09%09%09case%20%27html%27%3A%0A%09%09%09case%20%27xhtml%27%3A%0A%09%09%09%09return%20%27http%3A//www.w3.org/1999/xhtml%27%3B%0A%09%09%09case%20%27xlink%27%3A%0A%09%09%09%09return%20%27http%3A//www.w3.org/1999/xlink%27%3B%0A%09%09%09default%3A%0A%09%09%09%09return%20%27%27%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%2C%0A%09isParentEditableNode%20%3A%20function%20%28node%29%20%7B%0A%09%09try%20%7B%0A%09%09%09if%20%28node.ownerDocument.designMode%20%3D%3D%3D%20%27on%27%29%0A%09%09%09%09return%20node%3B%0A%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%0A%09%09while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09if%20%28%21%28node%20instanceof%20Ci.nsIDOMNSEditableElement%29%29%0A%09%09%09%09%09throw%200%3B%0A%09%09%09%09node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%09%09%09%09return%20node%3B%0A%09%09%09%7D%20catch%20%28e%29%20%7B%7D%0A%09%09%09node%20%3D%20node.parentNode%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09isParentDraggableNode%20%3A%20function%20%28node%29%20%7B%0A%09%09while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%09%09%09if%20%28node.getAttribute%28%27draggable%27%29%20%3D%3D%3D%20%27true%27%29%0A%09%09%09%09return%20node%3B%0A%09%09%09node%20%3D%20node.parentNode%3B%0A%09%09%7D%0A%09%09return%20null%3B%0A%09%7D%2C%0A%09isVideoControl%20%3A%20function%20%28node%29%20%7B%0A%09%09if%20%28/%5E%28audio%7Cvideo%29%24/i.test%28node.localName%29%29%20%7B%0A%09%09%09return%20true%3B%0A%09%09%09var%20i%20%3D%200%3B%0A%09%09%09while%20%28i%20%3C%20node.childNodes.length%29%20%7B%0A%09%09%09%09var%20child%20%3D%20node.childNodes%5Bi%5D%3B%0A%09%09%09%09if%20%28child.hasAttribute%28%27controls%27%29%20%26%26%20child.getAttribute%28%27controls%27%29%20%3D%3D%3D%20%27controls%27%29%20%7B%0A%09%09%09%09%09return%20true%3B%0A%09%09%09%09%7D%0A%09%09%09%09i++%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%2C%0A%09button%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Mouse%20button%20%28L%20M%20R%29%3A%20%22%2C%20%22LMR%22.substr%28btnPref%28%22MouseButton%22%29%2C%201%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09switch%20%28value.toUpperCase%28%29%29%20%7B%0A%09%09case%20%22M%22%3A%0A%09%09%09value%20%3D%201%3B%0A%09%09%09break%3B%0A%09%09case%20%22R%22%3A%0A%09%09%09value%20%3D%202%3B%0A%09%09%09break%3B%0A%09%09default%3A%0A%09%09case%20%22L%22%3A%0A%09%09%09value%20%3D%200%3B%0A%09%09%09break%3B%0A%09%09%7D%0A%09%09sIP%28%22MouseButton%22%2C%20value%29%3B%0A%09%7D%2C%0A%09threshold%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Stop%20GrabScroll%20if%20mouse%20button%20is%20pressed%20longer%20than%20this%20time%20%28In%20milliseconds%29.%22%2C%20btnPref%28%22Timer%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09var%20timer%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28timer%20%3C%3D%200%20%7C%7C%20%21timer%29%0A%09%09%09timer%20%3D%201000%3B%0A%09%09sIP%28%22Timer%22%2C%20timer%29%3B%0A%09%7D%2C%0A%09moverate%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Drag%20direction%20and%20speed%3A%5Cn%20Negative%20or%20positive%20values.%22%2C%20btnPref%28%22MoveRate%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09var%20moveRate%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21moveRate%29%0A%09%09%09moveRate%20%3D%20-1%3B%0A%09%09sIP%28%22MoveRate%22%2C%20moveRate%29%3B%0A%09%7D%2C%0A%09inertiaToggle%20%3A%20function%20%28%29%20%7B%0A%09%09var%20inertia%20%3D%20%21btnPref%28%22InertiaEnabled%22%29%3B%0A%09%09sBP%28%22InertiaEnabled%22%2C%20inertia%29%3B%0A%09%7D%2C%0A%09inertiaThreshold%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20threshold%3A%20%22%2C%20btnPref%28%22InertiaThreshold%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09var%20inertiaThreshold%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21inertiaThreshold%29%0A%09%09%09inertiaThreshold%20%3D%2020%3B%0A%09%09sIP%28%22InertiaThreshold%22%2C%20inertiaThreshold%29%3B%0A%09%7D%2C%0A%09inertiarate%20%3A%20function%20%28%29%20%7B%0A%09%09var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20speed%3A%20%22%2C%20btnPref%28%22InertiaRate%22%29%29%3B%0A%09%09if%20%28%21value%29%0A%09%09%09return%3B%0A%09%09var%20inertiaRate%20%3D%20parseInt%28value%2C%2010%29%3B%0A%09%09if%20%28%21inertiaRate%29%0A%09%09%09inertiaRate%20%3D%2050%3B%0A%09%09sIP%28%22InertiaRate%22%2C%20inertiaRate%29%3B%0A%09%7D%2C%0A%09clickable%20%3A%20function%20%28%29%20%7B%0A%09%09var%20notClicableLink%20%3D%20%21btnPref%28%22NotClicableLink%22%29%3B%0A%09%09sBP%28%22NotClicableLink%22%2C%20notClicableLink%29%3B%0A%09%7D%2C%0A%09getScrollView%20%3A%20function%20%28event%29%20%7B%0A%09%09var%20NS%2C%0A%09%09EW%2C%0A%09%09NSEW%3B%0A%09%09NS%20%3D%20EW%20%3D%20NSEW%20%3D%20null%3B%0A%09%09var%20_scrollingView%20%3D%20null%3B%0A%09%09var%20overflowx%2C%0A%09%09overflowy%2C%0A%09%09ox%2C%0A%09%09oy%3B%0A%09%09var%20scw%2C%0A%09%09sch%2C%0A%09%09horz%2C%0A%09%09vert%3B%0A%09%09var%20doc%2C%0A%09%09style%3B%0A%09%09var%20borderTop%3B%0A%09%09var%20borderBottom%3B%0A%09%09var%20borderLeft%3B%0A%09%09var%20borderRight%3B%0A%09%09if%20%28event.originalTarget.ownerDocument.contentType%20%3D%3D%3D%20%22application/xml%22%29%20%7B%0A%09%09%09_scrollingView%20%3D%20event.originalTarget.ownerDocument.defaultView%3B%0A%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%09%09%09%09if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09NSEW%20%3D%20_scrollingView%3B%0A%09%09%09%09%09NS%20%3D%20_scrollingView%3B%0A%09%09%09%09%7D%0A%09%09%09%09EW%20%3D%20_scrollingView%3B%0A%09%09%09%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09NS%20%3D%20_scrollingView%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09for%20%28_scrollingView%20%3D%20event.originalTarget%3B%20_scrollingView%3B%20_scrollingView%20%3D%20_scrollingView.parentNode%29%20%7B%0A%09%09%09%09if%20%28_scrollingView%20instanceof%20HTMLElement%29%20%7B%0A%09%09%09%09%09if%20%28_scrollingView.localName.toUpperCase%28%29%20%3D%3D%3D%20%22HTML%22%20%7C%7C%0A%09%09%09%09%09%09_scrollingView.localName.toUpperCase%28%29%20%3D%3D%3D%20%22BODY%22%29%20%7B%0A%09%09%09%09%09%09_scrollingView%20%3D%20_scrollingView.ownerDocument.defaultView%3B%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%20%26%26%0A%09%09%09%09%09%09%09_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%09%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%09%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09if%20%28_scrollingView.frameElement%20%26%26%20%21NS%20%26%26%20%21EW%20%26%26%20%21NSEW%29%20%7B%0A%09%09%09%09%09%09%09return%20this.getScrollView%28%7B%0A%09%09%09%09%09%09%09%09originalTarget%20%3A%20_scrollingView.frameElement%0A%09%09%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28_scrollingView.localName.toLowerCase%28%29%20%3D%3D%3D%20%22select%22%29%20%7B%0A%09%09%09%09%09%09_scrollingView.parentNode.focus%28%29%3B%0A%09%09%09%09%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09overflowx%20%3D%20%22%22%3B%0A%09%09%09%09%09overflowy%20%3D%20%22%22%3B%0A%09%09%09%09%09ox%20%3D%20true%3B%0A%09%09%09%09%09oy%20%3D%20true%3B%0A%09%09%09%09%09try%20%7B%0A%09%09%09%09%09%09doc%20%3D%20_scrollingView.ownerDocument%3B%0A%09%09%09%09%09%09style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%09%09%09%09%09%09overflowx%20%3D%20style.getPropertyValue%28%22overflow-x%22%29%3B%0A%09%09%09%09%09%09ox%20%3D%20overflowx%20%21%3D%3D%20%22hidden%22%20%26%26%20overflowx%20%21%3D%3D%20%22visible%22%3B%0A%09%09%09%09%09%09overflowy%20%3D%20style.getPropertyValue%28%22overflow-y%22%29%3B%0A%09%09%09%09%09%09oy%20%3D%20overflowy%20%21%3D%3D%20%22hidden%22%20%26%26%20overflowy%20%21%3D%3D%20%22visible%22%3B%0A%09%09%09%09%09%7D%20catch%20%28ex%29%20%7B%7D%0A%09%09%09%09%09borderTop%20%3D%200%3B%0A%09%09%09%09%09borderBottom%20%3D%200%3B%0A%09%09%09%09%09borderLeft%20%3D%200%3B%0A%09%09%09%09%09borderRight%20%3D%200%3B%0A%09%09%09%09%09if%20%28/%5E%28table%7Ctd%7Cth%29%24/i.test%28_scrollingView.localName%29%29%20%7B%0A%09%09%09%09%09%09try%20%7B%0A%09%09%09%09%09%09%09doc%20%3D%20_scrollingView.ownerDocument%3B%0A%09%09%09%09%09%09%09style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%09%09%09%09%09%09%09borderTop%20%3D%20style.getPropertyValue%28%22border-top-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderBottom%20%3D%20style.getPropertyValue%28%22border-bottom-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderLeft%20%3D%20style.getPropertyValue%28%22border-left-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%09borderRight%20%3D%20style.getPropertyValue%28%22border-right-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%09%09%09%09%09%09%7D%20catch%20%28ex%29%20%7B%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09scw%20%3D%20_scrollingView.clientWidth%3B%0A%09%09%09%09%09horz%20%3D%20ox%20%26%26%20scw%20%21%3D%3D%200%20%26%26%0A%09%09%09%09%09%09scw%20+%20borderLeft%20+%20borderRight%20%3C%20_scrollingView.scrollWidth%3B%0A%09%09%09%09%09sch%20%3D%20_scrollingView.clientHeight%3B%0A%09%09%09%09%09vert%20%3D%20oy%20%26%26%20sch%20%21%3D%3D%200%20%26%26%0A%09%09%09%09%09%09sch%20+%20borderTop%20+%20borderBottom%20%3C%20_scrollingView.scrollHeight%3B%0A%09%09%09%09%09if%20%28horz%20%26%26%20vert%29%20%7B%0A%09%09%09%09%09%09NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28horz%29%20%7B%0A%09%09%09%09%09%09EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09if%20%28vert%29%20%7B%0A%09%09%09%09%09%09NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%20//%20for%0A%09%09%7D%0A%09%09return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20scrolling%28aEvt%2C%20aSelf%29%20%7B%0A%09var%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%09aSelf.scroll2%28aEvt%29%3B%0A%09aSelf.cScroll%20%3D%20setTimeout%28arguments.callee%2C%0A%09%09%09Math.max%2825%20-%20%28%28new%20Date%28%29%29.getTime%28%29%20-%20Start%29%2C%200%29%2C%20aEvt%2C%20aSelf%29%3B%0A%7D%0A%0Aif%20%28btnPref%28%22GrabScrollEnabled%22%29%29%0A%09GrabScroll.initGrabScroll%28%29%3B%0Athis.onDestroy%20%3D%20function%20%28aReason%29%20%7B%0A%09%28aReason%20%3D%3D%3D%20%22update%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22delete%22%29%20%26%26%20GrabScroll.uninitGrabScroll%28%29%3B%0A%7D%3B%0A%0Afunction%20sBP%28aKey%2C%20aVal%2C%20aBranch%29%20%7B%20//Set%20Boolean%20Pref%0A%09Services.prefs.setBoolPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%2C%20aVal%29%3B%0A%7D%0A%0Afunction%20sIP%28aKey%2C%20aVal%2C%20aBranch%29%20%7B%20//Set%20Integer%20Pref%0A%09Services.prefs.setIntPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%2C%20aVal%29%3B%0A%7D%0A%0Afunction%20gBP%28aKey%2C%20aBranch%29%20%7B%20//Get%20Boolean%20Pref%0A%09return%20Services.prefs.getBoolPref%28%28%21aBranch%29%20%3F%20PREF_BRANCH%20+%20aKey%20%3A%20aKey%29%3B%0A%7D%0A%0Athis.toggleGrabScroll%20%3D%20function%20%28%29%20%7B%0A%09var%20state%20%3D%20btnPref%28%22GrabScrollEnabled%22%29%3B%0A%09sBP%28%22GrabScrollEnabled%22%2C%20%21state%29%3B%0A%09notifyme%28null%2C%20%22GrabScroll%20%22%20+%20%28btnPref%28%22GrabScrollEnabled%22%29%20%3F%20%22ENABLED%22%20%3A%20%22DISABLED%22%29%2C%20%22%22%29%3B%0A%09self.init%28%29%3B%0A%7D%3B%0A%0Afunction%20%24XML%28aXML%29%20%7B%20//%20Return%20parsed%20XML%0A%09aXML%20%3D%20aXML.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%20//%20Linearize%20XML%0A%09return%20%28new%20DOMParser%29.parseFromString%28aXML%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%0A%0Afunction%20notifyme%28aImg%2C%20aTitle%2C%20aMsg%29%20%7B%20//%20Notification%20function%0A%09var%20notFeature%20%3D%20gBP%28%22notification.feature.enabled%22%2C%20true%29%3B%0A%09try%20%7B%0A%09%09var%20ASrv%20%3D%20Cc%5B%27@mozilla.org/alerts-service%3B1%27%5D.getService%28Ci.nsIAlertsService%29%3B%0A%09%09if%20%28%21notFeature%29%20%7B%0A%09%09%09sBP%28%22notification.feature.enabled%22%2C%20true%2C%20true%29%3B%0A%09%09%09setTimeout%28function%20%28%29%20%7B%0A%09%09%09%09ASrv.showAlertNotification%28aImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%22%22%2C%20null%29%3B%0A%09%09%09%09sBP%28%22notification.feature.enabled%22%2C%20false%2C%20true%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%20else%0A%09%09%09ASrv.showAlertNotification%28aImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%22%22%2C%20null%29%3B%0A%09%7D%20catch%20%28aEr%29%20%7B%0A%09%09var%20win%20%3D%20Components.classes%5B%27@mozilla.org/embedcomp/window-watcher%3B1%27%5D.%0A%09%09%09getService%28Components.interfaces.nsIWindowWatcher%29.%0A%09%09%09openWindow%28null%2C%20%27chrome%3A//global/content/alerts/alert.xul%27%2C%0A%09%09%09%09%27_blank%27%2C%20%27chrome%2Ctitlebar%3Dno%2Cpopup%3Dyes%27%2C%20null%29%3B%0A%09%09win.arguments%20%3D%20%5BaImg%2C%20aTitle%2C%20aMsg%2C%20false%2C%20%27%27%5D%3B%0A%09%7D%0A%7D%0Athis.onclick%20%3D%20function%20%28aEvt%29%20%7B%0A%09if%20%28aEvt.button%20%3D%3D%3D%201%20%26%26%20%21aEvt.shiftKey%20%26%26%20%21aEvt.ctrlKey%20%26%26%20%21aEvt.altKey%29%20%7B%0A%09%09var%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%0A%09%09%5B%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Button%20to%20start%20the%20GrabScroll%22%2C%20tltp%3A%20%22Choose%20the%20mouse%20button%20with%20which%20to%20start%20the%20GrabScroll.%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27button%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuseparator%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22GrabScroll%20start%20threshold%22%2C%20tltp%3A%20%22Time%20in%20milliseconds%20after%20which%20the%20GrabScroll%20is%20canceled%20if%20the%20cursor%20is%20not%20moved.%22%2C%20cmd%3A%20%22sdocument.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27threshold%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22GrabScroll%20speed%20%26amp%3B%20direction%22%2C%20tltp%3A%20%22Drag%20direction%20and%20speed.%20With%20a%20negative%20value%2C%20the%20page%20content%20moves%20in%20the%20same%20direction%20as%20the%20cursor.%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27moverate%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuseparator%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Scroll%20inertia%22%2C%20type%3A%20%22checkbox%22%2C%20checked%3A%20%22%22%20+%20btnPref%28%27InertiaEnabled%27%29%20+%20%22%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27inertiaToggle%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Scroll%20inertia%20threshold%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27inertiaThreshold%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Scroll%20inertia%20speed%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27inertiarate%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuseparator%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Cancel%20GrabScroll%20on%20images%22%2C%20type%3A%20%22checkbox%22%2C%20checked%3A%20%22%22%20+%20btnPref%28%22NotImage%22%29%20+%20%22%22%2C%20tltp%3A%20%22Do%20not%20start%20GrabScroll%20if%20cursor%20is%20over%20an%20image.%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27NotImage%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%2C%0A%09%09%09%7BnodeName%3A%20%22menuitem%22%2C%20label%3A%20%22Cancel%20GrabScroll%20on%20links%22%2C%20type%3A%20%22checkbox%22%2C%20checked%3A%20%22%22%20+%20btnPref%28%27NotClicableLink%27%29%20+%20%22%22%2C%20tltp%3A%20%22Do%20not%20start%20GrabScroll%20if%20cursor%20is%20over%20a%20clickable%20link.%22%2C%20cmd%3A%20%22document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29.cmds%28%27clickable%27%29%3Bevent.stopPropagation%28%29%3B%22%7D%0A%09%09%5D.forEach%28function%28m%29%20%7B%0A%0A%09%09%09var%20mItem%20%3D%20document.createElement%28m.nodeName%29%3B%0A%0A%09%09%09if%20%28%27label%27%20in%20m%29%20mItem.setAttribute%28%27label%27%2C%20m.label%29%3B%0A%09%09%09if%20%28%27type%27%20in%20m%29%20mItem.setAttribute%28%27type%27%2C%20m.type%29%3B%0A%09%09%09if%20%28%27checked%27%20in%20m%29%20mItem.setAttribute%28%27checked%27%2C%20m.checked%29%3B%0A%09%09%09if%20%28%27tltp%27%20in%20m%29%20mItem.setAttribute%28%27tooltiptext%27%2C%20m.tltp%29%3B%0A%09%09%09if%20%28%27cmd%27%20in%20m%29%20mItem.setAttribute%28%27oncommand%27%2C%20m.cmd%29%3B%0A%0A%09%09%09menuPopup.appendChild%28mItem%29%3B%0A%09%09%7D%29%3B%0A%0A%09%09menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%09%09addDestructor%28function%28%29%20%7BmenuPopup.parentNode.removeChild%28menuPopup%29%7D%29%3B%0A%09%7D%0A%7D%0A%0A%0Athis.cmds%20%3D%20function%20%28aCmd%29%20%7B%0A%09switch%20%28aCmd%29%20%7B%0A%09case%20%22button%22%3A%0A%09%09GrabScroll.button%28%29%3B%0A%09%09break%3B%0A%09case%20%22threshold%22%3A%0A%09%09GrabScroll.threshold%28%29%3B%0A%09%09break%3B%0A%09case%20%22moverate%22%3A%0A%09%09GrabScroll.moverate%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiaToggle%22%3A%0A%09%09GrabScroll.inertiaToggle%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiaThreshold%22%3A%0A%09%09GrabScroll.inertiaThreshold%28%29%3B%0A%09%09break%3B%0A%09case%20%22inertiarate%22%3A%0A%09%09GrabScroll.inertiarate%28%29%3B%0A%09%09break%3B%0A%09case%20%22clickable%22%3A%0A%09%09GrabScroll.clickable%28%29%3B%0A%09%09break%3B%0A%09case%20%22NotImage%22%3A%0A%09%09sBP%28%22NotImage%22%2C%20%21btnPref%28%22NotImage%22%29%29%3B%0A%09%09break%3B%0A%09%7D%0A%7D%3B%0A%0Athis.style.opacity%20%3D%20btnPref%28%22GrabScrollEnabled%22%29%20%3F%20%221%22%20%3A%20%22.50%22%3B%0A%0Athis.tooltipText%20%3D%20%22%5Cn%5Ct%22%20+%20%28self.label%20%7C%7C%20self.name%29%20+%20%22%5Cn%5Cn%22%20+%0A%09%22%5CtL%3D%20Enable/Disable%20GrabScroll%5Ct%5Cn%22%20+%0A%09%22%5CtM%3D%20Open%20Options%20menu%5Ct%5Cn%5Cn%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.toggleGrabScroll%28%29%3B%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

Спасибо за наводку. У Alice0775 много потаскал, а это не видел. Как раз аддон "Grab and Drag" на грани подыхания. У Alice0775, кстати, новее версия есть GrabScroll_Fx29.uc.xul, но я не потяну под CB его переделать. Можете поставить  userchrome.js.xpi + этот userChrome.js должен лежать в папке chrome, и туда же GrabScroll_Fx29.uc.xul сохранить.

UPD: Починил и менюшку кнопки по СКМ.

Отредактировано turbot (21-04-2016 01:43:42)

Отсутствует

 

№120321-04-2016 19:07:15

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

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

turbot пишет

кстати, новее версия есть GrabScroll_Fx29.uc.xul, но я не потяну под CB его переделать.

Кнопка GrabScroll которую ты исправлял как раз создана на основе GrabScroll_Fx29.uc.xul

Отсутствует

 

№120421-04-2016 19:24:37

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

bunda1
Может и так, но я имел ввиду, что код текущей версии содержит много правок, которых нет в кнопке.

Может вы переделаете текущую версию под CB? :blush:

Отредактировано turbot (21-04-2016 19:24:54)

Отсутствует

 

№120521-04-2016 19:31:12

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

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

turbot пишет

bunda1
Может и так, но я имел ввиду, что код текущей версии содержит много правок, которых нет в кнопке.

А какие правки, может не стоит переделывать а лучше просто перевести кнопку что я как раз и делаю для себя?

Отсутствует

 

№120621-04-2016 19:45:28

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

bunda1 пишет

А какие правки

А чтоб я знал! :D Если б я понимал, что они делают, то, наверное, и сам переделать бы смог. :)

Но чисто эксперементально - та версия работает "глаже" с прокруткой. И текст лучше выделяется, чем с этой.

Отсутствует

 

№120721-04-2016 20:04:02

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

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

turbot пишет

Но чисто эксперементально - та версия работает "глаже" с прокруткой. И текст лучше выделяется, чем с этой.

Да кнопка от октябрь 20, 2014 значит исправлений в изначальном коде много. Можно и попробовать переделать текущую версию GrabScroll_Fx29.uc.xul под CB, но мне от этого кода начинается когнитивный диссонанс так что могу и не осилить переделку.

Отсутствует

 

№120821-04-2016 20:06:58

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

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

turbot, может лучше к автору кнопки обратиться? Odyseus не откажет. Custom Buttons • View topic - GrabScroll. bunda1 и так загружен.

Отсутствует

 

№120921-04-2016 20:10:27

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

lokiju
Я там уже второй год не могу зарегистрироваться - местный спам-фильтр не пускает. Так что только если кто другой отпишется. :)

Отсутствует

 

№121021-04-2016 20:15:55

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

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

turbot
difabor там отметился, именно в этой теме Custom Buttons • View topic - GrabScroll.)

Отсутствует

 

№121121-04-2016 20:18:04

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

lokiju пишет

bunda1 и так загружен.

Ну я ж и не настаиваю. :)
userChrome.js у меня и так стоит, хоть и пытаюсь от него избавиться, потихоньку перетаскивая нужное в cb. Но раз с этой не выйдет, придется оставить.

Отсутствует

 

№121221-04-2016 20:25:07

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

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

turbot пишет

Но раз с этой не выйдет, придется оставить.

Переделать в кнопку как раз не слишком трудно но мне обязательно нужно понять и улучшить код и переделать под себя, иначе не интересно. Вот где проблема :D

Отсутствует

 

№121322-04-2016 00:30:45

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

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

lokiju пишет

turbot
difabor там отметился, именно в этой теме Custom Buttons • View topic - GrabScroll.)

А что нужно? Что-то написать автору?
turbot, не стесняйтесь, я напишу. Но вот только проверить не смогу - у меня 28-я версия.
Имхо - дополнение Scrollbar Anywhere работает лучше - там нет паразитного выскакивания контекстного меню.
Но может и дополнение устарело?


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№121422-04-2016 00:39:00

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

difabor пишет

там нет паразитного выскакивания контекстного меню

Я лкм таскаю. Не проблема. :)

difabor пишет

А что нужно? Что-то написать автору?

Ну, во-первых (хоть это я уже и поправил)

Mishania пишет

На ff42 пользовался кнопочкой GrabScroll, обновился до ff45 и работать перестала. Можно поправить?

А во-вторых, чтобы обновил

кнопка от октябрь 20, 2014

код кнопки до актуальной у Alice0775

Commits on Apr 21, 2016

:)

Отсутствует

 

№121522-04-2016 02:03:57

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

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

turbot пишет

код кнопки до актуальной у Alice0775

Commits on Apr 21, 2016

Вот:

Выделить код

Код:

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%3EGrabScroll%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAlklEQVQ4jaWTuw0EIQxEd8UFBFeEczoYCYkm6IeiSU+zySIZjs9+JrKQ52GDvW1jGQA84905953k/gsASVJBlvoAKAajAeq8yu/eqE0l1uciYqcl6+QeYNpSm9wCvPe/nDNDCKxMABhjNG0VI1VVFFNKia8Ad/QK0HvE/Q5k+AuP+n8CWY72DHJpL0aAy0slIlYv0Gp8D2h34zRWWYjjAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20cbu.setPrefs%28%22grabScroll.enable%22%2C%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%29%3B%0A%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%0A%7D%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20...............%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.button%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0427%u0443%u0432%u0441%u0442%u0432%u0438%u0442%u0435%u043B%u044C%u043D%u043E%u0441%u0442%u044C%27%2C%20func%3A%20%27GrabScroll.threshold%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041D%u0430%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%27%2C%20func%3A%20%27GrabScroll.moverate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0418%u043D%u0435%u0440%u0446%u0438%u044F%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%27%2C%20pref%3A%20%27grabScroll.enableinertia%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041F%u043E%u0440%u043E%u0433%20%u0438%u043D%u0435%u0440%u0446%u0438%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%27%2C%20func%3A%20%27GrabScroll.inertiaThreshold%28%29%27%20%7D%2C%20%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u0435%u043B%u0438%u0447%u0438%u043D%u0430%20%u0438%u043D%u0435%u0440%u0446%u0438%u0438%20%u043F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u044F%27%2C%20func%3A%20%27GrabScroll.inertiarate%28%29%27%20%7D%2C%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0430%u0445%27%2C%20pref%3A%20%27grabScroll.clickable%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u041F%u0435%u0440%u0435%u0442%u0430%u0441%u043A%u0438%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%u0445%27%2C%20pref%3A%20%27grabScroll.notimage%27%20%7D%2C%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%22separator%22%20in%20m%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20if%20%28%22pref%22%20in%20m%29%20%7B%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.pref%29%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28m.pref%2C%20%21cbu.getPrefs%28m.pref%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20else%20mItem.onclick%20%3D%28%29%3D%3E%20eval%28m.func%29%3B%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Avar%20GrabScroll%20%3D%20%7B%0A%20%20TOLERANCE%20%20%20%20%20%20%20%20%20%3A3%2C%20%20%20%20//mouse%20move%0A%20%20TOLERANCE_WHEN_NO_H_SCROLL%20%3A%205%2C%20//%0A%20%20CANCEL_WHEN_SELECTION%3A%20true%2C%20%20//%0A%20%20IGNOREURL%3A%20%5B%22http%3A//maps.google.*/*%22%2C%20%22http%3A//maps.yahoo.co.jp/pl*%22%2C%20%22http%3A//map.yahoo.co.jp/pl*%22%2C%20%22http%3A//map.goo.ne.jp/*%22%2C%20%22http%3A//www.mapion.co.jp/c/f*%22%2C%20%22http%3A//books.google.co.jp/books%3Fid%3D*%22%2C%20%22http%3A//books.google.co.jp/books%3Fid%3D*%22%5D%2C%0A%0A%20%20CURSOR%3A%20%22-moz-grab%22%2C%20//%20cursor%20style%0A%0A%20%20mStatus%3A%200%2C%20%20%20//0%3A%3F%3F%3F%2C%201%3Amousedown%2C%202%3Amousemove%2C%203%3Amouseup%0A%20%20mLastX%3A%200%2C%0A%20%20mLastY%3A%200%2C%0A%20%20mCursor%3A%20null%2C%0A%20%20mCursorElement%3A%20null%2C%0A%20%20_target%3A%20null%2C%20%20//%0A%20%20_target2%3A%20null%2C%20//%0A%20%20_isImage%3Afalse%2C%0A%20%20_timer%3A0%2C%20%20%20%20%20%20//mouseup%0A%20%20_ctimer%3A0%2C%0A%20%20_mtimer%3A%20false%2C%0A%20%20cScroll%3Afalse%2C%0A%20%20cSpeedX%3A0%2C%0A%20%20cSpeedY%3A0%2C%0A%20%20_doc%3Anull%2C%0A%20%20_MOVERATEpZoom%3A1%2C%0A%20%20_window%3A%20null%2C%0A%0A%20%20initGrabScroll%3A%20function%28%29%20%7B%0A%20%20%20%20var%20curentBrowserVersion%20%3D%20Services.appinfo.platformVersion%3B%20//%2731.*%27%0A%20%20%20%20var%20compareResult%20%3D%20Services.vc.compare%28curentBrowserVersion%2C%20%2746.*%27%29%3B%0A%20%20%20%20this.Bug1209100%20%3D%20%28compareResult%20%3C%200%29%20%3F%2010%20%3A%201%3B%0A%20%20%20%20%0A%20%20%20%20if%20%28%20GrabScroll.activeBrowser%28%29.mPanelContainer%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20this._window%20%3D%20GrabScroll.activeBrowser%28%29.mPanelContainer%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20else%20this._window%20%3D%20document.getElementById%28%27content%27%29%3B%0A%20%20%20%20%0A%20%20%20%20for%28%20var%20aURL%20in%20this.IGNOREURL%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20this.IGNOREURL%5BaURL%5D%20%3D%20this.convert2RegExp%28this.IGNOREURL%5BaURL%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20this._window.setCapture%28%29%3B%0A%20%20%20%20addEventListener%28%22mousedown%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22click%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%22mouseup%22%2C%20this%2C%20true%2C%20this._window%29%3B%0A%20%20%20%20addEventListener%28%27pagehide%27%2C%20this%2C%20false%2C%20gBrowser%29%3B%0A%20%20%20%20gPrefService.addObserver%28%27grabScroll.%27%2C%20GrabScroll.initPrefs%2C%20false%29%3B%0A%20%20%20%20addDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28%27grabScroll.%27%2C%20GrabScroll.initPrefs%29%20%29%3B%0A%20%20%20%20%0A%20%20%20%20setTimeout%28%28%29%3D%3E%20GrabScroll.initPrefs%28%29%2C%200%29%3B%0A%20%20%7D%2C%0A%0A%20%20initPrefs%3A%20%20function%28%29%20%7B%0A%20%20%20%20this.MOUSEBUTTON%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.button%22%29%20%7C%7C%200%3B%0A%20%20%20%20this.MOVERATE%20%20%20%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.moverate%22%29%20%7C%7C%20-1%3B%0A%20%20%20%20this.TIMER%20%20%20%20%20%20%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.timer%22%29%20%7C%7C%20500%3B%0A%20%20%20%20this.INERTIA%20%20%20%20%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.enableinertia%22%29%20%7C%7C%20false%3B%0A%20%20%20%20this.INERTIATHRESHOLD%20%3D%20cbu.getPrefs%28%22grabScroll.inertiathreshold%22%29%20%7C%7C%2080%3B%0A%20%20%20%20this.INERTIARATE%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.inertiarate%22%29%20%7C%7C%2050%3B%0A%20%20%20%20this.NOTIMAGE%20%20%20%20%20%20%20%20%20%3D%20cbu.getPrefs%28%22grabScroll.notimage%22%29%20%7C%7C%20true%3B%0A%20%20%20%20this.NOTCLICABLELINK%20%20%3D%20cbu.getPrefs%28%22grabScroll.clickable%22%29%20%7C%7C%20true%3B%0A%20%20%20%20%0A%20%20%20%20GrabScroll.setIcon%28%29%3B%0A%20%20%7D%2C%0A%0A%20%20activeBrowser%3A%20function%28%29%20%7B%0A%20%20%20%20return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%20gBrowser%3B%0A%20%20%7D%2C%0A%0A%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20e%20%3D%20new%20XPCNativeWrapper%28e%29%3B%0A%20%20%20%20switch%28e.type%29%20%7B%0A%20%20%20%20%20%20case%20%22mousedown%22%3A%0A%20%20%20%20%20%20%20%20if%20%28%20this.cScroll%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20this.cSpeedY%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%20cbu.getPrefs%28%22grabScroll.enable%22%29%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.grabStart%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22mousemove%22%3A%0A%20%20%20%20%20%20%20%20this.mousemove%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22click%22%3A%0A%20%20%20%20%20%20%20%20this.click%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%22mouseup%22%3A%0A%20%20%20%20%20%20%20%20this.mouseup%28e%29%3B%20break%3B%0A%20%20%20%20%20%20case%20%27pagehide%27%3A%0A%20%20%20%20%20%20%20%20this._doc%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this._isImage%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20this.NS%20%3D%20this.EW%20%3D%20this.NSEW%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20grabStart%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%203%29%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%0A%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28Math.abs%28this.mLastX%20-%20e.screenX%29%20%3C%205%20%26%26%0A%20%20%20%20%20%20%20%20%20%20Math.abs%28this.mLastY%20-%20e.screenY%29%20%3C%205%20%29%0A%20%20%20%20%20%20%20%20return%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20if%20%28doc.contentType%20%3D%3D%20%27application/vnd.mozilla.xul+xml%27%29%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20this._doc%20%3D%20doc%3B%0A%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28this.CANCEL_WHEN_SELECTION%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%26%26%20doc.defaultView.getSelection%28%29%20%21%3D%20%22%22%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this._target%20%3D%20e.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28/%5E%28html%7Cbody%29%24/.test%28this._target.localName.toLowerCase%28%29%29%20%7C%7C%20this._target.clientHeight%20%3E%2030000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%20if%20%28/div/.test%28this._target.localName.toLowerCase%28%29%29%20%26%26%20this._target.clientHeight%20%3E%201000%29%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20null%3B%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20this._target2%20%3D%20this._target%3B%0A%0A%20%20%20%20%20%20for%20%28aURL%20in%20this.IGNOREURL%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.IGNOREURL%5BaURL%5D%20%3D%3D%3D%20%27%27%29continue%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28doc.documentURI.match%28this.IGNOREURL%5BaURL%5D%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%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%20dump%28this.IGNOREURL%5BaURL%5D+%27%5Cn%27+ex%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.isParentEditableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentDraggableNode%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isIgnore%28this._target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isVideoControl%28e.target%29%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20if%20%28this.isParentClickableNode%28this._target%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28this.NOTCLICABLELINK%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20if%20%28%21%28%27linkDragSelection%27%20in%20window%29%29%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._isImage%20%3D%20this.isImage%28e%29%3B%0A%20%20%20%20%20%20if%20%28this._isImage%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.NOTIMAGE%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20var%20target%20%3D%20this._target%3B%0A%20%20%20%20%20%20while%20%28target%29%7B%0A%20%20%20%20%20%20%20%20if%20%28%22getAttribute%22%20in%20target%20%26%26%20target.getAttribute%28%22draggable%22%29%20%3D%3D%20%22true%22%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20style%20%3D%20this._doc.defaultView.getComputedStyle%28target%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22cursor%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20else%20if%20%28/resize%7Cmove%7Call-scroll%7Ccrosshair/.test%28style.getPropertyValue%28%22auto%22%29%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20%20%20%20%20target%20%3D%20target.parentNode%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20this._timer%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20this.mLastX%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20this.mLastY%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%201%3B%0A%20%20%20%20%20%20this._MOVERATEpZoom%20%3D%20%20this.MOVERATE%20/%20%28ZoomManager.useFullZoom%20%3F%20ZoomManager.zoom%20%3A%201%29%3B%0A%0A%20%20%20%20%20%20%5Bthis.NS%2C%20this.EW%2C%20this.NSEW%5D%20%3D%20this.getScrollView%28e%29%3B%0A%20%20%20%20%20%20this._window.addEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20%20%20this.setCursor%28this._target2%2C%20this.CURSOR%29%3B%0A%20%20%20%20%20%20this.resetCursorWithTimer%28this._target2%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20adjustedTimer%3A%20function%28%29%7B%0A%20%20%20%20var%20magTimer%20%3D%20this.TIMER%3B%0A%20%20%20%20return%20magTimer%3B%0A%20%20%7D%2C%0A%0A%20%20grabFinish%3A%20%20function%28%29%20%7B%0A%20%20%20%20this.resetCursorTimer%28%29%3B%0A%20%20%20%20this.resetCursor%28%29%3B%0A%0A%20%20%20%20this._window.removeEventListener%28%22mousemove%22%2C%20this%2C%20true%29%3B%0A%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20if%20%28selCon%29%0A%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_ON%29%3B%0A%20%20%7D%2C%0A%0A%20%20mousemove%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%20%7C%7C%20this.mStatus%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20var%20x%20%3D%20e.screenX%3B%0A%20%20%20%20%20%20var%20y%20%3D%20e.screenY%3B%0A%20%20%20%20%20%20var%20doc%20%3D%20e.originalTarget.ownerDocument%3B%0A%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%28new%20Date%28%29.getTime%28%29%20-%20this._timer%29%20%3E%20this.adjustedTimer%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28Math.abs%28x-this.mLastX%29%20%3C%20this.TOLERANCE_WHEN_NO_H_SCROLL%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20movingh%20%3D%20Math.abs%28x-this.mLastX%29%20%3E%20Math.abs%28y-this.mLastY%29%20*%2050%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21this._isImage%20%26%26%20this.MOUSEBUTTON%20%3D%3D%200%20%20%26%26%20this.isText%28e%29%20%20%26%26%20movingh%20%26%26%20%21this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%28Math.abs%28x%20-%20this.mLastX%29%20+%20Math.abs%28y%20-%20this.mLastY%29%20%3C%20this.TOLERANCE%29%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28this.MOUSEBUTTON%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20selCon%20%3D%20this.getSelconForDoc%28this._doc%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28selCon%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selCon.getSelection%28selCon.SELECTION_NORMAL%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selection.removeAllRanges%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selCon.setDisplaySelection%28selCon.SELECTION_OFF%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%22ucjsMouseGestures%22%20in%20window%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ucjsMouseGestures._isMouseDownR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%20-%20%28x%20-%20this.mLastX%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%20-%20%28y%20-%20this.mLastY%29%20/%2010%3B%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%202%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20%20%20this.resetCursorTimer%28%29%3B%0A%0A%20%20%20%20%20%20if%20%28this._mtimer%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20this.cSpeedX%20%3D%20this._MOVERATEpZoom%20*%20%28x%20-%20this.mLastX%29%3B%0A%20%20%20%20%20%20this.cSpeedY%20%3D%20this._MOVERATEpZoom%20*%20%28y%20-%20this.mLastY%29%3B%0A%0A%20%20%20%20%20%20if%20%28this.scroll%28e%29%29%20%7B%0A%20%20%20%20%20%20%20%20this.mLastX%20%3D%20x%3B%0A%20%20%20%20%20%20%20%20this.mLastY%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20getSelconForDoc%3A%20function%20getSelconForDoc%28doc%29%7B%0A%20%20%20%20if%20%28%21doc%29%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20aFrame%20%3D%20doc.defaultView%3B%0A%20%20%20%20if%20%28%21aFrame%29%0A%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20docShell%20%3D%20this.getDocShellForFrame%28aFrame%29%3B%0A%20%20%20%20var%20selCon%20%3D%20docShell%0A%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsIInterfaceRequestor%29%0A%20%20%20%20%20%20.getInterface%28Components.interfaces.nsISelectionDisplay%29%0A%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsISelectionController%29%3B%0A%20%20%20%20return%20selCon%3B%0A%20%20%7D%2C%0A%0A%20%20getDocShellForFrame%3A%20function%20getDocShellForFrame%28aFrame%29%7B%0A%20%20%20%20return%20aFrame%0A%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsIInterfaceRequestor%29%0A%20%20%20%20%20%20.getInterface%28Components.interfaces.nsIWebNavigation%29%0A%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsIDocShell%29%3B%0A%20%20%7D%2C%0A%0A%20%20click%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28e.button%20%3D%3D%200%20%26%26%20this.mStatus%20%3E%3D%202%20%26%26%20this._doc%20instanceof%20Ci.nsIImageDocument%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20mouseup%3A%20%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3E%201%29%20%7B%0A%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20if%20%28this.mStatus%20%3D%3D%202%29%0A%20%20%20%20%20%20%20%20this.mStatus%20%3D%203%3B%0A%0A%20%20%20%20%20%20if%20%28this.INERTIA%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20this.INERTIATHRESHOLD%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20this.INERTIATHRESHOLD%20%29%29%7B%0A%20%20%20%20%20%20%20%20if%20%28this.cScroll%29%0A%20%20%20%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20%20var%20v%20%3D%20this.INERTIARATE%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedX%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.min%28this.cSpeedX%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedX%20%3D%20Math.max%28this.cSpeedX%2C%20-v%29%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cSpeedY%20%3E%200%29%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.min%28this.cSpeedY%2C%20v%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20this.cSpeedY%20%3D%20Math.max%28this.cSpeedY%2C%20-v%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20Start%3B%0A%20%20%20%20%20%20%20%20function%20scrolling%28e%2C%20self%29%7B%0A%20%20%20%20%20%20%20%20%20%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20self.scroll2%28e%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20self.cScroll%20%3D%20setTimeout%28arguments.callee%2C%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%20Math.max%2825%20-%20%28%28new%20Date%28%29%29.getTime%28%29-Start%29%2C%200%29%2C%20e%2C%20self%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this.scroll2%28e%29%3B%0A%20%20%20%20%20%20%20%20scrolling%28e%2C%20this%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20if%20%28e.button%20%3D%3D%20this.MOUSEBUTTON%20%26%26%20this.mStatus%20%3D%3D%201%29%7B%0A%20%20%20%20%20%20this.grabFinish%28%29%3B%0A%20%20%20%20%20%20this.mStatus%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20scroll2%3A%20function%28e%29%7B%0A%20%20%20%20var%20ay%20%3D%20Math.abs%28this.cSpeedY%29%3B%0A%20%20%20%20var%20ax%20%3D%20Math.abs%28this.cSpeedX%29%3B%0A%20%20%20%20if%20%28ay%20%3C%2010%20%26%26%20ax%20%20%3C%2010%29%7B%0A%20%20%20%20%20%20%20clearTimeout%28this.cScroll%29%3B%0A%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.scroll%28e%29%3B%0A%20%20%20%20if%20%20%20%20%20%20%28ax%20%3E%3D%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%20100%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2020%29%20this.cSpeedX%20%3D%20this.cSpeedX%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ax%20%3C%2010%29%20%20this.cSpeedX%20%3D%200%3B%0A%0A%20%20%20%20if%20%20%20%20%20%20%28ay%20%3E%3D%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%20100%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2020%29%20this.cSpeedY%20%3D%20this.cSpeedY%20*%200.95%3B%0A%20%20%20%20else%20if%20%28ay%20%3C%2010%29%20this.cSpeedY%20%3D%200%3B%0A%20%20%7D%2C%0A%0A%20%20scroll%3A%20function%28e%29%7B%0A%20%20%20%20var%20minScroll%20%3D%20this.Bug1209100%3B%20//%20prevent%20Bug%201209100%2C%2010px%20%3Cfx46.%201px%20%3E%3Dfx46%0A%20%20%20%20this._mtimer%20%3D%20true%3B%0A%20%20%20%20var%20flg%20%3D%20false%3B%0A%20%20%20%20if%20%28this.NS%20%26%26%20this.NS%20%3D%3D%20this.EW%20%26%26%0A%20%20%20%20%20%20%20%20%28Math.abs%28this.cSpeedX%29%20%3E%20minScroll%20%7C%7C%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%29%20%7B%0A%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollBy%28this.cSpeedX%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this.NS.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20this.NS.scrollTop%20%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20if%20%28this.NS%20%26%26%20Math.abs%28this.cSpeedY%29%20%3E%20minScroll%29%20%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.NS%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollBy%280%2C%20this.cSpeedY%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.NS.scrollTop%20+%3D%20this.cSpeedY%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20%28this.EW%20%26%26%20Math.abs%28this.cSpeedX%29%20%3E%20minScroll%29%7B%0A%20%20%20%20%20%20%20%20flg%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20if%20%28%22scrollBy%22%20in%20this.EW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollBy%28this.cSpeedX%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.EW.scrollLeft%20+%3D%20this.cSpeedX%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self._mtimer%20%3D%20false%3B%0A%20%20%20%20%7D%2C%2020%2C%20this%29%3B%0A%20%20%20%20return%20flg%3B%0A%20%20%7D%2C%0A%0A%20%20isText%3A%20function%28e%29%20%7B%0A%20%20%20%20return%20e.explicitOriginalTarget.nodeType%20%3D%3D%20document.TEXT_NODE%3B%0A%20%20%7D%2C%0A%0A%20%20isImage%3A%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e.target%20instanceof%20Ci.nsIImageLoadingContent%29%0A%20%20%20%20%20%20return%20e.target%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isIgnore%3A%20function%28aNode%29%7B%0A%20%20%20%20%20while%20%28aNode%29%7B%0A%20%20%20%20%20%20var%20name%20%3D%20aNode.nodeName.toLowerCase%28%29%3B%0A%20%20%20%20%20%20if%20%28name%20%3D%3D%20%22html%22%29%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20if%20%28/%28scrollbar%7Cselect%7Coption%7Cembed%7Cobject%7Ctree%7Capplet%7Cstatusbar%29/.test%28name%29%29%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20aNode%20%3D%20aNode.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20isParentClickableNode%20%3A%20function%28aNode%29%20%7B%0A%20%20%20%20if%20%28%21aNode%29%20return%20null%3B%0A%20%20%20%20var%20d%20%3D%20aNode.ownerDocument%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20var%20xpathResult%20%3D%20d.evaluate%28%0A%20%20%20%20%20%20%20%20%20%20%27ancestor-or-self%3A%3A*%5B%28%28local-name%28%29%20%3D%20%22a%22%20or%20local-name%28%29%20%3D%20%22A%22%29%29%20or%20local-name%28%29%20%3D%20%22button%22%20or%20local-name%28%29%20%3D%20%22BUTTON%22%20or%20%28%28local-name%28%29%20%3D%20%22input%22%20or%20local-name%28%29%20%3D%20%22INPUT%22%29%20and%20%28@type%20%3D%20%22SUBMIT%22%20or%20@type%20%3D%20%22submit%22%20or%20@type%20%3D%20%22BUTTON%22%20or%20@type%20%3D%20%22button%22%20or%20@type%20%3D%20%22IMAGE%22%20or%20@type%20%3D%20%22image%22%29%29%5D%27%2C%0A%20%20%20%20%20%20%20%20%20%20aNode%2C%0A%20%20%20%20%20%20%20%20%20%20this.NSResolver%2C%0A%20%20%20%20%20%20%20%20%20%20XPathResult.FIRST_ORDERED_NODE_TYPE%2C%0A%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20xpathResult.singleNodeValue%3B%0A%20%20%7D%2C%0A%0A%20%20NSResolver%20%3A%20%7B%0A%20%20%20%20lookupNamespaceURI%20%3A%20function%28aPrefix%29%20%7B%0A%20%20%20%20%20%20switch%20%28aPrefix%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27xul%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%27%3B%0A%20%20%20%20%20%20%20%20case%20%27html%27%3A%0A%20%20%20%20%20%20%20%20case%20%27xhtml%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xhtml%27%3B%0A%20%20%20%20%20%20%20%20case%20%27xlink%27%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27http%3A//www.w3.org/1999/xlink%27%3B%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%27%27%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20isParentEditableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20if%20%28node.ownerDocument.designMode%20%3D%3D%20%27on%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21%28node%20instanceof%20Ci.nsIDOMNSEditableElement%29%29%0A%20%20%20%20%20%20%20%20%20%20throw%200%3B%0A%20%20%20%20%20%20%20%20node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isParentDraggableNode%20%3A%20function%28node%29%7B%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20if%20%28node.getAttribute%28%27draggable%27%29%20%3D%3D%20%27true%27%29%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20null%3B%0A%20%20%7D%2C%0A%0A%20%20isVideoControl%3A%20function%28node%29%20%7B%0A%20%20%20%20if%20%28/%5E%28audio%7Cvideo%29%24/i.test%28node.localName%29%29%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20var%20i%20%3D%200%3B%0A%20%20%20%20%20%20while%20%28i%20%3C%20node.childNodes.length%29%20%7B%0A%20%20%20%20%20%20%20%20var%20child%20%3Dnode.childNodes%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28child.hasAttribute%28%27controls%27%29%20%26%26%20child.getAttribute%28%27controls%27%29%20%3D%3D%20%27controls%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20i++%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%2C%0A%0A%20%20setCursor%3A%20function%28element%2C%20cursor%29%20%7B%0A%20%20%20%20if%20%28%21%21element%20%26%26%20element.style%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20this.mCursor%20%3D%20element.style.cursor%3B%0A%20%20%20%20%20%20%20%20this.mCursorElement%20%20%3D%20element%3B%0A%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20cursor%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%0A%20%20resetCursor%3A%20function%28%29%20%7B%0A%20%20%20%20var%20element%20%3D%20this.mCursorElement%3B%0A%20%20%20%20if%20%28%21%21element%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20element.style.cursor%20%3D%20this.mCursor%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursor%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20this.mCursorElement%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20resetCursorWithTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20this._ctimer%20%3D%20setTimeout%28function%28self%29%7B%0A%20%20%20%20%20%20self.resetCursor%28%29%3B%0A%20%20%20%20%7D%2C%20this.adjustedTimer%28%29%2C%20this%29%3B%0A%20%20%7D%2C%0A%0A%20%20resetCursorTimer%3A%20function%28%29%20%7B%0A%20%20%20%20if%20%28this._ctimer%29%20%7B%0A%20%20%20%20%20%20clearTimeout%28this._ctimer%29%3B%0A%20%20%20%20%20%20this._ctimer%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%0A%20%20convert2RegExp%3A%20function%28%20pattern%20%29%20%7B%0A%20%20%20%20var%20s%20%3D%20new%20String%28pattern%29%3B%0A%20%20%20%20var%20res%20%3D%20new%20String%28%22%5E%22%29%3B%0A%0A%20%20%20%20for%20%28var%20k%20%3D%200%20%3B%20k%20%3C%20s.length%20%3B%20k++%29%20%7B%0A%20%20%20%20%20%20switch%28s%5Bk%5D%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27*%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22.*%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27.%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%3F%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5E%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%24%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27+%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5B%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%7C%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%28%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%29%27%20%3A%0A%20%20%20%20%20%20%20%20case%20%27%5D%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%22%20+%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%5C%5C%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20%22%5C%5C%5C%5C%22%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27%20%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20//%20Remove%20spaces%20from%20URLs.%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20default%20%3A%0A%20%20%20%20%20%20%20%20%20%20res%20+%3D%20s%5Bk%5D%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20new%20RegExp%28res%20+%20%27%24%27%2C%20%22i%22%29%3B%0A%20%20%7D%2C%0A%0A%20%20button%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22button%28L%20M%20R%29%3A%20%22%2C%22LMR%22.substr%28this.MOUSEBUTTON%2C1%29%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20switch%28value.toUpperCase%28%29%29%7B%0A%20%20%20%20%20%20case%20%22M%22%3A%20value%20%3D1%3B%20break%3B%0A%20%20%20%20%20%20case%20%22R%22%3A%20value%20%3D2%3B%20break%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20case%20%22L%22%3A%20value%20%3D0%3B%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.MOUSEBUTTON%20%3D%20value%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.button%22%2C%20value%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20threshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22Timer%3A%20%22%2Cthis.TIMER%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.TIMER%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20this.TIMER%20%3C%3D0%20%7C%7C%20%21this.TIMER%20%29%20this.TIMER%20%3D%201000%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.timer%22%2C%20this.TIMER%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20moverate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22%5B+-%5Drate%3A%20%22%2Cthis.MOVERATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.MOVERATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.MOVERATE%20%29%20this.MOVERATE%20%3D%20-1%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.moverate%22%2C%20this.MOVERATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiaThreshold%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20threshold%3A%20%22%2Cthis.INERTIATHRESHOLD%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIATHRESHOLD%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIATHRESHOLD%20%29%20this.INERTIATHRESHOLD%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiathreshold%22%2C%20this.INERTIATHRESHOLD%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20inertiarate%3A%20function%28%29%7B%0A%20%20%20%20var%20value%20%3D%20prompt%28%22Kinetic%20scroll%20speed%3A%20%22%2Cthis.INERTIARATE%29%3B%0A%20%20%20%20if%20%28%21value%29%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20this.INERTIARATE%20%3D%20parseInt%28value%2C10%29%3B%0A%20%20%20%20if%28%20%21this.INERTIARATE%20%29%20this.INERTIARATE%20%3D%2020%3B%0A%20%20%20%20cbu.setPrefs%28%22grabScroll.inertiarate%22%2C%20this.INERTIARATE%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20setIcon%3A%20function%28%29%7B%0A%20%20%20%20//document.getAnonymousNodes%28self%29%5B1%5D.src%20%3D%20%21cbu.getPrefs%28%22grabScroll.enable%22%29%0A%20%20%20%20//%3F%20self.image%0A%20%20%20%20//%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0A%20%20%20%20self.checked%20%3D%20cbu.getPrefs%28%22grabScroll.enable%22%29%3B%0A%20%20%7D%2C%0A%20%20%0A%20%20getScrollView%3A%20function%20%28e%29%20%7B%0A%20%20%20%20var%20NS%2CEW%2CNSEW%3B%0A%20%20%20%20NS%20%3D%20EW%20%3D%20NSEW%20%3D%20null%3B%0A%20%20%20%20var%20_scrollingView%20%3D%20null%3B%0A%20%20%20%20var%20overflowx%2C%20overflowy%2C%20ox%2C%20oy%3B%0A%20%20%20%20var%20scw%2C%20sch%2C%20horz%2C%20vert%3B%0A%20%20%20%20var%20doc%2C%20style%3B%0A%20%20%20%20var%20borderTop%3B%0A%20%20%20%20var%20borderBottom%3B%0A%20%20%20%20var%20borderLeft%3B%0A%20%20%20%20var%20borderRight%3B%0A%0A%20%20%20%20if%20%28e.originalTarget.ownerDocument.contentType%20%3D%3D%20%22application/xml%22%29%20%7B%0A%20%20%20%20%20%20_scrollingView%20%3D%20e.originalTarget.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20EW%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20_scrollingView%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.frameElement%29%20%7B%0A%20%20%20%20%20%20%20%20//this.findNearestScrollableElement%28_scrollingView.frameElement%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20//%20abort%20scrolling%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20for%20%28_scrollingView%20%3D%20e.originalTarget%3B%20_scrollingView%3B%20_scrollingView%20%3D%20_scrollingView.parentNode%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28_scrollingView%20instanceof%20HTMLElement%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22HTML%22%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.localName.toUpperCase%28%29%20%3D%3D%20%22BODY%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView%20%3D%20_scrollingView.ownerDocument.defaultView%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%21%3D%20_scrollingView.scrollMinX%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%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%20else%20if%20%28_scrollingView.scrollMaxY%20%21%3D%20_scrollingView.scrollMinY%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28_scrollingView.frameElement%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//return%20this.getScrollView%28%7BoriginalTarget%20%3A%20_scrollingView.frameElement%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20abort%20scrolling%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.scrollMaxX%20%3E%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%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%20if%20%28_scrollingView.scrollMaxX%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%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%20if%20%28_scrollingView.scrollMaxY%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%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%20if%20%28_scrollingView.frameElement%20%26%26%20%21NS%20%26%26%20%21EW%20%26%26%20%21NSEW%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.getScrollView%28%7BoriginalTarget%20%3A%20_scrollingView.frameElement%7D%29%3B%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%20%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28_scrollingView.localName.toLowerCase%28%29%20%3D%3D%20%22select%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_scrollingView.parentNode.focus%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20ox%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20oy%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowx%20%3D%20style.getPropertyValue%28%22overflow-x%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ox%20%3D%20overflowx%20%21%3D%20%22hidden%22%20%26%26%20overflowx%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overflowy%20%3D%20style.getPropertyValue%28%22overflow-y%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20oy%20%3D%20overflowy%20%21%3D%20%22hidden%22%20%26%26%20overflowy%20%21%3D%20%22visible%22%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28/%5E%28table%7Ctd%7Cth%29%24/i.test%28_scrollingView.localName%29%29%20%7B%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%20doc%20%3D%20_scrollingView.ownerDocument%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%20%3D%20doc.defaultView.getComputedStyle%28_scrollingView%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderTop%20%20%20%20%3D%20style.getPropertyValue%28%22border-top-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderBottom%20%3D%20style.getPropertyValue%28%22border-bottom-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderLeft%20%20%20%3D%20style.getPropertyValue%28%22border-left-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderRight%20%20%3D%20style.getPropertyValue%28%22border-right-width%22%29.replace%28%27px%27%2C%20%27%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28ex%29%20%7B%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%7D%0A%20%20%20%20%20%20%20%20%20%20scw%20%3D%20_scrollingView.clientWidth%3B%0A%20%20%20%20%20%20%20%20%20%20horz%20%3D%20ox%20%26%26%20scw%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scw%20+%20borderLeft%20+%20borderRight%20%3C%20_scrollingView.scrollWidth%3B%0A%20%20%20%20%20%20%20%20%20%20sch%20%3D%20_scrollingView.clientHeight%3B%0A%20%20%20%20%20%20%20%20%20%20vert%20%3D%20oy%20%26%26%20sch%20%21%3D%3D%200%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sch%20+%20borderTop%20+%20borderBottom%20%3C%20_scrollingView.scrollHeight%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%20%26%26%20vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NSEW%20%3D%20%21NSEW%20%3F%20_scrollingView%20%3A%20NSEW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28horz%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20EW%20%3D%20%21EW%20%3F%20_scrollingView%20%3A%20EW%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28vert%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20NS%20%3D%20%21NS%20%3F%20_scrollingView%20%3A%20NS%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20//%20for%0A%20%20%20%20%7D%0A%20%20%20%20return%20%5BNS%2C%20EW%2C%20NSEW%5D%3B%0A%20%20%7D%0A%7D%3B%0AGrabScroll.initGrabScroll%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Только неплохо бы перевести меню и сообщения как следует ну и иконки красивые нарисовать.

Отсутствует

 

№121622-04-2016 02:13:16

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

bunda1
Забыли исключения для ПКМ с клавишами модификаторами сделать.

bunda1 пишет

Только неплохо бы перевести меню и сообщения как следует ну и иконки красивые нарисовать.

Меня самого эти "ускорения инерции прокрутки" озадачивают. :) Все и так отлично. Спасибо большое. :beer:

Добавлено 22-04-2016 02:24:40
Что-то настройки инерции не работают (неправ: работают - меняются, но никак не сказываются на работе). И в консоль ругается на и т.п.

Еще курсор обратно не меняется порой, когда отпускаешь. В скрипте с этим и вышенаписанным  нет проблем.

Отредактировано turbot (22-04-2016 02:59:15)

Отсутствует

 

№121722-04-2016 03:55:05

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

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

turbot, в свете того, что bunda1 сделал обновлённый вариант - стОит теребить автора?
И ещё. Если Вы это повесили на лкм, не трудно ли выделять текст с модификатором?
У меня вообще-то есть идея как скроллить без того, чтобы мешать жестам :)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№121822-04-2016 04:22:31

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

difabor пишет

turbot, в свете того, что bunda1 сделал обновлённый вариант - стОит теребить автора?

Если вам не трудно. Все-таки, не все нашим форумом пользуются. :)

И ещё. Если Вы это повесили на лкм, не трудно ли выделять текст с модификатором?

Нет. Что в этой кнопке/скрипте, что в выше помянутом аддоне, проведение над текстом по горизонтали переключает режим с прокрутки на выделение. Никакого дискомфорта.

Отсутствует

 

№121922-04-2016 06:24:00

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

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

turbot
Done: http://custombuttons.sourceforge.net/forum/viewtopic.php?p=11886#p11886


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№122022-04-2016 07:13:20

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

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

Всем спасибо, поставил кнопку от bunda1 и проблемы исчезли. Отдельное спасибо difabor за сообщение автору. Меня в мой старый аккаунт не запустили, а зарегистрироваться по новой не сумел.
PS. А я поторопился, на 45 так и не заработало, я ж в 42 пробовал. Это может у меня косяк?

Отредактировано Mishania (22-04-2016 11:59:53)

Отсутствует

 

№122122-04-2016 12:32:25

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 45.0

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

Уважаемые разработчики, не могли бы вы пожалуйста сделать кнопку с таким функционалом? Изменять значки папок в закладках (для каждой папки свой значок)

Отсутствует

 

№122222-04-2016 18:45:58

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

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

Stakhovsky
А зачем кнопка? Засуньте стиль в Stylish или userChrome.css.

Отсутствует

 

№122322-04-2016 19:45:05

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 45.0

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

turbot
Так там же все ручками надо вставлять, постоянно открывать стиль, редактировать. Ну кнопка как всегда ускоряет процесс, удобство.
Жаль не работает это - Set Icon
Там можно было вставить сразу ссылку на иконку и все
В этом стиле я проверял, вставлял ссылку сразу на иконку - ничего, но получилось с кодом base64
Допустим так - нашел иконку - скопировал изображение как base64 или ссылку на него - правый клик на папке закладок - изменить иконку - вставил код или ссылку - ок

Добавлено 22-04-2016 19:58:00
Можно ли что бы кнопка создавала в стиле тот шаблон что есть с заполненным именем от названия папки на коротой кликнул пкм и выбрал изменить иконку, а с буфера (без окна) брала ссылку на иконку? и удалялся с удалением папки.

Отредактировано Stakhovsky (22-04-2016 21:48:36)

Отсутствует

 

№122422-04-2016 20:39:23

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

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

Mishania пишет

Всем спасибо, поставил кнопку от bunda1 и проблемы исчезли. Отдельное спасибо difabor за сообщение автору. Меня в мой старый аккаунт не запустили, а зарегистрироваться по новой не сумел.
PS. А я поторопился, на 45 так и не заработало, я ж в 42 пробовал. Это может у меня косяк?

Автор ответил: http://custombuttons.sourceforge.net/fo … 887#p11887


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№122522-04-2016 21:07:15

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

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

difabor
Вы бы заодно попросили его обновить код до актуальной версии оригинала. :)

И, если не трудно, отпишите ему здесь, что предложенный фикс некорректно работает в ночнушке: команда custombuttons.copyURI();, для копирования кнопки в буфер, вообще перестает работать. :(

Я дурак. Зацепил следующую функцию при замене. Все работает. :)

Отредактировано turbot (22-04-2016 21:17:52)

Отсутствует

 

Board footer

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