aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/js/keyhandler.js
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/js/keyhandler.js
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/js/keyhandler.js')
-rw-r--r--srcs/phpmyadmin/js/keyhandler.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/js/keyhandler.js b/srcs/phpmyadmin/js/keyhandler.js
new file mode 100644
index 0000000..410f8d4
--- /dev/null
+++ b/srcs/phpmyadmin/js/keyhandler.js
@@ -0,0 +1,140 @@
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+
+// global var that holds: 0- if ctrl key is not pressed 1- if ctrl key is pressed
+var ctrlKeyHistory = 0;
+
+/**
+ * Allows moving around inputs/select by Ctrl+arrows
+ *
+ * @param object event data
+ */
+function onKeyDownArrowsHandler (event) {
+ var e = event || window.event;
+
+ var o = (e.srcElement || e.target);
+ if (!o) {
+ return;
+ }
+ if (o.tagName !== 'TEXTAREA' && o.tagName !== 'INPUT' && o.tagName !== 'SELECT') {
+ return;
+ }
+ if ((e.which !== 17) && (e.which !== 37) && (e.which !== 38) && (e.which !== 39) && (e.which !== 40)) {
+ return;
+ }
+ if (!o.id) {
+ return;
+ }
+
+ if (e.type === 'keyup') {
+ if (e.which === 17) {
+ ctrlKeyHistory = 0;
+ }
+ return;
+ } else if (e.type === 'keydown') {
+ if (e.which === 17) {
+ ctrlKeyHistory = 1;
+ }
+ }
+
+ if (ctrlKeyHistory !== 1) {
+ return;
+ }
+
+ e.preventDefault();
+
+ var pos = o.id.split('_');
+ if (pos[0] !== 'field' || typeof pos[2] === 'undefined') {
+ return;
+ }
+
+ var x = pos[2];
+ var y = pos[1];
+
+ switch (e.keyCode) {
+ case 38:
+ // up
+ y--;
+ break;
+ case 40:
+ // down
+ y++;
+ break;
+ case 37:
+ // left
+ x--;
+ break;
+ case 39:
+ // right
+ x++;
+ break;
+ default:
+ return;
+ }
+
+ var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox/') > -1;
+
+ var id = 'field_' + y + '_' + x;
+
+ var nO = document.getElementById(id);
+ if (! nO) {
+ id = 'field_' + y + '_' + x + '_0';
+ nO = document.getElementById(id);
+ }
+
+ // skip non existent fields
+ if (! nO) {
+ return;
+ }
+
+ // for firefox select tag
+ var lvalue = o.selectedIndex;
+ var nOvalue = nO.selectedIndex;
+
+ nO.focus();
+
+ if (isFirefox) {
+ var ffcheck = 0;
+ var ffversion;
+ for (ffversion = 3 ; ffversion < 25 ; ffversion++) {
+ var isFirefoxV24 = navigator.userAgent.toLowerCase().indexOf('firefox/' + ffversion) > -1;
+ if (isFirefoxV24) {
+ ffcheck = 1;
+ break;
+ }
+ }
+ if (ffcheck === 1) {
+ if (e.which === 38 || e.which === 37) {
+ nOvalue++;
+ } else if (e.which === 40 || e.which === 39) {
+ nOvalue--;
+ }
+ nO.selectedIndex = nOvalue;
+ } else {
+ if (e.which === 38 || e.which === 37) {
+ lvalue++;
+ } else if (e.which === 40 || e.which === 39) {
+ lvalue--;
+ }
+ o.selectedIndex = lvalue;
+ }
+ }
+
+ if (nO.tagName !== 'SELECT') {
+ nO.select();
+ }
+ e.returnValue = false;
+}
+
+AJAX.registerTeardown('keyhandler.js', function () {
+ $(document).off('keydown keyup', '#table_columns');
+ $(document).off('keydown keyup', 'table.insertRowTable');
+});
+
+AJAX.registerOnload('keyhandler.js', function () {
+ $(document).on('keydown keyup', '#table_columns', function (event) {
+ onKeyDownArrowsHandler(event.originalEvent);
+ });
+ $(document).on('keydown keyup', 'table.insertRowTable', function (event) {
+ onKeyDownArrowsHandler(event.originalEvent);
+ });
+});