flipper-ui 0.12.2 → 0.13.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/docs/ui/README.md +21 -3
  3. data/docs/ui/images/configured-ui.png +0 -0
  4. data/docs/ui/images/environment-banner.png +0 -0
  5. data/docs/ui/images/feature.png +0 -0
  6. data/docs/ui/images/features.png +0 -0
  7. data/lib/flipper/ui/assets/javascripts/application.coffee +3 -0
  8. data/lib/flipper/ui/assets/stylesheets/.DS_Store +0 -0
  9. data/lib/flipper/ui/assets/stylesheets/application.scss +9 -48
  10. data/lib/flipper/ui/assets/stylesheets/bootstrap/_alert.scss +51 -0
  11. data/lib/flipper/ui/assets/stylesheets/bootstrap/_badge.scss +47 -0
  12. data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumb.scss +38 -0
  13. data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-group.scss +166 -0
  14. data/lib/flipper/ui/assets/stylesheets/bootstrap/_buttons.scss +78 -95
  15. data/lib/flipper/ui/assets/stylesheets/bootstrap/_card.scss +270 -0
  16. data/lib/flipper/ui/assets/stylesheets/bootstrap/_carousel.scss +122 -200
  17. data/lib/flipper/ui/assets/stylesheets/bootstrap/_close.scss +12 -14
  18. data/lib/flipper/ui/assets/stylesheets/bootstrap/_code.scss +15 -28
  19. data/lib/flipper/ui/assets/stylesheets/bootstrap/_custom-forms.scss +297 -0
  20. data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdown.scss +131 -0
  21. data/lib/flipper/ui/assets/stylesheets/bootstrap/_forms.scss +210 -455
  22. data/lib/flipper/ui/assets/stylesheets/bootstrap/_functions.scss +86 -0
  23. data/lib/flipper/ui/assets/stylesheets/bootstrap/_grid.scss +29 -61
  24. data/lib/flipper/ui/assets/stylesheets/bootstrap/_images.scss +42 -0
  25. data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-group.scss +159 -0
  26. data/lib/flipper/ui/assets/stylesheets/bootstrap/_jumbotron.scss +8 -42
  27. data/lib/flipper/ui/assets/stylesheets/bootstrap/_list-group.scss +64 -73
  28. data/lib/flipper/ui/assets/stylesheets/bootstrap/_media.scss +3 -56
  29. data/lib/flipper/ui/assets/stylesheets/bootstrap/_mixins.scss +21 -18
  30. data/lib/flipper/ui/assets/stylesheets/bootstrap/_modal.scss +168 -0
  31. data/lib/flipper/ui/assets/stylesheets/bootstrap/_nav.scss +118 -0
  32. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navbar.scss +203 -554
  33. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pagination.scss +58 -69
  34. data/lib/flipper/ui/assets/stylesheets/bootstrap/_popover.scss +183 -0
  35. data/lib/flipper/ui/assets/stylesheets/bootstrap/_print.scss +71 -54
  36. data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress.scss +33 -0
  37. data/lib/flipper/ui/assets/stylesheets/bootstrap/_reboot.scss +482 -0
  38. data/lib/flipper/ui/assets/stylesheets/bootstrap/_root.scss +19 -0
  39. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tables.scss +109 -163
  40. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tooltip.scss +97 -84
  41. data/lib/flipper/ui/assets/stylesheets/bootstrap/_transitions.scss +36 -0
  42. data/lib/flipper/ui/assets/stylesheets/bootstrap/_type.scss +66 -239
  43. data/lib/flipper/ui/assets/stylesheets/bootstrap/_utilities.scss +14 -55
  44. data/lib/flipper/ui/assets/stylesheets/bootstrap/_variables.scss +726 -698
  45. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-grid.scss +32 -0
  46. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-reboot.scss +12 -0
  47. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap.scss +42 -0
  48. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alert.scss +13 -0
  49. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_background-variant.scss +14 -4
  50. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_badge.scss +12 -0
  51. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_border-radius.scss +25 -8
  52. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +5 -0
  53. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +123 -0
  54. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_buttons.scss +89 -32
  55. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_caret.scss +65 -0
  56. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_clearfix.scss +3 -18
  57. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_float.scss +11 -0
  58. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_forms.scss +115 -66
  59. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_gradients.scss +14 -27
  60. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +52 -66
  61. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid.scss +37 -107
  62. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hover.scss +39 -0
  63. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_image.scss +18 -15
  64. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_list-group.scss +10 -20
  65. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_lists.scss +7 -0
  66. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +3 -3
  67. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +10 -0
  68. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_pagination.scss +10 -11
  69. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-text.scss +17 -0
  70. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_resize.scss +1 -1
  71. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +35 -0
  72. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_size.scss +1 -5
  73. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_table-row.scss +16 -14
  74. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +7 -4
  75. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-hide.scss +9 -0
  76. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/{_text-overflow.scss → _text-truncate.scss} +2 -2
  77. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_transition.scss +9 -0
  78. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_visibility.scss +7 -0
  79. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_align.scss +8 -0
  80. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_background.scss +19 -0
  81. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_borders.scss +59 -0
  82. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_clearfix.scss +3 -0
  83. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_display.scss +38 -0
  84. data/lib/flipper/ui/assets/stylesheets/bootstrap/{_responsive-embed.scss → utilities/_embed.scss} +26 -9
  85. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_flex.scss +46 -0
  86. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_float.scss +9 -0
  87. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_position.scss +36 -0
  88. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +11 -0
  89. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_sizing.scss +12 -0
  90. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_spacing.scss +51 -0
  91. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_text.scss +52 -0
  92. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_visibility.scss +11 -0
  93. data/lib/flipper/ui/configuration.rb +24 -0
  94. data/lib/flipper/ui/decorators/feature.rb +3 -3
  95. data/lib/flipper/ui/public/css/application.css +6237 -2339
  96. data/lib/flipper/ui/public/js/application.js +3 -2
  97. data/lib/flipper/ui/views/add_actor.erb +7 -9
  98. data/lib/flipper/ui/views/add_feature.erb +8 -10
  99. data/lib/flipper/ui/views/add_group.erb +7 -9
  100. data/lib/flipper/ui/views/feature.erb +181 -141
  101. data/lib/flipper/ui/views/feature_creation_disabled.erb +1 -1
  102. data/lib/flipper/ui/views/feature_removal_disabled.erb +1 -1
  103. data/lib/flipper/ui/views/features.erb +12 -15
  104. data/lib/flipper/ui/views/layout.erb +25 -15
  105. data/lib/flipper/version.rb +1 -1
  106. data/spec/flipper/ui/actions/actors_gate_spec.rb +2 -1
  107. data/spec/flipper/ui/actions/add_feature_spec.rb +2 -1
  108. data/spec/flipper/ui/actions/groups_gate_spec.rb +2 -1
  109. data/spec/flipper/ui/configuration_spec.rb +27 -0
  110. data/spec/flipper/ui_spec.rb +24 -0
  111. metadata +58 -64
  112. data/lib/flipper/ui/assets/stylesheets/_bootstrap-compass.scss +0 -9
  113. data/lib/flipper/ui/assets/stylesheets/_bootstrap-mincer.scss +0 -19
  114. data/lib/flipper/ui/assets/stylesheets/_bootstrap-sprockets.scss +0 -9
  115. data/lib/flipper/ui/assets/stylesheets/_bootstrap.scss +0 -50
  116. data/lib/flipper/ui/assets/stylesheets/bootstrap/_alerts.scss +0 -73
  117. data/lib/flipper/ui/assets/stylesheets/bootstrap/_badges.scss +0 -68
  118. data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumbs.scss +0 -26
  119. data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-groups.scss +0 -243
  120. data/lib/flipper/ui/assets/stylesheets/bootstrap/_component-animations.scss +0 -37
  121. data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdowns.scss +0 -214
  122. data/lib/flipper/ui/assets/stylesheets/bootstrap/_glyphicons.scss +0 -305
  123. data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-groups.scss +0 -166
  124. data/lib/flipper/ui/assets/stylesheets/bootstrap/_labels.scss +0 -66
  125. data/lib/flipper/ui/assets/stylesheets/bootstrap/_modals.scss +0 -150
  126. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navs.scss +0 -242
  127. data/lib/flipper/ui/assets/stylesheets/bootstrap/_normalize.scss +0 -427
  128. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pager.scss +0 -54
  129. data/lib/flipper/ui/assets/stylesheets/bootstrap/_panels.scss +0 -265
  130. data/lib/flipper/ui/assets/stylesheets/bootstrap/_popovers.scss +0 -135
  131. data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress-bars.scss +0 -87
  132. data/lib/flipper/ui/assets/stylesheets/bootstrap/_responsive-utilities.scss +0 -177
  133. data/lib/flipper/ui/assets/stylesheets/bootstrap/_scaffolding.scss +0 -162
  134. data/lib/flipper/ui/assets/stylesheets/bootstrap/_theme.scss +0 -273
  135. data/lib/flipper/ui/assets/stylesheets/bootstrap/_thumbnails.scss +0 -38
  136. data/lib/flipper/ui/assets/stylesheets/bootstrap/_wells.scss +0 -29
  137. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alerts.scss +0 -14
  138. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_center-block.scss +0 -7
  139. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hide-text.scss +0 -21
  140. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_labels.scss +0 -12
  141. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  142. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_opacity.scss +0 -8
  143. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_panels.scss +0 -24
  144. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +0 -10
  145. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +0 -8
  146. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +0 -21
  147. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +0 -9
  148. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +0 -222
  149. data/lib/flipper/ui/public/css/primer.css +0 -1
  150. data/lib/flipper/ui/public/css/primer/primer.css +0 -1933
  151. data/lib/flipper/ui/public/css/scss/primer.css +0 -1933
  152. data/lib/flipper/ui/public/js/bootstrap-sprockets.js +0 -12
  153. data/lib/flipper/ui/public/js/bootstrap.js +0 -2317
  154. data/lib/flipper/ui/public/js/bootstrap.min.js +0 -7
  155. data/lib/flipper/ui/public/js/bootstrap/affix.js +0 -162
  156. data/lib/flipper/ui/public/js/bootstrap/alert.js +0 -94
  157. data/lib/flipper/ui/public/js/bootstrap/button.js +0 -116
  158. data/lib/flipper/ui/public/js/bootstrap/carousel.js +0 -237
  159. data/lib/flipper/ui/public/js/bootstrap/collapse.js +0 -211
  160. data/lib/flipper/ui/public/js/bootstrap/dropdown.js +0 -161
  161. data/lib/flipper/ui/public/js/bootstrap/modal.js +0 -339
  162. data/lib/flipper/ui/public/js/bootstrap/popover.js +0 -108
  163. data/lib/flipper/ui/public/js/bootstrap/scrollspy.js +0 -172
  164. data/lib/flipper/ui/public/js/bootstrap/tab.js +0 -153
  165. data/lib/flipper/ui/public/js/bootstrap/tooltip.js +0 -476
  166. data/lib/flipper/ui/public/js/bootstrap/transition.js +0 -59
