Combine menu status and error dialog into central status text.

This commit is contained in:
Michael Jumper
2012-01-24 15:52:16 -08:00
parent f3254dfaa0
commit db69e717a0
3 changed files with 97 additions and 53 deletions

View File

@@ -50,7 +50,6 @@
<!-- Logo and status --> <!-- Logo and status -->
<img id="status-logo" class="logo" src="images/guacamole-logo-24.png" alt="Guacamole" title="Guacamole ${project.version}"/> <img id="status-logo" class="logo" src="images/guacamole-logo-24.png" alt="Guacamole" title="Guacamole ${project.version}"/>
<span id="state"></span>
</div> </div>
@@ -66,17 +65,19 @@
<!-- On-screen keyboard --> <!-- On-screen keyboard -->
<div id="keyboardContainer"></div> <div id="keyboardContainer"></div>
<!-- Error Dialog--> <!-- Dialogs -->
<div id="errorDialog" class="errorDialogOuter"> <div class="dialogOuter">
<div class="errorDialogMiddle"> <div class="dialogMiddle">
<div class="errorDialog">
<p id="errorText"></p> <!-- Status Dialog -->
<div id="statusDialog" class="dialog">
<p id="statusText"></p>
<div class="buttons"><button id="reconnect">Reconnect</button></div> <div class="buttons"><button id="reconnect">Reconnect</button></div>
</div> </div>
</div> </div>
</div> </div>
<!-- guacamole-common-js scripts --> <!-- guacamole-common-js scripts -->
<script type="text/javascript" src="guacamole-common-js/keyboard.js"></script> <script type="text/javascript" src="guacamole-common-js/keyboard.js"></script>
<script type="text/javascript" src="guacamole-common-js/mouse.js"></script> <script type="text/javascript" src="guacamole-common-js/mouse.js"></script>

View File

