inkstream 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +93 -0
  4. data/_config.yml +122 -0
  5. data/_includes/button.html +4 -0
  6. data/_includes/icon.html +1 -0
  7. data/_includes/nav-default.html +23 -0
  8. data/_includes/nav-header.html +25 -0
  9. data/_includes/post-list.html +59 -0
  10. data/_includes/post-meta.html +0 -0
  11. data/_includes/post-pagination.html +29 -0
  12. data/_includes/promo-section.html +12 -0
  13. data/_includes/site-before-end.html +1 -0
  14. data/_includes/site-before-start.html +1 -0
  15. data/_includes/site-favicons.html +7 -0
  16. data/_includes/site-fonts.html +13 -0
  17. data/_includes/site-footer-default.html +17 -0
  18. data/_includes/site-footer.html +12 -0
  19. data/_includes/site-header.html +46 -0
  20. data/_includes/site-styles.html +6 -0
  21. data/_layouts/blog.html +24 -0
  22. data/_layouts/default.html +62 -0
  23. data/_layouts/page.html +35 -0
  24. data/_layouts/post.html +201 -0
  25. data/assets/css/styles.css +11167 -0
  26. data/assets/images/about-me.jpg +0 -0
  27. data/assets/images/blog/blog-post-banner.jpg +0 -0
  28. data/assets/images/blog/blog-post-thumb-1.jpg +0 -0
  29. data/assets/images/blog/blog-post-thumb-10.jpg +0 -0
  30. data/assets/images/blog/blog-post-thumb-11.jpg +0 -0
  31. data/assets/images/blog/blog-post-thumb-12.jpg +0 -0
  32. data/assets/images/blog/blog-post-thumb-2.jpg +0 -0
  33. data/assets/images/blog/blog-post-thumb-3.jpg +0 -0
  34. data/assets/images/blog/blog-post-thumb-4.jpg +0 -0
  35. data/assets/images/blog/blog-post-thumb-5.jpg +0 -0
  36. data/assets/images/blog/blog-post-thumb-6.jpg +0 -0
  37. data/assets/images/blog/blog-post-thumb-7.jpg +0 -0
  38. data/assets/images/blog/blog-post-thumb-8.jpg +0 -0
  39. data/assets/images/blog/blog-post-thumb-9.jpg +0 -0
  40. data/assets/images/posts/default-post-img.jpg +0 -0
  41. data/assets/images/posts/text-syntax.jpg +0 -0
  42. data/assets/images/posts/welcome.jpg +0 -0
  43. data/assets/images/profile.png +0 -0
  44. data/assets/images/promo-banner.jpg +0 -0
  45. data/assets/js/blog.js +9 -0
  46. data/assets/js/demo/style-switcher.js +45 -0
  47. data/assets/plugins/bootstrap/js/bootstrap.min.js +7 -0
  48. data/assets/plugins/jquery-3.3.1.min.js +2 -0
  49. data/assets/plugins/popper.min.js +5 -0
  50. data/assets/scss/bootstrap/js/dist/alert.js +199 -0
  51. data/assets/scss/bootstrap/js/dist/alert.js.map +1 -0
  52. data/assets/scss/bootstrap/js/dist/button.js +187 -0
  53. data/assets/scss/bootstrap/js/dist/button.js.map +1 -0
  54. data/assets/scss/bootstrap/js/dist/carousel.js +668 -0
  55. data/assets/scss/bootstrap/js/dist/carousel.js.map +1 -0
  56. data/assets/scss/bootstrap/js/dist/collapse.js +428 -0
  57. data/assets/scss/bootstrap/js/dist/collapse.js.map +1 -0
  58. data/assets/scss/bootstrap/js/dist/dropdown.js +595 -0
  59. data/assets/scss/bootstrap/js/dist/dropdown.js.map +1 -0
  60. data/assets/scss/bootstrap/js/dist/index.js +23 -0
  61. data/assets/scss/bootstrap/js/dist/index.js.map +1 -0
  62. data/assets/scss/bootstrap/js/dist/modal.js +650 -0
  63. data/assets/scss/bootstrap/js/dist/modal.js.map +1 -0
  64. data/assets/scss/bootstrap/js/dist/popover.js +261 -0
  65. data/assets/scss/bootstrap/js/dist/popover.js.map +1 -0
  66. data/assets/scss/bootstrap/js/dist/scrollspy.js +375 -0
  67. data/assets/scss/bootstrap/js/dist/scrollspy.js.map +1 -0
  68. data/assets/scss/bootstrap/js/dist/tab.js +269 -0
  69. data/assets/scss/bootstrap/js/dist/tab.js.map +1 -0
  70. data/assets/scss/bootstrap/js/dist/toast.js +283 -0
  71. data/assets/scss/bootstrap/js/dist/toast.js.map +1 -0
  72. data/assets/scss/bootstrap/js/dist/tooltip.js +760 -0
  73. data/assets/scss/bootstrap/js/dist/tooltip.js.map +1 -0
  74. data/assets/scss/bootstrap/js/dist/util.js +172 -0
  75. data/assets/scss/bootstrap/js/dist/util.js.map +1 -0
  76. data/assets/scss/bootstrap/js/src/alert.js +179 -0
  77. data/assets/scss/bootstrap/js/src/button.js +171 -0
  78. data/assets/scss/bootstrap/js/src/carousel.js +606 -0
  79. data/assets/scss/bootstrap/js/src/collapse.js +402 -0
  80. data/assets/scss/bootstrap/js/src/dropdown.js +545 -0
  81. data/assets/scss/bootstrap/js/src/index.js +52 -0
  82. data/assets/scss/bootstrap/js/src/modal.js +594 -0
  83. data/assets/scss/bootstrap/js/src/popover.js +184 -0
  84. data/assets/scss/bootstrap/js/src/scrollspy.js +326 -0
  85. data/assets/scss/bootstrap/js/src/tab.js +260 -0
  86. data/assets/scss/bootstrap/js/src/toast.js +227 -0
  87. data/assets/scss/bootstrap/js/src/tooltip.js +752 -0
  88. data/assets/scss/bootstrap/js/src/util.js +177 -0
  89. data/assets/scss/bootstrap/js/tests/README.md +69 -0
  90. data/assets/scss/bootstrap/js/tests/browsers.js +82 -0
  91. data/assets/scss/bootstrap/js/tests/index.html +133 -0
  92. data/assets/scss/bootstrap/js/tests/integration/bundle.js +8 -0
  93. data/assets/scss/bootstrap/js/tests/integration/index.html +66 -0
  94. data/assets/scss/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
  95. data/assets/scss/bootstrap/js/tests/karma.conf.js +143 -0
  96. data/assets/scss/bootstrap/js/tests/unit/.eslintrc.json +40 -0
  97. data/assets/scss/bootstrap/js/tests/unit/alert.js +123 -0
  98. data/assets/scss/bootstrap/js/tests/unit/button.js +222 -0
  99. data/assets/scss/bootstrap/js/tests/unit/carousel.js +1333 -0
  100. data/assets/scss/bootstrap/js/tests/unit/collapse.js +892 -0
  101. data/assets/scss/bootstrap/js/tests/unit/dropdown.js +1419 -0
  102. data/assets/scss/bootstrap/js/tests/unit/modal.js +815 -0
  103. data/assets/scss/bootstrap/js/tests/unit/popover.js +471 -0
  104. data/assets/scss/bootstrap/js/tests/unit/scrollspy.js +728 -0
  105. data/assets/scss/bootstrap/js/tests/unit/tab.js +518 -0
  106. data/assets/scss/bootstrap/js/tests/unit/toast.js +259 -0
  107. data/assets/scss/bootstrap/js/tests/unit/tooltip.js +1109 -0
  108. data/assets/scss/bootstrap/js/tests/unit/util.js +163 -0
  109. data/assets/scss/bootstrap/js/tests/visual/alert.html +58 -0
  110. data/assets/scss/bootstrap/js/tests/visual/button.html +51 -0
  111. data/assets/scss/bootstrap/js/tests/visual/carousel.html +66 -0
  112. data/assets/scss/bootstrap/js/tests/visual/collapse.html +78 -0
  113. data/assets/scss/bootstrap/js/tests/visual/dropdown.html +212 -0
  114. data/assets/scss/bootstrap/js/tests/visual/modal.html +268 -0
  115. data/assets/scss/bootstrap/js/tests/visual/popover.html +46 -0
  116. data/assets/scss/bootstrap/js/tests/visual/scrollspy.html +95 -0
  117. data/assets/scss/bootstrap/js/tests/visual/tab.html +234 -0
  118. data/assets/scss/bootstrap/js/tests/visual/toast.html +72 -0
  119. data/assets/scss/bootstrap/js/tests/visual/tooltip.html +106 -0
  120. data/assets/scss/bootstrap/scss/_alert.scss +51 -0
  121. data/assets/scss/bootstrap/scss/_badge.scss +54 -0
  122. data/assets/scss/bootstrap/scss/_breadcrumb.scss +41 -0
  123. data/assets/scss/bootstrap/scss/_button-group.scss +163 -0
  124. data/assets/scss/bootstrap/scss/_buttons.scss +137 -0
  125. data/assets/scss/bootstrap/scss/_card.scss +289 -0
  126. data/assets/scss/bootstrap/scss/_carousel.scss +197 -0
  127. data/assets/scss/bootstrap/scss/_close.scss +41 -0
  128. data/assets/scss/bootstrap/scss/_code.scss +48 -0
  129. data/assets/scss/bootstrap/scss/_custom-forms.scss +507 -0
  130. data/assets/scss/bootstrap/scss/_dropdown.scss +191 -0
  131. data/assets/scss/bootstrap/scss/_forms.scss +330 -0
  132. data/assets/scss/bootstrap/scss/_functions.scss +86 -0
  133. data/assets/scss/bootstrap/scss/_grid.scss +52 -0
  134. data/assets/scss/bootstrap/scss/_images.scss +42 -0
  135. data/assets/scss/bootstrap/scss/_input-group.scss +193 -0
  136. data/assets/scss/bootstrap/scss/_jumbotron.scss +17 -0
  137. data/assets/scss/bootstrap/scss/_list-group.scss +149 -0
  138. data/assets/scss/bootstrap/scss/_media.scss +8 -0
  139. data/assets/scss/bootstrap/scss/_mixins.scss +47 -0
  140. data/assets/scss/bootstrap/scss/_modal.scss +229 -0
  141. data/assets/scss/bootstrap/scss/_nav.scss +120 -0
  142. data/assets/scss/bootstrap/scss/_navbar.scss +294 -0
  143. data/assets/scss/bootstrap/scss/_pagination.scss +73 -0
  144. data/assets/scss/bootstrap/scss/_popover.scss +171 -0
  145. data/assets/scss/bootstrap/scss/_print.scss +141 -0
  146. data/assets/scss/bootstrap/scss/_progress.scss +43 -0
  147. data/assets/scss/bootstrap/scss/_reboot.scss +483 -0
  148. data/assets/scss/bootstrap/scss/_root.scss +19 -0
  149. data/assets/scss/bootstrap/scss/_spinners.scss +55 -0
  150. data/assets/scss/bootstrap/scss/_tables.scss +185 -0
  151. data/assets/scss/bootstrap/scss/_toasts.scss +44 -0
  152. data/assets/scss/bootstrap/scss/_tooltip.scss +115 -0
  153. data/assets/scss/bootstrap/scss/_transitions.scss +20 -0
  154. data/assets/scss/bootstrap/scss/_type.scss +125 -0
  155. data/assets/scss/bootstrap/scss/_utilities.scss +17 -0
  156. data/assets/scss/bootstrap/scss/_variables.scss +1123 -0
  157. data/assets/scss/bootstrap/scss/bootstrap-grid.scss +29 -0
  158. data/assets/scss/bootstrap/scss/bootstrap-reboot.scss +12 -0
  159. data/assets/scss/bootstrap/scss/bootstrap.scss +44 -0
  160. data/assets/scss/bootstrap/scss/mixins/_alert.scss +13 -0
  161. data/assets/scss/bootstrap/scss/mixins/_background-variant.scss +21 -0
  162. data/assets/scss/bootstrap/scss/mixins/_badge.scss +17 -0
  163. data/assets/scss/bootstrap/scss/mixins/_border-radius.scss +63 -0
  164. data/assets/scss/bootstrap/scss/mixins/_box-shadow.scss +20 -0
  165. data/assets/scss/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  166. data/assets/scss/bootstrap/scss/mixins/_buttons.scss +107 -0
  167. data/assets/scss/bootstrap/scss/mixins/_caret.scss +62 -0
  168. data/assets/scss/bootstrap/scss/mixins/_clearfix.scss +7 -0
  169. data/assets/scss/bootstrap/scss/mixins/_deprecate.scss +10 -0
  170. data/assets/scss/bootstrap/scss/mixins/_float.scss +14 -0
  171. data/assets/scss/bootstrap/scss/mixins/_forms.scss +192 -0
  172. data/assets/scss/bootstrap/scss/mixins/_gradients.scss +45 -0
  173. data/assets/scss/bootstrap/scss/mixins/_grid-framework.scss +66 -0
  174. data/assets/scss/bootstrap/scss/mixins/_grid.scss +51 -0
  175. data/assets/scss/bootstrap/scss/mixins/_hover.scss +37 -0
  176. data/assets/scss/bootstrap/scss/mixins/_image.scss +36 -0
  177. data/assets/scss/bootstrap/scss/mixins/_list-group.scss +21 -0
  178. data/assets/scss/bootstrap/scss/mixins/_lists.scss +7 -0
  179. data/assets/scss/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  180. data/assets/scss/bootstrap/scss/mixins/_pagination.scss +22 -0
  181. data/assets/scss/bootstrap/scss/mixins/_reset-text.scss +17 -0
  182. data/assets/scss/bootstrap/scss/mixins/_resize.scss +6 -0
  183. data/assets/scss/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  184. data/assets/scss/bootstrap/scss/mixins/_size.scss +7 -0
  185. data/assets/scss/bootstrap/scss/mixins/_table-row.scss +39 -0
  186. data/assets/scss/bootstrap/scss/mixins/_text-emphasis.scss +16 -0
  187. data/assets/scss/bootstrap/scss/mixins/_text-hide.scss +11 -0
  188. data/assets/scss/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  189. data/assets/scss/bootstrap/scss/mixins/_transition.scss +16 -0
  190. data/assets/scss/bootstrap/scss/mixins/_visibility.scss +8 -0
  191. data/assets/scss/bootstrap/scss/utilities/_align.scss +8 -0
  192. data/assets/scss/bootstrap/scss/utilities/_background.scss +19 -0
  193. data/assets/scss/bootstrap/scss/utilities/_borders.scss +75 -0
  194. data/assets/scss/bootstrap/scss/utilities/_clearfix.scss +3 -0
  195. data/assets/scss/bootstrap/scss/utilities/_display.scss +26 -0
  196. data/assets/scss/bootstrap/scss/utilities/_embed.scss +39 -0
  197. data/assets/scss/bootstrap/scss/utilities/_flex.scss +51 -0
  198. data/assets/scss/bootstrap/scss/utilities/_float.scss +11 -0
  199. data/assets/scss/bootstrap/scss/utilities/_overflow.scss +5 -0
  200. data/assets/scss/bootstrap/scss/utilities/_position.scss +32 -0
  201. data/assets/scss/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  202. data/assets/scss/bootstrap/scss/utilities/_shadows.scss +6 -0
  203. data/assets/scss/bootstrap/scss/utilities/_sizing.scss +20 -0
  204. data/assets/scss/bootstrap/scss/utilities/_spacing.scss +73 -0
  205. data/assets/scss/bootstrap/scss/utilities/_stretched-link.scss +19 -0
  206. data/assets/scss/bootstrap/scss/utilities/_text.scss +72 -0
  207. data/assets/scss/bootstrap/scss/utilities/_visibility.scss +13 -0
  208. data/assets/scss/bootstrap/scss/vendor/_rfs.scss +212 -0
  209. data/assets/scss/theme/_about.scss +28 -0
  210. data/assets/scss/theme/_base.scss +207 -0
  211. data/assets/scss/theme/_blog.scss +140 -0
  212. data/assets/scss/theme/_demo.scss +153 -0
  213. data/assets/scss/theme/_mixins.scss +34 -0
  214. data/assets/scss/theme/_responsive.scss +88 -0
  215. data/assets/scss/theme/styles.scss +14 -0
  216. data/assets/scss/theme-8.scss +41 -0
  217. data/assets/styles.scss +6 -0
  218. metadata +219 -3
