mousetrapjs 0.1.0 → 0.1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/mousetrapjs/version.rb +1 -1
- data/vendor/assets/javascripts/mousetrap.js +54 -46
- metadata +3 -3
    
        data/lib/mousetrapjs/version.rb
    CHANGED
    
    
| @@ -16,7 +16,7 @@ | |
| 16 16 | 
             
             * Mousetrap is a simple keyboard shortcut library for Javascript with
         | 
| 17 17 | 
             
             * no external dependencies
         | 
| 18 18 | 
             
             *
         | 
| 19 | 
            -
             * @version 1. | 
| 19 | 
            +
             * @version 1.2.2
         | 
| 20 20 | 
             
             * @url craig.is/killing/mice
         | 
| 21 21 | 
             
             */
         | 
| 22 22 | 
             
            (function() {
         | 
| @@ -178,7 +178,7 @@ | |
| 178 178 | 
             
                     *
         | 
| 179 179 | 
             
                     * @type {boolean|string}
         | 
| 180 180 | 
             
                     */
         | 
| 181 | 
            -
                     | 
| 181 | 
            +
                    _sequence_type = false;
         | 
| 182 182 |  | 
| 183 183 | 
             
                /**
         | 
| 184 184 | 
             
                 * loop through the f keys, f1 to f19 and add them to the map
         | 
| @@ -205,7 +205,8 @@ | |
| 205 205 | 
             
                 */
         | 
| 206 206 | 
             
                function _addEvent(object, type, callback) {
         | 
| 207 207 | 
             
                    if (object.addEventListener) {
         | 
| 208 | 
            -
                         | 
| 208 | 
            +
                        object.addEventListener(type, callback, false);
         | 
| 209 | 
            +
                        return;
         | 
| 209 210 | 
             
                    }
         | 
| 210 211 |  | 
| 211 212 | 
             
                    object.attachEvent('on' + type, callback);
         | 
| @@ -237,25 +238,6 @@ | |
| 237 238 | 
             
                    return String.fromCharCode(e.which).toLowerCase();
         | 
| 238 239 | 
             
                }
         | 
| 239 240 |  | 
| 240 | 
            -
                /**
         | 
| 241 | 
            -
                 * should we stop this event before firing off callbacks
         | 
| 242 | 
            -
                 *
         | 
| 243 | 
            -
                 * @param {Event} e
         | 
| 244 | 
            -
                 * @return {boolean}
         | 
| 245 | 
            -
                 */
         | 
| 246 | 
            -
                function _stop(e) {
         | 
| 247 | 
            -
                    var element = e.target || e.srcElement,
         | 
| 248 | 
            -
                        tag_name = element.tagName;
         | 
| 249 | 
            -
             | 
| 250 | 
            -
                    // if the element has the class "mousetrap" then no need to stop
         | 
| 251 | 
            -
                    if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
         | 
| 252 | 
            -
                        return false;
         | 
| 253 | 
            -
                    }
         | 
| 254 | 
            -
             | 
| 255 | 
            -
                    // stop for input, select, and textarea
         | 
| 256 | 
            -
                    return tag_name == 'INPUT' || tag_name == 'SELECT' || tag_name == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true');
         | 
| 257 | 
            -
                }
         | 
| 258 | 
            -
             | 
| 259 241 | 
             
                /**
         | 
| 260 242 | 
             
                 * checks if two arrays are equal
         | 
| 261 243 | 
             
                 *
         | 
| @@ -273,14 +255,14 @@ | |
| 273 255 | 
             
                 * @param {Object} do_not_reset
         | 
| 274 256 | 
             
                 * @returns void
         | 
| 275 257 | 
             
                 */
         | 
| 276 | 
            -
                function _resetSequences(do_not_reset) {
         | 
| 258 | 
            +
                function _resetSequences(do_not_reset, max_level) {
         | 
| 277 259 | 
             
                    do_not_reset = do_not_reset || {};
         | 
| 278 260 |  | 
| 279 261 | 
             
                    var active_sequences = false,
         | 
| 280 262 | 
             
                        key;
         | 
| 281 263 |  | 
| 282 264 | 
             
                    for (key in _sequence_levels) {
         | 
| 283 | 
            -
                        if (do_not_reset[key]) {
         | 
| 265 | 
            +
                        if (do_not_reset[key] && _sequence_levels[key] > max_level) {
         | 
| 284 266 | 
             
                            active_sequences = true;
         | 
| 285 267 | 
             
                            continue;
         | 
| 286 268 | 
             
                        }
         | 
| @@ -288,7 +270,7 @@ | |
| 288 270 | 
             
                    }
         | 
| 289 271 |  | 
| 290 272 | 
             
                    if (!active_sequences) {
         | 
| 291 | 
            -
                         | 
| 273 | 
            +
                        _sequence_type = false;
         | 
| 292 274 | 
             
                    }
         | 
| 293 275 | 
             
                }
         | 
| 294 276 |  | 
| @@ -396,8 +378,14 @@ | |
| 396 378 | 
             
                 * @param {Event} e
         | 
| 397 379 | 
             
                 * @returns void
         | 
| 398 380 | 
             
                 */
         | 
| 399 | 
            -
                function _fireCallback(callback, e) {
         | 
| 400 | 
            -
             | 
| 381 | 
            +
                function _fireCallback(callback, e, combo) {
         | 
| 382 | 
            +
             | 
| 383 | 
            +
                    // if this event should not happen stop here
         | 
| 384 | 
            +
                    if (Mousetrap.stopCallback(e, e.target || e.srcElement, combo)) {
         | 
| 385 | 
            +
                        return;
         | 
| 386 | 
            +
                    }
         | 
| 387 | 
            +
             | 
| 388 | 
            +
                    if (callback(e, combo) === false) {
         | 
| 401 389 | 
             
                        if (e.preventDefault) {
         | 
| 402 390 | 
             
                            e.preventDefault();
         | 
| 403 391 | 
             
                        }
         | 
| @@ -419,15 +407,10 @@ | |
| 419 407 | 
             
                 * @returns void
         | 
| 420 408 | 
             
                 */
         | 
| 421 409 | 
             
                function _handleCharacter(character, e) {
         | 
| 422 | 
            -
             | 
| 423 | 
            -
                    // if this event should not happen stop here
         | 
| 424 | 
            -
                    if (_stop(e)) {
         | 
| 425 | 
            -
                        return;
         | 
| 426 | 
            -
                    }
         | 
| 427 | 
            -
             | 
| 428 410 | 
             
                    var callbacks = _getMatches(character, _eventModifiers(e), e),
         | 
| 429 411 | 
             
                        i,
         | 
| 430 412 | 
             
                        do_not_reset = {},
         | 
| 413 | 
            +
                        max_level = 0,
         | 
| 431 414 | 
             
                        processed_sequence_callback = false;
         | 
| 432 415 |  | 
| 433 416 | 
             
                    // loop through matching callbacks for this key event
         | 
| @@ -441,24 +424,28 @@ | |
| 441 424 | 
             
                        if (callbacks[i].seq) {
         | 
| 442 425 | 
             
                            processed_sequence_callback = true;
         | 
| 443 426 |  | 
| 427 | 
            +
                            // as we loop through keep track of the max
         | 
| 428 | 
            +
                            // any sequence at a lower level will be discarded
         | 
| 429 | 
            +
                            max_level = Math.max(max_level, callbacks[i].level);
         | 
| 430 | 
            +
             | 
| 444 431 | 
             
                            // keep a list of which sequences were matches for later
         | 
| 445 432 | 
             
                            do_not_reset[callbacks[i].seq] = 1;
         | 
| 446 | 
            -
                            _fireCallback(callbacks[i].callback, e);
         | 
| 433 | 
            +
                            _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
         | 
| 447 434 | 
             
                            continue;
         | 
| 448 435 | 
             
                        }
         | 
| 449 436 |  | 
| 450 437 | 
             
                        // if there were no sequence matches but we are still here
         | 
| 451 438 | 
             
                        // that means this is a regular match so we should fire that
         | 
| 452 | 
            -
                        if (!processed_sequence_callback && ! | 
| 453 | 
            -
                            _fireCallback(callbacks[i].callback, e);
         | 
| 439 | 
            +
                        if (!processed_sequence_callback && !_sequence_type) {
         | 
| 440 | 
            +
                            _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
         | 
| 454 441 | 
             
                        }
         | 
| 455 442 | 
             
                    }
         | 
| 456 443 |  | 
| 457 444 | 
             
                    // if you are inside of a sequence and the key you are pressing
         | 
| 458 445 | 
             
                    // is not a modifier key then we should reset all sequences
         | 
| 459 446 | 
             
                    // that were not matched by this key event
         | 
| 460 | 
            -
                    if (e.type ==  | 
| 461 | 
            -
                        _resetSequences(do_not_reset);
         | 
| 447 | 
            +
                    if (e.type == _sequence_type && !_isModifier(character)) {
         | 
| 448 | 
            +
                        _resetSequences(do_not_reset, max_level);
         | 
| 462 449 | 
             
                    }
         | 
| 463 450 | 
             
                }
         | 
| 464 451 |  | 
| @@ -472,7 +459,9 @@ | |
| 472 459 |  | 
| 473 460 | 
             
                    // normalize e.which for key events
         | 
| 474 461 | 
             
                    // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
         | 
| 475 | 
            -
                     | 
| 462 | 
            +
                    if (typeof e.which !== 'number') {
         | 
| 463 | 
            +
                        e.which = e.keyCode;
         | 
| 464 | 
            +
                    }
         | 
| 476 465 |  | 
| 477 466 | 
             
                    var character = _characterFromEvent(e);
         | 
| 478 467 |  | 
| @@ -590,7 +579,7 @@ | |
| 590 579 | 
             
                     * @returns void
         | 
| 591 580 | 
             
                     */
         | 
| 592 581 | 
             
                    var _increaseSequence = function(e) {
         | 
| 593 | 
            -
                             | 
| 582 | 
            +
                            _sequence_type = action;
         | 
| 594 583 | 
             
                            ++_sequence_levels[combo];
         | 
| 595 584 | 
             
                            _resetSequenceTimer();
         | 
| 596 585 | 
             
                        },
         | 
| @@ -603,7 +592,7 @@ | |
| 603 592 | 
             
                         * @returns void
         | 
| 604 593 | 
             
                         */
         | 
| 605 594 | 
             
                        _callbackAndReset = function(e) {
         | 
| 606 | 
            -
                            _fireCallback(callback, e);
         | 
| 595 | 
            +
                            _fireCallback(callback, e, combo);
         | 
| 607 596 |  | 
| 608 597 | 
             
                            // we should ignore the next key up if the action is key down
         | 
| 609 598 | 
             
                            // or keypress.  this is so if you finish a sequence and
         | 
| @@ -650,7 +639,8 @@ | |
| 650 639 | 
             
                    // if this pattern is a sequence of keys then run through this method
         | 
| 651 640 | 
             
                    // to reprocess each pattern one key at a time
         | 
| 652 641 | 
             
                    if (sequence.length > 1) {
         | 
| 653 | 
            -
                         | 
| 642 | 
            +
                        _bindSequence(combination, sequence, callback, action);
         | 
| 643 | 
            +
                        return;
         | 
| 654 644 | 
             
                    }
         | 
| 655 645 |  | 
| 656 646 | 
             
                    // take the keys from this pattern and figure out what the actual
         | 
| @@ -727,7 +717,7 @@ | |
| 727 717 | 
             
                _addEvent(document, 'keydown', _handleKey);
         | 
| 728 718 | 
             
                _addEvent(document, 'keyup', _handleKey);
         | 
| 729 719 |  | 
| 730 | 
            -
                var  | 
| 720 | 
            +
                var Mousetrap = {
         | 
| 731 721 |  | 
| 732 722 | 
             
                    /**
         | 
| 733 723 | 
             
                     * binds an event to mousetrap
         | 
| @@ -797,14 +787,32 @@ | |
| 797 787 | 
             
                        _callbacks = {};
         | 
| 798 788 | 
             
                        _direct_map = {};
         | 
| 799 789 | 
             
                        return this;
         | 
| 790 | 
            +
                    },
         | 
| 791 | 
            +
             | 
| 792 | 
            +
                   /**
         | 
| 793 | 
            +
                    * should we stop this event before firing off callbacks
         | 
| 794 | 
            +
                    *
         | 
| 795 | 
            +
                    * @param {Event} e
         | 
| 796 | 
            +
                    * @param {Element} element
         | 
| 797 | 
            +
                    * @return {boolean}
         | 
| 798 | 
            +
                    */
         | 
| 799 | 
            +
                    stopCallback: function(e, element, combo) {
         | 
| 800 | 
            +
             | 
| 801 | 
            +
                        // if the element has the class "mousetrap" then no need to stop
         | 
| 802 | 
            +
                        if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
         | 
| 803 | 
            +
                            return false;
         | 
| 804 | 
            +
                        }
         | 
| 805 | 
            +
             | 
| 806 | 
            +
                        // stop for input, select, and textarea
         | 
| 807 | 
            +
                        return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true');
         | 
| 800 808 | 
             
                    }
         | 
| 801 809 | 
             
                };
         | 
| 802 810 |  | 
| 803 811 | 
             
                // expose mousetrap to the global object
         | 
| 804 | 
            -
                window.Mousetrap =  | 
| 812 | 
            +
                window.Mousetrap = Mousetrap;
         | 
| 805 813 |  | 
| 806 814 | 
             
                // expose mousetrap as an AMD module
         | 
| 807 | 
            -
                if (typeof define  | 
| 808 | 
            -
                    define( | 
| 815 | 
            +
                if (typeof define === 'function' && define.amd) {
         | 
| 816 | 
            +
                    define(Mousetrap);
         | 
| 809 817 | 
             
                }
         | 
| 810 818 | 
             
            }) ();
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mousetrapjs
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-12-16 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: Gem for Mousetrap, a simple library for handling keyboard shortcuts in
         | 
| 15 15 | 
             
              Javascript
         | 
| @@ -48,7 +48,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 48 48 | 
             
                  version: '0'
         | 
| 49 49 | 
             
            requirements: []
         | 
| 50 50 | 
             
            rubyforge_project: 
         | 
| 51 | 
            -
            rubygems_version: 1.8. | 
| 51 | 
            +
            rubygems_version: 1.8.23
         | 
| 52 52 | 
             
            signing_key: 
         | 
| 53 53 | 
             
            specification_version: 3
         | 
| 54 54 | 
             
            summary: Mousetrap is a simple library for handling keyboard shortcuts in Javascript
         |