2021-01-22 13:27:17 +00:00
( function ( ) {
try {
var isDarkOS = function ( ) {
try {
return window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
} catch ( e ) { return false ; }
} ;
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 os = isDarkOS ( ) ? 'dark' : 'light' ;
var key = 'CRYPTPAD_STORE|colortheme' ;
window . CryptPad _theme = localStorage [ key ] || os ;
2021-01-27 12:55:25 +00:00
console . error ( localStorage [ key ] , os ) ;
2021-01-22 13:27:17 +00:00
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-26 15:00:24 +00:00
if ( window . CryptPad _theme === 'dark' ) {
var s = document . createElement ( 'style' ) ;
s . innerHTML = 'body { background: black; }' ;
document . body . appendChild ( s ) ;
}
2021-01-22 13:27:17 +00:00
//localStorage[key] = theme;
// If the wrong theme is built, flush it
/ * X X X f l u s h c a c h e w h e n c h a n g e
if ( theme !== built ) {
console . warn ( 'New theme, flush cache' ) ;
Object . keys ( localStorage ) . forEach ( function ( k ) {
if ( k . indexOf ( 'CRYPTPAD_CACHE|' ) !== 0 && k . indexOf ( 'LESS_CACHE' ) !== 0 ) { return ; }
delete localStorage [ k ] ;
} ) ;
}
* /
} catch ( e ) { console . error ( e ) ; }
} ) ( ) ;
2017-03-01 16:23:34 +00:00
// This is stage 1, it can be changed but you must bump the version of the project.
2017-08-07 14:27:57 +00:00
define ( [
'/common/requireconfig.js'
] , function ( RequireConfig ) {
2017-08-22 13:50:10 +00:00
require . config ( RequireConfig ( ) ) ;
2017-05-15 08:26:52 +00:00
// 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 09:49:10 +00: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 ;
} ;
}
2018-01-16 17:03:55 +00:00
// RPC breaks if you don't support Number.MAX_SAFE_INTEGER
if ( Number && ! Number . MAX _SAFE _INTEGER ) {
Number . MAX _SAFE _INTEGER = 9007199254740991 ;
}
2017-06-13 09:57:21 +00:00
var failStore = function ( ) {
2017-06-13 10:24:32 +00:00
console . error ( new Error ( 'wut' ) ) ;
2017-06-13 09:57:21 +00:00
require ( [ 'jquery' ] , function ( $ ) {
2017-06-13 09:33:25 +00:00
$ . ajax ( {
type : 'HEAD' ,
url : '/common/feedback.html?NO_LOCALSTORAGE=' + ( + new Date ( ) ) ,
} ) ;
} ) ;
2018-03-23 17:05:16 +00:00
window . alert ( "CryptPad needs localStorage to work. Try changing your cookie permissions, or using a different browser" ) ;
2017-06-13 09:57:21 +00:00
} ;
2018-01-24 15:16:46 +00: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 `bower install && bower update` to get the latest code, then modify their cache version.\nBest of luck,\nThe CryptPad Developers" ) ;
return void console . log ( ) ;
}
2020-10-30 14:05:28 +00:00
if ( window . CryptPad _loadingError ) {
window . CryptPad _loadingError ( e ) ;
}
2018-01-24 15:16:46 +00:00
throw e ;
} ;
2017-06-13 09:57:21 +00:00
try {
var test _key = 'localStorage_test' ;
var testval = Math . random ( ) . toString ( ) ;
localStorage . setItem ( test _key , testval ) ;
2017-06-13 10:24:32 +00:00
if ( localStorage . getItem ( test _key ) !== testval ) {
2017-06-13 10:02:36 +00:00
failStore ( ) ;
2017-06-13 09:57:21 +00:00
}
2017-06-13 10:02:36 +00:00
} catch ( e ) { console . error ( e ) ; failStore ( ) ; }
2017-06-13 09:33:25 +00:00
2017-03-01 16:23:34 +00:00
require ( [ document . querySelector ( 'script[data-bootload]' ) . getAttribute ( 'data-bootload' ) ] ) ;
} ) ;