From 3e4432fb75e3703fc3072fae4ec9693b2ddd70d8 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:42:50 +0000 Subject: [PATCH] style: format code with Prettier This commit fixes the style issues introduced in e51efba according to the output from Prettier. Details: None --- CHANGELOG.md | 63 +- commitlint.config.js | 6 +- coverage/lcov-report/base.css | 440 +++++++---- coverage/lcov-report/block-navigation.js | 133 ++-- coverage/lcov-report/index.html | 196 ++--- coverage/lcov-report/prettify.css | 102 ++- coverage/lcov-report/prettify.js | 937 ++++++++++++++++++++++- coverage/lcov-report/sorter.js | 351 +++++---- src/lib/__tests__/useTooltip.test.js | 561 +++++++------- static/app.css | 2 +- vitest.config.js | 12 +- vitest.setup.js | 64 +- 12 files changed, 2011 insertions(+), 856 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1212a0e..aa9f55f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,147 +2,126 @@ # [2.8.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.7.4...v2.8.0) (2022-11-19) - ### Features -* Trigger callbacks on tooltip enter and leave ([#61](https://github.com/untemps/svelte-use-tooltip/issues/61)) ([c4d9e2f](https://github.com/untemps/svelte-use-tooltip/commit/c4d9e2fd346ba7d6b2812c539e6c7a379f25c9f2)) +- Trigger callbacks on tooltip enter and leave ([#61](https://github.com/untemps/svelte-use-tooltip/issues/61)) ([c4d9e2f](https://github.com/untemps/svelte-use-tooltip/commit/c4d9e2fd346ba7d6b2812c539e6c7a379f25c9f2)) ## [2.7.4](https://github.com/untemps/svelte-use-tooltip/compare/v2.7.3...v2.7.4) (2022-10-07) - ### Bug Fixes -* Reset target position and additional attribute on destroy properly ([7e1a75d](https://github.com/untemps/svelte-use-tooltip/commit/7e1a75d28f933210206f8a0c62b5ebc7467f5514)) +- Reset target position and additional attribute on destroy properly ([7e1a75d](https://github.com/untemps/svelte-use-tooltip/commit/7e1a75d28f933210206f8a0c62b5ebc7467f5514)) ## [2.7.3](https://github.com/untemps/svelte-use-tooltip/compare/v2.7.2...v2.7.3) (2022-10-05) - ### Bug Fixes -* Reset target position on destroy ([#57](https://github.com/untemps/svelte-use-tooltip/issues/57)) ([5bdc051](https://github.com/untemps/svelte-use-tooltip/commit/5bdc051b24b6b574a9738f53e3cb7d5623471ed0)) +- Reset target position on destroy ([#57](https://github.com/untemps/svelte-use-tooltip/issues/57)) ([5bdc051](https://github.com/untemps/svelte-use-tooltip/commit/5bdc051b24b6b574a9738f53e3cb7d5623471ed0)) ## [2.7.2](https://github.com/untemps/svelte-use-tooltip/compare/v2.7.1...v2.7.2) (2022-07-07) - ### Bug Fixes -* Fix tooltip animation management ([#42](https://github.com/untemps/svelte-use-tooltip/issues/42)) ([b6a6f58](https://github.com/untemps/svelte-use-tooltip/commit/b6a6f58728f845176396f5f8af1cdd087809ff0c)) +- Fix tooltip animation management ([#42](https://github.com/untemps/svelte-use-tooltip/issues/42)) ([b6a6f58](https://github.com/untemps/svelte-use-tooltip/commit/b6a6f58728f845176396f5f8af1cdd087809ff0c)) ## [2.7.1](https://github.com/untemps/svelte-use-tooltip/compare/v2.7.0...v2.7.1) (2022-07-05) - ### Bug Fixes -* Fix tooltip focus management ([#41](https://github.com/untemps/svelte-use-tooltip/issues/41)) ([3f92ca5](https://github.com/untemps/svelte-use-tooltip/commit/3f92ca5356b5aa91f4bf8e8fbfc2193d0b384d81)) +- Fix tooltip focus management ([#41](https://github.com/untemps/svelte-use-tooltip/issues/41)) ([3f92ca5](https://github.com/untemps/svelte-use-tooltip/commit/3f92ca5356b5aa91f4bf8e8fbfc2193d0b384d81)) # [2.7.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.6.0...v2.7.0) (2022-02-11) - ### Features -* Remove tooltip max-width ([#35](https://github.com/untemps/svelte-use-tooltip/issues/35)) ([da4b041](https://github.com/untemps/svelte-use-tooltip/commit/da4b0414cdcaad08f080d3f45c55f744e07a9dc6)) +- Remove tooltip max-width ([#35](https://github.com/untemps/svelte-use-tooltip/issues/35)) ([da4b041](https://github.com/untemps/svelte-use-tooltip/commit/da4b0414cdcaad08f080d3f45c55f744e07a9dc6)) ## [2.6.1-beta.1](https://github.com/untemps/svelte-use-tooltip/compare/v2.6.0...v2.6.1-beta.1) (2022-02-10) # [2.6.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.5.0...v2.6.0) (2022-02-08) - ### Features -* Allow to set a template element as tooltip content ([#30](https://github.com/untemps/svelte-use-tooltip/issues/30)) ([5f3e582](https://github.com/untemps/svelte-use-tooltip/commit/5f3e582011657f7abfbcc9bd717424382fed373d)) +- Allow to set a template element as tooltip content ([#30](https://github.com/untemps/svelte-use-tooltip/issues/30)) ([5f3e582](https://github.com/untemps/svelte-use-tooltip/commit/5f3e582011657f7abfbcc9bd717424382fed373d)) # [2.5.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.4.0...v2.5.0) (2022-02-05) - ### Features -* Hide tooltip on window resize and scroll events ([#28](https://github.com/untemps/svelte-use-tooltip/issues/28)) ([4255353](https://github.com/untemps/svelte-use-tooltip/commit/42553531497251fa002e9b4c0e0a320ee782b7dd)) +- Hide tooltip on window resize and scroll events ([#28](https://github.com/untemps/svelte-use-tooltip/issues/28)) ([4255353](https://github.com/untemps/svelte-use-tooltip/commit/42553531497251fa002e9b4c0e0a320ee782b7dd)) # [2.4.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.3.2...v2.4.0) (2022-02-03) - ### Features -* Add missing a11y features ([#27](https://github.com/untemps/svelte-use-tooltip/issues/27)) ([3bcb198](https://github.com/untemps/svelte-use-tooltip/commit/3bcb198bcf5ecd54ea61ef8f911904dd7f300435)), closes [#11](https://github.com/untemps/svelte-use-tooltip/issues/11) [#11](https://github.com/untemps/svelte-use-tooltip/issues/11) +- Add missing a11y features ([#27](https://github.com/untemps/svelte-use-tooltip/issues/27)) ([3bcb198](https://github.com/untemps/svelte-use-tooltip/commit/3bcb198bcf5ecd54ea61ef8f911904dd7f300435)), closes [#11](https://github.com/untemps/svelte-use-tooltip/issues/11) [#11](https://github.com/untemps/svelte-use-tooltip/issues/11) ## [2.3.2](https://github.com/untemps/svelte-use-tooltip/compare/v2.3.1...v2.3.2) (2022-02-03) - ### Bug Fixes -* Fix hovering area position ([#26](https://github.com/untemps/svelte-use-tooltip/issues/26)) ([d289a1f](https://github.com/untemps/svelte-use-tooltip/commit/d289a1f294440aeffbd4d2e68df8dd4cbd445f6a)) +- Fix hovering area position ([#26](https://github.com/untemps/svelte-use-tooltip/issues/26)) ([d289a1f](https://github.com/untemps/svelte-use-tooltip/commit/d289a1f294440aeffbd4d2e68df8dd4cbd445f6a)) ## [2.3.1](https://github.com/untemps/svelte-use-tooltip/compare/v2.3.0...v2.3.1) (2022-02-02) - ### Bug Fixes -* Fix interactions with tooltip content, [#17](https://github.com/untemps/svelte-use-tooltip/issues/17) ([9137cd2](https://github.com/untemps/svelte-use-tooltip/commit/9137cd292d9147bcf3624463ae039fd1112da364)) +- Fix interactions with tooltip content, [#17](https://github.com/untemps/svelte-use-tooltip/issues/17) ([9137cd2](https://github.com/untemps/svelte-use-tooltip/commit/9137cd292d9147bcf3624463ae039fd1112da364)) # [2.3.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.2.0...v2.3.0) (2022-01-31) - ### Features -* Extend hovering area ([#21](https://github.com/untemps/svelte-use-tooltip/issues/21)) ([c70463d](https://github.com/untemps/svelte-use-tooltip/commit/c70463db44cacd63de7bf283d590826cfec4df24)) +- Extend hovering area ([#21](https://github.com/untemps/svelte-use-tooltip/issues/21)) ([c70463d](https://github.com/untemps/svelte-use-tooltip/commit/c70463db44cacd63de7bf283d590826cfec4df24)) # [2.2.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.1.2...v2.2.0) (2022-01-31) - ### Features -* Add offset prop ([#20](https://github.com/untemps/svelte-use-tooltip/issues/20)) ([340c859](https://github.com/untemps/svelte-use-tooltip/commit/340c85902ca1c616fe20706784219dd9f315659c)) +- Add offset prop ([#20](https://github.com/untemps/svelte-use-tooltip/issues/20)) ([340c859](https://github.com/untemps/svelte-use-tooltip/commit/340c85902ca1c616fe20706784219dd9f315659c)) ## [2.1.2](https://github.com/untemps/svelte-use-tooltip/compare/v2.1.1...v2.1.2) (2022-01-30) - ### Bug Fixes -* Fix classNames reassignment when containerClassName is updated ([#19](https://github.com/untemps/svelte-use-tooltip/issues/19)) ([7f672d0](https://github.com/untemps/svelte-use-tooltip/commit/7f672d0f296ae2618054f425fccf0aabebd54da7)) +- Fix classNames reassignment when containerClassName is updated ([#19](https://github.com/untemps/svelte-use-tooltip/issues/19)) ([7f672d0](https://github.com/untemps/svelte-use-tooltip/commit/7f672d0f296ae2618054f425fccf0aabebd54da7)) ## [2.1.1](https://github.com/untemps/svelte-use-tooltip/compare/v2.1.0...v2.1.1) (2022-01-30) - ### Bug Fixes -* Fix CSS classes reassignment when content is updated ([#16](https://github.com/untemps/svelte-use-tooltip/issues/16)) ([1468f78](https://github.com/untemps/svelte-use-tooltip/commit/1468f788928e68b02d45ef95e525762bf9e826b0)) +- Fix CSS classes reassignment when content is updated ([#16](https://github.com/untemps/svelte-use-tooltip/issues/16)) ([1468f78](https://github.com/untemps/svelte-use-tooltip/commit/1468f788928e68b02d45ef95e525762bf9e826b0)) # [2.1.0](https://github.com/untemps/svelte-use-tooltip/compare/v2.0.0...v2.1.0) (2022-01-30) - ### Features -* Add enterDelay and leaveDelay props ([#14](https://github.com/untemps/svelte-use-tooltip/issues/14)) ([b660877](https://github.com/untemps/svelte-use-tooltip/commit/b660877b0d59b7f3a3f4a142feb6e6eeadf7b817)), closes [#10](https://github.com/untemps/svelte-use-tooltip/issues/10) [#10](https://github.com/untemps/svelte-use-tooltip/issues/10) +- Add enterDelay and leaveDelay props ([#14](https://github.com/untemps/svelte-use-tooltip/issues/14)) ([b660877](https://github.com/untemps/svelte-use-tooltip/commit/b660877b0d59b7f3a3f4a142feb6e6eeadf7b817)), closes [#10](https://github.com/untemps/svelte-use-tooltip/issues/10) [#10](https://github.com/untemps/svelte-use-tooltip/issues/10) # [2.0.0](https://github.com/untemps/svelte-use-tooltip/compare/v1.2.0...v2.0.0) (2022-01-27) - ### Features -* Add content prop ([#12](https://github.com/untemps/svelte-use-tooltip/issues/12)) ([ea03acd](https://github.com/untemps/svelte-use-tooltip/commit/ea03acd63a97da5863f101f64d9600bddbb0fc8e)) - +- Add content prop ([#12](https://github.com/untemps/svelte-use-tooltip/issues/12)) ([ea03acd](https://github.com/untemps/svelte-use-tooltip/commit/ea03acd63a97da5863f101f64d9600bddbb0fc8e)) ### BREAKING CHANGES -* `contentClassName` has been renamed `containerClassName` to be more consistent +- `contentClassName` has been renamed `containerClassName` to be more consistent # [1.2.0](https://github.com/untemps/svelte-use-tooltip/compare/v1.1.0...v1.2.0) (2022-01-25) - ### Features -* Animate tooltip ([#7](https://github.com/untemps/svelte-use-tooltip/issues/7)) ([b132de6](https://github.com/untemps/svelte-use-tooltip/commit/b132de6e306c7a16b5b104bb028b066c4227ac7a)) +- Animate tooltip ([#7](https://github.com/untemps/svelte-use-tooltip/issues/7)) ([b132de6](https://github.com/untemps/svelte-use-tooltip/commit/b132de6e306c7a16b5b104bb028b066c4227ac7a)) # [1.1.0](https://github.com/untemps/svelte-use-tooltip/compare/v1.0.0...v1.1.0) (2022-01-25) - ### Features -* Add position prop ([#5](https://github.com/untemps/svelte-use-tooltip/issues/5)) ([125be23](https://github.com/untemps/svelte-use-tooltip/commit/125be23343a342f4974e35419ace036709ae1eb7)) +- Add position prop ([#5](https://github.com/untemps/svelte-use-tooltip/issues/5)) ([125be23](https://github.com/untemps/svelte-use-tooltip/commit/125be23343a342f4974e35419ace036709ae1eb7)) # 1.0.0 (2022-01-16) - ### Features -* Initial commit ([ce7286d](https://github.com/untemps/svelte-use-tooltip/commit/ce7286d50a19c88ad3010a7e114870d13a04ad62)) +- Initial commit ([ce7286d](https://github.com/untemps/svelte-use-tooltip/commit/ce7286d50a19c88ad3010a7e114870d13a04ad62)) diff --git a/commitlint.config.js b/commitlint.config.js index 81924d2..8bef37a 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -2,6 +2,6 @@ module.exports = { extends: ['@commitlint/config-conventional'], rules: { 'subject-case': [2, 'always', ['sentence-case']], - 'scope-case': [2, 'always', ['lower-case', 'upper-case']], - }, -} + 'scope-case': [2, 'always', ['lower-case', 'upper-case']] + } +}; diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css index f418035..77fe53e 100644 --- a/coverage/lcov-report/base.css +++ b/coverage/lcov-report/base.css @@ -1,224 +1,362 @@ -body, html { - margin:0; padding: 0; - height: 100%; +body, +html { + margin: 0; + padding: 0; + height: 100%; } body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } + font-family: + Helvetica Neue, + Helvetica, + Arial; + font-size: 14px; + color: #333; +} +.small { + font-size: 12px; +} +*, +*:after, +*:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +h1 { + font-size: 20px; + margin: 0; +} +h2 { + font-size: 14px; +} pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } + font: + 12px/1.4 Consolas, + 'Liberation Mono', + Menlo, + Courier, + monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { + color: #0074d9; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +.strong { + font-weight: bold; +} +.space-top1 { + padding: 10px 0 0 0; +} +.pad2y { + padding: 20px 0; +} +.pad1y { + padding: 10px 0; +} +.pad2x { + padding: 0 20px; +} +.pad2 { + padding: 20px; +} +.pad1 { + padding: 10px; +} +.space-left2 { + padding-left: 55px; +} +.space-right2 { + padding-right: 20px; +} +.center { + text-align: center; +} +.clearfix { + display: block; +} .clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } + content: ''; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +.fl { + float: left; +} +@media only screen and (max-width: 640px) { + .col3 { + width: 100%; + max-width: 100%; + } + .hide-mobile { + display: none !important; + } } .quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); + color: #7f7f7f; + color: rgba(0, 0, 0, 0.5); +} +.quiet a { + opacity: 0.7; } -.quiet a { opacity: 0.7; } .fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #e8e8e8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; } -div.path a:link, div.path a:visited { color: #333; } +div.path a:link, +div.path a:visited { + color: #333; +} table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; } table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; + margin: 0; + padding: 0; + vertical-align: top; } table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; + text-align: right; + padding: 0 5px 0 20px; } table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; + text-align: right; + padding-right: 10px; + min-width: 20px; } table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; + display: inline-block; + padding: 0 5px; + width: 100%; } .missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; } .skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; } -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; +.missing-if-branch .typ, +.skip-if-branch .typ { + color: inherit !important; } .coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { + border-bottom: 1px solid #bbb; +} +.keyline-all { + border: 1px solid #ddd; +} +.coverage-summary td, .coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; + padding: 10px; +} +.coverage-summary tbody { + border: 1px solid #bbb; +} +.coverage-summary td { + border-right: 1px solid #bbb; +} +.coverage-summary td:last-child { + border-right: none; +} +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { + border-right: none !important; +} +.coverage-summary th.pct { } -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } .coverage-summary th.pic, .coverage-summary th.abs, .coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } +.coverage-summary td.abs { + text-align: right; +} +.coverage-summary td.file { + white-space: nowrap; +} +.coverage-summary td.pic { + min-width: 120px !important; +} +.coverage-summary tfoot td { +} .coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; } .coverage-summary .sorted .sorter { - background-position: 0 -20px; + background-position: 0 -20px; } .coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; + background-position: 0 -10px; +} +.status-line { + height: 10px; } -.status-line { height: 10px; } /* yellow */ -.cbranch-no { background: yellow !important; color: #111; } +.cbranch-no { + background: yellow !important; + color: #111; +} /* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } +.red.solid, +.status-line.low, +.low .cover-fill { + background: #c21f39; +} +.low .chart { + border: 1px solid #c21f39; +} .highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; +.highlighted .cstat-no, +.highlighted .fstat-no, +.highlighted .cbranch-no { + background: #c21f39 !important; } /* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +.cstat-no, +.fstat-no, +.cbranch-no, +.cbranch-no { + background: #f6c6ce; +} /* light red */ -.low, .cline-no { background:#FCE1E5 } +.low, +.cline-no { + background: #fce1e5; +} /* light green */ -.high, .cline-yes { background:rgb(230,245,208) } +.high, +.cline-yes { + background: rgb(230, 245, 208); +} /* medium green */ -.cstat-yes { background:rgb(161,215,106) } +.cstat-yes { + background: rgb(161, 215, 106); +} /* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } +.status-line.high, +.high .cover-fill { + background: rgb(77, 146, 33); +} +.high .chart { + border: 1px solid rgb(77, 146, 33); +} /* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } +.status-line.medium, +.medium .cover-fill { + background: #f9cd0b; +} +.medium .chart { + border: 1px solid #f9cd0b; +} /* light yellow */ -.medium { background: #fff4c2; } +.medium { + background: #fff4c2; +} -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } +.cstat-skip { + background: #ddd; + color: #111; +} +.fstat-skip { + background: #ddd; + color: #111 !important; +} +.cbranch-skip { + background: #ddd !important; + color: #111; +} -span.cline-neutral { background: #eaeaea; } +span.cline-neutral { + background: #eaeaea; +} .coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; + opacity: 0.5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; } -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; +.cover-fill, +.cover-empty { + display: inline-block; + height: 12px; } .chart { - line-height: 0; + line-height: 0; } .cover-empty { - background: white; + background: white; } .cover-full { - border-right: none !important; + border-right: none !important; } pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { + color: #999 !important; +} +.ignore-none { + color: #999; + font-weight: normal; } -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } .wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; } -.footer, .push { - height: 48px; +.footer, +.push { + height: 48px; } diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js index cc12130..f8608d9 100644 --- a/coverage/lcov-report/block-navigation.js +++ b/coverage/lcov-report/block-navigation.js @@ -1,87 +1,82 @@ /* eslint-disable */ var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - // Selecter that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); - var currentIndex; + var currentIndex; - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } + function toggleClass(index) { + missingCoverageElements.item(currentIndex).classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } - makeCurrent(nextIndex); - } + makeCurrent(nextIndex); + } - function goToNext() { - var nextIndex = 0; + function goToNext() { + var nextIndex = 0; - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } + if (typeof currentIndex === 'number' && currentIndex < missingCoverageElements.length - 1) { + nextIndex = currentIndex + 1; + } - makeCurrent(nextIndex); - } + makeCurrent(nextIndex); + } - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; })(); window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 0b9d84c..54bb1be 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -1,101 +1,103 @@ - + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+
+ Unknown% + Statements + 0/0 +
+ +
+ Unknown% + Branches + 0/0 +
+ +
+ Unknown% + Functions + 0/0 +
- - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- Unknown% - Statements - 0/0 -
- - -
- Unknown% - Branches - 0/0 -
- - -
- Unknown% - Functions - 0/0 -
- - -
- Unknown% - Lines - 0/0 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
-
-
-
- - - - - - +
+ Unknown% + Lines + 0/0 +
+
+

