View | Details | Raw Unified | Return to bug 11035
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/lib/jquery/plugins/jquery.hotkeys.min.js (-19 lines)
Lines 1-19 Link Here
1
(function(jQuery){jQuery.fn.__bind__=jQuery.fn.bind;jQuery.fn.__unbind__=jQuery.fn.unbind;jQuery.fn.__find__=jQuery.fn.find;var hotkeys={version:'0.7.9',override:/keypress|keydown|keyup/g,triggersMap:{},specialKeys:{27:'esc',9:'tab',32:'space',13:'return',8:'backspace',145:'scroll',20:'capslock',144:'numlock',19:'pause',45:'insert',36:'home',46:'del',35:'end',33:'pageup',34:'pagedown',37:'left',38:'up',39:'right',40:'down',109:'-',112:'f1',113:'f2',114:'f3',115:'f4',116:'f5',117:'f6',118:'f7',119:'f8',120:'f9',121:'f10',122:'f11',123:'f12',191:'/'},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"},newTrigger:function(type,combi,callback){var result={};result[type]={};result[type][combi]={cb:callback,disableInInput:false};return result;}};hotkeys.specialKeys=jQuery.extend(hotkeys.specialKeys,{96:'0',97:'1',98:'2',99:'3',100:'4',101:'5',102:'6',103:'7',104:'8',105:'9',106:'*',107:'+',109:'-',110:'.',111:'/'});jQuery.fn.find=function(selector){this.query=selector;return jQuery.fn.__find__.apply(this,arguments);};jQuery.fn.unbind=function(type,combi,fn){if(jQuery.isFunction(combi)){fn=combi;combi=null;}
2
if(combi&&typeof combi==='string'){var selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();var hkTypes=type.split(' ');for(var x=0;x<hkTypes.length;x++){delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];}}
3
return this.__unbind__(type,fn);};jQuery.fn.bind=function(type,data,fn){var handle=type.match(hotkeys.override);if(jQuery.isFunction(data)||!handle){return this.__bind__(type,data,fn);}
4
else{var result=null,pass2jq=jQuery.trim(type.replace(hotkeys.override,''));if(pass2jq){result=this.__bind__(pass2jq,data,fn);}
5
if(typeof data==="string"){data={'combi':data};}
6
if(data.combi){for(var x=0;x<handle.length;x++){var eventType=handle[x];var combi=data.combi.toLowerCase(),trigger=hotkeys.newTrigger(eventType,combi,fn),selectorId=((this.prevObject&&this.prevObject.query)||(this[0].id&&this[0].id)||this[0]).toString();trigger[eventType][combi].disableInInput=data.disableInInput;if(!hotkeys.triggersMap[selectorId]){hotkeys.triggersMap[selectorId]=trigger;}
7
else if(!hotkeys.triggersMap[selectorId][eventType]){hotkeys.triggersMap[selectorId][eventType]=trigger[eventType];}
8
var mapPoint=hotkeys.triggersMap[selectorId][eventType][combi];if(!mapPoint){hotkeys.triggersMap[selectorId][eventType][combi]=[trigger[eventType][combi]];}
9
else if(mapPoint.constructor!==Array){hotkeys.triggersMap[selectorId][eventType][combi]=[mapPoint];}
10
else{hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length]=trigger[eventType][combi];}
11
this.each(function(){var jqElem=jQuery(this);if(jqElem.attr('hkId')&&jqElem.attr('hkId')!==selectorId){selectorId=jqElem.attr('hkId')+";"+selectorId;}
12
jqElem.attr('hkId',selectorId);});result=this.__bind__(handle.join(' '),data,hotkeys.handler)}}
13
return result;}};hotkeys.findElement=function(elem){if(!jQuery(elem).attr('hkId')){if(jQuery.browser.opera||jQuery.browser.safari){while(!jQuery(elem).attr('hkId')&&elem.parentNode){elem=elem.parentNode;}}}
14
return elem;};hotkeys.handler=function(event){var target=hotkeys.findElement(event.currentTarget),jTarget=jQuery(target),ids=jTarget.attr('hkId');if(ids){ids=ids.split(';');var code=event.which,type=event.type,special=hotkeys.specialKeys[code],character=!special&&String.fromCharCode(code).toLowerCase(),shift=event.shiftKey,ctrl=event.ctrlKey,alt=event.altKey||event.originalEvent.altKey,mapPoint=null;for(var x=0;x<ids.length;x++){if(hotkeys.triggersMap[ids[x]][type]){mapPoint=hotkeys.triggersMap[ids[x]][type];break;}}
15
if(mapPoint){var trigger;if(!shift&&!ctrl&&!alt){trigger=mapPoint[special]||(character&&mapPoint[character]);}
16
else{var modif='';if(alt)modif+='alt+';if(ctrl)modif+='ctrl+';if(shift)modif+='shift+';trigger=mapPoint[modif+special];if(!trigger){if(character){trigger=mapPoint[modif+character]||mapPoint[modif+hotkeys.shiftNums[character]]||(modif==='shift+'&&mapPoint[hotkeys.shiftNums[character]]);}}}
17
if(trigger){var result=false;for(var x=0;x<trigger.length;x++){if(trigger[x].disableInInput){var elem=jQuery(event.target);if(jTarget.is("input")||jTarget.is("textarea")||jTarget.is("select")||elem.is("input")||elem.is("textarea")||elem.is("select")){return true;}}
18
result=result||trigger[x].cb.apply(this,[event]);}
19
return result;}}}};window.hotkeys=hotkeys;return jQuery;})(jQuery);
(-)a/koha-tmpl/intranet-tmpl/lib/jquery/plugins/shortcut.js (+223 lines)
Line 0 Link Here
1
/**
2
 * http://www.openjs.com/scripts/events/keyboard_shortcuts/
3
 * Version : 2.01.B
4
 * By Binny V A
5
 * License : BSD
6
 */
