@cerebral/useragent
Version:
Adds useragent specs to your cerebral state model
119 lines (90 loc) • 3.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _cerebral = require('cerebral');
var _raf = require('raf');
var _raf2 = _interopRequireDefault(_raf);
var _getFeatures = require('./getFeatures');
var _getFeatures2 = _interopRequireDefault(_getFeatures);
var _network = require('./network');
var _network2 = _interopRequireDefault(_network);
var _parseUserAgent = require('./parseUserAgent');
var _parseUserAgent2 = _interopRequireDefault(_parseUserAgent);
var _getMedia = require('./getMedia');
var _getMedia2 = _interopRequireDefault(_getMedia);
var _getWindowSpec = require('./getWindowSpec');
var _getWindowSpec2 = _interopRequireDefault(_getWindowSpec);
var _offlineChanged = require('./signalFactories/offlineChanged');
var _offlineChanged2 = _interopRequireDefault(_offlineChanged);
var _windowChanged = require('./signalFactories/windowChanged');
var _windowChanged2 = _interopRequireDefault(_windowChanged);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaultOptions = {
feature: true,
offline: {
checkOnLoad: false,
checks: { xhr: { url: 'https://api.github.com' } },
interceptRequests: true,
reconnect: {
initialDelay: 3,
delay: 1.5
},
requests: false
},
parse: {
browser: true,
device: true
},
media: {},
window: true
};
exports.default = function () {
var userOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var options = Object.assign({}, defaultOptions, userOptions);
var state = (0, _parseUserAgent2.default)(options);
state.media = (0, _getMedia2.default)(options);
state.feature = (0, _getFeatures2.default)(options);
state.window = (0, _getWindowSpec2.default)();
state.network = { offline: _network2.default.state === 'down' };
_network2.default.options = options.offline || {};
return (0, _cerebral.Module)(function (_ref) {
var controller = _ref.controller,
path = _ref.path;
controller.on('initialized', function () {
var offlineChanged = controller.getSignal(path + '.offlineChanged');
var windowChanged = controller.getSignal(path + '.windowChanged');
if (options.offline !== false) {
_network2.default.on('up', function () {
controller.getState(path + '.network.offline') && offlineChanged({ offline: false });
});
_network2.default.on('down', function () {
!controller.getState(path + '.network.offline') && offlineChanged({ offline: true });
});
_network2.default.check();
}
if (options.window !== false) {
var updatingSpecs = false;
window.addEventListener('resize', function (event) {
if (updatingSpecs) return;
updatingSpecs = true;
(0, _raf2.default)(function () {
windowChanged({
windowSpec: (0, _getWindowSpec2.default)(),
media: (0, _getMedia2.default)(options)
});
updatingSpecs = false;
});
});
}
});
return {
state: state,
signals: {
offlineChanged: (0, _offlineChanged2.default)(path),
windowChanged: (0, _windowChanged2.default)(path)
}
};
});
};
//# sourceMappingURL=index.js.map