/* global $, window */ // This is the entry point into loading the whole of Grist frontend application. Some extensions // attempt to load it more than once (e.g. "Lingvanex"). This leads to duplicated work and errors. // At least some of such interference can be neutralized by simply ignoring repeated loads. if (window._gristAppLoaded) { return; } window._gristAppLoaded = true; const {setupLocale} = require('./lib/localization'); const {App} = require('./ui/App'); // Disable longStackTraces, which seem to be enabled in the browser by default. var bluebird = require('bluebird'); bluebird.config({ longStackTraces: false }); // Set up integration between grainjs and knockout disposal. const {setupKoDisposal} = require('grainjs'); const ko = require('knockout'); setupKoDisposal(ko); $(function() { // Manually disable the bfcache. We dispose some components in App.ts on unload, and // leaving the cache on causes problems when the browser back/forward buttons are pressed. // Some browsers automatically disable it when the 'beforeunload' or 'unload' events // have listeners, but not all do (Safari). window.onpageshow = function(event) { if (event.persisted) { window.location.reload(); } }; const localeSetup = setupLocale(); // By the time dom ready is fired, resource files should already be loaded, but // if that is not the case, we will redirect to an error page by throwing an error. localeSetup.then(() => { window.gristApp = App.create(null); }).catch(error => { throw new Error(`Failed to load locale: ${error?.message || 'Unknown error'}`); }) // Set from the login tests to stub and un-stub functions during execution. window.loginTestSandbox = null; // These modules are exposed for the sake of browser tests. window.exposeModulesForTests = function() { return (import('./exposeModulesForTests' /* webpackChunkName: "modulesForTests" */)); }; window.exposedModules = { // Several existing tests use window.exposedModules.loadScript has loaded // a file for them. We now load exposedModules asynchronously, so that it // doesn't slow down application startup. To avoid changing tests // unnecessarily, we implement a loadScript wrapper. loadScript(name) { return window.exposeModulesForTests() .then(() => window.exposedModules._loadScript(name)); } }; });