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