* for the specific language governing rights and limitations under the
* License.
*
- * The Original Code is guacamole-common-js.
+ * The Original Code is guac-common-js.
*
* The Initial Developer of the Original Code is
* Michael Jumper.
*/
Guacamole.OnScreenKeyboard = function(url) {
+ var on_screen_keyboard = this;
+
var scaledElements = [];
var modifiers = {};
// Create keyboard
var keyboard = document.createElement("div");
- keyboard.className = "guacamole-keyboard";
+ keyboard.className = "guac-keyboard";
// Retrieve keyboard XML
var xmlhttprequest = new XMLHttpRequest();
function parse_row(e) {
var row = document.createElement("div");
- row.className = "guacamole-keyboard-row";
+ row.className = "guac-keyboard-row";
parseChildren(e, {
// Create element
var gap = document.createElement("div");
- gap.className = "guacamole-keyboard-gap";
+ gap.className = "guac-keyboard-gap";
// Set gap size
var gap_units = 1;
// Create element
var key_element = document.createElement("div");
- key_element.className = "guacamole-keyboard-key";
+ key_element.className = "guac-keyboard-key";
// Position keys using container div
var key_container_element = document.createElement("div");
- key_container_element.className = "guacamole-keyboard-key-container";
+ key_container_element.className = "guac-keyboard-key-container";
key_container_element.appendChild(key_element);
// Create key
// Create cap
var cap = new Guacamole.OnScreenKeyboard.Cap(content,
keysym ? keysym.value : null);
+
+ if (modifier)
+ cap.modifier = modifier.value;
// Create cap element
var cap_element = document.createElement("div");
- cap_element.className = "guacamole-keyboard-cap";
+ cap_element.className = "guac-keyboard-cap";
cap_element.textContent = content;
key_element.appendChild(cap_element);
var requirements = required.value.split(",");
for (var i=0; i<requirements.length; i++) {
modifierValue |= getModifier(requirements[i]);
- cap_element.className += " guacamole-keyboard-requires-" + requirements[i];
+ cap_element.classList.add("guac-keyboard-requires-" + requirements[i]);
+ key_element.classList.add("guac-keyboard-uses-" + requirements[i]);
}
}
scaledElements.push(new ScaledElement(key_container_element, key_units, 1, true));
row.appendChild(key_container_element);
+ // Set up click handler for key
+ key_element.onclick = function() {
+
+ // Get current cap based on modifier state
+ var cap = key.getCap(on_screen_keyboard.modifiers);
+
+ // Update modifier state
+ if (cap.modifier) {
+ on_screen_keyboard.modifiers |= getModifier(cap.modifier);
+ keyboard.classList.add("guac-keyboard-modifier-" + cap.modifier);
+ }
+
+ // TODO: Send key event
+
+ };
+
}
});
function parse_column(e) {
var col = document.createElement("div");
- col.className = "guacamole-keyboard-column";
+ col.className = "guac-keyboard-column";
var align = col.attributes["align"];
return false;
};
+ /**
+ * State of all modifiers.
+ */
+ this.modifiers = 0;
this.onkeypressed = null;
this.onkeyreleased = null;
this.caps = {};
/**
- * The currently active cap as chosen by select().
- */
- this.currentCap = null;
-
- /**
* Bit mask with all modifiers that affect this key set.
*/
this.modifierMask = 0;
/**
- * Given the bitwise OR of all active modifiers, displays the key cap
+ * Given the bitwise OR of all active modifiers, returns the key cap
* which applies.
*/
- this.select = function(modifier) {
-
- key.currentCap = key.caps[modifier & key.modifierMask];
-
+ this.getCap = function(modifier) {
+ return key.caps[modifier & key.modifierMask];
};
}
/**
* Modifier represented by this keycap
*/
- this.modifier = 0;
+ this.modifier = null;
/**
* The text to be displayed within this keycap