less-rails-bootstrap 2.3.3 → 3.0.0.rc1

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.
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);