(function($){
'use strict';
$(window).on('load', function(){
var winHeight=$(window).height(),
docHeight=$(document).height();
var max=docHeight - winHeight;
$('.readingProgressbar').attr('max', max);
var progressForeground=$('.readingProgressbar').attr('data-foreground');
var progressBackground=$('.readingProgressbar').attr('data-background');
var progressHeight=$('.readingProgressbar').attr('data-height');
var progressPosition=$('.readingProgressbar').attr('data-position');
var progressCustomPosition=$('.readingProgressbar').attr('data-custom-position');
var progressFixedOrAbsolute='fixed';
if(progressPosition=='custom'){
$('.readingProgressbar').appendTo(progressCustomPosition);
progressPosition='bottom';
progressFixedOrAbsolute='absolute';
}
if(progressPosition=='top'){
var progressTop='0';
var progressBottom='auto';
}else{
var progressTop='auto';
var progressBottom='0';
}
$('.readingProgressbar').css({
'background-color':progressBackground,
'color':progressForeground,
'height':progressHeight + 'px',
'top':progressTop,
'bottom':progressBottom,
'position':progressFixedOrAbsolute,
'display':'block'
});
$('<style>.readingProgressbar::-webkit-progress-bar { background-color: transparent } .readingProgressbar::-webkit-progress-value { background-color: ' + progressForeground + ' } .readingProgressbar::-moz-progress-bar { background-color: ' + progressForeground + ' }</style>')
.appendTo('head');
var value=$(window).scrollTop();
$('.readingProgressbar').attr('value', value);
$(document).on('scroll', function(){
value=$(window).scrollTop();
$('.readingProgressbar').attr('value', value);
});
});
})(jQuery);
(function ($, window, document, undefined){
"use strict";
var pluginName="stickThis",
defaults={
target:null,
top: null,
position: "top",
minscreenwidth: null,
maxscreenwidth: null,
screen_small: true,
screen_medium: true,
screen_large: true,
screen_extralarge: true,
zindex: 1,
bottom_trigger: "0",
legacymode: false,
dynamicmode: false,
debugmode: false,
pushup: "",
adminbar: false,
detach: false,
opacity: 100,
scroll_range_min: 0,
scroll_range_max: 100,
fade_in: false,
slide_down: false,
bg_color: false,
custom_css: false
};
var $activeEl=null;
var bottomTrigger=0;
function Plugin(element, options){
this.element=element;
this.settings=$.extend({}, defaults, options);
this._defaults=defaults;
this._name=pluginName;
this.init();
}
$.extend(Plugin.prototype, {
init: function (){
$activeEl=$(this.element);
var numElements=$(this.element).length;
var numPushElements=$(this.settings.pushup).length;
if(numPushElements < 1){
if(this.settings.debugmode==true&&this.settings.pushup){
console.error('STICKY ANYTHING DEBUG: There are no elements with the selector/class/ID you selected for the Push-up element ("' + this.settings.pushup + '").');
}
this.settings.pushup="";
}else if(numPushElements > 1){
if(this.settings.debugmode==true){
console.error("STICKY ANYTHING DEBUG: There are " + numPushElements + ' elements on the page with the selector/class/ID you selected for the push-up element ("' + this.settings.pushup + '"). You can select only ONE element to push the sticky element up.');
}
this.settings.pushup="";
}
if(numElements < 1){
if(this.settings.debugmode==true){
console.error('STICKY ANYTHING DEBUG: There are no elements with the selector/class/ID you selected for the sticky element ("' + this.selector + '").');
}}else if(numElements > 1){
if(this.settings.debugmode==true){
console.error("STICKY ANYTHING DEBUG: There There are " + numPushElements + ' elements with the selector/class/ID you selected for the sticky element ("' + this.selector + '"). You can only make ONE element sticky.');
}}
if(this.settings.top==null){
this.settings.top=0;
}else{
if(isNaN(parseInt(this.settings.top))){
this.settings.top=$(this.settings.top).height();
}else{
this.settings.top=parseInt(this.settings.top);
}}
$(this.element).addClass("sticky-element-original element-is-not-sticky sticky-element-active");
var orgAssignedStyles=this.cssStyles();
var orgInlineStyles=$(this.element).attr("style");
if(orgInlineStyles==null){
orgInlineStyles="";
}
this.createPlaceholder($(this.element));
if(this.settings.position=="bottom"){
if(this.settings.bottom_trigger.indexOf("%") > 0){
var percentage=parseInt(this.settings.bottom_trigger.substr(0, this.settings.bottom_trigger.indexOf("%")));
bottomTrigger=$("body").height() * (percentage / 100);
}else{
bottomTrigger=parseInt(this.settings.bottom_trigger);
}}
var _debounceScroll=0;
var instance=this;
$(window).scroll(function (){
clearTimeout(_debounceScroll);
_debounceScroll=setTimeout(function (){
instance.check(instance.settings, orgInlineStyles);
}, 10);
});
var _debounceResize=0;
$(window).resize(function (){
clearTimeout(_debounceResize);
_debounceResize=setTimeout(function (){
instance.unstickIt(orgInlineStyles);
instance.check(instance.settings, orgInlineStyles, orgAssignedStyles);
}, 50);
});
this.check(this.settings, orgInlineStyles, orgAssignedStyles);
},
cssStyles: function (){
var o={};
var el=$(this.element);
o["display"]=el.css("display");
o["float"]=el.css("float");
o["flex"]=el.css("flex");
o["box-sizing"]=el.css("box-sizing");
o["clear"]=el.css("clear");
o["overflow"]=el.css("overflow");
o["transform"]=el.css("transform");
return o;
},
createPlaceholder: function ($originalelement){
var $placeholder=$('<div class="sticky-element-placeholder" style="width:0; height:0;margin:0; padding:0; visibility:hidden;"></div>');
$(this.element).before($placeholder).data("placeholder", $placeholder);
},
createClone: function (cloneTop, cloneZindex){
var $clone=$(this.element).clone();
$(this.element).data("clone", $clone);
$clone
.insertAfter(this.element)
.addClass("sticky-element-cloned")
.removeClass("element-is-not-sticky")
.addClass("element-is-sticky")
.css("position", "fixed")
.css("top", cloneTop + "px")
.css("margin-left", "0")
.css("z-index", cloneZindex)
.removeClass("sticky-element-original")
.hide();
},
check: function (settings, originalInlineStyles, originalAssignedStyles){
var e=window,
a="inner";
if(!("innerWidth" in window)){
a="client";
e=document.documentElement||document.body;
}
var viewport=e[a + "Width"];
var viewporth=e[a + "Height"];
var usingCsutomScreenSize=settings.minscreenwidth!=null&&settings.maxscreenwidth!=null;
if(usingCsutomScreenSize&&(viewport < settings.minscreenwidth||viewport > settings.maxscreenwidth)) return;
if(!usingCsutomScreenSize){
if(viewport < 768&&!settings.screen_small) return;
if(viewport >=768&&viewport < 992&&!settings.screen_medium) return;
if(viewport >=992&&viewport < 1200&&!settings.screen_large) return;
if(viewport > 1200&&!settings.screen_extralarge) return;
}
var $listenerElement=$(this.element).hasClass("sticky-element-active") ? $(this.element):$(this.element).data("placeholder");
var orgElementPos=$listenerElement.offset();
var orgElementTop=orgElementPos.top;
var pushElementTop=0;
if(settings.pushup){
var pushElementPos=$(settings.pushup).offset();
pushElementTop=pushElementPos.top;
}
var adminBarHeight=0;
if(settings.adminbar&&$("body").hasClass("admin-bar")&&viewport > 600){
adminBarHeight=$("#wpadminbar").height();
}
var elementHeight=$(this.element).outerHeight();
var amountToScroll=orgElementTop - settings.top - adminBarHeight;
if(settings.fade_in||settings.slide_down){
amountToScroll +=elementHeight;
}
var conditionIfTop=$(window).scrollTop() > amountToScroll;
var conditionIfBottom=$(window).scrollTop() > bottomTrigger;
var scroll_percent=($(window).scrollTop() / viewporth) * 100;
if((settings.scroll_range_min > 0&&scroll_percent < settings.scroll_range_min)||(settings.scroll_range_max < 100&&scroll_percent > settings.scroll_range_max)){
conditionIfTop=false;
conditionIfBottom=false;
}
var elementHeight=$(this.element).outerHeight();
if($(this.element).data("isAnimating")){
return;
}
var isPushedUp=false;
if((settings.position=="top"&&conditionIfTop)||(settings.position=="bottom"&&conditionIfBottom)){
var isAlreadySticky=$(this.element).hasClass("element-is-sticky");
if(settings.pushup&&$(window).scrollTop() > pushElementTop - settings.top - elementHeight - adminBarHeight){
var $listenerElement=$(this.element).hasClass("sticky-element-active") ? $(this.element):$(this.element).data("placeholder");
this.stickIt(settings, $listenerElement, originalAssignedStyles, adminBarHeight, pushElementTop, elementHeight, originalInlineStyles);
isPushedUp=true;
}else{
if($(this.element).hasClass("sticky-is-pushed-up")){
this.unstickIt(originalInlineStyles);
$(this.element).removeClass("sticky-is-pushed-up");
}
if(!isAlreadySticky){
this.stickIt(settings, $listenerElement, originalAssignedStyles, adminBarHeight, pushElementTop, elementHeight, originalInlineStyles);
}}
if(!isAlreadySticky&&!isPushedUp){
this.stickIt(settings, $listenerElement, originalAssignedStyles, adminBarHeight, pushElementTop, elementHeight, originalInlineStyles);
}}else{
this.unstickIt(originalInlineStyles);
$(this.element).data("sticky", false);
}},
stickIt: function (settings, $listenerElement, originalAssignedStyles, adminBarHeight, pushElementTop, elementHeight, originalInlineStyles){
if($(this.element).data("isAnimating")){
return;
}
var coordsOrgElement=$listenerElement.offset();
var leftOrgElement=coordsOrgElement.left;
var widthPlaceholder=$listenerElement[0].getBoundingClientRect().width;
if(!widthPlaceholder){
widthPlaceholder=$listenerElement.css("width");
}
widthPlaceholder=(widthPlaceholder + "").replace(/px/, "");
var heightPlaceholder=$listenerElement[0].getBoundingClientRect().height;
if(!heightPlaceholder){
heightPlaceholder=$listenerElement.css("height");
}
heightPlaceholder=(heightPlaceholder + "").replace(/px/, "");
var widthSticky=$(this.element).css("width");
if(widthSticky=="0px"){
widthSticky=this.element.getBoundingClientRect().width;
}
var heightSticky=$(this.element).height();
var paddingOrgElement=[$(this.element).css("padding-top"), $(this.element).css("padding-right"), $(this.element).css("padding-bottom"), $(this.element).css("padding-left")];
var paddingSticky=paddingOrgElement.join(" ");
var marginOrgElement=[$listenerElement.css("margin-top"), $listenerElement.css("margin-right"), $listenerElement.css("margin-bottom"), $listenerElement.css("margin-left")];
var marginPlaceholder=marginOrgElement.join(" ");
var assignedStyles="";
for (var importantStyle in originalAssignedStyles){
if(originalAssignedStyles[importantStyle]=="inline"){
assignedStyles +=importantStyle + ":inline-block; ";
}else{
assignedStyles +=importantStyle + ":" + originalAssignedStyles[importantStyle] + "; ";
}}
if(settings.pushup&&$(window).scrollTop() > pushElementTop - settings.top - elementHeight - adminBarHeight){
settings.topMargin=pushElementTop - settings.top - elementHeight - $(window).scrollTop();
$(this.element).addClass('sticky-is-pushed-up');
}else{
settings.topMargin=adminBarHeight;
}
assignedStyles +="height:" + heightPlaceholder + "px; margin:" + marginPlaceholder + ";";
console.log(settings);
if(settings.detach){
var sticky_element=$(this.element).detach();
$(this.element).addClass('sticky-is-detached');
$('body').append(sticky_element);
}
$(this.element)
.removeClass("sticky-element-active")
.removeClass("element-is-not-sticky")
.addClass("element-is-sticky")
.css("cssText", originalInlineStyles + "margin-top: " + settings.topMargin + "px !important; margin-left: 0 !important;")
.css("position", "fixed")
.css("left", leftOrgElement + "px")
.css("width", widthSticky)
.css("padding", paddingSticky)
.css("z-index", settings.zindex)
.css(settings.position, settings.top - elementHeight)
.css("opacity", 0);
if(settings.bg_color&&settings.bg_color.length>2){
$(this.element).css("background-color", settings.bg_color);
}
if($(this.element).attr("style").indexOf('')==-1){
$(this.element).attr("style", $(this.element).attr("style") + '' + settings.custom_css);
}
var isAlreadySticky=$(this.element).data("sticky");
var durationFadeIn=settings.fade_in&&!isAlreadySticky ? 500:0;
var durationSlide=settings.slide_down&&!isAlreadySticky ? 500:0;
if(durationFadeIn==500||durationSlide==500){
$(this.element).data("isAnimating", true);
var $el=$(this.element);
setTimeout(function (){
$el.data("isAnimating", false);
}, 500);
}
$(this.element).fadeTo(durationFadeIn, settings.opacity / 100);
var animation={};
animation[settings.position]=settings.top;
$(this.element).animate(animation, {
duration: durationSlide,
queue: false,
});
if(!$(this.element).data("placeholder").hasClass("sticky-element-active")){
$(this.element).data("placeholder").addClass("sticky-element-active").attr("style", assignedStyles);
}
$(this.element).data("sticky", true);
},
unstickIt: function (originalInlineStyles){
if($(this.element).hasClass('sticky-is-detached')){
var sticky_element=$(this.element).detach();
var parent_element=$(this.element).data("placeholder").parent();
parent_element.append(sticky_element);
}
$(this.element).addClass("sticky-element-active").removeClass("element-is-sticky").addClass("element-is-not-sticky").attr("style", originalInlineStyles);
if($(this.element).data("placeholder").hasClass("sticky-element-active")){
$(this.element).data("placeholder").removeClass("sticky-element-active").removeAttr("style").css("width", "0").css("height", "0").css("margin", "0").css("padding", "0");
}},
});
$.fn[pluginName]=function (options){
return this.each(function (){
if(!$.data(this, "plugin_" + pluginName)){
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
}});
};})(jQuery, window, document);