1/* ============================================================ 2 * bootstrap-dropdown.js v2.1.1 3 * http://twitter.github.com/bootstrap/javascript.html#dropdowns 4 * ============================================================ 5 * Copyright 2012 Twitter, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * ============================================================ */ 19 20 21!function ($) { 22 23 "use strict"; // jshint ;_; 24 25 26 /* DROPDOWN CLASS DEFINITION 27 * ========================= */ 28 29 var toggle = '[data-toggle=dropdown]' 30 , Dropdown = function (element) { 31 var $el = $(element).on('click.dropdown.data-api', this.toggle) 32 $('html').on('click.dropdown.data-api', function () { 33 $el.parent().removeClass('open') 34 }) 35 } 36 37 Dropdown.prototype = { 38 39 constructor: Dropdown 40 41 , toggle: function (e) { 42 var $this = $(this) 43 , $parent 44 , isActive 45 46 if ($this.is('.disabled, :disabled')) return 47 48 $parent = getParent($this) 49 50 isActive = $parent.hasClass('open') 51 52 clearMenus() 53 54 if (!isActive) { 55 $parent.toggleClass('open') 56 $this.focus() 57 } 58 59 return false 60 } 61 62 , keydown: function (e) { 63 var $this 64 , $items 65 , $active 66 , $parent 67 , isActive 68 , index 69 70 if (!/(38|40|27)/.test(e.keyCode)) return 71 72 $this = $(this) 73 74 e.preventDefault() 75 e.stopPropagation() 76 77 if ($this.is('.disabled, :disabled')) return 78 79 $parent = getParent($this) 80 81 isActive = $parent.hasClass('open') 82 83 if (!isActive || (isActive && e.keyCode == 27)) return $this.click() 84 85 $items = $('[role=menu] li:not(.divider) a', $parent) 86 87 if (!$items.length) return 88 89 index = $items.index($items.filter(':focus')) 90 91 if (e.keyCode == 38 && index > 0) index-- // up 92 if (e.keyCode == 40 && index < $items.length - 1) index++ // down 93 if (!~index) index = 0 94 95 $items 96 .eq(index) 97 .focus() 98 } 99 100 } 101 102 function clearMenus() { 103 getParent($(toggle)) 104 .removeClass('open') 105 } 106 107 function getParent($this) { 108 var selector = $this.attr('data-target') 109 , $parent 110 111 if (!selector) { 112 selector = $this.attr('href') 113 selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 114 } 115 116 $parent = $(selector) 117 $parent.length || ($parent = $this.parent()) 118 119 return $parent 120 } 121 122 123 /* DROPDOWN PLUGIN DEFINITION 124 * ========================== */ 125 126 $.fn.dropdown = function (option) { 127 return this.each(function () { 128 var $this = $(this) 129 , data = $this.data('dropdown') 130 if (!data) $this.data('dropdown', (data = new Dropdown(this))) 131 if (typeof option == 'string') data[option].call($this) 132 }) 133 } 134 135 $.fn.dropdown.Constructor = Dropdown 136 137 138 /* APPLY TO STANDARD DROPDOWN ELEMENTS 139 * =================================== */ 140 141 $(function () { 142 $('html') 143 .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) 144 $('body') 145 .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) 146 .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) 147 .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) 148 }) 149 150}(window.jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.