cryptpad/www/common/boot2.js

111 lines
4.1 KiB
JavaScript
Raw Normal View History

2023-10-20 22:35:26 +08:00
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
//
// SPDX-License-Identifier: AGPL-3.0-or-later
define([
'/common/requireconfig.js',
'/customize/application_config.js'
], function (RequireConfig, AppConfig) {
2023-01-10 20:04:16 +08:00
// if an AppConfig.defaultDarkTheme variable is added to application_config.js and set to true, this sets the theme to dark by default irrespective of browser settings
var checkDefaultDarkTheme = function () {
if (AppConfig.defaultDarkTheme) {
2023-04-24 22:40:50 +08:00
return 'dark';
2021-01-22 21:27:17 +08:00
}
2023-04-24 22:40:50 +08:00
var isDarkOS = function () {
try {
return window.matchMedia('(prefers-color-scheme: dark)').matches;
} catch (e) { return false; }
};
return isDarkOS() ? 'dark' : 'light';
2021-01-22 21:27:17 +08:00
};
2023-04-24 22:40:50 +08:00
var os = checkDefaultDarkTheme();
try {
var flush = window.CryptPad_flushCache = function () {
Object.keys(localStorage).forEach(function (k) {
if (k.indexOf('CRYPTPAD_CACHE|') !== 0 && k.indexOf('LESS_CACHE') !== 0) { return; }
delete localStorage[k];
});
};
var key = 'CRYPTPAD_STORE|colortheme';
window.CryptPad_theme = localStorage[key] || os;
if (!localStorage[key]) {
// We're using OS theme, check if we need to change
if (os !== localStorage[key+'_default']) {
console.warn('New OS theme, flush cache');
flush();
localStorage[key+'_default'] = os;
}
2021-01-22 21:27:17 +08:00
}
if (window.CryptPad_theme === 'dark') {
var s = document.createElement('style');
s.innerHTML = 'body { background: black; }';
document.body.appendChild(s);
}
} catch (e) { console.error(e); }
2021-01-22 21:27:17 +08:00
2021-09-01 19:00:38 +08:00
// This is stage 1, it can be changed but you must bump the version of the project.
2017-08-22 21:50:10 +08:00
require.config(RequireConfig());
// most of CryptPad breaks if you don't support isArray
if (!Array.isArray) {
Array.isArray = function(arg) { // CRYPTPAD_SHIM
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
2017-08-29 17:49:10 +08:00
// file encryption/decryption won't work if you don't have Array.fill
if (typeof(Array.prototype.fill) !== 'function') {
Array.prototype.fill = function (x) { // CRYPTPAD_SHIM
var i = 0;
var l = this.length;
for (;i < l; i++) { this[i] = x; }
return this;
};
}
var failStore = function () {
2017-06-13 18:24:32 +08:00
console.error(new Error('wut'));
require(['jquery'], function ($) {
$.ajax({
type: 'HEAD',
url: '/common/feedback.html?NO_LOCALSTORAGE=' + (+new Date()),
});
});
2018-03-24 01:05:16 +08:00
window.alert("CryptPad needs localStorage to work. Try changing your cookie permissions, or using a different browser");
};
2018-01-24 23:16:46 +08:00
window.onerror = function (e) {
if (/requirejs\.org/.test(e)) {
console.log();
console.error("Require.js threw a Script Error. This probably means you're missing a dependency for CryptPad.\nIt is recommended that the admin of this server runs `npm install && npm run install:components` to get the latest code.\nBest of luck,\nThe CryptPad Developers");
2018-01-24 23:16:46 +08:00
return void console.log();
}
2020-10-30 22:05:28 +08:00
if (window.CryptPad_loadingError) {
window.CryptPad_loadingError(e);
}
2018-01-24 23:16:46 +08:00
throw e;
};
try {
var test_key = 'localStorage_test';
var testval = Math.random().toString();
localStorage.setItem(test_key, testval);
2017-06-13 18:24:32 +08:00
if (localStorage.getItem(test_key) !== testval) {
failStore();
}
} catch (e) { console.error(e); failStore(); }
2021-09-01 19:00:38 +08:00
if (typeof(Promise) !== 'function') {
return void setTimeout(function () {
2021-09-01 19:00:38 +08:00
var s = "Internet Explorer is not supported anymore, including by Microsoft.\n\nMost of CryptPad's collaborative functionality requires a modern browser to work.\n\nWe recommend Mozilla Firefox.";
window.alert(s);
});
}
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
});