{"version":3,"sources":["webpack:///./src/js/components/Component.js","webpack:///./src/js/components/FeaturedCompare.js","webpack:///./src/js/plugins/jquery.event.move.js","webpack:///./src/js/plugins/jquery.twentytwenty.js"],"names":["domTree","WeakMap","configuration","Component","el","config","arguments","length","undefined","_classCallCheck","this","Error","$el","jQuery","$","set","hasOwnProperty","dom","setupDefaults","addListeners","get","elements","_component","__webpack_require__","FeaturedCompare","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","twentytwenty","default_offset_pct","no_overlay","onMove","bind","find","hide","position","show","define","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","assign","window","extend","threshold","requestFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","fn","element","setTimeout","CustomEvent","event","params","bubbles","cancelable","detail","evt","document","createEvent","initCustomEvent","prototype","Event","ignoreTags","textarea","input","select","button","mouseevents","move","cancel","end","touchevents","rspaces","eventOptions","eventsSymbol","Symbol","getEvents","node","on","types","data","selector","split","type","events","i","handler","e","push","addEventListener","off","handlers","k","removeEventListener","splice","trigger","properties","dispatchEvent","noop","preventDefault","identifiedTouch","touchList","id","l","identifier","changedTouch","touch","changedTouches","pageX","pageY","mousemove","checkThreshold","removeMouse","mouseend","removeTouch","touchmove","touchend","distX","distY","touches","targetTouches","time","timeStamp","template","altKey","ctrlKey","shiftKey","startX","startY","deltaX","deltaY","velocityX","velocityY","finger","enableMove","moveEnabled","target","triggerStart","activeMousemove","timer","kick","activeMouseend","endEvent","activeTouchend","activeTouchmove","removeActiveTouch","which","isPrimaryButton","tagName","toLowerCase","isIgnoreTag","defaultPrevented","callback","active","running","cb","updateEvent","special","movestart","setup","enableMove1","teardown","add","enableMove2","moveend","enableMove3","handleObj","property","originalEvent","apply","exports","__WEBPACK_AMD_DEFINE_ARRAY__","module","options","orientation","before_label","after_label","move_slider_on_hover","move_with_handle_only","click_to_move","each","sliderPct","container","sliderOrientation","beforeDirection","afterDirection","onPositionChange","wrap","append","beforeImg","afterImg","slider","addClass","overlay","adjustSlider","pct","dimensionPct","w","h","offset","width","height","cw","ch","css","adjustContainer","getSliderPercentage","positionX","positionY","num","min","max","offsetY","imgHeight","offsetX","imgWidth","Math","onMoveStart","left","top","hasClass","onMoveEnd","removeClass","moveTarget"],"mappings":"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","file":"20.6717de44fdcae5c5ce91.js","sourcesContent":["const domTree = new WeakMap();\r\nconst configuration = new WeakMap();\r\n\r\n/**\r\n * Component is a class that should be extended for every component that's being made. It\r\n * is a helper class to keep the code uniform.\r\n *\r\n * __PLEASE NOTE__: This is only to be extended, not instantiated.\r\n *\r\n * @example\r\n * import Component from 'component';\r\n *\r\n * class Foo extends Component {\r\n *   construction(el){\r\n *     super(el);\r\n *   }\r\n *\r\n *   setupDefaults(){\r\n *     // ...defaults go here\r\n *   }\r\n *\r\n *   addListeners(){\r\n *     // ...listeners go here\r\n *   }\r\n * }\r\n *\r\n * // Create a new Foo component\r\n * new Foo('.foo');\r\n */\r\nclass Component {\r\n  /**\r\n   * Component constructor - see {@link config} on how to pass in additional configuration to the constructor\r\n   *\r\n   * @param {string|Object} el - Main DOM element, you can pass a string such as `'.foo'` __or__ a jQuery object such as `$('.foo')`\r\n   * @param {Object} [config={ }] - Additional component configuration; reachable with `this.config`\r\n   */\r\n  constructor(el, config = {}){\r\n    if (typeof el === 'undefined') {\r\n      throw new Error('You must provide an element as a String type or a jQuery object type');\r\n    }\r\n\r\n    /**\r\n     * Main class element, this will be a jQuery instance\r\n     * This can be reachable at any time in your superclass with `this.$el`\r\n     *\r\n     * @type {Object}\r\n     */\r\n    this.$el = el instanceof jQuery ? el : $(el);\r\n\r\n    if (this.$el.length === 0) return;\r\n\r\n    domTree.set(this, {});\r\n    configuration.set(this, config);\r\n\r\n    if (this.config.hasOwnProperty('dom')) {\r\n      this.dom = this.config.dom;\r\n    }\r\n\r\n    this.setupDefaults();\r\n    this.addListeners();\r\n  }\r\n\r\n  /**\r\n   * This method is used for override;\r\n   * It's called directly after the element and configuration have been set up\r\n   * @abstract\r\n   */\r\n  setupDefaults(){}\r\n\r\n  /**\r\n   * This method is used for override;\r\n   * It's called directly after `setupDefaults()`, so everything is ready and setup at this point.\r\n   * @abstract\r\n   */\r\n  addListeners(){}\r\n\r\n  /**\r\n   * Get component configuration\r\n   *\r\n   * @example\r\n   * class Foo extends Component {\r\n   *   construction(el, config){\r\n   *     super(el, config);\r\n   *   }\r\n   *\r\n   *   setupDefaults(){\r\n   *     console.log(this.config.name); // Outputs \"Foo\"\r\n   *   }\r\n   * }\r\n   *\r\n   * // Create a new Foo component with some configuration\r\n   * new Foo('.foo', {\r\n   *   name: 'Foo'\r\n   * });\r\n   *\r\n   * @type {Object}\r\n   */\r\n  get config(){\r\n    return configuration.get(this);\r\n  }\r\n\r\n  /**\r\n   * Set DOM object\r\n   *\r\n   * @example\r\n   * class Foo extends Component {\r\n   *   construction(el){\r\n   *     super(el);\r\n   *   }\r\n   *\r\n   *   setupDefaults(){\r\n   *     this.dom = {\r\n   *       $container: this.$el.find('.container')\r\n   *     }\r\n   *   }\r\n   *\r\n   *   addListeners(){\r\n   *     //DOM object is available\r\n   *     console.log(this.dom.$container);\r\n   *   }\r\n   * }\r\n   *\r\n   * // Create a new Foo component\r\n   * new Foo('.foo');\r\n   *\r\n   * @type {Object}\r\n   */\r\n  set dom(elements){\r\n    elements = {\r\n      ...this.dom,\r\n      ...elements\r\n    };\r\n\r\n    domTree.set(this, elements);\r\n  }\r\n\r\n  /**\r\n   * Get DOM object\r\n   *\r\n   * @example\r\n   * this.dom\r\n   *\r\n   * @type {Object}\r\n   */\r\n  get dom(){\r\n    return domTree.get(this);\r\n  }\r\n}\r\n\r\nexport default Component;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/Component.js","import Component from 'component';\r\nimport '../plugins/jquery.event.move';\r\nimport '../plugins/jquery.twentytwenty';\r\n\r\nclass FeaturedCompare extends Component {\r\n  constructor(el) {\r\n    super(el);\r\n\r\n    this.$el.twentytwenty({\r\n      default_offset_pct: 0.5,\r\n      no_overlay: true,\r\n      onMove: ::this.onMove\r\n    });\r\n\r\n    this.$el.find('.twentytwenty-right-arrow').hide();\r\n  }\r\n\r\n  onMove(position) {\r\n    if (position < 0.05) {\r\n      this.$el.find('.twentytwenty-left-arrow').hide();\r\n      this.$el.find('.twentytwenty-right-arrow').show();\r\n    } else {\r\n      this.$el.find('.twentytwenty-left-arrow').show();\r\n      this.$el.find('.twentytwenty-right-arrow').hide();\r\n    }\r\n  }\r\n\r\n}\r\n\r\nexport default FeaturedCompare;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/FeaturedCompare.js","// DOM.event.move\r\n//\r\n// 2.0.0\r\n//\r\n// Stephen Band\r\n//\r\n// Triggers 'movestart', 'move' and 'moveend' events after\r\n// mousemoves following a mousedown cross a distance threshold,\r\n// similar to the native 'dragstart', 'drag' and 'dragend' events.\r\n// Move events are throttled to animation frames. Move event objects\r\n// have the properties:\r\n//\r\n// pageX:\r\n// pageY:     Page coordinates of pointer.\r\n// startX:\r\n// startY:    Page coordinates of pointer at movestart.\r\n// distX:\r\n// distY:     Distance the pointer has moved since movestart.\r\n// deltaX:\r\n// deltaY:    Distance the finger has moved since last event.\r\n// velocityX:\r\n// velocityY: Average velocity over last few events.\r\n\r\n\r\n(function(fn) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n        define([], fn);\r\n    } else if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\r\n        module.exports = fn;\r\n\t} else {\r\n\t\tfn();\r\n\t}\r\n})(function(){\r\n\tvar assign = Object.assign || window.jQuery && jQuery.extend;\r\n\r\n\t// Number of pixels a pressed pointer travels before movestart\r\n\t// event is fired.\r\n\tvar threshold = 8;\r\n\r\n\t// Shim for requestAnimationFrame, falling back to timer. See:\r\n\t// see http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\tvar requestFrame = (function(){\r\n\t\treturn (\r\n\t\t\twindow.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\twindow.msRequestAnimationFrame ||\r\n\t\t\tfunction(fn, element){\r\n\t\t\t\treturn window.setTimeout(function(){\r\n\t\t\t\t\tfn();\r\n\t\t\t\t}, 25);\r\n\t\t\t}\r\n\t\t);\r\n\t})();\r\n\r\n\t// Shim for customEvent\r\n\t// see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill\r\n\t(function () {\r\n\t\tif ( typeof window.CustomEvent === \"function\" ) return false;\r\n\t\tfunction CustomEvent ( event, params ) {\r\n\t\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\r\n\t\t\tvar evt = document.createEvent( 'CustomEvent' );\r\n\t\t\tevt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\r\n\t\t\treturn evt;\r\n\t\t}\r\n\r\n\t\tCustomEvent.prototype = window.Event.prototype;\r\n\t\twindow.CustomEvent = CustomEvent;\r\n\t})();\r\n\r\n\tvar ignoreTags = {\r\n\t\t\ttextarea: true,\r\n\t\t\tinput: true,\r\n\t\t\tselect: true,\r\n\t\t\tbutton: true\r\n\t\t};\r\n\r\n\tvar mouseevents = {\r\n\t\tmove:   'mousemove',\r\n\t\tcancel: 'mouseup dragstart',\r\n\t\tend:    'mouseup'\r\n\t};\r\n\r\n\tvar touchevents = {\r\n\t\tmove:   'touchmove',\r\n\t\tcancel: 'touchend',\r\n\t\tend:    'touchend'\r\n\t};\r\n\r\n\tvar rspaces = /\\s+/;\r\n\r\n\r\n\t// DOM Events\r\n\r\n\tvar eventOptions = { bubbles: true, cancelable: true };\r\n\r\n\tvar eventsSymbol = typeof Symbol === \"function\" ? Symbol('events') : {};\r\n\r\n\tfunction createEvent(type) {\r\n\t\treturn new CustomEvent(type, eventOptions);\r\n\t}\r\n\r\n\tfunction getEvents(node) {\r\n\t\treturn node[eventsSymbol] || (node[eventsSymbol] = {});\r\n\t}\r\n\r\n\tfunction on(node, types, fn, data, selector) {\r\n\t\ttypes = types.split(rspaces);\r\n\r\n\t\tvar events = getEvents(node);\r\n\t\tvar i = types.length;\r\n\t\tvar handlers, type;\r\n\r\n\t\tfunction handler(e) { fn(e, data); }\r\n\r\n\t\twhile (i--) {\r\n\t\t\ttype = types[i];\r\n\t\t\thandlers = events[type] || (events[type] = []);\r\n\t\t\thandlers.push([fn, handler]);\r\n\t\t\tnode.addEventListener(type, handler);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction off(node, types, fn, selector) {\r\n\t\ttypes = types.split(rspaces);\r\n\r\n\t\tvar events = getEvents(node);\r\n\t\tvar i = types.length;\r\n\t\tvar type, handlers, k;\r\n\r\n\t\tif (!events) { return; }\r\n\r\n\t\twhile (i--) {\r\n\t\t\ttype = types[i];\r\n\t\t\thandlers = events[type];\r\n\t\t\tif (!handlers) { continue; }\r\n\t\t\tk = handlers.length;\r\n\t\t\twhile (k--) {\r\n\t\t\t\tif (handlers[k][0] === fn) {\r\n\t\t\t\t\tnode.removeEventListener(type, handlers[k][1]);\r\n\t\t\t\t\thandlers.splice(k, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction trigger(node, type, properties) {\r\n\t\t// Don't cache events. It prevents you from triggering an event of a\r\n\t\t// given type from inside the handler of another event of that type.\r\n\t\tvar event = createEvent(type);\r\n\t\tif (properties) { assign(event, properties); }\r\n\t\tnode.dispatchEvent(event);\r\n\t}\r\n\r\n\r\n\t// Constructors\r\n\r\n\tfunction Timer(fn){\r\n\t\tvar callback = fn,\r\n\t\t    active = false,\r\n\t\t    running = false;\r\n\r\n\t\tfunction trigger(time) {\r\n\t\t\tif (active){\r\n\t\t\t\tcallback();\r\n\t\t\t\trequestFrame(trigger);\r\n\t\t\t\trunning = true;\r\n\t\t\t\tactive = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trunning = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.kick = function(fn) {\r\n\t\t\tactive = true;\r\n\t\t\tif (!running) { trigger(); }\r\n\t\t};\r\n\r\n\t\tthis.end = function(fn) {\r\n\t\t\tvar cb = callback;\r\n\r\n\t\t\tif (!fn) { return; }\r\n\r\n\t\t\t// If the timer is not running, simply call the end callback.\r\n\t\t\tif (!running) {\r\n\t\t\t\tfn();\r\n\t\t\t}\r\n\t\t\t// If the timer is running, and has been kicked lately, then\r\n\t\t\t// queue up the current callback and the end callback, otherwise\r\n\t\t\t// just the end callback.\r\n\t\t\telse {\r\n\t\t\t\tcallback = active ?\r\n\t\t\t\t\tfunction(){ cb(); fn(); } :\r\n\t\t\t\t\tfn ;\r\n\r\n\t\t\t\tactive = true;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\r\n\t// Functions\r\n\r\n\tfunction noop() {}\r\n\r\n\tfunction preventDefault(e) {\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tfunction isIgnoreTag(e) {\r\n\t\treturn !!ignoreTags[e.target.tagName.toLowerCase()];\r\n\t}\r\n\r\n\tfunction isPrimaryButton(e) {\r\n\t\t// Ignore mousedowns on any button other than the left (or primary)\r\n\t\t// mouse button, or when a modifier key is pressed.\r\n\t\treturn (e.which === 1 && !e.ctrlKey && !e.altKey);\r\n\t}\r\n\r\n\tfunction identifiedTouch(touchList, id) {\r\n\t\tvar i, l;\r\n\r\n\t\tif (touchList.identifiedTouch) {\r\n\t\t\treturn touchList.identifiedTouch(id);\r\n\t\t}\r\n\r\n\t\t// touchList.identifiedTouch() does not exist in\r\n\t\t// webkit yet… we must do the search ourselves...\r\n\r\n\t\ti = -1;\r\n\t\tl = touchList.length;\r\n\r\n\t\twhile (++i < l) {\r\n\t\t\tif (touchList[i].identifier === id) {\r\n\t\t\t\treturn touchList[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction changedTouch(e, data) {\r\n\t\tvar touch = identifiedTouch(e.changedTouches, data.identifier);\r\n\r\n\t\t// This isn't the touch you're looking for.\r\n\t\tif (!touch) { return; }\r\n\r\n\t\t// Chrome Android (at least) includes touches that have not\r\n\t\t// changed in e.changedTouches. That's a bit annoying. Check\r\n\t\t// that this touch has changed.\r\n\t\tif (touch.pageX === data.pageX && touch.pageY === data.pageY) { return; }\r\n\r\n\t\treturn touch;\r\n\t}\r\n\r\n\r\n\t// Handlers that decide when the first movestart is triggered\r\n\r\n\tfunction mousedown(e){\r\n\t\t// Ignore non-primary buttons\r\n\t\tif (!isPrimaryButton(e)) { return; }\r\n\r\n\t\t// Ignore form and interactive elements\r\n\t\tif (isIgnoreTag(e)) { return; }\r\n\r\n\t\ton(document, mouseevents.move, mousemove, e);\r\n\t\ton(document, mouseevents.cancel, mouseend, e);\r\n\t}\r\n\r\n\tfunction mousemove(e, data){\r\n\t\tcheckThreshold(e, data, e, removeMouse);\r\n\t}\r\n\r\n\tfunction mouseend(e, data) {\r\n\t\tremoveMouse();\r\n\t}\r\n\r\n\tfunction removeMouse() {\r\n\t\toff(document, mouseevents.move, mousemove);\r\n\t\toff(document, mouseevents.cancel, mouseend);\r\n\t}\r\n\r\n\tfunction touchstart(e) {\r\n\t\t// Don't get in the way of interaction with form elements\r\n\t\tif (ignoreTags[e.target.tagName.toLowerCase()]) { return; }\r\n\r\n\t\tvar touch = e.changedTouches[0];\r\n\r\n\t\t// iOS live updates the touch objects whereas Android gives us copies.\r\n\t\t// That means we can't trust the touchstart object to stay the same,\r\n\t\t// so we must copy the data. This object acts as a template for\r\n\t\t// movestart, move and moveend event objects.\r\n\t\tvar data = {\r\n\t\t\ttarget:     touch.target,\r\n\t\t\tpageX:      touch.pageX,\r\n\t\t\tpageY:      touch.pageY,\r\n\t\t\tidentifier: touch.identifier,\r\n\r\n\t\t\t// The only way to make handlers individually unbindable is by\r\n\t\t\t// making them unique.\r\n\t\t\ttouchmove:  function(e, data) { touchmove(e, data); },\r\n\t\t\ttouchend:   function(e, data) { touchend(e, data); }\r\n\t\t};\r\n\r\n\t\ton(document, touchevents.move, data.touchmove, data);\r\n\t\ton(document, touchevents.cancel, data.touchend, data);\r\n\t}\r\n\r\n\tfunction touchmove(e, data) {\r\n\t\tvar touch = changedTouch(e, data);\r\n\t\tif (!touch) { return; }\r\n\t\tcheckThreshold(e, data, touch, removeTouch);\r\n\t}\r\n\r\n\tfunction touchend(e, data) {\r\n\t\tvar touch = identifiedTouch(e.changedTouches, data.identifier);\r\n\t\tif (!touch) { return; }\r\n\t\tremoveTouch(data);\r\n\t}\r\n\r\n\tfunction removeTouch(data) {\r\n\t\toff(document, touchevents.move, data.touchmove);\r\n\t\toff(document, touchevents.cancel, data.touchend);\r\n\t}\r\n\r\n\tfunction checkThreshold(e, data, touch, fn) {\r\n\t\tvar distX = touch.pageX - data.pageX;\r\n\t\tvar distY = touch.pageY - data.pageY;\r\n\r\n\t\t// Do nothing if the threshold has not been crossed.\r\n\t\tif ((distX * distX) + (distY * distY) < (threshold * threshold)) { return; }\r\n\r\n\t\ttriggerStart(e, data, touch, distX, distY, fn);\r\n\t}\r\n\r\n\tfunction triggerStart(e, data, touch, distX, distY, fn) {\r\n\t\tvar touches = e.targetTouches;\r\n\t\tvar time = e.timeStamp - data.timeStamp;\r\n\r\n\t\t// Create a movestart object with some special properties that\r\n\t\t// are passed only to the movestart handlers.\r\n\t\tvar template = {\r\n\t\t\taltKey:     e.altKey,\r\n\t\t\tctrlKey:    e.ctrlKey,\r\n\t\t\tshiftKey:   e.shiftKey,\r\n\t\t\tstartX:     data.pageX,\r\n\t\t\tstartY:     data.pageY,\r\n\t\t\tdistX:      distX,\r\n\t\t\tdistY:      distY,\r\n\t\t\tdeltaX:     distX,\r\n\t\t\tdeltaY:     distY,\r\n\t\t\tpageX:      touch.pageX,\r\n\t\t\tpageY:      touch.pageY,\r\n\t\t\tvelocityX:  distX / time,\r\n\t\t\tvelocityY:  distY / time,\r\n\t\t\tidentifier: data.identifier,\r\n\t\t\ttargetTouches: touches,\r\n\t\t\tfinger: touches ? touches.length : 1,\r\n\t\t\tenableMove: function() {\r\n\t\t\t\tthis.moveEnabled = true;\r\n\t\t\t\tthis.enableMove = noop;\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Trigger the movestart event.\r\n\t\ttrigger(data.target, 'movestart', template);\r\n\r\n\t\t// Unbind handlers that tracked the touch or mouse up till now.\r\n\t\tfn(data);\r\n\t}\r\n\r\n\r\n\t// Handlers that control what happens following a movestart\r\n\r\n\tfunction activeMousemove(e, data) {\r\n\t\tvar timer  = data.timer;\r\n\r\n\t\tdata.touch = e;\r\n\t\tdata.timeStamp = e.timeStamp;\r\n\t\ttimer.kick();\r\n\t}\r\n\r\n\tfunction activeMouseend(e, data) {\r\n\t\tvar target = data.target;\r\n\t\tvar event  = data.event;\r\n\t\tvar timer  = data.timer;\r\n\r\n\t\tremoveActiveMouse();\r\n\r\n\t\tendEvent(target, event, timer, function() {\r\n\t\t\t// Unbind the click suppressor, waiting until after mouseup\r\n\t\t\t// has been handled.\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\toff(target, 'click', preventDefault);\r\n\t\t\t}, 0);\r\n\t\t});\r\n\t}\r\n\r\n\tfunction removeActiveMouse() {\r\n\t\toff(document, mouseevents.move, activeMousemove);\r\n\t\toff(document, mouseevents.end, activeMouseend);\r\n\t}\r\n\r\n\tfunction activeTouchmove(e, data) {\r\n\t\tvar event = data.event;\r\n\t\tvar timer = data.timer;\r\n\t\tvar touch = changedTouch(e, event);\r\n\r\n\t\tif (!touch) { return; }\r\n\r\n\t\t// Stop the interface from gesturing\r\n\t\te.preventDefault();\r\n\r\n\t\tevent.targetTouches = e.targetTouches;\r\n\t\tdata.touch = touch;\r\n\t\tdata.timeStamp = e.timeStamp;\r\n\r\n\t\ttimer.kick();\r\n\t}\r\n\r\n\tfunction activeTouchend(e, data) {\r\n\t\tvar target = data.target;\r\n\t\tvar event  = data.event;\r\n\t\tvar timer  = data.timer;\r\n\t\tvar touch  = identifiedTouch(e.changedTouches, event.identifier);\r\n\r\n\t\t// This isn't the touch you're looking for.\r\n\t\tif (!touch) { return; }\r\n\r\n\t\tremoveActiveTouch(data);\r\n\t\tendEvent(target, event, timer);\r\n\t}\r\n\r\n\tfunction removeActiveTouch(data) {\r\n\t\toff(document, touchevents.move, data.activeTouchmove);\r\n\t\toff(document, touchevents.end, data.activeTouchend);\r\n\t}\r\n\r\n\r\n\t// Logic for triggering move and moveend events\r\n\r\n\tfunction updateEvent(event, touch, timeStamp) {\r\n\t\tvar time = timeStamp - event.timeStamp;\r\n\r\n\t\tevent.distX =  touch.pageX - event.startX;\r\n\t\tevent.distY =  touch.pageY - event.startY;\r\n\t\tevent.deltaX = touch.pageX - event.pageX;\r\n\t\tevent.deltaY = touch.pageY - event.pageY;\r\n\r\n\t\t// Average the velocity of the last few events using a decay\r\n\t\t// curve to even out spurious jumps in values.\r\n\t\tevent.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time;\r\n\t\tevent.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time;\r\n\t\tevent.pageX =  touch.pageX;\r\n\t\tevent.pageY =  touch.pageY;\r\n\t}\r\n\r\n\tfunction endEvent(target, event, timer, fn) {\r\n\t\ttimer.end(function(){\r\n\t\t\ttrigger(target, 'moveend', event);\r\n\t\t\treturn fn && fn();\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t// Set up the DOM\r\n\r\n\tfunction movestart(e) {\r\n\t\tif (e.defaultPrevented) { return; }\r\n\t\tif (!e.moveEnabled) { return; }\r\n\r\n\t\tvar event = {\r\n\t\t\tstartX:        e.startX,\r\n\t\t\tstartY:        e.startY,\r\n\t\t\tpageX:         e.pageX,\r\n\t\t\tpageY:         e.pageY,\r\n\t\t\tdistX:         e.distX,\r\n\t\t\tdistY:         e.distY,\r\n\t\t\tdeltaX:        e.deltaX,\r\n\t\t\tdeltaY:        e.deltaY,\r\n\t\t\tvelocityX:     e.velocityX,\r\n\t\t\tvelocityY:     e.velocityY,\r\n\t\t\tidentifier:    e.identifier,\r\n\t\t\ttargetTouches: e.targetTouches,\r\n\t\t\tfinger:        e.finger\r\n\t\t};\r\n\r\n\t\tvar data = {\r\n\t\t\ttarget:    e.target,\r\n\t\t\tevent:     event,\r\n\t\t\ttimer:     new Timer(update),\r\n\t\t\ttouch:     undefined,\r\n\t\t\ttimeStamp: e.timeStamp\r\n\t\t};\r\n\r\n\t\tfunction update(time) {\r\n\t\t\tupdateEvent(event, data.touch, data.timeStamp);\r\n\t\t\ttrigger(data.target, 'move', event);\r\n\t\t}\r\n\r\n\t\tif (e.identifier === undefined) {\r\n\t\t\t// We're dealing with a mouse event.\r\n\t\t\t// Stop clicks from propagating during a move\r\n\t\t\ton(e.target, 'click', preventDefault);\r\n\t\t\ton(document, mouseevents.move, activeMousemove, data);\r\n\t\t\ton(document, mouseevents.end, activeMouseend, data);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// In order to unbind correct handlers they have to be unique\r\n\t\t\tdata.activeTouchmove = function(e, data) { activeTouchmove(e, data); };\r\n\t\t\tdata.activeTouchend = function(e, data) { activeTouchend(e, data); };\r\n\r\n\t\t\t// We're dealing with a touch.\r\n\t\t\ton(document, touchevents.move, data.activeTouchmove, data);\r\n\t\t\ton(document, touchevents.end, data.activeTouchend, data);\r\n\t\t}\r\n\t}\r\n\r\n\ton(document, 'mousedown', mousedown);\r\n\ton(document, 'touchstart', touchstart);\r\n\ton(document, 'movestart', movestart);\r\n\r\n\r\n\t// jQuery special events\r\n\t//\r\n\t// jQuery event objects are copies of DOM event objects. They need\r\n\t// a little help copying the move properties across.\r\n\r\n\tif (!window.jQuery) { return; }\r\n\r\n\tvar properties = (\"startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY\").split(' ');\r\n\r\n\tfunction enableMove1(e) { e.enableMove(); }\r\n\tfunction enableMove2(e) { e.enableMove(); }\r\n\tfunction enableMove3(e) { e.enableMove(); }\r\n\r\n\tfunction add(handleObj) {\r\n\t\tvar handler = handleObj.handler;\r\n\r\n\t\thandleObj.handler = function(e) {\r\n\t\t\t// Copy move properties across from originalEvent\r\n\t\t\tvar i = properties.length;\r\n\t\t\tvar property;\r\n\r\n\t\t\twhile(i--) {\r\n\t\t\t\tproperty = properties[i];\r\n\t\t\t\te[property] = e.originalEvent[property];\r\n\t\t\t}\r\n\r\n\t\t\thandler.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tjQuery.event.special.movestart = {\r\n\t\tsetup: function() {\r\n\t\t\t// Movestart must be enabled to allow other move events\r\n\t\t\ton(this, 'movestart', enableMove1);\r\n\r\n\t\t\t// Do listen to DOM events\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\toff(this, 'movestart', enableMove1);\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tadd: add\r\n\t};\r\n\r\n\tjQuery.event.special.move = {\r\n\t\tsetup: function() {\r\n\t\t\ton(this, 'movestart', enableMove2);\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\toff(this, 'movestart', enableMove2);\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tadd: add\r\n\t};\r\n\r\n\tjQuery.event.special.moveend = {\r\n\t\tsetup: function() {\r\n\t\t\ton(this, 'movestart', enableMove3);\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\toff(this, 'movestart', enableMove3);\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\tadd: add\r\n\t};\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/plugins/jquery.event.move.js","(function($){\r\n\r\n  $.fn.twentytwenty = function(options) {\r\n    var options = $.extend({\r\n      default_offset_pct: 0.5,\r\n      orientation: 'horizontal',\r\n      before_label: 'Before',\r\n      after_label: 'After',\r\n      no_overlay: false,\r\n      move_slider_on_hover: false,\r\n      move_with_handle_only: true,\r\n      click_to_move: false,\r\n      onMove: null\r\n    }, options);\r\n\r\n    return this.each(function() {\r\n\r\n      var sliderPct = options.default_offset_pct;\r\n      var container = $(this);\r\n      var sliderOrientation = options.orientation;\r\n      var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';\r\n      var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';\r\n      var onPositionChange = options.onMove;\r\n\r\n\r\n      container.wrap(\"<div class='twentytwenty-wrapper twentytwenty-\" + sliderOrientation + \"'></div>\");\r\n      if(!options.no_overlay) {\r\n        container.append(\"<div class='twentytwenty-overlay'></div>\");\r\n      }\r\n      var beforeImg = container.find(\"img:first\");\r\n      var afterImg = container.find(\"img:last\");\r\n      container.append(\"<div class='twentytwenty-handle'></div>\");\r\n      var slider = container.find(\".twentytwenty-handle\");\r\n      slider.append(\"<span class='twentytwenty-\" + beforeDirection + \"-arrow'></span>\");\r\n      slider.append(\"<span class='twentytwenty-\" + afterDirection + \"-arrow'></span>\");\r\n      container.addClass(\"twentytwenty-container\");\r\n      beforeImg.addClass(\"twentytwenty-before\");\r\n      afterImg.addClass(\"twentytwenty-after\");\r\n\r\n      var overlay = container.find(\".twentytwenty-overlay\");\r\n      overlay.append(\"<div class='twentytwenty-before-label' data-content='\"+options.before_label+\"'></div>\");\r\n      overlay.append(\"<div class='twentytwenty-after-label' data-content='\"+options.after_label+\"'></div>\");\r\n\r\n      var calcOffset = function(dimensionPct) {\r\n        var w = beforeImg.width();\r\n        var h = beforeImg.height();\r\n        return {\r\n          w: w+\"px\",\r\n          h: h+\"px\",\r\n          cw: (dimensionPct*w)+\"px\",\r\n          ch: (dimensionPct*h)+\"px\"\r\n        };\r\n      };\r\n\r\n      var adjustContainer = function(offset) {\r\n      \tif (sliderOrientation === 'vertical') {\r\n          beforeImg.css(\"clip\", \"rect(0,\"+offset.w+\",\"+offset.ch+\",0)\");\r\n          afterImg.css(\"clip\", \"rect(\"+offset.ch+\",\"+offset.w+\",\"+offset.h+\",0)\");\r\n      \t}\r\n      \telse {\r\n          beforeImg.css(\"clip\", \"rect(0,\"+offset.cw+\",\"+offset.h+\",0)\");\r\n          afterImg.css(\"clip\", \"rect(0,\"+offset.w+\",\"+offset.h+\",\"+offset.cw+\")\");\r\n    \t}\r\n        container.css(\"height\", offset.h);\r\n      };\r\n\r\n      var adjustSlider = function(pct) {\r\n        var offset = calcOffset(pct);\r\n        slider.css((sliderOrientation===\"vertical\") ? \"top\" : \"left\", (sliderOrientation===\"vertical\") ? offset.ch : offset.cw);\r\n        adjustContainer(offset);\r\n      };\r\n\r\n      // Return the number specified or the min/max number if it outside the range given.\r\n      var minMaxNumber = function(num, min, max) {\r\n        return Math.max(min, Math.min(max, num));\r\n      };\r\n\r\n      // Calculate the slider percentage based on the position.\r\n      var getSliderPercentage = function(positionX, positionY) {\r\n        var sliderPercentage = (sliderOrientation === 'vertical') ?\r\n          (positionY-offsetY)/imgHeight :\r\n          (positionX-offsetX)/imgWidth;\r\n\r\n        return minMaxNumber(sliderPercentage, 0, 1);\r\n      };\r\n\r\n\r\n      $(window).on(\"resize.twentytwenty\", function(e) {\r\n        adjustSlider(sliderPct);\r\n      });\r\n\r\n      var offsetX = 0;\r\n      var offsetY = 0;\r\n      var imgWidth = 0;\r\n      var imgHeight = 0;\r\n      var onMoveStart = function(e) {\r\n        if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {\r\n          e.preventDefault();\r\n        }\r\n        else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {\r\n          e.preventDefault();\r\n        }\r\n        container.addClass(\"active\");\r\n        offsetX = container.offset().left;\r\n        offsetY = container.offset().top;\r\n        imgWidth = beforeImg.width();\r\n        imgHeight = beforeImg.height();\r\n      };\r\n      var onMove = function(e) {\r\n        if (container.hasClass(\"active\")) {\r\n          sliderPct = getSliderPercentage(e.pageX, e.pageY);\r\n          adjustSlider(sliderPct);\r\n\r\n          if(typeof onPositionChange === 'function') {\r\n            onPositionChange(sliderPct);\r\n          }\r\n        }\r\n      };\r\n      var onMoveEnd = function() {\r\n          container.removeClass(\"active\");\r\n      };\r\n\r\n      var moveTarget = options.move_with_handle_only ? slider : container;\r\n      moveTarget.on(\"movestart\",onMoveStart);\r\n      moveTarget.on(\"move\",onMove);\r\n      moveTarget.on(\"moveend\",onMoveEnd);\r\n\r\n      if (options.move_slider_on_hover) {\r\n        container.on(\"mouseenter\", onMoveStart);\r\n        container.on(\"mousemove\", onMove);\r\n        container.on(\"mouseleave\", onMoveEnd);\r\n      }\r\n\r\n      slider.on(\"touchmove\", function(e) {\r\n        e.preventDefault();\r\n      });\r\n\r\n      container.find(\"img\").on(\"mousedown\", function(event) {\r\n        event.preventDefault();\r\n      });\r\n\r\n      if (options.click_to_move) {\r\n        container.on('click', function(e) {\r\n          offsetX = container.offset().left;\r\n          offsetY = container.offset().top;\r\n          imgWidth = beforeImg.width();\r\n          imgHeight = beforeImg.height();\r\n\r\n          sliderPct = getSliderPercentage(e.pageX, e.pageY);\r\n          adjustSlider(sliderPct);\r\n        });\r\n      }\r\n\r\n      $(window).trigger(\"resize.twentytwenty\");\r\n    });\r\n  };\r\n\r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/plugins/jquery.twentytwenty.js"],"sourceRoot":""}