@@ -1,211 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: collapse.js v3.3.4
3
- * http://getbootstrap.com/javascript/#collapse
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
- // COLLAPSE PUBLIC CLASS DEFINITION
14
- // ================================
15
-
16
- var Collapse = function (element, options) {
17
- this.$element = $(element)
18
- this.options = $.extend({}, Collapse.DEFAULTS, options)
19
- this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
20
- '[data-toggle="collapse"][data-target="#' + element.id + '"]')
21
- this.transitioning = null
22
-
23
- if (this.options.parent) {
24
- this.$parent = this.getParent()
25
- } else {
26
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
27
- }
28
-
29
- if (this.options.toggle) this.toggle()
30
- }
31
-
32
- Collapse.VERSION = '3.3.4'
33
-
34
- Collapse.TRANSITION_DURATION = 350
35
-
36
- Collapse.DEFAULTS = {
37
- toggle: true
38
- }
39
-
40
- Collapse.prototype.dimension = function () {
41
- var hasWidth = this.$element.hasClass('width')
42
- return hasWidth ? 'width' : 'height'
43
- }
44
-
45
- Collapse.prototype.show = function () {
46
- if (this.transitioning || this.$element.hasClass('in')) return
47
-
48
- var activesData
49
- var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
50
-
51
- if (actives && actives.length) {
52
- activesData = actives.data('bs.collapse')
53
- if (activesData && activesData.transitioning) return
54
- }
55
-
56
- var startEvent = $.Event('show.bs.collapse')
57
- this.$element.trigger(startEvent)
58
- if (startEvent.isDefaultPrevented()) return
59
-
60
- if (actives && actives.length) {
61
- Plugin.call(actives, 'hide')
62
- activesData || actives.data('bs.collapse', null)
63
- }
64
-
65
- var dimension = this.dimension()
66
-
67
- this.$element
68
- .removeClass('collapse')
69
- .addClass('collapsing')[dimension](0)
70
- .attr('aria-expanded', true)
71
-
72
- this.$trigger
73
- .removeClass('collapsed')
74
- .attr('aria-expanded', true)
75
-
76
- this.transitioning = 1
77
-
78
- var complete = function () {
79
- this.$element
80
- .removeClass('collapsing')
81
- .addClass('collapse in')[dimension]('')
82
- this.transitioning = 0
83
- this.$element
84
- .trigger('shown.bs.collapse')
85
- }
86
-
87
- if (!$.support.transition) return complete.call(this)
88
-
89
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
90
-
91
- this.$element
92
- .one('bsTransitionEnd', $.proxy(complete, this))
93
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
94
- }
95
-
96
- Collapse.prototype.hide = function () {
97
- if (this.transitioning || !this.$element.hasClass('in')) return
98
-
99
- var startEvent = $.Event('hide.bs.collapse')
100
- this.$element.trigger(startEvent)
101
- if (startEvent.isDefaultPrevented()) return
102
-
103
- var dimension = this.dimension()
104
-
105
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
106
-
107
- this.$element
108
- .addClass('collapsing')
109
- .removeClass('collapse in')
110
- .attr('aria-expanded', false)
111
-
112
- this.$trigger
113
- .addClass('collapsed')
114
- .attr('aria-expanded', false)
115
-
116
- this.transitioning = 1
117
-
118
- var complete = function () {
119
- this.transitioning = 0
120
- this.$element
121
- .removeClass('collapsing')
122
- .addClass('collapse')
123
- .trigger('hidden.bs.collapse')
124
- }
125
-
126
- if (!$.support.transition) return complete.call(this)
127
-
128
- this.$element
129
- [dimension](0)
130
- .one('bsTransitionEnd', $.proxy(complete, this))
131
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
132
- }
133
-
134
- Collapse.prototype.toggle = function () {
135
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
136
- }
137
-
138
- Collapse.prototype.getParent = function () {
139
- return $(this.options.parent)
140
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
141
- .each($.proxy(function (i, element) {
142
- var $element = $(element)
143
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
144
- }, this))
145
- .end()
146
- }
147
-
148
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
149
- var isOpen = $element.hasClass('in')
150
-
151
- $element.attr('aria-expanded', isOpen)
152
- $trigger
153
- .toggleClass('collapsed', !isOpen)
154
- .attr('aria-expanded', isOpen)
155
- }
156
-
157
- function getTargetFromTrigger($trigger) {
158
- var href
159
- var target = $trigger.attr('data-target')
160
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
161
-
162
- return $(target)
163
- }
164
-
165
-
166
- // COLLAPSE PLUGIN DEFINITION
167
- // ==========================
168
-
169
- function Plugin(option) {
170
- return this.each(function () {
171
- var $this = $(this)
172
- var data = $this.data('bs.collapse')
173
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
174
-
175
- if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
176
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
177
- if (typeof option == 'string') data[option]()
178
- })
179
- }
180
-
181
- var old = $.fn.collapse
182
-
183
- $.fn.collapse = Plugin
184
- $.fn.collapse.Constructor = Collapse
185
-
186
-
187
- // COLLAPSE NO CONFLICT
188
- // ====================
189
-
190
- $.fn.collapse.noConflict = function () {
191
- $.fn.collapse = old
192
- return this
193
- }
194
-
195
-
196
- // COLLAPSE DATA-API
197
- // =================
198
-
199
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
200
- var $this = $(this)
201
-
202
- if (!$this.attr('data-target')) e.preventDefault()
203
-
204
- var $target = getTargetFromTrigger($this)
205
- var data = $target.data('bs.collapse')
206
- var option = data ? 'toggle' : $this.data()
207
-
208
- Plugin.call($target, option)
209
- })
210
-
211
- }(jQuery);
@@ -1,161 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: dropdown.js v3.3.4
3
- * http://getbootstrap.com/javascript/#dropdowns
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
- // 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.4'
23
-
24
- Dropdown.prototype.toggle = function (e) {
25
- var $this = $(this)
26
-
27
- if ($this.is('.disabled, :disabled')) return
28
-
29
- var $parent = getParent($this)
30
- var isActive = $parent.hasClass('open')
31
-
32
- clearMenus()
33
-
34
- if (!isActive) {
35
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
36
- // if mobile we use a backdrop because click events don't delegate
37
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
38
- }
39
-
40
- var relatedTarget = { relatedTarget: this }
41
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
42
-
43
- if (e.isDefaultPrevented()) return
44
-
45
- $this
46
- .trigger('focus')
47
- .attr('aria-expanded', 'true')
48
-
49
- $parent
50
- .toggleClass('open')
51
- .trigger('shown.bs.dropdown', relatedTarget)
52
- }
53
-
54
- return false
55
- }
56
-
57
- Dropdown.prototype.keydown = function (e) {
58
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
59
-
60
- var $this = $(this)
61
-
62
- e.preventDefault()
63
- e.stopPropagation()
64
-
65
- if ($this.is('.disabled, :disabled')) return
66
-
67
- var $parent = getParent($this)
68
- var isActive = $parent.hasClass('open')
69
-
70
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
71
- if (e.which == 27) $parent.find(toggle).trigger('focus')
72
- return $this.trigger('click')
73
- }
74
-
75
- var desc = ' li:not(.disabled):visible a'
76
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
77
-
78
- if (!$items.length) return
79
-
80
- var index = $items.index(e.target)
81
-
82
- if (e.which == 38 && index > 0) index-- // up
83
- if (e.which == 40 && index < $items.length - 1) index++ // down
84
- if (!~index) index = 0
85
-
86
- $items.eq(index).trigger('focus')
87
- }
88
-
89
- function clearMenus(e) {
90
- if (e && e.which === 3) return
91
- $(backdrop).remove()
92
- $(toggle).each(function () {
93
- var $this = $(this)
94
- var $parent = getParent($this)
95
- var relatedTarget = { relatedTarget: this }
96
-
97
- if (!$parent.hasClass('open')) return
98
-
99
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
100
-
101
- if (e.isDefaultPrevented()) return
102
-
103
- $this.attr('aria-expanded', 'false')
104
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
105
- })
106
- }
107
-
108
- function getParent($this) {
109
- var selector = $this.attr('data-target')
110
-
111
- if (!selector) {
112
- selector = $this.attr('href')
113
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
114
- }
115
-
116
- var $parent = selector && $(selector)
117
-
118
- return $parent && $parent.length ? $parent : $this.parent()
119
- }
120
-
121
-
122
- // DROPDOWN PLUGIN DEFINITION
123
- // ==========================
124
-
125
- function Plugin(option) {
126
- return this.each(function () {
127
- var $this = $(this)
128
- var data = $this.data('bs.dropdown')
129
-
130
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
131
- if (typeof option == 'string') data[option].call($this)
132
- })
133
- }
134
-
135
- var old = $.fn.dropdown
136
-
137
- $.fn.dropdown = Plugin
138
- $.fn.dropdown.Constructor = Dropdown
139
-
140
-
141
- // DROPDOWN NO CONFLICT
142
- // ====================
143
-
144
- $.fn.dropdown.noConflict = function () {
145
- $.fn.dropdown = old
146
- return this
147
- }
148
-
149
-
150
- // APPLY TO STANDARD DROPDOWN ELEMENTS
151
- // ===================================
152
-
153
- $(document)
154
- .on('click.bs.dropdown.data-api', clearMenus)
155
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
156
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
157
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
158
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
159
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
160
-
161
- }(jQuery);
@@ -1,339 +0,0 @@
1
- /* ========================================================================
2
- * Bootstrap: modal.js v3.3.4
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.4'
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
94
- .addClass('in')
95
- .attr('aria-hidden', false)
96
-
97
- that.enforceFocus()
98
-
99
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
100
-
101
- transition ?
102
- that.$dialog // wait for modal to slide in
103
- .one('bsTransitionEnd', function () {
104
- that.$element.trigger('focus').trigger(e)
105
- })
106
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
107
- that.$element.trigger('focus').trigger(e)
108
- })
109
- }
110
-
111
- Modal.prototype.hide = function (e) {
112
- if (e) e.preventDefault()
113
-
114
- e = $.Event('hide.bs.modal')
115
-
116
- this.$element.trigger(e)
117
-
118
- if (!this.isShown || e.isDefaultPrevented()) return
119
-
120
- this.isShown = false
121
-
122
- this.escape()
123
- this.resize()
124
-
125
- $(document).off('focusin.bs.modal')
126
-
127
- this.$element
128
- .removeClass('in')
129
- .attr('aria-hidden', true)
130
- .off('click.dismiss.bs.modal')
131
- .off('mouseup.dismiss.bs.modal')
132
-
133
- this.$dialog.off('mousedown.dismiss.bs.modal')
134
-
135
- $.support.transition && this.$element.hasClass('fade') ?
136
- this.$element
137
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
138
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
139
- this.hideModal()
140
- }
141
-
142
- Modal.prototype.enforceFocus = function () {
143
- $(document)
144
- .off('focusin.bs.modal') // guard against infinite focus loop
145
- .on('focusin.bs.modal', $.proxy(function (e) {
146
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
147
- this.$element.trigger('focus')
148
- }
149
- }, this))
150
- }
151
-
152
- Modal.prototype.escape = function () {
153
- if (this.isShown && this.options.keyboard) {
154
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
155
- e.which == 27 && this.hide()
156
- }, this))
157
- } else if (!this.isShown) {
158
- this.$element.off('keydown.dismiss.bs.modal')
159
- }
160
- }
161
-
162
- Modal.prototype.resize = function () {
163
- if (this.isShown) {
164
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
165
- } else {
166
- $(window).off('resize.bs.modal')
167
- }
168
- }
169
-
170
- Modal.prototype.hideModal = function () {
171
- var that = this
172
- this.$element.hide()
173
- this.backdrop(function () {
174
- that.$body.removeClass('modal-open')
175
- that.resetAdjustments()
176
- that.resetScrollbar()
177
- that.$element.trigger('hidden.bs.modal')
178
- })
179
- }
180
-
181
- Modal.prototype.removeBackdrop = function () {
182
- this.$backdrop && this.$backdrop.remove()
183
- this.$backdrop = null
184
- }
185
-
186
- Modal.prototype.backdrop = function (callback) {
187
- var that = this
188
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
189
-
190
- if (this.isShown && this.options.backdrop) {
191
- var doAnimate = $.support.transition && animate
192
-
193
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
194
- .appendTo(this.$body)
195
-
196
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
197
- if (this.ignoreBackdropClick) {
198
- this.ignoreBackdropClick = false
199
- return
200
- }
201
- if (e.target !== e.currentTarget) return
202
- this.options.backdrop == 'static'
203
- ? this.$element[0].focus()
204
- : this.hide()
205
- }, this))
206
-
207
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
208
-
209
- this.$backdrop.addClass('in')
210
-
211
- if (!callback) return
212
-
213
- doAnimate ?
214
- this.$backdrop
215
- .one('bsTransitionEnd', callback)
216
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
217
- callback()
218
-
219
- } else if (!this.isShown && this.$backdrop) {
220
- this.$backdrop.removeClass('in')
221
-
222
- var callbackRemove = function () {
223
- that.removeBackdrop()
224
- callback && callback()
225
- }
226
- $.support.transition && this.$element.hasClass('fade') ?
227
- this.$backdrop
228
- .one('bsTransitionEnd', callbackRemove)
229
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
230
- callbackRemove()
231
-
232
- } else if (callback) {
233
- callback()
234
- }
235
- }
236
-
237
- // these following methods are used to handle overflowing modals
238
-
239
- Modal.prototype.handleUpdate = function () {
240
- this.adjustDialog()
241
- }
242
-
243
- Modal.prototype.adjustDialog = function () {
244
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
245
-
246
- this.$element.css({
247
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
248
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
249
- })
250
- }
251
-
252
- Modal.prototype.resetAdjustments = function () {
253
- this.$element.css({
254
- paddingLeft: '',
255
- paddingRight: ''
256
- })
257
- }
258
-
259
- Modal.prototype.checkScrollbar = function () {
260
- var fullWindowWidth = window.innerWidth
261
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
262
- var documentElementRect = document.documentElement.getBoundingClientRect()
263
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
264
- }
265
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
266
- this.scrollbarWidth = this.measureScrollbar()
267
- }
268
-
269
- Modal.prototype.setScrollbar = function () {
270
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
271
- this.originalBodyPad = document.body.style.paddingRight || ''
272
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
273
- }
274
-
275
- Modal.prototype.resetScrollbar = function () {
276
- this.$body.css('padding-right', this.originalBodyPad)
277
- }
278
-
279
- Modal.prototype.measureScrollbar = function () { // thx walsh
280
- var scrollDiv = document.createElement('div')
281
- scrollDiv.className = 'modal-scrollbar-measure'
282
- this.$body.append(scrollDiv)
283
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
284
- this.$body[0].removeChild(scrollDiv)
285
- return scrollbarWidth
286
- }
287
-
288
-
289
- // MODAL PLUGIN DEFINITION
290
- // =======================
291
-
292
- function Plugin(option, _relatedTarget) {
293
- return this.each(function () {
294
- var $this = $(this)
295
- var data = $this.data('bs.modal')
296
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
297
-
298
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
299
- if (typeof option == 'string') data[option](_relatedTarget)
300
- else if (options.show) data.show(_relatedTarget)
301
- })
302
- }
303
-
304
- var old = $.fn.modal
305
-
306
- $.fn.modal = Plugin
307
- $.fn.modal.Constructor = Modal
308
-
309
-
310
- // MODAL NO CONFLICT
311
- // =================
312
-
313
- $.fn.modal.noConflict = function () {
314
- $.fn.modal = old
315
- return this
316
- }
317
-
318
-
319
- // MODAL DATA-API
320
- // ==============
321
-
322
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
323
- var $this = $(this)
324
- var href = $this.attr('href')
325
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
326
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
327
-
328
- if ($this.is('a')) e.preventDefault()
329
-
330
- $target.one('show.bs.modal', function (showEvent) {
331
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
332
- $target.one('hidden.bs.modal', function () {
333
- $this.is(':visible') && $this.trigger('focus')
334
- })
335
- })
336
- Plugin.call($target, option, this)
337
- })
338
-
339
- }(jQuery);