PageSourceSearch

https://queenslibrary.org/themes/renovate/bootstrap/javascripts/bootstrap/dropdown.js?tl8z8n

js queenslibrary.org collected 2026-09-24 08:47:46 UTC 4,743 bytes, 165 lines download raw bytes

vendor: 4,743 bytes, lines 1-165
1/* ========================================================================
2 * Bootstrap: dropdown.js v3.3.7
3 * http://getbootstrap.com/javascript/#dropdowns
4 * ========================================================================
5 * Copyright 2011-2016 Twitter, Inc.
6 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 * ======================================================================== */
8
9
10+function ($) {
11  'use strict';
12
13  // DROPDOWN CLASS DEFINITION
14  // =========================
15
16  var backdrop = '.dropdown-backdrop'
17  var toggle   = '[data-toggle="dropdown"]'
18  var Dropdown = function (element) {
19    $(element).on('click.bs.dropdown', this.toggle)
20  }
21
22  Dropdown.VERSION = '3.3.7'
23
24  function getParent($this) {
25    var selector = $this.attr('data-target')
26
27    if (!selector) {
28      selector = $this.attr('href')
29      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
30    }
31
32    var $parent = selector && $(selector)
33
34    return $parent && $parent.length ? $parent : $this.parent()
35  }
36
37  function clearMenus(e) {
38    if (e && e.which === 3) return
39    $(backdrop).remove()
40    $(toggle).each(function () {
41      var $this         = $(this)
42      var $parent       = getParent($this)
43      var relatedTarget = { relatedTarget: this }
44
45      if (!$parent.hasClass('open')) return
46
47      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
48
49      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
50
51      if (e.isDefaultPrevented()) return
52
53      $this.attr('aria-expanded', 'false')
54      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
55    })
56  }
57
58  Dropdown.prototype.toggle = function (e) {
59    var $this = $(this)
60
61    if ($this.is('.disabled, :disabled')) return
62
63    var $parent  = getParent($this)
64    var isActive = $parent.hasClass('open')
65
66    clearMenus()
67
68    if (!isActive) {
69      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
70        // if mobile we use a backdrop because click events don't delegate
71        $(document.createElement('div'))
72          .addClass('dropdown-backdrop')
73          .insertAfter($(this))
74          .on('click', clearMenus)
75      }
76
77      var relatedTarget = { relatedTarget: this }
78      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
79
80      if (e.isDefaultPrevented()) return
81
82      $this
83        .trigger('focus')
84        .attr('aria-expanded', 'true')
85
86      $parent
87        .toggleClass('open')
88        .trigger($.Event('shown.bs.dropdown', relatedTarget))
89    }
90
91    return false
92  }
93
94  Dropdown.prototype.keydown = function (e) {
95    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
96
97    var $this = $(this)
98
99    e.preventDefault()
100    e.stopPropagation()
101
102    if ($this.is('.disabled, :disabled')) return
103
104    var $parent  = getParent($this)
105    var isActive = $parent.hasClass('open')
106
107    if (!isActive && e.which != 27 || isActive && e.which == 27) {
108      if (e.which == 27) $parent.find(toggle).trigger('focus')
109      return $this.trigger('click')
110    }
111
112    var desc = ' li:not(.disabled):visible a'
113    var $items = $parent.find('.dropdown-menu' + desc)
114
115    if (!$items.length) return
116
117    var index = $items.index(e.target)
118
119    if (e.which == 38 && index > 0)                 index--         // up
120    if (e.which == 40 && index < $items.length - 1) index++         // down
121    if (!~index)                                    index = 0
122
123    $items.eq(index).trigger('focus')
124  }
125
126
127  // DROPDOWN PLUGIN DEFINITION
128  // ==========================
129
130  function Plugin(option) {
131    return this.each(function () {
132      var $this = $(this)
133      var data  = $this.data('bs.dropdown')
134
135      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
136      if (typeof option == 'string') data[option].call($this)
137    })
138  }
139
140  var old = $.fn.dropdown
141
142  $.fn.dropdown             = Plugin
143  $.fn.dropdown.Constructor = Dropdown
144
145
146  // DROPDOWN NO CONFLICT
147  // ====================
148
149  $.fn.dropdown.noConflict = function () {
150    $.fn.dropdown = old
151    return this
152  }
153
154
155  // APPLY TO STANDARD DROPDOWN ELEMENTS
156  // ===================================
157
158  $(document)
159    .on('click.bs.dropdown.data-api', clearMenus)
160    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
161    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
162    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
163    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
164
165}(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.