").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("
"),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("
").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),o.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"))},hideLoading:function(t){var e=this;(t=t||e.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('
').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,i=o.opts.caption,a=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass("fancybox-caption--separate",a),a&&i&&i.length&&(o.pos!==n.currPos?(e=s.clone().appendTo(s.parent()),e.children().eq(0).empty().html(i),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css("padding-bottom",r||""))},adjustLayout:function(t){var e,n,o,i,a=this,s=t||a.current;s.isLoaded&&!0!==s.opts.disableLayoutFix&&(s.$content.css("margin-bottom",""),s.$content.outerHeight()>s.$slide.height()+.5&&(o=s.$slide[0].style["padding-bottom"],i=s.$slide.css("padding-bottom"),parseFloat(i)>0&&(e=s.$slide[0].scrollHeight,s.$slide.css("padding-bottom",0),Math.abs(e-s.$slide[0].scrollHeight)<1&&(n=i),s.$slide.css("padding-bottom",o))),s.$content.css("margin-bottom",n))},revealContent:function(t){var e,o,i,a,s=this,r=t.$slide,c=!1,l=!1,d=s.isMoved(t),u=t.isRevealed;return t.isRevealed=!0,e=t.opts[s.firstRun?"animationEffect":"transitionEffect"],i=t.opts[s.firstRun?"animationDuration":"transitionDuration"],i=parseInt(void 0===t.forcedDuration?i:t.forcedDuration,10),!d&&t.pos===s.currPos&&i||(e=!1),"zoom"===e&&(t.pos===s.currPos&&i&&"image"===t.type&&!t.hasError&&(l=s.getThumbPos(t))?c=s.getFitPos(t):e="fade"),"zoom"===e?(s.isAnimating=!0,c.scaleX=c.width/l.width,c.scaleY=c.height/l.height,a=t.opts.zoomOpacity,"auto"==a&&(a=Math.abs(t.width/t.height-l.width/l.height)>.1),a&&(l.opacity=.1,c.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),l),p(t.$content),void n.fancybox.animate(t.$content,c,i,function(){s.isAnimating=!1,s.complete()})):(s.updateSlide(t),e?(n.fancybox.stop(r),o="fancybox-slide--"+(t.pos>=s.prevPos?"next":"previous")+" fancybox-animated fancybox-fx-"+e,r.addClass(o).removeClass("fancybox-slide--current"),t.$content.removeClass("fancybox-is-hidden"),p(r),"image"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(r,"fancybox-slide--current",i,function(){r.removeClass(o).css({transform:"",opacity:""}),t.pos===s.currPos&&s.complete()},!0)):(t.$content.removeClass("fancybox-is-hidden"),u||!d||"image"!==t.type||t.hasError||t.$content.hide().fadeIn("fast"),void(t.pos===s.currPos&&s.complete())))},getThumbPos:function(t){var e,o,i,a,s,r=!1,c=t.$thumb;return!(!c||!g(c[0]))&&(e=n.fancybox.getTranslate(c),o=parseFloat(c.css("border-top-width")||0),i=parseFloat(c.css("border-right-width")||0),a=parseFloat(c.css("border-bottom-width")||0),s=parseFloat(c.css("border-left-width")||0),r={top:e.top+o,left:e.left+s,width:e.width-i-s,height:e.height-o-a,scaleX:1,scaleY:1},e.width>0&&e.height>0&&r)},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),p(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended",function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()}),o.opts.autoFocus&&"html"===o.contentType&&(t=o.$content.find("input[autofocus]:enabled:visible:first"),t.length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],e=o.slides[o.currPos-1],e&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var i,a,s=this,r=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(",");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible"),i=i.filter(r).filter(function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger("focus")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,u=this,f=u.current,h=function(){u.cleanUp(t)};return!u.isClosing&&(u.isClosing=!0,!1===u.trigger("beforeClose",t)?(u.isClosing=!1,d(function(){u.update()}),!1):(u.removeEvents(),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),!0!==t?n.fancybox.stop(f.$slide):o=!1,f.$slide.siblings().trigger("onReset").remove(),i&&u.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration",i+"ms"),u.hideLoading(f),u.hideControls(!0),u.updateCursor(),"zoom"!==o||a&&i&&"image"===f.type&&!u.isMoved()&&!f.hasError&&(l=u.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},r=f.opts.zoomOpacity,
+"auto"==r&&(r=Math.abs(f.width/f.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),p(a),n.fancybox.animate(a,l,i,h),!0):(o&&i?n.fancybox.animate(f.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),"fancybox-animated fancybox-fx-"+o,i,h):!0===t?setTimeout(h,i):h(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;if(s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),!1===o)return o;"afterClose"!==t&&a.$refs?a.$refs.container.trigger(t+".fb",i):r.trigger(t+".fb",i)},updateControls:function(){var t=this,o=t.current,i=o.index,a=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger("refresh"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),a.find("[data-fancybox-count]").html(t.group.length),a.find("[data-fancybox-index]").html(i+1),a.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&i<=0),a.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&i>=t.group.length-1),"image"===o.type?a.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&a.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(t){var e=this,n=["infobar","toolbar","nav"];!t&&e.current.opts.preventCaptionOverlap||n.push("caption"),this.$refs.container.removeClass(n.map(function(t){return"fancybox-show-"+t}).join(" ")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.5.7",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof b&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new b(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),r.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))})},setTranslate:function(t,e){var n="",o={};if(t&&e)return void 0===e.left&&void 0===e.top||(n=(void 0===e.left?t.position().left:e.left)+"px, "+(void 0===e.top?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),void 0!==e.scaleX&&void 0!==e.scaleY?n+=" scale("+e.scaleX+", "+e.scaleY+")":void 0!==e.scaleX&&(n+=" scaleX("+e.scaleX+")"),n.length&&(o.transform=n),void 0!==e.opacity&&(o.opacity=e.opacity),void 0!==e.width&&(o.width=e.width),void 0!==e.height&&(o.height=e.height),t.css(o)},animate:function(t,e,o,i,a){var s,r=this;n.isFunction(o)&&(i=o,o=null),r.stop(t),s=r.getTranslate(t),t.on(f,function(c){(!c||!c.originalEvent||t.is(c.originalEvent.target)&&"z-index"!=c.originalEvent.propertyName)&&(r.stop(t),n.isNumeric(o)&&t.css("transition-duration",""),n.isPlainObject(e)?void 0!==e.scaleX&&void 0!==e.scaleY&&r.setTranslate(t,{top:e.top,left:e.left,width:s.width*e.scaleX,height:s.height*e.scaleY,scaleX:1,scaleY:1}):!0!==a&&t.removeClass(e),n.isFunction(i)&&i(c))}),n.isNumeric(o)&&t.css("transition-duration",o+"ms"),n.isPlainObject(e)?(void 0!==e.scaleX&&void 0!==e.scaleY&&(delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger(f)},o+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(f),t.off(f).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i),r.on("click.fb-start","[data-fancybox-trigger]",function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})}),function(){var t=null;r.on("mousedown mouseup focus blur",".fancybox-button",function(e){switch(e.type){case"mousedown":t=n(this);break;case"mouseup":t=null;break;case"focusin":n(".fancybox-button").removeClass("fancybox-focus"),n(this).is(t)||n(this).is("[disabled]")||n(this).addClass("fancybox-focus");break;case"focusout":n(".fancybox-button").removeClass("fancybox-focus")}})}()}}(window,document,jQuery),function(t){"use strict";var e={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"https://www.youtube-nocookie.com/embed/$4",thumb:"https://img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}},n=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e};t(document).on("objectNeedsType.fb",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||"",h=!1;s=t.extend(!0,{},e,a.opts.media),t.each(s,function(e,o){if(c=p.match(o.matcher)){if(h=o.type,f=e,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],"?"==d[0]&&(d=d.substring(1)),d=d.split("&");for(var i=0;i
1&&("youtube"===n.contentSource||"vimeo"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe')||n.isFunction(t.get(0).onclick)||t.data("selectable"))return!0;for(var e=0,o=t[0].attributes,i=o.length;ee.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};d.prototype.destroy=function(){var t=this;t.$container.off(".fb.touch"),n(e).off(".fb.touch"),t.requestId&&(i(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is("img")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass("fancybox-animated"))return o.stopPropagation(),void o.preventDefault();i.realPoints=i.startPoints=a(o),i.startPoints.length&&(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",i.onscroll,!0),((i.opts||i.canPan)&&(c.is(i.$stage)||i.$stage.find(c).length)||(c.is(".fancybox-image")&&o.preventDefault(),n.fancybox.isMobile&&c.parents(".fancybox-caption").length))&&(i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-is-grabbing")),2===i.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))))}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener("scroll",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)"x"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:"x"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass("fancybox-is-sliding"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping="y":r.isDragging||!1===s.opts.vertical||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?"y":"x"),"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,function(t,e){var o,i;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),i=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:"",opacity:"","transition-duration":""}).removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")}),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-i.top,s.sliderStartPos.left=o.left-i.left),n.fancybox.setTranslate(e.$slide,{top:o.top-i.top,left:o.left-i.left})}),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;if(s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5))return void(t.startPoints=t.newPoints);t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&i(t.requestId),t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&aa?(t=t>0?0:t,t=ts?(e=e>0?0:e,e=e1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,250)):r&&o.distanceX>0?i=o.instance.previous(300):r&&o.distanceX<0&&(i=o.instance.next(300)),!1!==i||"x"!=t&&"y"!=t||o.instance.centerSlide(200),o.$container.removeClass("fancybox-is-sliding")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(!1===i.opts.momentum||i.dMs>350?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+500*i.velocityX,e=i.contentLastPos.top+500*i.velocityY),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,366))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),rs.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case"close":r.close(i.startEvent);break;case"toggleControls":r.toggleControls();break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(i.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f("dblclick"+o)}else i.tapX=d,i.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?i.tapped=setTimeout(function(){i.tapped=null,r.isAnimating||f("click"+o)},500):f("click"+o);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))}).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,jQuery),function(t,e){"use strict";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:' '},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('
').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,i=o.current;i&&(!0===t||i.opts.loop||o.currIndex '},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))})}e(t).on({"onInit.fb":function(t,e){var i;if(!n)return void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){"use strict";var n="fancybox-thumbs";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:' '},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var o=function(t){this.init(t)};e.extend(o.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]");for(var i=0,a=n.length;i1));i++);o>1&&e.opts?(e.$button.removeAttr("style").on("click",function(){e.toggle()}),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('
').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on("click","a",function(){i.jumpTo(e(this).attr("data-index"))})),o.$list||(o.$list=e('').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.thumb,t||"image"!==n.type||(t=n.src),s.push('
")}),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,o=this,i=o.$list,a=o.$grid;o.instance.current&&(e=i.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+o.instance.current.index+'"]').addClass("fancybox-thumbs-active"),n=e.position(),"y"===o.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):"x"===o.opts.axis&&(n.left
a.scrollLeft()+(a.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new o(e),n.isActive&&!0===n.opts.autoStart&&n.show())},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e){"use strict";function n(t){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}e.extend(!0,e.fancybox.defaults,{btnTpl:{share:' '},share:{url:function(t,e){return!t.currentHash&&"inline"!==e.type&&"html"!==e.type&&(e.origSrc||e.src)||window.location},
+tpl:''}}),e(t).on("click","[data-fancybox-share]",function(){var t,o,i=e.fancybox.getInstance(),a=i.current||null;a&&("function"===e.type(a.opts.share.url)&&(t=a.opts.share.url.apply(a,[i,a])),o=a.opts.share.tpl.replace(/\{\{media\}\}/g,"image"===a.type?encodeURIComponent(a.src):"").replace(/\{\{url\}\}/g,encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g,n(t)).replace(/\{\{descr\}\}/g,i.$caption?encodeURIComponent(i.$caption.text()):""),e.fancybox.open({src:i.translate(i,o),type:"html",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one("beforeClose.fb",function(){t.close(null,0)}),e.$content.find(".fancybox-share__button").click(function(){return window.open(this.href,"Share","width=550, height=450"),!1})},mobile:{autoFocus:!1}}}))})}(document,jQuery),function(t,e,n){"use strict";function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,""!==(n=e.hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+"").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t})}),n(function(){!1!==n.fancybox.defaults.hash&&(n(e).on({"onInit.fb":function(t,e){var n,i;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(i=a(e))&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,s){var r;i&&!1!==i.opts.hash&&(r=a(o))&&(o.currentHash=r+(o.group.length>1?"-"+(i.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300)))},"beforeClose.fb":function(n,o,i){i&&!1!==i.opts.hash&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),function(t,o){var i=n(o).data("FancyBox");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){"use strict";var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",function(t){var o=e.current,i=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||"auto"===o.opts.wheel&&"image"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass("fancybox-animated")||(t=t.originalEvent||t,i-n<250||(n=i,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?"next":"previous"]())))})}})}(document,jQuery);
\ No newline at end of file
diff --git a/images/algolia.svg b/images/algolia.svg
new file mode 100644
index 0000000..398ed53
--- /dev/null
+++ b/images/algolia.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by-nc-nd.svg b/images/cc-by-nc-nd.svg
new file mode 100644
index 0000000..b55a5b6
--- /dev/null
+++ b/images/cc-by-nc-nd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by-nc-sa.svg b/images/cc-by-nc-sa.svg
new file mode 100644
index 0000000..0ca8f96
--- /dev/null
+++ b/images/cc-by-nc-sa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by-nc.svg b/images/cc-by-nc.svg
new file mode 100644
index 0000000..2e57225
--- /dev/null
+++ b/images/cc-by-nc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by-nd.svg b/images/cc-by-nd.svg
new file mode 100644
index 0000000..241d4be
--- /dev/null
+++ b/images/cc-by-nd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by-sa.svg b/images/cc-by-sa.svg
new file mode 100644
index 0000000..355a4cc
--- /dev/null
+++ b/images/cc-by-sa.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/cc-by.svg b/images/cc-by.svg
new file mode 100644
index 0000000..8b68bd8
--- /dev/null
+++ b/images/cc-by.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/images/icons/favicon-16x16.png b/images/icons/favicon-16x16.png
new file mode 100644
index 0000000..576bfd7
Binary files /dev/null and b/images/icons/favicon-16x16.png differ
diff --git a/images/icons/favicon-32x32.png b/images/icons/favicon-32x32.png
new file mode 100644
index 0000000..45f044e
Binary files /dev/null and b/images/icons/favicon-32x32.png differ
diff --git a/images/icons/stun-logo.svg b/images/icons/stun-logo.svg
new file mode 100644
index 0000000..9cceb85
--- /dev/null
+++ b/images/icons/stun-logo.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/images/loading.svg b/images/loading.svg
new file mode 100644
index 0000000..1306ca3
--- /dev/null
+++ b/images/loading.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e376b37
--- /dev/null
+++ b/index.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+Hexo Welcome to Hexo ! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub .
+
Quick Start Create a new post 1 $ hexo new "My New Post"
+
+
More info: Writing
+
Run server
+
+
More info: Server
+
Generate static files
+
+
More info: Generating
+
Deploy to remote sites
+
+
More info: Deployment
+
1
\ No newline at end of file
diff --git a/js/header.js b/js/header.js
new file mode 100644
index 0000000..6f7204e
--- /dev/null
+++ b/js/header.js
@@ -0,0 +1,212 @@
+$(document).ready(function () {
+ var $menuBtn = $('.header-nav-menubtn')
+ var $menu = $('.header-nav-menu')
+ var $menuItem = $('.header-nav-menu-item')
+ var $submenu = $('.header-nav-submenu')
+ var isMobile = $menuBtn.is(':visible')
+
+ var isMenuShow = false
+ var isSubmenuShow = false
+
+ function resetMenuHeight () {
+ $menuItem.velocity(
+ {
+ height: $menuItem.outerHeight()
+ },
+ {
+ complete: function () {
+ $submenu.css({ display: 'none', opacity: 0 })
+ }
+ }
+ )
+ }
+
+ $(window).on(
+ 'resize',
+ Stun.utils.throttle(function () {
+ isMobile = $menuBtn.is(':visible')
+ if (isMobile) {
+ $submenu.removeClass('hide--force')
+
+ if (isSubmenuShow) {
+ resetMenuHeight()
+ isSubmenuShow = false
+ }
+ } else {
+ $submenu.css({ display: 'none', opacity: 0 })
+ }
+ }, 200)
+ )
+
+ var isNightModeFocus = true
+ var $nightMode = $('.mode')
+
+ $(document).on('click', function () {
+ if ($menu.is(':visible')) {
+ if (isMobile && isSubmenuShow) {
+ resetMenuHeight()
+ isSubmenuShow = false
+ }
+ $menu.css({ display: 'none' })
+ isMenuShow = false
+ }
+ if (isNightModeFocus) {
+ $nightMode.removeClass('mode--focus')
+ isNightModeFocus = false
+ }
+ })
+
+ Stun.utils.pjaxReloadHeader = function () {
+ $menuBtn = $('.header-nav-menubtn')
+ $menu = $('.header-nav-menu')
+ $menuItem = $('.header-nav-menu-item')
+ $submenu = $('.header-nav-submenu')
+ isMobile = $menuBtn.is(':visible')
+
+ isMenuShow = false
+ isSubmenuShow = false
+
+ function getNightMode () {
+ var nightMode = false
+ try {
+ if (parseInt(Stun.utils.Cookies().get(NIGHT_MODE_COOKIES_KEY))) {
+ nightMode = true
+ }
+ } catch (err) {
+ /* empty */
+ }
+ return nightMode
+ }
+
+ if (CONFIG.nightMode && CONFIG.nightMode.enable) {
+ var isNightMode = false
+ var NIGHT_MODE_COOKIES_KEY = 'night_mode'
+ $nightMode = $('.mode')
+ isNightModeFocus = true
+
+ if (getNightMode()) {
+ $nightMode.addClass('mode--checked')
+ $nightMode.addClass('mode--focus')
+ $('html').addClass('nightmode')
+ isNightMode = true
+ } else {
+ isNightMode = false
+ }
+ $('.mode').on('click', function (e) {
+ e.stopPropagation()
+ isNightMode = !isNightMode
+ isNightModeFocus = true
+ Stun.utils.Cookies().set(NIGHT_MODE_COOKIES_KEY, isNightMode ? 1 : 0)
+ $nightMode.toggleClass('mode--checked')
+ $nightMode.addClass('mode--focus')
+ $('html').toggleClass('nightmode')
+ })
+ }
+
+ $menuBtn.on('click', function (e) {
+ e.stopPropagation()
+ if (isMobile && isMenuShow && isSubmenuShow) {
+ resetMenuHeight()
+ isSubmenuShow = false
+ }
+ if (!isMenuShow) {
+ isMenuShow = true
+ } else {
+ isMenuShow = false
+ }
+ $menu.velocity('stop').velocity(
+ {
+ opacity: isMenuShow ? 1 : 0
+ },
+ {
+ duration: isMenuShow ? 200 : 0,
+ display: isMenuShow ? 'block' : 'none'
+ }
+ )
+ })
+
+ // Whether to allow events to bubble in the menu.
+ var isBubbleInMenu = false
+ $('.header-nav-submenu-item').on('click', function () {
+ isBubbleInMenu = true
+ })
+
+ $menuItem.on('click', function (e) {
+ if (!isMobile) {
+ return
+ }
+ var $submenu = $(this).find('.header-nav-submenu')
+ if (!$submenu.length) {
+ return
+ }
+ if (!isBubbleInMenu) {
+ e.stopPropagation()
+ } else {
+ isBubbleInMenu = false
+ }
+
+ var menuItemHeight = $menuItem.outerHeight()
+ var submenuHeight =
+ menuItemHeight + Math.floor($submenu.outerHeight()) * $submenu.length
+ var menuShowHeight = 0
+
+ if ($(this).outerHeight() > menuItemHeight) {
+ isSubmenuShow = false
+ menuShowHeight = menuItemHeight
+ } else {
+ isSubmenuShow = true
+ menuShowHeight = submenuHeight
+ }
+ $submenu.css({ display: 'block', opacity: 1 })
+ // Accordion effect.
+ $(this)
+ .velocity('stop')
+ .velocity({ height: menuShowHeight }, { duration: 300 })
+ .siblings()
+ .velocity({ height: menuItemHeight }, { duration: 300 })
+ })
+
+ $menuItem.on('mouseenter', function () {
+ var $submenu = $(this).find('.header-nav-submenu')
+ if (!$submenu.length) {
+ return
+ }
+ if (!$submenu.is(':visible')) {
+ if (isMobile) {
+ $submenu.css({ display: 'block', opacity: 1 })
+ } else {
+ $submenu.removeClass('hide--force')
+ $submenu
+ .velocity('stop')
+ .velocity('transition.slideUpIn', { duration: 200 })
+ }
+ }
+ })
+
+ $menuItem.on('mouseleave', function () {
+ var $submenu = $(this).find('.header-nav-submenu')
+ if (!$submenu.length) {
+ return
+ }
+ if (!isMobile) {
+ $submenu.addClass('hide--force')
+ isSubmenuShow = false
+ }
+ })
+ }
+
+ Stun.utils.pjaxReloadScrollIcon = function () {
+ if (CONFIG.header && CONFIG.header.scrollDownIcon) {
+ $('.header-banner-arrow').on('click', function (e) {
+ e.stopPropagation()
+ $('#container').velocity('scroll', {
+ offset: $('#header').outerHeight()
+ })
+ })
+ }
+ }
+
+ // Initializaiton
+ Stun.utils.pjaxReloadHeader()
+ Stun.utils.pjaxReloadScrollIcon()
+})
diff --git a/js/jquery-3.6.4.min.js b/js/jquery-3.6.4.min.js
new file mode 100644
index 0000000..0de648e
--- /dev/null
+++ b/js/jquery-3.6.4.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.6.4 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.4",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssHas=ce(function(){try{return C.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML=" ";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssHas||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML=" ",v.option=!!ce.lastChild;var ge={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0',
+ ' ',
+ '',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ ' '
+ ].join('');
+
+ var box = $(html);
+
+ $('body').append(box);
+ }
+
+ $('.article-share-box.on').hide();
+
+ box.css({
+ top: offset.top + 25,
+ left: offset.left
+ }).addClass('on');
+ }).on('click', '.article-share-box', function(e){
+ e.stopPropagation();
+ }).on('click', '.article-share-box-input', function(){
+ $(this).select();
+ }).on('click', '.article-share-box-link', function(e){
+ e.preventDefault();
+ e.stopPropagation();
+
+ window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450');
+ });
+
+ // Caption
+ $('.article-entry').each(function(i){
+ $(this).find('img').each(function(){
+ if ($(this).parent().hasClass('fancybox') || $(this).parent().is('a')) return;
+
+ var alt = this.alt;
+
+ if (alt) $(this).after('' + alt + ' ');
+
+ $(this).wrap(' ')
+ });
+
+ $(this).find('.fancybox').each(function(){
+ $(this).attr('rel', 'article' + i);
+ });
+ });
+
+ if ($.fancybox){
+ $('.fancybox').fancybox();
+ }
+
+ // Mobile nav
+ var $container = $('#container'),
+ isMobileNavAnim = false,
+ mobileNavAnimDuration = 200;
+
+ var startMobileNavAnim = function(){
+ isMobileNavAnim = true;
+ };
+
+ var stopMobileNavAnim = function(){
+ setTimeout(function(){
+ isMobileNavAnim = false;
+ }, mobileNavAnimDuration);
+ }
+
+ $('#main-nav-toggle').on('click', function(){
+ if (isMobileNavAnim) return;
+
+ startMobileNavAnim();
+ $container.toggleClass('mobile-nav-on');
+ stopMobileNavAnim();
+ });
+
+ $('#wrap').on('click', function(){
+ if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return;
+
+ $container.removeClass('mobile-nav-on');
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/js/scroll.js b/js/scroll.js
new file mode 100644
index 0000000..94ba2d6
--- /dev/null
+++ b/js/scroll.js
@@ -0,0 +1,105 @@
+$(document).ready(function () {
+ var isHeaderEnable = CONFIG.header && CONFIG.header.enable
+ var isShowHeaderOnPost = isHeaderEnable && CONFIG.header.showOnPost
+ // The previous distance from the page to the top.
+ var prevScrollTop = 0
+ var isNavFix = false
+ var isAnimation = true
+
+ function headerNavScroll () {
+ var isPostPage = !!$('#is-post').length
+ var isNoHeader = !isHeaderEnable || (isPostPage && !isShowHeaderOnPost)
+ var $headerNav = $('.header-nav')
+ var scrollTop = Math.floor($(window).scrollTop())
+ var delta = Math.floor(scrollTop - prevScrollTop)
+
+ if (scrollTop === 0) {
+ if (isNoHeader) {
+ setTimeout(function () {
+ $headerNav.addClass('slider--clear')
+ isAnimation = false
+ }, 200)
+ }
+ $headerNav.removeClass('header-nav--sticky')
+ $headerNav.removeClass('slider--up')
+ $headerNav.addClass('slider--down')
+ } else {
+ if (isNoHeader && scrollTop < $headerNav.height()) {
+ return false
+ }
+
+ var MIN_SCROLL_TO_CHANGE_NAV = 5
+ // Make the state of nav bar not change due to tiny scrolling.
+ if (Math.abs(delta) > MIN_SCROLL_TO_CHANGE_NAV) {
+ if (isNoHeader) {
+ if (!isAnimation) {
+ isAnimation = true
+ } else {
+ $headerNav.removeClass('slider--clear')
+ }
+ }
+ if (!isNavFix) {
+ isNavFix = true
+ } else {
+ $headerNav.addClass('header-nav--sticky')
+ }
+ if (delta > 0) {
+ $headerNav.removeClass('slider--down')
+ $headerNav.addClass('slider--up')
+ } else {
+ $headerNav.removeClass('slider--up')
+ $headerNav.addClass('slider--down')
+ }
+ } else {
+ $headerNav.addClass('header-nav--sticky')
+ }
+ }
+ prevScrollTop = scrollTop
+ }
+
+ var isBack2topEnable = CONFIG.back2top && CONFIG.back2top.enable
+ var isBack2topShow = false
+
+ // Back the page to top.
+ function back2top () {
+ var $back2top = $('#back2top')
+ var scrollTop = $(window).scrollTop()
+
+ if (scrollTop !== 0) {
+ if (!isBack2topShow) {
+ $back2top.addClass('back2top--show')
+ $back2top.removeClass('back2top--hide')
+ isBack2topShow = true
+ }
+ } else {
+ $back2top.addClass('back2top--hide')
+ $back2top.removeClass('back2top--show')
+ isBack2topShow = false
+ }
+ }
+
+ if (isBack2topEnable) {
+ // Initializaiton
+ back2top()
+
+ $('#back2top').on('click', function () {
+ $('body')
+ .velocity('stop')
+ .velocity('scroll')
+ })
+ }
+
+ // Initializaiton
+ headerNavScroll()
+
+ $(window).on(
+ 'scroll',
+ Stun.utils.throttle(function () {
+ headerNavScroll()
+
+ if (isBack2topEnable) {
+ back2top()
+ }
+ }, 100)
+ )
+})
diff --git a/js/sidebar.js b/js/sidebar.js
new file mode 100644
index 0000000..1bd7cc7
--- /dev/null
+++ b/js/sidebar.js
@@ -0,0 +1,229 @@
+$(document).ready(function () {
+ var tocDepth = (CONFIG.sidebar && CONFIG.sidebar.tocMaxDepth) || 4
+ // Optimize selector by theme config.
+ var HEADING_SELECTOR = 'h1,h2,h3,h4,h5,h6,'
+ .slice(0, tocDepth * 3)
+ .slice(0, -1)
+
+ function initTocDisplay () {
+ if ($('.post-body, .custompage').find(HEADING_SELECTOR)[0]) {
+ return
+ }
+ $('.sidebar-nav').addClass('hide')
+ $('.sidebar-toc').addClass('hide')
+ $('.sidebar-ov').removeClass('hide')
+ }
+
+ // The heading that reached the top currently.
+ var currHeading = null
+ // The heading that reached the top last time.
+ var lastHeading = null
+ var isRemovedTocClass = false
+
+ // Automatically expand items in the article directory
+ // based on the scrolling of heading in the article.
+ function autoSpreadToc () {
+ var $postBody = $('.post-body, .custompage')
+ var $allTocItem = $('.sidebar-toc li')
+ var $headings = $postBody.find(HEADING_SELECTOR)
+ var $firsetChild = $headings.first()
+
+ $headings.each(function () {
+ var headingTop = this.getBoundingClientRect().top
+ // The minimum distance from the top of the browser
+ // when heading is marked as active in toc.
+ var MIN_HEIGHT_TO_TOP = 5
+
+ if (headingTop <= MIN_HEIGHT_TO_TOP) {
+ currHeading = window.encodeURIComponent(this.getAttribute('id'))
+ }
+ })
+
+ // All heading are not to the top.
+ if (
+ $postBody[0] &&
+ $firsetChild[0] &&
+ $firsetChild[0].getBoundingClientRect().top > 0 &&
+ $firsetChild.offset().top - $(window).scrollTop() > 0
+ ) {
+ if (!isRemovedTocClass) {
+ $allTocItem.removeClass('active current')
+ isRemovedTocClass = true
+ }
+ return
+ }
+ if (currHeading !== lastHeading) {
+ var $targetLink = $('.sidebar-toc a[href="#' + currHeading + '"]')
+
+ // In order to be compatible with Hexo under v5.0.0
+ if (!$targetLink.length) {
+ var anchorDecode = window.decodeURIComponent(currHeading)
+ $targetLink = $('.sidebar-toc a[href="#' + anchorDecode + '"]')
+ }
+
+ $allTocItem.removeClass('active current')
+ $targetLink.parents('li').addClass('active')
+ $targetLink.parent().addClass('current')
+ lastHeading = currHeading
+ isRemovedTocClass = false
+ }
+ }
+
+ // Whether toc needs scrolling.
+ var isTocScroll = false
+ // Scroll the post toc to the middle.
+ function scrollTocToMiddle () {
+ var $tocWrapHeight = $('.sidebar-toc').height()
+ var $tocHeight = $('.sidebar-toc > div').height()
+
+ if ($tocHeight <= $tocWrapHeight) {
+ return
+ }
+
+ var $tocWrap = $('.sidebar-toc')
+ var $currTocItem = $('.sidebar-toc .current a')
+
+ if ($currTocItem[0] && $tocWrap[0]) {
+ var tocTop = $currTocItem.offset().top - $tocWrap.offset().top
+ isTocScroll = tocTop > $tocWrapHeight || tocTop < 0
+ }
+
+ if (isTocScroll) {
+ $currTocItem.velocity('stop').velocity('scroll', {
+ container: $tocWrap,
+ offset: -$tocWrapHeight / 2,
+ duration: 500,
+ easing: 'easeOutQuart'
+ })
+ }
+ }
+
+ // Distance from sidebar to top.
+ var sidebarToTop = 0
+ if (CONFIG.sidebar && CONFIG.sidebar.offsetTop) {
+ sidebarToTop = parseInt(CONFIG.sidebar.offsetTop)
+ }
+
+ // Sticky the sidebar when it arrived the top.
+ function sidebarSticky () {
+ var $sidebar = $('#sidebar')
+ var targetY = document
+ .getElementById('content-wrap')
+ .getBoundingClientRect().top
+
+ if (targetY < sidebarToTop) {
+ $sidebar.addClass('sidebar--sticky')
+ } else {
+ $sidebar.removeClass('sidebar--sticky')
+ }
+ }
+
+ // Update the reading progress lines of post.
+ function readProgress () {
+ // Not on post page.
+ if ($('#is-post').length === 0) {
+ return
+ }
+
+ var $post = $('.content')
+ var postTop = $post.offset().top
+ var postEndTop = 0
+ var postEndHeight = 0
+ var postReadingHeight = 0
+ var isEnablePostEnd = false
+ var percent = 0
+
+ if (CONFIG.postWidget && CONFIG.postWidget.endText) {
+ isEnablePostEnd = true
+ }
+ if (isEnablePostEnd) {
+ postEndTop = $('.post-ending').offset().top
+ postEndHeight = $('.post-ending').outerHeight()
+ postReadingHeight = postEndTop - postTop + postEndHeight
+ } else {
+ postEndTop = $('.post-footer').offset().top
+ postReadingHeight = postEndTop - postTop
+ }
+
+ var windowHeight = $(window).height()
+ var postScrollTop = 0
+
+ if ($post.length !== 0) {
+ postScrollTop =
+ parseInt($post[0].getBoundingClientRect().top * -1) + windowHeight
+ }
+
+ var percentNum = Number($('.sidebar-reading-info__num').text())
+ postReadingHeight = parseInt(Math.abs(postReadingHeight))
+ percent = parseInt((postScrollTop / postReadingHeight) * 100)
+ percent = percent > 100 ? 100 : percent < 0 ? 0 : percent
+
+ // Has reached the maximum or minimum
+ if (
+ (percent === 0 && percentNum === 0) ||
+ (percent === 100 && percentNum === 100)
+ ) {
+ return
+ }
+ $('.sidebar-reading-info__num').text(percent)
+ $('.sidebar-reading-line').css(
+ 'transform',
+ 'translateX(' + (percent - 100) + '%)'
+ )
+ }
+
+ // Initial run
+ autoSpreadToc()
+ sidebarSticky()
+ scrollTocToMiddle()
+ readProgress()
+
+ $(window).on('scroll', function () {
+ sidebarSticky()
+ })
+
+ $(window).on(
+ 'scroll',
+ Stun.utils.throttle(function () {
+ autoSpreadToc()
+ scrollTocToMiddle()
+ readProgress()
+ }, 150)
+ )
+
+ Stun.utils.pjaxReloadSidebar = function () {
+ var $navToc = $('.sidebar-nav-toc')
+ var $navOv = $('.sidebar-nav-ov')
+ var $tocWrap = $('.sidebar-toc')
+ var $overview = $('.sidebar-ov')
+
+ $navToc.on('click', function (e) {
+ e.stopPropagation()
+ if ($(this).hasClass('current')) {
+ return
+ }
+ $navToc.addClass('current')
+ $navOv.removeClass('current')
+ $tocWrap.css('display', 'block')
+ $tocWrap.velocity('stop').velocity('fadeIn')
+ $overview.css('display', 'none')
+ $overview.velocity('stop').velocity('fadeOut')
+ })
+ $navOv.on('click', function (e) {
+ e.stopPropagation()
+ if ($(this).hasClass('current')) {
+ return
+ }
+ $navOv.addClass('current')
+ $navToc.removeClass('current')
+ $tocWrap.css('display', 'none')
+ $tocWrap.velocity('stop').velocity('fadeOut')
+ $overview.css('display', 'block')
+ $overview.velocity('stop').velocity('fadeIn')
+ })
+ initTocDisplay()
+ }
+
+ // Initialization
+ Stun.utils.pjaxReloadSidebar()
+})
diff --git a/js/stun-boot.js b/js/stun-boot.js
new file mode 100644
index 0000000..d67e5a5
--- /dev/null
+++ b/js/stun-boot.js
@@ -0,0 +1,49 @@
+$(document).ready(function () {
+ Stun.utils.showThemeInConsole()
+
+ if (CONFIG.shortcuts && CONFIG.shortcuts.switchPost) {
+ Stun.utils.registerSwitchPost()
+ }
+
+ // Not reload this, because it's changeless.
+ if (CONFIG.externalLink) {
+ Stun.utils.addIconToExternalLink('#footer')
+ }
+
+ Stun.utils.pjaxReloadBoot = function () {
+ if (CONFIG.codeblock) {
+ var codeStyle = CONFIG.codeblock.style
+ if (codeStyle === 'default') {
+ this.addCodeHeader()
+ this.addCopyButton()
+ } else if (codeStyle === 'carbon') {
+ this.addCodeHeader('carbon')
+ this.addCopyButton('carbon')
+ } else if (codeStyle === 'simple') {
+ this.addCopyButton('simple')
+ }
+ this.registerCopyEvent()
+ }
+ if (CONFIG.reward) {
+ this.registerShowReward()
+ }
+ if (CONFIG.lazyload) {
+ this.lazyLoadImage()
+ }
+ if (CONFIG.galleryWaterfall) {
+ this.showImageToWaterfall()
+ }
+ if (CONFIG.externalLink) {
+ var CONTAINER = '.archive, .post-title'
+ this.addIconToExternalLink(CONTAINER)
+ }
+ if (CONFIG.fancybox) {
+ this.wrapImageWithFancyBox()
+ } else if (CONFIG.zoomImage) {
+ this.registerZoomImage()
+ }
+ }
+
+ // Initializaiton
+ Stun.utils.pjaxReloadBoot()
+})
diff --git a/js/utils.js b/js/utils.js
new file mode 100644
index 0000000..63febe0
--- /dev/null
+++ b/js/utils.js
@@ -0,0 +1,611 @@
+Stun.utils = Stun.$u = {
+ /**
+ * Debounce
+ * @param {Object} func Callback function
+ * @param {Number} wait Waiting time
+ * @param {Boolean} immediate Run immediately
+ */
+ debounce: function (func, wait, immediate) {
+ var timeout
+ return function () {
+ var context = this
+ var args = arguments
+
+ if (timeout) clearTimeout(timeout)
+ if (immediate) {
+ var callNow = !timeout
+ timeout = setTimeout(function () {
+ timeout = null
+ }, wait)
+ if (callNow) func.apply(context, args)
+ } else {
+ timeout = setTimeout(function () {
+ func.apply(context, args)
+ }, wait)
+ }
+ }
+ },
+ /**
+ * Throttle
+ * @param {Object} func Callback function
+ * @param {Number} wait Waiting time
+ * @param {Object} options leading: Boolean, trailing: Boolean
+ */
+ throttle: function (func, wait, options) {
+ var timeout, context, args
+ var previous = 0
+ if (!options) options = {}
+
+ var later = function () {
+ previous = options.leading === false ? 0 : new Date().getTime()
+ timeout = null
+ func.apply(context, args)
+ if (!timeout) context = args = null
+ }
+ var throttled = function () {
+ var now = new Date().getTime()
+ if (!previous && options.leading === false) previous = now
+ var remaining = wait - (now - previous)
+ context = this
+ args = arguments
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout)
+ timeout = null
+ }
+ previous = now
+ func.apply(context, args)
+ if (!timeout) context = args = null
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining)
+ }
+ }
+ return throttled
+ },
+ hasMobileUA: function () {
+ var nav = window.navigator
+ var ua = nav.userAgent
+ var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g
+ return pa.test(ua)
+ },
+ isTablet: function () {
+ return (
+ window.screen.width > 767 &&
+ window.screen.width < 992 &&
+ this.hasMobileUA()
+ )
+ },
+ isMobile: function () {
+ return window.screen.width < 767 && this.hasMobileUA()
+ },
+ isDesktop: function () {
+ return !this.isTablet() && !this.isMobile()
+ },
+ Cookies: function () {
+ function extend () {
+ var i = 0
+ var result = {}
+ for (; i < arguments.length; i++) {
+ var attributes = arguments[i]
+ for (var key in attributes) {
+ result[key] = attributes[key]
+ }
+ }
+ return result
+ }
+
+ function init (converter) {
+ function api (key, value, attributes) {
+ var result
+ if (typeof document === 'undefined') {
+ return
+ }
+ // Write
+ if (arguments.length > 1) {
+ attributes = extend({ path: '/' }, api.defaults, attributes)
+ if (typeof attributes.expires === 'number') {
+ var expires = new Date()
+ expires.setMilliseconds(
+ expires.getMilliseconds() + attributes.expires * 864e5
+ )
+ attributes.expires = expires
+ }
+ // We're using "expires" because "max-age" is not supported by IE
+ attributes.expires = attributes.expires
+ ? attributes.expires.toUTCString()
+ : ''
+ try {
+ result = JSON.stringify(value)
+ if (/^[{[]/.test(result)) {
+ value = result
+ }
+ } catch (e) {
+ /* empty */
+ }
+ if (!converter.write) {
+ value = encodeURIComponent(String(value)).replace(
+ /%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,
+ decodeURIComponent
+ )
+ } else {
+ value = converter.write(value, key)
+ }
+ key = encodeURIComponent(String(key))
+ key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
+ key = key.replace(/[()]/g, escape)
+
+ var stringifiedAttributes = ''
+ for (var attributeName in attributes) {
+ if (!attributes[attributeName]) {
+ continue
+ }
+ stringifiedAttributes += '; ' + attributeName
+ if (attributes[attributeName] === true) {
+ continue
+ }
+ stringifiedAttributes += '=' + attributes[attributeName]
+ }
+ return (document.cookie = key + '=' + value + stringifiedAttributes)
+ }
+ // Read
+ if (!key) {
+ result = {}
+ }
+ // To prevent the for loop in the first place assign an empty array
+ // in case there are no cookies at all. Also prevents odd result when
+ // calling "get()"
+ var cookies = document.cookie ? document.cookie.split('; ') : []
+ var rdecode = /(%[0-9A-Z]{2})+/g
+ var i = 0
+
+ for (; i < cookies.length; i++) {
+ var parts = cookies[i].split('=')
+ var cookie = parts.slice(1).join('=')
+
+ if (cookie.charAt(0) === '"') {
+ cookie = cookie.slice(1, -1)
+ }
+ try {
+ var name = parts[0].replace(rdecode, decodeURIComponent)
+ cookie = converter.read
+ ? converter.read(cookie, name)
+ : converter(cookie, name) ||
+ cookie.replace(rdecode, decodeURIComponent)
+ if (this.json) {
+ try {
+ cookie = JSON.parse(cookie)
+ } catch (e) {
+ /* empty */
+ }
+ }
+ if (key === name) {
+ result = cookie
+ break
+ }
+ if (!key) {
+ result[name] = cookie
+ }
+ } catch (e) {
+ /* empty */
+ }
+ }
+ return result
+ }
+ api.set = api
+ api.get = function (key) {
+ return api.call(api, key)
+ }
+ api.getJSON = function () {
+ return api.apply({ json: true }, [].slice.call(arguments))
+ }
+ api.defaults = {}
+ api.remove = function (key, attributes) {
+ api(key, '', extend(attributes, { expires: -1 }))
+ }
+ api.withConverter = init
+ return api
+ }
+ return init(function () {})
+ },
+ showThemeInConsole: function () {
+ var stunInfo = '主题不错?⭐star 支持一下 ->'
+ var stunURL = 'https://github.com/liuyib/hexo-theme-stun'
+ var stunNameStr =
+ '\n\n ___ ___ ___ ___ \n /\\ \\ /\\ \\ /\\__\\ /\\__\\ \n /::\\ \\ \\:\\ \\ /:/ / /::| | \n /:/\\ \\ \\ \\:\\ \\ /:/ / /:|:| | \n _\\:\\ \\ \\ \\ /::\\ \\ /:/ / ___ /:/|:| |__ \n /\\ \\:\\ \\ \\__\\ /:/\\:\\__\\ /:/__/ /\\__\\ /:/ |:| /\\__\\ \n \\:\\ \\:\\ \\/__/ /:/ \\/__/ \\:\\ \\ /:/ / \\/__|:|/:/ / \n \\:\\ \\:\\__\\ /:/ / \\:\\ /:/ / |:/:/ / \n \\:\\/:/ / \\/__/ \\:\\/:/ / |::/ / \n \\::/ / \\::/ / /:/ / \n \\/__/ \\/__/ \\/__/ \n \n'
+ var stunInfoStyle =
+ 'background-color: #49b1f5; color: #fff; padding: 8px; font-size: 14px;'
+ var stunURLStyle =
+ 'background-color: #ffbca2; padding: 8px; font-size: 14px;'
+ var stunNameStyle = 'background-color: #eaf8ff;'
+
+ console.log(
+ '%c%s%c%s%c%s',
+ stunInfoStyle,
+ stunInfo,
+ stunURLStyle,
+ stunURL,
+ stunNameStyle,
+ stunNameStr
+ )
+ },
+ /**
+ * Change the event code to keyCode.
+ * @param {String} code Event code
+ */
+ codeToKeyCode: function (code) {
+ var codes = {
+ ArrowLeft: 37,
+ ArrowRight: 39,
+ Escape: 27,
+ Enter: 13
+ }
+ return codes[code]
+ },
+ /**
+ * "Alert" component
+ * @param {String} status The Status of message. Values: success / info / warning / error.
+ * @param {String} text The text to show.
+ * @param {Number} delay Message stay time (unit is 's', default 5s).
+ */
+ popAlert: function (status, text, delay) {
+ if ($('.stun-message').length !== 0) {
+ $('.stun-message').remove()
+ }
+
+ var $alert = $(
+ '' +
+ `
` +
+ ` ` +
+ `${text} ` +
+ '
' +
+ '
'
+ )
+
+ $('body').append($alert)
+ $(document).ready(function () {
+ $('.stun-alert')
+ .velocity('stop')
+ .velocity('transition.slideDownBigIn', {
+ duration: 300
+ })
+ .velocity('reverse', {
+ delay: delay * 1000 || 5000,
+ duration: 260,
+ complete: function () {
+ $('.stun-alert').css('display', 'none')
+ }
+ })
+ })
+ },
+ /**
+ * Copy any text.
+ * @param {HTMLElement} container Container of text.
+ */
+ copyText: function (container) {
+ try {
+ var selection = window.getSelection()
+ var range = document.createRange()
+ // Select text by the content of node.
+ range.selectNodeContents(container)
+ selection.removeAllRanges()
+ selection.addRange(range)
+
+ var text = selection.toString()
+ var input = document.createElement('input')
+ // Create a temporary input to make the
+ // execCommand command take effect.
+ input.style.display = 'none'
+ input.setAttribute('readonly', 'readonly')
+ input.setAttribute('value', text)
+ document.body.appendChild(input)
+ input.setSelectionRange(0, -1)
+
+ if (document.execCommand('copy')) {
+ document.execCommand('copy')
+ document.body.removeChild(input)
+ return true
+ }
+ document.body.removeChild(input)
+ } catch (e) {
+ return false
+ }
+ },
+ // Wrap images with fancybox support.
+ wrapImageWithFancyBox: function () {
+ $('.content img')
+ .not(':hidden')
+ .each(function () {
+ var $img = $(this)
+ var imgTitle = $img.attr('title') || $img.attr('alt')
+ var $imgWrap = $img.parent('a')
+ var imgSource = ['data-src', 'data-original', 'src']
+ var imgSrc = ''
+
+ if (!$imgWrap[0]) {
+ for (var i = 0; i < imgSource.length; i++) {
+ if ($img.attr(imgSource[i])) {
+ imgSrc = $img.attr(imgSource[i])
+ break
+ }
+ }
+ $imgWrap = $img
+ .wrap(` `)
+ .parent('a')
+ if ($img.is('.gallery img')) {
+ $imgWrap.attr('data-fancybox', 'gallery')
+ } else {
+ $imgWrap.attr('data-fancybox', 'default')
+ }
+ }
+ if (imgTitle) {
+ $imgWrap.attr('title', imgTitle).attr('data-caption', imgTitle)
+ }
+ })
+
+ $().fancybox({
+ selector: '[data-fancybox]',
+ loop: true,
+ transitionEffect: 'slide',
+ hash: false,
+ buttons: [
+ 'share',
+ 'slideShow',
+ 'fullScreen',
+ 'download',
+ 'thumbs',
+ 'close'
+ ]
+ })
+ },
+ // Display the image in the gallery as a waterfall.
+ showImageToWaterfall: function () {
+ var gConfig = CONFIG.galleryWaterfall
+ var colWidth = parseInt(gConfig.colWidth)
+ var colGapX = parseInt(gConfig.gapX)
+ var GALLERY_IMG_SELECTOR = '.gallery img'
+
+ this.waitAllImageLoad(GALLERY_IMG_SELECTOR, function () {
+ $('.gallery').masonry({
+ itemSelector: GALLERY_IMG_SELECTOR,
+ columnWidth: colWidth,
+ percentPosition: true,
+ gutter: colGapX,
+ transitionDuration: 0
+ })
+ })
+ },
+ // Lazy load the images of post.
+ lazyLoadImage: function () {
+ $('img.lazyload').lazyload()
+ },
+ // Add a mark icon to the link with `target="_blank"` attribute.
+ addIconToExternalLink: function (container) {
+ if (!$(container)[0]) {
+ return
+ }
+
+ var $wrapper = $(' ')
+ var $icon = $(
+ '' +
+ ` ` +
+ ' '
+ )
+
+ $(container)
+ .find('a[target="_blank"]')
+ .addClass('exturl__link')
+ .wrap($wrapper)
+ .parent('.exturl')
+ .append($icon)
+ },
+ // Switch to the prev / next post by shortcuts.
+ registerSwitchPost: function () {
+ var keyLeft = this.codeToKeyCode('ArrowLeft')
+ var keyRight = this.codeToKeyCode('ArrowRight')
+
+ $(document).on('keydown', function (e) {
+ var isPrev = e.keyCode === keyLeft
+ var isNext = e.keyCode === keyRight
+
+ if (e.ctrlKey) {
+ if (isPrev) {
+ var prevElem = $('.paginator-prev a')[0]
+ prevElem && prevElem.click()
+ } else if (isNext) {
+ var nextElem = $('.paginator-next a')[0]
+ nextElem && nextElem.click()
+ }
+ }
+ })
+ },
+ // Show / Hide the reward QR.
+ registerShowReward: function () {
+ $('.reward-button').on('click', function () {
+ var $container = $('.reward-qrcode')
+ if ($container.is(':visible')) {
+ $container.css('display', 'none')
+ } else {
+ $container.velocity('stop').velocity('transition.slideDownIn', {
+ duration: 300
+ })
+ }
+ })
+ },
+ // Click to zoom in image, without fancybox.
+ registerZoomImage: function () {
+ $('#content-wrap img')
+ .not(':hidden')
+ .each(function () {
+ if ($(this).attr('data-zoom') === 'none') return
+ $(this).addClass('zoomimg')
+ })
+
+ var $imgMask = $('
')
+ var $imgClone = null
+ var isZoom = false
+
+ $(window).on('scroll', closeZoom)
+ $(document).on('click', closeZoom)
+
+ $('.zoomimg').on('click', function (e) {
+ e.stopPropagation()
+ if (isZoom) {
+ closeZoom()
+ return
+ }
+ isZoom = true
+ $imgClone = $(this)
+ .clone()
+ .addClass('zoomimg-clone')
+
+ var SIDE_GAP = parseInt(CONFIG.zoomImage.gapAside || 20)
+ var imgRect = this.getBoundingClientRect()
+ var imgOuterW = $(this).outerWidth()
+ var imgOuterH = $(this).outerHeight()
+ var imgW = $(this).width()
+ var imgH = $(this).height()
+ var imgL = $(this).offset().left + (imgOuterW - imgW) / 2
+ var imgT = $(this).offset().top + (imgOuterH - imgH) / 2
+ var winW = $(window).width() - SIDE_GAP * 2
+ var winH = $(window).height() - SIDE_GAP * 2
+ var scaleX = winW / imgW
+ var scaleY = winH / imgH
+ var scale = (scaleX < scaleY ? scaleX : scaleY) || 1
+ var translateX = winW / 2 - (imgRect.x + imgOuterW / 2) + SIDE_GAP
+ var translateY = winH / 2 - (imgRect.y + imgOuterH / 2) + SIDE_GAP
+
+ $(this).addClass('zoomimg--hide')
+ $('body')
+ .append($imgMask)
+ .append($imgClone)
+ $imgMask.velocity({
+ opacity: 1
+ })
+ $imgClone.css({
+ left: imgL,
+ top: imgT,
+ width: imgW,
+ height: imgH
+ })
+ $imgClone.velocity(
+ {
+ translateX: translateX,
+ translateY: translateY,
+ scale: scale
+ },
+ { duration: 300 }
+ )
+ })
+
+ function closeZoom () {
+ if (!isZoom) {
+ return
+ }
+
+ isZoom = false
+ $imgClone.velocity('reverse')
+ $imgMask.velocity('reverse', {
+ complete: function () {
+ $imgMask.remove()
+ $imgClone.remove()
+ $('.zoomimg').removeClass('zoomimg--hide')
+ }
+ })
+ }
+ },
+ /**
+ * Add the header to code block.
+ * @param {string} type The type of header. value: 'carbon' | null.
+ */
+ addCodeHeader: function (type) {
+ $('figure.highlight').each(function () {
+ if (!$(this).find('figcaption')[0]) {
+ var content = ''
+ if (!type) {
+ var CODEBLOCK_CLASS_NAME = 'highlight'
+ var lang = $(this)
+ .attr('class')
+ .split(/\s/)
+ .filter(function (e) {
+ return e !== CODEBLOCK_CLASS_NAME
+ })
+
+ content += `${lang}
`
+ } else if (type === 'carbon') {
+ content += `
+
+ `
+ }
+
+ $(`${content} `).insertBefore(
+ $(this)
+ .children()
+ .first()
+ )
+ }
+ })
+ },
+ addCopyButton: function (type) {
+ var btnContainer = '.post-copyright,'
+ var $copyIcon = $(
+ `` +
+ ` ` +
+ '
'
+ )
+
+ if (type === 'simple' || type === 'carbon') {
+ btnContainer += '.highlight figcaption:not(".custom")'
+ } else {
+ btnContainer += '.highlight figcaption'
+ }
+ // Add a copy button to the selected elements.
+ $(btnContainer).append($copyIcon)
+ },
+ registerCopyEvent: function () {
+ $('.copy-button').on('click', function () {
+ var container = null
+ // Select the container of code block.
+ var codeContainer = $(this)
+ .parents('figure.highlight')
+ .find('td.code')[0]
+
+ if (codeContainer) {
+ container = codeContainer
+ } else {
+ // Select the container of text.
+ container = $(this).parent()[0]
+ }
+ if (Stun.utils.copyText(container)) {
+ Stun.utils.popAlert('success', CONFIG.prompt.copySuccess)
+ } else {
+ Stun.utils.popAlert('error', CONFIG.prompt.copyError)
+ }
+ })
+ },
+ /**
+ * Wait for all images to load.
+ * @param {String} selector jQuery selector.
+ * @param {Function} callback Callback.
+ */
+ waitAllImageLoad: function (selector, callback) {
+ var imgDefereds = []
+ $(selector).each(function () {
+ var dfd = $.Deferred()
+ $(this).bind('load', function () {
+ dfd.resolve()
+ })
+
+ if (this.complete) {
+ setTimeout(function () {
+ dfd.resolve()
+ }, 500)
+ }
+ imgDefereds.push(dfd)
+ })
+ $.when.apply(null, imgDefereds).then(callback)
+ }
+}