vendor/assets/javascripts/twitter/bootstrap/dropdown.js in anjlab-bootstrap-rails-2.3.1.2 vs vendor/assets/javascripts/twitter/bootstrap/dropdown.js in anjlab-bootstrap-rails-3.0.0.0.alpha1
- old
+ new
@@ -1,9 +1,9 @@
-/* ============================================================
- * bootstrap-dropdown.js v2.3.1
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.0.0
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
+ * ========================================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -13,153 +13,133 @@
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- * ============================================================ */
+ * ======================================================================== */
-!function ($) {
++function ($) { "use strict";
- "use strict"; // jshint ;_;
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle=dropdown]'
+ var Dropdown = function (element) {
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
+ $('html').on('click.dropdown.data-api', function () {
+ $el.parent().removeClass('open')
+ })
+ }
- /* DROPDOWN CLASS DEFINITION
- * ========================= */
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
- var toggle = '[data-toggle=dropdown]'
- , Dropdown = function (element) {
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
- $('html').on('click.dropdown.data-api', function () {
- $el.parent().removeClass('open')
- })
- }
+ if ($this.is('.disabled, :disabled')) return
- Dropdown.prototype = {
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
- constructor: Dropdown
+ clearMenus()
- , toggle: function (e) {
- var $this = $(this)
- , $parent
- , isActive
-
- if ($this.is('.disabled, :disabled')) return
-
- $parent = getParent($this)
-
- isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- $parent.toggleClass('open')
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement) {
+ // if mobile we we use a backdrop because click events don't delegate
+ $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
}
-
- $this.focus()
-
- return false
+ $parent.toggleClass('open')
}
- , keydown: function (e) {
- var $this
- , $items
- , $active
- , $parent
- , isActive
- , index
+ $this.focus()
- if (!/(38|40|27)/.test(e.keyCode)) return
+ return false
+ }
- $this = $(this)
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27)/.test(e.keyCode)) return
- e.preventDefault()
- e.stopPropagation()
+ var $this = $(this)
- if ($this.is('.disabled, :disabled')) return
+ e.preventDefault()
+ e.stopPropagation()
- $parent = getParent($this)
+ if ($this.is('.disabled, :disabled')) return
- isActive = $parent.hasClass('open')
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
- if (!isActive || (isActive && e.keyCode == 27)) {
- if (e.which == 27) $parent.find(toggle).focus()
- return $this.click()
- }
+ if (!isActive || (isActive && e.keyCode == 27)) {
+ if (e.which == 27) $parent.find(toggle).focus()
+ return $this.click()
+ }
- $items = $('[role=menu] li:not(.divider):visible a', $parent)
+ var $items = $('[role=menu] li:not(.divider):visible a', $parent)
- if (!$items.length) return
+ if (!$items.length) return
- index = $items.index($items.filter(':focus'))
+ var index = $items.index($items.filter(':focus'))
- if (e.keyCode == 38 && index > 0) index-- // up
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index=0
- $items
- .eq(index)
- .focus()
- }
-
+ $items.eq(index).focus()
}
function clearMenus() {
- $(toggle).each(function () {
- getParent($(this)).removeClass('open')
- })
+ $(backdrop).remove()
+ $(toggle).each(function () { getParent($(this)).removeClass('open') })
}
function getParent($this) {
var selector = $this.attr('data-target')
- , $parent
if (!selector) {
selector = $this.attr('href')
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
- $parent = selector && $(selector)
+ var $parent = selector && $(selector)
- if (!$parent || !$parent.length) $parent = $this.parent()
-
- return $parent
+ return $parent && $parent.length ? $parent : $this.parent()
}
- /* DROPDOWN PLUGIN DEFINITION
- * ========================== */
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
var old = $.fn.dropdown
$.fn.dropdown = function (option) {
return this.each(function () {
var $this = $(this)
- , data = $this.data('dropdown')
+ var data = $this.data('dropdown')
+
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown.Constructor = Dropdown
- /* DROPDOWN NO CONFLICT
- * ==================== */
+ // DROPDOWN NO CONFLICT
+ // ====================
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
- * =================================== */
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
$(document)
.on('click.dropdown.data-api', clearMenus)
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.dropdown-menu', function (e) { e.stopPropagation() })
.on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
.on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
}(window.jQuery);