1// SmoothScroll v0.9.9 2// Licensed under the terms of the MIT license. 3// People involved 4// - Balazs Galambosi: maintainer (CHANGELOG.txt) 5// - Patrick Brunner ([email protected]) 6// - Michael Herf: ssc_pulse Algorithm 7 8function ssc_init() { 9 if (!document.body) return; 10 var e = document.body; 11 var t = document.documentElement; 12 var n = window.innerHeight; 13 var r = e.scrollHeight; 14 ssc_root = document.compatMode.indexOf("CSS") >= 0 ? t : e; 15 ssc_activeElement = e; 16 ssc_initdone = true; 17 if (top != self) { 18 ssc_frame = true 19 } else if (r > n && (e.offsetHeight <= n || t.offsetHeight <= n)) { 20 ssc_root.style.height = "auto"; 21 if (ssc_root.offsetHeight <= n) { 22 var i = document.createElement("div"); 23 i.style.clear = "both"; 24 e.appendChild(i) 25 } 26 } 27 if (!ssc_fixedback) { 28 e.style.backgroundAttachment = "scroll"; 29 t.style.backgroundAttachment = "scroll" 30 } 31 if (ssc_keyboardsupport) { 32 ssc_addEvent("keydown", ssc_keydown) 33 } 34} 35 36function ssc_scrollArray(e, t, n, r) { 37 r || (r = 1e3); 38 ssc_directionCheck(t, n); 39 ssc_que.push({ 40 x: t, 41 y: n, 42 lastX: t < 0 ? .99 : -.99, 43 lastY: n < 0 ? .99 : -.99, 44 start: +(new Date) 45 }); 46 if (ssc_pending) { 47 return 48 } 49 var i = function() { 50 var s = +(new Date); 51 var o = 0; 52 var u = 0; 53 for (var a = 0; a < ssc_que.length; a++) { 54 var f = ssc_que[a]; 55 var l = s - f.start; 56 var c = l >= ssc_animtime; 57 var h = c ? 1 : l / ssc_animtime; 58 if (ssc_pulseAlgorithm) { 59 h = ssc_pulse(h) 60 } 61 var p = f.x * h - f.lastX >> 0; 62 var d = f.y * h - f.lastY >> 0; 63 o += p; 64 u += d; 65 f.lastX += p; 66 f.lastY += d; 67 if (c) { 68 ssc_que.splice(a, 1); 69 a-- 70 } 71 } 72 if (t) { 73 var v = e.scrollLeft; 74 e.scrollLeft += o; 75 if (o && e.scrollLeft === v) { 76 t = 0 77 } 78 } 79 if (n) { 80 var m = e.scrollTop; 81 e.scrollTop += u; 82 if (u && e.scrollTop === m) { 83 n = 0 84 } 85 } 86 if (!t && !n) { 87 ssc_que = [] 88 } 89 if (ssc_que.length) { 90 setTimeout(i, r / ssc_framerate + 1) 91 } else { 92 ssc_pending = false 93 } 94 }; 95 setTimeout(i, 0); 96 ssc_pending = true 97} 98 99function ssc_wheel(e) { 100 if (!ssc_initdone) { 101 ssc_init() 102 } 103 var t = e.target; 104 var n = ssc_overflowingAncestor(t); 105 if (!n || e.defaultPrevented || ssc_isNodeName(ssc_activeElement, "embed") || ssc_isNodeName(t, "embed") && /\.pdf/i.test(t.src)) { 106 return true 107 } 108 var r = e.wheelDeltaX || 0; 109 var i = e.wheelDeltaY || 0; 110 if (!r && !i) { 111 i = e.wheelDelta || 0 112 } 113 if (Math.abs(r) > 1.2) { 114 r *= ssc_stepsize / 120 115 } 116 if (Math.abs(i) > 1.2) { 117 i *= ssc_stepsize / 120 118 } 119 ssc_scrollArray(n, -r, -i); 120 e.preventDefault() 121} 122 123function ssc_keydown(e) { 124 var t = e.target; 125 var n = e.ctrlKey || e.altKey || e.metaKey; 126 if (/input|textarea|embed/i.test(t.nodeName) || t.isContentEditable || e.defaultPrevented || n) { 127 return true 128 } 129 if (ssc_isNodeName(t, "button") && e.keyCode === ssc_key.spacebar) { 130 return true 131 } 132 var r, i = 0, 133 s = 0; 134 var o = ssc_overflowingAncestor(ssc_activeElement); 135 var u = o.clientHeight; 136 if (o == document.body) { 137 u = window.innerHeight 138 } 139 switch (e.keyCode) { 140 case ssc_key.up:
141 s = -ssc_arrowscroll; 142 break; 143 case ssc_key.down: 144 s = ssc_arrowscroll; 145 break; 146 case ssc_key.spacebar: 147 r = e.shiftKey ? 1 : -1; 148 s = -r * u * .9; 149 break; 150 case ssc_key.pageup: 151 s = -u * .9; 152 break; 153 case ssc_key.pagedown: 154 s = u * .9; 155 break; 156 case ssc_key.home: 157 s = -o.scrollTop; 158 break; 159 case ssc_key.end: 160 var a = o.scrollHeight - o.scrollTop - u; 161 s = a > 0 ? a + 10 : 0; 162 break; 163 case ssc_key.left: 164 i = -ssc_arrowscroll; 165 break; 166 case ssc_key.right: 167 i = ssc_arrowscroll; 168 break; 169 default: 170 return true 171 } 172 ssc_scrollArray(o, i, s); 173 e.preventDefault() 174} 175 176function ssc_mousedown(e) { 177 ssc_activeElement = e.target 178} 179 180function ssc_setCache(e, t) { 181 for (var n = e.length; n--;) ssc_cache[ssc_uniqueID(e[n])] = t; 182 return t 183} 184 185function ssc_overflowingAncestor(e) { 186 var t = []; 187 var n = ssc_root.scrollHeight; 188 do { 189 var r = ssc_cache[ssc_uniqueID(e)]; 190 if (r) { 191 return ssc_setCache(t, r) 192 } 193 t.push(e); 194 if (n === e.scrollHeight) { 195 if (!ssc_frame || ssc_root.clientHeight + 10 < n) { 196 return ssc_setCache(t, document.body) 197 } 198 } else if (e.clientHeight + 10 < e.scrollHeight) { 199 overflow = getComputedStyle(e, "").getPropertyValue("overflow"); 200 if (overflow === "scroll" || overflow === "auto") { 201 return ssc_setCache(t, e) 202 } 203 } 204 } while (e = e.parentNode) 205} 206 207function ssc_addEvent(e, t, n) { 208 window.addEventListener(e, t, n || false) 209} 210 211function ssc_removeEvent(e, t, n) { 212 window.removeEventListener(e, t, n || false) 213} 214 215function ssc_isNodeName(e, t) { 216 return e.nodeName.toLowerCase() === t.toLowerCase() 217} 218 219function ssc_directionCheck(e, t) { 220 e = e > 0 ? 1 : -1; 221 t = t > 0 ? 1 : -1; 222 if (ssc_direction.x !== e || ssc_direction.y !== t) { 223 ssc_direction.x = e; 224 ssc_direction.y = t; 225 ssc_que = [] 226 } 227} 228 229function ssc_pulse_(e) { 230 var t, n, r; 231 e = e * ssc_pulseScale; 232 if (e < 1) { 233 t = e - (1 - Math.exp(-e)) 234 } else { 235 n = Math.exp(-1); 236 e -= 1; 237 r = 1 - Math.exp(-e); 238 t = n + r * (1 - n) 239 } 240 return t * ssc_pulseNormalize 241} 242 243function ssc_pulse(e) { 244 if (e >= 1) return 1; 245 if (e <= 0) return 0; 246 if (ssc_pulseNormalize == 1) { 247 ssc_pulseNormalize /= ssc_pulse_(1) 248 } 249 return ssc_pulse_(e) 250} 251 252var ssc_framerate = 150; 253var ssc_animtime = 500; 254var ssc_stepsize = 150; 255var ssc_pulseAlgorithm = true; 256var ssc_pulseScale = 6; 257var ssc_pulseNormalize = 1; 258var ssc_keyboardsupport = true; 259var ssc_arrowscroll = 50; 260var ssc_frame = false; 261var ssc_direction = { 262 x: 0, 263 y: 0 264}; 265 266var ssc_initdone = false; 267var ssc_fixedback = true; 268var ssc_root = document.documentElement; 269var ssc_activeElement; 270var ssc_key = { 271 left: 37, 272 up: 38, 273 right: 39, 274 down: 40, 275 spacebar: 32, 276 pageup: 33, 277 pagedown: 34, 278 end: 35, 279 home: 36 280}; 281 282var ssc_que = []; 283var ssc_pending = false; 284var ssc_cache = {}; 285 286setInterval(function() { 287 ssc_cache = {} 288}, 10 * 1e3); 289 290var ssc_uniqueID = function() { 291 var e = 0; 292 return function(t) { 293 return t.ssc_uniqueID || (t.ssc_uniqueID = e++) 294 } 295}(); 296 297var ischrome = /chrome/.test(navigator.userAgent.toLowerCase()); 298 299if (ischrome) { 300 ssc_addEvent("mousedown", ssc_mousedown); 301 ssc_addEvent("mousewheel", ssc_wheel); 302 ssc_addEvent("load", ssc_init) 303}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.