twitter-bootstrap-rails 5.1.0 → 5.3.1

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -0
  3. data/README.md +29 -613
  4. data/app/assets/javascripts/twitter/bootstrap/bootstrap.min.js +7 -0
  5. data/app/assets/javascripts/twitter/bootstrap.js +1 -12
  6. data/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css +6 -0
  7. data/lib/generators/bootstrap/install/install_generator.rb +29 -8
  8. data/lib/generators/bootstrap/install/templates/application.js +1 -3
  9. data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.css +3 -4
  10. data/lib/generators/bootstrap/layout/templates/layout.html.erb +17 -60
  11. data/lib/generators/bootstrap/partial/templates/_navbar-devise.html.erb +30 -0
  12. data/lib/generators/bootstrap/partial/templates/_navbar.html.erb +16 -0
  13. data/lib/generators/bootstrap/themed/templates/_form.html.erb +16 -23
  14. data/lib/generators/bootstrap/themed/templates/index.html.erb +10 -10
  15. data/lib/generators/bootstrap/themed/templates/show.html.erb +5 -5
  16. data/lib/generators/bootstrap/themed/templates/simple_form/_form.html.erb +5 -8
  17. data/lib/twitter/bootstrap/rails/version.rb +1 -1
  18. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap.bundle.min.js +7 -0
  19. data/vendor/assets/stylesheets/twitter/bootstrap/bootstrap.min.css +6 -0
  20. data/vendor/toolkit/twitter/bootstrap/variables.less +1681 -799
  21. metadata +17 -73
  22. data/app/assets/javascripts/twitter/bootstrap/affix.js +0 -162
  23. data/app/assets/javascripts/twitter/bootstrap/alert.js +0 -94
  24. data/app/assets/javascripts/twitter/bootstrap/button.js +0 -120
  25. data/app/assets/javascripts/twitter/bootstrap/carousel.js +0 -237
  26. data/app/assets/javascripts/twitter/bootstrap/collapse.js +0 -211
  27. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +0 -165
  28. data/app/assets/javascripts/twitter/bootstrap/modal.js +0 -337
  29. data/app/assets/javascripts/twitter/bootstrap/popover.js +0 -108
  30. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +0 -172
  31. data/app/assets/javascripts/twitter/bootstrap/tab.js +0 -155
  32. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +0 -514
  33. data/app/assets/javascripts/twitter/bootstrap/transition.js +0 -59
  34. data/app/assets/javascripts/twitter/bootstrap_ujs.js +0 -11
  35. data/app/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +0 -1
  36. data/app/assets/stylesheets/twitter-bootstrap-static/sprites.css.erb +0 -1
