Improve storing columns on designer and add a translation
[phpmyadmin.git] / js / keyhandler.js
bloba5e459fa1a3eaee0b5e8cf63723c1e79bd073236
1 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 // global var that holds: 0- if ctrl key is not pressed 1- if ctrl key is pressed
4 var ctrlKeyHistory = 0;
6 /**
7   * Allows moving around inputs/select by Ctrl+arrows
8   *
9   * @param object   event data
10   */
11 function onKeyDownArrowsHandler (e) {
12     e = e || window.event;
14     var o = (e.srcElement || e.target);
15     if (!o) {
16         return;
17     }
18     if (o.tagName !== 'TEXTAREA' && o.tagName !== 'INPUT' && o.tagName !== 'SELECT') {
19         return;
20     }
21     if ((e.which !== 17) && (e.which !== 37) && (e.which !== 38) && (e.which !== 39) && (e.which !== 40)) {
22         return;
23     }
24     if (!o.id) {
25         return;
26     }
28     if (e.type === 'keyup') {
29         if (e.which === 17) {
30             ctrlKeyHistory = 0;
31         }
32         return;
33     } else if (e.type === 'keydown') {
34         if (e.which === 17) {
35             ctrlKeyHistory = 1;
36         }
37     }
39     if (ctrlKeyHistory !== 1) {
40         return;
41     }
43     e.preventDefault();
45     var pos = o.id.split('_');
46     if (pos[0] !== 'field' || typeof pos[2] === 'undefined') {
47         return;
48     }
50     var x = pos[2];
51     var y = pos[1];
53     switch (e.keyCode) {
54     case 38:
55         // up
56         y--;
57         break;
58     case 40:
59         // down
60         y++;
61         break;
62     case 37:
63         // left
64         x--;
65         break;
66     case 39:
67         // right
68         x++;
69         break;
70     default:
71         return;
72     }
74     var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox/') > -1;
76     var id = 'field_' + y + '_' + x;
78     var nO = document.getElementById(id);
79     if (! nO) {
80         id = 'field_' + y + '_' + x + '_0';
81         nO = document.getElementById(id);
82     }
84     // skip non existent fields
85     if (! nO) {
86         return;
87     }
89     // for firefox select tag
90     var lvalue = o.selectedIndex;
91     var nOvalue = nO.selectedIndex;
93     nO.focus();
95     if (is_firefox) {
96         var ffcheck = 0;
97         var ffversion;
98         for (ffversion = 3 ; ffversion < 25 ; ffversion++) {
99             var is_firefox_v_24 = navigator.userAgent.toLowerCase().indexOf('firefox/' + ffversion) > -1;
100             if (is_firefox_v_24) {
101                 ffcheck = 1;
102                 break;
103             }
104         }
105         if (ffcheck === 1) {
106             if (e.which === 38 || e.which === 37) {
107                 nOvalue++;
108             } else if (e.which === 40 || e.which === 39) {
109                 nOvalue--;
110             }
111             nO.selectedIndex = nOvalue;
112         } else {
113             if (e.which === 38 || e.which === 37) {
114                 lvalue++;
115             } else if (e.which === 40 || e.which === 39) {
116                 lvalue--;
117             }
118             o.selectedIndex = lvalue;
119         }
120     }
122     if (nO.tagName !== 'SELECT') {
123         nO.select();
124     }
125     e.returnValue = false;
128 AJAX.registerTeardown('keyhandler.js', function () {
129     $(document).off('keydown keyup', '#table_columns');
130     $(document).off('keydown keyup', 'table.insertRowTable');
133 AJAX.registerOnload('keyhandler.js', function () {
134     $(document).on('keydown keyup', '#table_columns', function (event) {
135         onKeyDownArrowsHandler(event.originalEvent);
136     });
137     $(document).on('keydown keyup', 'table.insertRowTable', function (event) {
138         onKeyDownArrowsHandler(event.originalEvent);
139     });