Compare commits
31 commits
Author | SHA1 | Date | |
---|---|---|---|
|
65dd8f1d6a | ||
|
01cb64d07d | ||
|
3091046705 | ||
|
f714275cd3 | ||
|
53b91247a7 | ||
|
f72bdff252 | ||
|
f9031a2bce | ||
|
dcb275d1c3 | ||
|
2404a57eb8 | ||
|
fb1dd2d5d5 | ||
|
684a86eecc | ||
|
41f4d8fc7a | ||
|
6c134a678b | ||
|
077b3fe635 | ||
|
c83cd5a50d | ||
|
c6b3ed9bc3 | ||
|
0e652872df | ||
|
247931eece | ||
|
20f30a7259 | ||
|
ab7db780c8 | ||
|
1542d7381d | ||
|
96f340b11c | ||
|
68505fe32b | ||
|
d5c4fdd50a | ||
|
f583c526a8 | ||
|
f879e9044a | ||
|
961e8afe09 | ||
|
696f6dc137 | ||
|
16603e02dc | ||
|
084af5632b | ||
|
3fafbbc068 |
55 changed files with 434 additions and 21 deletions
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/four-oh-four.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/four-oh-four.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -24,6 +24,7 @@ Default.commonCSP = function (domain) {
|
||||||
the ws://* directive, and change '*' to your domain
|
the ws://* directive, and change '*' to your domain
|
||||||
*/
|
*/
|
||||||
"connect-src 'self' ws: wss: blob:" + domain,
|
"connect-src 'self' ws: wss: blob:" + domain,
|
||||||
|
"manifest-src " + domain,
|
||||||
|
|
||||||
// data: is used by codemirror
|
// data: is used by codemirror
|
||||||
"img-src 'self' data: blob:" + domain,
|
"img-src 'self' data: blob:" + domain,
|
||||||
|
|
|
@ -205,7 +205,7 @@ var serveConfig = (function () {
|
||||||
'define(function(){',
|
'define(function(){',
|
||||||
'var obj = ' + JSON.stringify({
|
'var obj = ' + JSON.stringify({
|
||||||
requireConf: {
|
requireConf: {
|
||||||
waitSeconds: 600,
|
waitSeconds: 0, //600,
|
||||||
urlArgs: 'ver=' + Package.version + cacheString(),
|
urlArgs: 'ver=' + Package.version + cacheString(),
|
||||||
},
|
},
|
||||||
removeDonateButton: (config.removeDonateButton === true),
|
removeDonateButton: (config.removeDonateButton === true),
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script>
|
<script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
define([
|
define([
|
||||||
'cm/lib/codemirror',
|
'cm/lib/codemirror',
|
||||||
|
'/common/common-util.js',
|
||||||
|
|
||||||
'cm/addon/mode/simple'
|
'cm/addon/mode/simple'
|
||||||
], function (CodeMirror) {
|
], function (CodeMirror, Util) {
|
||||||
CodeMirror.__mode = 'orgmode';
|
CodeMirror.__mode = 'orgmode';
|
||||||
|
|
||||||
var isEmpty = function (el, idx) {
|
var isEmpty = function (el, idx) {
|
||||||
|
@ -300,11 +302,11 @@ define([
|
||||||
if(!link) return;
|
if(!link) return;
|
||||||
|
|
||||||
if(/^https?\:\/\//.test(link)){
|
if(/^https?\:\/\//.test(link)){
|
||||||
window.open(link);
|
Util.open(link);
|
||||||
}else{
|
}else{
|
||||||
var root_path = dirname(window.location.pathname.replace(/^\/view/, ''));
|
var root_path = dirname(window.location.pathname.replace(/^\/view/, ''));
|
||||||
var link_path = link;
|
var link_path = link;
|
||||||
window.open("/view"+pathBuilder(root_path, link_path));
|
Util.open("/view"+pathBuilder(root_path, link_path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,10 @@ define([
|
||||||
throw e;
|
throw e;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
window.addEventListener('unhandledrejection', function(event) {
|
||||||
|
console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var test_key = 'localStorage_test';
|
var test_key = 'localStorage_test';
|
||||||
var testval = Math.random().toString();
|
var testval = Math.random().toString();
|
||||||
|
@ -58,5 +62,83 @@ define([
|
||||||
}
|
}
|
||||||
} catch (e) { console.error(e); failStore(); }
|
} catch (e) { console.error(e); failStore(); }
|
||||||
|
|
||||||
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
var called = false;
|
||||||
|
var load = function () {
|
||||||
|
if (called) { return; }
|
||||||
|
called = true;
|
||||||
|
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var urlArgs = RequireConfig().urlArgs;
|
||||||
|
var sw = window.navigator.serviceWorker;
|
||||||
|
// If the browser doesn't support service workers, just start loading normally
|
||||||
|
if (!sw) { return void load(); }
|
||||||
|
|
||||||
|
// TOFU
|
||||||
|
// calling back 'true' means it's safe to proceed
|
||||||
|
// otherwise load the old version
|
||||||
|
var TOFU_KEY = 'TOFU_URL_ARGS';
|
||||||
|
var checkVersion = function (msg, cb) {
|
||||||
|
var newUrlArgs = urlArgs;
|
||||||
|
var k = TOFU_KEY;
|
||||||
|
try {
|
||||||
|
var oldUrlArgs = localStorage.getItem(k);
|
||||||
|
if (!oldUrlArgs) {
|
||||||
|
//localStorage.setItem(k, newUrlArgs);
|
||||||
|
return void cb(true);
|
||||||
|
}
|
||||||
|
if (oldUrlArgs === newUrlArgs) {
|
||||||
|
return void cb(true);
|
||||||
|
}
|
||||||
|
// we don't have our fancy loading screen or other UI, so use window.confirm
|
||||||
|
return void setTimeout(function () {
|
||||||
|
var answer = window.confirm(msg);
|
||||||
|
//localStorage.setItem(k, newUrlArgs);
|
||||||
|
return void cb(answer);
|
||||||
|
});
|
||||||
|
} catch (err) {
|
||||||
|
localStorage.removeItem(k);
|
||||||
|
return void cb(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var loadServiceWorker = function (args, offline) {
|
||||||
|
var path = '/sw.js?' + args; // + (offline ? '&offline=1': ''); // XXX wrong way to do offline...
|
||||||
|
try {
|
||||||
|
sw
|
||||||
|
.register(path, { scope: '/' })
|
||||||
|
.then(function (reg) {
|
||||||
|
// XXX tell the service worker if it should stay offline...
|
||||||
|
|
||||||
|
localStorage.setItem(TOFU_KEY, args);
|
||||||
|
console.log("service-worker registered", reg);
|
||||||
|
load();
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
console.error(err);
|
||||||
|
load();
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var msg = "ok to load a new version of cryptpad (" + urlArgs + ")?";
|
||||||
|
checkVersion(msg, function (consent) {
|
||||||
|
var consentfulWorker = urlArgs;
|
||||||
|
var offline = false;
|
||||||
|
|
||||||
|
//console.log(urlArgs);
|
||||||
|
if (!consent) {
|
||||||
|
consentfulWorker = localStorage.getItem(TOFU_KEY);
|
||||||
|
offline = true;
|
||||||
|
//return void loadServiceWorker(localStorage.getItem(TOFU_KEY), true);
|
||||||
|
} else {
|
||||||
|
console.error("THE USER CONSENTED TO THE UPDATE");
|
||||||
|
}
|
||||||
|
window.consentfulWorker = consentfulWorker;
|
||||||
|
|
||||||
|
loadServiceWorker(consentfulWorker, offline);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,6 +5,25 @@
|
||||||
window.atob = window.atob || function (str) { return Buffer.from(str, 'base64').toString('binary'); }; // jshint ignore:line
|
window.atob = window.atob || function (str) { return Buffer.from(str, 'base64').toString('binary'); }; // jshint ignore:line
|
||||||
window.btoa = window.btoa || function (str) { return Buffer.from(str, 'binary').toString('base64'); }; // jshint ignore:line
|
window.btoa = window.btoa || function (str) { return Buffer.from(str, 'binary').toString('base64'); }; // jshint ignore:line
|
||||||
|
|
||||||
|
var isPwa = function isPwa() {
|
||||||
|
return ["fullscreen", "standalone", "minimal-ui"].some(function (displayMode) {
|
||||||
|
return window.matchMedia('(display-mode: ' + displayMode + ')').matches;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// XXX standardize noopener, etc.
|
||||||
|
Util.open = function (url, name /*, features */) {
|
||||||
|
if (navigator.standalone || isPwa()) {
|
||||||
|
try {
|
||||||
|
return (window.document.location = url);
|
||||||
|
} catch (err) {
|
||||||
|
// fall through to standard opening method
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return window.open(url, name);
|
||||||
|
};
|
||||||
|
|
||||||
Util.slice = function (A, start, end) {
|
Util.slice = function (A, start, end) {
|
||||||
return Array.prototype.slice.call(A, start, end);
|
return Array.prototype.slice.call(A, start, end);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1932,7 +1932,7 @@ define([
|
||||||
|
|
||||||
var CRYPTPAD_VERSION = 'cryptpad-version';
|
var CRYPTPAD_VERSION = 'cryptpad-version';
|
||||||
var currentVersion = localStorage[CRYPTPAD_VERSION];
|
var currentVersion = localStorage[CRYPTPAD_VERSION];
|
||||||
var updateLocalVersion = function (newUrlArgs) {
|
var updateLocalVersion = function (newUrlArgs) { // XXX
|
||||||
// Check for CryptPad updates
|
// Check for CryptPad updates
|
||||||
var urlArgs = newUrlArgs || (Config.requireConf ? Config.requireConf.urlArgs : null);
|
var urlArgs = newUrlArgs || (Config.requireConf ? Config.requireConf.urlArgs : null);
|
||||||
if (!urlArgs) { return; }
|
if (!urlArgs) { return; }
|
||||||
|
@ -2089,7 +2089,7 @@ define([
|
||||||
STORE_READY: onStoreReady,
|
STORE_READY: onStoreReady,
|
||||||
// Network
|
// Network
|
||||||
NETWORK_DISCONNECT: common.onNetworkDisconnect.fire,
|
NETWORK_DISCONNECT: common.onNetworkDisconnect.fire,
|
||||||
NETWORK_RECONNECT: function (data) {
|
NETWORK_RECONNECT: function (data) { // XXX reconnect
|
||||||
require(['/api/config?' + (+new Date())], function (NewConfig) {
|
require(['/api/config?' + (+new Date())], function (NewConfig) {
|
||||||
var update = updateLocalVersion(NewConfig.requireConf && NewConfig.requireConf.urlArgs);
|
var update = updateLocalVersion(NewConfig.requireConf && NewConfig.requireConf.urlArgs);
|
||||||
if (update) {
|
if (update) {
|
||||||
|
|
|
@ -1129,7 +1129,7 @@ define([
|
||||||
var priv = metadataMgr.getPrivateData();
|
var priv = metadataMgr.getPrivateData();
|
||||||
var useUnsafe = Util.find(priv, ['settings', 'security', 'unsafeLinks']);
|
var useUnsafe = Util.find(priv, ['settings', 'security', 'unsafeLinks']);
|
||||||
if (useUnsafe === true) {
|
if (useUnsafe === true) {
|
||||||
return void window.open(APP.origin + href);
|
return void Util.open(APP.origin + href);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get hidden hash
|
// Get hidden hash
|
||||||
|
@ -1138,7 +1138,7 @@ define([
|
||||||
if (isRo) { opts.view = true; }
|
if (isRo) { opts.view = true; }
|
||||||
var hash = Hash.getHiddenHashFromKeys(parsed.type, secret, opts);
|
var hash = Hash.getHiddenHashFromKeys(parsed.type, secret, opts);
|
||||||
var hiddenHref = Hash.hashToHref(hash, parsed.type);
|
var hiddenHref = Hash.hashToHref(hash, parsed.type);
|
||||||
window.open(APP.origin + hiddenHref);
|
Util.open(APP.origin + hiddenHref);
|
||||||
};
|
};
|
||||||
var openIn = function (type, path, team, fData) {
|
var openIn = function (type, path, team, fData) {
|
||||||
var obj = {
|
var obj = {
|
||||||
|
|
|
@ -390,7 +390,7 @@ define([
|
||||||
var v = opts.getLinkValue({
|
var v = opts.getLinkValue({
|
||||||
embed: Util.isChecked($link.find('#cp-share-embed'))
|
embed: Util.isChecked($link.find('#cp-share-embed'))
|
||||||
});
|
});
|
||||||
window.open(v);
|
Util.open(v);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
keys: [[13, 'ctrl']]
|
keys: [[13, 'ctrl']]
|
||||||
|
|
|
@ -292,6 +292,8 @@ var factory = function () {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
cb(null, u8);
|
cb(null, u8);
|
||||||
|
} else {
|
||||||
|
// XXX cb ?
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -558,7 +558,7 @@ define([
|
||||||
var $room = $(roomEl).click(function () {
|
var $room = $(roomEl).click(function () {
|
||||||
display(id);
|
display(id);
|
||||||
}).dblclick(function () {
|
}).dblclick(function () {
|
||||||
if (friendData.profile) { window.open(origin + '/profile/#' + friendData.profile); }
|
if (friendData.profile) { Util.open(origin + '/profile/#' + friendData.profile); }
|
||||||
});
|
});
|
||||||
|
|
||||||
$(unmute).on('click dblclick', function (e) {
|
$(unmute).on('click dblclick', function (e) {
|
||||||
|
@ -723,7 +723,7 @@ define([
|
||||||
if (types.indexOf('profile') !== -1) {
|
if (types.indexOf('profile') !== -1) {
|
||||||
// update dblclick event in friend list
|
// update dblclick event in friend list
|
||||||
$userlist.find(userQuery(curvePublic)).off('dblclick').dblclick(function () {
|
$userlist.find(userQuery(curvePublic)).off('dblclick').dblclick(function () {
|
||||||
if (info.profile) { window.open(origin + '/profile/#' + info.profile); }
|
if (info.profile) { Util.open(origin + '/profile/#' + info.profile); }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
www/common/offline.html
Normal file
8
www/common/offline.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Worker</title>
|
||||||
|
<script src="/service/main.js?ver=pewpew"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>OFFLINE</h1>
|
|
@ -2659,7 +2659,7 @@ define([
|
||||||
if (typeof(cb) === 'function') { cb(returned); }
|
if (typeof(cb) === 'function') { cb(returned); }
|
||||||
|
|
||||||
store.offline = false;
|
store.offline = false;
|
||||||
sendDriveEvent('NETWORK_RECONNECT'); // Tell inner that we're now online
|
sendDriveEvent('NETWORK_RECONNECT'); // Tell inner that we're now online // XXX
|
||||||
broadcast([], "UPDATE_METADATA");
|
broadcast([], "UPDATE_METADATA");
|
||||||
broadcast([], "STORE_READY", returned);
|
broadcast([], "STORE_READY", returned);
|
||||||
|
|
||||||
|
@ -2826,7 +2826,7 @@ define([
|
||||||
});
|
});
|
||||||
rt.proxy.on('reconnect', function () {
|
rt.proxy.on('reconnect', function () {
|
||||||
store.offline = false;
|
store.offline = false;
|
||||||
sendDriveEvent('NETWORK_RECONNECT');
|
sendDriveEvent('NETWORK_RECONNECT'); // XXX reconnect
|
||||||
broadcast([], "UPDATE_METADATA");
|
broadcast([], "UPDATE_METADATA");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -48,5 +48,30 @@ define([
|
||||||
throw e;
|
throw e;
|
||||||
};
|
};
|
||||||
|
|
||||||
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
var called = false;
|
||||||
|
var load = function () {
|
||||||
|
if (called) { return; }
|
||||||
|
called = true;
|
||||||
|
require([document.querySelector('script[data-bootload]').getAttribute('data-bootload')]);
|
||||||
|
};
|
||||||
|
|
||||||
|
var sw = window.navigator.serviceWorker;
|
||||||
|
if (!sw) { return void load(); }
|
||||||
|
try {
|
||||||
|
sw
|
||||||
|
.register('/sw.js?'
|
||||||
|
+ RequireConfig().urlArgs // XXX should match the query string provided by outer
|
||||||
|
, { scope: '/' })
|
||||||
|
.then(function (reg) {
|
||||||
|
console.log("service-worker registered", reg);
|
||||||
|
load();
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
console.error(err);
|
||||||
|
load();
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
load();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,6 +12,7 @@ define([
|
||||||
var requireConfig = RequireConfig();
|
var requireConfig = RequireConfig();
|
||||||
var lang = Messages._languageUsed;
|
var lang = Messages._languageUsed;
|
||||||
var req = {
|
var req = {
|
||||||
|
worker: window.consentfulWorker,
|
||||||
cfg: requireConfig,
|
cfg: requireConfig,
|
||||||
req: [ '/common/loading.js' ],
|
req: [ '/common/loading.js' ],
|
||||||
pfx: window.location.origin,
|
pfx: window.location.origin,
|
||||||
|
@ -30,6 +31,7 @@ define([
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX load with cached URL args via window.consentfulWorker
|
||||||
document.getElementById('sbox-iframe').setAttribute('src',
|
document.getElementById('sbox-iframe').setAttribute('src',
|
||||||
ApiConfig.httpSafeOrigin + (pathname || window.location.pathname) + 'inner.html?' +
|
ApiConfig.httpSafeOrigin + (pathname || window.location.pathname) + 'inner.html?' +
|
||||||
requireConfig.urlArgs + '#' + encodeURIComponent(JSON.stringify(req)));
|
requireConfig.urlArgs + '#' + encodeURIComponent(JSON.stringify(req)));
|
||||||
|
|
|
@ -651,7 +651,7 @@ define([
|
||||||
return void ctx.sframeChan.event('EV_OPEN_UNSAFE_URL', url);
|
return void ctx.sframeChan.event('EV_OPEN_UNSAFE_URL', url);
|
||||||
}
|
}
|
||||||
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(url);
|
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(url);
|
||||||
window.open(bounceHref);
|
Util.open(bounceHref);
|
||||||
};
|
};
|
||||||
|
|
||||||
funcs.fixLinks = function (domElement) {
|
funcs.fixLinks = function (domElement) {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
|
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-main="main" src="/bower_components/requirejs/require.js"></script>
|
<script async data-main="main" src="/bower_components/requirejs/require.js"></script>
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
</head>
|
</head>
|
||||||
|
|
12
www/manifest.webmanifest
Normal file
12
www/manifest.webmanifest
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"short_name": "CryptPad",
|
||||||
|
"name": "CryptPad: the encrypted collaboration suite",
|
||||||
|
"description": "the encrypted collaboration suite",
|
||||||
|
"icons": [],
|
||||||
|
"background_color": "#ff0073",
|
||||||
|
"display": "browser",
|
||||||
|
"start_url": "/",
|
||||||
|
"scope": "/",
|
||||||
|
"theme_color": "#ff0073",
|
||||||
|
"shortcuts": []
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Test media-tag</title>
|
<title>Test media-tag</title>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<style>
|
<style>
|
||||||
media-tag * {
|
media-tag * {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -2,8 +2,9 @@ define([
|
||||||
'jquery',
|
'jquery',
|
||||||
'/common/hyperscript.js',
|
'/common/hyperscript.js',
|
||||||
'/common/common-ui-elements.js',
|
'/common/common-ui-elements.js',
|
||||||
|
'/common/common-util.js',
|
||||||
'/customize/messages.js'
|
'/customize/messages.js'
|
||||||
], function ($, h, UIElements, Messages) {
|
], function ($, h, UIElements, Util, Messages) {
|
||||||
|
|
||||||
var onLinkClicked = function (e, inner) {
|
var onLinkClicked = function (e, inner) {
|
||||||
var $target = $(e.target);
|
var $target = $(e.target);
|
||||||
|
@ -46,7 +47,7 @@ define([
|
||||||
ee.preventDefault();
|
ee.preventDefault();
|
||||||
ee.stopPropagation();
|
ee.stopPropagation();
|
||||||
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(href);
|
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(href);
|
||||||
window.open(bounceHref);
|
Util.open(bounceHref);
|
||||||
$link.remove();
|
$link.remove();
|
||||||
});
|
});
|
||||||
$link.on('mouseleave', function () {
|
$link.on('mouseleave', function () {
|
||||||
|
@ -93,7 +94,7 @@ define([
|
||||||
var href = anchor.getAttribute('href');
|
var href = anchor.getAttribute('href');
|
||||||
if (href) {
|
if (href) {
|
||||||
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(href);
|
var bounceHref = window.location.origin + '/bounce/#' + encodeURIComponent(href);
|
||||||
window.open(bounceHref);
|
Util.open(bounceHref);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -103,7 +103,7 @@ define([
|
||||||
$('<button>', {
|
$('<button>', {
|
||||||
'class': 'btn '+VIEW_PROFILE_BUTTON,
|
'class': 'btn '+VIEW_PROFILE_BUTTON,
|
||||||
}).text(Messages.profile_viewMyProfile).click(function () {
|
}).text(Messages.profile_viewMyProfile).click(function () {
|
||||||
window.open(url, '_blank');
|
Util.open(url, '_blank');
|
||||||
}).appendTo($container);
|
}).appendTo($container);
|
||||||
|
|
||||||
$('<button>', {
|
$('<button>', {
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="html">
|
<body class="html">
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -94,7 +94,7 @@ define([
|
||||||
'subscription': {
|
'subscription': {
|
||||||
onClick: function() {
|
onClick: function() {
|
||||||
var urls = common.getMetadataMgr().getPrivateData().accounts;
|
var urls = common.getMetadataMgr().getPrivateData().accounts;
|
||||||
window.open(urls.upgradeURL);
|
Util.open(urls.upgradeURL);
|
||||||
Feedback.send('SUBSCRIPTION_BUTTON');
|
Feedback.send('SUBSCRIPTION_BUTTON');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/onlyoffice/main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
223
www/sw.js
Normal file
223
www/sw.js
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
/* jshint esversion: 6 */
|
||||||
|
var version = self.location.search || "DEFAULT";
|
||||||
|
//console.log('worker location:', self.location);
|
||||||
|
console.info('SW VERSION', version);
|
||||||
|
|
||||||
|
var params = new URLSearchParams(version);
|
||||||
|
var OFFLINE = params.has('offline');
|
||||||
|
|
||||||
|
console.info("SW OFFLINE?", OFFLINE);
|
||||||
|
|
||||||
|
var filesToCache = [
|
||||||
|
'/common/sframe-app-outer.js',
|
||||||
|
'/common/offline.html',
|
||||||
|
];
|
||||||
|
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
'auth',
|
||||||
|
'bounce',
|
||||||
|
'code',
|
||||||
|
'contacts',
|
||||||
|
'drive',
|
||||||
|
'file',
|
||||||
|
'kanban',
|
||||||
|
'login',
|
||||||
|
'logout',
|
||||||
|
'notifications',
|
||||||
|
//'oodoc',
|
||||||
|
//'ooslide',
|
||||||
|
'pad',
|
||||||
|
'poll',
|
||||||
|
'profile',
|
||||||
|
'register',
|
||||||
|
//'secureiframe',
|
||||||
|
//'service',
|
||||||
|
'settings',
|
||||||
|
'sheet',
|
||||||
|
'slide',
|
||||||
|
'support',
|
||||||
|
'teams',
|
||||||
|
'todo',
|
||||||
|
'whiteboard',
|
||||||
|
//'worker',
|
||||||
|
];
|
||||||
|
.forEach(function (path) {
|
||||||
|
filesToCache.push('/' + path + '/');
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
'',
|
||||||
|
//'404.html',
|
||||||
|
'about.html',
|
||||||
|
'contact.html',
|
||||||
|
'faq.html',
|
||||||
|
'features.html',
|
||||||
|
'index.html',
|
||||||
|
//'maintenance.html',
|
||||||
|
'privacy.html',
|
||||||
|
'terms.html',
|
||||||
|
'what-is-cryptpad.html',
|
||||||
|
].forEach(function (path) {
|
||||||
|
filesToCache.push('/' + path);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
filesToCache.forEach(function (file, i) {
|
||||||
|
filesToCache[i] += ('?' + version);
|
||||||
|
});
|
||||||
|
|
||||||
|
var openCache = function (name) {
|
||||||
|
return self.caches.open(name);
|
||||||
|
};
|
||||||
|
|
||||||
|
var deleteCache = function (name) {
|
||||||
|
return self.caches.delete(name);
|
||||||
|
};
|
||||||
|
|
||||||
|
var cacheResponse = function (cache, request, response) {
|
||||||
|
cache.put(request.clone(), response.clone());
|
||||||
|
};
|
||||||
|
|
||||||
|
var listCaches = function () {
|
||||||
|
return self.caches.keys();
|
||||||
|
};
|
||||||
|
|
||||||
|
var matchCache = function (req, opt) {
|
||||||
|
return self.caches.match(req, opt);
|
||||||
|
};
|
||||||
|
|
||||||
|
var handleApiConfig = function (event) {
|
||||||
|
//console.log("API CONFIG");
|
||||||
|
var request = new Request('/api/config');
|
||||||
|
event.respondWith(
|
||||||
|
fetch(request)
|
||||||
|
.then(function (response) {
|
||||||
|
//console.log("API CONFIG", request, response);
|
||||||
|
if (!response.ok) {
|
||||||
|
return matchCache('/api/config', {
|
||||||
|
ignoreSearch: true,
|
||||||
|
});
|
||||||
|
//throw new Error("oops");
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX always cache the latest /api/config
|
||||||
|
return openCache(version).then(function (cache) {
|
||||||
|
//console.log('API CONFIG REQUEST', request.clone());
|
||||||
|
cacheResponse(cache, event.request, response);
|
||||||
|
return response.clone();
|
||||||
|
}).catch(function (err) {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
|
//return response.clone();
|
||||||
|
})
|
||||||
|
.catch(function (/* err */) {
|
||||||
|
//console.error(err);
|
||||||
|
console.error("failed /api/config fetch");
|
||||||
|
//console.log(caches.match('/api/config'));
|
||||||
|
|
||||||
|
// XXX respond with most recently cached /api/config
|
||||||
|
return matchCache(event.request.clone(), {
|
||||||
|
ignoreSearch: true,
|
||||||
|
})
|
||||||
|
//'api/config')
|
||||||
|
.then(function (response) {
|
||||||
|
/* 0 && response.clone().text().then(function (data) {
|
||||||
|
console.log('response.text', data);
|
||||||
|
}); */
|
||||||
|
//console.log('response.text', response.clone().text());
|
||||||
|
|
||||||
|
//console.log("falling back to cached /api/config");
|
||||||
|
return response.clone();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
var handleDefaultFetch = function (event) {
|
||||||
|
event.respondWith(
|
||||||
|
matchCache(event.request)
|
||||||
|
.then(function (response) {
|
||||||
|
if (response) { return response; }
|
||||||
|
return openCache(version).then(function (cache) {
|
||||||
|
console.log('Network request for ', event.request.url);
|
||||||
|
return fetch(event.request.clone())
|
||||||
|
.then(function (response) {
|
||||||
|
if (response.ok) {
|
||||||
|
cache.put(event.request, response.clone());
|
||||||
|
}
|
||||||
|
return response.clone();
|
||||||
|
}).catch(function (/*err*/) {
|
||||||
|
console.error('FAILED FETCH for url [%s]', new URL(event.request.url).pathname);
|
||||||
|
return matchCache('/common/offline.html', {
|
||||||
|
ignoreSearch: true,
|
||||||
|
});
|
||||||
|
//console.error(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}).catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
// unexpected error. allow default behaviour
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
var handleFetch = function (event) {
|
||||||
|
if (event.request.method !== 'GET') { return; }
|
||||||
|
var url = new URL(event.request.url);
|
||||||
|
if (url.pathname === '/sw.js') { return; }
|
||||||
|
|
||||||
|
//console.log(url);
|
||||||
|
//console.log('Fetch event for ', event.request.url, event.request);
|
||||||
|
if (/^\/api\/config/.test(url.pathname)) {
|
||||||
|
return void handleApiConfig(event);
|
||||||
|
}
|
||||||
|
handleDefaultFetch(event);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.addEventListener('fetch', handleFetch);
|
||||||
|
|
||||||
|
self.addEventListener('unhandledrejection', function(event) {
|
||||||
|
console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
|
||||||
|
throw new Error();
|
||||||
|
});
|
||||||
|
|
||||||
|
var claimClients = function () {
|
||||||
|
clients.claim(); // jshint ignore:line
|
||||||
|
};
|
||||||
|
|
||||||
|
self.addEventListener('install', function (event) {
|
||||||
|
event.waitUntil(
|
||||||
|
openCache(version).then(function (cache) {
|
||||||
|
return cache.addAll(filesToCache);
|
||||||
|
})
|
||||||
|
.then(function () {
|
||||||
|
return self.skipWaiting();
|
||||||
|
}).catch(function (err) {
|
||||||
|
console.error(err);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('activate', function (event) {
|
||||||
|
// evict older versions of files you've cached
|
||||||
|
console.log("activating %s", version);
|
||||||
|
|
||||||
|
event.waitUntil(
|
||||||
|
listCaches()
|
||||||
|
.then(keys => Promise.all(
|
||||||
|
keys.map(key => {
|
||||||
|
if (key !== version) {
|
||||||
|
console.log('Evicting cache: [%s]', key);
|
||||||
|
return deleteCache(key);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)).then(() => {
|
||||||
|
console.log('version %s now ready to handle fetches!', version);
|
||||||
|
claimClients();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
<link href="/customize/src/outer.css?ver=1.1" rel="stylesheet" type="text/css">
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||||
<style>
|
<style>
|
||||||
html, body {
|
html, body {
|
||||||
|
|
Loading…
Reference in a new issue