7
shortcut = {
8
    'all_shortcuts':{},//All the shortcuts are stored in this array
9
    'add': function(shortcut_combination,callback,opt) {
10
        //Provide a set of default options
11
        var default_options = {
12
            'type':'keydown',
13
            'propagate':false,
14
            'disable_in_input':false,
15
            'target':document,
16
            'keycode':false
17
        }
18
        if(!opt) opt = default_options;
19
        else {
20
            for(var dfo in default_options) {
21
                if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
22
            }
23
        }
24
25
        var ele = opt.target;
26
        if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
27
        var ths = this;
28
        shortcut_combination = shortcut_combination.toLowerCase();
29
30
        //The function to be called at keypress
31
        var func = function(e) {
32
            e = e || window.event;
33
34
            if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
35
                var element;
36
                if(e.target) element=e.target;
37
                else if(e.srcElement) element=e.srcElement;
38
                if(element.nodeType==3) element=element.parentNode;
39
40
                if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
41
            }
42
43
            //Find Which key is pressed
44
            if (e.keyCode) code = e.keyCode;
45
            else if (e.which) code = e.which;
46
            var character = String.fromCharCode(code).toLowerCase();
47
48
            if(code == 188) character=","; //If the user presses , when the type is onkeydown
49
            if(code == 190) character="."; //If the user presses , when the type is onkeydown
50
51
            var keys = shortcut_combination.split("+");
52
            //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
53
            var kp = 0;
54
55
            //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
56
            var shift_nums = {
57
                "`":"~",
58
                "1":"!",
59
                "2":"@",
60
                "3":"#",
61
                "4":"$",
62
                "5":"%",
63
                "6":"^",
64
                "7":"&",
65
                "8":"*",
66
                "9":"(",
67
                "0":")",
68
                "-":"_",
69
                "=":"+",
70
                ";":":",
71
                "'":"\"",
72
                ",":"<",
73
                ".":">",
74
                "/":"?",
75
                "\\":"|"
76
            }
77
            //Special Keys - and their codes
78
            var special_keys = {
79
                'esc':27,
80
                'escape':27,
81
                'tab':9,
82
                'space':32,
83
                'return':13,
84
                'enter':13,
85
                'backspace':8,
86
87
                'scrolllock':145,
88
                'scroll_lock':145,
89
                'scroll':145,
90
                'capslock':20,
91
                'caps_lock':20,
92
                'caps':20,
93
                'numlock':144,
94
                'num_lock':144,
95
                'num':144,
96
97
                'pause':19,
98
                'break':19,
99
100
                'insert':45,
101
                'home':36,
102
                'delete':46,
103
                'end':35,
104
105
                'pageup':33,
106
                'page_up':33,
107
                'pu':33,
108
109
                'pagedown':34,
110
                'page_down':34,
111
                'pd':34,
112
113
                'left':37,
114
                'up':38,
115
                'right':39,
116
                'down':40,
117
118
                'f1':112,
119
                'f2':113,
120
                'f3':114,
121
                'f4':115,
122
                'f5':116,
123
                'f6':117,
124
                'f7':118,
125
                'f8':119,
126
                'f9':120,
127
                'f10':121,
128
                'f11':122,
129
                'f12':123
130
            }
131
132
            var modifiers = {
133
                shift: { wanted:false, pressed:false},
134
                ctrl : { wanted:false, pressed:false},
135
                alt  : { wanted:false, pressed:false},
136
                meta : { wanted:false, pressed:false}   //Meta is Mac specific
137
            };
138
139
            if(e.ctrlKey)   modifiers.ctrl.pressed = true;
140
            if(e.shiftKey)  modifiers.shift.pressed = true;
141
            if(e.altKey)    modifiers.alt.pressed = true;
142
            if(e.metaKey)   modifiers.meta.pressed = true;
143
144
            for(var i=0; k=keys[i],i<keys.length; i++) {
145
                //Modifiers
146
                if(k == 'ctrl' || k == 'control') {
147
                    kp++;
148
                    modifiers.ctrl.wanted = true;
149
150
                } else if(k == 'shift') {
151
                    kp++;
152
                    modifiers.shift.wanted = true;
153
154
                } else if(k == 'alt') {
155
                    kp++;
156
                    modifiers.alt.wanted = true;
157
                } else if(k == 'meta') {
158
                    kp++;
159
                    modifiers.meta.wanted = true;
160
                } else if(k.length > 1) { //If it is a special key
161
                    if(special_keys[k] == code) kp++;
162
163
                } else if(opt['keycode']) {
164
                    if(opt['keycode'] == code) kp++;
165
166
                } else { //The special keys did not match
167
                    if(character == k) kp++;
168
                    else {
169
                        if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
170
                            character = shift_nums[character];
171
                            if(character == k) kp++;
172
                        }
173
                    }
174
                }
175
            }
176
177
            if(kp == keys.length &&
178
                        modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
179
                        modifiers.shift.pressed == modifiers.shift.wanted &&
180
                        modifiers.alt.pressed == modifiers.alt.wanted &&
181
                        modifiers.meta.pressed == modifiers.meta.wanted) {
182
                callback(e);
183
184
                if(!opt['propagate']) { //Stop the event
185
                    //e.cancelBubble is supported by IE - this will kill the bubbling process.
186
                    e.cancelBubble = true;
187
                    e.returnValue = false;
188
189
                    //e.stopPropagation works in Firefox.
190
                    if (e.stopPropagation) {
191
                        e.stopPropagation();
192
                        e.preventDefault();
193
                    }
194
                    return false;
195
                }
196
            }
197
        }
