123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- const _ = require('underscore');
- const Backbone = require('backbone');
- const Mn = require('../lib/marionette');
- const Cache = require('./cache');
- const Controller = require('./controller');
- const Router = require('./router');
- const Api = require('./api');
- const Tokens = require('./tokens');
- const UI = require('./ui/main');
- const i18n = require('./i18n');
- const App = Mn.Application.extend({
- Cache: Cache,
- Api: Api,
- UI: null,
- i18n: i18n,
- Controller: Controller,
- region: {
- el: '#app',
- replaceElement: true
- },
- onStart: function (app, options) {
- console.log(i18n('main', 'welcome'));
- // Check if token is coming through
- if (this.getParam('token')) {
- Tokens.addToken(this.getParam('token'));
- }
- // Check if we are still logged in by refreshing the token
- Api.status()
- .then(result => {
- Cache.version = [result.version.major, result.version.minor, result.version.revision].join('.');
- })
- .then(Api.Tokens.refresh)
- .then(this.bootstrap)
- .then(() => {
- console.info(i18n('main', 'logged-in', Cache.User.attributes));
- this.bootstrapTimer();
- this.refreshTokenTimer();
- this.UI = new UI();
- this.UI.on('render', () => {
- new Router(options);
- Backbone.history.start({pushState: true});
- // Ask the admin use to change their details
- if (Cache.User.get('email') === '[email protected]') {
- Controller.showUserForm(Cache.User);
- }
- });
- this.getRegion().show(this.UI);
- })
- .catch(err => {
- console.warn('Not logged in:', err.message);
- Controller.showLogin();
- });
- },
- History: {
- replace: function (data) {
- window.history.replaceState(_.extend(window.history.state || {}, data), document.title);
- },
- get: function (attr) {
- return window.history.state ? window.history.state[attr] : undefined;
- }
- },
- getParam: function (name) {
- name = name.replace(/[\[\]]/g, '\\$&');
- let url = window.location.href;
- let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');
- let results = regex.exec(url);
- if (!results) {
- return null;
- }
- if (!results[2]) {
- return '';
- }
- return decodeURIComponent(results[2].replace(/\+/g, ' '));
- },
- /**
- * Get user and other base info to start prime the cache and the application
- *
- * @returns {Promise}
- */
- bootstrap: function () {
- return Api.Users.getById('me', ['permissions'])
- .then(response => {
- Cache.User.set(response);
- Tokens.setCurrentName(response.nickname || response.name);
- });
- },
- /**
- * Bootstraps the user from time to time
- */
- bootstrapTimer: function () {
- setTimeout(() => {
- Api.status()
- .then(result => {
- let version = [result.version.major, result.version.minor, result.version.revision].join('.');
- if (version !== Cache.version) {
- document.location.reload();
- }
- })
- .then(this.bootstrap)
- .then(() => {
- this.bootstrapTimer();
- })
- .catch(err => {
- if (err.message !== 'timeout' && err.code && err.code !== 400) {
- console.log(err);
- console.error(err.message);
- console.info('Not logged in?');
- Controller.showLogin();
- } else {
- this.bootstrapTimer();
- }
- });
- }, 30 * 1000); // 30 seconds
- },
- refreshTokenTimer: function () {
- setTimeout(() => {
- return Api.Tokens.refresh()
- .then(this.bootstrap)
- .then(() => {
- this.refreshTokenTimer();
- })
- .catch(err => {
- if (err.message !== 'timeout' && err.code && err.code !== 400) {
- console.log(err);
- console.error(err.message);
- console.info('Not logged in?');
- Controller.showLogin();
- } else {
- this.refreshTokenTimer();
- }
- });
- }, 10 * 60 * 1000);
- }
- });
- const app = new App();
- module.exports = app;
|