Mollywhite has uploaded a new change for review. https://gerrit.wikimedia.org/r/60367
Change subject: (bug 47509) Move left/right key navigation to bookmanager.js ...................................................................... (bug 47509) Move left/right key navigation to bookmanager.js Removed the jquery.hotkeys.js file. Added the left/right arrow key navigation functionality to bookmanager.js. Bug: 47509 Change-Id: I3e84198fdbb1a4212cee86f71e776b33f8e1a772 --- M BookManager.php M client/bookmanager.js D client/jquery.hotkeys.js 3 files changed, 13 insertions(+), 257 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BookManager refs/changes/67/60367/1 diff --git a/BookManager.php b/BookManager.php index 8ea3a94..eca0756 100644 --- a/BookManager.php +++ b/BookManager.php @@ -16,8 +16,8 @@ * @addtogroup Extensions * @author Raylton P. Sousa * @author Helder.wiki - * @copyright Copyright © 2011 Raylton P. Sousa <[email protected]> - * @copyright Copyright © 2011 Helder.wiki + * @copyright Copyright ¬© 2011 Raylton P. Sousa <[email protected]> + * @copyright Copyright ¬© 2011 Helder.wiki * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 3.0 or later */ @@ -59,7 +59,7 @@ ); /* Add CSS and JS */ $wgResourceModules['ext.BookManager'] = array( - 'scripts' => array( 'jquery.hotkeys.js', 'bookmanager.js' ), + 'scripts' => 'bookmanager.js', 'styles' => 'bookmanager.css', 'messages' => array( 'BookManager', 'BookManager-top', 'BookManager-bottom' ), 'dependencies' => array( 'jquery', 'mediawiki.util' ), @@ -85,4 +85,3 @@ $wgHooks['BaseTemplateToolbox'][] = 'BookManagerNavBar::bookToolboxSection'; /*** Cat ***/ $wgHooks['ParserAfterTidy'][] = 'BookManagerNavBar::CatByPrefix'; - diff --git a/client/bookmanager.js b/client/bookmanager.js index c5c3f5e..d8b6b6e 100644 --- a/client/bookmanager.js +++ b/client/bookmanager.js @@ -3,14 +3,15 @@ $nav = $( ' .mw-book-navigation ' ); $prev = $nav.find( ' .mw-prev a ' ); $next = $nav.find( ' .mw-next a ' ); - if ( $prev.length ) { - $(document).bind('keydown', 'left', function(){ + $(document).bind('keydown', function(e) { + if ( e.altKey || e.ctrlKey || e.shiftKey || !$( document.activeElement ).is('body') || $(document).width() > $(window).width() ) { + return; + } + if( e.which === 37 && $prev.length ){ location.href = $prev[0].href; - }); - } - if ( $next.length ) { - $(document).bind('keydown', 'right', function(){ - location.href = $next[0].href; - }); - } + } + if( e.which === 39 && $next.length ){ + location.href = $next[0].href; + } + }); }); diff --git a/client/jquery.hotkeys.js b/client/jquery.hotkeys.js deleted file mode 100644 index 9a8f2de..0000000 --- a/client/jquery.hotkeys.js +++ /dev/null @@ -1,244 +0,0 @@ -/* -(c) Copyrights 2007 - 2008 - -Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ - -jQuery Plugin by Tzury Bar Yochay [email protected] -http://evalinux.wordpress.com -http://facebook.com/profile.php?id=513676303 - -Project's sites: -http://code.google.com/p/js-hotkeys/ -http://github.com/tzuryby/hotkeys/tree/master - -License: same as jQuery license. - -USAGE: - // simple usage - $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');}); - - // special options such as disableInIput - $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {}); - -Note: - This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind -*/ - -(function (jQuery){ - // keep reference to the original $.fn.bind, $.fn.unbind and $.fn.find - 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) { - // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}} - var result = {}; - result[type] = {}; - result[type][combi] = {cb: callback, disableInInput: false}; - return result; - } - }; - // add firefox num pad char codes - //if (jQuery.browser.mozilla){ - // add num pad char codes - 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 : '/' - }); - //} - - // a wrapper around of $.fn.find - // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d - 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; - } - 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]; - } - } - // call jQuery original unbind - return this.__unbind__(type, fn); - }; - - jQuery.fn.bind = function(type, data, fn){ - // grab keyup,keydown,keypress - var handle = type.match(hotkeys.override); - - if (jQuery.isFunction(data) || !handle){ - // call jQuery.bind only - return this.__bind__(type, data, fn); - } - else{ - // split the job - var result = null, - // pass the rest to the original $.fn.bind - pass2jq = jQuery.trim(type.replace(hotkeys.override, '')); - - // see if there are other types, pass them to the original $.fn.bind - if (pass2jq){ - result = this.__bind__(pass2jq, data, fn); - } - - if (typeof data === "string"){ - data = {'combi': data}; - } - 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].propagate = data.propagate; - trigger[eventType][combi].disableInInput = data.disableInInput; - - // first time selector is bounded - if (!hotkeys.triggersMap[selectorId]) { - hotkeys.triggersMap[selectorId] = trigger; - } - // first time selector is bounded with this type - else if (!hotkeys.triggersMap[selectorId][eventType]) { - hotkeys.triggersMap[selectorId][eventType] = trigger[eventType]; - } - // make trigger point as array so more than one handler can be bound - var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi]; - if (!mapPoint){ - hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]]; - } - else if (mapPoint.constructor !== Array){ - hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint]; - } - else { - hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi]; - } - - // add attribute and call $.event.add per matched element - this.each(function(){ - // jQuery wrapper for the current element - var jqElem = jQuery(this); - - // element already associated with another collection - if (jqElem.attr('hkId') && jqElem.attr('hkId') !== selectorId){ - selectorId = jqElem.attr('hkId') + ";" + selectorId; - } - jqElem.attr('hkId', selectorId); - }); - result = this.__bind__(handle.join(' '), data, hotkeys.handler) - } - } - return result; - } - }; - // work-around for opera and safari where (sometimes) the target is the element which was last - // clicked with the mouse and not the document event it would make sense to get the document - 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; - } - } - } - return elem; - }; - // the event handler - 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], - // prevent f5 overlapping with 't' (or f4 with 's', etc.) - character = !special && String.fromCharCode(code).toLowerCase(), - shift = event.shiftKey, - ctrl = event.ctrlKey, - // patch for jquery 1.2.5 && 1.2.6 see more at: - // http://groups.google.com/group/jquery-en/browse_thread/thread/83e10b3bb1f1c32b - 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; - } - } - - //find by: id.type.combi.options - if (mapPoint){ - var trigger; - // event type is associated with the hkId - if(!shift && !ctrl && !alt) { // No Modifiers - trigger = mapPoint[special] || (character && mapPoint[character]); - } - else{ - // check combinations (alt|ctrl|shift+anything) - var modif = ''; - if(alt) modif +='alt+'; - if(ctrl) modif+= 'ctrl+'; - if(shift) modif += 'shift+'; - // modifiers + special keys or modifiers + character or modifiers + shift character or just shift character - trigger = mapPoint[modif+special]; - if (!trigger){ - if (character){ - trigger = mapPoint[modif+character] - || mapPoint[modif+hotkeys.shiftNums[character]] - // '$' can be triggered as 'Shift+4' or 'Shift+$' or just '$' - || (modif === 'shift+' && mapPoint[hotkeys.shiftNums[character]]); - } - } - } - if (trigger){ - var result = false; - for (var x=0; x < trigger.length; x++){ - if(trigger[x].disableInInput){ - // double check event.currentTarget and event.target - 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; - } - } - // call the registered callback function - result = result || trigger[x].cb.apply(this, [event]); - } - return result; - } - } - } - }; - // place it under window so it can be extended and overridden by others - window.hotkeys = hotkeys; - return jQuery; -})(jQuery); -- To view, visit https://gerrit.wikimedia.org/r/60367 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3e84198fdbb1a4212cee86f71e776b33f8e1a772 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BookManager Gerrit-Branch: master Gerrit-Owner: Mollywhite <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
