npm-smooch-test
Version:
*Smooch adds beautifully simple messaging to your app to keep your users engaged and coming back.*
120 lines (92 loc) • 3.69 kB
JavaScript
;
exports.__esModule = true;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
exports.waitForPage = waitForPage;
exports.preventMobilePageScroll = preventMobilePageScroll;
exports.allowMobilePageScroll = allowMobilePageScroll;
exports.monitorUrlChanges = monitorUrlChanges;
exports.stopMonitoringUrlChanges = stopMonitoringUrlChanges;
exports.monitorBrowserState = monitorBrowserState;
exports.stopMonitoringBrowserState = stopMonitoringBrowserState;
var _ismobilejs = require('ismobilejs');
var _ismobilejs2 = _interopRequireDefault(_ismobilejs);
var _appStore = require('../stores/app-store');
var _browserActions = require('../actions/browser-actions');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var pushState = window.history && window.history.pushState;
var replaceState = window.history && window.history.replaceState;
var monitorCallback = void 0;
function waitForPage() {
return new _promise2.default(function (resolve) {
if (document.readyState === 'complete' || document.readyState === 'loaded' || document.readyState === 'interactive') {
resolve();
} else {
document.addEventListener('DOMContentLoaded', function () {
resolve();
});
}
});
}
function preventMobilePageScroll() {
var htmlEl = document.querySelector('html');
htmlEl.classList.add('sk-widget-opened');
if (_ismobilejs2.default.apple.device) {
htmlEl.classList.add('sk-ios-device');
}
}
function allowMobilePageScroll() {
var htmlEl = document.querySelector('html');
htmlEl.classList.remove('sk-widget-opened');
if (_ismobilejs2.default.apple.device) {
htmlEl.classList.remove('sk-ios-device');
}
}
function monitorUrlChanges(callback) {
stopMonitoringUrlChanges();
monitorCallback = callback;
window.addEventListener('hashchange', monitorCallback);
if (window.history) {
window.history.pushState = function (state, title, url) {
for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
rest[_key - 3] = arguments[_key];
}
pushState && pushState.apply(window.history, [state, title, url].concat(rest));
if (url) {
monitorCallback();
}
};
window.history.replaceState = function (state, title, url) {
for (var _len2 = arguments.length, rest = Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
rest[_key2 - 3] = arguments[_key2];
}
replaceState && replaceState.apply(window.history, [state, title, url].concat(rest));
if (url) {
monitorCallback();
}
};
}
}
function stopMonitoringUrlChanges() {
if (monitorCallback) {
window.removeEventListener('hashchange', monitorCallback);
if (window.history) {
window.history.pushState = pushState;
window.history.replaceState = replaceState;
}
}
}
function onWindowFocus() {
_appStore.store.dispatch((0, _browserActions.hasFocus)(true));
}
function onWindowBlur() {
_appStore.store.dispatch((0, _browserActions.hasFocus)(false));
}
function monitorBrowserState() {
window.addEventListener('focus', onWindowFocus);
window.addEventListener('blur', onWindowBlur);
}
function stopMonitoringBrowserState() {
window.removeEventListener('focus', onWindowFocus);
window.removeEventListener('blur', onWindowBlur);
}