@@ -5,8 +5,8 @@ var GuacamoleUI = {
"display" : document.getElementById("display"), "display" : document.getElementById("display"),
"menu" : document.getElementById("menu"), "menu" : document.getElementById("menu"),
"menuControl" : document.getElementById("menuControl"), "menuControl" : document.getElementById("menuControl"),
"touchMenu" : document.getElementById("touchMenu"),
"logo" : document.getElementById("status-logo"), "logo" : document.getElementById("status-logo"),
"state" : document.getElementById("state"),
"buttons": { "buttons": {
@@ -19,12 +19,12 @@ var GuacamoleUI = {
}, },
"containers": { "containers": {
"error" : document.getElementById("errorDialog"), "state" : document.getElementById("statusDialog"),
"clipboard": document.getElementById("clipboardDiv"), "clipboard": document.getElementById("clipboardDiv"),
"keyboard" : document.getElementById("keyboardContainer") "keyboard" : document.getElementById("keyboardContainer")
}, },
"error" : document.getElementById("errorText"), "state" : document.getElementById("statusText"),
"clipboard" : document.getElementById("clipboard") "clipboard" : document.getElementById("clipboard")
}; };
@@ -41,15 +41,20 @@ var GuacamoleUI = {
var guacErrorImage = new Image(); var guacErrorImage = new Image();
guacErrorImage.src = "images/noguacamole-logo-24.png"; guacErrorImage.src = "images/noguacamole-logo-24.png";
GuacamoleUI.hideStatus = function() {
document.body.classList.remove("guac-error");
GuacamoleUI.containers.state.style.visibility = "hidden";
};
GuacamoleUI.showStatus = function(text) {
document.body.classList.remove("guac-error");
GuacamoleUI.containers.state.style.visibility = "visible";
GuacamoleUI.state.textContent = text;
};
GuacamoleUI.showError = function(error) { GuacamoleUI.showError = function(error) {
document.body.classList.add("guac-error");
GuacamoleUI.menu.className = "error"; GuacamoleUI.state.textContent = error;
GuacamoleUI.display.className += " guac-error";
GuacamoleUI.logo.src = guacErrorImage.src;
GuacamoleUI.error.textContent = error;
GuacamoleUI.containers.error.style.visibility = "visible";
}; };
GuacamoleUI.shadeMenu = function() { GuacamoleUI.shadeMenu = function() {
@@ -209,6 +214,38 @@ var GuacamoleUI = {
// When mouse enters display, start detection of intent to close menu // When mouse enters display, start detection of intent to close menu
GuacamoleUI.display.addEventListener('mouseover', startMenuCloseDetect, true); GuacamoleUI.display.addEventListener('mouseover', startMenuCloseDetect, true);
var menuShowLongPressTimeout = null;
// Detect long-press at bottom of screen
document.body.addEventListener('touchstart', function(e) {
if (!menuShowLongPressTimeout) {
menuShowLongPressTimeout = window.setTimeout(function() {
menuShowLongPressTimeout = null;
GuacamoleUI.showMenu();
}, 1000);
}
}, true);
// Reset detection when touch stops
document.body.addEventListener('touchend', function() {
// Reset opacity, stop detection of keyboard show gesture
GuacamoleUI.shadeMenu();
window.clearTimeout(menuShowLongPressTimeout);
menuShowLongPressTimeout = null;
}, false);
GuacamoleUI.menu.addEventListener('touchend', function(e) {
e.stopPropagation();
}, false);
// Show menu if mouse leaves document // Show menu if mouse leaves document
document.addEventListener('mouseout', function(e) { document.addEventListener('mouseout', function(e) {
@@ -324,43 +361,43 @@ GuacamoleUI.attach = function(guac) {
// Idle // Idle
case 0: case 0:
GuacamoleUI.state.textContent = "Idle." GuacamoleUI.showStatus("Idle.");
break; break;
// Connecting // Connecting
case 1: case 1:
GuacamoleUI.state.textContent = "Connecting..."; GuacamoleUI.shadeMenu();
GuacamoleUI.showStatus("Connecting...");
break; break;
// Connected + waiting // Connected + waiting
case 2: case 2:
GuacamoleUI.state.textContent = "Connected, waiting for first update..."; GuacamoleUI.showStatus("Connected, waiting for first update...");
break; break;
// Connected // Connected
case 3: case 3:
GuacamoleUI.hideStatus();
GuacamoleUI.display.className = GuacamoleUI.display.className =
GuacamoleUI.display.className.replace(/guac-loading/, ''); GuacamoleUI.display.className.replace(/guac-loading/, '');
GuacamoleUI.menu.className = "connected"; GuacamoleUI.menu.className = "connected";
GuacamoleUI.state.textContent = "Connected.";
GuacamoleUI.shadeMenu();
break; break;
// Disconnecting // Disconnecting
case 4: case 4:
GuacamoleUI.state.textContent = "Disconnecting..."; GuacamoleUI.showStatus("Disconnecting...");
break; break;
// Disconnected // Disconnected
case 5: case 5:
GuacamoleUI.state.textContent = "Disconnected."; GuacamoleUI.showStatus("Disconnected.");
break; break;
// Unknown status code // Unknown status code
default: default:
GuacamoleUI.state.textContent = "Unknown"; GuacamoleUI.showStatus("[UNKNOWN STATUS]");
} }
}; };

View File

@@ -28,7 +28,7 @@ body {
-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: rgba(0,0,0,0);
} }
div.errorDialogOuter { div.dialogOuter {
display: table; display: table;
height: 100%; height: 100%;
width: 100%; width: 100%;
@@ -37,44 +37,56 @@ div.errorDialogOuter {
top: 0; top: 0;
visibility: hidden; visibility: hidden;
/*
background-image: url('../images/spinner.gif');
background-position: center;
background-repeat: no-repeat;
*/
/*
background-image: url('../images/noimage.png');
background-position: center;
background-repeat: no-repeat;
*/
} }
div.errorDialogMiddle { div.dialogMiddle {
width: 100%; width: 100%;
text-align: center; text-align: center;
display: table-cell; display: table-cell;
vertical-align: middle; vertical-align: middle;
} }
div.errorDialog { div.dialog {
opacity: 0.75;
background: #D22;
border: 1px solid #F44;
padding: 1em; padding: 1em;
max-width: 75%; max-width: 75%;
text-align: left; text-align: left;
display: inline-block; display: inline-block;
visibility: visible;
} }
div.errorDialog h1 { div.dialog h1 {
margin: 0; margin: 0;
margin-bottom: 0.25em; margin-bottom: 0.25em;
text-align: center; text-align: center;
} }
div.errorDialog div.buttons { div.dialog div.buttons {
margin: 0; margin: 0;
margin-top: 0.5em; margin-top: 0.5em;
text-align: center; text-align: center;
} }
div.errorDialog p { *:not(.guac-error) button#reconnect {
margin: 0; display: none;
} }
div.dialog p {
margin: 0;
}
#menu { #menu {
position: fixed; position: fixed;
@@ -87,12 +99,20 @@ div.errorDialog p {
font-size: 0.8em; font-size: 0.8em;
} }
#menu.error { .guac-error #menu {
background: #D44; background: #D44;
} }
.error #state { #statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
font-weight: bold; font-weight: bold;
font-size: xx-large;
color: white;
}
.guac-error #statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
color: #D44;
} }
img { img {
@@ -145,20 +165,6 @@ div#clipboardDiv textarea {
width: 100%; width: 100%;
} }
.guac-display.guac-loading {
border: 1px dotted gray;
background-image: url('../images/spinner.gif');
background-position: center;
background-repeat: no-repeat;
}
.guac-display.guac-error {
border: 1px dotted red;
background-image: url('../images/noimage.png');
background-position: center;
background-repeat: no-repeat;
}
.guac-hide-cursor { .guac-hide-cursor {
cursor: url('../images/mouse/dot.gif'),url('../images/mouse/blank.cur'),default; cursor: url('../images/mouse/dot.gif'),url('../images/mouse/blank.cur'),default;
} }