+ Press n or j to go to the next uncovered block, b, + p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + +
File + Statements + BranchesFunctionsLines
+
+
+ +
+ + + + + + + - \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css index b317a7c..0065b4a 100644 --- a/coverage/lcov-report/prettify.css +++ b/coverage/lcov-report/prettify.css @@ -1 +1,101 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} +.pln { + color: #000; +} +@media screen { + .str { + color: #080; + } + .kwd { + color: #008; + } + .com { + color: #800; + } + .typ { + color: #606; + } + .lit { + color: #066; + } + .pun, + .opn, + .clo { + color: #660; + } + .tag { + color: #008; + } + .atn { + color: #606; + } + .atv { + color: #080; + } + .dec, + .var { + color: #606; + } + .fun { + color: red; + } +} +@media print, projection { + .str { + color: #060; + } + .kwd { + color: #006; + font-weight: bold; + } + .com { + color: #600; + font-style: italic; + } + .typ { + color: #404; + font-weight: bold; + } + .lit { + color: #044; + } + .pun, + .opn, + .clo { + color: #440; + } + .tag { + color: #006; + font-weight: bold; + } + .atn { + color: #404; + } + .atv { + color: #060; + } +} +pre.prettyprint { + padding: 2px; + border: 1px solid #888; +} +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} +li.L0, +li.L1, +li.L2, +li.L3, +li.L5, +li.L6, +li.L7, +li.L8 { + list-style-type: none; +} +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + background: #eee; +} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js index b322523..94ab664 100644 --- a/coverage/lcov-report/prettify.js +++ b/coverage/lcov-report/prettify.js @@ -1,2 +1,937 @@ /* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); +window.PR_SHOULD_USE_CONTINUATION = true; +(function () { + var h = ['break,continue,do,else,for,if,return,while']; + var u = [ + h, + 'auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile' + ]; + var p = [ + u, + 'catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof' + ]; + var l = [ + p, + 'alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where' + ]; + var x = [ + p, + 'abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient' + ]; + var R = [ + x, + 'as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var' + ]; + var r = + 'all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes'; + var w = [p, 'debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN']; + var s = + 'caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END'; + var I = [ + h, + 'and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None' + ]; + var f = [ + h, + 'alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END' + ]; + var H = [h, 'case,done,elif,esac,eval,fi,function,in,local,set,then,until']; + var A = [l, R, w, s + I, f, H]; + var e = + /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/; + var C = 'str'; + var z = 'kwd'; + var j = 'com'; + var O = 'typ'; + var G = 'lit'; + var L = 'pun'; + var F = 'pln'; + var m = 'tag'; + var E = 'dec'; + var J = 'src'; + var P = 'atn'; + var n = 'atv'; + var N = 'nocode'; + var M = + '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*'; + function k(Z) { + var ad = 0; + var S = false; + var ac = false; + for (var V = 0, U = Z.length; V < U; ++V) { + var ae = Z[V]; + if (ae.ignoreCase) { + ac = true; + } else { + if (/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) { + S = true; + ac = false; + break; + } + } + } + var Y = { b: 8, t: 9, n: 10, v: 11, f: 12, r: 13 }; + function ab(ah) { + var ag = ah.charCodeAt(0); + if (ag !== 92) { + return ag; + } + var af = ah.charAt(1); + ag = Y[af]; + if (ag) { + return ag; + } else { + if ('0' <= af && af <= '7') { + return parseInt(ah.substring(1), 8); + } else { + if (af === 'u' || af === 'x') { + return parseInt(ah.substring(2), 16); + } else { + return ah.charCodeAt(1); + } + } + } + } + function T(af) { + if (af < 32) { + return (af < 16 ? '\\x0' : '\\x') + af.toString(16); + } + var ag = String.fromCharCode(af); + if (ag === '\\' || ag === '-' || ag === '[' || ag === ']') { + ag = '\\' + ag; + } + return ag; + } + function X(am) { + var aq = am + .substring(1, am.length - 1) + .match( + new RegExp( + '\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]', + 'g' + ) + ); + var ak = []; + var af = []; + var ao = aq[0] === '^'; + for (var ar = ao ? 1 : 0, aj = aq.length; ar < aj; ++ar) { + var ah = aq[ar]; + if (/\\[bdsw]/i.test(ah)) { + ak.push(ah); + } else { + var ag = ab(ah); + var al; + if (ar + 2 < aj && '-' === aq[ar + 1]) { + al = ab(aq[ar + 2]); + ar += 2; + } else { + al = ag; + } + af.push([ag, al]); + if (!(al < 65 || ag > 122)) { + if (!(al < 65 || ag > 90)) { + af.push([Math.max(65, ag) | 32, Math.min(al, 90) | 32]); + } + if (!(al < 97 || ag > 122)) { + af.push([Math.max(97, ag) & ~32, Math.min(al, 122) & ~32]); + } + } + } + } + af.sort(function (av, au) { + return av[0] - au[0] || au[1] - av[1]; + }); + var ai = []; + var ap = [NaN, NaN]; + for (var ar = 0; ar < af.length; ++ar) { + var at = af[ar]; + if (at[0] <= ap[1] + 1) { + ap[1] = Math.max(ap[1], at[1]); + } else { + ai.push((ap = at)); + } + } + var an = ['[']; + if (ao) { + an.push('^'); + } + an.push.apply(an, ak); + for (var ar = 0; ar < ai.length; ++ar) { + var at = ai[ar]; + an.push(T(at[0])); + if (at[1] > at[0]) { + if (at[1] + 1 > at[0]) { + an.push('-'); + } + an.push(T(at[1])); + } + } + an.push(']'); + return an.join(''); + } + function W(al) { + var aj = al.source.match( + new RegExp( + '(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)', + 'g' + ) + ); + var ah = aj.length; + var an = []; + for (var ak = 0, am = 0; ak < ah; ++ak) { + var ag = aj[ak]; + if (ag === '(') { + ++am; + } else { + if ('\\' === ag.charAt(0)) { + var af = +ag.substring(1); + if (af && af <= am) { + an[af] = -1; + } + } + } + } + for (var ak = 1; ak < an.length; ++ak) { + if (-1 === an[ak]) { + an[ak] = ++ad; + } + } + for (var ak = 0, am = 0; ak < ah; ++ak) { + var ag = aj[ak]; + if (ag === '(') { + ++am; + if (an[am] === undefined) { + aj[ak] = '(?:'; + } + } else { + if ('\\' === ag.charAt(0)) { + var af = +ag.substring(1); + if (af && af <= am) { + aj[ak] = '\\' + an[am]; + } + } + } + } + for (var ak = 0, am = 0; ak < ah; ++ak) { + if ('^' === aj[ak] && '^' !== aj[ak + 1]) { + aj[ak] = ''; + } + } + if (al.ignoreCase && S) { + for (var ak = 0; ak < ah; ++ak) { + var ag = aj[ak]; + var ai = ag.charAt(0); + if (ag.length >= 2 && ai === '[') { + aj[ak] = X(ag); + } else { + if (ai !== '\\') { + aj[ak] = ag.replace(/[a-zA-Z]/g, function (ao) { + var ap = ao.charCodeAt(0); + return '[' + String.fromCharCode(ap & ~32, ap | 32) + ']'; + }); + } + } + } + } + return aj.join(''); + } + var aa = []; + for (var V = 0, U = Z.length; V < U; ++V) { + var ae = Z[V]; + if (ae.global || ae.multiline) { + throw new Error('' + ae); + } + aa.push('(?:' + W(ae) + ')'); + } + return new RegExp(aa.join('|'), ac ? 'gi' : 'g'); + } + function a(V) { + var U = /(?:^|\s)nocode(?:\s|$)/; + var X = []; + var T = 0; + var Z = []; + var W = 0; + var S; + if (V.currentStyle) { + S = V.currentStyle.whiteSpace; + } else { + if (window.getComputedStyle) { + S = document.defaultView.getComputedStyle(V, null).getPropertyValue('white-space'); + } + } + var Y = S && 'pre' === S.substring(0, 3); + function aa(ab) { + switch (ab.nodeType) { + case 1: + if (U.test(ab.className)) { + return; + } + for (var ae = ab.firstChild; ae; ae = ae.nextSibling) { + aa(ae); + } + var ad = ab.nodeName; + if ('BR' === ad || 'LI' === ad) { + X[W] = '\n'; + Z[W << 1] = T++; + Z[(W++ << 1) | 1] = ab; + } + break; + case 3: + case 4: + var ac = ab.nodeValue; + if (ac.length) { + if (!Y) { + ac = ac.replace(/[ \t\r\n]+/g, ' '); + } else { + ac = ac.replace(/\r\n?/g, '\n'); + } + X[W] = ac; + Z[W << 1] = T; + T += ac.length; + Z[(W++ << 1) | 1] = ab; + } + break; + } + } + aa(V); + return { sourceCode: X.join('').replace(/\n$/, ''), spans: Z }; + } + function B(S, U, W, T) { + if (!U) { + return; + } + var V = { sourceCode: U, basePos: S }; + W(V); + T.push.apply(T, V.decorations); + } + var v = /\S/; + function o(S) { + var V = undefined; + for (var U = S.firstChild; U; U = U.nextSibling) { + var T = U.nodeType; + V = T === 1 ? (V ? S : U) : T === 3 ? (v.test(U.nodeValue) ? S : V) : V; + } + return V === S ? undefined : V; + } + function g(U, T) { + var S = {}; + var V; + (function () { + var ad = U.concat(T); + var ah = []; + var ag = {}; + for (var ab = 0, Z = ad.length; ab < Z; ++ab) { + var Y = ad[ab]; + var ac = Y[3]; + if (ac) { + for (var ae = ac.length; --ae >= 0; ) { + S[ac.charAt(ae)] = Y; + } + } + var af = Y[1]; + var aa = '' + af; + if (!ag.hasOwnProperty(aa)) { + ah.push(af); + ag[aa] = null; + } + } + ah.push(/[\0-\uffff]/); + V = k(ah); + })(); + var X = T.length; + var W = function (ah) { + var Z = ah.sourceCode, + Y = ah.basePos; + var ad = [Y, F]; + var af = 0; + var an = Z.match(V) || []; + var aj = {}; + for (var ae = 0, aq = an.length; ae < aq; ++ae) { + var ag = an[ae]; + var ap = aj[ag]; + var ai = void 0; + var am; + if (typeof ap === 'string') { + am = false; + } else { + var aa = S[ag.charAt(0)]; + if (aa) { + ai = ag.match(aa[1]); + ap = aa[0]; + } else { + for (var ao = 0; ao < X; ++ao) { + aa = T[ao]; + ai = ag.match(aa[1]); + if (ai) { + ap = aa[0]; + break; + } + } + if (!ai) { + ap = F; + } + } + am = ap.length >= 5 && 'lang-' === ap.substring(0, 5); + if (am && !(ai && typeof ai[1] === 'string')) { + am = false; + ap = J; + } + if (!am) { + aj[ag] = ap; + } + } + var ab = af; + af += ag.length; + if (!am) { + ad.push(Y + ab, ap); + } else { + var al = ai[1]; + var ak = ag.indexOf(al); + var ac = ak + al.length; + if (ai[2]) { + ac = ag.length - ai[2].length; + ak = ac - al.length; + } + var ar = ap.substring(5); + B(Y + ab, ag.substring(0, ak), W, ad); + B(Y + ab + ak, al, q(ar, al), ad); + B(Y + ab + ac, ag.substring(ac), W, ad); + } + } + ah.decorations = ad; + }; + return W; + } + function i(T) { + var W = [], + S = []; + if (T.tripleQuotedStrings) { + W.push([ + C, + /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, + null, + '\'"' + ]); + } else { + if (T.multiLineStrings) { + W.push([ + C, + /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, + null, + '\'"`' + ]); + } else { + W.push([ + C, + /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, + null, + '"\'' + ]); + } + } + if (T.verbatimStrings) { + S.push([C, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]); + } + var Y = T.hashComments; + if (Y) { + if (T.cStyleComments) { + if (Y > 1) { + W.push([j, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']); + } else { + W.push([ + j, + /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/, + null, + '#' + ]); + } + S.push([C, /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/, null]); + } else { + W.push([j, /^#[^\r\n]*/, null, '#']); + } + } + if (T.cStyleComments) { + S.push([j, /^\/\/[^\r\n]*/, null]); + S.push([j, /^\/\*[\s\S]*?(?:\*\/|$)/, null]); + } + if (T.regexLiterals) { + var X = + '/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/'; + S.push(['lang-regex', new RegExp('^' + M + '(' + X + ')')]); + } + var V = T.types; + if (V) { + S.push([O, V]); + } + var U = ('' + T.keywords).replace(/^ | $/g, ''); + if (U.length) { + S.push([z, new RegExp('^(?:' + U.replace(/[\s,]+/g, '|') + ')\\b'), null]); + } + W.push([F, /^\s+/, null, ' \r\n\t\xA0']); + S.push( + [G, /^@[a-z_$][a-z_$@0-9]*/i, null], + [O, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null], + [F, /^[a-z_$][a-z_$@0-9]*/i, null], + [ + G, + new RegExp( + '^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*', + 'i' + ), + null, + '0123456789' + ], + [F, /^\\[\s\S]?/, null], + [L, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null] + ); + return g(W, S); + } + var K = i({ + keywords: A, + hashComments: true, + cStyleComments: true, + multiLineStrings: true, + regexLiterals: true + }); + function Q(V, ag) { + var U = /(?:^|\s)nocode(?:\s|$)/; + var ab = /\r\n?|\n/; + var ac = V.ownerDocument; + var S; + if (V.currentStyle) { + S = V.currentStyle.whiteSpace; + } else { + if (window.getComputedStyle) { + S = ac.defaultView.getComputedStyle(V, null).getPropertyValue('white-space'); + } + } + var Z = S && 'pre' === S.substring(0, 3); + var af = ac.createElement('LI'); + while (V.firstChild) { + af.appendChild(V.firstChild); + } + var W = [af]; + function ae(al) { + switch (al.nodeType) { + case 1: + if (U.test(al.className)) { + break; + } + if ('BR' === al.nodeName) { + ad(al); + if (al.parentNode) { + al.parentNode.removeChild(al); + } + } else { + for (var an = al.firstChild; an; an = an.nextSibling) { + ae(an); + } + } + break; + case 3: + case 4: + if (Z) { + var am = al.nodeValue; + var aj = am.match(ab); + if (aj) { + var ai = am.substring(0, aj.index); + al.nodeValue = ai; + var ah = am.substring(aj.index + aj[0].length); + if (ah) { + var ak = al.parentNode; + ak.insertBefore(ac.createTextNode(ah), al.nextSibling); + } + ad(al); + if (!ai) { + al.parentNode.removeChild(al); + } + } + } + break; + } + } + function ad(ak) { + while (!ak.nextSibling) { + ak = ak.parentNode; + if (!ak) { + return; + } + } + function ai(al, ar) { + var aq = ar ? al.cloneNode(false) : al; + var ao = al.parentNode; + if (ao) { + var ap = ai(ao, 1); + var an = al.nextSibling; + ap.appendChild(aq); + for (var am = an; am; am = an) { + an = am.nextSibling; + ap.appendChild(am); + } + } + return aq; + } + var ah = ai(ak.nextSibling, 0); + for (var aj; (aj = ah.parentNode) && aj.nodeType === 1; ) { + ah = aj; + } + W.push(ah); + } + for (var Y = 0; Y < W.length; ++Y) { + ae(W[Y]); + } + if (ag === (ag | 0)) { + W[0].setAttribute('value', ag); + } + var aa = ac.createElement('OL'); + aa.className = 'linenums'; + var X = Math.max(0, (ag - 1) | 0) || 0; + for (var Y = 0, T = W.length; Y < T; ++Y) { + af = W[Y]; + af.className = 'L' + ((Y + X) % 10); + if (!af.firstChild) { + af.appendChild(ac.createTextNode('\xA0')); + } + aa.appendChild(af); + } + V.appendChild(aa); + } + function D(ac) { + var aj = /\bMSIE\b/.test(navigator.userAgent); + var am = /\n/g; + var al = ac.sourceCode; + var an = al.length; + var V = 0; + var aa = ac.spans; + var T = aa.length; + var ah = 0; + var X = ac.decorations; + var Y = X.length; + var Z = 0; + X[Y] = an; + var ar, aq; + for (aq = ar = 0; aq < Y; ) { + if (X[aq] !== X[aq + 2]) { + X[ar++] = X[aq++]; + X[ar++] = X[aq++]; + } else { + aq += 2; + } + } + Y = ar; + for (aq = ar = 0; aq < Y; ) { + var at = X[aq]; + var ab = X[aq + 1]; + var W = aq + 2; + while (W + 2 <= Y && X[W + 1] === ab) { + W += 2; + } + X[ar++] = at; + X[ar++] = ab; + aq = W; + } + Y = X.length = ar; + var ae = null; + while (ah < T) { + var af = aa[ah]; + var S = aa[ah + 2] || an; + var ag = X[Z]; + var ap = X[Z + 2] || an; + var W = Math.min(S, ap); + var ak = aa[ah + 1]; + var U; + if (ak.nodeType !== 1 && (U = al.substring(V, W))) { + if (aj) { + U = U.replace(am, '\r'); + } + ak.nodeValue = U; + var ai = ak.ownerDocument; + var ao = ai.createElement('SPAN'); + ao.className = X[Z + 1]; + var ad = ak.parentNode; + ad.replaceChild(ao, ak); + ao.appendChild(ak); + if (V < S) { + aa[ah + 1] = ak = ai.createTextNode(al.substring(W, S)); + ad.insertBefore(ak, ao.nextSibling); + } + } + V = W; + if (V >= S) { + ah += 2; + } + if (V >= ap) { + Z += 2; + } + } + } + var t = {}; + function c(U, V) { + for (var S = V.length; --S >= 0; ) { + var T = V[S]; + if (!t.hasOwnProperty(T)) { + t[T] = U; + } else { + if (window.console) { + console.warn('cannot override language handler %s', T); + } + } + } + } + function q(T, S) { + if (!(T && t.hasOwnProperty(T))) { + T = /^\s*]*(?:>|$)/], + [j, /^<\!--[\s\S]*?(?:-\->|$)/], + ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/], + ['lang-', /^<%([\s\S]+?)(?:%>|$)/], + [L, /^(?:<[%?]|[%?]>)/], + ['lang-', /^]*>([\s\S]+?)<\/xmp\b[^>]*>/i], + ['lang-js', /^]*>([\s\S]*?)(<\/script\b[^>]*>)/i], + ['lang-css', /^]*>([\s\S]*?)(<\/style\b[^>]*>)/i], + ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i] + ] + ), + ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl'] + ); + c( + g( + [ + [F, /^[\s]+/, null, ' \t\r\n'], + [n, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '"\''] + ], + [ + [m, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i], + [P, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], + ['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/], + [L, /^[=<>\/]+/], + ['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i], + ['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i], + ['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i], + ['lang-css', /^style\s*=\s*\"([^\"]+)\"/i], + ['lang-css', /^style\s*=\s*\'([^\']+)\'/i], + ['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i] + ] + ), + ['in.tag'] + ); + c(g([], [[n, /^[\s\S]+/]]), ['uq.val']); + c(i({ keywords: l, hashComments: true, cStyleComments: true, types: e }), [ + 'c', + 'cc', + 'cpp', + 'cxx', + 'cyc', + 'm' + ]); + c(i({ keywords: 'null,true,false' }), ['json']); + c(i({ keywords: R, hashComments: true, cStyleComments: true, verbatimStrings: true, types: e }), [ + 'cs' + ]); + c(i({ keywords: x, cStyleComments: true }), ['java']); + c(i({ keywords: H, hashComments: true, multiLineStrings: true }), ['bsh', 'csh', 'sh']); + c(i({ keywords: I, hashComments: true, multiLineStrings: true, tripleQuotedStrings: true }), [ + 'cv', + 'py' + ]); + c(i({ keywords: s, hashComments: true, multiLineStrings: true, regexLiterals: true }), [ + 'perl', + 'pl', + 'pm' + ]); + c(i({ keywords: f, hashComments: true, multiLineStrings: true, regexLiterals: true }), ['rb']); + c(i({ keywords: w, cStyleComments: true, regexLiterals: true }), ['js']); + c( + i({ + keywords: r, + hashComments: 3, + cStyleComments: true, + multilineStrings: true, + tripleQuotedStrings: true, + regexLiterals: true + }), + ['coffee'] + ); + c(g([], [[C, /^[\s\S]+/]]), ['regex']); + function d(V) { + var U = V.langExtension; + try { + var S = a(V.sourceNode); + var T = S.sourceCode; + V.sourceCode = T; + V.spans = S.spans; + V.basePos = 0; + q(U, T)(V); + D(V); + } catch (W) { + if ('console' in window) { + console.log(W && W.stack ? W.stack : W); + } + } + } + function y(W, V, U) { + var S = document.createElement('PRE'); + S.innerHTML = W; + if (U) { + Q(S, U); + } + var T = { langExtension: V, numberLines: U, sourceNode: S }; + d(T); + return S.innerHTML; + } + function b(ad) { + function Y(af) { + return document.getElementsByTagName(af); + } + var ac = [Y('pre'), Y('code'), Y('xmp')]; + var T = []; + for (var aa = 0; aa < ac.length; ++aa) { + for (var Z = 0, V = ac[aa].length; Z < V; ++Z) { + T.push(ac[aa][Z]); + } + } + ac = null; + var W = Date; + if (!W.now) { + W = { + now: function () { + return +new Date(); + } + }; + } + var X = 0; + var S; + var ab = /\blang(?:uage)?-([\w.]+)(?!\S)/; + var ae = /\bprettyprint\b/; + function U() { + var ag = window.PR_SHOULD_USE_CONTINUATION ? W.now() + 250 : Infinity; + for (; X < T.length && W.now() < ag; X++) { + var aj = T[X]; + var ai = aj.className; + if (ai.indexOf('prettyprint') >= 0) { + var ah = ai.match(ab); + var am; + if (!ah && (am = o(aj)) && 'CODE' === am.tagName) { + ah = am.className.match(ab); + } + if (ah) { + ah = ah[1]; + } + var al = false; + for (var ak = aj.parentNode; ak; ak = ak.parentNode) { + if ( + (ak.tagName === 'pre' || ak.tagName === 'code' || ak.tagName === 'xmp') && + ak.className && + ak.className.indexOf('prettyprint') >= 0 + ) { + al = true; + break; + } + } + if (!al) { + var af = aj.className.match(/\blinenums\b(?::(\d+))?/); + af = af ? (af[1] && af[1].length ? +af[1] : true) : false; + if (af) { + Q(aj, af); + } + S = { langExtension: ah, sourceNode: aj, numberLines: af }; + d(S); + } + } + } + if (X < T.length) { + setTimeout(U, 250); + } else { + if (ad) { + ad(); + } + } + } + U(); + } + window.prettyPrintOne = y; + window.prettyPrint = b; + window.PR = { + createSimpleLexer: g, + registerLangHandler: c, + sourceDecorator: i, + PR_ATTRIB_NAME: P, + PR_ATTRIB_VALUE: n, + PR_COMMENT: j, + PR_DECLARATION: E, + PR_KEYWORD: z, + PR_LITERAL: G, + PR_NOCODE: N, + PR_PLAIN: F, + PR_PUNCTUATION: L, + PR_SOURCE: J, + PR_STRING: C, + PR_TAG: m, + PR_TYPE: O + }; +})(); +PR.registerLangHandler( + PR.createSimpleLexer( + [], + [ + [PR.PR_DECLARATION, /^]*(?:>|$)/], + [PR.PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/], + [PR.PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], + ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/], + ['lang-', /^<%([\s\S]+?)(?:%>|$)/], + ['lang-', /^]*>([\s\S]+?)<\/xmp\b[^>]*>/i], + [ + 'lang-handlebars', + /^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i + ], + ['lang-js', /^]*>([\s\S]*?)(<\/script\b[^>]*>)/i], + ['lang-css', /^]*>([\s\S]*?)(<\/style\b[^>]*>)/i], + ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i], + [PR.PR_DECLARATION, /^{{[#^>/]?\s*[\w.][^}]*}}/], + [PR.PR_DECLARATION, /^{{&?\s*[\w.][^}]*}}/], + [PR.PR_DECLARATION, /^{{{>?\s*[\w.][^}]*}}}/], + [PR.PR_COMMENT, /^{{![^}]*}}/] + ] + ), + ['handlebars', 'hbs'] +); +PR.registerLangHandler( + PR.createSimpleLexer( + [[PR.PR_PLAIN, /^[ \t\r\n\f]+/, null, ' \t\r\n\f']], + [ + [PR.PR_STRING, /^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/, null], + [PR.PR_STRING, /^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/, null], + ['lang-css-str', /^url\(([^\)\"\']*)\)/i], + [ + PR.PR_KEYWORD, + /^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i, + null + ], + ['lang-css-kw', /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i], + [PR.PR_COMMENT, /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], + [PR.PR_COMMENT, /^(?:)/], + [PR.PR_LITERAL, /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i], + [PR.PR_LITERAL, /^#(?:[0-9a-f]{3}){1,2}/i], + [PR.PR_PLAIN, /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i], + [PR.PR_PUNCTUATION, /^[^\s\w\'\"]+/] + ] + ), + ['css'] +); +PR.registerLangHandler( + PR.createSimpleLexer( + [], + [[PR.PR_KEYWORD, /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]] + ), + ['css-kw'] +); +PR.registerLangHandler(PR.createSimpleLexer([], [[PR.PR_STRING, /^[^\)\"\']+/]]), ['css-str']); diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js index 2bb296a..d116165 100644 --- a/coverage/lcov-report/sorter.js +++ b/coverage/lcov-report/sorter.js @@ -1,196 +1,189 @@ /* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; +var addSorting = (function () { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - if ( - row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()) - ) { - row.style.display = ''; - } else { - row.style.display = 'none'; - } - } - } + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if (row.textContent.toLowerCase().includes(searchValue.toLowerCase())) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } - rows.sort(finalSorter); + rows.sort(finalSorter); - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; - return function() { - var desc = col.defaultDescSort; + return function () { + var desc = col.defaultDescSort; - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; })(); window.addEventListener('load', addSorting); diff --git a/src/lib/__tests__/useTooltip.test.js b/src/lib/__tests__/useTooltip.test.js index 56c66b3..38de46c 100644 --- a/src/lib/__tests__/useTooltip.test.js +++ b/src/lib/__tests__/useTooltip.test.js @@ -13,9 +13,13 @@ const initTarget = (id) => { }; const initTemplate = (id, contentId) => { - const template = createElement({ tag: 'template', attributes: { id }, parent: document.body }) - createElement({ tag: 'div', attributes: { id: contentId, class: 'foo' }, parent: template.content }) - return template + const template = createElement({ tag: 'template', attributes: { id }, parent: document.body }); + createElement({ + tag: 'div', + attributes: { id: contentId, class: 'foo' }, + parent: template.content + }); + return template; }; describe('useTooltip', () => { @@ -64,393 +68,402 @@ describe('useTooltip', () => { }); test('Hides tooltip on mouse leave', async () => { - action = useTooltip(target, options) - await _enterAndLeave(target) - expect(getElement('#content')).not.toBeInTheDocument() - }) + action = useTooltip(target, options); + await _enterAndLeave(target); + expect(getElement('#content')).not.toBeInTheDocument(); + }); test('Hides tooltip on escape key down', async () => { - action = useTooltip(target, options) - await _enter(target) - await _keyDown(target) - expect(getElement('#content')).not.toBeInTheDocument() - }) + action = useTooltip(target, options); + await _enter(target); + await _keyDown(target); + expect(getElement('#content')).not.toBeInTheDocument(); + }); }); }); describe('useTooltip lifecycle', () => { test('Destroys tooltip', async () => { - action = useTooltip(target, options) - action.destroy(target) - expect(target).not.toHaveStyle('position: relative') - expect(target).not.toHaveAttribute('aria-describedby') - await _enter(target) - expect(getElement('#content')).not.toBeInTheDocument() - }) - }) + action = useTooltip(target, options); + action.destroy(target); + expect(target).not.toHaveStyle('position: relative'); + expect(target).not.toHaveAttribute('aria-describedby'); + await _enter(target); + expect(getElement('#content')).not.toBeInTheDocument(); + }); + }); describe('useTooltip props: content', () => { test('Displays text content', async () => { - const content = 'Foo' + const content = 'Foo'; action = useTooltip(target, { ...options, contentSelector: null, - content, - }) - await _enter(target) - expect(target).toHaveTextContent(content) - }) + content + }); + await _enter(target); + expect(target).toHaveTextContent(content); + }); test('Displays content element over text', async () => { - const content = 'Foo' + const content = 'Foo'; action = useTooltip(target, { ...options, - content, - }) - await _enter(target) - expect(target).not.toHaveTextContent(content) - expect(getElement('#content')).toBeInTheDocument() - }) - }) + content + }); + await _enter(target); + expect(target).not.toHaveTextContent(content); + expect(getElement('#content')).toBeInTheDocument(); + }); + }); describe('useTooltip props: contentActions', () => { test('Triggers callback on tooltip click', async () => { - action = useTooltip(target, options) - const contentAction = options.contentActions['*'] - await _enter(target) - const content = getElement('#content') - await fireEvent.click(content) - expect(contentAction.callback).toHaveBeenCalledWith(contentAction.callbackParams[0], expect.any(Event)) - expect(content).toBeInTheDocument() - }) + action = useTooltip(target, options); + const contentAction = options.contentActions['*']; + await _enter(target); + const content = getElement('#content'); + await fireEvent.click(content); + expect(contentAction.callback).toHaveBeenCalledWith( + contentAction.callbackParams[0], + expect.any(Event) + ); + expect(content).toBeInTheDocument(); + }); test('Closes tooltip after triggering callback', async () => { - action = useTooltip(target, options) - options.contentActions['*'].closeOnCallback = true - const contentAction = options.contentActions['*'] - await _enter(target) - const content = getElement('#content') - await fireEvent.click(content) - expect(contentAction.callback).toHaveBeenCalledWith(contentAction.callbackParams[0], expect.any(Event)) - expect(content).not.toBeInTheDocument() - await fireEvent.animationEnd(content.parentNode) - expect(content).not.toBeInTheDocument() - }) + action = useTooltip(target, options); + options.contentActions['*'].closeOnCallback = true; + const contentAction = options.contentActions['*']; + await _enter(target); + const content = getElement('#content'); + await fireEvent.click(content); + expect(contentAction.callback).toHaveBeenCalledWith( + contentAction.callbackParams[0], + expect.any(Event) + ); + expect(content).not.toBeInTheDocument(); + await fireEvent.animationEnd(content.parentNode); + expect(content).not.toBeInTheDocument(); + }); test('Closes tooltip after triggering callback when animated', async () => { - action = useTooltip(target, { ...options, animated: true }) - options.contentActions['*'].closeOnCallback = true - const contentAction = options.contentActions['*'] - await _enter(target) - const content = getElement('#content') - await fireEvent.click(content) - expect(contentAction.callback).toHaveBeenCalledWith(contentAction.callbackParams[0], expect.any(Event)) - expect(content).toBeInTheDocument() - await fireEvent.animationEnd(content.parentNode) - expect(content).not.toBeInTheDocument() - }) + action = useTooltip(target, { ...options, animated: true }); + options.contentActions['*'].closeOnCallback = true; + const contentAction = options.contentActions['*']; + await _enter(target); + const content = getElement('#content'); + await fireEvent.click(content); + expect(contentAction.callback).toHaveBeenCalledWith( + contentAction.callbackParams[0], + expect.any(Event) + ); + expect(content).toBeInTheDocument(); + await fireEvent.animationEnd(content.parentNode); + expect(content).not.toBeInTheDocument(); + }); test('Triggers new callback on tooltip click after update', async () => { - action = useTooltip(target, options) - const newCallback = vi.fn(() => 0) + action = useTooltip(target, options); + const newCallback = vi.fn(() => 0); const newOptions = { ...options, contentActions: { '*': { eventType: 'click', callback: newCallback, - callbackParams: ['foo', 'bar'], - }, - }, - } - const contentAction = newOptions.contentActions['*'] - action.update(newOptions) - await _enter(target) - await fireEvent.click(getElement('#content')) + callbackParams: ['foo', 'bar'] + } + } + }; + const contentAction = newOptions.contentActions['*']; + action.update(newOptions); + await _enter(target); + await fireEvent.click(getElement('#content')); expect(contentAction.callback).toHaveBeenCalledWith( contentAction.callbackParams[0], contentAction.callbackParams[1], expect.any(Event) - ) - }) - }) + ); + }); + }); describe('useTooltip props: containerClassName', () => { test('Sets tooltip default class', async () => { - action = useTooltip(target, options) - await _enter(target) - expect(getElement('#content').parentNode).toHaveClass('__tooltip') - }) + action = useTooltip(target, options); + await _enter(target); + expect(getElement('#content').parentNode).toHaveClass('__tooltip'); + }); test('Updates tooltip class', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - containerClassName: '__custom-tooltip', - }) - await _enter(target) - expect(getElement('#content').parentNode).toHaveClass('__custom-tooltip') - }) + containerClassName: '__custom-tooltip' + }); + await _enter(target); + expect(getElement('#content').parentNode).toHaveClass('__custom-tooltip'); + }); test('Sets tooltip custom class', async () => { - action = useTooltip(target, { ...options, containerClassName: '__custom-tooltip' }) - await _enter(target) - expect(getElement('#content').parentNode).toHaveClass('__custom-tooltip') - }) - }) + action = useTooltip(target, { ...options, containerClassName: '__custom-tooltip' }); + await _enter(target); + expect(getElement('#content').parentNode).toHaveClass('__custom-tooltip'); + }); + }); describe('useTooltip props: disabled', () => { test('Disables tooltip', async () => { action = useTooltip(target, { ...options, - disabled: true, - }) - await _enter(target) - expect(getElement('#content')).not.toBeInTheDocument() - }) + disabled: true + }); + await _enter(target); + expect(getElement('#content')).not.toBeInTheDocument(); + }); test('Disables tooltip after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - disabled: true, - }) - await _enter(target) - expect(getElement('#content')).not.toBeInTheDocument() - }) + disabled: true + }); + await _enter(target); + expect(getElement('#content')).not.toBeInTheDocument(); + }); test('Enables tooltip after update', async () => { action = useTooltip(target, { ...options, - disabled: true, - }) + disabled: true + }); action.update({ - disabled: false, - }) - await _enter(target) - expect(getElement('#content')).toBeInTheDocument() - }) - }) + disabled: false + }); + await _enter(target); + expect(getElement('#content')).toBeInTheDocument(); + }); + }); describe('useTooltip props: position', () => { test('Positions tooltip on the left', async () => { action = useTooltip(target, { ...options, - position: 'left', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).toHaveClass('__tooltip-left') - }) + position: 'left' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).toHaveClass('__tooltip-left'); + }); test('Positions tooltip on the left after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - position: 'left', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).not.toHaveClass('__tooltip-top') - expect(content.parentNode).toHaveClass('__tooltip-left') - }) + position: 'left' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).not.toHaveClass('__tooltip-top'); + expect(content.parentNode).toHaveClass('__tooltip-left'); + }); test('Positions tooltip on the right', async () => { action = useTooltip(target, { ...options, - position: 'right', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).toHaveLength(0) - expect(content.parentNode.style.right).not.toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).toHaveClass('__tooltip-right') - }) + position: 'right' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).toHaveLength(0); + expect(content.parentNode.style.right).not.toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).toHaveClass('__tooltip-right'); + }); test('Positions tooltip on the right after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - position: 'right', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).toHaveLength(0) - expect(content.parentNode.style.right).not.toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).not.toHaveClass('__tooltip-top') - expect(content.parentNode).toHaveClass('__tooltip-right') - }) + position: 'right' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).toHaveLength(0); + expect(content.parentNode.style.right).not.toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).not.toHaveClass('__tooltip-top'); + expect(content.parentNode).toHaveClass('__tooltip-right'); + }); test('Positions tooltip at the top', async () => { - action = useTooltip(target, options) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).toHaveClass('__tooltip-top') - }) + action = useTooltip(target, options); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).toHaveClass('__tooltip-top'); + }); test('Positions tooltip at the top after update', async () => { action = useTooltip(target, { ...options, - position: 'left', - }) + position: 'left' + }); action.update({ - position: 'top', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).not.toHaveLength(0) - expect(content.parentNode.style.bottom).toHaveLength(0) - expect(content.parentNode).not.toHaveClass('__tooltip-left') - expect(content.parentNode).toHaveClass('__tooltip-top') - }) + position: 'top' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).not.toHaveLength(0); + expect(content.parentNode.style.bottom).toHaveLength(0); + expect(content.parentNode).not.toHaveClass('__tooltip-left'); + expect(content.parentNode).toHaveClass('__tooltip-top'); + }); test('Positions tooltip at the bottom', async () => { action = useTooltip(target, { ...options, - position: 'bottom', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).toHaveLength(0) - expect(content.parentNode.style.bottom).not.toHaveLength(0) - expect(content.parentNode).toHaveClass('__tooltip-bottom') - }) + position: 'bottom' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).toHaveLength(0); + expect(content.parentNode.style.bottom).not.toHaveLength(0); + expect(content.parentNode).toHaveClass('__tooltip-bottom'); + }); test('Positions tooltip at the bottom after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - position: 'bottom', - }) - await _enter(target) - const content = getElement('#content') - expect(content.parentNode.style.left).not.toHaveLength(0) - expect(content.parentNode.style.right).toHaveLength(0) - expect(content.parentNode.style.top).toHaveLength(0) - expect(content.parentNode.style.bottom).not.toHaveLength(0) - expect(content.parentNode).not.toHaveClass('__tooltip-top') - expect(content.parentNode).toHaveClass('__tooltip-bottom') - }) - }) + position: 'bottom' + }); + await _enter(target); + const content = getElement('#content'); + expect(content.parentNode.style.left).not.toHaveLength(0); + expect(content.parentNode.style.right).toHaveLength(0); + expect(content.parentNode.style.top).toHaveLength(0); + expect(content.parentNode.style.bottom).not.toHaveLength(0); + expect(content.parentNode).not.toHaveClass('__tooltip-top'); + expect(content.parentNode).toHaveClass('__tooltip-bottom'); + }); + }); describe('useTooltip props: enterDelay', () => { test('Delays tooltip appearance', async () => { action = useTooltip(target, { ...options, - enterDelay: 50, - }) - await _enter(target) - let content = getElement('#content') - expect(content).toBeNull() - await standby(100) - content = getElement('#content') - expect(content).toBeInTheDocument() - }) + enterDelay: 50 + }); + await _enter(target); + let content = getElement('#content'); + expect(content).toBeNull(); + await standby(100); + content = getElement('#content'); + expect(content).toBeInTheDocument(); + }); test('Delays tooltip disappearance after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - enterDelay: 150, - }) - await _enter(target) - await standby(100) - let content = getElement('#content') - expect(content).toBeNull() - await standby(100) - content = getElement('#content') - expect(content).toBeInTheDocument() - }) - }) + enterDelay: 150 + }); + await _enter(target); + await standby(100); + let content = getElement('#content'); + expect(content).toBeNull(); + await standby(100); + content = getElement('#content'); + expect(content).toBeInTheDocument(); + }); + }); describe('useTooltip props: onEnter', () => { test('Triggers callback when entering tooltip', async () => { - const onEnter = vi.fn(() => 0) + const onEnter = vi.fn(() => 0); action = useTooltip(target, { ...options, - onEnter, - }) - await _enter(target) - await standby(0) - expect(onEnter).toHaveBeenCalled() - }) + onEnter + }); + await _enter(target); + await standby(0); + expect(onEnter).toHaveBeenCalled(); + }); test('Triggers callback when entering tooltip after update', async () => { - const onEnter = vi.fn(() => 0) - action = useTooltip(target, options) + const onEnter = vi.fn(() => 0); + action = useTooltip(target, options); action.update({ - onEnter, - }) - await _enter(target) - await standby(0) - expect(onEnter).toHaveBeenCalled() - }) - }) + onEnter + }); + await _enter(target); + await standby(0); + expect(onEnter).toHaveBeenCalled(); + }); + }); describe('useTooltip props: leaveDelay', () => { test('Delays tooltip disappearance', async () => { action = useTooltip(target, { ...options, - leaveDelay: 50, - }) - await _enterAndLeave(target) - const content = getElement('#content') - expect(content).toBeInTheDocument() - await standby(100) - expect(content).not.toBeInTheDocument() - }) + leaveDelay: 50 + }); + await _enterAndLeave(target); + const content = getElement('#content'); + expect(content).toBeInTheDocument(); + await standby(100); + expect(content).not.toBeInTheDocument(); + }); test('Delays tooltip disappearance after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - leaveDelay: 150, - }) - await _enterAndLeave(target) - await standby(100) - const content = getElement('#content') - expect(content).toBeInTheDocument() - await standby(100) - expect(content).not.toBeInTheDocument() - }) - }) + leaveDelay: 150 + }); + await _enterAndLeave(target); + await standby(100); + const content = getElement('#content'); + expect(content).toBeInTheDocument(); + await standby(100); + expect(content).not.toBeInTheDocument(); + }); + }); describe('useTooltip props: animated', () => { test('Animates tooltip disappearance', async () => { action = useTooltip(target, { ...options, - animated: true, - }) - await _enterAndLeave(target) - const content = getElement('#content') - expect(content).toBeInTheDocument() - await fireEvent.animationEnd(content.parentNode) - expect(content).not.toBeInTheDocument() - }) + animated: true + }); + await _enterAndLeave(target); + const content = getElement('#content'); + expect(content).toBeInTheDocument(); + await fireEvent.animationEnd(content.parentNode); + expect(content).not.toBeInTheDocument(); + }); test('Animates tooltip disappearance after update', async () => { - action = useTooltip(target, options) + action = useTooltip(target, options); action.update({ - animated: true, - }) - await _enterAndLeave(target) - const content = getElement('#content') - expect(content).toBeInTheDocument() - await fireEvent.animationEnd(content.parentNode) - expect(content).not.toBeInTheDocument() - }) - }) + animated: true + }); + await _enterAndLeave(target); + const content = getElement('#content'); + expect(content).toBeInTheDocument(); + await fireEvent.animationEnd(content.parentNode); + expect(content).not.toBeInTheDocument(); + }); + }); }); diff --git a/static/app.css b/static/app.css index 1870771..98d0104 100644 --- a/static/app.css +++ b/static/app.css @@ -1,6 +1,6 @@ * { box-sizing: border-box; - font-family: Georgia, 'Times New Roman', Times, serif + font-family: Georgia, 'Times New Roman', Times, serif; } html, diff --git a/vitest.config.js b/vitest.config.js index 3970095..1ff5974 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -1,14 +1,14 @@ -import { sveltekit } from '@sveltejs/kit/vite' -import { defineConfig } from 'vitest/config' +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { global: true, environment: 'jsdom', coverage: { - reporter: ['text', 'lcov'], + reporter: ['text', 'lcov'] }, - setupFiles: ['./vitest.setup.js'], + setupFiles: ['./vitest.setup.js'] }, - plugins: [sveltekit()], -}) + plugins: [sveltekit()] +}); diff --git a/vitest.setup.js b/vitest.setup.js index 05011eb..67f5c70 100644 --- a/vitest.setup.js +++ b/vitest.setup.js @@ -1,54 +1,54 @@ -import '@testing-library/jest-dom/vitest' -import { fireEvent } from '@testing-library/svelte' +import '@testing-library/jest-dom/vitest'; +import { fireEvent } from '@testing-library/svelte'; -import { standby } from '@untemps/utils/async/standby' +import { standby } from '@untemps/utils/async/standby'; global._enter = async (trigger) => new Promise(async (resolve) => { - await fireEvent.mouseOver(trigger) // fireEvent.mouseEnter only works if mouseOver is triggered before - await fireEvent.mouseEnter(trigger) - await standby(1) - resolve() - }) + await fireEvent.mouseOver(trigger); // fireEvent.mouseEnter only works if mouseOver is triggered before + await fireEvent.mouseEnter(trigger); + await standby(1); + resolve(); + }); global._leave = async (trigger) => new Promise(async (resolve) => { - await fireEvent.mouseLeave(trigger) - await standby(1) - resolve() - }) + await fireEvent.mouseLeave(trigger); + await standby(1); + resolve(); + }); global._enterAndLeave = async (trigger) => new Promise(async (resolve) => { - await _enter(trigger) - await _leave(trigger) - resolve() - }) + await _enter(trigger); + await _leave(trigger); + resolve(); + }); global._focus = async (trigger) => new Promise(async (resolve) => { - await fireEvent.focusIn(trigger) - await standby(1) - resolve() - }) + await fireEvent.focusIn(trigger); + await standby(1); + resolve(); + }); global._blur = async (trigger) => new Promise(async (resolve) => { - await fireEvent.focusOut(trigger) - await standby(1) - resolve() - }) + await fireEvent.focusOut(trigger); + await standby(1); + resolve(); + }); global._focusAndBlur = async (trigger) => new Promise(async (resolve) => { - await _focus(trigger) - await _blur(trigger) - resolve() - }) + await _focus(trigger); + await _blur(trigger); + resolve(); + }); global._keyDown = async (trigger, key) => new Promise(async (resolve) => { - await fireEvent.keyDown(trigger, key || { key: 'Escape', code: 'Escape', charCode: 27 }) - await standby(1) - resolve() - }) + await fireEvent.keyDown(trigger, key || { key: 'Escape', code: 'Escape', charCode: 27 }); + await standby(1); + resolve(); + });