Translated using Weblate (Slovenian)
[phpmyadmin.git] / js / keyhandler.js
blobddc581fd37a4189bb01ea11dec543a7ba6ed624a
2 // global var that holds: 0- if ctrl key is not pressed 1- if ctrl key is pressed
3 var ctrlKeyHistory = 0;
5 /**
6   * Allows moving around inputs/select by Ctrl+arrows
7   *
8   * @param object   event data
9   */
10 function onKeyDownArrowsHandler (event) {
11     var e = event || window.event;
13     var o = (e.srcElement || e.target);
14     if (!o) {
15         return;
16     }
17     if (o.tagName !== 'TEXTAREA' && o.tagName !== 'INPUT' && o.tagName !== 'SELECT') {
18         return;
19     }
20     if ((e.which !== 17) && (e.which !== 37) && (e.which !== 38) && (e.which !== 39) && (e.which !== 40)) {
21         return;
22     }
23     if (!o.id) {
24         return;
25     }
27     if (e.type === 'keyup') {
28         if (e.which === 17) {
29             ctrlKeyHistory = 0;
30         }
31         return;
32     } else if (e.type === 'keydown') {
33         if (e.which === 17) {
34             ctrlKeyHistory = 1;
35         }
36     }
38     if (ctrlKeyHistory !== 1) {
39         return;
40     }
42     e.preventDefault();
44     var pos = o.id.split('_');
45     if (pos[0] !== 'field' || typeof pos[2] === 'undefined') {
46         return;
47     }
49     var x = pos[2];
50     var y = pos[1];
52     switch (e.keyCode) {
53     case 38:
54         // up
55         y--;
56         break;
57     case 40:
58         // down
59         y++;
60         break;
61     case 37:
62         // left
63         x--;
64         break;
65     case 39:
66         // right
67         x++;
68         break;
69     default:
70         return;
71     }
73     var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox/') > -1;
75     var id = 'field_' + y + '_' + x;
77     var nO = document.getElementById(id);
78     if (! nO) {
79         id = 'field_' + y + '_' + x + '_0';
80         nO = document.getElementById(id);
81     }
83     // skip non existent fields
84     if (! nO) {
85         return;
86     }
88     // for firefox select tag
89     var lvalue = o.selectedIndex;
90     var nOvalue = nO.selectedIndex;
92     nO.focus();
94     if (isFirefox) {
95         var ffcheck = 0;
96         var ffversion;
97         for (ffversion = 3 ; ffversion < 25 ; ffversion++) {
98             var isFirefoxV24 = navigator.userAgent.toLowerCase().indexOf('firefox/' + ffversion) > -1;
99             if (isFirefoxV24) {
100                 ffcheck = 1;
101                 break;
102             }
103         }
104         if (ffcheck === 1) {
105             if (e.which === 38 || e.which === 37) {
106                 nOvalue++;
107             } else if (e.which === 40 || e.which === 39) {
108                 nOvalue--;
109             }
110             nO.selectedIndex = nOvalue;
111         } else {
112             if (e.which === 38 || e.which === 37) {
113                 lvalue++;
114             } else if (e.which === 40 || e.which === 39) {
115                 lvalue--;
116             }
117             o.selectedIndex = lvalue;
118         }
119     }
121     if (nO.tagName !== 'SELECT') {
122         nO.select();
123     }
124     e.returnValue = false;
127 AJAX.registerTeardown('keyhandler.js', function () {
128     $(document).off('keydown keyup', '#table_columns');
129     $(document).off('keydown keyup', 'table.insertRowTable');
132 AJAX.registerOnload('keyhandler.js', function () {
133     $(document).on('keydown keyup', '#table_columns', function (event) {
134         onKeyDownArrowsHandler(event.originalEvent);
135     });
136     $(document).on('keydown keyup', 'table.insertRowTable', function (event) {
137         onKeyDownArrowsHandler(event.originalEvent);
138     });