154 lines
6 KiB
JavaScript
154 lines
6 KiB
JavaScript
'use strict';
|
|
|
|
(function() {
|
|
|
|
var animationInterval,
|
|
enableDebugMode = getLocalStorage('oml.enableDebugMode'),
|
|
oxjsPath = '/static/oxjs/' + (enableDebugMode ? 'dev' : 'min'),
|
|
theme = getLocalStorage('Ox.theme')
|
|
&& JSON.parse(localStorage['Ox.theme'])
|
|
|| 'oxlight';
|
|
|
|
loadImages(function(images) {
|
|
loadScreen(images);
|
|
initUpdate();
|
|
});
|
|
|
|
function connectSocket() {
|
|
update.socket = new WebSocket('ws://' + document.location.host + '/ws');
|
|
update.socket.onopen = function(event) {
|
|
if (update.reload) {
|
|
reload();
|
|
}
|
|
};
|
|
update.socket.onmessage = function(event) {
|
|
var name, data = JSON.parse(event.data);
|
|
name = data[0];
|
|
data = data[1];
|
|
if (name == 'updatestatus') {
|
|
update.status.innerHTML = data.status;
|
|
update.reload = data.reload;
|
|
} else if (name == 'status') {
|
|
reload(); // oml is running
|
|
} else {
|
|
console.log(name, data);
|
|
}
|
|
};
|
|
update.socket.onerror = function(event) {
|
|
update.socket.close();
|
|
};
|
|
update.socket.onclose = function(event) {
|
|
setTimeout(connectSocket, 1000);
|
|
};
|
|
}
|
|
|
|
function getLocalStorage(key) {
|
|
try {
|
|
return localStorage[key];
|
|
} catch(e) {}
|
|
}
|
|
|
|
function initUpdate(browserSupported) {
|
|
window.update = {};
|
|
update.status = document.createElement('div');
|
|
update.status.className = 'OxElement';
|
|
update.status.style.position = 'absolute';
|
|
update.status.style.left = '16px';
|
|
update.status.style.top = '336px';
|
|
update.status.style.right = 0;
|
|
update.status.style.bottom = 0;
|
|
update.status.style.width = '512px';
|
|
update.status.style.height = '16px';
|
|
update.status.style.margin = 'auto';
|
|
update.status.style.textAlign = 'center';
|
|
update.status.style.color = theme == 'oxdark' ? 'rgb(244, 244, 244)'
|
|
: theme == 'oxmedium' ? 'rgb(0, 0, 0)' : 'rgb(16, 16, 16)';
|
|
update.status.style.fontFamily = 'Lucida Grande, Segoe UI, DejaVu Sans, Lucida Sans Unicode, Helvetica, Arial, sans-serif';
|
|
update.status.style.fontSize = '11px';
|
|
document.querySelector('#loadingScreen').appendChild(update.status);
|
|
connectSocket();
|
|
}
|
|
|
|
function loadImages(callback) {
|
|
var images = {};
|
|
images.logo = document.createElement('img');
|
|
images.logo.onload = function() {
|
|
images.logo.style.position = 'absolute';
|
|
images.logo.style.left = 0;
|
|
images.logo.style.top = 0;
|
|
images.logo.style.right = 0;
|
|
images.logo.style.bottom = '96px';
|
|
images.logo.style.width = '256px';
|
|
images.logo.style.height = '256px';
|
|
images.logo.style.margin = 'auto';
|
|
images.logo.style.MozUserSelect = 'none';
|
|
images.logo.style.MSUserSelect = 'none';
|
|
images.logo.style.OUserSelect = 'none';
|
|
images.logo.style.WebkitUserSelect = 'none';
|
|
images.loadingIcon = document.createElement('img');
|
|
images.loadingIcon.setAttribute('id', 'loadingIcon');
|
|
images.loadingIcon.style.position = 'absolute';
|
|
images.loadingIcon.style.left = '16px';
|
|
images.loadingIcon.style.top = '256px'
|
|
images.loadingIcon.style.right = 0;
|
|
images.loadingIcon.style.bottom = 0;
|
|
images.loadingIcon.style.width = '32px';
|
|
images.loadingIcon.style.height = '32px';
|
|
images.loadingIcon.style.margin = 'auto';
|
|
images.loadingIcon.style.MozUserSelect = 'none';
|
|
images.loadingIcon.style.MSUserSelect = 'none';
|
|
images.loadingIcon.style.OUserSelect = 'none';
|
|
images.loadingIcon.style.WebkitUserSelect = 'none';
|
|
images.loadingIcon.src = oxjsPath
|
|
+ '/UI/themes/' + theme + '/svg/symbolLoading.svg';
|
|
callback(images);
|
|
};
|
|
images.logo.src = '/static/png/oml.png';
|
|
}
|
|
|
|
function loadScreen(images) {
|
|
var loadingScreen = document.createElement('div');
|
|
loadingScreen.setAttribute('id', 'loadingScreen');
|
|
loadingScreen.className = 'OxScreen';
|
|
loadingScreen.style.position = 'absolute';
|
|
loadingScreen.style.width = '100%';
|
|
loadingScreen.style.height = '100%';
|
|
loadingScreen.style.backgroundColor = theme == 'oxlight' ? 'rgb(224, 224, 224)'
|
|
: theme == 'oxmedium' ? 'rgb(144, 144, 144)' : 'rgb(32, 32, 32)';
|
|
loadingScreen.style.zIndex = '1002';
|
|
loadingScreen.appendChild(images.logo);
|
|
loadingScreen.appendChild(images.loadingIcon);
|
|
// FF3.6 document.body can be undefined here
|
|
window.onload = function() {
|
|
document.body.style.margin = 0;
|
|
if (!animationInterval) {
|
|
document.body.appendChild(loadingScreen);
|
|
startAnimation();
|
|
}
|
|
};
|
|
// IE8 does not call onload if already loaded before set
|
|
document.body && window.onload();
|
|
}
|
|
|
|
function reload() {
|
|
document.location.href = document.location.protocol + '//' + document.location.host;
|
|
}
|
|
|
|
function startAnimation() {
|
|
var css, deg = 0, loadingIcon = document.getElementById('loadingIcon'),
|
|
previousTime = +new Date();
|
|
animationInterval = setInterval(function() {
|
|
var currentTime = +new Date(),
|
|
delta = (currentTime - previousTime) / 1000;
|
|
previousTime = currentTime;
|
|
deg = Math.round((deg + delta * 360) % 360 / 30) * 30;
|
|
css = 'rotate(' + deg + 'deg)';
|
|
loadingIcon.style.MozTransform = css;
|
|
loadingIcon.style.MSTransform = css;
|
|
loadingIcon.style.OTransform = css;
|
|
loadingIcon.style.WebkitTransform = css;
|
|
loadingIcon.style.transform = css;
|
|
}, 83);
|
|
}
|
|
|
|
}());
|