UNPKG

device-motion

Version:

A package to work with the device-motion API..

122 lines (104 loc) 11.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Seismograph = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); class Seismograph { constructor() { var { minShakes, minAmplitude, onShake, delay } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { minShakes: 3, minAmplitude: 3, onShake: () => "EAAAARTHQUAAAAKEEE!", delay: 1500 }; (0, _defineProperty2.default)(this, "startRecording", () => { if (typeof DeviceMotionEvent.requestPermission === 'function') { // iOS 13+ DeviceMotionEvent.requestPermission().then(response => { if (response == 'granted') { window.addEventListener("devicemotion", this._onMotionEvent); } }).catch(console.error); } else { window.addEventListener("devicemotion", this._onMotionEvent); } }); (0, _defineProperty2.default)(this, "stopRecording", () => { window.removeEventListener("devicemotion", this._onMotionEvent); }); (0, _defineProperty2.default)(this, "_onMotionEvent", event => { var x = null; if ("acceleration" in event) { x = event.acceleration.x; } else { x = event.accelerationIncludingGravity.x; } this._initValues(x); this._detectShake(x, this.previousX); }); (0, _defineProperty2.default)(this, "_initValues", x => { if (!this.previousX) { this.previousX = x; } }); (0, _defineProperty2.default)(this, "_detectShake", (current, previous) => { if (this._belowTimeThreshold()) { return false; } if (!this._checkAmplitude(current, previous)) { return false; } else { ++this.currentShakes; } previous = current; if (this._shakeThresholdReached()) { this.currentShakes = 0; this.lastShake = this._currentDate(); this.onShake(); return true; } return false; }); (0, _defineProperty2.default)(this, "_checkAmplitude", (current, previous) => { if (Math.sign(current) === Math.sign(previous) || Math.abs(current) < this.minAmplitude) { return false; } return true; }); (0, _defineProperty2.default)(this, "_shakeThresholdReached", () => { return this.currentShakes > this.minShakes; }); (0, _defineProperty2.default)(this, "_belowTimeThreshold", () => { return this._currentDate() - this.lastShake < this.delay; }); (0, _defineProperty2.default)(this, "_currentDate", () => Date.now()); if (typeof minShakes === "number" && minShakes > 0) { this.minShakes = minShakes; } else { this.minShakes = 3; } if (typeof minAmplitude === "number" && minAmplitude > 0) { this.minAmplitude = minAmplitude; } else { this.minAmplitude = 3; } if (typeof onShake === "function") { this.onShake = onShake; } else { this.onShake = () => "EAAAARTHQUAAAAKEEE!"; } this.delay = delay > 0 ? delay : 1500; this.currentShakes = 0; this.lastShake = Date.now(); this.previousX = null; } } exports.Seismograph = Seismograph; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJTZWlzbW9ncmFwaCIsImNvbnN0cnVjdG9yIiwibWluU2hha2VzIiwibWluQW1wbGl0dWRlIiwib25TaGFrZSIsImRlbGF5IiwiRGV2aWNlTW90aW9uRXZlbnQiLCJyZXF1ZXN0UGVybWlzc2lvbiIsInRoZW4iLCJyZXNwb25zZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25Nb3Rpb25FdmVudCIsImNhdGNoIiwiY29uc29sZSIsImVycm9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwieCIsImFjY2VsZXJhdGlvbiIsImFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkiLCJfaW5pdFZhbHVlcyIsIl9kZXRlY3RTaGFrZSIsInByZXZpb3VzWCIsImN1cnJlbnQiLCJwcmV2aW91cyIsIl9iZWxvd1RpbWVUaHJlc2hvbGQiLCJfY2hlY2tBbXBsaXR1ZGUiLCJjdXJyZW50U2hha2VzIiwiX3NoYWtlVGhyZXNob2xkUmVhY2hlZCIsImxhc3RTaGFrZSIsIl9jdXJyZW50RGF0ZSIsIk1hdGgiLCJzaWduIiwiYWJzIiwiRGF0ZSIsIm5vdyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBTyxNQUFNQSxXQUFOLENBQWtCO0FBQ3ZCQyxFQUFBQSxXQUFXLEdBT1Q7QUFBQSxRQU5BO0FBQUVDLE1BQUFBLFNBQUY7QUFBYUMsTUFBQUEsWUFBYjtBQUEyQkMsTUFBQUEsT0FBM0I7QUFBb0NDLE1BQUFBO0FBQXBDLEtBTUEsdUVBTjhDO0FBQzVDSCxNQUFBQSxTQUFTLEVBQUUsQ0FEaUM7QUFFNUNDLE1BQUFBLFlBQVksRUFBRSxDQUY4QjtBQUc1Q0MsTUFBQUEsT0FBTyxFQUFFLE1BQU0scUJBSDZCO0FBSTVDQyxNQUFBQSxLQUFLLEVBQUU7QUFKcUMsS0FNOUM7QUFBQSwwREFzQmUsTUFBTTtBQUNyQixVQUFJLE9BQU9DLGlCQUFpQixDQUFDQyxpQkFBekIsS0FBK0MsVUFBbkQsRUFBK0Q7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LElBQW9DQSxZQUFZLEdBQUcsQ0FBdkQsRUFBMEQ7QUFDeEQsV0FBS0EsWUFBTCxHQUFvQkEsWUFBcEI7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLQSxZQUFMLEdBQW9CLENBQXBCO0FBQ0Q7O0FBQ0QsUUFBSSxPQUFPQyxPQUFQLEtBQW1CLFVBQXZCLEVBQW1DO0FBQ2pDLFdBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNELEtBRkQsTUFFTztBQUNMLFdBQUtBLE9BQUwsR0FBZSxNQUFNLHFCQUFyQjtBQUNEOztBQUNELFNBQUtDLEtBQUwsR0FBYUEsS0FBSyxHQUFHLENBQVIsR0FBWUEsS0FBWixHQUFvQixJQUFqQztBQUNBLFNBQUt1QixhQUFMLEdBQXFCLENBQXJCO0FBQ0EsU0FBS0UsU0FBTCxHQUFpQkssSUFBSSxDQUFDQyxHQUFMLEVBQWpCO0FBQ0EsU0FBS2IsU0FBTCxHQUFpQixJQUFqQjtBQUNEOztBQTVCc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU2Vpc21vZ3JhcGgge1xuICBjb25zdHJ1Y3RvcihcbiAgICB7IG1pblNoYWtlcywgbWluQW1wbGl0dWRlLCBvblNoYWtlLCBkZWxheSB9ID0ge1xuICAgICAgbWluU2hha2VzOiAzLFxuICAgICAgbWluQW1wbGl0dWRlOiAzLFxuICAgICAgb25TaGFrZTogKCkgPT4gXCJFQUFBQVJUSFFVQUFBQUtFRUUhXCIsXG4gICAgICBkZWxheTogMTUwMFxuICAgIH1cbiAgKSB7XG4gICAgaWYgKHR5cGVvZiBtaW5TaGFrZXMgPT09IFwibnVtYmVyXCIgJiYgbWluU2hha2VzID4gMCkge1xuICAgICAgdGhpcy5taW5TaGFrZXMgPSBtaW5TaGFrZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluU2hha2VzID0gMztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtaW5BbXBsaXR1ZGUgPT09IFwibnVtYmVyXCIgJiYgbWluQW1wbGl0dWRlID4gMCkge1xuICAgICAgdGhpcy5taW5BbXBsaXR1ZGUgPSBtaW5BbXBsaXR1ZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluQW1wbGl0dWRlID0gMztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvblNoYWtlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMub25TaGFrZSA9IG9uU2hha2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25TaGFrZSA9ICgpID0+IFwiRUFBQUFSVEhRVUFBQUFLRUVFIVwiO1xuICAgIH1cbiAgICB0aGlzLmRlbGF5ID0gZGVsYXkgPiAwID8gZGVsYXkgOiAxNTAwO1xuICAgIHRoaXMuY3VycmVudFNoYWtlcyA9IDA7XG4gICAgdGhpcy5sYXN0U2hha2UgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMucHJldmlvdXNYID0gbnVsbDtcbiAgfVxuXG4gIHN0YXJ0UmVjb3JkaW5nID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgRGV2aWNlTW90aW9uRXZlbnQucmVxdWVzdFBlcm1pc3Npb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGlPUyAxMytcbiAgICAgIERldmljZU1vdGlvbkV2ZW50LnJlcXVlc3RQZXJtaXNzaW9uKClcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZSA9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsIHRoaXMuX29uTW90aW9uRXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsIHRoaXMuX29uTW90aW9uRXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBzdG9wUmVjb3JkaW5nID0gKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsIHRoaXMuX29uTW90aW9uRXZlbnQpO1xuICB9O1xuXG4gIF9vbk1vdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICAgIGxldCB4ID0gbnVsbDtcblxuICAgIGlmIChcImFjY2VsZXJhdGlvblwiIGluIGV2ZW50KSB7XG4gICAgICB4ID0gZXZlbnQuYWNjZWxlcmF0aW9uLng7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBldmVudC5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lng7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdFZhbHVlcyh4KTtcblxuICAgIHRoaXMuX2RldGVjdFNoYWtlKHgsIHRoaXMucHJldmlvdXNYKTtcbiAgfTtcblxuICBfaW5pdFZhbHVlcyA9IHggPT4ge1xuICAgIGlmICghdGhpcy5wcmV2aW91c1gpIHtcbiAgICAgIHRoaXMucHJldmlvdXNYID0geDtcbiAgICB9XG4gIH07XG5cbiAgX2RldGVjdFNoYWtlID0gKGN1cnJlbnQsIHByZXZpb3VzKSA9PiB7XG4gICAgaWYgKHRoaXMuX2JlbG93VGltZVRocmVzaG9sZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9jaGVja0FtcGxpdHVkZShjdXJyZW50LCBwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKyt0aGlzLmN1cnJlbnRTaGFrZXM7XG4gICAgfVxuXG4gICAgcHJldmlvdXMgPSBjdXJyZW50O1xuXG4gICAgaWYgKHRoaXMuX3NoYWtlVGhyZXNob2xkUmVhY2hlZCgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTaGFrZXMgPSAwO1xuICAgICAgdGhpcy5sYXN0U2hha2UgPSB0aGlzLl9jdXJyZW50RGF0ZSgpO1xuICAgICAgdGhpcy5vblNoYWtlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIF9jaGVja0FtcGxpdHVkZSA9IChjdXJyZW50LCBwcmV2aW91cykgPT4ge1xuICAgIGlmIChNYXRoLnNpZ24oY3VycmVudCkgPT09IE1hdGguc2lnbihwcmV2aW91cykgfHwgTWF0aC5hYnMoY3VycmVudCkgPCB0aGlzLm1pbkFtcGxpdHVkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIF9zaGFrZVRocmVzaG9sZFJlYWNoZWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNoYWtlcyA+IHRoaXMubWluU2hha2VzO1xuICB9O1xuXG4gIF9iZWxvd1RpbWVUaHJlc2hvbGQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnREYXRlKCkgLSB0aGlzLmxhc3RTaGFrZSA8IHRoaXMuZGVsYXk7XG4gIH07XG5cbiAgX2N1cnJlbnREYXRlID0gKCkgPT4gRGF0ZS5ub3coKTtcbn1cbiJdfQ==