vertx-howtos-jekyll-theme 0.1.0
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.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +52 -0
- data/_layouts/page.html +61 -0
- data/_sass/bootstrap/js/dist/alert.js +199 -0
- data/_sass/bootstrap/js/dist/alert.js.map +1 -0
- data/_sass/bootstrap/js/dist/button.js +187 -0
- data/_sass/bootstrap/js/dist/button.js.map +1 -0
- data/_sass/bootstrap/js/dist/carousel.js +666 -0
- data/_sass/bootstrap/js/dist/carousel.js.map +1 -0
- data/_sass/bootstrap/js/dist/collapse.js +428 -0
- data/_sass/bootstrap/js/dist/collapse.js.map +1 -0
- data/_sass/bootstrap/js/dist/dropdown.js +591 -0
- data/_sass/bootstrap/js/dist/dropdown.js.map +1 -0
- data/_sass/bootstrap/js/dist/index.js +23 -0
- data/_sass/bootstrap/js/dist/index.js.map +1 -0
- data/_sass/bootstrap/js/dist/modal.js +644 -0
- data/_sass/bootstrap/js/dist/modal.js.map +1 -0
- data/_sass/bootstrap/js/dist/popover.js +261 -0
- data/_sass/bootstrap/js/dist/popover.js.map +1 -0
- data/_sass/bootstrap/js/dist/scrollspy.js +375 -0
- data/_sass/bootstrap/js/dist/scrollspy.js.map +1 -0
- data/_sass/bootstrap/js/dist/tab.js +266 -0
- data/_sass/bootstrap/js/dist/tab.js.map +1 -0
- data/_sass/bootstrap/js/dist/toast.js +278 -0
- data/_sass/bootstrap/js/dist/toast.js.map +1 -0
- data/_sass/bootstrap/js/dist/tooltip.js +745 -0
- data/_sass/bootstrap/js/dist/tooltip.js.map +1 -0
- data/_sass/bootstrap/js/dist/util.js +168 -0
- data/_sass/bootstrap/js/dist/util.js.map +1 -0
- data/_sass/bootstrap/js/src/alert.js +179 -0
- data/_sass/bootstrap/js/src/button.js +171 -0
- data/_sass/bootstrap/js/src/carousel.js +604 -0
- data/_sass/bootstrap/js/src/collapse.js +402 -0
- data/_sass/bootstrap/js/src/dropdown.js +538 -0
- data/_sass/bootstrap/js/src/index.js +52 -0
- data/_sass/bootstrap/js/src/modal.js +587 -0
- data/_sass/bootstrap/js/src/popover.js +184 -0
- data/_sass/bootstrap/js/src/scrollspy.js +326 -0
- data/_sass/bootstrap/js/src/tab.js +257 -0
- data/_sass/bootstrap/js/src/toast.js +223 -0
- data/_sass/bootstrap/js/src/tooltip.js +735 -0
- data/_sass/bootstrap/js/src/util.js +173 -0
- data/_sass/bootstrap/js/tests/README.md +69 -0
- data/_sass/bootstrap/js/tests/browsers.js +82 -0
- data/_sass/bootstrap/js/tests/index.html +145 -0
- data/_sass/bootstrap/js/tests/integration/bundle.js +8 -0
- data/_sass/bootstrap/js/tests/integration/index.html +66 -0
- data/_sass/bootstrap/js/tests/integration/rollup.bundle.js +20 -0
- data/_sass/bootstrap/js/tests/karma.conf.js +145 -0
- data/_sass/bootstrap/js/tests/unit/.eslintrc.json +40 -0
- data/_sass/bootstrap/js/tests/unit/alert.js +123 -0
- data/_sass/bootstrap/js/tests/unit/button.js +222 -0
- data/_sass/bootstrap/js/tests/unit/carousel.js +1273 -0
- data/_sass/bootstrap/js/tests/unit/collapse.js +892 -0
- data/_sass/bootstrap/js/tests/unit/dropdown.js +1364 -0
- data/_sass/bootstrap/js/tests/unit/modal.js +796 -0
- data/_sass/bootstrap/js/tests/unit/popover.js +471 -0
- data/_sass/bootstrap/js/tests/unit/scrollspy.js +728 -0
- data/_sass/bootstrap/js/tests/unit/tab.js +462 -0
- data/_sass/bootstrap/js/tests/unit/toast.js +239 -0
- data/_sass/bootstrap/js/tests/unit/tooltip.js +1072 -0
- data/_sass/bootstrap/js/tests/unit/util.js +164 -0
- data/_sass/bootstrap/js/tests/visual/alert.html +58 -0
- data/_sass/bootstrap/js/tests/visual/button.html +51 -0
- data/_sass/bootstrap/js/tests/visual/carousel.html +66 -0
- data/_sass/bootstrap/js/tests/visual/collapse.html +78 -0
- data/_sass/bootstrap/js/tests/visual/dropdown.html +212 -0
- data/_sass/bootstrap/js/tests/visual/modal.html +268 -0
- data/_sass/bootstrap/js/tests/visual/popover.html +46 -0
- data/_sass/bootstrap/js/tests/visual/scrollspy.html +95 -0
- data/_sass/bootstrap/js/tests/visual/tab.html +234 -0
- data/_sass/bootstrap/js/tests/visual/toast.html +72 -0
- data/_sass/bootstrap/js/tests/visual/tooltip.html +106 -0
- data/_sass/bootstrap/scss/_alert.scss +51 -0
- data/_sass/bootstrap/scss/_badge.scss +53 -0
- data/_sass/bootstrap/scss/_breadcrumb.scss +41 -0
- data/_sass/bootstrap/scss/_button-group.scss +163 -0
- data/_sass/bootstrap/scss/_buttons.scss +140 -0
- data/_sass/bootstrap/scss/_card.scss +310 -0
- data/_sass/bootstrap/scss/_carousel.scss +198 -0
- data/_sass/bootstrap/scss/_close.scss +44 -0
- data/_sass/bootstrap/scss/_code.scss +48 -0
- data/_sass/bootstrap/scss/_custom-forms.scss +507 -0
- data/_sass/bootstrap/scss/_dropdown.scss +191 -0
- data/_sass/bootstrap/scss/_forms.scss +334 -0
- data/_sass/bootstrap/scss/_functions.scss +86 -0
- data/_sass/bootstrap/scss/_grid.scss +52 -0
- data/_sass/bootstrap/scss/_images.scss +42 -0
- data/_sass/bootstrap/scss/_input-group.scss +193 -0
- data/_sass/bootstrap/scss/_jumbotron.scss +16 -0
- data/_sass/bootstrap/scss/_list-group.scss +121 -0
- data/_sass/bootstrap/scss/_media.scss +8 -0
- data/_sass/bootstrap/scss/_mixins.scss +41 -0
- data/_sass/bootstrap/scss/_modal.scss +186 -0
- data/_sass/bootstrap/scss/_nav.scss +120 -0
- data/_sass/bootstrap/scss/_navbar.scss +299 -0
- data/_sass/bootstrap/scss/_pagination.scss +78 -0
- data/_sass/bootstrap/scss/_popover.scss +183 -0
- data/_sass/bootstrap/scss/_print.scss +141 -0
- data/_sass/bootstrap/scss/_progress.scss +34 -0
- data/_sass/bootstrap/scss/_reboot.scss +462 -0
- data/_sass/bootstrap/scss/_root.scss +19 -0
- data/_sass/bootstrap/scss/_spinners.scss +53 -0
- data/_sass/bootstrap/scss/_tables.scss +187 -0
- data/_sass/bootstrap/scss/_toasts.scss +43 -0
- data/_sass/bootstrap/scss/_tooltip.scss +115 -0
- data/_sass/bootstrap/scss/_transitions.scss +22 -0
- data/_sass/bootstrap/scss/_type.scss +125 -0
- data/_sass/bootstrap/scss/_utilities.scss +16 -0
- data/_sass/bootstrap/scss/_variables.scss +1091 -0
- data/_sass/bootstrap/scss/bootstrap-grid.scss +29 -0
- data/_sass/bootstrap/scss/bootstrap-reboot.scss +12 -0
- data/_sass/bootstrap/scss/bootstrap.scss +44 -0
- data/_sass/bootstrap/scss/mixins/_alert.scss +13 -0
- data/_sass/bootstrap/scss/mixins/_background-variant.scss +21 -0
- data/_sass/bootstrap/scss/mixins/_badge.scss +11 -0
- data/_sass/bootstrap/scss/mixins/_border-radius.scss +35 -0
- data/_sass/bootstrap/scss/mixins/_box-shadow.scss +5 -0
- data/_sass/bootstrap/scss/mixins/_breakpoints.scss +123 -0
- data/_sass/bootstrap/scss/mixins/_buttons.scss +111 -0
- data/_sass/bootstrap/scss/mixins/_caret.scss +62 -0
- data/_sass/bootstrap/scss/mixins/_clearfix.scss +7 -0
- data/_sass/bootstrap/scss/mixins/_float.scss +11 -0
- data/_sass/bootstrap/scss/mixins/_forms.scss +198 -0
- data/_sass/bootstrap/scss/mixins/_gradients.scss +45 -0
- data/_sass/bootstrap/scss/mixins/_grid-framework.scss +66 -0
- data/_sass/bootstrap/scss/mixins/_grid.scss +51 -0
- data/_sass/bootstrap/scss/mixins/_hover.scss +37 -0
- data/_sass/bootstrap/scss/mixins/_image.scss +36 -0
- data/_sass/bootstrap/scss/mixins/_list-group.scss +21 -0
- data/_sass/bootstrap/scss/mixins/_lists.scss +7 -0
- data/_sass/bootstrap/scss/mixins/_nav-divider.scss +10 -0
- data/_sass/bootstrap/scss/mixins/_pagination.scss +22 -0
- data/_sass/bootstrap/scss/mixins/_reset-text.scss +17 -0
- data/_sass/bootstrap/scss/mixins/_resize.scss +6 -0
- data/_sass/bootstrap/scss/mixins/_screen-reader.scss +33 -0
- data/_sass/bootstrap/scss/mixins/_size.scss +6 -0
- data/_sass/bootstrap/scss/mixins/_table-row.scss +39 -0
- data/_sass/bootstrap/scss/mixins/_text-emphasis.scss +14 -0
- data/_sass/bootstrap/scss/mixins/_text-hide.scss +13 -0
- data/_sass/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- data/_sass/bootstrap/scss/mixins/_transition.scss +16 -0
- data/_sass/bootstrap/scss/mixins/_visibility.scss +7 -0
- data/_sass/bootstrap/scss/utilities/_align.scss +8 -0
- data/_sass/bootstrap/scss/utilities/_background.scss +19 -0
- data/_sass/bootstrap/scss/utilities/_borders.scss +63 -0
- data/_sass/bootstrap/scss/utilities/_clearfix.scss +3 -0
- data/_sass/bootstrap/scss/utilities/_display.scss +38 -0
- data/_sass/bootstrap/scss/utilities/_embed.scss +39 -0
- data/_sass/bootstrap/scss/utilities/_flex.scss +51 -0
- data/_sass/bootstrap/scss/utilities/_float.scss +9 -0
- data/_sass/bootstrap/scss/utilities/_overflow.scss +5 -0
- data/_sass/bootstrap/scss/utilities/_position.scss +32 -0
- data/_sass/bootstrap/scss/utilities/_screenreaders.scss +11 -0
- data/_sass/bootstrap/scss/utilities/_shadows.scss +6 -0
- data/_sass/bootstrap/scss/utilities/_sizing.scss +20 -0
- data/_sass/bootstrap/scss/utilities/_spacing.scss +73 -0
- data/_sass/bootstrap/scss/utilities/_text.scss +67 -0
- data/_sass/bootstrap/scss/utilities/_visibility.scss +11 -0
- data/_sass/custom.scss +1 -0
- data/assets/css/style.scss +65 -0
- data/assets/images/vertx-square.svg +1 -0
- metadata +248 -0
@@ -0,0 +1,173 @@
|
|
1
|
+
/**
|
2
|
+
* --------------------------------------------------------------------------
|
3
|
+
* Bootstrap (v4.2.1): util.js
|
4
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5
|
+
* --------------------------------------------------------------------------
|
6
|
+
*/
|
7
|
+
|
8
|
+
import $ from 'jquery'
|
9
|
+
|
10
|
+
/**
|
11
|
+
* ------------------------------------------------------------------------
|
12
|
+
* Private TransitionEnd Helpers
|
13
|
+
* ------------------------------------------------------------------------
|
14
|
+
*/
|
15
|
+
|
16
|
+
const TRANSITION_END = 'transitionend'
|
17
|
+
const MAX_UID = 1000000
|
18
|
+
const MILLISECONDS_MULTIPLIER = 1000
|
19
|
+
|
20
|
+
// Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
21
|
+
function toType(obj) {
|
22
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()
|
23
|
+
}
|
24
|
+
|
25
|
+
function getSpecialTransitionEndEvent() {
|
26
|
+
return {
|
27
|
+
bindType: TRANSITION_END,
|
28
|
+
delegateType: TRANSITION_END,
|
29
|
+
handle(event) {
|
30
|
+
if ($(event.target).is(this)) {
|
31
|
+
return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params
|
32
|
+
}
|
33
|
+
return undefined // eslint-disable-line no-undefined
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
function transitionEndEmulator(duration) {
|
39
|
+
let called = false
|
40
|
+
|
41
|
+
$(this).one(Util.TRANSITION_END, () => {
|
42
|
+
called = true
|
43
|
+
})
|
44
|
+
|
45
|
+
setTimeout(() => {
|
46
|
+
if (!called) {
|
47
|
+
Util.triggerTransitionEnd(this)
|
48
|
+
}
|
49
|
+
}, duration)
|
50
|
+
|
51
|
+
return this
|
52
|
+
}
|
53
|
+
|
54
|
+
function setTransitionEndSupport() {
|
55
|
+
$.fn.emulateTransitionEnd = transitionEndEmulator
|
56
|
+
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* --------------------------------------------------------------------------
|
61
|
+
* Public Util Api
|
62
|
+
* --------------------------------------------------------------------------
|
63
|
+
*/
|
64
|
+
|
65
|
+
const Util = {
|
66
|
+
|
67
|
+
TRANSITION_END: 'bsTransitionEnd',
|
68
|
+
|
69
|
+
getUID(prefix) {
|
70
|
+
do {
|
71
|
+
// eslint-disable-next-line no-bitwise
|
72
|
+
prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here
|
73
|
+
} while (document.getElementById(prefix))
|
74
|
+
return prefix
|
75
|
+
},
|
76
|
+
|
77
|
+
getSelectorFromElement(element) {
|
78
|
+
let selector = element.getAttribute('data-target')
|
79
|
+
|
80
|
+
if (!selector || selector === '#') {
|
81
|
+
const hrefAttr = element.getAttribute('href')
|
82
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''
|
83
|
+
}
|
84
|
+
|
85
|
+
return selector && document.querySelector(selector) ? selector : null
|
86
|
+
},
|
87
|
+
|
88
|
+
getTransitionDurationFromElement(element) {
|
89
|
+
if (!element) {
|
90
|
+
return 0
|
91
|
+
}
|
92
|
+
|
93
|
+
// Get transition-duration of the element
|
94
|
+
let transitionDuration = $(element).css('transition-duration')
|
95
|
+
let transitionDelay = $(element).css('transition-delay')
|
96
|
+
|
97
|
+
const floatTransitionDuration = parseFloat(transitionDuration)
|
98
|
+
const floatTransitionDelay = parseFloat(transitionDelay)
|
99
|
+
|
100
|
+
// Return 0 if element or transition duration is not found
|
101
|
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
102
|
+
return 0
|
103
|
+
}
|
104
|
+
|
105
|
+
// If multiple durations are defined, take the first
|
106
|
+
transitionDuration = transitionDuration.split(',')[0]
|
107
|
+
transitionDelay = transitionDelay.split(',')[0]
|
108
|
+
|
109
|
+
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER
|
110
|
+
},
|
111
|
+
|
112
|
+
reflow(element) {
|
113
|
+
return element.offsetHeight
|
114
|
+
},
|
115
|
+
|
116
|
+
triggerTransitionEnd(element) {
|
117
|
+
$(element).trigger(TRANSITION_END)
|
118
|
+
},
|
119
|
+
|
120
|
+
// TODO: Remove in v5
|
121
|
+
supportsTransitionEnd() {
|
122
|
+
return Boolean(TRANSITION_END)
|
123
|
+
},
|
124
|
+
|
125
|
+
isElement(obj) {
|
126
|
+
return (obj[0] || obj).nodeType
|
127
|
+
},
|
128
|
+
|
129
|
+
typeCheckConfig(componentName, config, configTypes) {
|
130
|
+
for (const property in configTypes) {
|
131
|
+
if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
|
132
|
+
const expectedTypes = configTypes[property]
|
133
|
+
const value = config[property]
|
134
|
+
const valueType = value && Util.isElement(value)
|
135
|
+
? 'element' : toType(value)
|
136
|
+
|
137
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
138
|
+
throw new Error(
|
139
|
+
`${componentName.toUpperCase()}: ` +
|
140
|
+
`Option "${property}" provided type "${valueType}" ` +
|
141
|
+
`but expected type "${expectedTypes}".`)
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
},
|
146
|
+
|
147
|
+
findShadowRoot(element) {
|
148
|
+
if (!document.documentElement.attachShadow) {
|
149
|
+
return null
|
150
|
+
}
|
151
|
+
|
152
|
+
// Can find the shadow root otherwise it'll return the document
|
153
|
+
if (typeof element.getRootNode === 'function') {
|
154
|
+
const root = element.getRootNode()
|
155
|
+
return root instanceof ShadowRoot ? root : null
|
156
|
+
}
|
157
|
+
|
158
|
+
if (element instanceof ShadowRoot) {
|
159
|
+
return element
|
160
|
+
}
|
161
|
+
|
162
|
+
// when we don't find a shadow root
|
163
|
+
if (!element.parentNode) {
|
164
|
+
return null
|
165
|
+
}
|
166
|
+
|
167
|
+
return Util.findShadowRoot(element.parentNode)
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
setTransitionEndSupport()
|
172
|
+
|
173
|
+
export default Util
|
@@ -0,0 +1,69 @@
|
|
1
|
+
## How does Bootstrap's test suite work?
|
2
|
+
|
3
|
+
Bootstrap uses [QUnit](https://qunitjs.com/) and [Sinon](https://sinonjs.org/). Each plugin has a file dedicated to its tests in `unit/<plugin-name>.js`.
|
4
|
+
|
5
|
+
* `unit/` contains the unit test files for each Bootstrap plugin.
|
6
|
+
* `vendor/` contains third-party testing-related code (QUnit, jQuery and Sinon).
|
7
|
+
* `visual/` contains "visual" tests which are run interactively in real browsers and require manual verification by humans.
|
8
|
+
|
9
|
+
To run the unit test suite via [Karma](https://karma-runner.github.io/), run `npm run js-test`.
|
10
|
+
|
11
|
+
To run the unit test suite via a real web browser, open `index.html` in the browser.
|
12
|
+
|
13
|
+
|
14
|
+
## How do I add a new unit test?
|
15
|
+
|
16
|
+
1. Locate and open the file dedicated to the plugin which you need to add tests to (`unit/<plugin-name>.js`).
|
17
|
+
2. Review the [QUnit API Documentation](https://api.qunitjs.com/) and use the existing tests as references for how to structure your new tests.
|
18
|
+
3. Write the necessary unit test(s) for the new or revised functionality.
|
19
|
+
4. Run `npm run js-test` to see the results of your newly-added test(s).
|
20
|
+
|
21
|
+
**Note:** Your new unit tests should fail before your changes are applied to the plugin, and should pass after your changes are applied to the plugin.
|
22
|
+
|
23
|
+
## What should a unit test look like?
|
24
|
+
|
25
|
+
* Each test should have a unique name clearly stating what unit is being tested.
|
26
|
+
* Each test should test only one unit per test, although one test can include several assertions. Create multiple tests for multiple units of functionality.
|
27
|
+
* Each test should begin with [`assert.expect`](https://api.qunitjs.com/assert/expect/) to ensure that the expected assertions are run.
|
28
|
+
* Each test should follow the project's [JavaScript Code Guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#js)
|
29
|
+
|
30
|
+
## Code coverage
|
31
|
+
|
32
|
+
Currently we're aiming for at least 80% test coverage for our code. To ensure your changes meet or exceed this limit, run `npm run js-compile && npm run js-test` and open the file in `js/coverage/lcov-report/index.html` to see the code coverage for each plugin. See more details when you select a plugin and ensure your change is fully covered by unit tests.
|
33
|
+
|
34
|
+
### Example tests
|
35
|
+
|
36
|
+
```js
|
37
|
+
// Synchronous test
|
38
|
+
QUnit.test('should describe the unit being tested', function (assert) {
|
39
|
+
assert.expect(1)
|
40
|
+
var templateHTML = '<div class="alert alert-danger fade show">' +
|
41
|
+
'<a class="close" href="#" data-dismiss="alert">×</a>' +
|
42
|
+
'<p><strong>Template necessary for the test.</p>' +
|
43
|
+
'</div>'
|
44
|
+
var $alert = $(templateHTML).appendTo('#qunit-fixture').bootstrapAlert()
|
45
|
+
|
46
|
+
$alert.find('.close').trigger('click')
|
47
|
+
|
48
|
+
// Make assertion
|
49
|
+
assert.strictEqual($alert.hasClass('show'), false, 'remove .show class on .close click')
|
50
|
+
})
|
51
|
+
|
52
|
+
// Asynchronous test
|
53
|
+
QUnit.test('should describe the unit being tested', function (assert) {
|
54
|
+
assert.expect(2)
|
55
|
+
var done = assert.async()
|
56
|
+
|
57
|
+
var $tooltip = $('<div title="tooltip title"></div>').bootstrapTooltip()
|
58
|
+
var tooltipInstance = $tooltip.data('bs.tooltip')
|
59
|
+
var spyShow = sinon.spy(tooltipInstance, 'show')
|
60
|
+
|
61
|
+
$tooltip.appendTo('#qunit-fixture')
|
62
|
+
.on('shown.bs.tooltip', function () {
|
63
|
+
assert.ok(true, '"shown" event was fired after calling "show"')
|
64
|
+
assert.ok(spyShow.called, 'show called')
|
65
|
+
done()
|
66
|
+
})
|
67
|
+
.bootstrapTooltip('show')
|
68
|
+
})
|
69
|
+
```
|
@@ -0,0 +1,82 @@
|
|
1
|
+
/* eslint-env node */
|
2
|
+
/* eslint-disable camelcase */
|
3
|
+
|
4
|
+
const browsers = {
|
5
|
+
safariMac: {
|
6
|
+
base: 'BrowserStack',
|
7
|
+
os: 'OS X',
|
8
|
+
os_version: 'High Sierra',
|
9
|
+
browser: 'Safari',
|
10
|
+
browser_version: 'latest'
|
11
|
+
},
|
12
|
+
chromeMac: {
|
13
|
+
base: 'BrowserStack',
|
14
|
+
os: 'OS X',
|
15
|
+
os_version: 'High Sierra',
|
16
|
+
browser : 'Chrome',
|
17
|
+
browser_version : 'latest'
|
18
|
+
},
|
19
|
+
firefoxMac: {
|
20
|
+
base: 'BrowserStack',
|
21
|
+
os: 'OS X',
|
22
|
+
os_version: 'High Sierra',
|
23
|
+
browser: 'Firefox',
|
24
|
+
browser_version: 'latest'
|
25
|
+
},
|
26
|
+
edgeWin10: {
|
27
|
+
base: 'BrowserStack',
|
28
|
+
os: 'Windows',
|
29
|
+
os_version: '10',
|
30
|
+
browser: 'Edge',
|
31
|
+
browser_version: 'latest'
|
32
|
+
},
|
33
|
+
ie11Win10: {
|
34
|
+
base: 'BrowserStack',
|
35
|
+
os: 'Windows',
|
36
|
+
os_version: '10',
|
37
|
+
browser: 'IE',
|
38
|
+
browser_version: '11.0'
|
39
|
+
},
|
40
|
+
chromeWin10: {
|
41
|
+
base: 'BrowserStack',
|
42
|
+
os: 'Windows',
|
43
|
+
os_version: '10',
|
44
|
+
browser: 'Chrome',
|
45
|
+
browser_version: 'latest'
|
46
|
+
},
|
47
|
+
firefoxWin10: {
|
48
|
+
base: 'BrowserStack',
|
49
|
+
os: 'Windows',
|
50
|
+
os_version: '10',
|
51
|
+
browser: 'Firefox',
|
52
|
+
browser_version: 'latest'
|
53
|
+
},
|
54
|
+
ie10Win8: {
|
55
|
+
base: 'BrowserStack',
|
56
|
+
os: 'Windows',
|
57
|
+
os_version: '8',
|
58
|
+
browser: 'IE',
|
59
|
+
browser_version: '10.0'
|
60
|
+
},
|
61
|
+
iphoneX: {
|
62
|
+
base: 'BrowserStack',
|
63
|
+
os: 'ios',
|
64
|
+
os_version: '11.0',
|
65
|
+
device: 'iPhone X',
|
66
|
+
real_mobile: true
|
67
|
+
},
|
68
|
+
pixel2: {
|
69
|
+
base: 'BrowserStack',
|
70
|
+
os: 'android',
|
71
|
+
os_version: '8.0',
|
72
|
+
device: 'Google Pixel 2',
|
73
|
+
real_mobile: true
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
const browsersKeys = Object.keys(browsers)
|
78
|
+
|
79
|
+
module.exports = {
|
80
|
+
browsers,
|
81
|
+
browsersKeys
|
82
|
+
}
|
@@ -0,0 +1,145 @@
|
|
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
|
+
<title>Bootstrap Plugin Test Suite</title>
|
7
|
+
|
8
|
+
<!-- jQuery -->
|
9
|
+
<script>
|
10
|
+
(function () {
|
11
|
+
var path = '../../site/docs/4.2/assets/js/vendor/jquery-slim.min.js'
|
12
|
+
// get jquery param from the query string.
|
13
|
+
var jQueryVersion = location.search.match(/[?&]jquery=(.*?)(?=&|$)/)
|
14
|
+
|
15
|
+
// If a version was specified, use that version from jQuery CDN
|
16
|
+
if (jQueryVersion) {
|
17
|
+
path = 'https://code.jquery.com/jquery-' + jQueryVersion[1] + '.min.js'
|
18
|
+
}
|
19
|
+
document.write('<script src="' + path + '"><\/script>')
|
20
|
+
}())
|
21
|
+
</script>
|
22
|
+
<script src="../../node_modules/popper.js/dist/umd/popper.min.js"></script>
|
23
|
+
|
24
|
+
<!-- QUnit -->
|
25
|
+
<link rel="stylesheet" href="../../node_modules/qunit/qunit/qunit.css" media="screen">
|
26
|
+
<script src="../../node_modules/qunit/qunit/qunit.js"></script>
|
27
|
+
|
28
|
+
<!-- Sinon -->
|
29
|
+
<script src="../../node_modules/sinon/pkg/sinon-no-sourcemaps.js"></script>
|
30
|
+
|
31
|
+
<!-- Hammer simulator -->
|
32
|
+
<script src="../../node_modules/hammer-simulator/index.js"></script>
|
33
|
+
|
34
|
+
<script>
|
35
|
+
// Disable jQuery event aliases to ensure we don't accidentally use any of them
|
36
|
+
[
|
37
|
+
'blur',
|
38
|
+
'focus',
|
39
|
+
'focusin',
|
40
|
+
'focusout',
|
41
|
+
'resize',
|
42
|
+
'scroll',
|
43
|
+
'click',
|
44
|
+
'dblclick',
|
45
|
+
'mousedown',
|
46
|
+
'mouseup',
|
47
|
+
'mousemove',
|
48
|
+
'mouseover',
|
49
|
+
'mouseout',
|
50
|
+
'mouseenter',
|
51
|
+
'mouseleave',
|
52
|
+
'change',
|
53
|
+
'select',
|
54
|
+
'submit',
|
55
|
+
'keydown',
|
56
|
+
'keypress',
|
57
|
+
'keyup',
|
58
|
+
'contextmenu'
|
59
|
+
].forEach(function(eventAlias) {
|
60
|
+
$.fn[eventAlias] = function() {
|
61
|
+
throw new Error('Using the ".' + eventAlias + '()" method is not allowed, so that Bootstrap can be compatible with custom jQuery builds which exclude the "event aliases" module that defines said method. See https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#js')
|
62
|
+
}
|
63
|
+
})
|
64
|
+
|
65
|
+
// Require assert.expect in each test
|
66
|
+
QUnit.config.requireExpects = true
|
67
|
+
|
68
|
+
// See https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
|
69
|
+
var log = []
|
70
|
+
var testName
|
71
|
+
|
72
|
+
QUnit.done(function(testResults) {
|
73
|
+
var tests = []
|
74
|
+
for (var i = 0; i < log.length; i++) {
|
75
|
+
var details = log[i]
|
76
|
+
tests.push({
|
77
|
+
name: details.name,
|
78
|
+
result: details.result,
|
79
|
+
expected: details.expected,
|
80
|
+
actual: details.actual,
|
81
|
+
source: details.source
|
82
|
+
})
|
83
|
+
}
|
84
|
+
testResults.tests = tests
|
85
|
+
|
86
|
+
window.global_test_results = testResults
|
87
|
+
})
|
88
|
+
|
89
|
+
QUnit.testStart(function(testDetails) {
|
90
|
+
QUnit.log(function(details) {
|
91
|
+
if (!details.result) {
|
92
|
+
details.name = testDetails.name
|
93
|
+
log.push(details)
|
94
|
+
}
|
95
|
+
})
|
96
|
+
})
|
97
|
+
|
98
|
+
// Display fixture on-screen on iOS to avoid false positives
|
99
|
+
// See https://github.com/twbs/bootstrap/pull/15955
|
100
|
+
if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
|
101
|
+
QUnit.begin(function() {
|
102
|
+
$('#qunit-fixture').css({ top: 0, left: 0 })
|
103
|
+
})
|
104
|
+
|
105
|
+
QUnit.done(function() {
|
106
|
+
$('#qunit-fixture').css({ top: '', left: '' })
|
107
|
+
})
|
108
|
+
}
|
109
|
+
</script>
|
110
|
+
|
111
|
+
<!-- Transpiled Plugins -->
|
112
|
+
<script src="../dist/util.js"></script>
|
113
|
+
<script src="../dist/alert.js"></script>
|
114
|
+
<script src="../dist/button.js"></script>
|
115
|
+
<script src="../dist/carousel.js"></script>
|
116
|
+
<script src="../dist/collapse.js"></script>
|
117
|
+
<script src="../dist/dropdown.js"></script>
|
118
|
+
<script src="../dist/modal.js"></script>
|
119
|
+
<script src="../dist/scrollspy.js"></script>
|
120
|
+
<script src="../dist/tab.js"></script>
|
121
|
+
<script src="../dist/tooltip.js"></script>
|
122
|
+
<script src="../dist/popover.js"></script>
|
123
|
+
<script src="../dist/toast.js"></script>
|
124
|
+
|
125
|
+
<!-- Unit Tests -->
|
126
|
+
<script src="unit/alert.js"></script>
|
127
|
+
<script src="unit/button.js"></script>
|
128
|
+
<script src="unit/carousel.js"></script>
|
129
|
+
<script src="unit/collapse.js"></script>
|
130
|
+
<script src="unit/dropdown.js"></script>
|
131
|
+
<script src="unit/modal.js"></script>
|
132
|
+
<script src="unit/scrollspy.js"></script>
|
133
|
+
<script src="unit/tab.js"></script>
|
134
|
+
<script src="unit/tooltip.js"></script>
|
135
|
+
<script src="unit/popover.js"></script>
|
136
|
+
<script src="unit/util.js"></script>
|
137
|
+
<script src="unit/toast.js"></script>
|
138
|
+
</head>
|
139
|
+
<body>
|
140
|
+
<div id="qunit-container">
|
141
|
+
<div id="qunit"></div>
|
142
|
+
<div id="qunit-fixture"></div>
|
143
|
+
</div>
|
144
|
+
</body>
|
145
|
+
</html>
|