cryptpad/www/common/sframe-boot.js
Caleb James DeLisle 8a32b72ffc 1. implement cryptpadCache which has put() and get() functions that can be used like a localStorage that auto-flushes when a new version is released
2. change loading.js to use packaged css in order to get the loading screen up as quick as possible.
3. change LessLoader to cache less in cryptpadCache
2017-09-14 10:23:05 +02:00

59 lines
2.1 KiB
JavaScript

// Stage 0, this gets cached which means we can't change it. boot2-sframe.js is changable.
// Note that this file is meant to be executed only inside of a sandbox iframe.
//
// IF YOU EDIT THIS FILE, bump the version (replace 1.3 in the following command with the next version.)
// grep -nr '/common/sframe-boot.js?ver=' | sed 's/:.*$//' | while read x; do \
// sed -i -e 's@/common/sframe-boot.js?ver=[^"]*@/common/sframe-boot.js?ver=1.3@' $x; done
;(function () {
var afterLoaded = function (req) {
req.cfg = req.cfg || {};
if (req.pfx) {
req.cfg.onNodeCreated = function (node /*, config, module, path*/) {
node.setAttribute('src', req.pfx + node.getAttribute('src'));
};
}
require.config(req.cfg);
var txid = Math.random().toString(16).replace('0.', '');
var intr;
var ready = function () {
intr = setInterval(function () {
if (typeof(txid) !== 'string') { return; }
window.parent.postMessage(JSON.stringify({ q: 'READY', txid: txid }), '*');
}, 1);
};
if (req.req) { require(req.req, ready); } else { ready(); }
var onReply = function (msg) {
var data = JSON.parse(msg.data);
if (data.txid !== txid) { return; }
clearInterval(intr);
txid = {};
window.removeEventListener('message', onReply);
data.cache = data.cache || {};
var updated = {};
window.cryptpadCache = {
get: function (k, cb) {
setTimeout(function () { cb(data.cache[k]); });
},
put: function (k, v, cb) {
cb = cb || function () { };
updated[k] = v;
setTimeout(function () { data.cache[k] = v; cb(); });
},
updated: updated,
cache: data.cache
};
require(['/common/sframe-boot2.js'], function () { });
};
window.addEventListener('message', onReply);
};
var intr = setInterval(function () {
try {
var req = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
clearInterval(intr);
afterLoaded(req);
} catch (e) { console.error(e); }
}, 100);
}());