198
        this.all_shortcuts[shortcut_combination] = {
199
            'callback':func,
200
            'target':ele,
201
            'event': opt['type']
202
        };
203
        //Attach the function with the event
204
        if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
205
        else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
206
        else ele['on'+opt['type']] = func;
207
    },
208
209
    //Remove the shortcut - just specify the shortcut and I will remove the binding
210
    'remove':function(shortcut_combination) {
211
        shortcut_combination = shortcut_combination.toLowerCase();
212
        var binding = this.all_shortcuts[shortcut_combination];
213
        delete(this.all_shortcuts[shortcut_combination])
214
        if(!binding) return;
215
        var type = binding['event'];
216
        var ele = binding['target'];
217
        var callback = binding['callback'];
218
219
        if(ele.detachEvent) ele.detachEvent('on'+type, callback);
220
        else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
221
        else ele['on'+type] = false;
222
    }
223
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc (-1 / +1 lines)
Lines 10-16 Link Here
10
[% IF ( IntranetUserCSS ) %]<style type="text/css">[% IntranetUserCSS %]</style>[% END %]
10
[% IF ( IntranetUserCSS ) %]<style type="text/css">[% IntranetUserCSS %]</style>[% END %]
11
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery.js"></script>
11
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery.js"></script>
12
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery-ui.js"></script>
12
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery-ui.js"></script>
13
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.hotkeys.min.js"></script>
13
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/shortcut.js"></script>
14
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.cookie.min.js"></script>
14
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.cookie.min.js"></script>
15
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.highlight-3.js"></script>
15
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.highlight-3.js"></script>
16
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.qtip.js"></script>
16
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.qtip.js"></script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/help-top.inc (-1 / +1 lines)
Lines 10-16 Link Here
10
[% END %]
10
[% END %]
11
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery.js"></script>
11
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery.js"></script>
12
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery-ui.js"></script>
12
<script type="text/javascript" src="[% interface %]/lib/jquery/jquery-ui.js"></script>
13
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.hotkeys.min.js"></script>
13
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/shortcut.js"></script>
14
<!-- yui js --> 
14
<!-- yui js --> 
15
<script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> 
15
<script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script> 
16
<script type="text/javascript" src="[% yuipath %]/button/button-min.js"></script> 
16
<script type="text/javascript" src="[% yuipath %]/button/button-min.js"></script> 
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js (-4 / +3 lines)
Lines 8-16 function _(s) { return s; } // dummy function for gettext Link Here
8
8
9
    $(".close").click(function(){ window.close(); });
