less-rails-bootstrap 2.3.3 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +7 -11
  4. data/lib/less/rails/bootstrap/version.rb +1 -1
  5. data/scripts/update_bootstrap.sh +37 -8
  6. data/test/cases/usage_css_spec.rb +15 -12
  7. data/test/cases/usage_js_spec.rb +4 -4
  8. data/test/dummy_app/app/assets/stylesheets/fonts.css.less +2 -0
  9. data/test/dummy_app/app/assets/stylesheets/framework.css.less +4 -2
  10. data/test/dummy_app/app/assets/stylesheets/individual.css.less +2 -2
  11. data/test/spec_helper.rb +1 -2
  12. data/vendor/assets/javascripts/twitter/bootstrap.js +0 -1
  13. data/vendor/assets/javascripts/twitter/bootstrap/affix.js +58 -49
  14. data/vendor/assets/javascripts/twitter/bootstrap/alert.js +36 -37
  15. data/vendor/assets/javascripts/twitter/bootstrap/button.js +41 -39
  16. data/vendor/assets/javascripts/twitter/bootstrap/carousel.js +131 -125
  17. data/vendor/assets/javascripts/twitter/bootstrap/collapse.js +108 -96
  18. data/vendor/assets/javascripts/twitter/bootstrap/dropdown.js +72 -87
  19. data/vendor/assets/javascripts/twitter/bootstrap/modal.js +149 -155
  20. data/vendor/assets/javascripts/twitter/bootstrap/popover.js +60 -59
  21. data/vendor/assets/javascripts/twitter/bootstrap/scrollspy.js +103 -107
  22. data/vendor/assets/javascripts/twitter/bootstrap/tab.js +73 -82
  23. data/vendor/assets/javascripts/twitter/bootstrap/tooltip.js +258 -255
  24. data/vendor/assets/javascripts/twitter/bootstrap/transition.js +34 -38
  25. data/vendor/frameworks/twitter/bootstrap/accordion.less +9 -12
  26. data/vendor/frameworks/twitter/bootstrap/alerts.less +43 -53
  27. data/vendor/frameworks/twitter/bootstrap/bootstrap.less +21 -21
  28. data/vendor/frameworks/twitter/bootstrap/breadcrumbs.less +7 -8
  29. data/vendor/frameworks/twitter/bootstrap/button-groups.less +93 -151
  30. data/vendor/frameworks/twitter/bootstrap/buttons.less +93 -164
  31. data/vendor/frameworks/twitter/bootstrap/carousel.less +110 -63
  32. data/vendor/frameworks/twitter/bootstrap/close.less +18 -17
  33. data/vendor/frameworks/twitter/bootstrap/code.less +14 -20
  34. data/vendor/frameworks/twitter/bootstrap/component-animations.less +10 -3
  35. data/vendor/frameworks/twitter/bootstrap/dropdowns.less +66 -143
  36. data/vendor/frameworks/twitter/bootstrap/forms.less +281 -548
  37. data/vendor/frameworks/twitter/bootstrap/grid.less +194 -11
  38. data/vendor/frameworks/twitter/bootstrap/media.less +8 -7
  39. data/vendor/frameworks/twitter/bootstrap/mixins.less +290 -446
  40. data/vendor/frameworks/twitter/bootstrap/modals.less +92 -51
  41. data/vendor/frameworks/twitter/bootstrap/navbar.less +285 -402
  42. data/vendor/frameworks/twitter/bootstrap/navs.less +176 -348
  43. data/vendor/frameworks/twitter/bootstrap/pager.less +45 -33
  44. data/vendor/frameworks/twitter/bootstrap/pagination.less +89 -104
  45. data/vendor/frameworks/twitter/bootstrap/popovers.less +53 -51
  46. data/vendor/frameworks/twitter/bootstrap/progress-bars.less +28 -45
  47. data/vendor/frameworks/twitter/bootstrap/responsive-utilities.less +92 -32
  48. data/vendor/frameworks/twitter/bootstrap/scaffolding.less +60 -18
  49. data/vendor/frameworks/twitter/bootstrap/tables.less +131 -164
  50. data/vendor/frameworks/twitter/bootstrap/thumbnails.less +20 -31
  51. data/vendor/frameworks/twitter/bootstrap/tooltip.less +45 -20
  52. data/vendor/frameworks/twitter/bootstrap/type.less +84 -99
  53. data/vendor/frameworks/twitter/bootstrap/utilities.less +17 -5
  54. data/vendor/frameworks/twitter/bootstrap/variables.less +446 -179
  55. data/vendor/frameworks/twitter/bootstrap/wells.less +5 -5
  56. metadata +41 -44
  57. data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  58. data/vendor/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
  59. data/vendor/assets/javascripts/twitter/bootstrap/typeahead.js +0 -335
  60. data/vendor/assets/stylesheets/twitter/bootstrap-responsive.css.less +0 -1
  61. data/vendor/assets/stylesheets/twitter/bootstrap.css.less +0 -1
  62. data/vendor/frameworks/twitter/bootstrap.less +0 -1
  63. data/vendor/frameworks/twitter/bootstrap/hero-unit.less +0 -25
  64. data/vendor/frameworks/twitter/bootstrap/labels-badges.less +0 -84
  65. data/vendor/frameworks/twitter/bootstrap/layouts.less +0 -16
  66. data/vendor/frameworks/twitter/bootstrap/reset.less +0 -216
  67. data/vendor/frameworks/twitter/bootstrap/responsive-1200px-min.less +0 -28
  68. data/vendor/frameworks/twitter/bootstrap/responsive-767px-max.less +0 -193
  69. data/vendor/frameworks/twitter/bootstrap/responsive-768px-979px.less +0 -19
  70. data/vendor/frameworks/twitter/bootstrap/responsive-navbar.less +0 -189
  71. data/vendor/frameworks/twitter/bootstrap/responsive.less +0 -48
  72. data/vendor/frameworks/twitter/bootstrap/sprites.less +0 -197
