2018-11-20 14:50:59 +00:00
|
|
|
/* global LOCALE */
|
|
|
|
import 'core-js';
|
2018-03-01 03:24:41 +00:00
|
|
|
import 'fast-text-encoding'; // MS Edge support
|
2017-11-30 21:41:09 +00:00
|
|
|
import 'fluent-intl-polyfill';
|
2018-11-12 19:13:31 +00:00
|
|
|
import choo from 'choo';
|
|
|
|
import nanotiming from 'nanotiming';
|
2018-09-18 23:23:58 +00:00
|
|
|
import routes from './routes';
|
2018-07-31 18:29:26 +00:00
|
|
|
import capabilities from './capabilities';
|
2018-11-08 23:12:07 +00:00
|
|
|
import controller from './controller';
|
2017-08-24 21:54:02 +00:00
|
|
|
import dragManager from './dragManager';
|
2018-06-06 04:39:26 +00:00
|
|
|
import pasteManager from './pasteManager';
|
2017-08-24 21:54:02 +00:00
|
|
|
import storage from './storage';
|
|
|
|
import metrics from './metrics';
|
2017-09-12 00:09:29 +00:00
|
|
|
import experiments from './experiments';
|
2017-08-24 21:54:02 +00:00
|
|
|
import Raven from 'raven-js';
|
2018-07-12 20:13:49 +00:00
|
|
|
import './main.css';
|
2018-08-07 22:40:17 +00:00
|
|
|
import User from './user';
|
2018-11-20 14:50:59 +00:00
|
|
|
import { getTranslator } from './locale';
|
2017-08-24 21:54:02 +00:00
|
|
|
|
2018-11-27 00:05:22 +00:00
|
|
|
if (navigator.doNotTrack !== '1' && window.RAVEN_CONFIG) {
|
|
|
|
Raven.config(window.SENTRY_ID, window.RAVEN_CONFIG).install();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
|
|
nanotiming.disabled = true;
|
|
|
|
}
|
|
|
|
|
2018-07-31 18:29:26 +00:00
|
|
|
(async function start() {
|
2018-11-12 19:13:31 +00:00
|
|
|
const app = routes(choo());
|
2018-07-31 18:29:26 +00:00
|
|
|
const capa = await capabilities();
|
2018-12-10 20:47:23 +00:00
|
|
|
if (capa.serviceWorker) {
|
|
|
|
await navigator.serviceWorker.register('/serviceWorker.js');
|
|
|
|
await navigator.serviceWorker.ready;
|
2018-07-31 18:29:26 +00:00
|
|
|
}
|
2018-09-14 15:00:33 +00:00
|
|
|
|
2018-11-20 14:50:59 +00:00
|
|
|
const translate = await getTranslator(LOCALE);
|
|
|
|
|
2018-07-31 18:29:26 +00:00
|
|
|
app.use((state, emitter) => {
|
|
|
|
state.capabilities = capa;
|
|
|
|
state.transfer = null;
|
|
|
|
state.fileInfo = null;
|
2018-11-20 14:50:59 +00:00
|
|
|
state.translate = translate;
|
2018-07-31 18:29:26 +00:00
|
|
|
state.storage = storage;
|
|
|
|
state.raven = Raven;
|
2018-09-14 15:00:33 +00:00
|
|
|
state.user = new User(storage);
|
2018-07-31 18:29:26 +00:00
|
|
|
window.appState = state;
|
2018-09-07 17:53:40 +00:00
|
|
|
window.appEmit = emitter.emit.bind(emitter);
|
2018-01-24 18:23:13 +00:00
|
|
|
let unsupportedReason = null;
|
2018-10-25 02:07:10 +00:00
|
|
|
|
2017-09-13 19:01:55 +00:00
|
|
|
if (
|
2018-01-24 18:23:13 +00:00
|
|
|
// Firefox < 50
|
2017-09-13 19:01:55 +00:00
|
|
|
/firefox/i.test(navigator.userAgent) &&
|
2018-01-24 18:23:13 +00:00
|
|
|
parseInt(navigator.userAgent.match(/firefox\/*([^\n\r]*)\./i)[1], 10) < 50
|
2017-09-13 19:01:55 +00:00
|
|
|
) {
|
2018-01-24 18:23:13 +00:00
|
|
|
unsupportedReason = 'outdated';
|
2017-09-13 19:01:55 +00:00
|
|
|
}
|
2018-07-31 18:29:26 +00:00
|
|
|
if (!state.capabilities.crypto) {
|
2018-01-24 18:23:13 +00:00
|
|
|
unsupportedReason = /firefox/i.test(navigator.userAgent)
|
|
|
|
? 'outdated'
|
|
|
|
: 'gcm';
|
2017-11-06 22:09:15 +00:00
|
|
|
}
|
2018-01-24 18:23:13 +00:00
|
|
|
if (unsupportedReason) {
|
|
|
|
setTimeout(() =>
|
|
|
|
emitter.emit('replaceState', `/unsupported/${unsupportedReason}`)
|
|
|
|
);
|
2017-08-24 21:54:02 +00:00
|
|
|
}
|
|
|
|
});
|
2018-07-31 18:29:26 +00:00
|
|
|
app.use(metrics);
|
2018-11-08 23:12:07 +00:00
|
|
|
app.use(controller);
|
2018-07-31 18:29:26 +00:00
|
|
|
app.use(dragManager);
|
|
|
|
app.use(experiments);
|
|
|
|
app.use(pasteManager);
|
|
|
|
app.mount('body');
|
|
|
|
})();
|