chadicus /
test-helpers
| 1 | /*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) |
||
| 2 | * Licensed under the MIT License (LICENSE.txt). |
||
| 3 | * |
||
| 4 | * Version: 3.1.9 |
||
| 5 | * |
||
| 6 | * Requires: jQuery 1.2.2+ |
||
| 7 | */ |
||
| 8 | |||
| 9 | (function (factory) { |
||
| 10 | if ( typeof define === 'function' && define.amd ) { |
||
|
0 ignored issues
–
show
|
|||
| 11 | // AMD. Register as an anonymous module. |
||
| 12 | define(['jquery'], factory); |
||
| 13 | } else if (typeof exports === 'object') { |
||
| 14 | // Node/CommonJS style for Browserify |
||
| 15 | module.exports = factory; |
||
| 16 | } else { |
||
| 17 | // Browser globals |
||
| 18 | factory(jQuery); |
||
| 19 | } |
||
| 20 | }(function ($) { |
||
| 21 | |||
| 22 | var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], |
||
| 23 | toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? |
||
| 24 | ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], |
||
| 25 | slice = Array.prototype.slice, |
||
| 26 | nullLowestDeltaTimeout, lowestDelta; |
||
| 27 | |||
| 28 | if ( $.event.fixHooks ) { |
||
| 29 | for ( var i = toFix.length; i; ) { |
||
| 30 | $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; |
||
| 31 | } |
||
| 32 | } |
||
| 33 | |||
| 34 | var special = $.event.special.mousewheel = { |
||
| 35 | version: '3.1.9', |
||
| 36 | |||
| 37 | setup: function() { |
||
| 38 | if ( this.addEventListener ) { |
||
| 39 | for ( var i = toBind.length; i; ) { |
||
| 40 | this.addEventListener( toBind[--i], handler, false ); |
||
| 41 | } |
||
| 42 | } else { |
||
| 43 | this.onmousewheel = handler; |
||
| 44 | } |
||
| 45 | // Store the line height and page height for this particular element |
||
| 46 | $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); |
||
| 47 | $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); |
||
| 48 | }, |
||
| 49 | |||
| 50 | teardown: function() { |
||
| 51 | if ( this.removeEventListener ) { |
||
| 52 | for ( var i = toBind.length; i; ) { |
||
| 53 | this.removeEventListener( toBind[--i], handler, false ); |
||
| 54 | } |
||
| 55 | } else { |
||
| 56 | this.onmousewheel = null; |
||
| 57 | } |
||
| 58 | }, |
||
| 59 | |||
| 60 | getLineHeight: function(elem) { |
||
| 61 | return parseInt($(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']().css('fontSize'), 10); |
||
| 62 | }, |
||
| 63 | |||
| 64 | getPageHeight: function(elem) { |
||
| 65 | return $(elem).height(); |
||
| 66 | }, |
||
| 67 | |||
| 68 | settings: { |
||
| 69 | adjustOldDeltas: true |
||
| 70 | } |
||
| 71 | }; |
||
| 72 | |||
| 73 | $.fn.extend({ |
||
| 74 | mousewheel: function(fn) { |
||
| 75 | return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); |
||
| 76 | }, |
||
| 77 | |||
| 78 | unmousewheel: function(fn) { |
||
| 79 | return this.unbind('mousewheel', fn); |
||
| 80 | } |
||
| 81 | }); |
||
| 82 | |||
| 83 | |||
| 84 | function handler(event) { |
||
| 85 | var orgEvent = event || window.event, |
||
| 86 | args = slice.call(arguments, 1), |
||
| 87 | delta = 0, |
||
| 88 | deltaX = 0, |
||
| 89 | deltaY = 0, |
||
| 90 | absDelta = 0; |
||
| 91 | event = $.event.fix(orgEvent); |
||
| 92 | event.type = 'mousewheel'; |
||
| 93 | |||
| 94 | // Old school scrollwheel delta |
||
| 95 | if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } |
||
| 96 | if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } |
||
| 97 | if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } |
||
| 98 | if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } |
||
| 99 | |||
| 100 | // Firefox < 17 horizontal scrolling related to DOMMouseScroll event |
||
| 101 | if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { |
||
| 102 | deltaX = deltaY * -1; |
||
| 103 | deltaY = 0; |
||
| 104 | } |
||
| 105 | |||
| 106 | // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy |
||
| 107 | delta = deltaY === 0 ? deltaX : deltaY; |
||
| 108 | |||
| 109 | // New school wheel delta (wheel event) |
||
| 110 | if ( 'deltaY' in orgEvent ) { |
||
| 111 | deltaY = orgEvent.deltaY * -1; |
||
| 112 | delta = deltaY; |
||
| 113 | } |
||
| 114 | if ( 'deltaX' in orgEvent ) { |
||
| 115 | deltaX = orgEvent.deltaX; |
||
| 116 | if ( deltaY === 0 ) { delta = deltaX * -1; } |
||
| 117 | } |
||
| 118 | |||
| 119 | // No change actually happened, no reason to go any further |
||
| 120 | if ( deltaY === 0 && deltaX === 0 ) { return; } |
||
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
| 121 | |||
| 122 | // Need to convert lines and pages to pixels if we aren't already in pixels |
||
| 123 | // There are three delta modes: |
||
| 124 | // * deltaMode 0 is by pixels, nothing to do |
||
| 125 | // * deltaMode 1 is by lines |
||
| 126 | // * deltaMode 2 is by pages |
||
| 127 | if ( orgEvent.deltaMode === 1 ) { |
||
| 128 | var lineHeight = $.data(this, 'mousewheel-line-height'); |
||
| 129 | delta *= lineHeight; |
||
| 130 | deltaY *= lineHeight; |
||
| 131 | deltaX *= lineHeight; |
||
| 132 | } else if ( orgEvent.deltaMode === 2 ) { |
||
| 133 | var pageHeight = $.data(this, 'mousewheel-page-height'); |
||
| 134 | delta *= pageHeight; |
||
| 135 | deltaY *= pageHeight; |
||
| 136 | deltaX *= pageHeight; |
||
| 137 | } |
||
| 138 | |||
| 139 | // Store lowest absolute delta to normalize the delta values |
||
| 140 | absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); |
||
| 141 | |||
| 142 | if ( !lowestDelta || absDelta < lowestDelta ) { |
||
| 143 | lowestDelta = absDelta; |
||
| 144 | |||
| 145 | // Adjust older deltas if necessary |
||
| 146 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { |
||
| 147 | lowestDelta /= 40; |
||
| 148 | } |
||
| 149 | } |
||
| 150 | |||
| 151 | // Adjust older deltas if necessary |
||
| 152 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { |
||
| 153 | // Divide all the things by 40! |
||
| 154 | delta /= 40; |
||
| 155 | deltaX /= 40; |
||
| 156 | deltaY /= 40; |
||
| 157 | } |
||
| 158 | |||
| 159 | // Get a whole, normalized value for the deltas |
||
| 160 | delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); |
||
| 161 | deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); |
||
| 162 | deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); |
||
| 163 | |||
| 164 | // Add information to the event object |
||
| 165 | event.deltaX = deltaX; |
||
| 166 | event.deltaY = deltaY; |
||
| 167 | event.deltaFactor = lowestDelta; |
||
| 168 | // Go ahead and set deltaMode to 0 since we converted to pixels |
||
| 169 | // Although this is a little odd since we overwrite the deltaX/Y |
||
| 170 | // properties with normalized deltas. |
||
| 171 | event.deltaMode = 0; |
||
| 172 | |||
| 173 | // Add event and delta to the front of the arguments |
||
| 174 | args.unshift(event, delta, deltaX, deltaY); |
||
| 175 | |||
| 176 | // Clearout lowestDelta after sometime to better |
||
| 177 | // handle multiple device types that give different |
||
| 178 | // a different lowestDelta |
||
| 179 | // Ex: trackpad = 3 and mouse wheel = 120 |
||
| 180 | if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } |
||
| 181 | nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); |
||
| 182 | |||
| 183 | return ($.event.dispatch || $.event.handle).apply(this, args); |
||
| 184 | } |
||
| 185 | |||
| 186 | function nullLowestDelta() { |
||
| 187 | lowestDelta = null; |
||
| 188 | } |
||
| 189 | |||
| 190 | function shouldAdjustOldDeltas(orgEvent, absDelta) { |
||
| 191 | // If this is an older event and the delta is divisable by 120, |
||
| 192 | // then we are assuming that the browser is treating this as an |
||
| 193 | // older mouse wheel event and that we should divide the deltas |
||
| 194 | // by 40 to try and get a more usable deltaFactor. |
||
| 195 | // Side note, this actually impacts the reported scroll distance |
||
| 196 | // in older browsers and can cause scrolling to be slower than native. |
||
| 197 | // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. |
||
| 198 | return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; |
||
| 199 | } |
||
| 200 | |||
| 201 | })); |
||
| 202 |
This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.
To learn more about declaring variables in Javascript, see the MDN.