overscroll
Version:
42 lines (37 loc) • 1.27 kB
JavaScript
import pick from 'object.pick';
import compose from './utils/compose';
const noop = () => {};
export function handler( name ) {
return function( scope ) {
const { mode } = scope;
const wrap = function( func ) {
return function() {
func.call( scope.target, pick( scope.overscroll, [
'scrollTop',
'scrollLeft',
'scrollHeight',
'scrollWidth',
'clientHeight',
'clientWidth'
].concat( mode === 'scroll' ? [] : [ 'section', 'positions' ])));
};
};
scope.handleCache = scope.handleCache || {};
scope.handleCache[name] = noop;
const initialHandler = scope[name] ? scope[name] : noop;
scope[name] = function() {
scope.handleCache[name]();
wrap( initialHandler )();
};
return compose(( callback ) => {
scope.handleCache[name] = scope.handleCache[name] !== noop
? compose( callback, scope.handleCache[name])
: callback;
}, wrap );
};
}
export const handleDestroy = handler( 'onDestroy' );
export const handleBeforeScroll = handler( 'onBeforeScroll' );
export const handleAfterScroll = handler( 'onAfterScroll' );
export const handleScroll = handler( 'onScroll' );
export const handleInit = handler( 'onInit' );