File "sticky-kit.js"
Full Path: /home/siazco/grocery.siazco.se/wp-content/themes/kapee222/assets/js/sticky-kit.js
File size: 7.29 KB
MIME-type: text/plain
Charset: utf-8
// Generated by CoffeeScript 1.10.0
/**
@license Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net
*/
(function() {
var $, win;
$ = window.jQuery;
win = $(window);
$.fn.stick_in_parent = function(opts) {
var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class;
if (opts == null) {
opts = {};
}
sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;
if (offset_top == null) {
offset_top = 0;
}
if (parent_selector == null) {
parent_selector = void 0;
}
if (inner_scrolling == null) {
inner_scrolling = true;
}
if (sticky_class == null) {
sticky_class = 'is_stuck';
}
doc = $(document);
if (enable_bottoming == null) {
enable_bottoming = true;
}
outer_width = function(el) {
var _el, computed, w;
if (window.getComputedStyle) {
_el = el[0];
computed = window.getComputedStyle(el[0]);
w = parseFloat(computed.getPropertyValue('width')) + parseFloat(computed.getPropertyValue('margin-left')) + parseFloat(computed.getPropertyValue('margin-right'));
if (computed.getPropertyValue('box-sizing') !== 'border-box') {
w += parseFloat(computed.getPropertyValue('border-left-width')) + parseFloat(computed.getPropertyValue('border-right-width')) + parseFloat(computed.getPropertyValue('padding-left')) + parseFloat(computed.getPropertyValue('padding-right'));
}
return w;
} else {
return el.outerWidth(true);
}
};
fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {
var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;
if (elm.data('sticky_kit')) {
return;
}
elm.data('sticky_kit', true);
last_scroll_height = doc.height();
parent = elm.parent();
if (parent_selector != null) {
parent = parent.closest(parent_selector);
}
if (!parent.length) {
throw 'failed to find stick parent';
}
fixed = false;
bottomed = false;
spacer = manual_spacer != null
? manual_spacer && elm.closest(manual_spacer)
: $('<div />');
if (spacer) {
spacer.css('position', elm.css('position'));
}
recalc = function() {
var border_top, padding_top, restore;
if (detached) {
return;
}
last_scroll_height = doc.height();
border_top = parseInt(parent.css('border-top-width'), 10);
padding_top = parseInt(parent.css('padding-top'), 10);
padding_bottom = parseInt(parent.css('padding-bottom'), 10);
parent_top = parent.offset().top + border_top + padding_top;
parent_height = parent.height();
if (fixed) {
fixed = false;
bottomed = false;
if (manual_spacer == null) {
elm.insertAfter(spacer);
spacer.detach();
}
elm.css({
position: '',
top: '',
width: '',
bottom: '',
}).removeClass(sticky_class);
restore = true;
}
top = elm.offset().top - (parseInt(elm.css('margin-top'), 10) || 0) - offset_top;
height = elm.outerHeight(true);
el_float = elm.css('float');
if (spacer) {
spacer.css({
width: outer_width(elm),
height: height,
display: elm.css('display'),
'vertical-align': elm.css('vertical-align'),
'float': el_float,
});
}
if (restore) {
return tick();
}
};
recalc();
if (height === parent_height) {
return;
}
last_pos = void 0;
offset = offset_top;
recalc_counter = recalc_every;
tick = function() {
var css, delta, recalced, scroll, will_bottom, win_height;
if (detached) {
return;
}
recalced = false;
if (recalc_counter != null) {
recalc_counter -= 1;
if (recalc_counter <= 0) {
recalc_counter = recalc_every;
recalc();
recalced = true;
}
}
if (!recalced && doc.height() !== last_scroll_height) {
recalc();
recalced = true;
}
scroll = win.scrollTop();
if (last_pos != null) {
delta = scroll - last_pos;
}
last_pos = scroll;
if (fixed) {
if (enable_bottoming) {
will_bottom = scroll + height + offset > parent_height + parent_top;
if (bottomed && !will_bottom) {
bottomed = false;
elm.css({
position: 'fixed',
bottom: '',
top: offset,
}).trigger('sticky_kit:unbottom');
}
}
if (scroll < top) {
fixed = false;
offset = offset_top;
if (manual_spacer == null) {
if (el_float === 'left' || el_float === 'right') {
elm.insertAfter(spacer);
}
spacer.detach();
}
css = {
position: '',
width: '',
top: '',
};
elm.css(css).removeClass(sticky_class).trigger('sticky_kit:unstick');
}
if (inner_scrolling) {
win_height = win.height();
if (height + offset_top > win_height) {
if (!bottomed) {
offset -= delta;
offset = Math.max(win_height - height, offset);
offset = Math.min(offset_top, offset);
if (fixed) {
elm.css({
top: offset + 'px',
});
}
}
}
}
} else {
if (scroll > top) {
fixed = true;
css = {
position: 'fixed',
top: offset,
};
css.width = elm.css('box-sizing') === 'border-box'
? elm.outerWidth() + 'px'
: elm.width() + 'px';
elm.css(css).addClass(sticky_class);
if (manual_spacer == null) {
elm.after(spacer);
if (el_float === 'left' || el_float === 'right') {
spacer.append(elm);
}
}
elm.trigger('sticky_kit:stick');
}
}
if (fixed && enable_bottoming) {
if (will_bottom == null) {
will_bottom = scroll + height + offset > parent_height + parent_top;
}
if (!bottomed && will_bottom) {
bottomed = true;
if (parent.css('position') === 'static') {
parent.css({
position: 'relative',
});
}
return elm.css({
position: 'absolute',
bottom: padding_bottom,
top: 'auto',
}).trigger('sticky_kit:bottom');
}
}
};
recalc_and_tick = function() {
recalc();
return tick();
};
detach = function() {
detached = true;
win.off('touchmove', tick);
win.off('scroll', tick);
win.off('resize', recalc_and_tick);
$(document.body).off('sticky_kit:recalc', recalc_and_tick);
elm.off('sticky_kit:detach', detach);
elm.removeData('sticky_kit');
elm.css({
position: '',
bottom: '',
top: '',
width: '',
});
parent.position('position', '');
if (fixed) {
if (manual_spacer == null) {
if (el_float === 'left' || el_float === 'right') {
elm.insertAfter(spacer);
}
spacer.remove();
}
return elm.removeClass(sticky_class);
}
};
win.on('touchmove', tick);
win.on('scroll', tick);
win.on('resize', recalc_and_tick);
$(document.body).on('sticky_kit:recalc', recalc_and_tick);
elm.on('sticky_kit:detach', detach);
return setTimeout(tick, 0);
};
for (i = 0, len = this.length; i < len; i++) {
elm = this[i];
fn($(elm));
}
return this;
};
}).call(this);