summaryrefslogtreecommitdiff
path: root/content/handlers/javascript
diff options
context:
space:
mode:
authorMichael Drake <michael.drake@codethink.co.uk>2019-12-01 20:13:02 +0000
committerMichael Drake <michael.drake@codethink.co.uk>2019-12-01 21:25:46 +0000
commit23d413c5619b8be0792fb88f2934ec4b423cdf5a (patch)
tree1209b07596d3bb31bf29553e21062e6dd4476cdc /content/handlers/javascript
parent7e6723e27a5bc61d6be9401cd41b644c97bae1e6 (diff)
downloadnetsurf-23d413c5619b8be0792fb88f2934ec4b423cdf5a.tar.gz
netsurf-23d413c5619b8be0792fb88f2934ec4b423cdf5a.tar.bz2
JavaScript: Add KeyboardEvent bindings.
Diffstat (limited to 'content/handlers/javascript')
-rw-r--r--content/handlers/javascript/duktape/KeyboardEvent.bnd142
-rw-r--r--content/handlers/javascript/duktape/netsurf.bnd2
2 files changed, 143 insertions, 1 deletions
diff --git a/content/handlers/javascript/duktape/KeyboardEvent.bnd b/content/handlers/javascript/duktape/KeyboardEvent.bnd
new file mode 100644
index 000000000..67c4564c9
--- /dev/null
+++ b/content/handlers/javascript/duktape/KeyboardEvent.bnd
@@ -0,0 +1,142 @@
+/* Binding for browser using duktape and libdom
+ *
+ * Copyright 2019 Michael Drake <tlsa@netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * Released under the terms of the MIT License,
+ * http://www.opensource.org/licenses/mit-license
+ */
+
+init KeyboardEvent (struct dom_keyboard_event *evt::ui_event);
+
+getter KeyboardEvent::key ()
+%{
+ dom_exception err;
+ dom_string *key;
+
+ err = dom_keyboard_event_get_key(priv->parent.parent.evt, &key);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_lstring(ctx, dom_string_data(key), dom_string_length(key));
+ dom_string_unref(key);
+ return 1;
+%}
+
+getter KeyboardEvent::code ()
+%{
+ dom_exception err;
+ dom_string *code;
+
+ err = dom_keyboard_event_get_code(priv->parent.parent.evt, &code);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_lstring(ctx, dom_string_data(code), dom_string_length(code));
+ dom_string_unref(code);
+ return 1;
+%}
+
+getter KeyboardEvent::location ()
+%{
+ dom_exception err;
+ dom_key_location location;
+
+ err = dom_keyboard_event_get_location(priv->parent.parent.evt,
+ &location);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_uint(ctx, (duk_uint_t) location);
+ return 1;
+%}
+
+getter KeyboardEvent::ctrlKey ()
+%{
+ dom_exception err;
+ bool ctrl_key;
+
+ err = dom_keyboard_event_get_ctrl_key(priv->parent.parent.evt,
+ &ctrl_key);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_boolean(ctx, (duk_bool_t) ctrl_key);
+ return 1;
+%}
+
+getter KeyboardEvent::shiftKey ()
+%{
+ dom_exception err;
+ bool shift_key;
+
+ err = dom_keyboard_event_get_shift_key(priv->parent.parent.evt,
+ &shift_key);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_boolean(ctx, (duk_bool_t) shift_key);
+ return 1;
+%}
+
+getter KeyboardEvent::altKey ()
+%{
+ dom_exception err;
+ bool alt_key;
+
+ err = dom_keyboard_event_get_alt_key(priv->parent.parent.evt,
+ &alt_key);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_boolean(ctx, (duk_bool_t) alt_key);
+ return 1;
+%}
+
+getter KeyboardEvent::metaKey ()
+%{
+ dom_exception err;
+ bool meta_key;
+
+ err = dom_keyboard_event_get_meta_key(priv->parent.parent.evt,
+ &meta_key);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_boolean(ctx, (duk_bool_t) meta_key);
+ return 1;
+%}
+
+method KeyboardEvent::getModifierState ()
+%{
+ dom_string *modifier;
+ dom_exception err;
+ duk_size_t slen;
+ const char *s;
+ bool state;
+
+ s = duk_safe_to_lstring(ctx, 0, &slen);
+ err = dom_string_create((const uint8_t *)s, slen, &modifier);
+ duk_pop(ctx);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ err = dom_keyboard_event_get_modifier_state(priv->parent.parent.evt,
+ modifier, &state);
+ dom_string_unref(modifier);
+ if (err != DOM_NO_ERR) {
+ return 0;
+ }
+
+ duk_push_boolean(ctx, (duk_bool_t) state);
+ return 1;
+%}
diff --git a/content/handlers/javascript/duktape/netsurf.bnd b/content/handlers/javascript/duktape/netsurf.bnd
index 2a56cccb5..628b2a324 100644
--- a/content/handlers/javascript/duktape/netsurf.bnd
+++ b/content/handlers/javascript/duktape/netsurf.bnd
@@ -68,6 +68,7 @@ struct dom_html_br_element;
/* events */
#include "Event.bnd"
+#include "KeyboardEvent.bnd"
init MutationEvent(struct dom_mutation_event *evt::evt);
init UIEvent(struct dom_ui_event *evt::evt);
@@ -76,7 +77,6 @@ init MutationNameEvent(struct dom_mutation_name_event *evt::evt);
init MouseWheelEvent(struct dom_mouse_wheel_event *evt::evt);
init MouseMultiWheelEvent(struct dom_mouse_multi_wheel_event *evt::evt);
init MouseEvent(struct dom_mouse_event *evt::evt);
-init KeyboardEvent(struct dom_keyboard_event *evt::evt);
init DocumentEvent(struct dom_document_event *evt::evt);
init CustomEvent(struct dom_custom_event *evt::evt);
init CompositionEvent(struct dom_ui_event *evt::evt);