var initialConfigFetched = false; /* used to workaround browser extensions that trigger stupid change events */
var pageContainer = null;
var overlayVisible = false;
+var layoutColumns = 1;
/* Object utilities */
getPageContainer().removeClass(Object.values(cssClasses).join(' '));
getPageContainer().addClass(cssClasses[columns]);
+
+ layoutColumns = columns;
+ updateLayout();
+}
+
+function updateLayout() {
+ /* make sure the height of each camera
+ * is smaller than the height of the screen */
+
+ /* find the tallest frame */
+ var frames = getCameraFrames();
+ var maxHeight = -1;
+ var maxHeightFrame = null;
+ frames.each(function () {
+ var frame = $(this);
+ var height = frame.height();
+ if (height > maxHeight) {
+ maxHeight = height;
+ maxHeightFrame = frame;
+ }
+ });
+
+ if (!maxHeightFrame) {
+ return; /* no camera frames */
+ }
+
+ var pageContainer = getPageContainer();
+ var windowWidth = $(window).width();
+
+ var columns = layoutColumns;
+ if (isFullScreen() || windowWidth < 1200) {
+ columns = 1; /* always 1 column when in full screen or mobile */
+ }
+
+ var heightOffset = 10; /* some padding */
+ if (!isFullScreen()) {
+ heightOffset += 50; /* top bar */
+ }
+
+ var windowHeight = $(window).height() - heightOffset;
+ var ratio = maxHeightFrame.width() / maxHeightFrame.height();
+ var width = parseInt(ratio * windowHeight * columns);
+ var maxWidth = windowWidth;
+
+ if (pageContainer.hasClass('stretched')) {
+ maxWidth *= 0.6; /* opened settings panel occupies 40% of the window width */
+ }
+
+ if (width < 100) {
+ width = 100; /* absolute minimum width for a frame */;
+ }
+
+ if (width > maxWidth) {
+ getPageContainer().css('width', '');
+ return; /* page container width already at its maximum */
+ }
+
+ getPageContainer().css('width', width);
}
function showCameraOverlay() {
$('div.settings-top-bar').addClass('open').removeClass('closed');
updateConfigUI();
+ doExitFullScreenCamera();
+ updateLayout();
+ setTimeout(updateLayout, 200);
}
function closeSettings() {
$('div.settings').removeClass('open').addClass('closed');
getPageContainer().removeClass('stretched');
$('div.settings-top-bar').removeClass('open').addClass('closed');
+
+ updateLayout();
}
function isSettingsOpen() {
cameraImg.removeClass('initializing');
cameraImg.css('height', '');
this.initializing = false;
+
+ updateLayout();
}
/* there's no point in looking for a cookie update more often than once every second */
pageContainer.addClass('full-screen');
cameraFrame.addClass('full-screen');
- $('div.header').addClass('full-screen')
- $('div.footer').addClass('full-screen')
+ $('div.header').addClass('full-screen');
+ $('div.footer').addClass('full-screen');
+
+ updateLayout();
}
function doExitFullScreenCamera() {
var cameraFrame = getCameraFrame(fullScreenCameraId);
var pageContainer = getPageContainer();
- $('div.header').removeClass('full-screen')
- $('div.footer').removeClass('full-screen')
+ $('div.header').removeClass('full-screen');
+ $('div.footer').removeClass('full-screen');
pageContainer.removeClass('full-screen');
cameraFrame.removeClass('full-screen');
});
fullScreenCameraId = null;
+
+ updateLayout();
+}
+
+function isFullScreen() {
+ return fullScreenCameraId != null;
}
function refreshCameraFrames() {
refreshCameraFrames();
checkCameraErrors();
- setLayoutColumns(3); // TODO !!!
+
+ $(window).resize(function () {
+ updateLayout();
+ });
});