Allow logout button to work where no Java app used
[guacamole.git] / src / main / webapp / scripts / interface.js
index b3681db..824219e 100644 (file)
@@ -2,6 +2,9 @@
 // UI Definition
 var GuacamoleUI = {
 
+    "LOGOUT_PROMPT" :   "Logging out will disconnect all of your active "
+                      + "Guacamole sessions. Are you sure you wish to log out?",
+
     /* Detection Constants */
     
     "LONG_PRESS_DETECT_TIMEOUT"     : 800, /* milliseconds */
@@ -46,13 +49,15 @@ var GuacamoleUI = {
     },
 
     "containers": {
-        "state"    : document.getElementById("statusDialog"),
-        "clipboard": document.getElementById("clipboardDiv"),
-        "keyboard" : document.getElementById("keyboardContainer")
+        "state"         : document.getElementById("statusDialog"),
+        "clipboard"     : document.getElementById("clipboardDiv"),
+        "touchClipboard": document.getElementById("touchClipboardDiv"),
+        "keyboard"      : document.getElementById("keyboardContainer")
     },
     
-    "state"     : document.getElementById("statusText"),
-    "clipboard" : document.getElementById("clipboard")
+    "state"          : document.getElementById("statusText"),
+    "clipboard"      : document.getElementById("clipboard"),
+    "touchClipboard" : document.getElementById("touchClipboard")
 
 };
 
@@ -140,21 +145,32 @@ var GuacamoleUI = {
     GuacamoleUI.hideTouchMenu = function() {
         GuacamoleUI.touchMenu.style.visibility = "hidden";
     };
-    
-    GuacamoleUI.showTouchMenu = function() {
-        
-        GuacamoleUI.touchMenu.style.left =
-            ((GuacamoleUI.viewport.offsetWidth - GuacamoleUI.touchMenu.offsetWidth) / 2
+
+    function positionCentered(element) {
+        element.style.left =
+            ((GuacamoleUI.viewport.offsetWidth - element.offsetWidth) / 2
             + window.pageXOffset)
             + "px";
 
-        GuacamoleUI.touchMenu.style.top =
-            ((GuacamoleUI.viewport.offsetHeight - GuacamoleUI.touchMenu.offsetHeight) / 2
+        element.style.top =
+            ((GuacamoleUI.viewport.offsetHeight - element.offsetHeight) / 2
             + window.pageYOffset)
             + "px";
+    }
 
+    GuacamoleUI.showTouchMenu = function() {
+        positionCentered(GuacamoleUI.touchMenu);
         GuacamoleUI.touchMenu.style.visibility = "visible";
-        
+    };
+
+    GuacamoleUI.hideTouchClipboard = function() {
+        GuacamoleUI.touchClipboard.blur();
+        GuacamoleUI.containers.touchClipboard.style.visibility = "hidden";
+    };
+
+    GuacamoleUI.showTouchClipboard = function() {
+        positionCentered(GuacamoleUI.containers.touchClipboard);
+        GuacamoleUI.containers.touchClipboard.style.visibility = "visible";
     };
 
     GuacamoleUI.shadeMenu = function() {
@@ -237,8 +253,8 @@ var GuacamoleUI = {
     };
 
     GuacamoleUI.buttons.touchShowClipboard.onclick = function() {
-        // FIXME: Implement
-        alert("Not yet implemented... Sorry.");
+        GuacamoleUI.hideTouchMenu();
+        GuacamoleUI.showTouchClipboard();
     };
 
     // Show/Hide keyboard
@@ -296,8 +312,17 @@ var GuacamoleUI = {
     GuacamoleUI.buttons.logout.onclick =
     GuacamoleUI.buttons.touchLogout.onclick =
         function() {
-            window.location.href = "logout";
-            GuacamoleUI.hideTouchMenu();
+
+            // Logout after warning user about session disconnect
+            if (confirm(GuacamoleUI.LOGOUT_PROMPT)) {
+                if(1 == window.SELF_CLOSE){
+                    window.close();
+                }else{
+                    window.location.href = "logout";
+                    GuacamoleUI.hideTouchMenu();
+                }
+            }
+            
         };
 
     // Timeouts for detecting if users wants menu to open or close
@@ -402,6 +427,7 @@ var GuacamoleUI = {
         // Close menu if shown
         GuacamoleUI.shadeMenu();
         GuacamoleUI.hideTouchMenu();
+        GuacamoleUI.hideTouchClipboard();
         
         // Record touch location
         if (e.touches.length == 1) {
@@ -439,7 +465,7 @@ var GuacamoleUI = {
     };
 
     // On-screen keyboard
-    GuacamoleUI.keyboard = new Guacamole.OnScreenKeyboard("layouts/en-us-qwerty-mobile.xml");
+    GuacamoleUI.keyboard = new Guacamole.OnScreenKeyboard("layouts/en-us-qwerty.xml");
     GuacamoleUI.containers.keyboard.appendChild(GuacamoleUI.keyboard.getElement());
 
     // Function for automatically updating keyboard size
@@ -502,6 +528,8 @@ GuacamoleUI.attach = function(guac) {
 
     // Mouse
     var mouse = new Guacamole.Mouse(guac_display);
+    var touch = new Guacamole.Mouse.Touchpad(guac_display);
+    touch.onmousedown = touch.onmouseup = touch.onmousemove =
     mouse.onmousedown = mouse.onmouseup = mouse.onmousemove =
         function(mouseState) {
        
@@ -702,23 +730,35 @@ GuacamoleUI.attach = function(guac) {
     GuacamoleUI.clipboard.onchange = function() {
 
         var text = GuacamoleUI.clipboard.value;
+        GuacamoleUI.touchClipboard.value = text;
+        guac.setClipboard(text);
+
+    };
+
+    GuacamoleUI.touchClipboard.onchange = function() {
+
+        var text = GuacamoleUI.touchClipboard.value;
+        GuacamoleUI.clipboard.value = text;
         guac.setClipboard(text);
 
     };
 
     // Ignore keypresses when clipboard is focused
-    GuacamoleUI.clipboard.onfocus = function() {
+    GuacamoleUI.clipboard.onfocus =
+    GuacamoleUI.touchClipboard.onfocus = function() {
         disableKeyboard();
     };
 
     // Capture keypresses when clipboard is not focused
-    GuacamoleUI.clipboard.onblur = function() {
+    GuacamoleUI.clipboard.onblur =
+    GuacamoleUI.touchClipboard.onblur = function() {
         enableKeyboard();
     };
 
     // Server copy handler
     guac.onclipboard = function(data) {
         GuacamoleUI.clipboard.value = data;
+        GuacamoleUI.touchClipboard.value = data;
     };
 
     GuacamoleUI.keyboard.onkeydown = function(keysym) {
@@ -744,4 +784,4 @@ GuacamoleUI.attach = function(guac) {
         guac.sendKeyEvent(0, KEYSYM_CTRL);
     };
 
-};
\ No newline at end of file
+};