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