@@ -0,0 +1,163 @@
1
+ $(function () {
2
+ 'use strict'
3
+
4
+ window.Util = typeof bootstrap !== 'undefined' ? bootstrap.Util : Util
5
+
6
+ QUnit.module('util', {
7
+ afterEach: function () {
8
+ $('#qunit-fixture').html('')
9
+ }
10
+ })
11
+
12
+ QUnit.test('Util.getSelectorFromElement should return the correct element', function (assert) {
13
+ assert.expect(2)
14
+
15
+ var $el = $('<div data-target="body"></div>').appendTo($('#qunit-fixture'))
16
+ assert.strictEqual(Util.getSelectorFromElement($el[0]), 'body')
17
+
18
+ // Not found element
19
+ var $el2 = $('<div data-target="#fakeDiv"></div>').appendTo($('#qunit-fixture'))
20
+ assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)
21
+ })
22
+
23
+ QUnit.test('Util.getSelectorFromElement should return null when there is a bad selector', function (assert) {
24
+ assert.expect(2)
25
+
26
+ var $el = $('<div data-target="#1"></div>').appendTo($('#qunit-fixture'))
27
+
28
+ assert.strictEqual(Util.getSelectorFromElement($el[0]), null)
29
+
30
+ var $el2 = $('<a href="/posts"></a>').appendTo($('#qunit-fixture'))
31
+
32
+ assert.strictEqual(Util.getSelectorFromElement($el2[0]), null)
33
+ })
34
+
35
+ QUnit.test('Util.typeCheckConfig should thrown an error when a bad config is passed', function (assert) {
36
+ assert.expect(1)
37
+ var namePlugin = 'collapse'
38
+ var defaultType = {
39
+ toggle: 'boolean',
40
+ parent: '(string|element)'
41
+ }
42
+ var config = {
43
+ toggle: true,
44
+ parent: 777
45
+ }
46
+
47
+ try {
48
+ Util.typeCheckConfig(namePlugin, config, defaultType)
49
+ } catch (err) {
50
+ assert.strictEqual(err.message, 'COLLAPSE: Option "parent" provided type "number" but expected type "(string|element)".')
51
+ }
52
+ })
53
+
54
+ QUnit.test('Util.isElement should check if we passed an element or not', function (assert) {
55
+ assert.expect(3)
56
+ var $div = $('<div id="test"></div>').appendTo($('#qunit-fixture'))
57
+
58
+ assert.strictEqual(Util.isElement($div), 1)
59
+ assert.strictEqual(Util.isElement($div[0]), 1)
60
+ assert.strictEqual(typeof Util.isElement({}) === 'undefined', true)
61
+ })
62
+
63
+ QUnit.test('Util.getTransitionDurationFromElement should accept transition durations in milliseconds', function (assert) {
64
+ assert.expect(1)
65
+ var $div = $('<div style="transition: all 300ms ease-out;"></div>').appendTo($('#qunit-fixture'))
66
+
67
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 300)
68
+ })
69
+
70
+ QUnit.test('Util.getTransitionDurationFromElement should accept transition durations in seconds', function (assert) {
71
+ assert.expect(1)
72
+ var $div = $('<div style="transition: all .4s ease-out;"></div>').appendTo($('#qunit-fixture'))
73
+
74
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 400)
75
+ })
76
+
77
+ QUnit.test('Util.getTransitionDurationFromElement should return the addition of transition-delay and transition-duration', function (assert) {
78
+ assert.expect(2)
79
+ var $fixture = $('#qunit-fixture')
80
+ var $div = $('<div style="transition: all 0s 150ms ease-out;"></div>').appendTo($fixture)
81
+ var $div2 = $('<div style="transition: all .25s 30ms ease-out;"></div>').appendTo($fixture)
82
+
83
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 150)
84
+ assert.strictEqual(Util.getTransitionDurationFromElement($div2[0]), 280)
85
+ })
86
+
87
+ QUnit.test('Util.getTransitionDurationFromElement should get the first transition duration if multiple transition durations are defined', function (assert) {
88
+ assert.expect(1)
89
+ var $div = $('<div style="transition: transform .3s ease-out, opacity .2s;"></div>').appendTo($('#qunit-fixture'))
90
+
91
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 300)
92
+ })
93
+
94
+ QUnit.test('Util.getTransitionDurationFromElement should return 0 if transition duration is not defined', function (assert) {
95
+ assert.expect(1)
96
+ var $div = $('<div></div>').appendTo($('#qunit-fixture'))
97
+
98
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 0)
99
+ })
100
+
101
+ QUnit.test('Util.getTransitionDurationFromElement should return 0 if element is not found in DOM', function (assert) {
102
+ assert.expect(1)
103
+ var $div = $('#fake-id')
104
+
105
+ assert.strictEqual(Util.getTransitionDurationFromElement($div[0]), 0)
106
+ })
107
+
108
+ QUnit.test('Util.getUID should generate a new id uniq', function (assert) {
109
+ assert.expect(2)
110
+ var id = Util.getUID('test')
111
+ var id2 = Util.getUID('test')
112
+
113
+ assert.ok(id !== id2, id + ' !== ' + id2)
114
+
115
+ id = Util.getUID('test')
116
+ $('<div id="' + id + '"></div>').appendTo($('#qunit-fixture'))
117
+
118
+ id2 = Util.getUID('test')
119
+ assert.ok(id !== id2, id + ' !== ' + id2)
120
+ })
121
+
122
+ QUnit.test('Util.supportsTransitionEnd should return true', function (assert) {
123
+ assert.expect(1)
124
+ assert.ok(Util.supportsTransitionEnd())
125
+ })
126
+
127
+ QUnit.test('Util.findShadowRoot should find the shadow DOM root', function (assert) {
128
+ // Only for newer browsers
129
+ if (!document.documentElement.attachShadow) {
130
+ assert.expect(0)
131
+ return
132
+ }
133
+
134
+ assert.expect(2)
135
+ var $div = $('<div id="test"></div>').appendTo($('#qunit-fixture'))
136
+ var shadowRoot = $div[0].attachShadow({
137
+ mode: 'open'
138
+ })
139
+
140
+ assert.equal(shadowRoot, Util.findShadowRoot(shadowRoot))
141
+ shadowRoot.innerHTML = '<button>Shadow Button</button>'
142
+ assert.equal(shadowRoot, Util.findShadowRoot(shadowRoot.firstChild))
143
+ })
144
+
145
+ QUnit.test('Util.findShadowRoot should return null when attachShadow is not available', function (assert) {
146
+ assert.expect(1)
147
+
148
+ var $div = $('<div id="test"></div>').appendTo($('#qunit-fixture'))
149
+ if (!document.documentElement.attachShadow) {
150
+ assert.equal(null, Util.findShadowRoot($div[0]))
151
+ } else {
152
+ var sandbox = sinon.createSandbox()
153
+
154
+ sandbox.replace(document.documentElement, 'attachShadow', function () {
155
+ // to avoid empty function
156
+ return $div
157
+ })
158
+
159
+ assert.equal(null, Util.findShadowRoot($div[0]))
160
+ sandbox.restore()
161
+ }
162
+ })
163
+ })
@@ -0,0 +1,58 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
7
+ <title>Alert</title>
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <h1>Alert <small>Bootstrap Visual Test</small></h1>
12
+
13
+ <div class="alert alert-warning alert-dismissible fade show" role="alert">
14
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close">
15
+ <span aria-hidden="true">&times;</span>
16
+ </button>
17
+ <strong>Holy guacamole!</strong> You should check in on some of those fields below.
18
+ </div>
19
+
20
+ <div class="alert alert-danger alert-dismissible fade show" role="alert">
21
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close">
22
+ <span aria-hidden="true">&times;</span>
23
+ </button>
24
+ <p>
25
+ <strong>Oh snap!</strong> <a href="#" class="alert-link">Change a few things up</a> and try submitting again.
26
+ </p>
27
+ <p>
28
+ <button type="button" class="btn btn-danger">Danger</button>
29
+ <button type="button" class="btn btn-secondary">Secondary</button>
30
+ </p>
31
+ </div>
32
+
33
+ <div class="alert alert-danger alert-dismissible fade show" role="alert">
34
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close">
35
+ <span aria-hidden="true">&times;</span>
36
+ </button>
37
+ <p>
38
+ <strong>Oh snap!</strong> <a href="#" class="alert-link">Change a few things up</a> and try submitting again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.
39
+ </p>
40
+ <p>
41
+ <button type="button" class="btn btn-danger">Take this action</button>
42
+ <button type="button" class="btn btn-primary">Or do this</button>
43
+ </p>
44
+ </div>
45
+
46
+ <div class="alert alert-warning alert-dismissible fade show" role="alert" style="transition-duration: 5s;">
47
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close">
48
+ <span aria-hidden="true">&times;</span>
49
+ </button>
50
+ This alert will take 5 seconds to fade out.
51
+ </div>
52
+ </div>
53
+
54
+ <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
55
+ <script src="../../dist/util.js"></script>
56
+ <script src="../../dist/alert.js"></script>
57
+ </body>
58
+ </html>
@@ -0,0 +1,51 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
7
+ <title>Button</title>
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <h1>Button <small>Bootstrap Visual Test</small></h1>
12
+
13
+ <button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">
14
+ Single toggle
15
+ </button>
16
+
17
+ <p>For checkboxes and radio buttons, ensure that keyboard behavior is functioning correctly.</p>
18
+ <p>Navigate to the checkboxes with the keyboard (generally, using <kbd>TAB</kbd> / <kbd>SHIFT + TAB</kbd>), and ensure that <kbd>SPACE</kbd> toggles the currently focused checkbox. Click on one of the checkboxes using the mouse, ensure that focus was correctly set on the actual checkbox, and that <kbd>SPACE</kbd> toggles the checkbox again.</p>
19
+
20
+ <div class="btn-group" data-toggle="buttons">
21
+ <label class="btn btn-primary active">
22
+ <input type="checkbox" checked autocomplete="off"> Checkbox 1 (pre-checked)
23
+ </label>
24
+ <label class="btn btn-primary">
25
+ <input type="checkbox" autocomplete="off"> Checkbox 2
26
+ </label>
27
+ <label class="btn btn-primary">
28
+ <input type="checkbox" autocomplete="off"> Checkbox 3
29
+ </label>
30
+ </div>
31
+
32
+ <p>Navigate to the radio button group with the keyboard (generally, using <kbd>TAB</kbd> / <kbd>SHIFT + TAB</kbd>). If no radio button was initially set to be selected, the first/last radio button should receive focus (depending on whether you navigated "forward" to the group with <kbd>TAB</kbd> or "backwards" using <kbd>SHIFT + TAB</kbd>). If a radio button was already selected, navigating with the keyboard should set focus to that particular radio button. Only one radio button in a group should receive focus at any given time. Ensure that the selected radio button can be changed by using the <kbd>←</kbd> and <kbd>→</kbd> arrow keys. Click on one of the radio buttons with the mouse, ensure that focus was correctly set on the actual radio button, and that <kbd>←</kbd> and <kbd>→</kbd> change the selected radio button again.</p>
33
+
34
+ <div class="btn-group" data-toggle="buttons">
35
+ <label class="btn btn-primary active">
36
+ <input type="radio" name="options" id="option1" autocomplete="off" checked> Radio 1 (preselected)
37
+ </label>
38
+ <label class="btn btn-primary">
39
+ <input type="radio" name="options" id="option2" autocomplete="off"> Radio 2
40
+ </label>
41
+ <label class="btn btn-primary">
42
+ <input type="radio" name="options" id="option3" autocomplete="off"> Radio 3
43
+ </label>
44
+ </div>
45
+ </div>
46
+
47
+ <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
48
+ <script src="../../dist/util.js"></script>
49
+ <script src="../../dist/button.js"></script>
50
+ </body>
51
+ </html>
@@ -0,0 +1,66 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
7
+ <title>Carousel</title>
8
+ <style>
9
+ .carousel-item {
10
+ transition: transform 2s ease, opacity .5s ease;
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="container">
16
+ <h1>Carousel <small>Bootstrap Visual Test</small></h1>
17
+
18
+ <p>The transition duration should be around 2s. Also, the carousel shouldn't slide when its window/tab is hidden. Check the console log.</p>
19
+
20
+ <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
21
+ <ol class="carousel-indicators">
22
+ <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
23
+ <li data-target="#carousel-example-generic" data-slide-to="1"></li>
24
+ <li data-target="#carousel-example-generic" data-slide-to="2"></li>
25
+ </ol>
26
+ <div class="carousel-inner">
27
+ <div class="carousel-item active">
28
+ <img src="https://i.imgur.com/iEZgY7Y.jpg" alt="First slide">
29
+ </div>
30
+ <div class="carousel-item">
31
+ <img src="https://i.imgur.com/eNWn1Xs.jpg" alt="Second slide">
32
+ </div>
33
+ <div class="carousel-item">
34
+ <img src="https://i.imgur.com/Nm7xoti.jpg" alt="Third slide">
35
+ </div>
36
+ </div>
37
+ <a class="carousel-control-prev" href="#carousel-example-generic" role="button" data-slide="prev">
38
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
39
+ <span class="sr-only">Previous</span>
40
+ </a>
41
+ <a class="carousel-control-next" href="#carousel-example-generic" role="button" data-slide="next">
42
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
43
+ <span class="sr-only">Next</span>
44
+ </a>
45
+ </div>
46
+ </div>
47
+
48
+ <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
49
+ <script src="../../dist/util.js"></script>
50
+ <script src="../../dist/carousel.js"></script>
51
+ <script>
52
+ $(function() {
53
+ var t0, t1;
54
+
55
+ // Test to show that the carousel doesn't slide when the current tab isn't visible
56
+ // Test to show that transition-duration can be changed with css
57
+ $('#carousel-example-generic').on('slid.bs.carousel', function(event) {
58
+ t1 = performance.now()
59
+ console.log('transition-duration took' + (t1 - t0) + 'ms, slid at ', event.timeStamp)
60
+ }).on('slide.bs.carousel', function() {
61
+ t0 = performance.now()
62
+ })
63
+ })
64
+ </script>
65
+ </body>
66
+ </html>
@@ -0,0 +1,78 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
7
+ <title>Collapse</title>
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <h1>Collapse <small>Bootstrap Visual Test</small></h1>
12
+
13
+ <div id="accordion" role="tablist">
14
+ <div class="card">
15
+ <div class="card-header" role="tab" id="headingOne">
16
+ <h5 class="mb-0">
17
+ <a data-toggle="collapse" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
18
+ Collapsible Group Item #1
19
+ </a>
20
+ </h5>
21
+ </div>
22
+
23
+ <div id="collapseOne" class="collapse show" data-parent="#accordion" role="tabpanel" aria-labelledby="headingOne">
24
+ <div class="card-body">
25
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <div class="card">
30
+ <div class="card-header" role="tab" id="headingTwo">
31
+ <h5 class="mb-0">
32
+ <a class="collapsed" data-toggle="collapse" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
33
+ Collapsible Group Item #2
34
+ </a>
35
+ </h5>
36
+ </div>
37
+ <div id="collapseTwo" class="collapse" data-parent="#accordion" role="tabpanel" aria-labelledby="headingTwo">
38
+ <div class="card-body">
39
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
40
+ </div>
41
+ </div>
42
+ </div>
43
+ <div class="card">
44
+ <div class="card-header" role="tab" id="headingThree">
45
+ <h5 class="mb-0">
46
+ <a class="collapsed" data-toggle="collapse" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
47
+ Collapsible Group Item #3
48
+ </a>
49
+ </h5>
50
+ </div>
51
+ <div id="collapseThree" class="collapse" data-parent="#accordion" role="tabpanel" aria-labelledby="headingThree">
52
+ <div class="card-body">
53
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
54
+ </div>
55
+ </div>
56
+ </div>
57
+ <div class="card">
58
+ <div class="card-header" role="tab" id="headingFour">
59
+ <h5 class="mb-0">
60
+ <a class="collapsed" data-toggle="collapse" href="#collapseFour" aria-expanded="false" aria-controls="collapseFour">
61
+ Collapsible Group Item with XSS in data-parent
62
+ </a>
63
+ </h5>
64
+ </div>
65
+ <div id="collapseFour" class="collapse" data-parent="<img src=1 onerror=alert(123) />" role="tabpanel" aria-labelledby="headingFour">
66
+ <div class="card-body">
67
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+
74
+ <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
75
+ <script src="../../dist/util.js"></script>
76
+ <script src="../../dist/collapse.js"></script>
77
+ </body>
78
+ </html>
@@ -0,0 +1,212 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <link rel="stylesheet" href="../../../dist/css/bootstrap.min.css">
7
+ <title>Dropdown</title>
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <h1>Dropdown <small>Bootstrap Visual Test</small></h1>
12
+
13
+ <nav class="navbar navbar-expand-md navbar-light bg-light">
14
+ <a class="navbar-brand" href="#">Navbar</a>
15
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
16
+ <span class="navbar-toggler-icon"></span>
17
+ </button>
18
+
19
+ <div class="collapse navbar-collapse" id="navbarResponsive">
20
+ <ul class="navbar-nav">
21
+ <li class="nav-item active">
22
+ <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
23
+ </li>
24
+ <li class="nav-item">
25
+ <a class="nav-link" href="#">Link</a>
26
+ </li>
27
+ <li class="nav-item">
28
+ <a class="nav-link" href="#">Link</a>
29
+ </li>
30
+ <li class="nav-item dropdown">
31
+ <a class="nav-link dropdown-toggle" href="#" id="dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
32
+ <div class="dropdown-menu" aria-labelledby="dropdown">
33
+ <a class="dropdown-item" href="#">Action</a>
34
+ <a class="dropdown-item" href="#">Another action</a>
35
+ <a class="dropdown-item" href="#">Something else here</a>
36
+ </div>
37
+ </li>
38
+ </ul>
39
+ </div>
40
+ </nav>
41
+
42
+ <ul class="nav nav-pills mt-3">
43
+ <li class="nav-item">
44
+ <a class="nav-link active" href="#">Active</a>
45
+ </li>
46
+ <li class="nav-item">
47
+ <a class="nav-link" href="#">Link</a>
48
+ </li>
49
+ <li class="nav-item">
50
+ <a class="nav-link" href="#">Link</a>
51
+ </li>
52
+ <li class="nav-item dropdown">
53
+ <a class="nav-link dropdown-toggle" href="#" id="dropdown2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
54
+ <div class="dropdown-menu" aria-labelledby="dropdown2">
55
+ <a class="dropdown-item" href="#">Action</a>
56
+ <a class="dropdown-item" href="#">Another action</a>
57
+ <a class="dropdown-item" href="#">Something else here</a>
58
+ </div>
59
+ </li>
60
+ </ul>
61
+
62
+ <div class="row">
63
+ <div class="col-sm-12 mt-4">
64
+ <div class="btn-group dropup">
65
+ <button type="button" class="btn btn-secondary">Dropup split</button>
66
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
67
+ <span class="sr-only">Dropup split</span>
68
+ </button>
69
+ <div class="dropdown-menu">
70
+ <a class="dropdown-item" href="#">Action</a>
71
+ <a class="dropdown-item" href="#">Another action</a>
72
+ <a class="dropdown-item" href="#">Something else here</a>
73
+ </div>
74
+ </div>
75
+
76
+ <div class="btn-group dropup">
77
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropup</button>
78
+ <div class="dropdown-menu">
79
+ <a class="dropdown-item" href="#">Action</a>
80
+ <a class="dropdown-item" href="#">Another action</a>
81
+ <a class="dropdown-item" href="#">Something else here</a>
82
+ </div>
83
+ </div>
84
+
85
+ <div class="btn-group">
86
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
87
+ This dropdown's menu is right-aligned
88
+ </button>
89
+ <div class="dropdown-menu dropdown-menu-right">
90
+ <button class="dropdown-item" type="button">Action</button>
91
+ <button class="dropdown-item" type="button">Another action</button>
92
+ <button class="dropdown-item" type="button">Something else here</button>
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <div class="col-sm-12 mt-4">
98
+ <div class="btn-group dropup" role="group">
99
+ <a href="#" class="btn btn-secondary">Dropup split align right</a>
100
+ <button type="button" id="dropdown-page-subheader-button-3" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
101
+ <span class="sr-only">Product actions</span>
102
+ </button>
103
+ <div class="dropdown-menu dropdown-menu-right">
104
+ <button class="dropdown-item" type="button">Action</button>
105
+ <button class="dropdown-item" type="button">Another action</button>
106
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
107
+ </div>
108
+ </div>
109
+ <div class="btn-group dropup">
110
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropup align right</button>
111
+ <div class="dropdown-menu dropdown-menu-right">
112
+ <button class="dropdown-item" type="button">Action</button>
113
+ <button class="dropdown-item" type="button">Another action</button>
114
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+ <div class="col-sm-12 mt-4">
120
+ <div class="btn-group dropright" role="group">
121
+ <a href="#" class="btn btn-secondary">Dropright split</a>
122
+ <button type="button" id="dropdown-page-subheader-button-4" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
123
+ <span class="sr-only">Product actions</span>
124
+ </button>
125
+ <div class="dropdown-menu">
126
+ <button class="dropdown-item" type="button">Action</button>
127
+ <button class="dropdown-item" type="button">Another action</button>
128
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
129
+ </div>
130
+ </div>
131
+ <div class="btn-group dropright">
132
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuRight" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
133
+ Dropright
134
+ </button>
135
+ <div class="dropdown-menu" aria-labelledby="dropdownMenuRight">
136
+ <button class="dropdown-item" type="button">Action</button>
137
+ <button class="dropdown-item" type="button">Another action</button>
138
+ <button class="dropdown-item" type="button">Something else here</button>
139
+ </div>
140
+ </div>
141
+ <!-- dropleft -->
142
+ <div class="btn-group dropleft" role="group">
143
+ <a href="#" class="btn btn-secondary">Dropleft split</a>
144
+ <button type="button" id="dropdown-page-subheader-button-5" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
145
+ <span class="sr-only">Product actions</span>
146
+ </button>
147
+ <div class="dropdown-menu">
148
+ <button class="dropdown-item" type="button">Action</button>
149
+ <button class="dropdown-item" type="button">Another action</button>
150
+ <button class="dropdown-item" type="button">Something else here with a long text</button>
151
+ </div>
152
+ </div>
153
+ <div class="btn-group dropleft">
154
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropleftMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
155
+ Dropleft
156
+ </button>
157
+ <div class="dropdown-menu" aria-labelledby="dropleftMenu">
158
+ <button class="dropdown-item" type="button">Action</button>
159
+ <button class="dropdown-item" type="button">Another action</button>
160
+ <button class="dropdown-item" type="button">Something else here</button>
161
+ </div>
162
+ </div>
163
+ </div>
164
+ </div>
165
+
166
+ <div class="row">
167
+ <div class="col-sm-3 mt-4">
168
+ <div class="btn-group dropdown">
169
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-offset="10,20">Dropdown offset</button>
170
+ <div class="dropdown-menu">
171
+ <a class="dropdown-item" href="#">Action</a>
172
+ <a class="dropdown-item" href="#">Another action</a>
173
+ <a class="dropdown-item" href="#">Something else here</a>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ <div class="col-sm-3 mt-4">
178
+ <div class="btn-group dropdown">
179
+ <button type="button" class="btn btn-secondary">Dropdown reference</button>
180
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-reference="parent">
181
+ <span class="sr-only">Dropdown split</span>
182
+ </button>
183
+ <div class="dropdown-menu">
184
+ <a class="dropdown-item" href="#">Action</a>
185
+ <a class="dropdown-item" href="#">Another action</a>
186
+ <a class="dropdown-item" href="#">Something else here</a>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ <div class="col-sm-3 mt-4">
191
+ <div class="dropdown">
192
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" data-display="static" aria-haspopup="true" aria-expanded="false">
193
+ Dropdown menu without Popper.js
194
+ </button>
195
+ <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
196
+ <a class="dropdown-item" href="#">Action</a>
197
+ <a class="dropdown-item" href="#">Another action</a>
198
+ <a class="dropdown-item" href="#">Something else here</a>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ </div>
205
+
206
+ <script src="../../../node_modules/jquery/dist/jquery.slim.min.js"></script>
207
+ <script src="../../../node_modules/popper.js/dist/umd/popper.min.js"></script>
208
+ <script src="../../dist/util.js"></script>
209
+ <script src="../../dist/dropdown.js"></script>
210
+ <script src="../../dist/collapse.js"></script>
211
+ </body>
212
+ </html>