@@ -1,7 +1,7 @@
1
- /* =============================================================
2
- * bootstrap-collapse.js v2.3.2
3
- * http://twitter.github.com/bootstrap/javascript.html#collapse
4
- * =============================================================
1
+ /* ========================================================================
2
+ * Bootstrap: collapse.js v3.0.0
3
+ * http://twbs.github.com/bootstrap/javascript.html#collapse
4
+ * ========================================================================
5
5
  * Copyright 2012 Twitter, Inc.
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,135 +15,138 @@
15
15
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
- * ============================================================ */
18
+ * ======================================================================== */
19
19
 
20
20
 
21
- !function ($) {
21
+ +function ($) { "use strict";
22
22
 
23
- "use strict"; // jshint ;_;
24
-
25
-
26
- /* COLLAPSE PUBLIC CLASS DEFINITION
27
- * ================================ */
23
+ // COLLAPSE PUBLIC CLASS DEFINITION
24
+ // ================================
28
25
 
29
26
  var Collapse = function (element, options) {
30
- this.$element = $(element)
31
- this.options = $.extend({}, $.fn.collapse.defaults, options)
27
+ this.$element = $(element)
28
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
29
+ this.transitioning = null
32
30
 
33
- if (this.options.parent) {
34
- this.$parent = $(this.options.parent)
35
- }
31
+ if (this.options.parent) this.$parent = $(this.options.parent)
32
+ if (this.options.toggle) this.toggle()
33
+ }
36
34
 
37
- this.options.toggle && this.toggle()
35
+ Collapse.DEFAULTS = {
36
+ toggle: true
38
37
  }
39
38
 
40
- Collapse.prototype = {
39
+ Collapse.prototype.dimension = function () {
40
+ var hasWidth = this.$element.hasClass('width')
41
+ return hasWidth ? 'width' : 'height'
42
+ }
41
43
 
42
- constructor: Collapse
44
+ Collapse.prototype.show = function () {
45
+ if (this.transitioning || this.$element.hasClass('in')) return
43
46
 
44
- , dimension: function () {
45
- var hasWidth = this.$element.hasClass('width')
46
- return hasWidth ? 'width' : 'height'
47
- }
47
+ var startEvent = $.Event('show.bs.collapse')
48
+ this.$element.trigger(startEvent)
49
+ if (startEvent.isDefaultPrevented()) return
48
50
 
49
- , show: function () {
50
- var dimension
51
- , scroll
52
- , actives
53
- , hasData
51
+ var actives = this.$parent && this.$parent.find('> .accordion-group > .in')
54
52
 
55
- if (this.transitioning || this.$element.hasClass('in')) return
53
+ if (actives && actives.length) {
54
+ var hasData = actives.data('bs.collapse')
55
+ if (hasData && hasData.transitioning) return
56
+ actives.collapse('hide')
57
+ hasData || actives.data('bs.collapse', null)
58
+ }
56
59
 
57
- dimension = this.dimension()
58
- scroll = $.camelCase(['scroll', dimension].join('-'))
59
- actives = this.$parent && this.$parent.find('> .accordion-group > .in')
60
+ var dimension = this.dimension()
60
61
 
61
- if (actives && actives.length) {
62
- hasData = actives.data('collapse')
63
- if (hasData && hasData.transitioning) return
64
- actives.collapse('hide')
65
- hasData || actives.data('collapse', null)
66
- }
62
+ this.$element
63
+ .removeClass('collapse')
64
+ .addClass('collapsing')
65
+ [dimension](0)
67
66
 
68
- this.$element[dimension](0)
69
- this.transition('addClass', $.Event('show'), 'shown')
70
- $.support.transition && this.$element[dimension](this.$element[0][scroll])
71
- }
67
+ this.transitioning = 1
72
68
 
73
- , hide: function () {
74
- var dimension
75
- if (this.transitioning || !this.$element.hasClass('in')) return
76
- dimension = this.dimension()
77
- this.reset(this.$element[dimension]())
78
- this.transition('removeClass', $.Event('hide'), 'hidden')
79
- this.$element[dimension](0)
69
+ var complete = function () {
70
+ this.$element
71
+ .removeClass('collapsing')
72
+ .addClass('in')
73
+ [dimension]('auto')
74
+ this.transitioning = 0
75
+ this.$element.trigger('shown.bs.collapse')
80
76
  }
81
77
 
82
- , reset: function (size) {
83
- var dimension = this.dimension()
78
+ if (!$.support.transition) return complete.call(this)
84
79
 
85
- this.$element
86
- .removeClass('collapse')
87
- [dimension](size || 'auto')
88
- [0].offsetWidth
80
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
89
81
 
90
- this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
82
+ this.$element
83
+ .one($.support.transition.end, $.proxy(complete, this))
84
+ .emulateTransitionEnd(350)
85
+ [dimension](this.$element[0][scrollSize])
86
+ }
91
87
 
92
- return this
93
- }
88
+ Collapse.prototype.hide = function () {
89
+ if (this.transitioning || !this.$element.hasClass('in')) return
94
90
 
95
- , transition: function (method, startEvent, completeEvent) {
96
- var that = this
97
- , complete = function () {
98
- if (startEvent.type == 'show') that.reset()
99
- that.transitioning = 0
100
- that.$element.trigger(completeEvent)
101
- }
91
+ var startEvent = $.Event('hide.bs.collapse')
92
+ this.$element.trigger(startEvent)
93
+ if (startEvent.isDefaultPrevented()) return
102
94
 
103
- this.$element.trigger(startEvent)
95
+ var dimension = this.dimension()
104
96
 
105
- if (startEvent.isDefaultPrevented()) return
97
+ this.$element
98
+ [dimension](this.$element[dimension]())
99
+ [0].offsetHeight
106
100
 
107
- this.transitioning = 1
101
+ this.$element
102
+ .addClass('collapsing')
103
+ .removeClass('collapse')
104
+ .removeClass('in')
108
105
 
109
- this.$element[method]('in')
106
+ this.transitioning = 1
110
107
 
111
- $.support.transition && this.$element.hasClass('collapse') ?
112
- this.$element.one($.support.transition.end, complete) :
113
- complete()
108
+ var complete = function () {
109
+ this.transitioning = 0
110
+ this.$element
111
+ .trigger('hidden.bs.collapse')
112
+ .removeClass('collapsing')
113
+ .addClass('collapse')
114
114
  }
115
115
 
116
- , toggle: function () {
117
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
118
- }
116
+ if (!$.support.transition) return complete.call(this)
119
117
 
118
+ this.$element
119
+ [dimension](0)
120
+ .one($.support.transition.end, $.proxy(complete, this))
121
+ .emulateTransitionEnd(350)
122
+ }
123
+
124
+ Collapse.prototype.toggle = function () {
125
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
120
126
  }
121
127
 
122
128
 
123
- /* COLLAPSE PLUGIN DEFINITION
124
- * ========================== */
129
+ // COLLAPSE PLUGIN DEFINITION
130
+ // ==========================
125
131
 
126
132
  var old = $.fn.collapse
127
133
 
128
134
  $.fn.collapse = function (option) {
129
135
  return this.each(function () {
130
- var $this = $(this)
131
- , data = $this.data('collapse')
132
- , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
133
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
136
+ var $this = $(this)
137
+ var data = $this.data('bs.collapse')
138
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
139
+
140
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
134
141
  if (typeof option == 'string') data[option]()
135
142
  })
136
143
  }
137
144
 
138
- $.fn.collapse.defaults = {
139
- toggle: true
140
- }
141
-
142
145
  $.fn.collapse.Constructor = Collapse
143
146
 
144
147
 
145
- /* COLLAPSE NO CONFLICT
146
- * ==================== */
148
+ // COLLAPSE NO CONFLICT
149
+ // ====================
147
150
 
148
151
  $.fn.collapse.noConflict = function () {
149
152
  $.fn.collapse = old
@@ -151,17 +154,26 @@
151
154
  }
152
155
 
153
156
 
154
- /* COLLAPSE DATA-API
155
- * ================= */
157
+ // COLLAPSE DATA-API
158
+ // =================
156
159
 
157
- $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
158
- var $this = $(this), href
159
- , target = $this.attr('data-target')
160
+ $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
161
+ var $this = $(this), href
162
+ var target = $this.attr('data-target')
160
163
  || e.preventDefault()
161
164
  || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
162
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
163
- $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
164
- $(target).collapse(option)
165
+ var $target = $(target)
166
+ var data = $target.data('bs.collapse')
167
+ var option = data ? 'toggle' : $this.data()
168
+ var parent = $this.attr('data-parent')
169
+ var $parent = parent && $(parent)
170
+
171
+ if (!data || !data.transitioning) {
172
+ if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed')
173
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
174
+ }
175
+
176
+ $target.collapse(option)
165
177
  })
166
178
 
167
- }(window.jQuery);
179
+ }(window.jQuery);
@@ -1,7 +1,7 @@
1
- /* ============================================================
2
- * bootstrap-dropdown.js v2.3.2
3
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
4
- * ============================================================
1
+ /* ========================================================================
2
+ * Bootstrap: dropdown.js v3.0.0
3
+ * http://twbs.github.com/bootstrap/javascript.html#dropdowns
4
+ * ========================================================================
5
5
  * Copyright 2012 Twitter, Inc.
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,131 +15,116 @@
15
15
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
- * ============================================================ */
18
+ * ======================================================================== */
19
19
 
20
20
 
21
- !function ($) {
21
+ +function ($) { "use strict";
22
22
 
23
- "use strict"; // jshint ;_;
23
+ // DROPDOWN CLASS DEFINITION
24
+ // =========================
24
25
 
26
+ var backdrop = '.dropdown-backdrop'
27
+ var toggle = '[data-toggle=dropdown]'
28
+ var Dropdown = function (element) {
29
+ var $el = $(element).on('click.bs.dropdown', this.toggle)
30
+ }
25
31
 
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
32
+ Dropdown.prototype.toggle = function (e) {
33
+ var $this = $(this)
47
34
 
48
- $parent = getParent($this)
35
+ if ($this.is('.disabled, :disabled')) return
49
36
 
50
- isActive = $parent.hasClass('open')
37
+ var $parent = getParent($this)
38
+ var isActive = $parent.hasClass('open')
51
39
 
52
- clearMenus()
40
+ clearMenus()
53
41
 
54
- if (!isActive) {
55
- if ('ontouchstart' in document.documentElement) {
56
- // if mobile we we use a backdrop because click events don't delegate
57
- $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
58
- }
59
- $parent.toggleClass('open')
42
+ if (!isActive) {
43
+ if ('ontouchstart' in document.documentElement) {
44
+ // if mobile we we use a backdrop because click events don't delegate
45
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
60
46
  }
61
47
 
62
- $this.focus()
48
+ $parent.trigger(e = $.Event('show.bs.dropdown'))
63
49
 
64
- return false
65
- }
50
+ if (e.isDefaultPrevented()) return
66
51
 
67
- , keydown: function (e) {
68
- var $this
69
- , $items
70
- , $active
71
- , $parent
72
- , isActive
73
- , index
52
+ $parent
53
+ .toggleClass('open')
54
+ .trigger('shown.bs.dropdown')
55
+ }
74
56
 
75
- if (!/(38|40|27)/.test(e.keyCode)) return
57
+ $this.focus()
76
58
 
77
- $this = $(this)
59
+ return false
60
+ }
78
61
 
79
- e.preventDefault()
80
- e.stopPropagation()
62
+ Dropdown.prototype.keydown = function (e) {
63
+ if (!/(38|40|27)/.test(e.keyCode)) return
81
64
 
82
- if ($this.is('.disabled, :disabled')) return
65
+ var $this = $(this)
83
66
 
84
- $parent = getParent($this)
67
+ e.preventDefault()
68
+ e.stopPropagation()
85
69
 
86
- isActive = $parent.hasClass('open')
70
+ if ($this.is('.disabled, :disabled')) return
87
71
 
88
- if (!isActive || (isActive && e.keyCode == 27)) {
89
- if (e.which == 27) $parent.find(toggle).focus()
90
- return $this.click()
91
- }
72
+ var $parent = getParent($this)
73
+ var isActive = $parent.hasClass('open')
92
74
 
93
- $items = $('[role=menu] li:not(.divider):visible a', $parent)
75
+ if (!isActive || (isActive && e.keyCode == 27)) {
76
+ if (e.which == 27) $parent.find(toggle).focus()
77
+ return $this.click()
78
+ }
94
79
 
95
- if (!$items.length) return
80
+ var $items = $('[role=menu] li:not(.divider):visible a', $parent)
96
81
 
97
- index = $items.index($items.filter(':focus'))
82
+ if (!$items.length) return
98
83
 
99
- if (e.keyCode == 38 && index > 0) index-- // up
100
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
101
- if (!~index) index = 0
84
+ var index = $items.index($items.filter(':focus'))
102
85
 
103
- $items
104
- .eq(index)
105
- .focus()
106
- }
86
+ if (e.keyCode == 38 && index > 0) index-- // up
87
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
88
+ if (!~index) index=0
107
89
 
90
+ $items.eq(index).focus()
108
91
  }
109
92
 
110
93
  function clearMenus() {
111
- $('.dropdown-backdrop').remove()
112
- $(toggle).each(function () {
113
- getParent($(this)).removeClass('open')
94
+ $(backdrop).remove()
95
+ $(toggle).each(function (e) {
96
+ var $parent = getParent($(this))
97
+ if (!$parent.hasClass('open')) return
98
+ $parent.trigger(e = $.Event('hide.bs.dropdown'))
99
+ if (e.isDefaultPrevented()) return
100
+ $parent.removeClass('open').trigger('hidden.bs.dropdown')
114
101
  })
115
102
  }
116
103
 
117
104
  function getParent($this) {
118
105
  var selector = $this.attr('data-target')
119
- , $parent
120
106
 
121
107
  if (!selector) {
122
108
  selector = $this.attr('href')
123
109
  selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
124
110
  }
125
111
 
126
- $parent = selector && $(selector)
112
+ var $parent = selector && $(selector)
127
113
 
128
- if (!$parent || !$parent.length) $parent = $this.parent()
129
-
130
- return $parent
114
+ return $parent && $parent.length ? $parent : $this.parent()
131
115
  }
132
116
 
133
117
 
134
- /* DROPDOWN PLUGIN DEFINITION
135
- * ========================== */
118
+ // DROPDOWN PLUGIN DEFINITION
119
+ // ==========================
136
120
 
137
121
  var old = $.fn.dropdown
138
122
 
139
123
  $.fn.dropdown = function (option) {
140
124
  return this.each(function () {
141
125
  var $this = $(this)
142
- , data = $this.data('dropdown')
126
+ var data = $this.data('dropdown')
127
+
143
128
  if (!data) $this.data('dropdown', (data = new Dropdown(this)))
144
129
  if (typeof option == 'string') data[option].call($this)
145
130
  })
@@ -148,8 +133,8 @@
148
133
  $.fn.dropdown.Constructor = Dropdown
149
134
 
150
135
 
151
- /* DROPDOWN NO CONFLICT
152
- * ==================== */
136
+ // DROPDOWN NO CONFLICT
137
+ // ====================
153
138
 
154
139
  $.fn.dropdown.noConflict = function () {
155
140
  $.fn.dropdown = old
@@ -157,13 +142,13 @@
157
142
  }
158
143
 
159
144
 
160
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
161
- * =================================== */
145
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
146
+ // ===================================
162
147
 
163
148
  $(document)
164
- .on('click.dropdown.data-api', clearMenus)
165
- .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
166
- .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
167
- .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
149
+ .on('click.bs.dropdown.data-api', clearMenus)
150
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
151
+ .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
152
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
168
153
 
169
154
  }(window.jQuery);