'use strict'; var instances = require('./instances'); var upEvent = document.createEvent('Event') , downEvent = document.createEvent('Event') , leftEvent = document.createEvent('Event') , rightEvent = document.createEvent('Event') , yEvent = document.createEvent('Event') , xEvent = document.createEvent('Event') , xStartEvent = document.createEvent('Event') , xEndEvent = document.createEvent('Event') , yStartEvent = document.createEvent('Event') , yEndEvent = document.createEvent('Event') , lastTop , lastLeft; upEvent.initEvent('ps-scroll-up', true, true); downEvent.initEvent('ps-scroll-down', true, true); leftEvent.initEvent('ps-scroll-left', true, true); rightEvent.initEvent('ps-scroll-right', true, true); yEvent.initEvent('ps-scroll-y', true, true); xEvent.initEvent('ps-scroll-x', true, true); xStartEvent.initEvent('ps-x-reach-start', true, true); xEndEvent.initEvent('ps-x-reach-end', true, true); yStartEvent.initEvent('ps-y-reach-start', true, true); yEndEvent.initEvent('ps-y-reach-end', true, true); module.exports = function (element, axis, value) { if (typeof element === 'undefined') { throw 'You must provide an element to the update-scroll function'; } if (typeof axis === 'undefined') { throw 'You must provide an axis to the update-scroll function'; } if (typeof value === 'undefined') { throw 'You must provide a value to the update-scroll function'; } if (axis === 'top' && value <= 0) { element.scrollTop = value = 0; // don't allow negative scroll element.dispatchEvent(yStartEvent); } if (axis === 'left' && value <= 0) { element.scrollLeft = value = 0; // don't allow negative scroll element.dispatchEvent(xStartEvent); } var i = instances.get(element); if (axis === 'top' && value >= i.contentHeight - i.containerHeight) { element.scrollTop = value = i.contentHeight - i.containerHeight; // don't allow scroll past container element.dispatchEvent(yEndEvent); } if (axis === 'left' && value >= i.contentWidth - i.containerWidth) { element.scrollLeft = value = i.contentWidth - i.containerWidth; // don't allow scroll past container element.dispatchEvent(xEndEvent); } if (!lastTop) { lastTop = element.scrollTop; } if (!lastLeft) { lastLeft = element.scrollLeft; } if (axis === 'top' && value < lastTop) { element.dispatchEvent(upEvent); } if (axis === 'top' && value > lastTop) { element.dispatchEvent(downEvent); } if (axis === 'left' && value < lastLeft) { element.dispatchEvent(leftEvent); } if (axis === 'left' && value > lastLeft) { element.dispatchEvent(rightEvent); } if (axis === 'top') { element.scrollTop = lastTop = value; element.dispatchEvent(yEvent); } if (axis === 'left') { element.scrollLeft = lastLeft = value; element.dispatchEvent(xEvent); } };