diff --git a/guacamole/src/main/webapp/app/osk/directives/guacOsk.js b/guacamole/src/main/webapp/app/osk/directives/guacOsk.js index decb06f8d..bca9bc9b4 100644 --- a/guacamole/src/main/webapp/app/osk/directives/guacOsk.js +++ b/guacamole/src/main/webapp/app/osk/directives/guacOsk.js @@ -40,8 +40,13 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { }, templateUrl: 'app/osk/templates/guacOsk.html', - controller: ['$scope', '$rootScope', '$window', '$element', - function guacOsk($scope, $rootScope, $window, $element) { + controller: ['$scope', '$injector', '$element', + function guacOsk($scope, $injector, $element) { + + // Required services + var $http = $injector.get('$http'); + var $rootScope = $injector.get('$rootScope'); + var cacheService = $injector.get('cacheService'); /** * The current on-screen keyboard, if any. @@ -67,7 +72,7 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { }; // Set layout whenever URL changes - $scope.$watch("layout", function setLayout(layout) { + $scope.$watch("layout", function setLayout(url) { // Remove current keyboard if (keyboard) { @@ -76,24 +81,40 @@ angular.module('osk').directive('guacOsk', [function guacOsk() { } // Load new keyboard - if (layout) { + if (url) { - // Add OSK element - keyboard = new Guacamole.OnScreenKeyboard(layout); - main.appendChild(keyboard.getElement()); + // Retrieve layout JSON + $http({ + cache : cacheService.languages, + method : 'GET', + url : url + }) - // Init size - keyboard.resize(main.offsetWidth); + // Build OSK with retrieved layout + .success(function layoutRetrieved(layout) { - // Broadcast keydown for each key pressed - keyboard.onkeydown = function(keysym) { - $rootScope.$broadcast('guacSyntheticKeydown', keysym); - }; - - // Broadcast keydown for each key released - keyboard.onkeyup = function(keysym) { - $rootScope.$broadcast('guacSyntheticKeyup', keysym); - }; + // Abort if the layout changed while we were waiting for a response + if ($scope.layout !== url) + return; + + // Add OSK element + keyboard = new Guacamole.OnScreenKeyboard(layout); + main.appendChild(keyboard.getElement()); + + // Init size + keyboard.resize(main.offsetWidth); + + // Broadcast keydown for each key pressed + keyboard.onkeydown = function(keysym) { + $rootScope.$broadcast('guacSyntheticKeydown', keysym); + }; + + // Broadcast keydown for each key released + keyboard.onkeyup = function(keysym) { + $rootScope.$broadcast('guacSyntheticKeyup', keysym); + }; + + }); } diff --git a/guacamole/src/main/webapp/layouts/en-us-qwerty-mobile.xml b/guacamole/src/main/webapp/layouts/en-us-qwerty-mobile.xml deleted file mode 100644 index a61ec4c2b..000000000 --- a/guacamole/src/main/webapp/layouts/en-us-qwerty-mobile.xml +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - - - - Tab - - - - q - 1 - Q - q - - - - w - 2 - W - w - - - - e - 3 - E - e - - - - r - 4 - R - r - - - - t - 5 - T - t - - - - y - 6 - Y - y - - - - u - 7 - U - u - - - - i - 8 - I - i - - - - o - 9 - O - o - - - - p - 0 - P - p - - - - [ - { - - - - ] - } - - - - Back - - - - - - - - ?123 - - - - a - # - A - a - - - - s - $ - S - s - - - - d - % - D - d - - - - f - & - F - f - - - - g - * - G - g - - - - h - - - H - h - - - - j - + - J - j - - - - k - ( - K - k - - - - l - ) - L - l - - - - ; - : - - - - ' - " - - - - Enter - - - - - - - - Shift - - - - z - < - Z - z - - - - x - > - X - x - - - - c - = - C - c - - - - v - ' - V - v - - - - b - ; - B - b - - - - n - , - N - n - - - - m - . - M - m - - - - , - ! - ! - ! - - - - . - ? - ? - ? - - - - / - ? - - - - Shift - - - - - - - - Ctrl - - - - Super - - - - Alt - - - - - - - - Alt - - - - Menu - - - - Ctrl - - - diff --git a/guacamole/src/main/webapp/layouts/en-us-qwerty.xml b/guacamole/src/main/webapp/layouts/en-us-qwerty.xml deleted file mode 100644 index 8cf8bb5e0..000000000 --- a/guacamole/src/main/webapp/layouts/en-us-qwerty.xml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - - - - - Esc - - - - F1 - - - - F2 - - - - F3 - - - - F4 - - - - F5 - - - - F6 - - - - F7 - - - - F8 - - - - F9 - - - - F10 - - - - F11 - - - - F12 - - - - - - - - - ` - ~ - - - - 1 - ! - - - - 2 - @ - - - - 3 - # - - - - 4 - $ - - - - 5 - % - - - - 6 - ^ - - - - 7 - & - - - - 8 - * - - - - 9 - ( - - - - 0 - ) - - - - - - _ - - - - = - + - - - - Back - - - - - - - - Tab - - - - q - Q - Q - q - - - - w - W - W - w - - - - e - E - E - e - - - - r - R - R - r - - - - t - T - T - t - - - - y - Y - Y - y - - - - u - U - U - u - - - - i - I - I - i - - - - o - O - O - o - - - - p - P - P - p - - - - [ - { - - - - ] - } - - - - \ - | - - - - - - - - Caps - - - - a - A - A - a - - - - s - S - S - s - - - - d - D - D - d - - - - f - F - F - f - - - - g - G - G - g - - - - h - H - H - h - - - - j - J - J - j - - - - k - K - K - k - - - - l - L - L - l - - - - ; - : - - - - ' - " - - - - Enter - - - - - - - - Shift - - - - z - Z - Z - z - - - - x - X - X - x - - - - c - C - C - c - - - - v - V - V - v - - - - b - B - B - b - - - - n - N - N - n - - - - m - M - M - m - - - - , - < - - - - . - > - - - - / - ? - - - - Shift - - - - - - - - Ctrl - - - - Super - - - - Alt - - - - - - - - Alt - - - - Menu - - - - Ctrl - - - - - - - - - - - - Ins - - - - Home - - - - PgUp - - - - - - Del - - - - End - - - - PgDn - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/guacamole/src/main/webapp/translations/en_US.json b/guacamole/src/main/webapp/translations/en_US.json index 2ea7b6f78..79e5a6db6 100644 --- a/guacamole/src/main/webapp/translations/en_US.json +++ b/guacamole/src/main/webapp/translations/en_US.json @@ -117,7 +117,7 @@ "TEXT_RECONNECT_COUNTDOWN" : "Reconnecting in {REMAINING} {REMAINING, plural, one{second} other{seconds}}...", "TEXT_FILE_TRANSFER_PROGRESS" : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}", - "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.xml" + "URL_OSK_LAYOUT" : "layouts/en-us-qwerty.json" },