diff options
| author | Pliable Pixels <pliablepixels@gmail.com> | 2019-03-31 07:26:37 -0400 |
|---|---|---|
| committer | Pliable Pixels <pliablepixels@gmail.com> | 2019-03-31 07:26:37 -0400 |
| commit | 71114877e8e5409e37dc5a4c03015408f8e905fc (patch) | |
| tree | 4d939c212d0fd21ba360012022e208be61f92e53 /www/external/origjs/draggabilly.pkgd.js | |
| parent | f02d53b6318e2bf492a5b7d6c0c7b2f6de3bb8dd (diff) | |
#801 rip out bower, move to unmanaged externals
Diffstat (limited to 'www/external/origjs/draggabilly.pkgd.js')
| -rw-r--r-- | www/external/origjs/draggabilly.pkgd.js | 1530 |
1 files changed, 0 insertions, 1530 deletions
diff --git a/www/external/origjs/draggabilly.pkgd.js b/www/external/origjs/draggabilly.pkgd.js deleted file mode 100644 index bef3db35..00000000 --- a/www/external/origjs/draggabilly.pkgd.js +++ /dev/null @@ -1,1530 +0,0 @@ -/*! - * Draggabilly PACKAGED v2.1.0 - * Make that shiz draggable - * http://draggabilly.desandro.com - * MIT license - */ - -/** - * Bridget makes jQuery widgets - * v2.0.0 - * MIT license - */ - -/* jshint browser: true, strict: true, undef: true, unused: true */ - -( function( window, factory ) { - - /* globals define: false, module: false, require: false */ - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) { - factory( window, jQuery ); - }); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - module.exports = factory( - window, - require('jquery') - ); - } else { - // browser global - window.jQueryBridget = factory( - window, - window.jQuery - ); - } - -}( window, function factory( window, jQuery ) { - - -// ----- utils ----- // - -var arraySlice = Array.prototype.slice; - -// helper function for logging errors -// $.error breaks jQuery chaining -var console = window.console; -var logError = typeof console == 'undefined' ? function() {} : - function( message ) { - console.error( message ); - }; - -// ----- jQueryBridget ----- // - -function jQueryBridget( namespace, PluginClass, $ ) { - $ = $ || jQuery || window.jQuery; - if ( !$ ) { - return; - } - - // add option method -> $().plugin('option', {...}) - if ( !PluginClass.prototype.option ) { - // option setter - PluginClass.prototype.option = function( opts ) { - // bail out if not an object - if ( !$.isPlainObject( opts ) ){ - return; - } - this.options = $.extend( true, this.options, opts ); - }; - } - - // make jQuery plugin - $.fn[ namespace ] = function( arg0 /*, arg1 */ ) { - if ( typeof arg0 == 'string' ) { - // method call $().plugin( 'methodName', { options } ) - // shift arguments by 1 - var args = arraySlice.call( arguments, 1 ); - return methodCall( this, arg0, args ); - } - // just $().plugin({ options }) - plainCall( this, arg0 ); - return this; - }; - - // $().plugin('methodName') - function methodCall( $elems, methodName, args ) { - var returnValue; - var pluginMethodStr = '$().' + namespace + '("' + methodName + '")'; - - $elems.each( function( i, elem ) { - // get instance - var instance = $.data( elem, namespace ); - if ( !instance ) { - logError( namespace + ' not initialized. Cannot call methods, i.e. ' + - pluginMethodStr ); - return; - } - - var method = instance[ methodName ]; - if ( !method || methodName.charAt(0) == '_' ) { - logError( pluginMethodStr + ' is not a valid method' ); - return; - } - - // apply method, get return value - var value = method.apply( instance, args ); - // set return value if value is returned, use only first value - returnValue = returnValue === undefined ? value : returnValue; - }); - - return returnValue !== undefined ? returnValue : $elems; - } - - function plainCall( $elems, options ) { - $elems.each( function( i, elem ) { - var instance = $.data( elem, namespace ); - if ( instance ) { - // set options & init - instance.option( options ); - instance._init(); - } else { - // initialize new instance - instance = new PluginClass( elem, options ); - $.data( elem, namespace, instance ); - } - }); - } - - updateJQuery( $ ); - -} - -// ----- updateJQuery ----- // - -// set $.bridget for v1 backwards compatibility -function updateJQuery( $ ) { - if ( !$ || ( $ && $.bridget ) ) { - return; - } - $.bridget = jQueryBridget; -} - -updateJQuery( jQuery || window.jQuery ); - -// ----- ----- // - -return jQueryBridget; - -})); - -/*! - * getSize v2.0.2 - * measure size of elements - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ -/*global define: false, module: false, console: false */ - -( function( window, factory ) { - - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'get-size/get-size',[],function() { - return factory(); - }); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - module.exports = factory(); - } else { - // browser global - window.getSize = factory(); - } - -})( window, function factory() { - - -// -------------------------- helpers -------------------------- // - -// get a number from a string, not a percentage -function getStyleSize( value ) { - var num = parseFloat( value ); - // not a percent like '100%', and a number - var isValid = value.indexOf('%') == -1 && !isNaN( num ); - return isValid && num; -} - -function noop() {} - -var logError = typeof console == 'undefined' ? noop : - function( message ) { - console.error( message ); - }; - -// -------------------------- measurements -------------------------- // - -var measurements = [ - 'paddingLeft', - 'paddingRight', - 'paddingTop', - 'paddingBottom', - 'marginLeft', - 'marginRight', - 'marginTop', - 'marginBottom', - 'borderLeftWidth', - 'borderRightWidth', - 'borderTopWidth', - 'borderBottomWidth' -]; - -var measurementsLength = measurements.length; - -function getZeroSize() { - var size = { - width: 0, - height: 0, - innerWidth: 0, - innerHeight: 0, - outerWidth: 0, - outerHeight: 0 - }; - for ( var i=0; i < measurementsLength; i++ ) { - var measurement = measurements[i]; - size[ measurement ] = 0; - } - return size; -} - -// -------------------------- getStyle -------------------------- // - -/** - * getStyle, get style of element, check for Firefox bug - * https://bugzilla.mozilla.org/show_bug.cgi?id=548397 - */ -function getStyle( elem ) { - var style = getComputedStyle( elem ); - if ( !style ) { - logError( 'Style returned ' + style + - '. Are you running this code in a hidden iframe on Firefox? ' + - 'See http://bit.ly/getsizebug1' ); - } - return style; -} - -// -------------------------- setup -------------------------- // - -var isSetup = false; - -var isBoxSizeOuter; - -/** - * setup - * check isBoxSizerOuter - * do on first getSize() rather than on page load for Firefox bug - */ -function setup() { - // setup once - if ( isSetup ) { - return; - } - isSetup = true; - - // -------------------------- box sizing -------------------------- // - - /** - * WebKit measures the outer-width on style.width on border-box elems - * IE & Firefox<29 measures the inner-width - */ - var div = document.createElement('div'); - div.style.width = '200px'; - div.style.padding = '1px 2px 3px 4px'; - div.style.borderStyle = 'solid'; - div.style.borderWidth = '1px 2px 3px 4px'; - div.style.boxSizing = 'border-box'; - - var body = document.body || document.documentElement; - body.appendChild( div ); - var style = getStyle( div ); - - getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200; - body.removeChild( div ); - -} - -// -------------------------- getSize -------------------------- // - -function getSize( elem ) { - setup(); - - // use querySeletor if elem is string - if ( typeof elem == 'string' ) { - elem = document.querySelector( elem ); - } - - // do not proceed on non-objects - if ( !elem || typeof elem != 'object' || !elem.nodeType ) { - return; - } - - var style = getStyle( elem ); - - // if hidden, everything is 0 - if ( style.display == 'none' ) { - return getZeroSize(); - } - - var size = {}; - size.width = elem.offsetWidth; - size.height = elem.offsetHeight; - - var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; - - // get all measurements - for ( var i=0; i < measurementsLength; i++ ) { - var measurement = measurements[i]; - var value = style[ measurement ]; - var num = parseFloat( value ); - // any 'auto', 'medium' value will be 0 - size[ measurement ] = !isNaN( num ) ? num : 0; - } - - var paddingWidth = size.paddingLeft + size.paddingRight; - var paddingHeight = size.paddingTop + size.paddingBottom; - var marginWidth = size.marginLeft + size.marginRight; - var marginHeight = size.marginTop + size.marginBottom; - var borderWidth = size.borderLeftWidth + size.borderRightWidth; - var borderHeight = size.borderTopWidth + size.borderBottomWidth; - - var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter; - - // overwrite width and height if we can get it from style - var styleWidth = getStyleSize( style.width ); - if ( styleWidth !== false ) { - size.width = styleWidth + - // add padding and border unless it's already including it - ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ); - } - - var styleHeight = getStyleSize( style.height ); - if ( styleHeight !== false ) { - size.height = styleHeight + - // add padding and border unless it's already including it - ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ); - } - - size.innerWidth = size.width - ( paddingWidth + borderWidth ); - size.innerHeight = size.height - ( paddingHeight + borderHeight ); - - size.outerWidth = size.width + marginWidth; - size.outerHeight = size.height + marginHeight; - - return size; -} - -return getSize; - -}); - -/** - * EvEmitter v1.0.1 - * Lil' event emitter - * MIT License - */ - -/* jshint unused: true, undef: true, strict: true */ - -( function( global, factory ) { - // universal module definition - /* jshint strict: false */ /* globals define, module */ - if ( typeof define == 'function' && define.amd ) { - // AMD - RequireJS - define( 'ev-emitter/ev-emitter',factory ); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - Browserify, Webpack - module.exports = factory(); - } else { - // Browser globals - global.EvEmitter = factory(); - } - -}( this, function() { - - - -function EvEmitter() {} - -var proto = EvEmitter.prototype; - -proto.on = function( eventName, listener ) { - if ( !eventName || !listener ) { - return; - } - // set events hash - var events = this._events = this._events || {}; - // set listeners array - var listeners = events[ eventName ] = events[ eventName ] || []; - // only add once - if ( listeners.indexOf( listener ) == -1 ) { - listeners.push( listener ); - } - - return this; -}; - -proto.once = function( eventName, listener ) { - if ( !eventName || !listener ) { - return; - } - // add event - this.on( eventName, listener ); - // set once flag - // set onceEvents hash - var onceEvents = this._onceEvents = this._onceEvents || {}; - // set onceListeners array - var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || []; - // set flag - onceListeners[ listener ] = true; - - return this; -}; - -proto.off = function( eventName, listener ) { - var listeners = this._events && this._events[ eventName ]; - if ( !listeners || !listeners.length ) { - return; - } - var index = listeners.indexOf( listener ); - if ( index != -1 ) { - listeners.splice( index, 1 ); - } - - return this; -}; - -proto.emitEvent = function( eventName, args ) { - var listeners = this._events && this._events[ eventName ]; - if ( !listeners || !listeners.length ) { - return; - } - var i = 0; - var listener = listeners[i]; - args = args || []; - // once stuff - var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; - - while ( listener ) { - var isOnce = onceListeners && onceListeners[ listener ]; - if ( isOnce ) { - // remove listener - // remove before trigger to prevent recursion - this.off( eventName, listener ); - // unset once flag - delete onceListeners[ listener ]; - } - // trigger listener - listener.apply( this, args ); - // get next listener - i += isOnce ? 0 : 1; - listener = listeners[i]; - } - - return this; -}; - -return EvEmitter; - -})); - -/*! - * Unipointer v2.1.0 - * base class for doing one thing with pointer event - * MIT license - */ - -/*jshint browser: true, undef: true, unused: true, strict: true */ - -( function( window, factory ) { - // universal module definition - /* jshint strict: false */ /*global define, module, require */ - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'unipointer/unipointer',[ - 'ev-emitter/ev-emitter' - ], function( EvEmitter ) { - return factory( window, EvEmitter ); - }); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - module.exports = factory( - window, - require('ev-emitter') - ); - } else { - // browser global - window.Unipointer = factory( - window, - window.EvEmitter - ); - } - -}( window, function factory( window, EvEmitter ) { - - - -function noop() {} - -function Unipointer() {} - -// inherit EvEmitter -var proto = Unipointer.prototype = Object.create( EvEmitter.prototype ); - -proto.bindStartEvent = function( elem ) { - this._bindStartEvent( elem, true ); -}; - -proto.unbindStartEvent = function( elem ) { - this._bindStartEvent( elem, false ); -}; - -/** - * works as unbinder, as you can ._bindStart( false ) to unbind - * @param {Boolean} isBind - will unbind if falsey - */ -proto._bindStartEvent = function( elem, isBind ) { - // munge isBind, default to true - isBind = isBind === undefined ? true : !!isBind; - var bindMethod = isBind ? 'addEventListener' : 'removeEventListener'; - - if ( window.navigator.pointerEnabled ) { - // W3C Pointer Events, IE11. See https://coderwall.com/p/mfreca - elem[ bindMethod ]( 'pointerdown', this ); - } else if ( window.navigator.msPointerEnabled ) { - // IE10 Pointer Events - elem[ bindMethod ]( 'MSPointerDown', this ); - } else { - // listen for both, for devices like Chrome Pixel - elem[ bindMethod ]( 'mousedown', this ); - elem[ bindMethod ]( 'touchstart', this ); - } -}; - -// trigger handler methods for events -proto.handleEvent = function( event ) { - var method = 'on' + event.type; - if ( this[ method ] ) { - this[ method ]( event ); - } -}; - -// returns the touch that we're keeping track of -proto.getTouch = function( touches ) { - for ( var i=0; i < touches.length; i++ ) { - var touch = touches[i]; - if ( touch.identifier == this.pointerIdentifier ) { - return touch; - } - } -}; - -// ----- start event ----- // - -proto.onmousedown = function( event ) { - // dismiss clicks from right or middle buttons - var button = event.button; - if ( button && ( button !== 0 && button !== 1 ) ) { - return; - } - this._pointerDown( event, event ); -}; - -proto.ontouchstart = function( event ) { - this._pointerDown( event, event.changedTouches[0] ); -}; - -proto.onMSPointerDown = -proto.onpointerdown = function( event ) { - this._pointerDown( event, event ); -}; - -/** - * pointer start - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto._pointerDown = function( event, pointer ) { - // dismiss other pointers - if ( this.isPointerDown ) { - return; - } - - this.isPointerDown = true; - // save pointer identifier to match up touch events - this.pointerIdentifier = pointer.pointerId !== undefined ? - // pointerId for pointer events, touch.indentifier for touch events - pointer.pointerId : pointer.identifier; - - this.pointerDown( event, pointer ); -}; - -proto.pointerDown = function( event, pointer ) { - this._bindPostStartEvents( event ); - this.emitEvent( 'pointerDown', [ event, pointer ] ); -}; - -// hash of events to be bound after start event -var postStartEvents = { - mousedown: [ 'mousemove', 'mouseup' ], - touchstart: [ 'touchmove', 'touchend', 'touchcancel' ], - pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ], - MSPointerDown: [ 'MSPointerMove', 'MSPointerUp', 'MSPointerCancel' ] -}; - -proto._bindPostStartEvents = function( event ) { - if ( !event ) { - return; - } - // get proper events to match start event - var events = postStartEvents[ event.type ]; - // bind events to node - events.forEach( function( eventName ) { - window.addEventListener( eventName, this ); - }, this ); - // save these arguments - this._boundPointerEvents = events; -}; - -proto._unbindPostStartEvents = function() { - // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug) - if ( !this._boundPointerEvents ) { - return; - } - this._boundPointerEvents.forEach( function( eventName ) { - window.removeEventListener( eventName, this ); - }, this ); - - delete this._boundPointerEvents; -}; - -// ----- move event ----- // - -proto.onmousemove = function( event ) { - this._pointerMove( event, event ); -}; - -proto.onMSPointerMove = -proto.onpointermove = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerMove( event, event ); - } -}; - -proto.ontouchmove = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerMove( event, touch ); - } -}; - -/** - * pointer move - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -proto._pointerMove = function( event, pointer ) { - this.pointerMove( event, pointer ); -}; - -// public -proto.pointerMove = function( event, pointer ) { - this.emitEvent( 'pointerMove', [ event, pointer ] ); -}; - -// ----- end event ----- // - - -proto.onmouseup = function( event ) { - this._pointerUp( event, event ); -}; - -proto.onMSPointerUp = -proto.onpointerup = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerUp( event, event ); - } -}; - -proto.ontouchend = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerUp( event, touch ); - } -}; - -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -proto._pointerUp = function( event, pointer ) { - this._pointerDone(); - this.pointerUp( event, pointer ); -}; - -// public -proto.pointerUp = function( event, pointer ) { - this.emitEvent( 'pointerUp', [ event, pointer ] ); -}; - -// ----- pointer done ----- // - -// triggered on pointer up & pointer cancel -proto._pointerDone = function() { - // reset properties - this.isPointerDown = false; - delete this.pointerIdentifier; - // remove events - this._unbindPostStartEvents(); - this.pointerDone(); -}; - -proto.pointerDone = noop; - -// ----- pointer cancel ----- // - -proto.onMSPointerCancel = -proto.onpointercancel = function( event ) { - if ( event.pointerId == this.pointerIdentifier ) { - this._pointerCancel( event, event ); - } -}; - -proto.ontouchcancel = function( event ) { - var touch = this.getTouch( event.changedTouches ); - if ( touch ) { - this._pointerCancel( event, touch ); - } -}; - -/** - * pointer cancel - * @param {Event} event - * @param {Event or Touch} pointer - * @private - */ -proto._pointerCancel = function( event, pointer ) { - this._pointerDone(); - this.pointerCancel( event, pointer ); -}; - -// public -proto.pointerCancel = function( event, pointer ) { - this.emitEvent( 'pointerCancel', [ event, pointer ] ); -}; - -// ----- ----- // - -// utility function for getting x/y coords from event -Unipointer.getPointerPoint = function( pointer ) { - return { - x: pointer.pageX, - y: pointer.pageY - }; -}; - -// ----- ----- // - -return Unipointer; - -})); - -/*! - * Unidragger v2.1.0 - * Draggable base class - * MIT license - */ - -/*jshint browser: true, unused: true, undef: true, strict: true */ - -( function( window, factory ) { - // universal module definition - /*jshint strict: false */ /*globals define, module, require */ - - if ( typeof define == 'function' && define.amd ) { - // AMD - define( 'unidragger/unidragger',[ - 'unipointer/unipointer' - ], function( Unipointer ) { - return factory( window, Unipointer ); - }); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - module.exports = factory( - window, - require('unipointer') - ); - } else { - // browser global - window.Unidragger = factory( - window, - window.Unipointer - ); - } - -}( window, function factory( window, Unipointer ) { - - - -// ----- ----- // - -function noop() {} - -// -------------------------- Unidragger -------------------------- // - -function Unidragger() {} - -// inherit Unipointer & EvEmitter -var proto = Unidragger.prototype = Object.create( Unipointer.prototype ); - -// ----- bind start ----- // - -proto.bindHandles = function() { - this._bindHandles( true ); -}; - -proto.unbindHandles = function() { - this._bindHandles( false ); -}; - -var navigator = window.navigator; -/** - * works as unbinder, as you can .bindHandles( false ) to unbind - * @param {Boolean} isBind - will unbind if falsey - */ -proto._bindHandles = function( isBind ) { - // munge isBind, default to true - isBind = isBind === undefined ? true : !!isBind; - // extra bind logic - var binderExtra; - if ( navigator.pointerEnabled ) { - binderExtra = function( handle ) { - // disable scrolling on the element - handle.style.touchAction = isBind ? 'none' : ''; - }; - } else if ( navigator.msPointerEnabled ) { - binderExtra = function( handle ) { - // disable scrolling on the element - handle.style.msTouchAction = isBind ? 'none' : ''; - }; - } else { - binderExtra = noop; - } - // bind each handle - var bindMethod = isBind ? 'addEventListener' : 'removeEventListener'; - for ( var i=0; i < this.handles.length; i++ ) { - var handle = this.handles[i]; - this._bindStartEvent( handle, isBind ); - binderExtra( handle ); - handle[ bindMethod ]( 'click', this ); - } -}; - -// ----- start event ----- // - -/** - * pointer start - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerDown = function( event, pointer ) { - // dismiss range sliders - if ( event.target.nodeName == 'INPUT' && event.target.type == 'range' ) { - // reset pointerDown logic - this.isPointerDown = false; - delete this.pointerIdentifier; - return; - } - - this._dragPointerDown( event, pointer ); - // kludge to blur focused inputs in dragger - var focused = document.activeElement; - if ( focused && focused.blur ) { - focused.blur(); - } - // bind move and end events - this._bindPostStartEvents( event ); - this.emitEvent( 'pointerDown', [ event, pointer ] ); -}; - -// base pointer down logic -proto._dragPointerDown = function( event, pointer ) { - // track to see when dragging starts - this.pointerDownPoint = Unipointer.getPointerPoint( pointer ); - - var canPreventDefault = this.canPreventDefaultOnPointerDown( event, pointer ); - if ( canPreventDefault ) { - event.preventDefault(); - } -}; - -// overwriteable method so Flickity can prevent for scrolling -proto.canPreventDefaultOnPointerDown = function( event ) { - // prevent default, unless touchstart or <select> - return event.target.nodeName != 'SELECT'; -}; - -// ----- move event ----- // - -/** - * drag move - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerMove = function( event, pointer ) { - var moveVector = this._dragPointerMove( event, pointer ); - this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] ); - this._dragMove( event, pointer, moveVector ); -}; - -// base pointer move logic -proto._dragPointerMove = function( event, pointer ) { - var movePoint = Unipointer.getPointerPoint( pointer ); - var moveVector = { - x: movePoint.x - this.pointerDownPoint.x, - y: movePoint.y - this.pointerDownPoint.y - }; - // start drag if pointer has moved far enough to start drag - if ( !this.isDragging && this.hasDragStarted( moveVector ) ) { - this._dragStart( event, pointer ); - } - return moveVector; -}; - -// condition if pointer has moved far enough to start drag -proto.hasDragStarted = function( moveVector ) { - return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3; -}; - - -// ----- end event ----- // - -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerUp = function( event, pointer ) { - this.emitEvent( 'pointerUp', [ event, pointer ] ); - this._dragPointerUp( event, pointer ); -}; - -proto._dragPointerUp = function( event, pointer ) { - if ( this.isDragging ) { - this._dragEnd( event, pointer ); - } else { - // pointer didn't move enough for drag to start - this._staticClick( event, pointer ); - } -}; - -// -------------------------- drag -------------------------- // - -// dragStart -proto._dragStart = function( event, pointer ) { - this.isDragging = true; - this.dragStartPoint = Unipointer.getPointerPoint( pointer ); - // prevent clicks - this.isPreventingClicks = true; - - this.dragStart( event, pointer ); -}; - -proto.dragStart = function( event, pointer ) { - this.emitEvent( 'dragStart', [ event, pointer ] ); -}; - -// dragMove -proto._dragMove = function( event, pointer, moveVector ) { - // do not drag if not dragging yet - if ( !this.isDragging ) { - return; - } - - this.dragMove( event, pointer, moveVector ); -}; - -proto.dragMove = function( event, pointer, moveVector ) { - event.preventDefault(); - this.emitEvent( 'dragMove', [ event, pointer, moveVector ] ); -}; - -// dragEnd -proto._dragEnd = function( event, pointer ) { - // set flags - this.isDragging = false; - // re-enable clicking async - setTimeout( function() { - delete this.isPreventingClicks; - }.bind( this ) ); - - this.dragEnd( event, pointer ); -}; - -proto.dragEnd = function( event, pointer ) { - this.emitEvent( 'dragEnd', [ event, pointer ] ); -}; - -// ----- onclick ----- // - -// handle all clicks and prevent clicks when dragging -proto.onclick = function( event ) { - if ( this.isPreventingClicks ) { - event.preventDefault(); - } -}; - -// ----- staticClick ----- // - -// triggered after pointer down & up with no/tiny movement -proto._staticClick = function( event, pointer ) { - // ignore emulated mouse up clicks - if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) { - return; - } - - // allow click in <input>s and <textarea>s - var nodeName = event.target.nodeName; - if ( nodeName == 'INPUT' || nodeName == 'TEXTAREA' ) { - event.target.focus(); - } - this.staticClick( event, pointer ); - - // set flag for emulated clicks 300ms after touchend - if ( event.type != 'mouseup' ) { - this.isIgnoringMouseUp = true; - // reset flag after 300ms - setTimeout( function() { - delete this.isIgnoringMouseUp; - }.bind( this ), 400 ); - } -}; - -proto.staticClick = function( event, pointer ) { - this.emitEvent( 'staticClick', [ event, pointer ] ); -}; - -// ----- utils ----- // - -Unidragger.getPointerPoint = Unipointer.getPointerPoint; - -// ----- ----- // - -return Unidragger; - -})); - -/*! - * Draggabilly v2.1.0 - * Make that shiz draggable - * http://draggabilly.desandro.com - * MIT license - */ - -/*jshint browser: true, strict: true, undef: true, unused: true */ - -( function( window, factory ) { - // universal module definition - /* jshint strict: false */ /*globals define, module, require */ - if ( typeof define == 'function' && define.amd ) { - // AMD - define( [ - 'get-size/get-size', - 'unidragger/unidragger' - ], - function( getSize, Unidragger ) { - return factory( window, getSize, Unidragger ); - }); - } else if ( typeof module == 'object' && module.exports ) { - // CommonJS - module.exports = factory( - window, - require('get-size'), - require('unidragger') - ); - } else { - // browser global - window.Draggabilly = factory( - window, - window.getSize, - window.Unidragger - ); - } - -}( window, function factory( window, getSize, Unidragger ) { - - - -// vars -var document = window.document; - -function noop() {} - -// -------------------------- helpers -------------------------- // - -// extend objects -function extend( a, b ) { - for ( var prop in b ) { - a[ prop ] = b[ prop ]; - } - return a; -} - -function isElement( obj ) { - return obj instanceof HTMLElement; -} - -// -------------------------- requestAnimationFrame -------------------------- // - -// get rAF, prefixed, if present -var requestAnimationFrame = window.requestAnimationFrame || - window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; - -// fallback to setTimeout -var lastTime = 0; -if ( !requestAnimationFrame ) { - requestAnimationFrame = function( callback ) { - var currTime = new Date().getTime(); - var timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) ); - var id = setTimeout( callback, timeToCall ); - lastTime = currTime + timeToCall; - return id; - }; -} - -// -------------------------- support -------------------------- // - -var docElem = document.documentElement; -var transformProperty = typeof docElem.style.transform == 'string' ? - 'transform' : 'WebkitTransform'; - -var jQuery = window.jQuery; - -// -------------------------- -------------------------- // - -function Draggabilly( element, options ) { - // querySelector if string - this.element = typeof element == 'string' ? - document.querySelector( element ) : element; - - if ( jQuery ) { - this.$element = jQuery( this.element ); - } - - // options - this.options = extend( {}, this.constructor.defaults ); - this.option( options ); - - this._create(); -} - -// inherit Unidragger methods -var proto = Draggabilly.prototype = Object.create( Unidragger.prototype ); - -Draggabilly.defaults = { -}; - -/** - * set options - * @param {Object} opts - */ -proto.option = function( opts ) { - extend( this.options, opts ); -}; - -proto._create = function() { - - // properties - this.position = {}; - this._getPosition(); - - this.startPoint = { x: 0, y: 0 }; - this.dragPoint = { x: 0, y: 0 }; - - this.startPosition = extend( {}, this.position ); - - // set relative positioning - var style = getComputedStyle( this.element ); - if ( style.position != 'relative' && style.position != 'absolute' ) { - this.element.style.position = 'relative'; - } - - this.enable(); - this.setHandles(); - -}; - -/** - * set this.handles and bind start events to 'em - */ -proto.setHandles = function() { - this.handles = this.options.handle ? - this.element.querySelectorAll( this.options.handle ) : [ this.element ]; - - this.bindHandles(); -}; - -/** - * emits events via EvEmitter and jQuery events - * @param {String} type - name of event - * @param {Event} event - original event - * @param {Array} args - extra arguments - */ -proto.dispatchEvent = function( type, event, args ) { - var emitArgs = [ event ].concat( args ); - this.emitEvent( type, emitArgs ); - var jQuery = window.jQuery; - // trigger jQuery event - if ( jQuery && this.$element ) { - if ( event ) { - // create jQuery event - var $event = jQuery.Event( event ); - $event.type = type; - this.$element.trigger( $event, args ); - } else { - // just trigger with type if no event available - this.$element.trigger( type, args ); - } - } -}; - -// -------------------------- position -------------------------- // - -// get x/y position from style -Draggabilly.prototype._getPosition = function() { - var style = getComputedStyle( this.element ); - var x = this._getPositionCoord( style.left, 'width' ); - var y = this._getPositionCoord( style.top, 'height' ); - // clean up 'auto' or other non-integer values - this.position.x = isNaN( x ) ? 0 : x; - this.position.y = isNaN( y ) ? 0 : y; - - this._addTransformPosition( style ); -}; - -Draggabilly.prototype._getPositionCoord = function( styleSide, measure ) { - if ( styleSide.indexOf('%') != -1 ) { - // convert percent into pixel for Safari, #75 - var parentSize = getSize( this.element.parentNode ); - return ( parseFloat( styleSide ) / 100 ) * parentSize[ measure ]; - } - - return parseInt( styleSide, 10 ); -}; - -// add transform: translate( x, y ) to position -proto._addTransformPosition = function( style ) { - var transform = style[ transformProperty ]; - // bail out if value is 'none' - if ( transform.indexOf('matrix') !== 0 ) { - return; - } - // split matrix(1, 0, 0, 1, x, y) - var matrixValues = transform.split(','); - // translate X value is in 12th or 4th position - var xIndex = transform.indexOf('matrix3d') === 0 ? 12 : 4; - var translateX = parseInt( matrixValues[ xIndex ], 10 ); - // translate Y value is in 13th or 5th position - var translateY = parseInt( matrixValues[ xIndex + 1 ], 10 ); - this.position.x += translateX; - this.position.y += translateY; -}; - -// -------------------------- events -------------------------- // - -/** - * pointer start - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerDown = function( event, pointer ) { - this._dragPointerDown( event, pointer ); - // kludge to blur focused inputs in dragger - var focused = document.activeElement; - // do not blur body for IE10, metafizzy/flickity#117 - if ( focused && focused.blur && focused != document.body ) { - focused.blur(); - } - // bind move and end events - this._bindPostStartEvents( event ); - this.element.classList.add('is-pointer-down'); - this.dispatchEvent( 'pointerDown', event, [ pointer ] ); -}; - -/** - * drag move - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerMove = function( event, pointer ) { - var moveVector = this._dragPointerMove( event, pointer ); - this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] ); - this._dragMove( event, pointer, moveVector ); -}; - -/** - * drag start - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.dragStart = function( event, pointer ) { - if ( !this.isEnabled ) { - return; - } - this._getPosition(); - this.measureContainment(); - // position _when_ drag began - this.startPosition.x = this.position.x; - this.startPosition.y = this.position.y; - // reset left/top style - this.setLeftTop(); - - this.dragPoint.x = 0; - this.dragPoint.y = 0; - - this.element.classList.add('is-dragging'); - this.dispatchEvent( 'dragStart', event, [ pointer ] ); - // start animation - this.animate(); -}; - -proto.measureContainment = function() { - var containment = this.options.containment; - if ( !containment ) { - return; - } - - // use element if element - var container = isElement( containment ) ? containment : - // fallback to querySelector if string - typeof containment == 'string' ? document.querySelector( containment ) : - // otherwise just `true`, use the parent - this.element.parentNode; - - var elemSize = getSize( this.element ); - var containerSize = getSize( container ); - var elemRect = this.element.getBoundingClientRect(); - var containerRect = container.getBoundingClientRect(); - - var borderSizeX = containerSize.borderLeftWidth + containerSize.borderRightWidth; - var borderSizeY = containerSize.borderTopWidth + containerSize.borderBottomWidth; - - var position = this.relativeStartPosition = { - x: elemRect.left - ( containerRect.left + containerSize.borderLeftWidth ), - y: elemRect.top - ( containerRect.top + containerSize.borderTopWidth ) - }; - - this.containSize = { - width: ( containerSize.width - borderSizeX ) - position.x - elemSize.width, - height: ( containerSize.height - borderSizeY ) - position.y - elemSize.height - }; -}; - -// ----- move event ----- // - -/** - * drag move - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.dragMove = function( event, pointer, moveVector ) { - if ( !this.isEnabled ) { - return; - } - var dragX = moveVector.x; - var dragY = moveVector.y; - - var grid = this.options.grid; - var gridX = grid && grid[0]; - var gridY = grid && grid[1]; - - dragX = applyGrid( dragX, gridX ); - dragY = applyGrid( dragY, gridY ); - - dragX = this.containDrag( 'x', dragX, gridX ); - dragY = this.containDrag( 'y', dragY, gridY ); - - // constrain to axis - dragX = this.options.axis == 'y' ? 0 : dragX; - dragY = this.options.axis == 'x' ? 0 : dragY; - - this.position.x = this.startPosition.x + dragX; - this.position.y = this.startPosition.y + dragY; - // set dragPoint properties - this.dragPoint.x = dragX; - this.dragPoint.y = dragY; - - this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] ); -}; - -function applyGrid( value, grid, method ) { - method = method || 'round'; - return grid ? Math[ method ]( value / grid ) * grid : value; -} - -proto.containDrag = function( axis, drag, grid ) { - if ( !this.options.containment ) { - return drag; - } - var measure = axis == 'x' ? 'width' : 'height'; - - var rel = this.relativeStartPosition[ axis ]; - var min = applyGrid( -rel, grid, 'ceil' ); - var max = this.containSize[ measure ]; - max = applyGrid( max, grid, 'floor' ); - return Math.min( max, Math.max( min, drag ) ); -}; - -// ----- end event ----- // - -/** - * pointer up - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.pointerUp = function( event, pointer ) { - this.element.classList.remove('is-pointer-down'); - this.dispatchEvent( 'pointerUp', event, [ pointer ] ); - this._dragPointerUp( event, pointer ); -}; - -/** - * drag end - * @param {Event} event - * @param {Event or Touch} pointer - */ -proto.dragEnd = function( event, pointer ) { - if ( !this.isEnabled ) { - return; - } - // use top left position when complete - if ( transformProperty ) { - this.element.style[ transformProperty ] = ''; - this.setLeftTop(); - } - this.element.classList.remove('is-dragging'); - this.dispatchEvent( 'dragEnd', event, [ pointer ] ); -}; - -// -------------------------- animation -------------------------- // - -proto.animate = function() { - // only render and animate if dragging - if ( !this.isDragging ) { - return; - } - - this.positionDrag(); - - var _this = this; - requestAnimationFrame( function animateFrame() { - _this.animate(); - }); - -}; - -// left/top positioning -proto.setLeftTop = function() { - this.element.style.left = this.position.x + 'px'; - this.element.style.top = this.position.y + 'px'; -}; - -proto.positionDrag = function() { - this.element.style[ transformProperty ] = 'translate3d( ' + this.dragPoint.x + - 'px, ' + this.dragPoint.y + 'px, 0)'; -}; - -// ----- staticClick ----- // - -proto.staticClick = function( event, pointer ) { - this.dispatchEvent( 'staticClick', event, [ pointer ] ); -}; - -// ----- methods ----- // - -proto.enable = function() { - this.isEnabled = true; -}; - -proto.disable = function() { - this.isEnabled = false; - if ( this.isDragging ) { - this.dragEnd(); - } -}; - -proto.destroy = function() { - this.disable(); - // reset styles - this.element.style[ transformProperty ] = ''; - this.element.style.left = ''; - this.element.style.top = ''; - this.element.style.position = ''; - // unbind handles - this.unbindHandles(); - // remove jQuery data - if ( this.$element ) { - this.$element.removeData('draggabilly'); - } -}; - -// ----- jQuery bridget ----- // - -// required for jQuery bridget -proto._init = noop; - -if ( jQuery && jQuery.bridget ) { - jQuery.bridget( 'draggabilly', Draggabilly ); -} - -// ----- ----- // - -return Draggabilly; - -})); - |