9
    $(".close").click(function(){ window.close(); });
10
10
11
    if($("#header_search #checkin_search").length > 0){ $(document).bind('keydown','Alt+r',function (){ $("#header_search").tabs("select","#checkin_search"); $("#ret_barcode").focus(); }); } else { $(document).bind('keydown','Alt+r',function (){ location.href="/cgi-bin/koha/circ/returns.pl"; }); }
11
    if($("#header_search #checkin_search").length > 0){ shortcut.add('Alt+r',function (){ $("#header_search").tabs("select","#checkin_search"); $("#ret_barcode").focus(); }); } else { shortcut.add('Alt+r',function (){ location.href="/cgi-bin/koha/circ/returns.pl"; }); }
12
    if($("#header_search #circ_search").length > 0){ $(document).bind('keydown','Alt+u',function (){ $("#header_search").tabs("select","#circ_search"); $("#findborrower").focus(); }); } else { $(document).bind('keydown','Alt+u',function(){ location.href="/cgi-bin/koha/circ/circulation.pl"; }); }
12
    if($("#header_search #circ_search").length > 0){ shortcut.add('Alt+u',function (){ $("#header_search").tabs("select","#circ_search"); $("#findborrower").focus(); }); } else { shortcut.add('Alt+u',function(){ location.href="/cgi-bin/koha/circ/circulation.pl"; }); }
13
    if($("#header_search #catalog_search").length > 0){ $(document).bind('keydown','Alt+q',function (){ $("#header_search").tabs("select","#catalog_search"); $("#search-form").focus(); }); } else { $(document).bind('keydown','Alt+q',function(){ location.href="/cgi-bin/koha/catalogue/search.pl"; }); }
13
    if($("#header_search #catalog_search").length > 0){ shortcut.add('Alt+q',function (){ $("#header_search").tabs("select","#catalog_search"); $("#search-form").focus(); }); } else { shortcut.add('Alt+q',function(){ location.href="/cgi-bin/koha/catalogue/search.pl"; }); }
14
14
15
    $(".focus").focus();
15
    $(".focus").focus();
16
    $(".validated").validate();
16
    $(".validated").validate();
17
- 

Return to bug 11035