@@ -1,337 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: modal.js v3.3.6
3
- * http://getbootstrap.com/javascript/#modals
4
- * ========================================================================
5
- * Copyright 2011-2015 Twitter, Inc.
6
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
- * ======================================================================== */
8
-
9
-
10
- +function ($) {
11
- 'use strict';
12
-
13
- // MODAL CLASS DEFINITION
14
- // ======================
15
-
16
- var Modal = function (element, options) {
17
- this.options = options
18
- this.$body = $(document.body)
19
- this.$element = $(element)
20
- this.$dialog = this.$element.find('.modal-dialog')
21
- this.$backdrop = null
22
- this.isShown = null
23
- this.originalBodyPad = null
24
- this.scrollbarWidth = 0
25
- this.ignoreBackdropClick = false
26
-
27
- if (this.options.remote) {
28
- this.$element
29
- .find('.modal-content')
30
- .load(this.options.remote, $.proxy(function () {
31
- this.$element.trigger('loaded.bs.modal')
32
- }, this))
33
- }
34
- }
35
-
36
- Modal.VERSION = '3.3.6'
37
-
38
- Modal.TRANSITION_DURATION = 300
39
- Modal.BACKDROP_TRANSITION_DURATION = 150
40
-
41
- Modal.DEFAULTS = {
42
- backdrop: true,
43
- keyboard: true,
44
- show: true
45
- }
46
-
47
- Modal.prototype.toggle = function (_relatedTarget) {
48
- return this.isShown ? this.hide() : this.show(_relatedTarget)
49
- }
50
-
51
- Modal.prototype.show = function (_relatedTarget) {
52
- var that = this
53
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
54
-
55
- this.$element.trigger(e)
56
-
57
- if (this.isShown || e.isDefaultPrevented()) return
58
-
59
- this.isShown = true
60
-
61
- this.checkScrollbar()
62
- this.setScrollbar()
63
- this.$body.addClass('modal-open')
64
-
65
- this.escape()
66
- this.resize()
67
-
68
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
69
-
70
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
71
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
72
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
73
- })
74
- })
75
-
76
- this.backdrop(function () {
77
- var transition = $.support.transition && that.$element.hasClass('fade')
78
-
79
- if (!that.$element.parent().length) {
80
- that.$element.appendTo(that.$body) // don't move modals dom position
81
- }
82
-
83
- that.$element
84
- .show()
85
- .scrollTop(0)
86
-
87
- that.adjustDialog()
88
-
89
- if (transition) {
90
- that.$element[0].offsetWidth // force reflow
91
- }
92
-
93
- that.$element.addClass('in')
94
-
95
- that.enforceFocus()
96
-
97
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
98
-
99
- transition ?
100
- that.$dialog // wait for modal to slide in
101
- .one('bsTransitionEnd', function () {
102
- that.$element.trigger('focus').trigger(e)
103
- })
104
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
105
- that.$element.trigger('focus').trigger(e)
106
- })
107
- }
108
-
109
- Modal.prototype.hide = function (e) {
110
- if (e) e.preventDefault()
111
-
112
- e = $.Event('hide.bs.modal')
113
-
114
- this.$element.trigger(e)
115
-
116
- if (!this.isShown || e.isDefaultPrevented()) return
117
-
118
- this.isShown = false
119
-
120
- this.escape()
121
- this.resize()
122
-
123
- $(document).off('focusin.bs.modal')
124
-
125
- this.$element
126
- .removeClass('in')
127
- .off('click.dismiss.bs.modal')
128
- .off('mouseup.dismiss.bs.modal')
129
-
130
- this.$dialog.off('mousedown.dismiss.bs.modal')
131
-
132
- $.support.transition && this.$element.hasClass('fade') ?
133
- this.$element
134
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
135
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
136
- this.hideModal()
137
- }
138
-
139
- Modal.prototype.enforceFocus = function () {
140
- $(document)
141
- .off('focusin.bs.modal') // guard against infinite focus loop
142
- .on('focusin.bs.modal', $.proxy(function (e) {
143
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
144
- this.$element.trigger('focus')
145
- }
146
- }, this))
147
- }
148
-
149
- Modal.prototype.escape = function () {
150
- if (this.isShown && this.options.keyboard) {
151
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
152
- e.which == 27 && this.hide()
153
- }, this))
154
- } else if (!this.isShown) {
155
- this.$element.off('keydown.dismiss.bs.modal')
156
- }
157
- }
158
-
159
- Modal.prototype.resize = function () {
160
- if (this.isShown) {
161
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
162
- } else {
163
- $(window).off('resize.bs.modal')
164
- }
165
- }
166
-
167
- Modal.prototype.hideModal = function () {
168
- var that = this
169
- this.$element.hide()
170
- this.backdrop(function () {
171
- that.$body.removeClass('modal-open')
172
- that.resetAdjustments()
173
- that.resetScrollbar()
174
- that.$element.trigger('hidden.bs.modal')
175
- })
176
- }
177
-
178
- Modal.prototype.removeBackdrop = function () {
179
- this.$backdrop && this.$backdrop.remove()
180
- this.$backdrop = null
181
- }
182
-
183
- Modal.prototype.backdrop = function (callback) {
184
- var that = this
185
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
186
-
187
- if (this.isShown && this.options.backdrop) {
188
- var doAnimate = $.support.transition && animate
189
-
190
- this.$backdrop = $(document.createElement('div'))
191
- .addClass('modal-backdrop ' + animate)
192
- .appendTo(this.$body)
193
-
194
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
195
- if (this.ignoreBackdropClick) {
196
- this.ignoreBackdropClick = false
197
- return
198
- }
199
- if (e.target !== e.currentTarget) return
200
- this.options.backdrop == 'static'
201
- ? this.$element[0].focus()
202
- : this.hide()
203
- }, this))
204
-
205
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
206
-
207
- this.$backdrop.addClass('in')
208
-
209
- if (!callback) return
210
-
211
- doAnimate ?
212
- this.$backdrop
213
- .one('bsTransitionEnd', callback)
214
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
215
- callback()
216
-
217
- } else if (!this.isShown && this.$backdrop) {
218
- this.$backdrop.removeClass('in')
219
-
220
- var callbackRemove = function () {
221
- that.removeBackdrop()
222
- callback && callback()
223
- }
224
- $.support.transition && this.$element.hasClass('fade') ?
225
- this.$backdrop
226
- .one('bsTransitionEnd', callbackRemove)
227
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
228
- callbackRemove()
229
-
230
- } else if (callback) {
231
- callback()
232
- }
233
- }
234
-
235
- // these following methods are used to handle overflowing modals
236
-
237
- Modal.prototype.handleUpdate = function () {
238
- this.adjustDialog()
239
- }
240
-
241
- Modal.prototype.adjustDialog = function () {
242
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
243
-
244
- this.$element.css({
245
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
246
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
247
- })
248
- }
249
-
250
- Modal.prototype.resetAdjustments = function () {
251
- this.$element.css({
252
- paddingLeft: '',
253
- paddingRight: ''
254
- })
255
- }
256
-
257
- Modal.prototype.checkScrollbar = function () {
258
- var fullWindowWidth = window.innerWidth
259
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
260
- var documentElementRect = document.documentElement.getBoundingClientRect()
261
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
262
- }
263
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
264
- this.scrollbarWidth = this.measureScrollbar()
265
- }
266
-
267
- Modal.prototype.setScrollbar = function () {
268
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
269
- this.originalBodyPad = document.body.style.paddingRight || ''
270
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
271
- }
272
-
273
- Modal.prototype.resetScrollbar = function () {
274
- this.$body.css('padding-right', this.originalBodyPad)
275
- }
276
-
277
- Modal.prototype.measureScrollbar = function () { // thx walsh
278
- var scrollDiv = document.createElement('div')
279
- scrollDiv.className = 'modal-scrollbar-measure'
280
- this.$body.append(scrollDiv)
281
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
282
- this.$body[0].removeChild(scrollDiv)
283
- return scrollbarWidth
284
- }
285
-
286
-
287
- // MODAL PLUGIN DEFINITION
288
- // =======================
289
-
290
- function Plugin(option, _relatedTarget) {
291
- return this.each(function () {
292
- var $this = $(this)
293
- var data = $this.data('bs.modal')
294
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
295
-
296
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
297
- if (typeof option == 'string') data[option](_relatedTarget)
298
- else if (options.show) data.show(_relatedTarget)
299
- })
300
- }
301
-
302
- var old = $.fn.modal
303
-
304
- $.fn.modal = Plugin
305
- $.fn.modal.Constructor = Modal
306
-
307
-
308
- // MODAL NO CONFLICT
309
- // =================
310
-
311
- $.fn.modal.noConflict = function () {
312
- $.fn.modal = old
313
- return this
314
- }
315
-
316
-
317
- // MODAL DATA-API
318
- // ==============
319
-
320
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
321
- var $this = $(this)
322
- var href = $this.attr('href')
323
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
324
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
325
-
326
- if ($this.is('a')) e.preventDefault()
327
-
328
- $target.one('show.bs.modal', function (showEvent) {
329
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
330
- $target.one('hidden.bs.modal', function () {
331
- $this.is(':visible') && $this.trigger('focus')
332
- })
333
- })
334
- Plugin.call($target, option, this)
335
- })
336
-
337
- }(jQuery);
@@ -1,108 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: popover.js v3.3.6
3
- * http://getbootstrap.com/javascript/#popovers
4
- * ========================================================================
5
- * Copyright 2011-2015 Twitter, Inc.
6
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
- * ======================================================================== */
8
-
9
-
10
- +function ($) {
11
- 'use strict';
12
-
13
- // POPOVER PUBLIC CLASS DEFINITION
14
- // ===============================
15
-
16
- var Popover = function (element, options) {
17
- this.init('popover', element, options)
18
- }
19
-
20
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
21
-
22
- Popover.VERSION = '3.3.6'
23
-
24
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
25
- placement: 'right',
26
- trigger: 'click',
27
- content: '',
28
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
29
- })
30
-
31
-
32
- // NOTE: POPOVER EXTENDS tooltip.js
33
- // ================================
34
-
35
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
36
-
37
- Popover.prototype.constructor = Popover
38
-
39
- Popover.prototype.getDefaults = function () {
40
- return Popover.DEFAULTS
41
- }
42
-
43
- Popover.prototype.setContent = function () {
44
- var $tip = this.tip()
45
- var title = this.getTitle()
46
- var content = this.getContent()
47
-
48
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
49
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
50
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
51
- ](content)
52
-
53
- $tip.removeClass('fade top bottom left right in')
54
-
55
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
56
- // this manually by checking the contents.
57
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
58
- }
59
-
60
- Popover.prototype.hasContent = function () {
61
- return this.getTitle() || this.getContent()
62
- }
63
-
64
- Popover.prototype.getContent = function () {
65
- var $e = this.$element
66
- var o = this.options
67
-
68
- return $e.attr('data-content')
69
- || (typeof o.content == 'function' ?
70
- o.content.call($e[0]) :
71
- o.content)
72
- }
73
-
74
- Popover.prototype.arrow = function () {
75
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
76
- }
77
-
78
-
79
- // POPOVER PLUGIN DEFINITION
80
- // =========================
81
-
82
- function Plugin(option) {
83
- return this.each(function () {
84
- var $this = $(this)
85
- var data = $this.data('bs.popover')
86
- var options = typeof option == 'object' && option
87
-
88
- if (!data && /destroy|hide/.test(option)) return
89
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
90
- if (typeof option == 'string') data[option]()
91
- })
92
- }
93
-
94
- var old = $.fn.popover
95
-
96
- $.fn.popover = Plugin
97
- $.fn.popover.Constructor = Popover
98
-
99
-
100
- // POPOVER NO CONFLICT
101
- // ===================
102
-
103
- $.fn.popover.noConflict = function () {
104
- $.fn.popover = old
105
- return this
106
- }
107
-
108
- }(jQuery);
@@ -1,172 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: scrollspy.js v3.3.6
3
- * http://getbootstrap.com/javascript/#scrollspy
4
- * ========================================================================
5
- * Copyright 2011-2015 Twitter, Inc.
6
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
- * ======================================================================== */
8
-
9
-
10
- +function ($) {
11
- 'use strict';
12
-
13
- // SCROLLSPY CLASS DEFINITION
14
- // ==========================
15
-
16
- function ScrollSpy(element, options) {
17
- this.$body = $(document.body)
18
- this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
19
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
20
- this.selector = (this.options.target || '') + ' .nav li > a'
21
- this.offsets = []
22
- this.targets = []
23
- this.activeTarget = null
24
- this.scrollHeight = 0
25
-
26
- this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
27
- this.refresh()
28
- this.process()
29
- }
30
-
31
- ScrollSpy.VERSION = '3.3.6'
32
-
33
- ScrollSpy.DEFAULTS = {
34
- offset: 10
35
- }
36
-
37
- ScrollSpy.prototype.getScrollHeight = function () {
38
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
39
- }
40
-
41
- ScrollSpy.prototype.refresh = function () {
42
- var that = this
43
- var offsetMethod = 'offset'
44
- var offsetBase = 0
45
-
46
- this.offsets = []
47
- this.targets = []
48
- this.scrollHeight = this.getScrollHeight()
49
-
50
- if (!$.isWindow(this.$scrollElement[0])) {
51
- offsetMethod = 'position'
52
- offsetBase = this.$scrollElement.scrollTop()
53
- }
54
-
55
- this.$body
56
- .find(this.selector)
57
- .map(function () {
58
- var $el = $(this)
59
- var href = $el.data('target') || $el.attr('href')
60
- var $href = /^#./.test(href) && $(href)
61
-
62
- return ($href
63
- && $href.length
64
- && $href.is(':visible')
65
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
66
- })
67
- .sort(function (a, b) { return a[0] - b[0] })
68
- .each(function () {
69
- that.offsets.push(this[0])
70
- that.targets.push(this[1])
71
- })
72
- }
73
-
74
- ScrollSpy.prototype.process = function () {
75
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
76
- var scrollHeight = this.getScrollHeight()
77
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
78
- var offsets = this.offsets
79
- var targets = this.targets
80
- var activeTarget = this.activeTarget
81
- var i
82
-
83
- if (this.scrollHeight != scrollHeight) {
84
- this.refresh()
85
- }
86
-
87
- if (scrollTop >= maxScroll) {
88
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
89
- }
90
-
91
- if (activeTarget && scrollTop < offsets[0]) {
92
- this.activeTarget = null
93
- return this.clear()
94
- }
95
-
96
- for (i = offsets.length; i--;) {
97
- activeTarget != targets[i]
98
- && scrollTop >= offsets[i]
99
- && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
100
- && this.activate(targets[i])
101
- }
102
- }
103
-
104
- ScrollSpy.prototype.activate = function (target) {
105
- this.activeTarget = target
106
-
107
- this.clear()
108
-
109
- var selector = this.selector +
110
- '[data-target="' + target + '"],' +
111
- this.selector + '[href="' + target + '"]'
112
-
113
- var active = $(selector)
114
- .parents('li')
115
- .addClass('active')
116
-
117
- if (active.parent('.dropdown-menu').length) {
118
- active = active
119
- .closest('li.dropdown')
120
- .addClass('active')
121
- }
122
-
123
- active.trigger('activate.bs.scrollspy')
124
- }
125
-
126
- ScrollSpy.prototype.clear = function () {
127
- $(this.selector)
128
- .parentsUntil(this.options.target, '.active')
129
- .removeClass('active')
130
- }
131
-
132
-
133
- // SCROLLSPY PLUGIN DEFINITION
134
- // ===========================
135
-
136
- function Plugin(option) {
137
- return this.each(function () {
138
- var $this = $(this)
139
- var data = $this.data('bs.scrollspy')
140
- var options = typeof option == 'object' && option
141
-
142
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
143
- if (typeof option == 'string') data[option]()
144
- })
145
- }
146
-
147
- var old = $.fn.scrollspy
148
-
149
- $.fn.scrollspy = Plugin
150
- $.fn.scrollspy.Constructor = ScrollSpy
151
-
152
-
153
- // SCROLLSPY NO CONFLICT
154
- // =====================
155
-
156
- $.fn.scrollspy.noConflict = function () {
157
- $.fn.scrollspy = old
158
- return this
159
- }
160
-
161
-
162
- // SCROLLSPY DATA-API
163
- // ==================
164
-
165
- $(window).on('load.bs.scrollspy.data-api', function () {
166
- $('[data-spy="scroll"]').each(function () {
167
- var $spy = $(this)
168
- Plugin.call($spy, $spy.data())
169
- })
170
- })
171
-
172
- }(jQuery);