Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/Ultimate_VC_Addons/assets/js/jquery.sticky-kit.js |
// Generated by CoffeeScript 1.9.2
/**
@license Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
*/
( function () {
let $, win;
$ = this.jQuery || window.jQuery;
win = $( window );
$.fn.stick_in_parent = function ( opts ) {
let doc,
elm,
enable_bottoming,
fn,
i,
inner_scrolling,
len,
manual_spacer,
offset_top,
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;
}
fn = function (
elm,
padding_bottom,
parent_top,
parent_height,
top,
height,
el_float,
detached
) {
let 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 () {
let 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: elm.outerWidth( true ),
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 () {
let 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 ) );