device-motion
Version:
A package to work with the device-motion API..
122 lines (104 loc) • 11.1 kB
JavaScript
"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==