!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Slideout=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o self._tolerance) ? self.open() : self.close(); } self._moved = false; }; this.panel.addEventListener(touch.end, this._onTouchEndFn); /** * Translates panel on touchmove */ this._onTouchMoveFn = function(eve) { self.emit('touchmove', eve.target); if (scrolling || self._preventOpen || typeof eve.touches === 'undefined') { return; } var dif_x = eve.touches[0].clientX - self._startOffsetX; var translateX = self._currentOffsetX = dif_x; if (Math.abs(translateX) > self._padding) { return; } if (Math.abs(dif_x) > 20) { self._opening = true; var oriented_dif_x = dif_x * self._orientation; if (self._opened && oriented_dif_x > 0 || !self._opened && oriented_dif_x < 0) { return; } if (oriented_dif_x <= 0) { translateX = dif_x + self._padding * self._orientation; self._opening = false; } if (!self._moved && html.className.search('slideout-open') === -1) { html.className += ' slideout-open'; } self.panel.style[prefix + 'transform'] = self.panel.style.transform = 'translate3d(' + translateX + 'px, 0, 0)'; self.emit('translate', translateX, eve.target); self._moved = true; } }; this.panel.addEventListener(touch.move, this._onTouchMoveFn); }; Slideout.prototype.enableTouch = function() { this._touch = true; return this; }; Slideout.prototype.disableTouch = function() { this._touch = false; return this; }; Slideout.prototype.destroy = function() { // Close before clean this.close(); // Remove event listeners doc.removeEventListener(touch.move, this._preventMove); this.panel.removeEventListener(touch.start, this._resetTouchFn); this.panel.removeEventListener('touchcancel', this._onTouchCancelFn); this.panel.removeEventListener(touch.end, this._onTouchEndFn); this.panel.removeEventListener(touch.move, this._onTouchMoveFn); doc.removeEventListener('scroll', this._onScrollFn); // Remove methods this.open = this.close = function() {}; // Return the instance so it can be easily dereferenced return this; }; /** * Expose Slideout */ module.exports = Slideout; },{"decouple":2,"emitter":3}],2:[function(require,module,exports){ 'use strict'; var requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000 / 60); }; }()); function decouple(node, event, fn) { var eve, tracking = false; function captureEvent(e) { eve = e; track(); } function track() { if (!tracking) { requestAnimFrame(update); tracking = true; } } function update() { fn.call(node, eve); tracking = false; } node.addEventListener(event, captureEvent, false); return captureEvent; } /** * Expose decouple */ module.exports = decouple; },{}],3:[function(require,module,exports){ "use strict"; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; exports.__esModule = true; /** * Creates a new instance of Emitter. * @class * @returns {Object} Returns a new instance of Emitter. * @example * // Creates a new instance of Emitter. * var Emitter = require('emitter'); * * var emitter = new Emitter(); */ var Emitter = (function () { function Emitter() { _classCallCheck(this, Emitter); } /** * Adds a listener to the collection for the specified event. * @memberof! Emitter.prototype * @function * @param {String} event - The event name. * @param {Function} listener - A listener function to add. * @returns {Object} Returns an instance of Emitter. * @example * // Add an event listener to "foo" event. * emitter.on('foo', listener); */ Emitter.prototype.on = function on(event, listener) { // Use the current collection or create it. this._eventCollection = this._eventCollection || {}; // Use the current collection of an event or create it. this._eventCollection[event] = this._eventCollection[event] || []; // Appends the listener into the collection of the given event this._eventCollection[event].push(listener); return this; }; /** * Adds a listener to the collection for the specified event that will be called only once. * @memberof! Emitter.prototype * @function * @param {String} event - The event name. * @param {Function} listener - A listener function to add. * @returns {Object} Returns an instance of Emitter. * @example * // Will add an event handler to "foo" event once. * emitter.once('foo', listener); */ Emitter.prototype.once = function once(event, listener) { var self = this; function fn() { self.off(event, fn); listener.apply(this, arguments); } fn.listener = listener; this.on(event, fn); return this; }; /** * Removes a listener from the collection for the specified event. * @memberof! Emitter.prototype * @function * @param {String} event - The event name. * @param {Function} listener - A listener function to remove. * @returns {Object} Returns an instance of Emitter. * @example * // Remove a given listener. * emitter.off('foo', listener); */ Emitter.prototype.off = function off(event, listener) { var listeners = undefined; // Defines listeners value. if (!this._eventCollection || !(listeners = this._eventCollection[event])) { return this; } listeners.forEach(function (fn, i) { if (fn === listener || fn.listener === listener) { // Removes the given listener. listeners.splice(i, 1); } }); // Removes an empty event collection. if (listeners.length === 0) { delete this._eventCollection[event]; } return this; }; /** * Execute each item in the listener collection in order with the specified data. * @memberof! Emitter.prototype * @function * @param {String} event - The name of the event you want to emit. * @param {...Object} data - Data to pass to the listeners. * @returns {Object} Returns an instance of Emitter. * @example * // Emits the "foo" event with 'param1' and 'param2' as arguments. * emitter.emit('foo', 'param1', 'param2'); */ Emitter.prototype.emit = function emit(event) { var _this = this; for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var listeners = undefined; // Defines listeners value. if (!this._eventCollection || !(listeners = this._eventCollection[event])) { return this; } // Clone listeners listeners = listeners.slice(0); listeners.forEach(function (fn) { return fn.apply(_this, args); }); return this; }; return Emitter; })(); /** * Exports Emitter */ exports["default"] = Emitter; module.exports = exports["default"]; },{}]},{},[1])(1) });