From 72ec0b85610bc204e14dc2327f12e78570bac21f Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Thu, 18 Jan 2024 22:04:47 +0000 Subject: [PATCH 01/35] Add a dev container --- .devcontainer/devcontainer.json | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7626b29 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,35 @@ +// Config options: https://github.com/rocker-org/devcontainer-templates/tree/main/src/r-ver +{ + "name": "R (rocker/r-ver base)", + "image": "ghcr.io/rocker-org/devcontainer/r-ver:4.3", + // Add software + "features": { + // Required to test with knitr + // R package config: https://github.com/rocker-org/devcontainer-features/blob/main/src/r-rig/README.md + "ghcr.io/rocker-org/devcontainer-features/r-rig:1": { + "version": "none", + "installRMarkdown": true, + "installJupyterlab": true, + "installRadian": true + }, + // You may wish to switch prerelease to latest for stable development + // Quarto configuration : https://github.com/rocker-org/devcontainer-features/blob/main/src/quarto-cli/README.md + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": { + "version": "prerelease" + } + }, + "customizations": { + "vscode": { + "settings": { + "r.rterm.linux": "/usr/local/bin/radian", + "r.bracketedPaste": true, + "r.plot.useHttpgd": true, + "[r]": { + "editor.wordSeparators": "`~!@#%$^&*()-=+[{]}\\|;:'\",<>/?" + } + }, + // Enable a development set of extensions for Lua and Quarto + "extensions": ["quarto.quarto", "sumneko.lua", "GitHub.copilot"] + } + } +} \ No newline at end of file From f7838fc155d9715298427434737de6c172c1418c Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 19 Jan 2024 21:59:14 +0000 Subject: [PATCH 02/35] Re-org directories into lib/, R/, and quarto/ --- .github/workflows/R-CMD-check.yaml | 1 + .gitignore | 3 + .Rbuildignore => R/.Rbuildignore | 0 DESCRIPTION => R/DESCRIPTION | 0 LICENSE => R/LICENSE | 0 LICENSE.md => R/LICENSE.md | 0 NAMESPACE => R/NAMESPACE | 0 NEWS.md => R/NEWS.md | 0 R/{ => R}/colors.R | 0 R/{ => R}/countdown-package.R | 0 R/{ => R}/countdown.R | 0 R/{ => R}/shiny.R | 0 cran-comments.md => R/cran-comments.md | 0 {inst => R/inst}/countdown-fullscreen/app.R | 0 .../inst}/countdown-fullscreen/www/.empty | 0 .../www/bootstrap.min.css | 0 {inst => R/inst}/countdown/countdown.css | 0 {inst => R/inst}/countdown/countdown.js | 0 .../inst}/countdown/smb_stage_clear.mp3 | Bin {inst => R/inst}/examples/shiny-app/server.R | 0 {inst => R/inst}/examples/shiny-app/ui.R | 0 {man => R/man}/countdown-package.Rd | 0 {man => R/man}/countdown.Rd | 0 {man => R/man}/countdown_action.Rd | 0 {man => R/man}/countdown_app.Rd | 0 {man => R/man}/countdown_shiny_example.Rd | 0 {man => R/man}/countdown_update.Rd | 0 {man => R/man}/figures/countdown.gif | Bin {tests => R/tests}/testthat.R | 0 .../_snaps/countdown_default.css/countdown.md | 0 .../countdown.md | 0 .../countdown.md | 0 .../countdown_fullscreen.css/countdown.md | 0 .../countdown_margin-padding.css/countdown.md | 0 .../countdown_no-shadow.css/countdown.md | 0 .../countdown_running-colors.css/countdown.md | 0 .../countdown_top-left.css/countdown.md | 0 {tests => R/tests}/testthat/test-countdown.R | 0 {tests => R/tests}/testthat/test-shiny.R | 0 countdown.code-workspace | 8 + lib/countdown.css | 144 ++++++ lib/countdown.js | 478 ++++++++++++++++++ lib/smb_stage_clear.mp3 | Bin 0 -> 38758 bytes quarto/.gitignore | 3 + quarto/example.qmd | 9 + 45 files changed, 646 insertions(+) rename .Rbuildignore => R/.Rbuildignore (100%) rename DESCRIPTION => R/DESCRIPTION (100%) rename LICENSE => R/LICENSE (100%) rename LICENSE.md => R/LICENSE.md (100%) rename NAMESPACE => R/NAMESPACE (100%) rename NEWS.md => R/NEWS.md (100%) rename R/{ => R}/colors.R (100%) rename R/{ => R}/countdown-package.R (100%) rename R/{ => R}/countdown.R (100%) rename R/{ => R}/shiny.R (100%) rename cran-comments.md => R/cran-comments.md (100%) rename {inst => R/inst}/countdown-fullscreen/app.R (100%) rename {inst => R/inst}/countdown-fullscreen/www/.empty (100%) rename {inst => R/inst}/countdown-fullscreen/www/bootstrap.min.css (100%) rename {inst => R/inst}/countdown/countdown.css (100%) rename {inst => R/inst}/countdown/countdown.js (100%) rename {inst => R/inst}/countdown/smb_stage_clear.mp3 (100%) rename {inst => R/inst}/examples/shiny-app/server.R (100%) rename {inst => R/inst}/examples/shiny-app/ui.R (100%) rename {man => R/man}/countdown-package.Rd (100%) rename {man => R/man}/countdown.Rd (100%) rename {man => R/man}/countdown_action.Rd (100%) rename {man => R/man}/countdown_app.Rd (100%) rename {man => R/man}/countdown_shiny_example.Rd (100%) rename {man => R/man}/countdown_update.Rd (100%) rename {man => R/man}/figures/countdown.gif (100%) rename {tests => R/tests}/testthat.R (100%) rename {tests => R/tests}/testthat/_snaps/countdown_default.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_finished-colors.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_font-and-border.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_fullscreen.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_margin-padding.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_no-shadow.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_running-colors.css/countdown.md (100%) rename {tests => R/tests}/testthat/_snaps/countdown_top-left.css/countdown.md (100%) rename {tests => R/tests}/testthat/test-countdown.R (100%) rename {tests => R/tests}/testthat/test-shiny.R (100%) create mode 100644 countdown.code-workspace create mode 100644 lib/countdown.css create mode 100644 lib/countdown.js create mode 100644 lib/smb_stage_clear.mp3 create mode 100644 quarto/.gitignore create mode 100644 quarto/example.qmd diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 52c2b27..01a3765 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -47,3 +47,4 @@ jobs: - uses: r-lib/actions/check-r-package@v2 with: upload-snapshots: true + working-directory: R diff --git a/.gitignore b/.gitignore index 333387f..b02d3ae 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,6 @@ Icon Network Trash Folder Temporary Items .apdisk + +/.luarc.json +*.luarc.json \ No newline at end of file diff --git a/.Rbuildignore b/R/.Rbuildignore similarity index 100% rename from .Rbuildignore rename to R/.Rbuildignore diff --git a/DESCRIPTION b/R/DESCRIPTION similarity index 100% rename from DESCRIPTION rename to R/DESCRIPTION diff --git a/LICENSE b/R/LICENSE similarity index 100% rename from LICENSE rename to R/LICENSE diff --git a/LICENSE.md b/R/LICENSE.md similarity index 100% rename from LICENSE.md rename to R/LICENSE.md diff --git a/NAMESPACE b/R/NAMESPACE similarity index 100% rename from NAMESPACE rename to R/NAMESPACE diff --git a/NEWS.md b/R/NEWS.md similarity index 100% rename from NEWS.md rename to R/NEWS.md diff --git a/R/colors.R b/R/R/colors.R similarity index 100% rename from R/colors.R rename to R/R/colors.R diff --git a/R/countdown-package.R b/R/R/countdown-package.R similarity index 100% rename from R/countdown-package.R rename to R/R/countdown-package.R diff --git a/R/countdown.R b/R/R/countdown.R similarity index 100% rename from R/countdown.R rename to R/R/countdown.R diff --git a/R/shiny.R b/R/R/shiny.R similarity index 100% rename from R/shiny.R rename to R/R/shiny.R diff --git a/cran-comments.md b/R/cran-comments.md similarity index 100% rename from cran-comments.md rename to R/cran-comments.md diff --git a/inst/countdown-fullscreen/app.R b/R/inst/countdown-fullscreen/app.R similarity index 100% rename from inst/countdown-fullscreen/app.R rename to R/inst/countdown-fullscreen/app.R diff --git a/inst/countdown-fullscreen/www/.empty b/R/inst/countdown-fullscreen/www/.empty similarity index 100% rename from inst/countdown-fullscreen/www/.empty rename to R/inst/countdown-fullscreen/www/.empty diff --git a/inst/countdown-fullscreen/www/bootstrap.min.css b/R/inst/countdown-fullscreen/www/bootstrap.min.css similarity index 100% rename from inst/countdown-fullscreen/www/bootstrap.min.css rename to R/inst/countdown-fullscreen/www/bootstrap.min.css diff --git a/inst/countdown/countdown.css b/R/inst/countdown/countdown.css similarity index 100% rename from inst/countdown/countdown.css rename to R/inst/countdown/countdown.css diff --git a/inst/countdown/countdown.js b/R/inst/countdown/countdown.js similarity index 100% rename from inst/countdown/countdown.js rename to R/inst/countdown/countdown.js diff --git a/inst/countdown/smb_stage_clear.mp3 b/R/inst/countdown/smb_stage_clear.mp3 similarity index 100% rename from inst/countdown/smb_stage_clear.mp3 rename to R/inst/countdown/smb_stage_clear.mp3 diff --git a/inst/examples/shiny-app/server.R b/R/inst/examples/shiny-app/server.R similarity index 100% rename from inst/examples/shiny-app/server.R rename to R/inst/examples/shiny-app/server.R diff --git a/inst/examples/shiny-app/ui.R b/R/inst/examples/shiny-app/ui.R similarity index 100% rename from inst/examples/shiny-app/ui.R rename to R/inst/examples/shiny-app/ui.R diff --git a/man/countdown-package.Rd b/R/man/countdown-package.Rd similarity index 100% rename from man/countdown-package.Rd rename to R/man/countdown-package.Rd diff --git a/man/countdown.Rd b/R/man/countdown.Rd similarity index 100% rename from man/countdown.Rd rename to R/man/countdown.Rd diff --git a/man/countdown_action.Rd b/R/man/countdown_action.Rd similarity index 100% rename from man/countdown_action.Rd rename to R/man/countdown_action.Rd diff --git a/man/countdown_app.Rd b/R/man/countdown_app.Rd similarity index 100% rename from man/countdown_app.Rd rename to R/man/countdown_app.Rd diff --git a/man/countdown_shiny_example.Rd b/R/man/countdown_shiny_example.Rd similarity index 100% rename from man/countdown_shiny_example.Rd rename to R/man/countdown_shiny_example.Rd diff --git a/man/countdown_update.Rd b/R/man/countdown_update.Rd similarity index 100% rename from man/countdown_update.Rd rename to R/man/countdown_update.Rd diff --git a/man/figures/countdown.gif b/R/man/figures/countdown.gif similarity index 100% rename from man/figures/countdown.gif rename to R/man/figures/countdown.gif diff --git a/tests/testthat.R b/R/tests/testthat.R similarity index 100% rename from tests/testthat.R rename to R/tests/testthat.R diff --git a/tests/testthat/_snaps/countdown_default.css/countdown.md b/R/tests/testthat/_snaps/countdown_default.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_default.css/countdown.md rename to R/tests/testthat/_snaps/countdown_default.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md b/R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_finished-colors.css/countdown.md rename to R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md b/R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_font-and-border.css/countdown.md rename to R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md b/R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_fullscreen.css/countdown.md rename to R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md b/R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_margin-padding.css/countdown.md rename to R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md b/R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_no-shadow.css/countdown.md rename to R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_running-colors.css/countdown.md b/R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_running-colors.css/countdown.md rename to R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md diff --git a/tests/testthat/_snaps/countdown_top-left.css/countdown.md b/R/tests/testthat/_snaps/countdown_top-left.css/countdown.md similarity index 100% rename from tests/testthat/_snaps/countdown_top-left.css/countdown.md rename to R/tests/testthat/_snaps/countdown_top-left.css/countdown.md diff --git a/tests/testthat/test-countdown.R b/R/tests/testthat/test-countdown.R similarity index 100% rename from tests/testthat/test-countdown.R rename to R/tests/testthat/test-countdown.R diff --git a/tests/testthat/test-shiny.R b/R/tests/testthat/test-shiny.R similarity index 100% rename from tests/testthat/test-shiny.R rename to R/tests/testthat/test-shiny.R diff --git a/countdown.code-workspace b/countdown.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/countdown.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/lib/countdown.css b/lib/countdown.css new file mode 100644 index 0000000..bb86cfd --- /dev/null +++ b/lib/countdown.css @@ -0,0 +1,144 @@ +.countdown { + background: {{color_background}}; + position: absolute; + cursor: pointer; + font-size: {{font_size}}; + line-height: {{line_height}}; + border-color: {{color_border}}; + border-width: {{border_width}}; + border-style: solid; + border-radius: {{border_radius}};{{#box_shadow}} + box-shadow: {{box_shadow}}; + -webkit-box-shadow: {{box_shadow}};{{/box_shadow}} + margin: {{margin}}; + padding: {{padding}}; + text-align: center; + z-index: 10; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.countdown { + display: flex; + align-items: center; + justify-content: center; +} +.countdown .countdown-time { + background: none; + font-size: 100%; + padding: 0; +} +.countdown-digits { + color: {{color_text}}; +} +.countdown.running { + border-color: {{color_running_border}}; + background-color: {{color_running_background}}; +} +.countdown.running .countdown-digits { + color: {{color_running_text}}; +} +.countdown.finished { + border-color: {{color_finished_border}}; + background-color: {{color_finished_background}}; +} +.countdown.finished .countdown-digits { + color: {{color_finished_text}}; +} +.countdown.running.warning { + border-color: {{color_warning_border}}; + background-color: {{color_warning_background}}; +} +.countdown.running.warning .countdown-digits { + color: {{color_warning_text}}; +} + +.countdown.running.blink-colon .countdown-digits.colon { + opacity: 0.1; +} + +/* ------ Controls ------ */ +.countdown:not(.running) .countdown-controls { + display: none; +} + +.countdown-controls { + position: absolute; + top: -0.5rem; + right: -0.5rem; + left: -0.5rem; + display: flex; + justify-content: space-between; + margin: 0; + padding: 0; +} + +.countdown-controls > button { + font-size: 1.5rem; + width: 1rem; + height: 1rem; + display: inline-block; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: monospace; + padding: 10px; + margin: 0; + background: inherit; + border: 2px solid; + border-radius: 100%; + transition: 50ms transform ease-in-out, 150ms opacity ease-in; + --countdown-transition-distance: 10px; +} + +.countdown .countdown-controls > button:last-child { + transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); + opacity: 0; + color: {{color_running_text}}; + background-color: {{color_running_background}}; + border-color: {{color_running_border}}; +} + +.countdown .countdown-controls > button:first-child { + transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); + opacity: 0; + color: {{color_finished_text}}; + background-color: {{color_finished_background}}; + border-color: {{color_finished_border}}; +} + +.countdown.running:hover .countdown-controls > button, +.countdown.running:focus-within .countdown-controls > button{ + transform: translate(0, 0); + opacity: 1; +} + +.countdown.running:hover .countdown-controls > button:hover, +.countdown.running:focus-within .countdown-controls > button:hover{ + transform: translate(0, calc(var(--countdown-transition-distance) / -2)); + box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); + -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); +} + +.countdown.running:hover .countdown-controls > button:active, +.countdown.running:focus-within .countdown-controls > button:active{ + transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); +} + +/* ----- Fullscreen ----- */ +.countdown.countdown-fullscreen { + z-index: 0; +} + +.countdown-fullscreen.running .countdown-controls { + top: 1rem; + left: 0; + right: 0; + justify-content: center; +} + +.countdown-fullscreen.running .countdown-controls > button + button { + margin-left: 1rem; +} diff --git a/lib/countdown.js b/lib/countdown.js new file mode 100644 index 0000000..a058ad8 --- /dev/null +++ b/lib/countdown.js @@ -0,0 +1,478 @@ +/* globals Shiny,Audio */ +class CountdownTimer { + constructor (el, opts) { + if (typeof el === 'string' || el instanceof String) { + el = document.querySelector(el) + } + + if (el.counter) { + return el.counter + } + + const minutes = parseInt(el.querySelector('.minutes').innerText || '0') + const seconds = parseInt(el.querySelector('.seconds').innerText || '0') + const duration = minutes * 60 + seconds + + function attrIsTrue (x) { + if (x === true) return true + return !!(x === 'true' || x === '' || x === '1') + } + + this.element = el + this.duration = duration + this.end = null + this.is_running = false + this.warn_when = parseInt(el.dataset.warnWhen) || -1 + this.update_every = parseInt(el.dataset.updateEvery) || 1 + this.play_sound = attrIsTrue(el.dataset.playSound) + this.blink_colon = attrIsTrue(el.dataset.blinkColon) + this.startImmediately = attrIsTrue(el.dataset.startImmediately) + this.timeout = null + this.display = { minutes, seconds } + + if (opts.src_location) { + this.src_location = opts.src_location + } + + this.addEventListeners() + } + + addEventListeners () { + const self = this + + if (this.startImmediately) { + if (window.remark && window.slideshow) { + // Remark (xaringan) support + const isOnVisibleSlide = () => { + return document.querySelector('.remark-visible').contains(self.element) + } + if (isOnVisibleSlide()) { + self.start() + } else { + let started_once = 0 + window.slideshow.on('afterShowSlide', function () { + if (started_once > 0) return + if (isOnVisibleSlide()) { + self.start() + started_once = 1 + } + }) + } + } else if (window.Reveal) { + // Revealjs (quarto) support + const isOnVisibleSlide = () => { + const currentSlide = document.querySelector('.reveal .slide.present') + return currentSlide ? currentSlide.contains(self.element) : false + } + if (isOnVisibleSlide()) { + self.start() + } else { + const revealStartTimer = () => { + if (isOnVisibleSlide()) { + self.start() + window.Reveal.off('slidechanged', revealStartTimer) + } + } + window.Reveal.on('slidechanged', revealStartTimer) + } + } else if (window.IntersectionObserver) { + // All other situtations use IntersectionObserver + const onVisible = (element, callback) => { + new window.IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.intersectionRatio > 0) { + callback(element) + observer.disconnect() + } + }) + }).observe(element) + } + onVisible(this.element, el => el.countdown.start()) + } else { + // or just start the timer as soon as it's initialized + this.start() + } + } + + function haltEvent (ev) { + ev.preventDefault() + ev.stopPropagation() + } + function isSpaceOrEnter (ev) { + return ev.code === 'Space' || ev.code === 'Enter' + } + function isArrowUpOrDown (ev) { + return ev.code === 'ArrowUp' || ev.code === 'ArrowDown' + } + + ;['click', 'touchend'].forEach(function (eventType) { + self.element.addEventListener(eventType, function (ev) { + haltEvent(ev) + self.is_running ? self.stop() : self.start() + }) + }) + this.element.addEventListener('keydown', function (ev) { + if (ev.code === "Escape") { + self.reset() + haltEvent(ev) + } + if (!isSpaceOrEnter(ev) && !isArrowUpOrDown(ev)) return + haltEvent(ev) + if (isSpaceOrEnter(ev)) { + self.is_running ? self.stop() : self.start() + return + } + + if (!self.is_running) return + + if (ev.code === 'ArrowUp') { + self.bumpUp() + } else if (ev.code === 'ArrowDown') { + self.bumpDown() + } + }) + this.element.addEventListener('dblclick', function (ev) { + haltEvent(ev) + if (self.is_running) self.reset() + }) + this.element.addEventListener('touchmove', haltEvent) + + const btnBumpDown = this.element.querySelector('.countdown-bump-down') + ;['click', 'touchend'].forEach(function (eventType) { + btnBumpDown.addEventListener(eventType, function (ev) { + haltEvent(ev) + if (self.is_running) self.bumpDown() + }) + }) + btnBumpDown.addEventListener('keydown', function (ev) { + if (!isSpaceOrEnter(ev) || !self.is_running) return + haltEvent(ev) + self.bumpDown() + }) + + const btnBumpUp = this.element.querySelector('.countdown-bump-up') + ;['click', 'touchend'].forEach(function (eventType) { + btnBumpUp.addEventListener(eventType, function (ev) { + haltEvent(ev) + if (self.is_running) self.bumpUp() + }) + }) + btnBumpUp.addEventListener('keydown', function (ev) { + if (!isSpaceOrEnter(ev) || !self.is_running) return + haltEvent(ev) + self.bumpUp() + }) + this.element.querySelector('.countdown-controls').addEventListener('dblclick', function (ev) { + haltEvent(ev) + }) + } + + remainingTime () { + const remaining = this.is_running + ? (this.end - Date.now()) / 1000 + : this.remaining || this.duration + + let minutes = Math.floor(remaining / 60) + let seconds = Math.ceil(remaining - minutes * 60) + + if (seconds > 59) { + minutes = minutes + 1 + seconds = seconds - 60 + } + + return { remaining, minutes, seconds } + } + + start () { + if (this.is_running) return + + this.is_running = true + + if (this.remaining) { + // Having a static remaining time indicates timer was paused + this.end = Date.now() + this.remaining * 1000 + this.remaining = null + } else { + this.end = Date.now() + this.duration * 1000 + } + + this.reportStateToShiny('start') + + this.element.classList.remove('finished') + this.element.classList.add('running') + this.update(true) + this.tick() + } + + tick (run_again) { + if (typeof run_again === 'undefined') { + run_again = true + } + + if (!this.is_running) return + + const { seconds: secondsWas } = this.display + this.update() + + if (run_again) { + const delay = (this.end - Date.now() > 10000) ? 1000 : 250 + this.blinkColon(secondsWas) + this.timeout = setTimeout(this.tick.bind(this), delay) + } + } + + blinkColon (secondsWas) { + // don't blink unless option is set + if (!this.blink_colon) return + // warn_when always updates the seconds + if (this.warn_when > 0 && Date.now() + this.warn_when > this.end) { + this.element.classList.remove('blink-colon') + return + } + const { seconds: secondsIs } = this.display + if (secondsIs > 10 || secondsWas !== secondsIs) { + this.element.classList.toggle('blink-colon') + } + } + + update (force) { + if (typeof force === 'undefined') { + force = false + } + + const { remaining, minutes, seconds } = this.remainingTime() + + const setRemainingTime = (selector, time) => { + const timeContainer = this.element.querySelector(selector) + if (!timeContainer) return + time = Math.max(time, 0) + timeContainer.innerText = String(time).padStart(2, 0) + } + + if (this.is_running && remaining < 0.25) { + this.stop() + setRemainingTime('.minutes', 0) + setRemainingTime('.seconds', 0) + this.playSound() + return + } + + const should_update = force || + Math.round(remaining) < this.warn_when || + Math.round(remaining) % this.update_every === 0 + + if (should_update) { + this.element.classList.toggle('warning', remaining <= this.warn_when) + this.display = { minutes, seconds } + setRemainingTime('.minutes', minutes) + setRemainingTime('.seconds', seconds) + } + } + + stop () { + const { remaining } = this.remainingTime() + if (remaining > 1) { + this.remaining = remaining + } + this.element.classList.remove('running') + this.element.classList.remove('warning') + this.element.classList.remove('blink-colon') + this.element.classList.add('finished') + this.is_running = false + this.end = null + this.reportStateToShiny('stop') + this.timeout = clearTimeout(this.timeout) + } + + reset () { + this.stop() + this.remaining = null + this.update(true) + this.reportStateToShiny('reset') + this.element.classList.remove('finished') + this.element.classList.remove('warning') + } + + setValues (opts) { + if (typeof opts.warn_when !== 'undefined') { + this.warn_when = opts.warn_when + } + if (typeof opts.update_every !== 'undefined') { + this.update_every = opts.update_every + } + if (typeof opts.blink_colon !== 'undefined') { + this.blink_colon = opts.blink_colon + if (!opts.blink_colon) { + this.element.classList.remove('blink-colon') + } + } + if (typeof opts.play_sound !== 'undefined') { + this.play_sound = opts.play_sound + } + if (typeof opts.duration !== 'undefined') { + this.duration = opts.duration + if (this.is_running) { + this.reset() + this.start() + } + } + this.reportStateToShiny('update') + this.update(true) + } + + bumpTimer (val, round) { + round = typeof round === 'boolean' ? round : true + const { remaining } = this.remainingTime() + let newRemaining = remaining + val + if (newRemaining <= 0) { + this.setRemaining(0) + this.stop() + return + } + if (round && newRemaining > 10) { + newRemaining = Math.round(newRemaining / 5) * 5 + } + this.setRemaining(newRemaining) + this.reportStateToShiny(val > 0 ? 'bumpUp' : 'bumpDown') + this.update(true) + } + + bumpUp (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.bumpTimer( + val || this.bumpIncrementValue(), + typeof val === 'undefined' + ) + } + + bumpDown (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.bumpTimer( + val || -1 * this.bumpIncrementValue(), + typeof val === 'undefined' + ) + } + + setRemaining (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.end = Date.now() + val * 1000 + this.update(true) + } + + playSound () { + let url = this.play_sound + if (!url) return + if (typeof url === 'boolean') { + const src = this.src_location + ? this.src_location.replace('/countdown.js', '') + : 'libs/countdown' + url = src + '/smb_stage_clear.mp3' + } + const sound = new Audio(url) + sound.play() + } + + bumpIncrementValue (val) { + val = val || this.remainingTime().remaining + if (val <= 30) { + return 5 + } else if (val <= 300) { + return 15 + } else if (val <= 3000) { + return 30 + } else { + return 60 + } + } + + reportStateToShiny (action) { + if (!window.Shiny) return + + const inputId = this.element.id + const data = { + event: { + action, + time: new Date().toISOString() + }, + timer: { + is_running: this.is_running, + end: this.end ? new Date(this.end).toISOString() : null, + remaining: this.remainingTime() + } + } + + function shinySetInputValue () { + if (!window.Shiny.setInputValue) { + setTimeout(shinySetInputValue, 100) + return + } + window.Shiny.setInputValue(inputId, data) + } + + shinySetInputValue() + } +} + +(function () { + const CURRENT_SCRIPT = document.currentScript.getAttribute('src') + + document.addEventListener('DOMContentLoaded', function () { + const els = document.querySelectorAll('.countdown') + if (!els || !els.length) { + return + } + els.forEach(function (el) { + el.countdown = new CountdownTimer(el, { src_location: CURRENT_SCRIPT }) + }) + + if (window.Shiny) { + Shiny.addCustomMessageHandler('countdown:update', function (x) { + if (!x.id) { + console.error('No `id` provided, cannot update countdown') + return + } + const el = document.getElementById(x.id) + el.countdown.setValues(x) + }) + + Shiny.addCustomMessageHandler('countdown:start', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.start() + }) + + Shiny.addCustomMessageHandler('countdown:stop', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.stop() + }) + + Shiny.addCustomMessageHandler('countdown:reset', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.reset() + }) + + Shiny.addCustomMessageHandler('countdown:bumpUp', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.bumpUp() + }) + + Shiny.addCustomMessageHandler('countdown:bumpDown', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.bumpDown() + }) + } + }) +})() diff --git a/lib/smb_stage_clear.mp3 b/lib/smb_stage_clear.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..da2ddc2cd41e5c37b828798d9a67b3e55cd6657c GIT binary patch literal 38758 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 literal 0 HcmV?d00001 diff --git a/quarto/.gitignore b/quarto/.gitignore new file mode 100644 index 0000000..e877df6 --- /dev/null +++ b/quarto/.gitignore @@ -0,0 +1,3 @@ +*.html +*.pdf +*_files/ \ No newline at end of file diff --git a/quarto/example.qmd b/quarto/example.qmd new file mode 100644 index 0000000..feac522 --- /dev/null +++ b/quarto/example.qmd @@ -0,0 +1,9 @@ +--- +title: "Countdown Example" +--- + +## Heading + +{{< countdown >}} + + From 7bdb1becacd960f81c6eeb1b5639401a1950f6d2 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 19 Jan 2024 23:15:42 +0000 Subject: [PATCH 03/35] Pass new working directory to setup-r-dependencies --- .github/workflows/R-CMD-check.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 01a3765..5aaa1b1 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -43,6 +43,7 @@ jobs: with: extra-packages: any::rcmdcheck needs: check + working-directory: R - uses: r-lib/actions/check-r-package@v2 with: From 1a54ac781d49b93511006c330586c7eb200b5f9b Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 19 Jan 2024 23:32:40 +0000 Subject: [PATCH 04/35] Add a workflow dispatch --- .github/workflows/R-CMD-check.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 5aaa1b1..9726f56 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -5,6 +5,7 @@ on: branches: [main, master] pull_request: branches: [main, master] + workflow_dispatch: {} name: R-CMD-check From 4ac0544eaac824e5393ed1fc40e16eb1592acf3b Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sat, 20 Jan 2024 05:43:46 +0000 Subject: [PATCH 05/35] Roll a dev version for the quarto extension --- quarto/_extensions/countdown/_extension.yml | 8 + .../countdown/assets/countdown.css.in | 144 ++++++ .../_extensions/countdown/assets/countdown.js | 478 ++++++++++++++++++ .../countdown/assets/smb_stage_clear.mp3 | Bin 0 -> 38758 bytes quarto/_extensions/countdown/countdown.lua | 263 ++++++++++ 5 files changed, 893 insertions(+) create mode 100644 quarto/_extensions/countdown/_extension.yml create mode 100644 quarto/_extensions/countdown/assets/countdown.css.in create mode 100644 quarto/_extensions/countdown/assets/countdown.js create mode 100644 quarto/_extensions/countdown/assets/smb_stage_clear.mp3 create mode 100644 quarto/_extensions/countdown/countdown.lua diff --git a/quarto/_extensions/countdown/_extension.yml b/quarto/_extensions/countdown/_extension.yml new file mode 100644 index 0000000..cc3bad7 --- /dev/null +++ b/quarto/_extensions/countdown/_extension.yml @@ -0,0 +1,8 @@ +title: countdown +author: Garrick Aden-Buie and James Joseph Balamuta +version: 0.0.0-dev.1 +quarto-required: ">=1.4.0" +contributes: + shortcodes: + - countdown.lua + diff --git a/quarto/_extensions/countdown/assets/countdown.css.in b/quarto/_extensions/countdown/assets/countdown.css.in new file mode 100644 index 0000000..ace9e09 --- /dev/null +++ b/quarto/_extensions/countdown/assets/countdown.css.in @@ -0,0 +1,144 @@ +.countdown { + background: {{color_background}}; + position: absolute; + cursor: pointer; + font-size: {{font_size}}; + line-height: {{line_height}}; + border-color: {{color_border}}; + border-width: {{border_width}}; + border-style: solid; + border-radius: {{border_radius}}; /* Had to remove {{#box_shadow}} */ + box-shadow: {{box_shadow}}; + -webkit-box-shadow: {{box_shadow}}; /* Had to remove {{/box_shadow}} */ + margin: {{margin}}; + padding: {{padding}}; + text-align: center; + z-index: 10; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.countdown { + display: flex; + align-items: center; + justify-content: center; +} +.countdown .countdown-time { + background: none; + font-size: 100%; + padding: 0; +} +.countdown-digits { + color: {{color_text}}; +} +.countdown.running { + border-color: {{color_running_border}}; + background-color: {{color_running_background}}; +} +.countdown.running .countdown-digits { + color: {{color_running_text}}; +} +.countdown.finished { + border-color: {{color_finished_border}}; + background-color: {{color_finished_background}}; +} +.countdown.finished .countdown-digits { + color: {{color_finished_text}}; +} +.countdown.running.warning { + border-color: {{color_warning_border}}; + background-color: {{color_warning_background}}; +} +.countdown.running.warning .countdown-digits { + color: {{color_warning_text}}; +} + +.countdown.running.blink-colon .countdown-digits.colon { + opacity: 0.1; +} + +/* ------ Controls ------ */ +.countdown:not(.running) .countdown-controls { + display: none; +} + +.countdown-controls { + position: absolute; + top: -0.5rem; + right: -0.5rem; + left: -0.5rem; + display: flex; + justify-content: space-between; + margin: 0; + padding: 0; +} + +.countdown-controls > button { + font-size: 1.5rem; + width: 1rem; + height: 1rem; + display: inline-block; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: monospace; + padding: 10px; + margin: 0; + background: inherit; + border: 2px solid; + border-radius: 100%; + transition: 50ms transform ease-in-out, 150ms opacity ease-in; + --countdown-transition-distance: 10px; +} + +.countdown .countdown-controls > button:last-child { + transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); + opacity: 0; + color: {{color_running_text}}; + background-color: {{color_running_background}}; + border-color: {{color_running_border}}; +} + +.countdown .countdown-controls > button:first-child { + transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); + opacity: 0; + color: {{color_finished_text}}; + background-color: {{color_finished_background}}; + border-color: {{color_finished_border}}; +} + +.countdown.running:hover .countdown-controls > button, +.countdown.running:focus-within .countdown-controls > button{ + transform: translate(0, 0); + opacity: 1; +} + +.countdown.running:hover .countdown-controls > button:hover, +.countdown.running:focus-within .countdown-controls > button:hover{ + transform: translate(0, calc(var(--countdown-transition-distance) / -2)); + box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); + -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); +} + +.countdown.running:hover .countdown-controls > button:active, +.countdown.running:focus-within .countdown-controls > button:active{ + transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); +} + +/* ----- Fullscreen ----- */ +.countdown.countdown-fullscreen { + z-index: 0; +} + +.countdown-fullscreen.running .countdown-controls { + top: 1rem; + left: 0; + right: 0; + justify-content: center; +} + +.countdown-fullscreen.running .countdown-controls > button + button { + margin-left: 1rem; +} diff --git a/quarto/_extensions/countdown/assets/countdown.js b/quarto/_extensions/countdown/assets/countdown.js new file mode 100644 index 0000000..a058ad8 --- /dev/null +++ b/quarto/_extensions/countdown/assets/countdown.js @@ -0,0 +1,478 @@ +/* globals Shiny,Audio */ +class CountdownTimer { + constructor (el, opts) { + if (typeof el === 'string' || el instanceof String) { + el = document.querySelector(el) + } + + if (el.counter) { + return el.counter + } + + const minutes = parseInt(el.querySelector('.minutes').innerText || '0') + const seconds = parseInt(el.querySelector('.seconds').innerText || '0') + const duration = minutes * 60 + seconds + + function attrIsTrue (x) { + if (x === true) return true + return !!(x === 'true' || x === '' || x === '1') + } + + this.element = el + this.duration = duration + this.end = null + this.is_running = false + this.warn_when = parseInt(el.dataset.warnWhen) || -1 + this.update_every = parseInt(el.dataset.updateEvery) || 1 + this.play_sound = attrIsTrue(el.dataset.playSound) + this.blink_colon = attrIsTrue(el.dataset.blinkColon) + this.startImmediately = attrIsTrue(el.dataset.startImmediately) + this.timeout = null + this.display = { minutes, seconds } + + if (opts.src_location) { + this.src_location = opts.src_location + } + + this.addEventListeners() + } + + addEventListeners () { + const self = this + + if (this.startImmediately) { + if (window.remark && window.slideshow) { + // Remark (xaringan) support + const isOnVisibleSlide = () => { + return document.querySelector('.remark-visible').contains(self.element) + } + if (isOnVisibleSlide()) { + self.start() + } else { + let started_once = 0 + window.slideshow.on('afterShowSlide', function () { + if (started_once > 0) return + if (isOnVisibleSlide()) { + self.start() + started_once = 1 + } + }) + } + } else if (window.Reveal) { + // Revealjs (quarto) support + const isOnVisibleSlide = () => { + const currentSlide = document.querySelector('.reveal .slide.present') + return currentSlide ? currentSlide.contains(self.element) : false + } + if (isOnVisibleSlide()) { + self.start() + } else { + const revealStartTimer = () => { + if (isOnVisibleSlide()) { + self.start() + window.Reveal.off('slidechanged', revealStartTimer) + } + } + window.Reveal.on('slidechanged', revealStartTimer) + } + } else if (window.IntersectionObserver) { + // All other situtations use IntersectionObserver + const onVisible = (element, callback) => { + new window.IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.intersectionRatio > 0) { + callback(element) + observer.disconnect() + } + }) + }).observe(element) + } + onVisible(this.element, el => el.countdown.start()) + } else { + // or just start the timer as soon as it's initialized + this.start() + } + } + + function haltEvent (ev) { + ev.preventDefault() + ev.stopPropagation() + } + function isSpaceOrEnter (ev) { + return ev.code === 'Space' || ev.code === 'Enter' + } + function isArrowUpOrDown (ev) { + return ev.code === 'ArrowUp' || ev.code === 'ArrowDown' + } + + ;['click', 'touchend'].forEach(function (eventType) { + self.element.addEventListener(eventType, function (ev) { + haltEvent(ev) + self.is_running ? self.stop() : self.start() + }) + }) + this.element.addEventListener('keydown', function (ev) { + if (ev.code === "Escape") { + self.reset() + haltEvent(ev) + } + if (!isSpaceOrEnter(ev) && !isArrowUpOrDown(ev)) return + haltEvent(ev) + if (isSpaceOrEnter(ev)) { + self.is_running ? self.stop() : self.start() + return + } + + if (!self.is_running) return + + if (ev.code === 'ArrowUp') { + self.bumpUp() + } else if (ev.code === 'ArrowDown') { + self.bumpDown() + } + }) + this.element.addEventListener('dblclick', function (ev) { + haltEvent(ev) + if (self.is_running) self.reset() + }) + this.element.addEventListener('touchmove', haltEvent) + + const btnBumpDown = this.element.querySelector('.countdown-bump-down') + ;['click', 'touchend'].forEach(function (eventType) { + btnBumpDown.addEventListener(eventType, function (ev) { + haltEvent(ev) + if (self.is_running) self.bumpDown() + }) + }) + btnBumpDown.addEventListener('keydown', function (ev) { + if (!isSpaceOrEnter(ev) || !self.is_running) return + haltEvent(ev) + self.bumpDown() + }) + + const btnBumpUp = this.element.querySelector('.countdown-bump-up') + ;['click', 'touchend'].forEach(function (eventType) { + btnBumpUp.addEventListener(eventType, function (ev) { + haltEvent(ev) + if (self.is_running) self.bumpUp() + }) + }) + btnBumpUp.addEventListener('keydown', function (ev) { + if (!isSpaceOrEnter(ev) || !self.is_running) return + haltEvent(ev) + self.bumpUp() + }) + this.element.querySelector('.countdown-controls').addEventListener('dblclick', function (ev) { + haltEvent(ev) + }) + } + + remainingTime () { + const remaining = this.is_running + ? (this.end - Date.now()) / 1000 + : this.remaining || this.duration + + let minutes = Math.floor(remaining / 60) + let seconds = Math.ceil(remaining - minutes * 60) + + if (seconds > 59) { + minutes = minutes + 1 + seconds = seconds - 60 + } + + return { remaining, minutes, seconds } + } + + start () { + if (this.is_running) return + + this.is_running = true + + if (this.remaining) { + // Having a static remaining time indicates timer was paused + this.end = Date.now() + this.remaining * 1000 + this.remaining = null + } else { + this.end = Date.now() + this.duration * 1000 + } + + this.reportStateToShiny('start') + + this.element.classList.remove('finished') + this.element.classList.add('running') + this.update(true) + this.tick() + } + + tick (run_again) { + if (typeof run_again === 'undefined') { + run_again = true + } + + if (!this.is_running) return + + const { seconds: secondsWas } = this.display + this.update() + + if (run_again) { + const delay = (this.end - Date.now() > 10000) ? 1000 : 250 + this.blinkColon(secondsWas) + this.timeout = setTimeout(this.tick.bind(this), delay) + } + } + + blinkColon (secondsWas) { + // don't blink unless option is set + if (!this.blink_colon) return + // warn_when always updates the seconds + if (this.warn_when > 0 && Date.now() + this.warn_when > this.end) { + this.element.classList.remove('blink-colon') + return + } + const { seconds: secondsIs } = this.display + if (secondsIs > 10 || secondsWas !== secondsIs) { + this.element.classList.toggle('blink-colon') + } + } + + update (force) { + if (typeof force === 'undefined') { + force = false + } + + const { remaining, minutes, seconds } = this.remainingTime() + + const setRemainingTime = (selector, time) => { + const timeContainer = this.element.querySelector(selector) + if (!timeContainer) return + time = Math.max(time, 0) + timeContainer.innerText = String(time).padStart(2, 0) + } + + if (this.is_running && remaining < 0.25) { + this.stop() + setRemainingTime('.minutes', 0) + setRemainingTime('.seconds', 0) + this.playSound() + return + } + + const should_update = force || + Math.round(remaining) < this.warn_when || + Math.round(remaining) % this.update_every === 0 + + if (should_update) { + this.element.classList.toggle('warning', remaining <= this.warn_when) + this.display = { minutes, seconds } + setRemainingTime('.minutes', minutes) + setRemainingTime('.seconds', seconds) + } + } + + stop () { + const { remaining } = this.remainingTime() + if (remaining > 1) { + this.remaining = remaining + } + this.element.classList.remove('running') + this.element.classList.remove('warning') + this.element.classList.remove('blink-colon') + this.element.classList.add('finished') + this.is_running = false + this.end = null + this.reportStateToShiny('stop') + this.timeout = clearTimeout(this.timeout) + } + + reset () { + this.stop() + this.remaining = null + this.update(true) + this.reportStateToShiny('reset') + this.element.classList.remove('finished') + this.element.classList.remove('warning') + } + + setValues (opts) { + if (typeof opts.warn_when !== 'undefined') { + this.warn_when = opts.warn_when + } + if (typeof opts.update_every !== 'undefined') { + this.update_every = opts.update_every + } + if (typeof opts.blink_colon !== 'undefined') { + this.blink_colon = opts.blink_colon + if (!opts.blink_colon) { + this.element.classList.remove('blink-colon') + } + } + if (typeof opts.play_sound !== 'undefined') { + this.play_sound = opts.play_sound + } + if (typeof opts.duration !== 'undefined') { + this.duration = opts.duration + if (this.is_running) { + this.reset() + this.start() + } + } + this.reportStateToShiny('update') + this.update(true) + } + + bumpTimer (val, round) { + round = typeof round === 'boolean' ? round : true + const { remaining } = this.remainingTime() + let newRemaining = remaining + val + if (newRemaining <= 0) { + this.setRemaining(0) + this.stop() + return + } + if (round && newRemaining > 10) { + newRemaining = Math.round(newRemaining / 5) * 5 + } + this.setRemaining(newRemaining) + this.reportStateToShiny(val > 0 ? 'bumpUp' : 'bumpDown') + this.update(true) + } + + bumpUp (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.bumpTimer( + val || this.bumpIncrementValue(), + typeof val === 'undefined' + ) + } + + bumpDown (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.bumpTimer( + val || -1 * this.bumpIncrementValue(), + typeof val === 'undefined' + ) + } + + setRemaining (val) { + if (!this.is_running) { + console.error('timer is not running') + return + } + this.end = Date.now() + val * 1000 + this.update(true) + } + + playSound () { + let url = this.play_sound + if (!url) return + if (typeof url === 'boolean') { + const src = this.src_location + ? this.src_location.replace('/countdown.js', '') + : 'libs/countdown' + url = src + '/smb_stage_clear.mp3' + } + const sound = new Audio(url) + sound.play() + } + + bumpIncrementValue (val) { + val = val || this.remainingTime().remaining + if (val <= 30) { + return 5 + } else if (val <= 300) { + return 15 + } else if (val <= 3000) { + return 30 + } else { + return 60 + } + } + + reportStateToShiny (action) { + if (!window.Shiny) return + + const inputId = this.element.id + const data = { + event: { + action, + time: new Date().toISOString() + }, + timer: { + is_running: this.is_running, + end: this.end ? new Date(this.end).toISOString() : null, + remaining: this.remainingTime() + } + } + + function shinySetInputValue () { + if (!window.Shiny.setInputValue) { + setTimeout(shinySetInputValue, 100) + return + } + window.Shiny.setInputValue(inputId, data) + } + + shinySetInputValue() + } +} + +(function () { + const CURRENT_SCRIPT = document.currentScript.getAttribute('src') + + document.addEventListener('DOMContentLoaded', function () { + const els = document.querySelectorAll('.countdown') + if (!els || !els.length) { + return + } + els.forEach(function (el) { + el.countdown = new CountdownTimer(el, { src_location: CURRENT_SCRIPT }) + }) + + if (window.Shiny) { + Shiny.addCustomMessageHandler('countdown:update', function (x) { + if (!x.id) { + console.error('No `id` provided, cannot update countdown') + return + } + const el = document.getElementById(x.id) + el.countdown.setValues(x) + }) + + Shiny.addCustomMessageHandler('countdown:start', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.start() + }) + + Shiny.addCustomMessageHandler('countdown:stop', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.stop() + }) + + Shiny.addCustomMessageHandler('countdown:reset', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.reset() + }) + + Shiny.addCustomMessageHandler('countdown:bumpUp', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.bumpUp() + }) + + Shiny.addCustomMessageHandler('countdown:bumpDown', function (id) { + const el = document.getElementById(id) + if (!el) return + el.countdown.bumpDown() + }) + } + }) +})() diff --git a/quarto/_extensions/countdown/assets/smb_stage_clear.mp3 b/quarto/_extensions/countdown/assets/smb_stage_clear.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..da2ddc2cd41e5c37b828798d9a67b3e55cd6657c GIT binary patch literal 38758 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 literal 0 HcmV?d00001 diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua new file mode 100644 index 0000000..285cbcb --- /dev/null +++ b/quarto/_extensions/countdown/countdown.lua @@ -0,0 +1,263 @@ +-- Specify embedded version +local countdownEmbeddedVersion = "0.0.1" + +-- Only embed resources once if there are multiple timers present +local needsToExportDependencies = true + +-- Check if variable missing or an empty string +local function isVariableEmpty(s) + return s == nil or s == '' +end + +-- Check if variable is present +local function isVariablePopulated(s) + return not isVariableEmpty(s) +end + +-- Utility function to perform whisker-like substitution +local function substituteInFile(contents, substitutions) + + -- Substitute values in the contents of the file + contents = contents:gsub("{{%s*(.-)%s*}}", substitutions) + + -- Return the contents of the file with substitutions + return contents +end + +-- Define the infix operator %:?% to handle styling if missing +function safeStyle(x, y) + if isVariablePopulated(x) then + -- quarto.log.output("Hi!") + -- quarto.log.output(x) + return y .. ":" .. pandoc.utils.stringify(x) .. ";" + end + return "" +end + +-- Obtain a template file +local function readTemplateFile(template) + -- Create a hard coded path + local path = quarto.utils.resolve_path(template) + + -- Open the template file + local file = io.open(path, "r") + + -- Check if null pointer before grabbing content + if not file then + quarto.log.error( + "\nWe were unable to read the template file `" .. template .. "` from the extension directory.\n\n" .. + "Double check that the extension is fully available by comparing the \n" .. + "`_extensions/gadenbuie/countdown` directory with the main repository:\n" .. + "https://github.com/gadenbuie/countdown/tree/main/quarto/_extensions/countdown\n\n" .. + "You may need to modify `.gitignore` to allow the extension files using:\n" .. + "!_extensions/*/*/*/*\n") + + return nil + end + + -- *a or *all reads the whole file + local content = file:read "*a" + + -- Close the file + file:close() + + -- Return contents + return content +end + +local function cssVariablesToTable(meta) + + -- Local table to store the modified variables + local cssVariables = {} + + -- Check if 'countdown' exists in meta, if not create an empty cell + local countdownMeta = meta['countdown'] or {} + + -- Font size for the countdown digits + cssVariables.font_size = countdownMeta['font_size'] or '3rem' + + -- Margin for the countdown element + cssVariables.margin = countdownMeta['margin'] or '0.6em' + + -- Padding for the countdown element + cssVariables.padding = countdownMeta['padding'] or '10px 15px' + + -- Box shadow for the countdown element (if provided) + cssVariables.box_shadow = countdownMeta['box_shadow'] or "0px 4px 10px 0px rgba(50, 50, 50, 0.4)" + + -- Border width for the countdown element + cssVariables.border_width = countdownMeta['border_width'] or '3px' + + -- Border radius for the countdown element + cssVariables.border_radius = countdownMeta['border_radius'] or '15px' + + -- Line height for the countdown digits + cssVariables.line_height = countdownMeta['line_height'] or '1' + + -- Border color for the countdown element + cssVariables.color_border = countdownMeta['color_border'] or '#ddd' + + -- Background color for the countdown element + cssVariables.color_background = countdownMeta['color_background'] or 'inherit' + + -- Text color for the countdown digits + cssVariables.color_text = countdownMeta['color_text'] or 'inherit' + + -- Border color for the running countdown element + cssVariables.color_running_border = countdownMeta['color_running_border'] or '#43AC6A' + + -- Background color for the running countdown element + cssVariables.color_running_background = countdownMeta['color_running_background'] or '#43AC6A' + + -- Text color for the running countdown digits (if provided) + cssVariables.color_running_text = countdownMeta['color_running_text'] or nil + + -- Border color for the finished countdown element + cssVariables.color_finished_border = countdownMeta['color_finished_border'] or '#F04124' + + -- Background color for the finished countdown element + cssVariables.color_finished_background = countdownMeta['color_finished_background'] or '#F04124' + + -- Text color for the finished countdown digits (if provided) + cssVariables.color_finished_text = countdownMeta['color_finished_text'] or nil + + -- Border color for the countdown in a warning state + cssVariables.color_warning_border = countdownMeta['color_warning_border'] or '#E6C229' + + -- Background color for the countdown in a warning state + cssVariables.color_warning_background = countdownMeta['color_warning_background'] or '#E6C229' + + -- Text color for the countdown digits in a warning state (if provided) + cssVariables.color_warning_text = countdownMeta['color_warning_text'] or nil + + return cssVariables +end + + +-- Pass document-level data into the header to initialize the document. +local function renderCountdownCSSAsset(meta) + + -- Setup different WebR specific initialization variables + local substitutions = cssVariablesToTable(meta) + + -- Make sure we perform a copy + local cssInitializationTemplate = readTemplateFile("assets/countdown.css.in") + + -- Make the necessary substitutions + local configuredCSS = substituteInFile(cssInitializationTemplate, substitutions) + + -- Embed into the document to avoid rendering to disk and, then, embedding a URL. + quarto.doc.include_text('in-header', "") + -- Note: This feature or using `add_supporting` requires Quarto v1.4 or above + + return true +end + + +-- Handle embedding/creation of assets once +local function ensureHTMLDependency(meta) + quarto.doc.addHtmlDependency({ + name = "countdownjs", + version = countdownEmbeddedVersion, + scripts = { "assets/countdown.js"} + }) + + renderCountdownCSSAsset(meta) + + -- Disable re-exporting if no-longer needed + needsToExportDependencies = false +end + + +local function countdown(args, kwargs, meta) + + -- Retrieve named time arguments and fallback on default values if missing + local minutes = tonumber(pandoc.utils.stringify(kwargs["data-minutes"])) or 1 + local seconds = tonumber(pandoc.utils.stringify(kwargs["data-seconds"])) or 0 + + -- Calculate total time in seconds + local time = minutes * 60 + seconds + + -- Calculate minutes by dividing total time by 60 and rounding down + minutes = math.floor(time / 60) + + -- Calculate remaining seconds after extracting minutes + seconds = time - minutes * 60 + + -- Check if minutes is greater than or equal to 100 (the maximum possible for display) + if minutes >= 100 then + quarto.log.error("The number of minutes must be less than 100.") + assert("true" == "false") + end + + if needsToExportDependencies then + ensureHTMLDependency(meta) + end + + -- Determine if a warning should be given + local warn_when = tonumber(pandoc.utils.stringify(kwargs["data-warn-when"])) or 0 + + -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp (possible switch over to running counter) + local id = pandoc.utils.stringify(kwargs["id"]) or ("timer_" .. pandoc.utils.sha1(tostring(os.time()))) + + -- Construct the 'class' attribute by appending "countdown" to the existing class (if any) + local class = "countdown " .. (pandoc.utils.stringify(kwargs["class"]) or "") + + -- Retrieve and convert "data-update-every" attribute to a number, default to 1 if not present or invalid + local update_every = tonumber(pandoc.utils.stringify(kwargs["data-update-every"])) or 1 + + -- Retrieve "data-play-sound" attribute as a string, default to "false" if not present + local play_sound = pandoc.utils.stringify(kwargs["data-play-sound"]) or "false" + + -- Retrieve "data-blink-colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false + local blink_colon = pandoc.utils.stringify(kwargs["data-blink-colon"]) == "true" + + -- Retrieve "data-start-immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false + local start_immediately = pandoc.utils.stringify(kwargs["data-start-immediately"]) == "true" + + -- Construct the style attribute based on element attributes + local style = (pandoc.utils.stringify(kwargs["style"]) or "") + + -- Concatenate style properties with their values using %:?% from kwargs + style = style .. + safeStyle(kwargs["top"], "top") .. + safeStyle(kwargs["right"], "right") .. + safeStyle(kwargs["bottom"], "bottom") .. + safeStyle(kwargs["left"], "left") .. + safeStyle(kwargs["margin"], "margin") .. + safeStyle(kwargs["padding"], "padding") .. + safeStyle(kwargs["font_size"], "font_size") .. + safeStyle(kwargs["line_height"], "line_height") .. + ";" + + + local rawHtml = [[
+
+ + +
+]] .. +[[]] .. +string.format("%02d", minutes) .. +[[:]] .. +[[]] .. +string.format("%02d", seconds) .. +[[ +
+ ]] + -- Return a new Div element with modified attributes + return pandoc.RawBlock("html", rawHtml) +end + + + +return { + ['countdown'] = countdown +} From ee5752eedc89b947a49fe8af86578ac4a2e0bbf2 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sat, 20 Jan 2024 08:42:05 +0000 Subject: [PATCH 06/35] Try a different empty value parsing approach for `kwargs` --- quarto/_extensions/countdown/countdown.lua | 34 +++++++++++----------- quarto/example.qmd | 14 ++++++++- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 285cbcb..961ba57 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -168,16 +168,19 @@ local function ensureHTMLDependency(meta) needsToExportDependencies = false end +local function getOption(values, key, default) + return pandoc.utils.stringify(values[key]) or default +end local function countdown(args, kwargs, meta) -- Retrieve named time arguments and fallback on default values if missing - local minutes = tonumber(pandoc.utils.stringify(kwargs["data-minutes"])) or 1 - local seconds = tonumber(pandoc.utils.stringify(kwargs["data-seconds"])) or 0 + local minutes = tonumber(pandoc.utils.stringify(kwargs["minutes"])) or 1 + local seconds = tonumber(pandoc.utils.stringify(kwargs["seconds"])) or 0 -- Calculate total time in seconds local time = minutes * 60 + seconds - + -- Calculate minutes by dividing total time by 60 and rounding down minutes = math.floor(time / 60) @@ -197,6 +200,8 @@ local function countdown(args, kwargs, meta) -- Determine if a warning should be given local warn_when = tonumber(pandoc.utils.stringify(kwargs["data-warn-when"])) or 0 + quarto.log.output(kwargs["data-warn-when"]) + -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp (possible switch over to running counter) local id = pandoc.utils.stringify(kwargs["id"]) or ("timer_" .. pandoc.utils.sha1(tostring(os.time()))) @@ -210,26 +215,21 @@ local function countdown(args, kwargs, meta) local play_sound = pandoc.utils.stringify(kwargs["data-play-sound"]) or "false" -- Retrieve "data-blink-colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false - local blink_colon = pandoc.utils.stringify(kwargs["data-blink-colon"]) == "true" + local blink_colon = pandoc.utils.stringify(kwargs["data-blink-colon"]) or "false" -- Retrieve "data-start-immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false - local start_immediately = pandoc.utils.stringify(kwargs["data-start-immediately"]) == "true" + local start_immediately = pandoc.utils.stringify(kwargs["data-start-immediately"]) or "true" -- Construct the style attribute based on element attributes - local style = (pandoc.utils.stringify(kwargs["style"]) or "") + local style = pandoc.utils.stringify(kwargs["style"]) or "" -- Concatenate style properties with their values using %:?% from kwargs - style = style .. - safeStyle(kwargs["top"], "top") .. - safeStyle(kwargs["right"], "right") .. - safeStyle(kwargs["bottom"], "bottom") .. - safeStyle(kwargs["left"], "left") .. - safeStyle(kwargs["margin"], "margin") .. - safeStyle(kwargs["padding"], "padding") .. - safeStyle(kwargs["font_size"], "font_size") .. - safeStyle(kwargs["line_height"], "line_height") .. - ";" - + local styleKeys = {"top", "right", "bottom", "left", "margin", "padding", "font_size", "line_height"} + local style = "" + + for _, key in ipairs(styleKeys) do + style = style .. safeStyle(kwargs[key], key) + end local rawHtml = [[
}} +# More time + +{{< countdown minutes=2 seconds=20 >}} + From f2570edcab5001fbe0f430a79d3f6ab8ce7317b5 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 09:10:54 +0000 Subject: [PATCH 07/35] Remove capital R directory :( --- R/.Rbuildignore | 11 - R/DESCRIPTION | 26 - R/LICENSE | 2 - R/LICENSE.md | 21 - R/NAMESPACE | 13 - R/NEWS.md | 83 --- R/R/colors.R | 5 - R/R/countdown-package.R | 12 - R/R/countdown.R | 332 ------------ R/R/shiny.R | 183 ------- R/cran-comments.md | 17 - R/inst/countdown-fullscreen/app.R | 249 --------- R/inst/countdown-fullscreen/www/.empty | 0 .../www/bootstrap.min.css | 11 - R/inst/countdown/countdown.css | 144 ------ R/inst/countdown/countdown.js | 478 ------------------ R/inst/countdown/smb_stage_clear.mp3 | Bin 38758 -> 0 bytes R/inst/examples/shiny-app/server.R | 41 -- R/inst/examples/shiny-app/ui.R | 31 -- R/man/countdown-package.Rd | 24 - R/man/countdown.Rd | 234 --------- R/man/countdown_action.Rd | 39 -- R/man/countdown_app.Rd | 54 -- R/man/countdown_shiny_example.Rd | 36 -- R/man/countdown_update.Rd | 71 --- R/man/figures/countdown.gif | Bin 308254 -> 0 bytes R/tests/testthat.R | 4 - .../_snaps/countdown_default.css/countdown.md | 147 ------ .../countdown.md | 147 ------ .../countdown.md | 147 ------ .../countdown_fullscreen.css/countdown.md | 147 ------ .../countdown_margin-padding.css/countdown.md | 147 ------ .../countdown_no-shadow.css/countdown.md | 145 ------ .../countdown_running-colors.css/countdown.md | 147 ------ .../countdown_top-left.css/countdown.md | 147 ------ R/tests/testthat/test-countdown.R | 142 ------ R/tests/testthat/test-shiny.R | 43 -- 37 files changed, 3480 deletions(-) delete mode 100644 R/.Rbuildignore delete mode 100644 R/DESCRIPTION delete mode 100644 R/LICENSE delete mode 100644 R/LICENSE.md delete mode 100644 R/NAMESPACE delete mode 100644 R/NEWS.md delete mode 100644 R/R/colors.R delete mode 100644 R/R/countdown-package.R delete mode 100644 R/R/countdown.R delete mode 100644 R/R/shiny.R delete mode 100644 R/cran-comments.md delete mode 100644 R/inst/countdown-fullscreen/app.R delete mode 100644 R/inst/countdown-fullscreen/www/.empty delete mode 100644 R/inst/countdown-fullscreen/www/bootstrap.min.css delete mode 100644 R/inst/countdown/countdown.css delete mode 100644 R/inst/countdown/countdown.js delete mode 100644 R/inst/countdown/smb_stage_clear.mp3 delete mode 100644 R/inst/examples/shiny-app/server.R delete mode 100644 R/inst/examples/shiny-app/ui.R delete mode 100644 R/man/countdown-package.Rd delete mode 100644 R/man/countdown.Rd delete mode 100644 R/man/countdown_action.Rd delete mode 100644 R/man/countdown_app.Rd delete mode 100644 R/man/countdown_shiny_example.Rd delete mode 100644 R/man/countdown_update.Rd delete mode 100644 R/man/figures/countdown.gif delete mode 100644 R/tests/testthat.R delete mode 100644 R/tests/testthat/_snaps/countdown_default.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md delete mode 100644 R/tests/testthat/_snaps/countdown_top-left.css/countdown.md delete mode 100644 R/tests/testthat/test-countdown.R delete mode 100644 R/tests/testthat/test-shiny.R diff --git a/R/.Rbuildignore b/R/.Rbuildignore deleted file mode 100644 index 3860794..0000000 --- a/R/.Rbuildignore +++ /dev/null @@ -1,11 +0,0 @@ -^inst/countdown-fullscreen/www/\.empty$ -^inst/countdown-fullscreen/www/tmp/\.empty$ -^LICENSE\.md$ -^docs$ -^countdown\.Rproj$ -^\.Rproj\.user$ -^\.Rhistory$ -^_dev$ -^\.github$ -^cran-comments\.md$ -^CRAN-SUBMISSION$ diff --git a/R/DESCRIPTION b/R/DESCRIPTION deleted file mode 100644 index 0fe47d5..0000000 --- a/R/DESCRIPTION +++ /dev/null @@ -1,26 +0,0 @@ -Package: countdown -Title: A Countdown Timer for HTML Presentations, Documents, and Web Apps -Version: 0.4.0 -Authors@R: - person("Garrick", "Aden-Buie", , "garrick@adenbuie.com", role = c("aut", "cre", "cph"), - comment = c(ORCID = "0000-0002-7111-0077")) -Description: A simple countdown timer for slides and HTML documents - written in 'R Markdown' or 'Quarto'. Integrates fully into 'Shiny' - apps. Countdown to something amazing. -License: MIT + file LICENSE -URL: https://pkg.garrickadenbuie.com/countdown/, - https://github.com/gadenbuie/countdown -BugReports: https://github.com/gadenbuie/countdown/issues -Imports: - htmltools, - prismatic (>= 1.1.0), - utils, - whisker -Suggests: - rmarkdown, - shiny, - testthat (>= 3.0.0) -Config/testthat/edition: 3 -Encoding: UTF-8 -Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.1 diff --git a/R/LICENSE b/R/LICENSE deleted file mode 100644 index 21bd5d5..0000000 --- a/R/LICENSE +++ /dev/null @@ -1,2 +0,0 @@ -YEAR: 2022 -COPYRIGHT HOLDER: Garrick Aden-Buie diff --git a/R/LICENSE.md b/R/LICENSE.md deleted file mode 100644 index bf7a7d3..0000000 --- a/R/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# MIT License - -Copyright (c) 2019 Garrick Aden-Buie - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/R/NAMESPACE b/R/NAMESPACE deleted file mode 100644 index 619624e..0000000 --- a/R/NAMESPACE +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by roxygen2: do not edit by hand - -export(countdown) -export(countdown_action) -export(countdown_app) -export(countdown_fullscreen) -export(countdown_shiny_example) -export(countdown_update) -importFrom(htmltools,HTML) -importFrom(htmltools,code) -importFrom(htmltools,div) -importFrom(htmltools,htmlDependency) -importFrom(htmltools,span) diff --git a/R/NEWS.md b/R/NEWS.md deleted file mode 100644 index 9b7a3d1..0000000 --- a/R/NEWS.md +++ /dev/null @@ -1,83 +0,0 @@ -# countdown 0.4.0 - -* {countdown} now uses {prismatic} for color calculations. - -* The JavaScript implementation of countdown has been completely rewritten. It - now supports a wide range of new interactions: - - * Start, pause, and reset the timer (click, click again, double click). - - * `+` or `-` buttons to bump timer up or down. - - * Keyboard shortcuts: Space/Enter to start/stop, Escape to reset, and up/down - arrows to bump timer. - - * The timers now work on mobile devices (in particular in xaringan slides). - -* countdown timers can now be used in or controlled by Shiny apps: - - * Use `countdown_update()` to update key initial timer settings. - - * Use `countdown_action()` to trigger common action: start, stop, reset, - bump up or bump down. - - * State changes are reported back to the Shiny app, e.g. Shiny apps can - use `input$timer` to receive event data from the timer with - `id = "timer"`. - - * `countdown_shiny_example()` runs a Shiny app that demonstrates key - Shiny app features. - -* Timers can now start immediately by setting the argument - `start_immediately = TRUE`. When `TRUE`, timers will start as soon as they - are visible. This feature works in xaringan slides, Quarto slides and general - HTML web pages (thanks @Dr-Joe-Roberts, @davidkane9, #12). - -* The `countdown_app()` now supports bookmarking, making it possible to share - pre-configured timer URLs. This feature improves the usability of the - timer available at . - - -# countdown 0.3.5 - -* Any sound file hosted online can no be played in place of the default sound - by setting `play_sound` to the absolute or relative URL of the sound file. - -* The default CSS styles were updated for better automatic vertical centering - of the countdown digits. - -# countdown 0.3.3 - -* Added `.countdown-time` class to `` element of timer. Renamed `.digits` - class to `.countdown-digits`. This ensures that it's possible to write CSS - rules with high specificity values (#10). - -* Added `style` argument to `countdown()` for inlining CSS rules to the parent - `div` of the timer. - -# countdown 0.3.0 - -* Added a warning state to the coundown timer that is enabled by setting - `warn_when = N`. The `warning` class is applied to the timer for the last `N` - seconds, and the colors of this state are configured with the arguments with - `color_warning_` prefix (thanks @hadley, #5). - -* Added a new convenience function for full-screen (and stand-alone) countdown - timers, `countdown_fullscreen()`. This function's defaults work best when - called from RStudio, in xaringan slides it will still be necessary to fiddle - with `font_size`, `margin`, and `padding` (thanks @hadley, #6). - -* Add `countdown_app()` to launch an interactive Shiny app with a full-screen - countdown timer. - -# countdown 0.2.0 - -* Added `update_every` argument to `countdown()` to only update the timer every - N seconds. Normal updating (second-by-second) is always used for the last - two periods of the countdown time. Thanks @mine-cetinkaya-rundel for the - suggestion. - -* Added `blink_colon` argument to `countdown()` to animate the `:` in the - countdown timer colon to blink every second. Enabled by default when the - `update_every` interval is greater than 1 to provide feedback that the timer - is running. diff --git a/R/R/colors.R b/R/R/colors.R deleted file mode 100644 index cf176f5..0000000 --- a/R/R/colors.R +++ /dev/null @@ -1,5 +0,0 @@ -choose_dark_or_light <- function(x, dark = NULL, light = NULL, strength = 0.75) { - dark <- dark %||% prismatic::clr_darken(x, shift = strength) - light <- light %||% prismatic::clr_lighten(x, shift = strength) - prismatic::best_contrast(x, c(dark, light)) -} diff --git a/R/R/countdown-package.R b/R/R/countdown-package.R deleted file mode 100644 index b7ebe5a..0000000 --- a/R/R/countdown-package.R +++ /dev/null @@ -1,12 +0,0 @@ -#' @keywords internal -#' @aliases countdown-package -"_PACKAGE" - -## usethis namespace: start -#' @importFrom htmltools code -#' @importFrom htmltools div -#' @importFrom htmltools HTML -#' @importFrom htmltools htmlDependency -#' @importFrom htmltools span -## usethis namespace: end -NULL diff --git a/R/R/countdown.R b/R/R/countdown.R deleted file mode 100644 index a73371c..0000000 --- a/R/R/countdown.R +++ /dev/null @@ -1,332 +0,0 @@ -`%||%` <- function(x, y) if (is.null(x)) y else x - -#' Countdown Timer -#' -#' Creates a countdown timer using HTML, CSS, and vanilla JavaScript, suitable -#' for use in web-based presentations, such as those created by -#' [xaringan::infinite_moon_reader()]. -#' -#' @examples -#' if (interactive()) { -#' countdown(minutes = 0, seconds = 42) -#' -#' countdown( -#' minutes = 1, -#' seconds = 30, -#' left = 0, -#' right = 0, -#' padding = "15px", -#' margin = "5%", -#' font_size = "6em" -#' ) -#' -#' # For a stand-alone full-screen countdown timer, use countdown_fullscreen() -#' # with default parameters. -#' countdown_fullscreen(1, 30) -#' -#' # For xaringan slides, use percentages for `margin` to set the distance from -#' # the edge of the slide and use `font_size` to adjust the size of the digits. -#' # If you need to nudge the text up or down vertically, increase or decrease -#' # `line_height`. -#' countdown_fullscreen( -#' minutes = 0, -#' seconds = 90, -#' margin = "5%", -#' font_size = "8em", -#' ) -#' -#' # To position the timer "inline" in R Markdown documents, -#' # use the `style` argument on each timer: -#' countdown(1, 30, style = "position: relative; width: min-content;") -#' } -#' -#' @return A vanilla JavaScript countdown timer as HTML, with dependencies. -#' @seealso [countdown_app()] -#' -#' @param minutes The number of minutes for which the timer should run. This -#' value is added to `seconds`. -#' @param seconds The number of seconds for which the timer should run. This -#' value is added to `minutes`. -#' @param ... Ignored by [countdown()]. In [countdown_fullscreen()], additional -#' arguments are passed on to [countdown()]. -#' @param id A optional unique ID for the `
` containing the timer. A unique -#' ID will be created if none is specified. All of the timers in a single -#' document need to have unique IDs to function properly. Unless you have a -#' specific reason, it would probably be best to leave this unset. -#' @param class Optional additional classes to be added to the `
` -#' containing the timer. The `"countdown"` class is added automatically. If -#' you want to modify the style of the timer, you can modify the `"countdown"` -#' class or specify additional styles here that extend the base CSS. -#' @param style CSS rules to be applied inline to the timer. Use `style` to -#' override any global CSS rules for the timer. For example, to display the -#' timer relative to the position where it is called (rather than positioned -#' absolutely, as in the default), set -#' `style = "position: relative; width: min-content;"`. -#' @param play_sound Play a sound at the end of the timer? If `TRUE`, plays the -#' "stage complete" sound courtesy of \link[beepr:beepr-package]{beepr}. -#' Alternatively, `play_sound` can be a relative or absolute URL to a sound -#' file, such as an `mp3`, `wav`, `ogg`, or other audio file type. -#' @param font_size The font size of the time displayed in the timer. -#' @param margin The margin applied to the timer container, default is -#' `"0.5em"`. -#' @param padding The padding within the timer container, default is `"10px 15px"`. -#' @param right Position of the timer within its container. By default the timer -#' is right-aligned using `right = "0"`. If `left` is set, `right` defaults to -#' `NULL`. -#' @param bottom Position of the timer within its container. By default the -#' timer is bottom-aligned using `bottom = "0"`. If `top` is set, `bottom` -#' defaults to `NULL`. -#' @param left Position of the timer within its container. By default `left` is -#' unset (`NULL`). -#' @param top Position of the timer within its container. By default `top` is -#' unset (`NULL`). -#' @param warn_when Change the countdown to "warning" state when `warn_when` -#' seconds remain. This is achieved by adding the `warning` class to the timer -#' when `warn_when` seconds or less remain. Only applied when greater than -#' `0`. -#' @param update_every Update interval for the timer, in seconds. When this -#' argument is greater than `1`, the timer run but the display will only -#' update, once every `update_every` seconds. The timer will switch to normal -#' second-by-second updating for the last two `update_every` periods. -#' @param blink_colon Adds an animation to the blink the colon of the digital -#' timer at each second. Because the blink animation is handled via CSS and -#' not by the JavaScript process that decrements the timer, so the animation -#' may fall out of sync with the timer. For this reason, the blink animation -#' is only shown, by default, when `update_every` is greater than 1, i.e. when -#' the countdown time is updated periodically rather than each second. -#' @param start_immediately If `TRUE`, the countdown timer starts as soon as its -#' created (or as soon as the slides, document or Shiny app are loaded). -#' @param box_shadow Shadow specification for the timer, set to `NULL` to remove -#' the shadow. -#' @param border_width Width of the timer border (all states). -#' @param border_radius Radius of timer border corners (all states). -#' @param line_height Line height of timer digits text. Use this value to nudge -#' the timer digits up or down vertically. The best value generally depends on -#' the fonts used in your slides or document. The default value is `1`. -#' @param color_border Color of the timer border when not yet activated. -#' @param color_background Color of the timer background when not yet activated. -#' @param color_text Color of the timer text when not yet activated. -#' @param color_running_background Color of the timer background when running. -#' Colors are automatically chosen for the running timer border and text -#' (`color_running_border` and `color_running_text`, respectively) from the -#' running background color. -#' @param color_running_border Color of the timer border when running. -#' @param color_running_text Color of the timer text when running. -#' @param color_finished_background Color of the timer background when finished. -#' Colors are automatically chosen for the finished timer border and text -#' (`color_finished_border` and `color_finished_text`, respectively) from the -#' finished background color. -#' @param color_finished_border Color of the timer border when finished. -#' @param color_finished_text Color of the timer text when finished. -#' @param color_warning_background Color of the timer background when the timer -#' is below `warn_when` seconds. Colors are automatically chosen for the -#' warning timer border and text (`color_warning_border` and -#' `color_warning_text`, respectively) from the warning background color. -#' @param color_warning_border Color of the timer border when the timer is below -#' `warn_when` seconds. -#' @param color_warning_text Color of the timer text when the timer is below -#' `warn_when` seconds. -#' @name countdown -NULL - -#' @describeIn countdown Create a countdown timer for use in presentations and -#' HTML documents. -#' @export -countdown <- function( - minutes = 1L, - seconds = 0L, - ..., - id = NULL, - class = NULL, - style = NULL, - play_sound = FALSE, - font_size = "3rem", - margin = "0.6em", - padding = "10px 15px", - bottom = if (is.null(top)) "0", - right = if (is.null(left)) "0", - top = NULL, - left = NULL, - warn_when = 0L, - update_every = 1L, - blink_colon = update_every > 1L, - start_immediately = FALSE, - box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", - border_width = "3px", - border_radius = "15px", - line_height = "1", - color_border = "#ddd", - color_background = "inherit", - color_text = "inherit", - color_running_background = "#43AC6A", - color_running_border = prismatic::clr_darken(color_running_background, 0.1), - color_running_text = NULL, - color_finished_background = "#F04124", - color_finished_border = prismatic::clr_darken(color_finished_background, 0.1), - color_finished_text = NULL, - color_warning_background = "#E6C229", - color_warning_border = prismatic::clr_darken(color_warning_background, 0.1), - color_warning_text = NULL -) { - time <- minutes * 60 + seconds - minutes <- as.integer(floor(time / 60)) - seconds <- as.integer(time - minutes * 60) - stopifnot(minutes < 100) - warn_when <- suppressWarnings(as.integer(warn_when)) - if (is.na(warn_when)) { - stop("`warn_when` must be an integer number of seconds") - } - - if (is.null(id)) { - uid <- make_unique_id() - id <- paste0("timer_", uid) - } - id <- validate_html_id(id) - - class <- paste(unique(c("countdown", class)), collapse = " ") - - play_sound <- if (isTRUE(play_sound)) { - "true" - } else if (is.character(play_sound) && nzchar(play_sound)) { - play_sound - } - - warn_when <- if (warn_when > 0) warn_when - update_every <- as.integer(update_every) - - `%:?%` <- function(x, y) if (!is.null(x)) paste0(y, ":", x, ";") - - x <- div( - class = class, - id = id, - `data-warn-when` = warn_when, - `data-update-every` = update_every, - `data-play-sound` = play_sound, - `data-blink-colon` = if (isTRUE(blink_colon)) "true", - `data-start-immediately` = if (isTRUE(start_immediately)) "true", - tabindex = 0, - style = paste0( - top %:?% "top", - right %:?% "right", - bottom %:?% "bottom", - left %:?% "left", - if (!missing(margin)) margin %:?% "margin", - if (!missing(padding)) padding %:?% "padding", - if (!missing(font_size)) font_size %:?% "font-size", - if (!missing(line_height)) line_height %:?% "line-height", - paste(style, collapse = "; ") - ), - HTML(paste0( - '
', - '', - '', - '
' - )), - code( - class = "countdown-time", - HTML( - paste0( - span(class = "countdown-digits minutes", sprintf("%02d", minutes)), - span(class = "countdown-digits colon", ":"), - span(class = "countdown-digits seconds", sprintf("%02d", seconds)) - ) - ) - ) - ) - - tmpdir <- tempfile("countdown_") - dir.create(tmpdir) - file.copy( - dir(system.file("countdown", package = "countdown"), full.names = TRUE), - tmpdir - ) - - # Set text based on background color - color_running_text <- color_running_text %||% choose_dark_or_light(color_running_background) - color_finished_text <- color_finished_text %||% choose_dark_or_light(color_finished_background) - color_warning_text <- color_warning_text %||% choose_dark_or_light(color_warning_background) - - css_template <- readLines(system.file("countdown", "countdown.css", package = "countdown")) - css <- whisker::whisker.render(css_template) - writeLines(css, file.path(tmpdir, "countdown.css")) - - htmltools::htmlDependencies(x) <- htmlDependency( - "countdown", - version = utils::packageVersion("countdown"), - src = tmpdir, - script = "countdown.js", - stylesheet = "countdown.css", - all_files = TRUE - ) - - htmltools::browsable(x) -} - -#' @describeIn countdown A full-screen timer that takes up the entire view port -#' and uses the largest reasonable font size. -#' -#' @export -countdown_fullscreen <- function( - minutes = 1, - seconds = 0, - ..., - class = NULL, - start_immediately = FALSE, - font_size = "30vw", - border_width = "0", - border_radius = "0", - margin = "0", - padding = "0", - top = 0, - right = 0, - bottom = 0, - left = 0 -) { - countdown( - minutes, - seconds, - class = c("countdown-fullscreen", NULL), - font_size = font_size, - border_width = border_width, - border_radius = border_radius, - margin = margin, - padding = padding, - start_immediately = FALSE, - top = top, - right = right, - bottom = bottom, - left = left, - ... - ) -} - - -make_unique_id <- function() { - with_private_seed <- utils::getFromNamespace("withPrivateSeed", "htmltools") - with_private_seed({ - rand_id <- as.hexmode(sample(256, 4, replace = TRUE) - 1) - paste(format(rand_id, width=2), collapse = "") - }) -} - -validate_html_id <- function(id) { - stop_because <- function(...) { - stop(paste0('"', id, '" is not a valid HTML ID: ', ...)) - } - if (!grepl("^[a-zA-Z]", id)) { - stop_because("Must start with a letter") - } - if (grepl("[^0-9a-zA-Z_:.-]", id)) { - invalid <- gsub("[0-9a-zA-Z_:.-]", "", id) - invalid <- strsplit(invalid, character(0))[[1]] - invalid <- unique(invalid) - invalid[invalid == " "] <- "' '" - invalid <- paste(invalid, collapse = ", ") - stop_because( - "Cannot contain the character", - if (nchar(invalid) > 1) "s: ", - invalid - ) - } - id -} diff --git a/R/R/shiny.R b/R/R/shiny.R deleted file mode 100644 index 5932b0a..0000000 --- a/R/R/shiny.R +++ /dev/null @@ -1,183 +0,0 @@ -#' Launch Countdown Shiny App -#' -#' Launches a full screen, interactive countdown timer as a -#' \link[shiny]{shiny-package} app. -#' -#' @examples -#' if (interactive()) { -#' countdown_app() -#' } -#' -#' @inheritDotParams shiny::runApp port launch.browser host workerId quiet -#' display.mode test.mode -#' -#' @return Runs the countdown timer Shiny app in the current R session. -#' -#' @family Shiny functions -#' @export -countdown_app <- function(...) { - require_shiny("`countdown_app()`") - - # Create temp dir for app and structure - # nocov start - app_dir <- tempfile("") - dir.create(file.path(app_dir, "www", "tmp"), recursive = TRUE) - - app_file <- countdown_app_file("app.R") - css_file <- countdown_app_file("www", "bootstrap.min.css") - file.copy(app_file, app_dir) - file.copy(css_file, file.path(app_dir, "www")) - - on.exit(unlink(app_dir, recursive = TRUE)) - - shiny::runApp(app_dir, ...) - # nocov end -} - -#' Update a Countdown Timer in a Shiny App -#' -#' Updates the settings of a countdown timer dynamically in a Shiny app via -#' server logic. See [countdown_shiny_example()] for an example app -#' demonstrating the usage of `countdown_update()`. -#' -#' @param id A character vector with one or more `id` values for timers created -#' with [countdown()] or [countdown_fullscreen()]. Be sure to set the `id` -#' value when creating the timer. -#' @inheritParams countdown -#' @param session The reactive `session` object for the current Shiny session. -#' In general, only required for expert or unusual use cases. -#' @param ... Ignored, but included for future compatibility. -#' -#' @return Invisibly returns the options sent to update the countdown timer(s). -#' -#' @family Shiny functions -#' @export -countdown_update <- function( - id, - ..., - minutes = NULL, - seconds = NULL, - warn_when = NULL, - update_every = NULL, - blink_colon = NULL, - play_sound = NULL, - session = NULL -) { - require_shiny("`countdown_update()`") - session <- session %||% shiny::getDefaultReactiveDomain() - - if (is.null(id) || !is.character(id) || length(id) < 1) { - stop("`id` is required and must be a character vector") - } - - duration <- if (!is.null(minutes) || !is.null(seconds)) { - (minutes %||% 0L) * 60L + (seconds %||% 0L) - } - - opts <- list( - duration = duration, - warn_when = warn_when, - update_every = update_every, - blink_colon = blink_colon, - play_sound = play_sound, - ... - ) - - not_null <- vapply(opts, Negate(is.null), logical(1)) - opts <- opts[not_null] - - for (id_this in id) { - opts$id <- id_this - session$sendCustomMessage("countdown:update", opts) - } - - invisible(opts) -} - -#' Perform a Countdown Timer Action in a Shiny App -#' -#' Performs an action in a countdown timer dynamically in a Shiny app via server -#' logic. You can start, stop, reset, or bump time time (when the timer is -#' running) up or down. See [countdown_shiny_example()] for an example app -#' demonstrating the usage of `countdown_action()`. -#' -#' @inheritParams countdown_update -#' @param action The action to perform, one of `"start"`, `"stop"`, `"reset"`, -#' `"bumpUp"`, or `"bumpDown"`. -#' -#' @return Invisibly returns the `id` of the updated countdown timer(s). -#' -#' @family Shiny functions -#' @export -countdown_action <- function( - id, - action = c("start", "stop", "reset", "bumpUp", "bumpDown"), - session = NULL -) { - require_shiny("`countdown_action()`") - action <- match.arg(action) - session <- session %||% shiny::getDefaultReactiveDomain() - - action <- sprintf("countdown:%s", action) - for (id_this in id) { - session$sendCustomMessage(action, id) - } - - invisible(id) -} - -#' Example Countdown Shiny App -#' -#' An example app that demonstrates the ways that countdown timers can be -#' integrated into Shiny apps. -#' -#' @examples -#' if (interactive()) { -#' countdown_shiny_example() -#' } -#' -#' @inheritParams shiny::runApp -#' -#' @return Runs the example Shiny app in the current R session. -#' -#' @family Shiny functions -#' @export -countdown_shiny_example <- function(display.mode = c("showcase", "normal", "auto")) { - shiny::runApp( - system.file("examples", "shiny-app", package = "countdown"), - display.mode = match.arg(display.mode) - ) -} - -countdown_app_file <- function(...) { - system.file("countdown-fullscreen", ..., package = "countdown") #nocov -} - -parse_mmss <- function(x = "") { - error_msg <- list(error = "Please enter a time as MM or MM:SS") - if (is.null(x) || x == "") return(list(minutes = 0L, seconds = 0L)) - - invalid <- !grepl("\\d", x) || grepl("[^:0-9]", x) || grepl(":$", x) - if (invalid) return(error_msg) - - m <- if (grepl(":", x)) { - if (!grepl("^\\d{1,2}:\\d{1,2}$", x)) return(error_msg) - regexec("^(\\d{1,2}):(\\d{1,2})$", x) - } else { - if (!grepl("^\\d{1,2}$", x)) return(error_msg) - regexec("(\\d{1,2})", x) - } - - x <- regmatches(x, m)[[1]] - time <- list(minutes = as.integer(x[2]), seconds = as.integer(x[3])) - - if (is.na(time$seconds)) time$seconds <- 0 - - time -} - -require_shiny <- function(reason) { - if (!requireNamespace("shiny", quietly = TRUE)) { - stop(reason, " requires shiny: install.packages('shiny')", call. = FALSE) - } -} diff --git a/R/cran-comments.md b/R/cran-comments.md deleted file mode 100644 index 3a815c2..0000000 --- a/R/cran-comments.md +++ /dev/null @@ -1,17 +0,0 @@ -## R CMD check results - -0 errors | 0 warnings | 1 note - -This is a re-submission of v0.4.0 to address this comment: - -> Please always make sure to reset to user's options(), working directory -> or par() after you changed it in examples and vignettes and demos. -> e.g.: -> -> old <- options(digits = 3) -> ... -> options(old) -> -> Please fix and resubmit. - -I removed the call to options() in the example Shiny app. diff --git a/R/inst/countdown-fullscreen/app.R b/R/inst/countdown-fullscreen/app.R deleted file mode 100644 index f1bb3a8..0000000 --- a/R/inst/countdown-fullscreen/app.R +++ /dev/null @@ -1,249 +0,0 @@ -library(shiny) -library(countdown) -# pkgload::load_all() - -enableBookmarking("url") - -utc0 <- function(x) { - x <- as.integer(x) - as.POSIXct(x, tz = "UTC", origin = "1970-01-01") -} - -inputs_col_class <- "col-md-3 col-xs-8 col-xs-offset-2 col-sm-offset-0" - -update_every_choices <- setNames( - c(1, 5, 10, 15, 30, 60), - c(paste(c(1, 5, 10, 15, 30), "sec"), "1 min") -) - -ui <- function(req) { - basicPage( - tags$head( - tags$title("{countdown} timer"), - tags$style( - "@import url('https://fonts.googleapis.com/css?family=Nova+Square');", - "@import url('https://fonts.googleapis.com/css?family=Roboto+Mono');", - ".countdown .digits { font-family: 'Roboto Mono'; }", - "iframe { height: 99vh; border: none; }", - "#about:hover, #about:active, #about:focus { text-decoration: none; color: #28A5CA; }", - "#about { font-family: 'Nova Square'; color: #4389A0; }", - ".countdown-container { width: calc(100vw - 1px); height: 100vh; position: relative; margin: 0; }" - ) - ), - includeCSS("www/bootstrap.min.css"), # https://bootswatch.com/3/slate/ - tags$head(tags$style( - ".form-control { background: #3E444C !important; color: #ddd !important; }" - )), - fluidRow( - style = "padding-top: 1em; padding-bottom: 1em;", - column( - class = "text-center col-md-3", - width = 4, - h1(actionLink("about", "countdown", class = "text-info"), style = "line-height: 35px") - ), - column( - class = "text-left col-md-9", - width = 8, - fluidRow( - column( - width = 12, - class = inputs_col_class, - textInput("time", "Time", value = "5:00", placeholder = "MM:SS"), - uiOutput("timer_error_ui") - ), - column( - width = 12, - class = inputs_col_class, - textInput("warn_time", "Warn Time Remaining", value = "1:00", placeholder = "MM:SS"), - uiOutput("warn_time_error_ui") - ), - column( - width = 12, - class = inputs_col_class, - selectInput( - "update_every", "Update Every", - choices = update_every_choices, - selected = "1 sec", - selectize = FALSE - ) - ), - column( - width = 12, - class = "col-md-2 col-xs-12 text-center", - style = "padding-top: 18px", - actionButton("start", "Start", class = "btn-success"), - actionButton("reset", "Reset", class = "btn-danger") - ) - ) - ) - ), - fluidRow( - column( - width = 12, - class = "countdown-container", - countdown_fullscreen( - id = "countdown_timer", - minutes = 5L, - seconds = 0L, - warn_when = 60L, - update_every = 1L, - line_height = "94vh", - border_width = "5px", - color_border = "#7A8288", - color_background = "#272B30", - color_text = "#C8C8C8", - # color_running_background = "#102B1A", - color_running_text = "#43AC6A", - color_running_background = "#272B30", - color_running_border = "#272B30", - color_warning_text = "#E6C229", - color_warning_background = "#272B30", - color_warning_border = "#E6C229", - # color_warning_background = darken("#E6C229", 0.6), - color_finished_background = "#F04124", - color_finished_text = "#272B30" - ) - ) - ), - tags$script(HTML( - "$('#start').on('click', function() { - $('html,body').animate({ - scrollTop: $('.countdown-container').offset().top - }, 500); - })" - )) - ) -} - -server <- function(input, output, session) { - setBookmarkExclude(c("countdown_timer", "about", "start", "reset")) - - timer <- reactive({ - req(input$time) - countdown:::parse_mmss(input$time) - }) - - warn_when <- reactive({ - x <- countdown:::parse_mmss(input$warn_time) - x$seconds <- x$minutes * 60 + x$seconds - x - }) - - - observe({ - # update bookmark when these inputs change - list(input$minutes, input$seconds, input$warn_when, input$update_every) - session$doBookmark() - }) - onBookmarked(function(url) { - updateQueryString(url) - }) - ignore_warn_time <- FALSE - onRestore(function(state) { - ignore_warn_time <<- TRUE - }) - - output$timer_error_ui <- renderUI({ - req(timer()$error) - p(class = "text-danger small text-left", timer()$error) - }) - - output$warn_time_error_ui <- renderUI({ - req(warn_when()$error) - p(class = "text-danger small text-left", warn_when()$error) - }) - - observeEvent(input$reset, countdown_action("countdown_timer", "reset")) - observeEvent(input$start, countdown_action("countdown_timer", "start")) - - observe({ - req(timer()$minutes) - req(timer()$minutes + timer()$seconds > 0) - validate(need( - timer()$minutes + timer()$seconds / 60 < 100, - "Timer must be less than 100 minutes." - )) - - countdown_update( - id = "countdown_timer", - minutes = timer()$minutes, - seconds = timer()$seconds - ) - }) - - observeEvent(warn_when(), { - req(warn_when()$seconds, warn_when()$seconds > 0) - countdown_update( - id = "countdown_timer", - warn_when = warn_when()$seconds - ) - }) - - observeEvent(input$update_every, { - countdown_update( - id = "countdown_timer", - update_every = input$update_every, - blink_colon = input$update_every > 1 - ) - }) - - observeEvent(timer(), { - req(timer()$minutes) - req(timer()$minutes + timer()$seconds > 0) - s_update_every <- input$update_every - s <- timer()$minutes * 60 + timer()$seconds - c_update_every <- update_every_choices[update_every_choices <= s] - if (!s_update_every %in% c_update_every) { - s_update_every <- c_update_every[length(c_update_every)] - } - updateSelectInput( - session = session, - inputId = "update_every", - choices = c_update_every, - selected = s_update_every - ) - }) - - observeEvent(timer(), { - req(timer()$minutes) - if (ignore_warn_time) { - ignore_warn_time <<- FALSE - return() - } - min <- timer()$minutes - sec <- timer()$seconds - s <- (min * 60 + sec) - if (s > 60) { - s <- ceiling(s * 0.2 / 30) * 30 - } else { - s_opts <- seq(0, 60, 5) - s <- max(s_opts[s_opts <= (s / 2)]) - } - # make sure warn_time is at least twice the update_every interval - s <- max(s, as.integer(input$update_every) * 2) - min <- floor(s/ 60) - sec <- s - min*60 - updateTextInput(session, "warn_time", value = sprintf("%02d:%02d", min, sec)) - }) - - observeEvent(input$about, { - showModal( - modalDialog( - title = "About Countdown", - p( - a("countdown", href = "https://pkg.garrickadenbuie.com/countdown"), - "is a small R package for creating HTML-based timers.", - "Learn", em("why"), "and", em("how"), "at", - a("pkg.garrickadenbuie.com/countdown.", href = "https://pkg.garrickadenbuie.com/countdown") - ), - p( - style = "padding-top: 3em", - "By Garrick Aden-Buie", br(), - a("garrickadenbuie.com", href = "https://www.garrickadenbuie.com") - ) - ) - ) - }) -} - -shinyApp(ui = ui, server = server) diff --git a/R/inst/countdown-fullscreen/www/.empty b/R/inst/countdown-fullscreen/www/.empty deleted file mode 100644 index e69de29..0000000 diff --git a/R/inst/countdown-fullscreen/www/bootstrap.min.css b/R/inst/countdown-fullscreen/www/bootstrap.min.css deleted file mode 100644 index b058da5..0000000 --- a/R/inst/countdown-fullscreen/www/bootstrap.min.css +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * bootswatch v3.4.1 - * Homepage: http://bootswatch.com - * Copyright 2012-2019 Thomas Park - * Licensed under MIT - * Based on Bootstrap -*//*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:"Glyphicons Halflings";src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#c8c8c8;background-color:#272b30}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#ffffff;text-decoration:none}a:hover,a:focus{color:#ffffff;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #1c1e22}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#7a8288}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#f89406}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#7a8288}.text-primary{color:#7a8288}a.text-primary:hover,a.text-primary:focus{color:#62686d}.text-success{color:#ffffff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff;background-color:#7a8288}a.bg-primary:hover,a.bg-primary:focus{background-color:#62686d}.bg-success{background-color:#62c462}a.bg-success:hover,a.bg-success:focus{background-color:#42b142}.bg-info{background-color:#5bc0de}a.bg-info:hover,a.bg-info:focus{background-color:#31b0d5}.bg-warning{background-color:#f89406}a.bg-warning:hover,a.bg-warning:focus{background-color:#c67605}.bg-danger{background-color:#ee5f5b}a.bg-danger:hover,a.bg-danger:focus{background-color:#e9322d}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #1c1e22}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #7a8288}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#7a8288}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #7a8288;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#3a3f44;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*="col-"]{padding-right:0;padding-left:0}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:#2e3338}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#7a8288;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #1c1e22}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #1c1e22}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #1c1e22}.table .table{background-color:#272b30}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #1c1e22}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #1c1e22}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#353a41}.table-hover>tbody>tr:hover{background-color:#49515a}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#49515a}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#3e444c}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#62c462}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#4fbd4f}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#5bc0de}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#46b8da}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#f89406}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#df8505}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#ee5f5b}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ec4844}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #1c1e22}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#c8c8c8;border:0;border-bottom:1px solid #1c1e22}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type="search"]{box-sizing:border-box;-webkit-appearance:none;appearance:none}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:14px;line-height:1.42857143;color:#272b30}.form-control{display:block;width:100%;height:38px;padding:8px 12px;font-size:14px;line-height:1.42857143;color:#272b30;background-color:#ffffff;background-image:none;border:1px solid #000000;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#7a8288;opacity:1}.form-control:-ms-input-placeholder{color:#7a8288}.form-control::-webkit-input-placeholder{color:#7a8288}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#999999;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:38px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:54px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:9px;padding-bottom:9px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:54px;line-height:54px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:54px;line-height:54px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:47.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;background-color:#62c462;border-color:#ffffff}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;background-color:#f89406;border-color:#ffffff}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;background-color:#ee5f5b;border-color:#ffffff}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#ffffff}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:9px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:9px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:8px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:0.65;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ffffff;background-color:#3a3f44;border-color:#3a3f44}.btn-default:focus,.btn-default.focus{color:#ffffff;background-color:#232628;border-color:#000000}.btn-default:hover{color:#ffffff;background-color:#232628;border-color:#1e2023}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#232628;background-image:none;border-color:#1e2023}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ffffff;background-color:#121415;border-color:#000000}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#3a3f44;border-color:#3a3f44}.btn-default .badge{color:#3a3f44;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#7a8288;border-color:#7a8288}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#62686d;border-color:#3e4245}.btn-primary:hover{color:#ffffff;background-color:#62686d;border-color:#5d6368}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#62686d;background-image:none;border-color:#5d6368}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#51565a;border-color:#3e4245}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#7a8288;border-color:#7a8288}.btn-primary .badge{color:#7a8288;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#62c462;border-color:#62c462}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#42b142;border-color:#2d792d}.btn-success:hover{color:#ffffff;background-color:#42b142;border-color:#40a940}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#42b142;background-image:none;border-color:#40a940}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#399739;border-color:#2d792d}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#62c462;border-color:#62c462}.btn-success .badge{color:#62c462;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#31b0d5;border-color:#1f7e9a}.btn-info:hover{color:#ffffff;background-color:#31b0d5;border-color:#2aabd2}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#269abc;border-color:#1f7e9a}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info .badge{color:#5bc0de;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#f89406;border-color:#f89406}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#c67605;border-color:#7c4a03}.btn-warning:hover{color:#ffffff;background-color:#c67605;border-color:#bc7005}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#c67605;background-image:none;border-color:#bc7005}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#a36104;border-color:#7c4a03}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f89406;border-color:#f89406}.btn-warning .badge{color:#f89406;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#e9322d;border-color:#b71713}.btn-danger:hover{color:#ffffff;background-color:#e9322d;border-color:#e82924}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#e9322d;background-image:none;border-color:#e82924}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#dc1c17;border-color:#b71713}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger .badge{color:#ee5f5b;background-color:#ffffff}.btn-link{font-weight:400;color:#ffffff;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#ffffff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#7a8288;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height, visibility;transition-duration:0.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#3a3f44;background-clip:padding-box;border:1px solid #272b30;border:1px solid rgba(0,0,0,0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#272b30}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#c8c8c8;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#ffffff;text-decoration:none;background-color:#272b30}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;background-color:#272b30;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#7a8288}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#7a8288;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:54px;line-height:54px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:400;line-height:1;color:#272b30;text-align:center;background-color:#999999;border:1px solid rgba(0,0,0,0.6);border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:14px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#3e444c}.nav>li.disabled>a{color:#7a8288}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#7a8288;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#3e444c;border-color:#ffffff}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #1c1e22}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#1c1e22 #1c1e22 #1c1e22}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#ffffff;cursor:default;background-color:#3e444c;border:1px solid #1c1e22;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #1c1e22}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #1c1e22;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#272b30}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:transparent}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #1c1e22}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #1c1e22;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#272b30}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:6px;margin-bottom:6px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#3a3f44;border-color:#2b2e32}.navbar-default .navbar-brand{color:#c8c8c8}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-default .navbar-text{color:#c8c8c8}.navbar-default .navbar-nav>li>a{color:#c8c8c8}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#ffffff;background-color:#272b2e}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#c8c8c8}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#272b2e}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#272b2e}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#272b2e}.navbar-default .navbar-toggle .icon-bar{background-color:#c8c8c8}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#2b2e32}.navbar-default .navbar-link{color:#c8c8c8}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-default .btn-link{color:#c8c8c8}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#ffffff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#cccccc}.navbar-inverse{background-color:#7a8288;border-color:#62686d}.navbar-inverse .navbar-brand{color:#cccccc}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-inverse .navbar-text{color:#cccccc}.navbar-inverse .navbar-nav>li>a{color:#cccccc}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#ffffff;background-color:#5d6368}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#62686d}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#62686d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cccccc}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#5d6368}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#5d6368}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#5d6368}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#697075}.navbar-inverse .navbar-link{color:#cccccc}.navbar-inverse .navbar-link:hover{color:#ffffff}.navbar-inverse .btn-link{color:#cccccc}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#ffffff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#cccccc}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:transparent;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#cccccc;content:"/\00a0"}.breadcrumb>.active{color:#7a8288}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;margin-left:-1px;line-height:1.42857143;color:#ffffff;text-decoration:none;background-color:#3a3f44;border:1px solid rgba(0,0,0,0.6)}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#ffffff;background-color:transparent;border-color:rgba(0,0,0,0.6)}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#ffffff;cursor:default;background-color:#232628;border-color:rgba(0,0,0,0.6)}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#7a8288;cursor:not-allowed;background-color:#ffffff;border-color:rgba(0,0,0,0.6)}.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#3a3f44;border:1px solid rgba(0,0,0,0.6);border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:transparent}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#7a8288;cursor:not-allowed;background-color:#3a3f44}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#3a3f44}.label-default[href]:hover,.label-default[href]:focus{background-color:#232628}.label-primary{background-color:#7a8288}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#62686d}.label-success{background-color:#62c462}.label-success[href]:hover,.label-success[href]:focus{background-color:#42b142}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f89406}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c67605}.label-danger{background-color:#ee5f5b}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#e9322d}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#7a8288;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#ffffff;background-color:#7a8288}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#1c1e22}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#050506}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#ffffff}.thumbnail .caption{padding:9px;color:#c8c8c8}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#ffffff;background-color:#62c462;border-color:#62bd4f}.alert-success hr{border-top-color:#55b142}.alert-success .alert-link{color:#e6e6e6}.alert-info{color:#ffffff;background-color:#5bc0de;border-color:#3dced8}.alert-info hr{border-top-color:#2ac7d2}.alert-info .alert-link{color:#e6e6e6}.alert-warning{color:#ffffff;background-color:#f89406;border-color:#e96506}.alert-warning hr{border-top-color:#d05a05}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{color:#ffffff;background-color:#ee5f5b;border-color:#ed4d63}.alert-danger hr{border-top-color:#ea364f}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#1c1e22;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#7a8288;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#62c462}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f89406}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#ee5f5b}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#32383e;border:1px solid rgba(0,0,0,0.6)}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#7a8288;cursor:not-allowed;background-color:#999999}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#7a8288}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#3e444c;border-color:rgba(0,0,0,0.6)}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#a2aab4}a.list-group-item,button.list-group-item{color:#c8c8c8}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#ffffff}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{color:#c8c8c8;text-decoration:none;background-color:#3e444c}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#ffffff;background-color:#62c462}a.list-group-item-success,button.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#ffffff;background-color:#4fbd4f}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#5bc0de}a.list-group-item-info,button.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#ffffff;background-color:#46b8da}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#f89406}a.list-group-item-warning,button.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#ffffff;background-color:#df8505}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#ee5f5b}a.list-group-item-danger,button.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#ffffff;background-color:#ec4844}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#2e3338;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#3e444c;border-top:1px solid rgba(0,0,0,0.6);border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #1c1e22}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid rgba(0,0,0,0.6)}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid rgba(0,0,0,0.6)}.panel-default{border-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading{color:#c8c8c8;background-color:#3e444c;border-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-default>.panel-heading .badge{color:#3e444c;background-color:#c8c8c8}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-primary{border-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading{color:#ffffff;background-color:#7a8288;border-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-primary>.panel-heading .badge{color:#7a8288;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-success{border-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading{color:#ffffff;background-color:#62c462;border-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-success>.panel-heading .badge{color:#62c462;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-info{border-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading{color:#ffffff;background-color:#5bc0de;border-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-info>.panel-heading .badge{color:#5bc0de;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-warning{border-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading{color:#ffffff;background-color:#f89406;border-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-warning>.panel-heading .badge{color:#f89406;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.panel-danger{border-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading{color:#ffffff;background-color:#ee5f5b;border-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:rgba(0,0,0,0.6)}.panel-danger>.panel-heading .badge{color:#ee5f5b;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:rgba(0,0,0,0.6)}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#1c1e22;border:1px solid #0c0d0e;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=20);opacity:0.2}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:0.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);transform:translate(0, -25%);transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#2e3338;background-clip:padding-box;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:0.5}.modal-header{padding:15px;border-bottom:1px solid #1c1e22}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #1c1e22}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:0.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#000000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#2e3338;background-clip:padding-box;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#666666;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#2e3338;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#666666;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#2e3338;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#666666;border-bottom-color:rgba(0,0,0,0.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#2e3338}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#666666;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#2e3338}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#2e3338;border-bottom:1px solid #22262a;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:0.5}.carousel-control.left{background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:0.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #ffffff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#ffffff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.navbar{background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.navbar .navbar-nav>li>a{border-right:1px solid rgba(0,0,0,0.2);border-left:1px solid rgba(255,255,255,0.1)}.navbar .navbar-nav>li>a:hover{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-left-color:transparent}.navbar-inverse{background-image:linear-gradient(#8a9196, #7a8288 60%, #70787d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.navbar-inverse .badge{background-color:#5d6368}.navbar-inverse .navbar-nav>li>a:hover{background-image:linear-gradient(#404448, #4e5458 40%, #53595d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404448', endColorstr='#ff53595d', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.navbar .nav .open>a{border-color:transparent}.navbar-nav>li.active>a{border-left-color:transparent}.navbar-form{margin-left:5px;margin-right:5px}.btn,.btn:hover{border-color:rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.btn-default{background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-default:hover{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-primary{background-image:linear-gradient(#8a9196, #7a8288 60%, #70787d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8a9196', endColorstr='#ff70787d', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-primary:hover{background-image:linear-gradient(#404448, #4e5458 40%, #53595d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404448', endColorstr='#ff53595d', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-success{background-image:linear-gradient(#78cc78, #62c462 60%, #53be53);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff78cc78', endColorstr='#ff53be53', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-success:hover{background-image:linear-gradient(#2f7d2f, #379337 40%, #3a9a3a);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2f7d2f', endColorstr='#ff3a9a3a', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-info{background-image:linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff74cae3', endColorstr='#ff4ab9db', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-info:hover{background-image:linear-gradient(#20829f, #2596b8 40%, #279dc1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20829f', endColorstr='#ff279dc1', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-warning{background-image:linear-gradient(#faa123, #f89406 60%, #e48806);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffaa123', endColorstr='#ffe48806', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-warning:hover{background-image:linear-gradient(#804d03, #9e5f04 40%, #a86404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff804d03', endColorstr='#ffa86404', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-danger{background-image:linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff17a77', endColorstr='#ffec4d49', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-danger:hover{background-image:linear-gradient(#bb1813, #d71c16 40%, #e01d17);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbb1813', endColorstr='#ffe01d17', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-link,.btn-link:hover{border-color:transparent}h1,h2,h3,h4,h5,h6{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.text-primary,.text-primary:hover{color:#7a8288}.text-success,.text-success:hover{color:#62c462}.text-danger,.text-danger:hover{color:#ee5f5b}.text-warning,.text-warning:hover{color:#f89406}.text-info,.text-info:hover{color:#5bc0de}.table .success,.table .warning,.table .danger,.table .info{color:#fff}.table-bordered tbody tr.success td,.table-bordered tbody tr.warning td,.table-bordered tbody tr.danger td,.table-bordered tbody tr.success:hover td,.table-bordered tbody tr.warning:hover td,.table-bordered tbody tr.danger:hover td{border-color:#1c1e22}.table-responsive>.table{background-color:#2e3338}input,textarea{color:#272b30}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .form-control-feedback{color:#f89406}.has-warning .form-control,.has-warning .form-control:focus{border-color:#f89406}.has-warning .input-group-addon{background-color:#3a3f44;border-color:rgba(0,0,0,0.6)}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label,.has-error .form-control-feedback{color:#ee5f5b}.has-error .form-control,.has-error .form-control:focus{border-color:#ee5f5b}.has-error .input-group-addon{background-color:#3a3f44;border-color:rgba(0,0,0,0.6)}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .form-control-feedback{color:#62c462}.has-success .form-control,.has-success .form-control:focus{border-color:#62c462}.has-success .input-group-addon{background-color:#3a3f44;border-color:rgba(0,0,0,0.6)}legend{color:#fff}.input-group-addon{background-color:#3a3f44;background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;text-shadow:1px 1px 1px rgba(0,0,0,0.3);color:#ffffff}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:rgba(0,0,0,0.6)}.nav-pills>li>a{background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.nav-pills>li>a:hover{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills>li.active>a,.nav-pills>li.active>a:hover{background-color:none;background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills>li.disabled>a,.nav-pills>li.disabled>a:hover{background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination>li>a,.pagination>li>span{text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination>li>a:hover,.pagination>li>span:hover{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination>li.active>a,.pagination>li.active>span{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination>li.disabled>a,.pagination>li.disabled>a:hover,.pagination>li.disabled>span,.pagination>li.disabled>span:hover{background-color:transparent;background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pager>li>a{background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.pager>li>a:hover{background-image:linear-gradient(#020202, #101112 40%, #141618);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202', endColorstr='#ff141618', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pager>li.disabled>a,.pager>li.disabled>a:hover{background-color:transparent;background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.breadcrumb{border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-image:linear-gradient(#484e55, #3a3f44 60%, #313539);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff484e55', endColorstr='#ff313539', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none}.alert .alert-link,.alert a{color:#fff;text-decoration:underline}.alert .close{color:#000000;text-decoration:none}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#0c0d0e}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:rgba(0,0,0,0.6)}a.list-group-item-success.active{background-color:#62c462}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#4fbd4f}a.list-group-item-warning.active{background-color:#f89406}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#df8505}a.list-group-item-danger.active{background-color:#ee5f5b}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#ec4844}.jumbotron{border:1px solid rgba(0,0,0,0.6)}.panel-primary .panel-heading,.panel-success .panel-heading,.panel-danger .panel-heading,.panel-warning .panel-heading,.panel-info .panel-heading{border-color:#000} \ No newline at end of file diff --git a/R/inst/countdown/countdown.css b/R/inst/countdown/countdown.css deleted file mode 100644 index bb86cfd..0000000 --- a/R/inst/countdown/countdown.css +++ /dev/null @@ -1,144 +0,0 @@ -.countdown { - background: {{color_background}}; - position: absolute; - cursor: pointer; - font-size: {{font_size}}; - line-height: {{line_height}}; - border-color: {{color_border}}; - border-width: {{border_width}}; - border-style: solid; - border-radius: {{border_radius}};{{#box_shadow}} - box-shadow: {{box_shadow}}; - -webkit-box-shadow: {{box_shadow}};{{/box_shadow}} - margin: {{margin}}; - padding: {{padding}}; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.countdown { - display: flex; - align-items: center; - justify-content: center; -} -.countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; -} -.countdown-digits { - color: {{color_text}}; -} -.countdown.running { - border-color: {{color_running_border}}; - background-color: {{color_running_background}}; -} -.countdown.running .countdown-digits { - color: {{color_running_text}}; -} -.countdown.finished { - border-color: {{color_finished_border}}; - background-color: {{color_finished_background}}; -} -.countdown.finished .countdown-digits { - color: {{color_finished_text}}; -} -.countdown.running.warning { - border-color: {{color_warning_border}}; - background-color: {{color_warning_background}}; -} -.countdown.running.warning .countdown-digits { - color: {{color_warning_text}}; -} - -.countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; -} - -/* ------ Controls ------ */ -.countdown:not(.running) .countdown-controls { - display: none; -} - -.countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; -} - -.countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; -} - -.countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: {{color_running_text}}; - background-color: {{color_running_background}}; - border-color: {{color_running_border}}; -} - -.countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: {{color_finished_text}}; - background-color: {{color_finished_background}}; - border-color: {{color_finished_border}}; -} - -.countdown.running:hover .countdown-controls > button, -.countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; -} - -.countdown.running:hover .countdown-controls > button:hover, -.countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); -} - -.countdown.running:hover .countdown-controls > button:active, -.countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); -} - -/* ----- Fullscreen ----- */ -.countdown.countdown-fullscreen { - z-index: 0; -} - -.countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; -} - -.countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; -} diff --git a/R/inst/countdown/countdown.js b/R/inst/countdown/countdown.js deleted file mode 100644 index a058ad8..0000000 --- a/R/inst/countdown/countdown.js +++ /dev/null @@ -1,478 +0,0 @@ -/* globals Shiny,Audio */ -class CountdownTimer { - constructor (el, opts) { - if (typeof el === 'string' || el instanceof String) { - el = document.querySelector(el) - } - - if (el.counter) { - return el.counter - } - - const minutes = parseInt(el.querySelector('.minutes').innerText || '0') - const seconds = parseInt(el.querySelector('.seconds').innerText || '0') - const duration = minutes * 60 + seconds - - function attrIsTrue (x) { - if (x === true) return true - return !!(x === 'true' || x === '' || x === '1') - } - - this.element = el - this.duration = duration - this.end = null - this.is_running = false - this.warn_when = parseInt(el.dataset.warnWhen) || -1 - this.update_every = parseInt(el.dataset.updateEvery) || 1 - this.play_sound = attrIsTrue(el.dataset.playSound) - this.blink_colon = attrIsTrue(el.dataset.blinkColon) - this.startImmediately = attrIsTrue(el.dataset.startImmediately) - this.timeout = null - this.display = { minutes, seconds } - - if (opts.src_location) { - this.src_location = opts.src_location - } - - this.addEventListeners() - } - - addEventListeners () { - const self = this - - if (this.startImmediately) { - if (window.remark && window.slideshow) { - // Remark (xaringan) support - const isOnVisibleSlide = () => { - return document.querySelector('.remark-visible').contains(self.element) - } - if (isOnVisibleSlide()) { - self.start() - } else { - let started_once = 0 - window.slideshow.on('afterShowSlide', function () { - if (started_once > 0) return - if (isOnVisibleSlide()) { - self.start() - started_once = 1 - } - }) - } - } else if (window.Reveal) { - // Revealjs (quarto) support - const isOnVisibleSlide = () => { - const currentSlide = document.querySelector('.reveal .slide.present') - return currentSlide ? currentSlide.contains(self.element) : false - } - if (isOnVisibleSlide()) { - self.start() - } else { - const revealStartTimer = () => { - if (isOnVisibleSlide()) { - self.start() - window.Reveal.off('slidechanged', revealStartTimer) - } - } - window.Reveal.on('slidechanged', revealStartTimer) - } - } else if (window.IntersectionObserver) { - // All other situtations use IntersectionObserver - const onVisible = (element, callback) => { - new window.IntersectionObserver((entries, observer) => { - entries.forEach(entry => { - if (entry.intersectionRatio > 0) { - callback(element) - observer.disconnect() - } - }) - }).observe(element) - } - onVisible(this.element, el => el.countdown.start()) - } else { - // or just start the timer as soon as it's initialized - this.start() - } - } - - function haltEvent (ev) { - ev.preventDefault() - ev.stopPropagation() - } - function isSpaceOrEnter (ev) { - return ev.code === 'Space' || ev.code === 'Enter' - } - function isArrowUpOrDown (ev) { - return ev.code === 'ArrowUp' || ev.code === 'ArrowDown' - } - - ;['click', 'touchend'].forEach(function (eventType) { - self.element.addEventListener(eventType, function (ev) { - haltEvent(ev) - self.is_running ? self.stop() : self.start() - }) - }) - this.element.addEventListener('keydown', function (ev) { - if (ev.code === "Escape") { - self.reset() - haltEvent(ev) - } - if (!isSpaceOrEnter(ev) && !isArrowUpOrDown(ev)) return - haltEvent(ev) - if (isSpaceOrEnter(ev)) { - self.is_running ? self.stop() : self.start() - return - } - - if (!self.is_running) return - - if (ev.code === 'ArrowUp') { - self.bumpUp() - } else if (ev.code === 'ArrowDown') { - self.bumpDown() - } - }) - this.element.addEventListener('dblclick', function (ev) { - haltEvent(ev) - if (self.is_running) self.reset() - }) - this.element.addEventListener('touchmove', haltEvent) - - const btnBumpDown = this.element.querySelector('.countdown-bump-down') - ;['click', 'touchend'].forEach(function (eventType) { - btnBumpDown.addEventListener(eventType, function (ev) { - haltEvent(ev) - if (self.is_running) self.bumpDown() - }) - }) - btnBumpDown.addEventListener('keydown', function (ev) { - if (!isSpaceOrEnter(ev) || !self.is_running) return - haltEvent(ev) - self.bumpDown() - }) - - const btnBumpUp = this.element.querySelector('.countdown-bump-up') - ;['click', 'touchend'].forEach(function (eventType) { - btnBumpUp.addEventListener(eventType, function (ev) { - haltEvent(ev) - if (self.is_running) self.bumpUp() - }) - }) - btnBumpUp.addEventListener('keydown', function (ev) { - if (!isSpaceOrEnter(ev) || !self.is_running) return - haltEvent(ev) - self.bumpUp() - }) - this.element.querySelector('.countdown-controls').addEventListener('dblclick', function (ev) { - haltEvent(ev) - }) - } - - remainingTime () { - const remaining = this.is_running - ? (this.end - Date.now()) / 1000 - : this.remaining || this.duration - - let minutes = Math.floor(remaining / 60) - let seconds = Math.ceil(remaining - minutes * 60) - - if (seconds > 59) { - minutes = minutes + 1 - seconds = seconds - 60 - } - - return { remaining, minutes, seconds } - } - - start () { - if (this.is_running) return - - this.is_running = true - - if (this.remaining) { - // Having a static remaining time indicates timer was paused - this.end = Date.now() + this.remaining * 1000 - this.remaining = null - } else { - this.end = Date.now() + this.duration * 1000 - } - - this.reportStateToShiny('start') - - this.element.classList.remove('finished') - this.element.classList.add('running') - this.update(true) - this.tick() - } - - tick (run_again) { - if (typeof run_again === 'undefined') { - run_again = true - } - - if (!this.is_running) return - - const { seconds: secondsWas } = this.display - this.update() - - if (run_again) { - const delay = (this.end - Date.now() > 10000) ? 1000 : 250 - this.blinkColon(secondsWas) - this.timeout = setTimeout(this.tick.bind(this), delay) - } - } - - blinkColon (secondsWas) { - // don't blink unless option is set - if (!this.blink_colon) return - // warn_when always updates the seconds - if (this.warn_when > 0 && Date.now() + this.warn_when > this.end) { - this.element.classList.remove('blink-colon') - return - } - const { seconds: secondsIs } = this.display - if (secondsIs > 10 || secondsWas !== secondsIs) { - this.element.classList.toggle('blink-colon') - } - } - - update (force) { - if (typeof force === 'undefined') { - force = false - } - - const { remaining, minutes, seconds } = this.remainingTime() - - const setRemainingTime = (selector, time) => { - const timeContainer = this.element.querySelector(selector) - if (!timeContainer) return - time = Math.max(time, 0) - timeContainer.innerText = String(time).padStart(2, 0) - } - - if (this.is_running && remaining < 0.25) { - this.stop() - setRemainingTime('.minutes', 0) - setRemainingTime('.seconds', 0) - this.playSound() - return - } - - const should_update = force || - Math.round(remaining) < this.warn_when || - Math.round(remaining) % this.update_every === 0 - - if (should_update) { - this.element.classList.toggle('warning', remaining <= this.warn_when) - this.display = { minutes, seconds } - setRemainingTime('.minutes', minutes) - setRemainingTime('.seconds', seconds) - } - } - - stop () { - const { remaining } = this.remainingTime() - if (remaining > 1) { - this.remaining = remaining - } - this.element.classList.remove('running') - this.element.classList.remove('warning') - this.element.classList.remove('blink-colon') - this.element.classList.add('finished') - this.is_running = false - this.end = null - this.reportStateToShiny('stop') - this.timeout = clearTimeout(this.timeout) - } - - reset () { - this.stop() - this.remaining = null - this.update(true) - this.reportStateToShiny('reset') - this.element.classList.remove('finished') - this.element.classList.remove('warning') - } - - setValues (opts) { - if (typeof opts.warn_when !== 'undefined') { - this.warn_when = opts.warn_when - } - if (typeof opts.update_every !== 'undefined') { - this.update_every = opts.update_every - } - if (typeof opts.blink_colon !== 'undefined') { - this.blink_colon = opts.blink_colon - if (!opts.blink_colon) { - this.element.classList.remove('blink-colon') - } - } - if (typeof opts.play_sound !== 'undefined') { - this.play_sound = opts.play_sound - } - if (typeof opts.duration !== 'undefined') { - this.duration = opts.duration - if (this.is_running) { - this.reset() - this.start() - } - } - this.reportStateToShiny('update') - this.update(true) - } - - bumpTimer (val, round) { - round = typeof round === 'boolean' ? round : true - const { remaining } = this.remainingTime() - let newRemaining = remaining + val - if (newRemaining <= 0) { - this.setRemaining(0) - this.stop() - return - } - if (round && newRemaining > 10) { - newRemaining = Math.round(newRemaining / 5) * 5 - } - this.setRemaining(newRemaining) - this.reportStateToShiny(val > 0 ? 'bumpUp' : 'bumpDown') - this.update(true) - } - - bumpUp (val) { - if (!this.is_running) { - console.error('timer is not running') - return - } - this.bumpTimer( - val || this.bumpIncrementValue(), - typeof val === 'undefined' - ) - } - - bumpDown (val) { - if (!this.is_running) { - console.error('timer is not running') - return - } - this.bumpTimer( - val || -1 * this.bumpIncrementValue(), - typeof val === 'undefined' - ) - } - - setRemaining (val) { - if (!this.is_running) { - console.error('timer is not running') - return - } - this.end = Date.now() + val * 1000 - this.update(true) - } - - playSound () { - let url = this.play_sound - if (!url) return - if (typeof url === 'boolean') { - const src = this.src_location - ? this.src_location.replace('/countdown.js', '') - : 'libs/countdown' - url = src + '/smb_stage_clear.mp3' - } - const sound = new Audio(url) - sound.play() - } - - bumpIncrementValue (val) { - val = val || this.remainingTime().remaining - if (val <= 30) { - return 5 - } else if (val <= 300) { - return 15 - } else if (val <= 3000) { - return 30 - } else { - return 60 - } - } - - reportStateToShiny (action) { - if (!window.Shiny) return - - const inputId = this.element.id - const data = { - event: { - action, - time: new Date().toISOString() - }, - timer: { - is_running: this.is_running, - end: this.end ? new Date(this.end).toISOString() : null, - remaining: this.remainingTime() - } - } - - function shinySetInputValue () { - if (!window.Shiny.setInputValue) { - setTimeout(shinySetInputValue, 100) - return - } - window.Shiny.setInputValue(inputId, data) - } - - shinySetInputValue() - } -} - -(function () { - const CURRENT_SCRIPT = document.currentScript.getAttribute('src') - - document.addEventListener('DOMContentLoaded', function () { - const els = document.querySelectorAll('.countdown') - if (!els || !els.length) { - return - } - els.forEach(function (el) { - el.countdown = new CountdownTimer(el, { src_location: CURRENT_SCRIPT }) - }) - - if (window.Shiny) { - Shiny.addCustomMessageHandler('countdown:update', function (x) { - if (!x.id) { - console.error('No `id` provided, cannot update countdown') - return - } - const el = document.getElementById(x.id) - el.countdown.setValues(x) - }) - - Shiny.addCustomMessageHandler('countdown:start', function (id) { - const el = document.getElementById(id) - if (!el) return - el.countdown.start() - }) - - Shiny.addCustomMessageHandler('countdown:stop', function (id) { - const el = document.getElementById(id) - if (!el) return - el.countdown.stop() - }) - - Shiny.addCustomMessageHandler('countdown:reset', function (id) { - const el = document.getElementById(id) - if (!el) return - el.countdown.reset() - }) - - Shiny.addCustomMessageHandler('countdown:bumpUp', function (id) { - const el = document.getElementById(id) - if (!el) return - el.countdown.bumpUp() - }) - - Shiny.addCustomMessageHandler('countdown:bumpDown', function (id) { - const el = document.getElementById(id) - if (!el) return - el.countdown.bumpDown() - }) - } - }) -})() diff --git a/R/inst/countdown/smb_stage_clear.mp3 b/R/inst/countdown/smb_stage_clear.mp3 deleted file mode 100644 index da2ddc2cd41e5c37b828798d9a67b3e55cd6657c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38758 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 diff --git a/R/inst/examples/shiny-app/server.R b/R/inst/examples/shiny-app/server.R deleted file mode 100644 index 0aed640..0000000 --- a/R/inst/examples/shiny-app/server.R +++ /dev/null @@ -1,41 +0,0 @@ -library(shiny) -library(countdown) - -server <- function(input, output, session) { - output$debug <- renderPrint({ - str(input$countdown) - }) - - timer_is_running <- reactiveVal(FALSE) - - observeEvent(input$countdown, { - req(input$countdown) - is_running <- input$countdown$timer$is_running - if (is_running != timer_is_running()) { - timer_is_running(is_running) - } - }) - - output$buttons <- renderUI({ - is_running <- timer_is_running() - - div( - class = "btn-group", - actionButton("start", "Start", icon = icon("play")), - actionButton("stop", "Stop", icon = icon("pause")), - actionButton("reset", "Reset", icon = icon("sync")), - if (is_running) { - actionButton("bumpUp", "Bump Up", icon = icon("arrow-up")) - }, - if (is_running) { - actionButton("bumpDown", "Bump Down", icon = icon("arrow-down")) - } - ) - }) - - observeEvent(input$start, countdown_action("countdown", "start")) - observeEvent(input$stop, countdown_action("countdown", "stop")) - observeEvent(input$reset, countdown_action("countdown", "reset")) - observeEvent(input$bumpUp, countdown_action("countdown", "bumpUp")) - observeEvent(input$bumpDown, countdown_action("countdown", "bumpDown")) -} diff --git a/R/inst/examples/shiny-app/ui.R b/R/inst/examples/shiny-app/ui.R deleted file mode 100644 index 93942a3..0000000 --- a/R/inst/examples/shiny-app/ui.R +++ /dev/null @@ -1,31 +0,0 @@ -library(shiny) -library(countdown) - -ui <- fluidPage( - title = "{countdown} - Example Shiny App", - div( - class = "container", - h2("Simple {countdown} Timer App"), - p("Here's a simple timer, created with the {countdown} package."), - HTML('
countdown(id = "countdown")
'), - countdown( - id = "countdown", - style = "position:relative;width: 5em;max-width: 100%;" - ), - p( - "The countdown timer reports the state of the timer whenever key actions", - "are performed. On the Shiny side, the input ID is the same as the timer's", - "ID - in this case", code("input$countdown"), "— and the data sent to", - "Shiny reports both the action taken by the user and the current state", - "of the timer." - ), - verbatimTextOutput("debug"), - p( - "You may also use the", code("countdown_action()"), "button to trigger", - "actions with the timer from Shiny. Interact with the timer directly or", - "use the buttons below to start, stop, reset, or bump the timer up or down." - ), - uiOutput("buttons", inline = TRUE), - tags$style("body, pre, .btn { font-size: 16px }") - ) -) diff --git a/R/man/countdown-package.Rd b/R/man/countdown-package.Rd deleted file mode 100644 index c86bb2e..0000000 --- a/R/man/countdown-package.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/countdown-package.R -\docType{package} -\name{countdown-package} -\alias{countdown-package} -\alias{_PACKAGE} -\title{countdown: A Countdown Timer for HTML Presentations, Documents, and Web Apps} -\description{ -A simple countdown timer for slides and HTML documents written in 'R Markdown' or 'Quarto'. Integrates fully into 'Shiny' apps. Countdown to something amazing. -} -\seealso{ -Useful links: -\itemize{ - \item \url{https://pkg.garrickadenbuie.com/countdown/} - \item \url{https://github.com/gadenbuie/countdown} - \item Report bugs at \url{https://github.com/gadenbuie/countdown/issues} -} - -} -\author{ -\strong{Maintainer}: Garrick Aden-Buie \email{garrick@adenbuie.com} (\href{https://orcid.org/0000-0002-7111-0077}{ORCID}) [copyright holder] - -} -\keyword{internal} diff --git a/R/man/countdown.Rd b/R/man/countdown.Rd deleted file mode 100644 index cfbd40e..0000000 --- a/R/man/countdown.Rd +++ /dev/null @@ -1,234 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/countdown.R -\name{countdown} -\alias{countdown} -\alias{countdown_fullscreen} -\title{Countdown Timer} -\usage{ -countdown( - minutes = 1L, - seconds = 0L, - ..., - id = NULL, - class = NULL, - style = NULL, - play_sound = FALSE, - font_size = "3rem", - margin = "0.6em", - padding = "10px 15px", - bottom = if (is.null(top)) "0", - right = if (is.null(left)) "0", - top = NULL, - left = NULL, - warn_when = 0L, - update_every = 1L, - blink_colon = update_every > 1L, - start_immediately = FALSE, - box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", - border_width = "3px", - border_radius = "15px", - line_height = "1", - color_border = "#ddd", - color_background = "inherit", - color_text = "inherit", - color_running_background = "#43AC6A", - color_running_border = prismatic::clr_darken(color_running_background, 0.1), - color_running_text = NULL, - color_finished_background = "#F04124", - color_finished_border = prismatic::clr_darken(color_finished_background, 0.1), - color_finished_text = NULL, - color_warning_background = "#E6C229", - color_warning_border = prismatic::clr_darken(color_warning_background, 0.1), - color_warning_text = NULL -) - -countdown_fullscreen( - minutes = 1, - seconds = 0, - ..., - class = NULL, - start_immediately = FALSE, - font_size = "30vw", - border_width = "0", - border_radius = "0", - margin = "0", - padding = "0", - top = 0, - right = 0, - bottom = 0, - left = 0 -) -} -\arguments{ -\item{minutes}{The number of minutes for which the timer should run. This -value is added to \code{seconds}.} - -\item{seconds}{The number of seconds for which the timer should run. This -value is added to \code{minutes}.} - -\item{...}{Ignored by \code{\link[=countdown]{countdown()}}. In \code{\link[=countdown_fullscreen]{countdown_fullscreen()}}, additional -arguments are passed on to \code{\link[=countdown]{countdown()}}.} - -\item{id}{A optional unique ID for the \verb{
} containing the timer. A unique -ID will be created if none is specified. All of the timers in a single -document need to have unique IDs to function properly. Unless you have a -specific reason, it would probably be best to leave this unset.} - -\item{class}{Optional additional classes to be added to the \verb{
} -containing the timer. The \code{"countdown"} class is added automatically. If -you want to modify the style of the timer, you can modify the \code{"countdown"} -class or specify additional styles here that extend the base CSS.} - -\item{style}{CSS rules to be applied inline to the timer. Use \code{style} to -override any global CSS rules for the timer. For example, to display the -timer relative to the position where it is called (rather than positioned -absolutely, as in the default), set -\code{style = "position: relative; width: min-content;"}.} - -\item{play_sound}{Play a sound at the end of the timer? If \code{TRUE}, plays the -"stage complete" sound courtesy of \link[beepr:beepr-package]{beepr}. -Alternatively, \code{play_sound} can be a relative or absolute URL to a sound -file, such as an \code{mp3}, \code{wav}, \code{ogg}, or other audio file type.} - -\item{font_size}{The font size of the time displayed in the timer.} - -\item{margin}{The margin applied to the timer container, default is -\code{"0.5em"}.} - -\item{padding}{The padding within the timer container, default is \code{"10px 15px"}.} - -\item{bottom}{Position of the timer within its container. By default the -timer is bottom-aligned using \code{bottom = "0"}. If \code{top} is set, \code{bottom} -defaults to \code{NULL}.} - -\item{right}{Position of the timer within its container. By default the timer -is right-aligned using \code{right = "0"}. If \code{left} is set, \code{right} defaults to -\code{NULL}.} - -\item{top}{Position of the timer within its container. By default \code{top} is -unset (\code{NULL}).} - -\item{left}{Position of the timer within its container. By default \code{left} is -unset (\code{NULL}).} - -\item{warn_when}{Change the countdown to "warning" state when \code{warn_when} -seconds remain. This is achieved by adding the \code{warning} class to the timer -when \code{warn_when} seconds or less remain. Only applied when greater than -\code{0}.} - -\item{update_every}{Update interval for the timer, in seconds. When this -argument is greater than \code{1}, the timer run but the display will only -update, once every \code{update_every} seconds. The timer will switch to normal -second-by-second updating for the last two \code{update_every} periods.} - -\item{blink_colon}{Adds an animation to the blink the colon of the digital -timer at each second. Because the blink animation is handled via CSS and -not by the JavaScript process that decrements the timer, so the animation -may fall out of sync with the timer. For this reason, the blink animation -is only shown, by default, when \code{update_every} is greater than 1, i.e. when -the countdown time is updated periodically rather than each second.} - -\item{start_immediately}{If \code{TRUE}, the countdown timer starts as soon as its -created (or as soon as the slides, document or Shiny app are loaded).} - -\item{box_shadow}{Shadow specification for the timer, set to \code{NULL} to remove -the shadow.} - -\item{border_width}{Width of the timer border (all states).} - -\item{border_radius}{Radius of timer border corners (all states).} - -\item{line_height}{Line height of timer digits text. Use this value to nudge -the timer digits up or down vertically. The best value generally depends on -the fonts used in your slides or document. The default value is \code{1}.} - -\item{color_border}{Color of the timer border when not yet activated.} - -\item{color_background}{Color of the timer background when not yet activated.} - -\item{color_text}{Color of the timer text when not yet activated.} - -\item{color_running_background}{Color of the timer background when running. -Colors are automatically chosen for the running timer border and text -(\code{color_running_border} and \code{color_running_text}, respectively) from the -running background color.} - -\item{color_running_border}{Color of the timer border when running.} - -\item{color_running_text}{Color of the timer text when running.} - -\item{color_finished_background}{Color of the timer background when finished. -Colors are automatically chosen for the finished timer border and text -(\code{color_finished_border} and \code{color_finished_text}, respectively) from the -finished background color.} - -\item{color_finished_border}{Color of the timer border when finished.} - -\item{color_finished_text}{Color of the timer text when finished.} - -\item{color_warning_background}{Color of the timer background when the timer -is below \code{warn_when} seconds. Colors are automatically chosen for the -warning timer border and text (\code{color_warning_border} and -\code{color_warning_text}, respectively) from the warning background color.} - -\item{color_warning_border}{Color of the timer border when the timer is below -\code{warn_when} seconds.} - -\item{color_warning_text}{Color of the timer text when the timer is below -\code{warn_when} seconds.} -} -\value{ -A vanilla JavaScript countdown timer as HTML, with dependencies. -} -\description{ -Creates a countdown timer using HTML, CSS, and vanilla JavaScript, suitable -for use in web-based presentations, such as those created by -\code{\link[xaringan:inf_mr]{xaringan::infinite_moon_reader()}}. -} -\section{Functions}{ -\itemize{ -\item \code{countdown()}: Create a countdown timer for use in presentations and -HTML documents. - -\item \code{countdown_fullscreen()}: A full-screen timer that takes up the entire view port -and uses the largest reasonable font size. - -}} -\examples{ -if (interactive()) { - countdown(minutes = 0, seconds = 42) - - countdown( - minutes = 1, - seconds = 30, - left = 0, - right = 0, - padding = "15px", - margin = "5\%", - font_size = "6em" - ) - - # For a stand-alone full-screen countdown timer, use countdown_fullscreen() - # with default parameters. - countdown_fullscreen(1, 30) - - # For xaringan slides, use percentages for `margin` to set the distance from - # the edge of the slide and use `font_size` to adjust the size of the digits. - # If you need to nudge the text up or down vertically, increase or decrease - # `line_height`. - countdown_fullscreen( - minutes = 0, - seconds = 90, - margin = "5\%", - font_size = "8em", - ) - - # To position the timer "inline" in R Markdown documents, - # use the `style` argument on each timer: - countdown(1, 30, style = "position: relative; width: min-content;") -} - -} -\seealso{ -\code{\link[=countdown_app]{countdown_app()}} -} diff --git a/R/man/countdown_action.Rd b/R/man/countdown_action.Rd deleted file mode 100644 index 587134a..0000000 --- a/R/man/countdown_action.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/shiny.R -\name{countdown_action} -\alias{countdown_action} -\title{Perform a Countdown Timer Action in a Shiny App} -\usage{ -countdown_action( - id, - action = c("start", "stop", "reset", "bumpUp", "bumpDown"), - session = NULL -) -} -\arguments{ -\item{id}{A character vector with one or more \code{id} values for timers created -with \code{\link[=countdown]{countdown()}} or \code{\link[=countdown_fullscreen]{countdown_fullscreen()}}. Be sure to set the \code{id} -value when creating the timer.} - -\item{action}{The action to perform, one of \code{"start"}, \code{"stop"}, \code{"reset"}, -\code{"bumpUp"}, or \code{"bumpDown"}.} - -\item{session}{The reactive \code{session} object for the current Shiny session. -In general, only required for expert or unusual use cases.} -} -\value{ -Invisibly returns the \code{id} of the updated countdown timer(s). -} -\description{ -Performs an action in a countdown timer dynamically in a Shiny app via server -logic. You can start, stop, reset, or bump time time (when the timer is -running) up or down. See \code{\link[=countdown_shiny_example]{countdown_shiny_example()}} for an example app -demonstrating the usage of \code{countdown_action()}. -} -\seealso{ -Other Shiny functions: -\code{\link{countdown_app}()}, -\code{\link{countdown_shiny_example}()}, -\code{\link{countdown_update}()} -} -\concept{Shiny functions} diff --git a/R/man/countdown_app.Rd b/R/man/countdown_app.Rd deleted file mode 100644 index 61eb9db..0000000 --- a/R/man/countdown_app.Rd +++ /dev/null @@ -1,54 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/shiny.R -\name{countdown_app} -\alias{countdown_app} -\title{Launch Countdown Shiny App} -\usage{ -countdown_app(...) -} -\arguments{ -\item{...}{ - Arguments passed on to \code{\link[shiny:runApp]{shiny::runApp}} - \describe{ - \item{\code{port}}{The TCP port that the application should listen on. If the -\code{port} is not specified, and the \code{shiny.port} option is set (with -\code{options(shiny.port = XX)}), then that port will be used. Otherwise, -use a random port between 3000:8000, excluding ports that are blocked -by Google Chrome for being considered unsafe: 3659, 4045, 5060, -5061, 6000, 6566, 6665:6669 and 6697. Up to twenty random -ports will be tried.} - \item{\code{launch.browser}}{If true, the system's default web browser will be -launched automatically after the app is started. Defaults to true in -interactive sessions only. The value of this parameter can also be a -function to call with the application's URL.} - \item{\code{host}}{The IPv4 address that the application should listen on. Defaults -to the \code{shiny.host} option, if set, or \code{"127.0.0.1"} if not. See -Details.} - \item{\code{workerId}}{Can generally be ignored. Exists to help some editions of -Shiny Server Pro route requests to the correct process.} - \item{\code{quiet}}{Should Shiny status messages be shown? Defaults to FALSE.} - \item{\code{test.mode}}{Should the application be launched in test mode? This is -only used for recording or running automated tests. Defaults to the -\code{shiny.testmode} option, or FALSE if the option is not set.} - }} -} -\value{ -Runs the countdown timer Shiny app in the current R session. -} -\description{ -Launches a full screen, interactive countdown timer as a -\link[shiny]{shiny-package} app. -} -\examples{ -if (interactive()) { - countdown_app() -} - -} -\seealso{ -Other Shiny functions: -\code{\link{countdown_action}()}, -\code{\link{countdown_shiny_example}()}, -\code{\link{countdown_update}()} -} -\concept{Shiny functions} diff --git a/R/man/countdown_shiny_example.Rd b/R/man/countdown_shiny_example.Rd deleted file mode 100644 index 4c92da5..0000000 --- a/R/man/countdown_shiny_example.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/shiny.R -\name{countdown_shiny_example} -\alias{countdown_shiny_example} -\title{Example Countdown Shiny App} -\usage{ -countdown_shiny_example(display.mode = c("showcase", "normal", "auto")) -} -\arguments{ -\item{display.mode}{The mode in which to display the application. If set to -the value \code{"showcase"}, shows application code and metadata from a -\code{DESCRIPTION} file in the application directory alongside the -application. If set to \code{"normal"}, displays the application normally. -Defaults to \code{"auto"}, which displays the application in the mode given -in its \code{DESCRIPTION} file, if any.} -} -\value{ -Runs the example Shiny app in the current R session. -} -\description{ -An example app that demonstrates the ways that countdown timers can be -integrated into Shiny apps. -} -\examples{ -if (interactive()) { - countdown_shiny_example() -} - -} -\seealso{ -Other Shiny functions: -\code{\link{countdown_action}()}, -\code{\link{countdown_app}()}, -\code{\link{countdown_update}()} -} -\concept{Shiny functions} diff --git a/R/man/countdown_update.Rd b/R/man/countdown_update.Rd deleted file mode 100644 index 1d41033..0000000 --- a/R/man/countdown_update.Rd +++ /dev/null @@ -1,71 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/shiny.R -\name{countdown_update} -\alias{countdown_update} -\title{Update a Countdown Timer in a Shiny App} -\usage{ -countdown_update( - id, - ..., - minutes = NULL, - seconds = NULL, - warn_when = NULL, - update_every = NULL, - blink_colon = NULL, - play_sound = NULL, - session = NULL -) -} -\arguments{ -\item{id}{A character vector with one or more \code{id} values for timers created -with \code{\link[=countdown]{countdown()}} or \code{\link[=countdown_fullscreen]{countdown_fullscreen()}}. Be sure to set the \code{id} -value when creating the timer.} - -\item{...}{Ignored, but included for future compatibility.} - -\item{minutes}{The number of minutes for which the timer should run. This -value is added to \code{seconds}.} - -\item{seconds}{The number of seconds for which the timer should run. This -value is added to \code{minutes}.} - -\item{warn_when}{Change the countdown to "warning" state when \code{warn_when} -seconds remain. This is achieved by adding the \code{warning} class to the timer -when \code{warn_when} seconds or less remain. Only applied when greater than -\code{0}.} - -\item{update_every}{Update interval for the timer, in seconds. When this -argument is greater than \code{1}, the timer run but the display will only -update, once every \code{update_every} seconds. The timer will switch to normal -second-by-second updating for the last two \code{update_every} periods.} - -\item{blink_colon}{Adds an animation to the blink the colon of the digital -timer at each second. Because the blink animation is handled via CSS and -not by the JavaScript process that decrements the timer, so the animation -may fall out of sync with the timer. For this reason, the blink animation -is only shown, by default, when \code{update_every} is greater than 1, i.e. when -the countdown time is updated periodically rather than each second.} - -\item{play_sound}{Play a sound at the end of the timer? If \code{TRUE}, plays the -"stage complete" sound courtesy of \link[beepr:beepr-package]{beepr}. -Alternatively, \code{play_sound} can be a relative or absolute URL to a sound -file, such as an \code{mp3}, \code{wav}, \code{ogg}, or other audio file type.} - -\item{session}{The reactive \code{session} object for the current Shiny session. -In general, only required for expert or unusual use cases.} -} -\value{ -Invisibly returns the options sent to update the countdown timer(s). -} -\description{ -Updates the settings of a countdown timer dynamically in a Shiny app via -server logic. See \code{\link[=countdown_shiny_example]{countdown_shiny_example()}} for an example app -demonstrating the usage of \code{countdown_update()}. -} -\seealso{ -Other Shiny functions: -\code{\link{countdown_action}()}, -\code{\link{countdown_app}()}, -\code{\link{countdown_shiny_example}()} -} -\concept{Shiny functions} diff --git a/R/man/figures/countdown.gif b/R/man/figures/countdown.gif deleted file mode 100644 index adf6286b1d141048d31f61c87d7fa1b2973e2f98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308254 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

DA|C9LukKPjsF`CZ!U1)uOm|`UG9)M5Mtrws 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 diff --git a/R/tests/testthat.R b/R/tests/testthat.R deleted file mode 100644 index dc18341..0000000 --- a/R/tests/testthat.R +++ /dev/null @@ -1,4 +0,0 @@ -library(testthat) -library(countdown) - -test_check("countdown") diff --git a/R/tests/testthat/_snaps/countdown_default.css/countdown.md b/R/tests/testthat/_snaps/countdown_default.css/countdown.md deleted file mode 100644 index 74abaea..0000000 --- a/R/tests/testthat/_snaps/countdown_default.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md b/R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md deleted file mode 100644 index 483db0f..0000000 --- a/R/tests/testthat/_snaps/countdown_finished-colors.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #D505D5FF; - background-color: magenta2; - } - .countdown.finished .countdown-digits { - color: #460046FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #460046FF; - background-color: magenta2; - border-color: #D505D5FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md b/R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md deleted file mode 100644 index a5335b4..0000000 --- a/R/tests/testthat/_snaps/countdown_font-and-border.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 1em; - line-height: 1; - border-color: #123abc; - border-width: 2px; - border-style: solid; - border-radius: 5px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md b/R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md deleted file mode 100644 index 8146f99..0000000 --- a/R/tests/testthat/_snaps/countdown_fullscreen.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 30vw; - line-height: 1; - border-color: #ddd; - border-width: 0; - border-style: solid; - border-radius: 0; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0; - padding: 0; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md b/R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md deleted file mode 100644 index a6d41d4..0000000 --- a/R/tests/testthat/_snaps/countdown_margin-padding.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0; - padding: 12px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md b/R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md deleted file mode 100644 index deba9f8..0000000 --- a/R/tests/testthat/_snaps/countdown_no-shadow.css/countdown.md +++ /dev/null @@ -1,145 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md b/R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md deleted file mode 100644 index 33ff354..0000000 --- a/R/tests/testthat/_snaps/countdown_running-colors.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #BF1111FF; - background-color: firebrick3; - } - .countdown.running .countdown-digits { - color: #FFCBCBFF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #FFCBCBFF; - background-color: firebrick3; - border-color: #BF1111FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/_snaps/countdown_top-left.css/countdown.md b/R/tests/testthat/_snaps/countdown_top-left.css/countdown.md deleted file mode 100644 index 74abaea..0000000 --- a/R/tests/testthat/_snaps/countdown_top-left.css/countdown.md +++ /dev/null @@ -1,147 +0,0 @@ -# countdown css template - - .countdown { - background: inherit; - position: absolute; - cursor: pointer; - font-size: 3rem; - line-height: 1; - border-color: #ddd; - border-width: 3px; - border-style: solid; - border-radius: 15px; - box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 4px 10px 0px rgba(50, 50, 50, 0.4); - margin: 0.6em; - padding: 10px 15px; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - .countdown { - display: flex; - align-items: center; - justify-content: center; - } - .countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; - } - .countdown-digits { - color: inherit; - } - .countdown.running { - border-color: #2A9B59FF; - background-color: #43AC6A; - } - .countdown.running .countdown-digits { - color: #002F14FF; - } - .countdown.finished { - border-color: #DE3000FF; - background-color: #F04124; - } - .countdown.finished .countdown-digits { - color: #4A0900FF; - } - .countdown.running.warning { - border-color: #CEAC04FF; - background-color: #E6C229; - } - .countdown.running.warning .countdown-digits { - color: #3A2F02FF; - } - - .countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; - } - - /* ------ Controls ------ */ - .countdown:not(.running) .countdown-controls { - display: none; - } - - .countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; - } - - .countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; - } - - .countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: #002F14FF; - background-color: #43AC6A; - border-color: #2A9B59FF; - } - - .countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: #4A0900FF; - background-color: #F04124; - border-color: #DE3000FF; - } - - .countdown.running:hover .countdown-controls > button, - .countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; - } - - .countdown.running:hover .countdown-controls > button:hover, - .countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - } - - .countdown.running:hover .countdown-controls > button:active, - .countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); - } - - /* ----- Fullscreen ----- */ - .countdown.countdown-fullscreen { - z-index: 0; - } - - .countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; - } - - .countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; - } - diff --git a/R/tests/testthat/test-countdown.R b/R/tests/testthat/test-countdown.R deleted file mode 100644 index 50bbf3f..0000000 --- a/R/tests/testthat/test-countdown.R +++ /dev/null @@ -1,142 +0,0 @@ -test_that("countdown html_dependency", { - x <- countdown(1) - - x_deps <- htmltools::htmlDependencies(x)[[1]] - - expect_equal(x_deps$name, "countdown") - expect_equal(x_deps$script, "countdown.js") - expect_equal(x_deps$stylesheet, "countdown.css") - expect_true(inherits(x_deps, "html_dependency")) - -}) - -dir.create(test_path("css_template"), showWarnings = FALSE) - -test_that("countdown css template", { - test_template_file <- function(x, variant) { - x_deps <- htmltools::htmlDependencies(x)[[1]] - css_template <- readLines(file.path(x_deps$src, x_deps$stylesheet)) - expect_snapshot_output(cat(css_template, sep = "\n"), variant = variant) - } - - test_template_file(countdown(), "countdown_default.css") - test_template_file(countdown(top = 0, left = 0), "countdown_top-left.css") - test_template_file(countdown(font_size = "1em", - color_border = "#123abc", - border_width = "2px", - border_radius = "5px"), - "countdown_font-and-border.css") - test_template_file(countdown(box_shadow = NULL), "countdown_no-shadow.css") - test_template_file(countdown(margin = 0, padding = "12px"), "countdown_margin-padding.css") - - test_template_file(countdown(color_running_background = "firebrick3"), "countdown_running-colors.css") - test_template_file(countdown(color_finished_background = "magenta2"), "countdown_finished-colors.css") - - test_template_file(countdown_fullscreen(), "countdown_fullscreen.css") -}) - -test_that("countdown()", { - x <- countdown(1, 30, id = "timer_1", class = "extra-class", play_sound = TRUE) - - expect_true(attr(x, "browsable_html")) - expect_true(inherits(x, "shiny.tag")) - expect_equal(x$name, "div") - expect_equal(x$attribs$class, "countdown extra-class") - expect_equal(x$attribs$id, "timer_1") - expect_equal(x$attribs$`data-play-sound`, "true") - expect_equal(x$children[[2]]$name, "code") - - test_inner_html <- function(counter, ...) { - counter_inner <- as.character(counter$children[[2]]$children[[1]]) - expect_equal(counter_inner, paste0(...)) - } - - test_inner_html(x, - "01", - ":", - "30") - - # seconds and minutes get added - test_inner_html(countdown(10.05, 65), - "11", - ":", - "08") - - expect_equal(countdown(class = "countdown")$attribs$class, "countdown") - expect_equal(countdown(class = c("test", "countdown", "test"))$attribs$class, "countdown test") - - - expect_error(countdown(100), "minutes") -}) - -test_that("countdown() with `style`", { - x <- countdown(id = "test", style = "position: relative; width: 100%") - y <- countdown(id = "test", style = c("position: relative", "width: 100%")) - - expect_identical(as.character(x), as.character(y)) - expect_true(grepl("style=\".+?position: relative;", as.character(x))) -}) - -test_that("countdown() with update_every", { - x <- countdown(1, 30, id = "timer_1", update_every = 15) - - expect_equal(x$attribs[["data-blink-colon"]], "true") - expect_equal(x$attribs[["data-update-every"]], 15) -}) - -test_that("countdown() sets up timer correctly with warn_when", { - x <- countdown(1, 30, warn_when = 15) - expect_equal(x$attribs$`data-warn-when`, 15L) - - x <- countdown(1, 30, warn_when = 15.25) - expect_equal(x$attribs$`data-warn-when`, 15L) - - expect_error(countdown(warn_when = 'after')) -}) - -test_that("countdown dependencies are included", { - html_doc <- c( - "---", - "pagetitle: countdown test", - "output: html_document", - "---\n", - "```{r}", - "countdown::countdown()", - "```" - ) - - tmpdir <- tempfile("") - dir.create(tmpdir) - tmp_rmd <- file.path(tmpdir, "countdown_test.Rmd") - tmp_html <- sub("Rmd$", "html", tmp_rmd) - - cat(html_doc, file = tmp_rmd, sep = "\n") - rmarkdown::render(tmp_rmd, output_options = list(self_contained = FALSE), quiet = TRUE) - - countdown_lib_dir <- dir(file.path(tmpdir, "countdown_test_files"), full.names = TRUE) - countdown_lib_dir <- countdown_lib_dir[grepl("countdown-", countdown_lib_dir)] - - expect_true(dir.exists(countdown_lib_dir)) - expect_true(file.exists(file.path(countdown_lib_dir, "countdown.css"))) - expect_true(file.exists(file.path(countdown_lib_dir, "countdown.js"))) - expect_true(file.exists(file.path(countdown_lib_dir, "smb_stage_clear.mp3"))) - -}) - -test_that("make_unique_id is always unique", { - set.seed(4242) - id1 <- make_unique_id() - - set.seed(4242) - id2 <- make_unique_id() - - expect_true(id1 != id2) - expect_true(make_unique_id() != make_unique_id()) -}) - -test_that("validates HTML ids", { - expect_equal(validate_html_id("timer_001"), "timer_001") - expect_error(validate_html_id("001"), "letter") - expect_error(validate_html_id("timer&%$&1"), "characters") - expect_error(validate_html_id("timer#1"), "character") -}) diff --git a/R/tests/testthat/test-shiny.R b/R/tests/testthat/test-shiny.R deleted file mode 100644 index a0f7f50..0000000 --- a/R/tests/testthat/test-shiny.R +++ /dev/null @@ -1,43 +0,0 @@ -# test_that() - -describe("countdown_app()", { - local_edition(2) - - it("errors if shiny not available", { - with_mock( - requireNamespace = function(...) FALSE, - expect_error(countdown_app()) - ) - }) - -}) - -describe("parse_mmmss()", { - - it("parses MM and MM:SS", { - expect_time <- function(object, time) { - time <- list(minutes = time[1], seconds = time[2]) - expect_equal(object, time) - } - - expect_time(parse_mmss("05:00"), c(5, 0)) - expect_time(parse_mmss("5"), c(5, 0)) - expect_time(parse_mmss("5:0"), c(5, 0)) - expect_time(parse_mmss(""), c(0, 0)) - }) - - it("returns list(error) with incorrectly formatted times", { - expect_parse_error <- function(time) { - expect_true(!is.null(parse_mmss(time)$error), time) - } - - expect_parse_error("5:") - expect_parse_error(":5") - expect_parse_error("050:0") - expect_parse_error("5 minutes") - expect_parse_error("0500") - expect_parse_error("111") - }) - -}) - From 4036e556bd10f25c48bcc4f909b98f58b2d5a0c2 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 10:05:15 +0000 Subject: [PATCH 08/35] Unblock _extension for Quarto --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b02d3ae..bf3990c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ .DS_Store # Directories that start with _ -_*/ +#_*/ # Unblock to allow for Quarto. !_snaps/ ## https://github.com/github/gitignore/blob/master/R.gitignore From 1aad3b75ec3eead15ff15641d9d8b4533ad7a898 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 10:05:38 +0000 Subject: [PATCH 09/35] Figure out the best approach for checking if an option is set in kwargs in a way that mirrors R. --- quarto/_extensions/countdown/countdown.lua | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 961ba57..24aa91e 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -14,6 +14,22 @@ local function isVariablePopulated(s) return not isVariableEmpty(s) end +-- Check whether an argument is present in kwargs +-- If it is, return the value +local function tryOption(options, key) + option_value = pandoc.utils.stringify(options[key]) + if isVariablePopulated(option_value) then + return option_value + else + return nil + end +end + +-- Retrieve the option value or use the default value +local function getOption(options, key, default) + return tryOption(options, key) or default +end + -- Utility function to perform whisker-like substitution local function substituteInFile(contents, substitutions) @@ -168,10 +184,6 @@ local function ensureHTMLDependency(meta) needsToExportDependencies = false end -local function getOption(values, key, default) - return pandoc.utils.stringify(values[key]) or default -end - local function countdown(args, kwargs, meta) -- Retrieve named time arguments and fallback on default values if missing @@ -199,9 +211,7 @@ local function countdown(args, kwargs, meta) -- Determine if a warning should be given local warn_when = tonumber(pandoc.utils.stringify(kwargs["data-warn-when"])) or 0 - - quarto.log.output(kwargs["data-warn-when"]) - + -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp (possible switch over to running counter) local id = pandoc.utils.stringify(kwargs["id"]) or ("timer_" .. pandoc.utils.sha1(tostring(os.time()))) From 687d41a7f40dab81c94097be45d0ca55b3834003 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 10:17:16 +0000 Subject: [PATCH 10/35] Update assets for Quarto --- .../countdown/assets/countdown.css | 169 ++++++++++++++++++ .../countdown/assets/countdown.css.in | 144 --------------- .../_extensions/countdown/assets/countdown.js | 67 ++++--- 3 files changed, 208 insertions(+), 172 deletions(-) create mode 100644 quarto/_extensions/countdown/assets/countdown.css delete mode 100644 quarto/_extensions/countdown/assets/countdown.css.in diff --git a/quarto/_extensions/countdown/assets/countdown.css b/quarto/_extensions/countdown/assets/countdown.css new file mode 100644 index 0000000..6118d98 --- /dev/null +++ b/quarto/_extensions/countdown/assets/countdown.css @@ -0,0 +1,169 @@ +.countdown { + --_running-color: var(--countdown-color-running-text, rgba(0, 0, 0, 0.8)); + --_running-background: var(--countdown-color-running-background, #43AC6A); + --_running-border-color: var(--countdown-color-running-border, rgba(0, 0, 0, 0.1)); + --_finished-color: var(--countdown-color-finished-text, rgba(0, 0, 0, 0.7)); + --_finished-background: var(--countdown-color-finished-background, #F04124); + --_finished-border-color: var(--countdown-color-finished-border, rgba(0, 0, 0, 0.1)); + + position: absolute; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + background: var(--countdown-color-background, inherit); + font-size: var(--countdown-font-size, 3rem); + line-height: var(--countdown-line-height, 1); + border-color: var(--countdown-color-border, #ddd); + border-width: var(--countdown-border-width, 0.1875rem); + border-style: solid; + border-radius: var(--countdown-border-radius, 0.9rem); + box-shadow: var(--countdown-box-shadow, 0px 4px 10px 0px rgba(50, 50, 50, 0.4)); + margin: var(--countdown-margin, 0.6em); + padding: var(--countdown-padding, 0.625rem 0.9rem); + text-align: center; + z-index: 10; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.countdown.inline { + position: relative; + width: max-content; + max-width: 100%; +} + +.countdown .countdown-time { + background: none; + font-size: 100%; + padding: 0; + color: currentColor; +} + +.countdown-digits { + color: var(--countdown-color-text); +} + +.countdown.running { + border-color: var(--_running-border-color); + background-color: var(--_running-background); +} + +.countdown.running .countdown-digits { + color: var(--_running-color); +} + +.countdown.finished { + border-color: var(--_finished-border-color); + background-color: var(--_finished-background); +} + +.countdown.finished .countdown-digits { + color: var(--_finished-color); +} + +.countdown.running.warning { + border-color: var(--countdown-color-warning-border, rgba(0, 0, 0, 0.1)); + background-color: var(--countdown-color-warning-background, #E6C229); +} + +.countdown.running.warning .countdown-digits { + color: var(--countdown-color-warning-text, rgba(0, 0, 0, 0.7)); +} + +.countdown.running.blink-colon .countdown-digits.colon { + opacity: 0.1; +} + +/* ------ Controls ------ */ +.countdown:not(.running) .countdown-controls, +.countdown.no-controls .countdown-controls { + display: none; +} + +.countdown-controls { + position: absolute; + top: -0.5rem; + right: -0.5rem; + left: -0.5rem; + display: flex; + justify-content: space-between; + margin: 0; + padding: 0; +} + +.countdown-controls>button { + position: relative; + font-size: 1.5rem; + width: 1rem; + height: 1rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: monospace; + padding: 10px; + margin: 0; + background: inherit; + border: 2px solid; + border-radius: 100%; + transition: 50ms transform ease-in-out, 150ms opacity ease-in; + box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); + -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); + --_button-bump: 0; + opacity: var(--_opacity, 0); + transform: translate(0, var(--_button-bump)); +} + +/* increase hit area of the +/- buttons */ +.countdown .countdown-controls > button::after { + content: ""; + height: 200%; + width: 200%; + position: absolute; + border-radius: 50%; +} + +.countdown .countdown-controls>button:last-child { + color: var(--_running-color); + background-color: var(--_running-background); + border-color: var(--_running-border-color); +} + +.countdown .countdown-controls>button:first-child { + color: var(--_finished-color); + background-color: var(--_finished-background); + border-color: var(--_finished-border-color); +} + +.countdown.running:hover, .countdown.running:focus-within { + --_opacity: 1; +} + +.countdown.running:hover .countdown-controls>button, +.countdown.running:focus-within .countdown-controls>button { + --_button-bump: -3px; +} + +.countdown.running:hover .countdown-controls>button:active, +.countdown.running:focus-within .countdown-controls>button:active { + --_button-bump: 0; +} + +/* ----- Fullscreen ----- */ +.countdown.countdown-fullscreen { + z-index: 0; +} + +.countdown-fullscreen.running .countdown-controls { + top: 1rem; + left: 0; + right: 0; + justify-content: center; +} + +.countdown-fullscreen.running .countdown-controls>button+button { + margin-left: 1rem; +} diff --git a/quarto/_extensions/countdown/assets/countdown.css.in b/quarto/_extensions/countdown/assets/countdown.css.in deleted file mode 100644 index ace9e09..0000000 --- a/quarto/_extensions/countdown/assets/countdown.css.in +++ /dev/null @@ -1,144 +0,0 @@ -.countdown { - background: {{color_background}}; - position: absolute; - cursor: pointer; - font-size: {{font_size}}; - line-height: {{line_height}}; - border-color: {{color_border}}; - border-width: {{border_width}}; - border-style: solid; - border-radius: {{border_radius}}; /* Had to remove {{#box_shadow}} */ - box-shadow: {{box_shadow}}; - -webkit-box-shadow: {{box_shadow}}; /* Had to remove {{/box_shadow}} */ - margin: {{margin}}; - padding: {{padding}}; - text-align: center; - z-index: 10; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.countdown { - display: flex; - align-items: center; - justify-content: center; -} -.countdown .countdown-time { - background: none; - font-size: 100%; - padding: 0; -} -.countdown-digits { - color: {{color_text}}; -} -.countdown.running { - border-color: {{color_running_border}}; - background-color: {{color_running_background}}; -} -.countdown.running .countdown-digits { - color: {{color_running_text}}; -} -.countdown.finished { - border-color: {{color_finished_border}}; - background-color: {{color_finished_background}}; -} -.countdown.finished .countdown-digits { - color: {{color_finished_text}}; -} -.countdown.running.warning { - border-color: {{color_warning_border}}; - background-color: {{color_warning_background}}; -} -.countdown.running.warning .countdown-digits { - color: {{color_warning_text}}; -} - -.countdown.running.blink-colon .countdown-digits.colon { - opacity: 0.1; -} - -/* ------ Controls ------ */ -.countdown:not(.running) .countdown-controls { - display: none; -} - -.countdown-controls { - position: absolute; - top: -0.5rem; - right: -0.5rem; - left: -0.5rem; - display: flex; - justify-content: space-between; - margin: 0; - padding: 0; -} - -.countdown-controls > button { - font-size: 1.5rem; - width: 1rem; - height: 1rem; - display: inline-block; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-family: monospace; - padding: 10px; - margin: 0; - background: inherit; - border: 2px solid; - border-radius: 100%; - transition: 50ms transform ease-in-out, 150ms opacity ease-in; - --countdown-transition-distance: 10px; -} - -.countdown .countdown-controls > button:last-child { - transform: translate(calc(-1 * var(--countdown-transition-distance)), var(--countdown-transition-distance)); - opacity: 0; - color: {{color_running_text}}; - background-color: {{color_running_background}}; - border-color: {{color_running_border}}; -} - -.countdown .countdown-controls > button:first-child { - transform: translate(var(--countdown-transition-distance), var(--countdown-transition-distance)); - opacity: 0; - color: {{color_finished_text}}; - background-color: {{color_finished_background}}; - border-color: {{color_finished_border}}; -} - -.countdown.running:hover .countdown-controls > button, -.countdown.running:focus-within .countdown-controls > button{ - transform: translate(0, 0); - opacity: 1; -} - -.countdown.running:hover .countdown-controls > button:hover, -.countdown.running:focus-within .countdown-controls > button:hover{ - transform: translate(0, calc(var(--countdown-transition-distance) / -2)); - box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); - -webkit-box-shadow: 0px 2px 5px 0px rgba(50, 50, 50, 0.4); -} - -.countdown.running:hover .countdown-controls > button:active, -.countdown.running:focus-within .countdown-controls > button:active{ - transform: translate(0, calc(var(--coutndown-transition-distance) / -5)); -} - -/* ----- Fullscreen ----- */ -.countdown.countdown-fullscreen { - z-index: 0; -} - -.countdown-fullscreen.running .countdown-controls { - top: 1rem; - left: 0; - right: 0; - justify-content: center; -} - -.countdown-fullscreen.running .countdown-controls > button + button { - margin-left: 1rem; -} diff --git a/quarto/_extensions/countdown/assets/countdown.js b/quarto/_extensions/countdown/assets/countdown.js index a058ad8..76379e2 100644 --- a/quarto/_extensions/countdown/assets/countdown.js +++ b/quarto/_extensions/countdown/assets/countdown.js @@ -14,6 +14,7 @@ class CountdownTimer { const duration = minutes * 60 + seconds function attrIsTrue (x) { + if (typeof x === 'undefined') return false if (x === true) return true return !!(x === 'true' || x === '' || x === '1') } @@ -24,7 +25,7 @@ class CountdownTimer { this.is_running = false this.warn_when = parseInt(el.dataset.warnWhen) || -1 this.update_every = parseInt(el.dataset.updateEvery) || 1 - this.play_sound = attrIsTrue(el.dataset.playSound) + this.play_sound = attrIsTrue(el.dataset.playSound) || el.dataset.playSound this.blink_colon = attrIsTrue(el.dataset.blinkColon) this.startImmediately = attrIsTrue(el.dataset.startImmediately) this.timeout = null @@ -76,7 +77,7 @@ class CountdownTimer { window.Reveal.on('slidechanged', revealStartTimer) } } else if (window.IntersectionObserver) { - // All other situtations use IntersectionObserver + // All other situations use IntersectionObserver const onVisible = (element, callback) => { new window.IntersectionObserver((entries, observer) => { entries.forEach(entry => { @@ -108,7 +109,7 @@ class CountdownTimer { ;['click', 'touchend'].forEach(function (eventType) { self.element.addEventListener(eventType, function (ev) { haltEvent(ev) - self.is_running ? self.stop() : self.start() + self.is_running ? self.stop({manual: true}) : self.start() }) }) this.element.addEventListener('keydown', function (ev) { @@ -119,7 +120,7 @@ class CountdownTimer { if (!isSpaceOrEnter(ev) && !isArrowUpOrDown(ev)) return haltEvent(ev) if (isSpaceOrEnter(ev)) { - self.is_running ? self.stop() : self.start() + self.is_running ? self.stop({manual: true}) : self.start() return } @@ -196,7 +197,7 @@ class CountdownTimer { this.end = Date.now() + this.duration * 1000 } - this.reportStateToShiny('start') + this.emitStateEvent('start') this.element.classList.remove('finished') this.element.classList.add('running') @@ -262,14 +263,18 @@ class CountdownTimer { Math.round(remaining) % this.update_every === 0 if (should_update) { - this.element.classList.toggle('warning', remaining <= this.warn_when) + const is_warning = remaining <= this.warn_when + if (is_warning && !this.element.classList.contains('warning')) { + this.emitStateEvent('warning') + } + this.element.classList.toggle('warning', is_warning) this.display = { minutes, seconds } setRemainingTime('.minutes', minutes) setRemainingTime('.seconds', seconds) } } - stop () { + stop ({manual = false} = {}) { const { remaining } = this.remainingTime() if (remaining > 1) { this.remaining = remaining @@ -280,17 +285,19 @@ class CountdownTimer { this.element.classList.add('finished') this.is_running = false this.end = null - this.reportStateToShiny('stop') + this.emitStateEvent(manual ? 'stop' : 'finished') this.timeout = clearTimeout(this.timeout) } reset () { - this.stop() + this.stop({manual: true}) this.remaining = null this.update(true) - this.reportStateToShiny('reset') + this.element.classList.remove('finished') this.element.classList.remove('warning') + this.emitEvents = true + this.emitStateEvent('reset') } setValues (opts) { @@ -316,7 +323,7 @@ class CountdownTimer { this.start() } } - this.reportStateToShiny('update') + this.emitStateEvent('update') this.update(true) } @@ -333,7 +340,7 @@ class CountdownTimer { newRemaining = Math.round(newRemaining / 5) * 5 } this.setRemaining(newRemaining) - this.reportStateToShiny(val > 0 ? 'bumpUp' : 'bumpDown') + this.emitStateEvent(val > 0 ? 'bumpUp' : 'bumpDown') this.update(true) } @@ -394,15 +401,10 @@ class CountdownTimer { } } - reportStateToShiny (action) { - if (!window.Shiny) return - - const inputId = this.element.id + emitStateEvent (action) { const data = { - event: { - action, - time: new Date().toISOString() - }, + action, + time: new Date().toISOString(), timer: { is_running: this.is_running, end: this.end ? new Date(this.end).toISOString() : null, @@ -410,15 +412,24 @@ class CountdownTimer { } } - function shinySetInputValue () { - if (!window.Shiny.setInputValue) { - setTimeout(shinySetInputValue, 100) - return - } - window.Shiny.setInputValue(inputId, data) + this.reportStateToShiny(data) + this.element.dispatchEvent(new CustomEvent('countdown', { detail: data, bubbles: true })) + } + + reportStateToShiny (data) { + if (!window.Shiny) return + + if (!window.Shiny.setInputValue) { + // We're in Shiny but it isn't ready for input updates yet + setTimeout(() => this.reportStateToShiny(data), 100) + return } - shinySetInputValue() + const { action, time, timer } = data + + const shinyData = { event: { action, time }, timer } + + window.Shiny.setInputValue(this.element.id, shinyData) } } @@ -453,7 +464,7 @@ class CountdownTimer { Shiny.addCustomMessageHandler('countdown:stop', function (id) { const el = document.getElementById(id) if (!el) return - el.countdown.stop() + el.countdown.stop({manual: true}) }) Shiny.addCustomMessageHandler('countdown:reset', function (id) { From f0c015ede40cf714286964599ef512a401b81206 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 11:25:07 +0000 Subject: [PATCH 11/35] First pass at revamping document-level CSS settings --- quarto/_extensions/countdown/countdown.lua | 147 ++++++++++----------- 1 file changed, 67 insertions(+), 80 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 24aa91e..72a0d2c 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -59,7 +59,7 @@ local function readTemplateFile(template) local file = io.open(path, "r") -- Check if null pointer before grabbing content - if not file then + if not file then quarto.log.error( "\nWe were unable to read the template file `" .. template .. "` from the extension directory.\n\n" .. "Double check that the extension is fully available by comparing the \n" .. @@ -81,95 +81,73 @@ local function readTemplateFile(template) return content end -local function cssVariablesToTable(meta) - -- Local table to store the modified variables - local cssVariables = {} +function countdown_style(meta) - -- Check if 'countdown' exists in meta, if not create an empty cell - local countdownMeta = meta['countdown'] or {} + -- Retrieve the countdown options from meta + local options = meta.countdown - -- Font size for the countdown digits - cssVariables.font_size = countdownMeta['font_size'] or '3rem' - - -- Margin for the countdown element - cssVariables.margin = countdownMeta['margin'] or '0.6em' - - -- Padding for the countdown element - cssVariables.padding = countdownMeta['padding'] or '10px 15px' - - -- Box shadow for the countdown element (if provided) - cssVariables.box_shadow = countdownMeta['box_shadow'] or "0px 4px 10px 0px rgba(50, 50, 50, 0.4)" - - -- Border width for the countdown element - cssVariables.border_width = countdownMeta['border_width'] or '3px' - - -- Border radius for the countdown element - cssVariables.border_radius = countdownMeta['border_radius'] or '15px' - - -- Line height for the countdown digits - cssVariables.line_height = countdownMeta['line_height'] or '1' - - -- Border color for the countdown element - cssVariables.color_border = countdownMeta['color_border'] or '#ddd' - - -- Background color for the countdown element - cssVariables.color_background = countdownMeta['color_background'] or 'inherit' - - -- Text color for the countdown digits - cssVariables.color_text = countdownMeta['color_text'] or 'inherit' - - -- Border color for the running countdown element - cssVariables.color_running_border = countdownMeta['color_running_border'] or '#43AC6A' - - -- Background color for the running countdown element - cssVariables.color_running_background = countdownMeta['color_running_background'] or '#43AC6A' - - -- Text color for the running countdown digits (if provided) - cssVariables.color_running_text = countdownMeta['color_running_text'] or nil - - -- Border color for the finished countdown element - cssVariables.color_finished_border = countdownMeta['color_finished_border'] or '#F04124' - - -- Background color for the finished countdown element - cssVariables.color_finished_background = countdownMeta['color_finished_background'] or '#F04124' - - -- Text color for the finished countdown digits (if provided) - cssVariables.color_finished_text = countdownMeta['color_finished_text'] or nil - - -- Border color for the countdown in a warning state - cssVariables.color_warning_border = countdownMeta['color_warning_border'] or '#E6C229' - - -- Background color for the countdown in a warning state - cssVariables.color_warning_background = countdownMeta['color_warning_background'] or '#E6C229' - - -- Text color for the countdown digits in a warning state (if provided) - cssVariables.color_warning_text = countdownMeta['color_warning_text'] or nil - - return cssVariables -end - - --- Pass document-level data into the header to initialize the document. -local function renderCountdownCSSAsset(meta) - - -- Setup different WebR specific initialization variables - local substitutions = cssVariablesToTable(meta) + -- Check if countdown exist; if it doesn't, just exit. + if isVariableEmpty(options) then + return nil + end + + local defaults = { + -- Font size for the countdown element + font_size = "3rem", + -- Margin around the countdown element + margin = "0.6em", + -- Padding within the countdown element + padding = "10px 15px", + -- Shadow applied to the countdown element + box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", + -- Border width of the countdown element + border_width = "0.1875rem", + -- Border radius of the countdown element + border_radius = "0.9rem", + -- Line height of the countdown element + line_height = "1", + -- Border color of the countdown element + color_border = "#ddd", + -- Background color of the countdown element + color_background = "inherit", + -- Text color of the countdown element + color_text = "inherit", + -- Background color when the countdown is running + color_running_background = "#43AC6A", + -- Border color when the countdown is running + color_running_border = "#43AC6A", -- Needs color_darken() + -- Text color when the countdown is running + color_running_text = 'inherit', + -- Background color when the countdown is finished + color_finished_background = "#F04124", + -- Border color when the countdown is finished + color_finished_border = "#F04124", -- Needs color_darken() + -- Text color when the countdown is finished + color_finished_text = 'inherit', + -- Background color when the countdown has a warning + color_warning_background = "#E6C229", + -- Border color when the countdown has a warning + color_warning_border = "#E6C229", -- Needs color_darken() + -- Text color when the countdown has a warning + color_warning_text = 'inherit', + -- Selector for the countdown element + selector = "root" + } - -- Make sure we perform a copy - local cssInitializationTemplate = readTemplateFile("assets/countdown.css.in") - -- Make the necessary substitutions - local configuredCSS = substituteInFile(cssInitializationTemplate, substitutions) + -- Pass defaults into make_countdown_css + for key, default_value in pairs(defaults) do + options[key] = getOption(options, key, default_value) + end + -- Embed into the document to avoid rendering to disk and, then, embedding a URL. - quarto.doc.include_text('in-header', "") + -- quarto.doc.include_text('in-header', "") -- Note: This feature or using `add_supporting` requires Quarto v1.4 or above - return true end - -- Handle embedding/creation of assets once local function ensureHTMLDependency(meta) quarto.doc.addHtmlDependency({ @@ -178,7 +156,14 @@ local function ensureHTMLDependency(meta) scripts = { "assets/countdown.js"} }) - renderCountdownCSSAsset(meta) + quarto.doc.addHtmlDependency({ + name = "countdowncss", + version = countdownEmbeddedVersion, + scripts = { "assets/countdown.css"} + }) + + -- Embed custom settings into the document based on document-level settings + countdown_style(meta) -- Disable re-exporting if no-longer needed needsToExportDependencies = false @@ -209,6 +194,8 @@ local function countdown(args, kwargs, meta) ensureHTMLDependency(meta) end + + -- Determine if a warning should be given local warn_when = tonumber(pandoc.utils.stringify(kwargs["data-warn-when"])) or 0 From 998fcc1ae4cd0bc6fb578582d476add541732266 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 11:43:20 +0000 Subject: [PATCH 12/35] Revamp the main shortcode logic to use getOption() --- quarto/_extensions/countdown/countdown.lua | 33 ++++++++++------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 72a0d2c..112603e 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -172,9 +172,9 @@ end local function countdown(args, kwargs, meta) -- Retrieve named time arguments and fallback on default values if missing - local minutes = tonumber(pandoc.utils.stringify(kwargs["minutes"])) or 1 - local seconds = tonumber(pandoc.utils.stringify(kwargs["seconds"])) or 0 - + local minutes = tonumber(getOption(kwargs, "minutes", 1)) + local seconds = tonumber(getOption(kwargs, "seconds", 0)) + -- Calculate total time in seconds local time = minutes * 60 + seconds @@ -194,32 +194,29 @@ local function countdown(args, kwargs, meta) ensureHTMLDependency(meta) end - - -- Determine if a warning should be given - local warn_when = tonumber(pandoc.utils.stringify(kwargs["data-warn-when"])) or 0 - - -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp (possible switch over to running counter) - local id = pandoc.utils.stringify(kwargs["id"]) or ("timer_" .. pandoc.utils.sha1(tostring(os.time()))) + local warn_when = tonumber(getOption(kwargs, "data-warn-when", 0)) + + -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp + local id = getOption(kwargs, "id", "timer_" .. pandoc.utils.sha1(tostring(os.time()))) -- Construct the 'class' attribute by appending "countdown" to the existing class (if any) - local class = "countdown " .. (pandoc.utils.stringify(kwargs["class"]) or "") + local class = "countdown " .. getOption(kwargs, "class", "") -- Retrieve and convert "data-update-every" attribute to a number, default to 1 if not present or invalid - local update_every = tonumber(pandoc.utils.stringify(kwargs["data-update-every"])) or 1 - + local update_every = tonumber(getOption(kwargs, "data-update-every", 1)) + -- Retrieve "data-play-sound" attribute as a string, default to "false" if not present - local play_sound = pandoc.utils.stringify(kwargs["data-play-sound"]) or "false" - + local play_sound = getOption(kwargs, "data-play-sound", "false") + -- Retrieve "data-blink-colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false - local blink_colon = pandoc.utils.stringify(kwargs["data-blink-colon"]) or "false" + local blink_colon = getOption(kwargs, "data-blink-colon", "false") -- Retrieve "data-start-immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false - local start_immediately = pandoc.utils.stringify(kwargs["data-start-immediately"]) or "true" + local start_immediately = getOption(kwargs, "data-start-immediately", "true") - -- Construct the style attribute based on element attributes - local style = pandoc.utils.stringify(kwargs["style"]) or "" + -- Construct the style attribute based on element attributes -- Concatenate style properties with their values using %:?% from kwargs local styleKeys = {"top", "right", "bottom", "left", "margin", "padding", "font_size", "line_height"} local style = "" From 643474569ed1f25c03f6963f73f0beac4e5c8468 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 22 Jan 2024 11:47:01 +0000 Subject: [PATCH 13/35] Remove whisker-like substitution --- quarto/_extensions/countdown/countdown.lua | 44 +--------------------- 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 112603e..bb5afaf 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -30,16 +30,6 @@ local function getOption(options, key, default) return tryOption(options, key) or default end --- Utility function to perform whisker-like substitution -local function substituteInFile(contents, substitutions) - - -- Substitute values in the contents of the file - contents = contents:gsub("{{%s*(.-)%s*}}", substitutions) - - -- Return the contents of the file with substitutions - return contents -end - -- Define the infix operator %:?% to handle styling if missing function safeStyle(x, y) if isVariablePopulated(x) then @@ -50,38 +40,6 @@ function safeStyle(x, y) return "" end --- Obtain a template file -local function readTemplateFile(template) - -- Create a hard coded path - local path = quarto.utils.resolve_path(template) - - -- Open the template file - local file = io.open(path, "r") - - -- Check if null pointer before grabbing content - if not file then - quarto.log.error( - "\nWe were unable to read the template file `" .. template .. "` from the extension directory.\n\n" .. - "Double check that the extension is fully available by comparing the \n" .. - "`_extensions/gadenbuie/countdown` directory with the main repository:\n" .. - "https://github.com/gadenbuie/countdown/tree/main/quarto/_extensions/countdown\n\n" .. - "You may need to modify `.gitignore` to allow the extension files using:\n" .. - "!_extensions/*/*/*/*\n") - - return nil - end - - -- *a or *all reads the whole file - local content = file:read "*a" - - -- Close the file - file:close() - - -- Return contents - return content -end - - function countdown_style(meta) -- Retrieve the countdown options from meta @@ -174,7 +132,7 @@ local function countdown(args, kwargs, meta) -- Retrieve named time arguments and fallback on default values if missing local minutes = tonumber(getOption(kwargs, "minutes", 1)) local seconds = tonumber(getOption(kwargs, "seconds", 0)) - + -- Calculate total time in seconds local time = minutes * 60 + seconds From e9a6ef7421ca83bcf5badb6043a705dcc2908248 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Wed, 24 Jan 2024 02:16:25 +0000 Subject: [PATCH 14/35] Clean up default option registeration --- quarto/_extensions/countdown/countdown.lua | 45 +++++++++++----------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index bb5afaf..6d74d62 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -31,7 +31,7 @@ local function getOption(options, key, default) end -- Define the infix operator %:?% to handle styling if missing -function safeStyle(x, y) +local function safeStyle(x, y) if isVariablePopulated(x) then -- quarto.log.output("Hi!") -- quarto.log.output(x) @@ -40,7 +40,7 @@ function safeStyle(x, y) return "" end -function countdown_style(meta) +local function countdown_style(meta) -- Retrieve the countdown options from meta local options = meta.countdown @@ -108,16 +108,14 @@ end -- Handle embedding/creation of assets once local function ensureHTMLDependency(meta) - quarto.doc.addHtmlDependency({ - name = "countdownjs", - version = countdownEmbeddedVersion, - scripts = { "assets/countdown.js"} - }) + -- Register _all_ assets together. quarto.doc.addHtmlDependency({ - name = "countdowncss", + name = "countdown", version = countdownEmbeddedVersion, - scripts = { "assets/countdown.css"} + scripts = { "assets/countdown.js"}, + stylesheets = { "assets/countdown.css"}, + resources = {"assets/smb_stage_clear.mp3"} }) -- Embed custom settings into the document based on document-level settings @@ -152,27 +150,27 @@ local function countdown(args, kwargs, meta) ensureHTMLDependency(meta) end - -- Determine if a warning should be given - local warn_when = tonumber(getOption(kwargs, "data-warn-when", 0)) - -- Retrieve the ID given by the user or attempt to create a unique ID by timestamp local id = getOption(kwargs, "id", "timer_" .. pandoc.utils.sha1(tostring(os.time()))) -- Construct the 'class' attribute by appending "countdown" to the existing class (if any) - local class = "countdown " .. getOption(kwargs, "class", "") + local class = getOption(kwargs, "class", "") + class = class ~= "" and "countdown " .. class or "countdown" - -- Retrieve and convert "data-update-every" attribute to a number, default to 1 if not present or invalid - local update_every = tonumber(getOption(kwargs, "data-update-every", 1)) - - -- Retrieve "data-play-sound" attribute as a string, default to "false" if not present - local play_sound = getOption(kwargs, "data-play-sound", "false") + -- Determine if a warning should be given + local warn_when = tonumber(getOption(kwargs, "warn_when", 0)) + + -- Retrieve and convert "update_every" attribute to a number, default to 1 if not present or invalid + local update_every = tonumber(getOption(kwargs, "update_every", 1)) - -- Retrieve "data-blink-colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false - local blink_colon = getOption(kwargs, "data-blink-colon", "false") + -- Retrieve "blink_colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false + local blink_colon = getOption(kwargs, "blink_colon", update_every > 1) - -- Retrieve "data-start-immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false - local start_immediately = getOption(kwargs, "data-start-immediately", "true") + -- Retrieve "start_immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false + local start_immediately = getOption(kwargs, "start_immediately", "false") == "true" + -- Retrieve "play_sound" attribute as a string, default to "false" if not present + local play_sound = getOption(kwargs, "play_sound", "false") -- Construct the style attribute based on element attributes -- Concatenate style properties with their values using %:?% from kwargs @@ -204,6 +202,9 @@ string.format("%02d", seconds) .. [[

]] + + quarto.log.output(rawHtml) + -- Return a new Div element with modified attributes return pandoc.RawBlock("html", rawHtml) end From cce279219a82785bd1fbcae3a41e9e55f4477dde Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Wed, 24 Jan 2024 03:20:18 +0000 Subject: [PATCH 15/35] Update default colors --- quarto/_extensions/countdown/countdown.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 6d74d62..678f916 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -74,19 +74,19 @@ local function countdown_style(meta) -- Background color when the countdown is running color_running_background = "#43AC6A", -- Border color when the countdown is running - color_running_border = "#43AC6A", -- Needs color_darken() + color_running_border = "#2A9B59FF", -- Needs color_darken() -- Text color when the countdown is running color_running_text = 'inherit', -- Background color when the countdown is finished color_finished_background = "#F04124", -- Border color when the countdown is finished - color_finished_border = "#F04124", -- Needs color_darken() + color_finished_border = "#DE3000FF", -- Needs color_darken() -- Text color when the countdown is finished color_finished_text = 'inherit', -- Background color when the countdown has a warning color_warning_background = "#E6C229", -- Border color when the countdown has a warning - color_warning_border = "#E6C229", -- Needs color_darken() + color_warning_border = "#CEAC04FF", -- Needs color_darken() -- Text color when the countdown has a warning color_warning_text = 'inherit', -- Selector for the countdown element @@ -164,7 +164,7 @@ local function countdown(args, kwargs, meta) local update_every = tonumber(getOption(kwargs, "update_every", 1)) -- Retrieve "blink_colon" attribute and set 'blink_colon' to true if it equals "true", otherwise false - local blink_colon = getOption(kwargs, "blink_colon", update_every > 1) + local blink_colon = getOption(kwargs, "blink_colon", update_every > 1) == "true" -- Retrieve "start_immediately" attribute and set 'start_immediately' to true if it equals "true", otherwise false local start_immediately = getOption(kwargs, "start_immediately", "false") == "true" From 36ad034427ec65c4e985d13de4de91256f26daf1 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Wed, 24 Jan 2024 09:53:17 +0000 Subject: [PATCH 16/35] Add tryPlaySound --- quarto/_extensions/countdown/countdown.lua | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 678f916..bbe5e54 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -30,6 +30,18 @@ local function getOption(options, key, default) return tryOption(options, key) or default end +-- Check whether the play_sound parameter contains `"true"`/`"false"` or +-- if it is a custom path +local function tryPlaySound(play_sound) + if play_sound == "true" then + return "true" + elseif type(play_sound) == "string" and string.len(play_sound) > 0 then + return play_sound + else + return "false" + end +end + -- Define the infix operator %:?% to handle styling if missing local function safeStyle(x, y) if isVariablePopulated(x) then @@ -170,7 +182,7 @@ local function countdown(args, kwargs, meta) local start_immediately = getOption(kwargs, "start_immediately", "false") == "true" -- Retrieve "play_sound" attribute as a string, default to "false" if not present - local play_sound = getOption(kwargs, "play_sound", "false") + local play_sound = tryPlaySound(getOption(kwargs, "play_sound", "false")) -- Construct the style attribute based on element attributes -- Concatenate style properties with their values using %:?% from kwargs From 8db8c68ffd8fd105a84bd76ffc24bc49fce3b4e4 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Wed, 24 Jan 2024 22:18:32 +0000 Subject: [PATCH 17/35] Handle inline styling options --- quarto/_extensions/countdown/countdown.lua | 40 +++++++++++++++------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index bbe5e54..f06be64 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -43,15 +43,32 @@ local function tryPlaySound(play_sound) end -- Define the infix operator %:?% to handle styling if missing -local function safeStyle(x, y) - if isVariablePopulated(x) then - -- quarto.log.output("Hi!") - -- quarto.log.output(x) - return y .. ":" .. pandoc.utils.stringify(x) .. ";" +local function safeStyle(options, key) + -- Attempt to retrieve the style option + local style_option = tryOption(options, key) + -- If it is present, format it as a CSS value + if isVariablePopulated(style_option) then + return key .. ":" .. pandoc.utils.stringify(style_option) .. ";" end + -- Otherwise, return an empty string that when concatenated does nothing. return "" end +-- Construct the inline CSS style attributes +local function cssInline(options) + -- Concatenate style properties with their values using %:?% from kwargs + local styleKeys = {"top", "right", "bottom", "left", "margin", "padding", "font_size", "line_height"} + local styleTable = {} + + -- Build the style + for i, key in ipairs(styleKeys) do + styleTable[i] = safeStyle(options, key) + end + + -- Concatenate entries together + return table.concat(styleTable) +end + local function countdown_style(meta) -- Retrieve the countdown options from meta @@ -184,14 +201,11 @@ local function countdown(args, kwargs, meta) -- Retrieve "play_sound" attribute as a string, default to "false" if not present local play_sound = tryPlaySound(getOption(kwargs, "play_sound", "false")) - -- Construct the style attribute based on element attributes - -- Concatenate style properties with their values using %:?% from kwargs - local styleKeys = {"top", "right", "bottom", "left", "margin", "padding", "font_size", "line_height"} - local style = "" - - for _, key in ipairs(styleKeys) do - style = style .. safeStyle(kwargs[key], key) - end + -- Retrieve positional outcome and handle custom value substitution to ensure appropriate positioning + kwargs["bottom"] = tryOption(kwargs, "bottom") or getOption(kwargs, "top", "0") + kwargs["right"] = tryOption(kwargs, "right") or getOption(kwargs, "left", "0") + + local style = cssInline(kwargs) local rawHtml = [[
Date: Fri, 26 Jan 2024 12:08:34 +0000 Subject: [PATCH 18/35] Document options that are supported in the README --- quarto/README.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/quarto/README.md b/quarto/README.md index 6ff9d97..bb98002 100644 --- a/quarto/README.md +++ b/quarto/README.md @@ -20,13 +20,94 @@ This command will download and install the extension under the `_extensions` sub ## Usage -To embed a countdown clock, use the `{{< countdown >}}` shortcode. For example: +To embed a countdown clock, use the `{{< countdown >}}` shortcode. For example, a countdown clock can be created by writing anywhere: ```default {{< countdown >}} +``` + +For a longer or shorter countdown, specify the `minutes` and `seconds` options: + +```default {{< countdown minutes=5 seconds=30 >}} ``` +There are many more customizations to choose from. See the next section for more details. + +### Customizations + +The extensions offers similar features to the R package version of `countdown`. In particular, we support a document-level set of style options and individual options. + +#### In-line options + +The `countdown` timer shortcode has a variety of customizations that can be set. The customizations can be split between functionality and style. + +The functionality options are: + +| Option | Default Value | Description | +| ------------------- | ------------------------------- | ------------------------------------------------------------------------- | +| `minutes` | `1` | Number of minutes with a total cap of 100 minutes | +| `seconds` | `0` | Number of seconds | +| `id` | SHA-1 hash of current timestamp | ID attribute of the HTML element. | +| `class` | "countdown" | Class attribute of the HTML element. | +| `warn_when` | `0` | Number of seconds before the countdown displays a warning. | +| `update_every` | `1` | Frequency at which the countdown should be updated, in seconds. | +| `play_sound` | `"false"` | Boolean indicating whether to play a sound during the countdown. | +| `blink_colon` | `"false"` | Boolean indicating whether the colon in the countdown should blink. | +| `start_immediately` | `"false"` | Boolean indicating whether the countdown should start immediately. | + +The style options are: + +| Style Option | Default Value | Description | +| ------------- | ---------------------------- | ------------------------------------------------------------------------- | +| `top` | `""` (empty) | Top position of the HTML element. | +| `right` | `"0"` | Right position of the HTML element. | +| `bottom` | `"0"` | Bottom position of the HTML element. | +| `left` | `""` (empty) | Left position of the HTML element. | +| `margin` | `"0.6em"` | Margin around the HTML element. | +| `padding` | `"10px 15px"` | Padding within the HTML element. | +| `font-size` | `"3rem"` | Font size of the HTML element. | +| `line-height` | `"1"` | Line height of the HTML element. | +| `style` | Computed based on attributes | String constructed based on style-related attributes of the HTML element. | + +#### Document-level Options + +Document level options can be specified by placing in the document's header: + +```yaml +--- +title: "Example document-level settings" +countdown: + option: value +--- +``` + +The following options are implemented: + +| Option | Default Value | Description | +| --------------------------- | ------------------------------------------ | ------------------------------------------------- | +| `font_size` | `"3rem"` | Font size for the countdown element | +| `margin` | `"0.6em"` | Margin around the countdown element | +| `padding` | `"10px 15px"` | Padding within the countdown element | +| `box_shadow` | `"0px 4px 10px 0px rgba(50, 50, 50, 0.4)"` | Shadow applied to the countdown element | +| `border_width` | `"0.1875rem"` | Border width of the countdown element | +| `border_radius` | `"0.9rem"` | Border radius of the countdown element | +| `line_height` | `"1"` | Line height of the countdown element | +| `color_border` | `"#ddd"` | Border color of the countdown element | +| `color_background` | `"inherit"` | Background color of the countdown element | +| `color_text` | `"inherit"` | Text color of the countdown element | +| `color_running_background` | `"#43AC6A"` | Background color when the countdown is running | +| `color_running_border` | `"#2A9B59FF"` | Border color when the countdown is running | +| `color_running_text` | `"inherit"` | Text color when the countdown is running | +| `color_finished_background` | `"#F04124"` | Background color when the countdown is finished | +| `color_finished_border` | `"#DE3000FF"` | Border color when the countdown is finished | +| `color_finished_text` | `"inherit"` | Text color when the countdown is finished | +| `color_warning_background` | `"#E6C229"` | Background color when the countdown has a warning | +| `color_warning_border` | `"#CEAC04FF"` | Border color when the countdown has a warning | +| `color_warning_text` | `"inherit"` | Text color when the countdown has a warning | +| `selector` | `"root"` | Selector for the countdown element | + + ## Example You can see a minimal example of the extension in action here: [example.qmd](example.qmd). From d4d7978360eb7bf6da0861682434286a2759bbe1 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 26 Jan 2024 12:16:58 +0000 Subject: [PATCH 19/35] Improve string concatenation speed by using `table.concat()` instead of the multiline approach. Support named extraction of a default table. --- quarto/_extensions/countdown/countdown.lua | 152 ++++++++++++--------- 1 file changed, 85 insertions(+), 67 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index f06be64..1430e8b 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -4,6 +4,67 @@ local countdownEmbeddedVersion = "0.0.1" -- Only embed resources once if there are multiple timers present local needsToExportDependencies = true +-- List CSS default options +local default_style = { + -- Font size for the countdown element + font_size = "3rem", + -- Margin around the countdown element + margin = "0.6em", + -- Padding within the countdown element + padding = "10px 15px", + -- Shadow applied to the countdown element + box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", + -- Border width of the countdown element + border_width = "0.1875rem", + -- Border radius of the countdown element + border_radius = "0.9rem", + -- Line height of the countdown element + line_height = "1", + -- Border color of the countdown element + color_border = "#ddd", + -- Background color of the countdown element + color_background = "inherit", + -- Text color of the countdown element + color_text = "inherit", + -- Background color when the countdown is running + color_running_background = "#43AC6A", + -- Border color when the countdown is running + color_running_border = "#2A9B59FF", -- Needs color_darken() + -- Text color when the countdown is running + color_running_text = 'inherit', + -- Background color when the countdown is finished + color_finished_background = "#F04124", + -- Border color when the countdown is finished + color_finished_border = "#DE3000FF", -- Needs color_darken() + -- Text color when the countdown is finished + color_finished_text = 'inherit', + -- Background color when the countdown has a warning + color_warning_background = "#E6C229", + -- Border color when the countdown has a warning + color_warning_border = "#CEAC04FF", -- Needs color_darken() + -- Text color when the countdown has a warning + color_warning_text = 'inherit', + -- Selector for the countdown element + selector = "root" +} + +-- Extract names from default style table +local function tableKeyNames(namedTable) + + -- Table to store keys + local keysTable = {} + + -- Iterate over keys and store them + for key, _ in pairs(namedTable) do + table.insert(keysTable, key) + end + + return keysTable +end + +-- Store names for default styles +local default_style_names = tableKeyNames(default_style) + -- Check if variable missing or an empty string local function isVariableEmpty(s) return s == nil or s == '' @@ -48,7 +109,7 @@ local function safeStyle(options, key) local style_option = tryOption(options, key) -- If it is present, format it as a CSS value if isVariablePopulated(style_option) then - return key .. ":" .. pandoc.utils.stringify(style_option) .. ";" + return table.concat({key, ":" , pandoc.utils.stringify(style_option), ";"}) end -- Otherwise, return an empty string that when concatenated does nothing. return "" @@ -78,56 +139,13 @@ local function countdown_style(meta) if isVariableEmpty(options) then return nil end - - local defaults = { - -- Font size for the countdown element - font_size = "3rem", - -- Margin around the countdown element - margin = "0.6em", - -- Padding within the countdown element - padding = "10px 15px", - -- Shadow applied to the countdown element - box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", - -- Border width of the countdown element - border_width = "0.1875rem", - -- Border radius of the countdown element - border_radius = "0.9rem", - -- Line height of the countdown element - line_height = "1", - -- Border color of the countdown element - color_border = "#ddd", - -- Background color of the countdown element - color_background = "inherit", - -- Text color of the countdown element - color_text = "inherit", - -- Background color when the countdown is running - color_running_background = "#43AC6A", - -- Border color when the countdown is running - color_running_border = "#2A9B59FF", -- Needs color_darken() - -- Text color when the countdown is running - color_running_text = 'inherit', - -- Background color when the countdown is finished - color_finished_background = "#F04124", - -- Border color when the countdown is finished - color_finished_border = "#DE3000FF", -- Needs color_darken() - -- Text color when the countdown is finished - color_finished_text = 'inherit', - -- Background color when the countdown has a warning - color_warning_background = "#E6C229", - -- Border color when the countdown has a warning - color_warning_border = "#CEAC04FF", -- Needs color_darken() - -- Text color when the countdown has a warning - color_warning_text = 'inherit', - -- Selector for the countdown element - selector = "root" - } - -- Pass defaults into make_countdown_css - for key, default_value in pairs(defaults) do + for key, default_value in pairs(default_style) do options[key] = getOption(options, key, default_value) end + quarto.log.output(default_style_names) -- Embed into the document to avoid rendering to disk and, then, embedding a URL. -- quarto.doc.include_text('in-header', "") @@ -207,27 +225,27 @@ local function countdown(args, kwargs, meta) local style = cssInline(kwargs) - local rawHtml = [[
-
- - -
-]] .. -[[]] .. -string.format("%02d", minutes) .. -[[:]] .. -[[]] .. -string.format("%02d", seconds) .. -[[ -
- ]] + local rawHtml = table.concat({ + '
', + '\n
', + '\n ', + '\n ', + '\n
', + '\n ', + '', string.format("%02d", minutes), + ':', + '', string.format("%02d", seconds), '', + '\n
' + }) quarto.log.output(rawHtml) From 363904042ddf44bf949dc139ba394b9ef5abf4c8 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 26 Jan 2024 12:17:18 +0000 Subject: [PATCH 20/35] Add a few more countdown exmaples --- quarto/example.qmd | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/quarto/example.qmd b/quarto/example.qmd index 0cd1eb5..0b3d62c 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -14,8 +14,24 @@ Please make sure you are on Quarto version 1.4.545 or greater. {{< countdown >}} +# Less time -# More time +{{< countdown minutes=0 seconds=20 >}} -{{< countdown minutes=2 seconds=20 >}} +# Non-standard position +Some content + +{{< countdown minutes=2 top=0 right=0 >}} + +# Add class + +{{< countdown minutes=0 seconds=5 class="testing" >}} + +# Sound + +{{< countdown minutes=0 seconds=1 play_sound=true >}} + +# Custom Sound + +{{< countdown minutes=0 seconds=1 play_sound='test-beep.mp3' >}} \ No newline at end of file From 71d83afdb432dce0bd44d842f6a856b636aa8a6f Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sat, 27 Jan 2024 10:59:56 +0000 Subject: [PATCH 21/35] Enable setting global options with the `countdown` meta key. --- quarto/_extensions/countdown/countdown.lua | 83 ++++++++++++++++++---- quarto/example.qmd | 3 + 2 files changed, 73 insertions(+), 13 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 1430e8b..db2cdc0 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -75,10 +75,26 @@ local function isVariablePopulated(s) return not isVariableEmpty(s) end +-- Check if a table is empty +local function isTableEmpty(tbl) + return next(tbl) == nil +end + +-- Check if a table is populated +local function isTablePopulated(tbl) + return not isTableEmpty(tbl) +end + -- Check whether an argument is present in kwargs -- If it is, return the value local function tryOption(options, key) - option_value = pandoc.utils.stringify(options[key]) + + -- Protect against an empty options + if not (options and options[key]) then + return nil + end + + local option_value = pandoc.utils.stringify(options[key]) if isVariablePopulated(option_value) then return option_value else @@ -94,8 +110,8 @@ end -- Check whether the play_sound parameter contains `"true"`/`"false"` or -- if it is a custom path local function tryPlaySound(play_sound) - if play_sound == "true" then - return "true" + if play_sound == "false" or play_sound == "true" then + return play_sound elseif type(play_sound) == "string" and string.len(play_sound) > 0 then return play_sound else @@ -103,6 +119,23 @@ local function tryPlaySound(play_sound) end end +-- Function that deletes entries that contain 'nil' +function removeEmptyEntries(tableWithNilEntries) + + -- Define a table to keep full entries + local cleanedTable = {} + + -- Iterate across the table, retain full entries + for key, value in pairs(tableWithNilEntries) do + if isVariablePopulated(value) then + cleanedTable[key] = value + end + end + + -- Return cleaned tables + return cleanedTable +end + -- Define the infix operator %:?% to handle styling if missing local function safeStyle(options, key) -- Attempt to retrieve the style option @@ -130,25 +163,49 @@ local function cssInline(options) return table.concat(styleTable) end -local function countdown_style(meta) +local function structureCountdownCSSVars(options) + local dots = {} - -- Retrieve the countdown options from meta - local options = meta.countdown + for key, value in pairs(options) do + table.insert(dots, string.format("--countdown-%s: %s;", key:gsub("_", "-"), value)) + end - -- Check if countdown exist; if it doesn't, just exit. - if isVariableEmpty(options) then + return dots +end + +local function countdown_style(options, defaults) + + -- Check if options have values; if it is empty, just exit. + if isVariableEmpty(options) or isTableEmpty(options) then return nil end + -- Determine the selector value + local possibleSelector = getOption(options, "selector", defaults.selector) + + -- Begin CSS Variables + local cssTable = {} + -- Pass defaults into make_countdown_css - for key, default_value in pairs(default_style) do - options[key] = getOption(options, key, default_value) + for key, defaultValue in pairs(defaults) do + -- Assign into the CSS table if key is present + cssTable[key] = getOption(options, key, defaultValue) end - quarto.log.output(default_style_names) + -- Delete the selector key (after the fact) + cssTable["selector"] = nil + + -- Restructure options to ("--countdown-: ;) + local structuredCSS = structureCountdownCSSVars(cssTable) -- Embed into the document to avoid rendering to disk and, then, embedding a URL. - -- quarto.doc.include_text('in-header', "") + quarto.doc.include_text('in-header', + string.format( + "\n", + possibleSelector, + table.concat(structuredCSS) + ) + ) -- Note: This feature or using `add_supporting` requires Quarto v1.4 or above end @@ -166,7 +223,7 @@ local function ensureHTMLDependency(meta) }) -- Embed custom settings into the document based on document-level settings - countdown_style(meta) + countdown_style(meta.countdown, default_style) -- Disable re-exporting if no-longer needed needsToExportDependencies = false diff --git a/quarto/example.qmd b/quarto/example.qmd index 0b3d62c..1039ab8 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -1,5 +1,8 @@ --- title: "Countdown Example" +countdown: + font_size: 4rem + color_background: "lightblue" format: revealjs --- From a116aca0a87b5f6bc18d67fbc05e55b3a107ab0b Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 00:20:14 -0800 Subject: [PATCH 22/35] Apply suggestions from code review Co-authored-by: Garrick Aden-Buie --- .gitignore | 3 +-- quarto/README.md | 2 +- .../countdown/assets/countdown.css | 8 +++++- quarto/_extensions/countdown/countdown.lua | 27 ++++++++++++++++--- quarto/example.qmd | 2 +- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index bf3990c..74ae8f8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,7 @@ .DS_Store # Directories that start with _ -#_*/ # Unblock to allow for Quarto. -!_snaps/ +_dev/ ## https://github.com/github/gitignore/blob/master/R.gitignore # History files diff --git a/quarto/README.md b/quarto/README.md index bb98002..afb9d12 100644 --- a/quarto/README.md +++ b/quarto/README.md @@ -48,7 +48,7 @@ The functionality options are: | ------------------- | ------------------------------- | ------------------------------------------------------------------------- | | `minutes` | `1` | Number of minutes with a total cap of 100 minutes | | `seconds` | `0` | Number of seconds | -| `id` | SHA-1 hash of current timestamp | ID attribute of the HTML element. | +| `id` | A generated, unique ID | ID attribute of the HTML element. | | `class` | "countdown" | Class attribute of the HTML element. | | `warn_when` | `0` | Number of seconds before the countdown displays a warning. | | `update_every` | `1` | Frequency at which the countdown should be updated, in seconds. | diff --git a/quarto/_extensions/countdown/assets/countdown.css b/quarto/_extensions/countdown/assets/countdown.css index 6118d98..6edffcf 100644 --- a/quarto/_extensions/countdown/assets/countdown.css +++ b/quarto/_extensions/countdown/assets/countdown.css @@ -1,4 +1,5 @@ .countdown { + --_margin: 0.6em; --_running-color: var(--countdown-color-running-text, rgba(0, 0, 0, 0.8)); --_running-background: var(--countdown-color-running-background, #43AC6A); --_running-border-color: var(--countdown-color-running-border, rgba(0, 0, 0, 0.1)); @@ -19,7 +20,7 @@ border-style: solid; border-radius: var(--countdown-border-radius, 0.9rem); box-shadow: var(--countdown-box-shadow, 0px 4px 10px 0px rgba(50, 50, 50, 0.4)); - margin: var(--countdown-margin, 0.6em); + margin: var(--countdown-margin, var(--_margin, 0.6em)); padding: var(--countdown-padding, 0.625rem 0.9rem); text-align: center; z-index: 10; @@ -152,6 +153,11 @@ --_button-bump: 0; } +/* ---- Quarto Reveal.js ---- */ +.reveal .countdown { + --_margin: 0; +} + /* ----- Fullscreen ----- */ .countdown.countdown-fullscreen { z-index: 0; diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index db2cdc0..19deb82 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -229,11 +229,32 @@ local function ensureHTMLDependency(meta) needsToExportDependencies = false end +local function parseTimeString(args) + if #args == 0 or type(args[1]) ~= "string" then + return nil + end + + local minutes, seconds = args[1]:match("(%d+):(%d+)") + if minutes == nil or seconds == nil then + quarto.log.error("The quartodown time string must be in the format 'MM:SS'.") + end + + return { minutes = tonumber(minutes), seconds = tonumber(seconds) } +end + local function countdown(args, kwargs, meta) - + local minutes, seconds + -- Retrieve named time arguments and fallback on default values if missing - local minutes = tonumber(getOption(kwargs, "minutes", 1)) - local seconds = tonumber(getOption(kwargs, "seconds", 0)) + arg_time = parseTimeString(args) + if arg_time ~= nil then + -- TODO: Warn if minutes/seconds were kwargs + minutes = arg_time.minutes + seconds = arg_time.seconds + else + minutes = tonumber(getOption(kwargs, "minutes", 1)) + seconds = tonumber(getOption(kwargs, "seconds", 0)) + end -- Calculate total time in seconds local time = minutes * 60 + seconds diff --git a/quarto/example.qmd b/quarto/example.qmd index 1039ab8..5b5540e 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -13,7 +13,7 @@ Please make sure you are on Quarto version 1.4.545 or greater. ::: -# Default timer +## Default timer {{< countdown >}} From 381b94e104d92d08239564ef4b101d09dcfba4e2 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 09:38:15 +0000 Subject: [PATCH 23/35] Fix headers throughout example doc --- quarto/example.qmd | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/quarto/example.qmd b/quarto/example.qmd index 5b5540e..794d639 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -6,7 +6,7 @@ countdown: format: revealjs --- -# A note before we begin... +## A note before we begin... :::{.callout-important} Please make sure you are on Quarto version 1.4.545 or greater. @@ -17,24 +17,24 @@ Please make sure you are on Quarto version 1.4.545 or greater. {{< countdown >}} -# Less time +## Less time {{< countdown minutes=0 seconds=20 >}} -# Non-standard position +## Non-standard position Some content {{< countdown minutes=2 top=0 right=0 >}} -# Add class +## Add class {{< countdown minutes=0 seconds=5 class="testing" >}} -# Sound +## Sound {{< countdown minutes=0 seconds=1 play_sound=true >}} -# Custom Sound +## Custom Sound {{< countdown minutes=0 seconds=1 play_sound='test-beep.mp3' >}} \ No newline at end of file From 2dd2da96af33abcef0c7061229dffb1b7cf13068 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 09:43:14 +0000 Subject: [PATCH 24/35] Add timestring example & omit warning if minutes/seconds were in kwargs. --- quarto/_extensions/countdown/countdown.lua | 10 ++++++++-- quarto/example.qmd | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 19deb82..fa5d339 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -229,6 +229,7 @@ local function ensureHTMLDependency(meta) needsToExportDependencies = false end +-- Process unnamed time string format local function parseTimeString(args) if #args == 0 or type(args[1]) ~= "string" then return nil @@ -247,10 +248,15 @@ local function countdown(args, kwargs, meta) -- Retrieve named time arguments and fallback on default values if missing arg_time = parseTimeString(args) - if arg_time ~= nil then - -- TODO: Warn if minutes/seconds were kwargs + if isVariablePopulated(arg_time) then minutes = arg_time.minutes seconds = arg_time.seconds + if isVariablePopulated(tryOption(kwargs, "minutes")) or + isVariablePopulated(tryOption(kwargs, "seconds")) then + quarto.log.warning( + "Please do not specify `minutes` or `seconds` parameters" .. + "when using the time string format.") + end else minutes = tonumber(getOption(kwargs, "minutes", 1)) seconds = tonumber(getOption(kwargs, "seconds", 0)) diff --git a/quarto/example.qmd b/quarto/example.qmd index 794d639..7eb3581 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -21,9 +21,15 @@ Please make sure you are on Quarto version 1.4.545 or greater. {{< countdown minutes=0 seconds=20 >}} -## Non-standard position +## Time string + +{{< countdown "1:23">}} + +## Time string -Some content +{{< countdown "1:23" minutes="1" seconds="23">}} + +## Non-standard position {{< countdown minutes=2 top=0 right=0 >}} From e737fea401780117e3818594dd03ad7ffbd0f4af Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 09:56:37 +0000 Subject: [PATCH 25/35] Update empty timer position defaults --- quarto/_extensions/countdown/countdown.lua | 11 ++++++++--- quarto/example.qmd | 16 +++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index fa5d339..ce2175d 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -303,9 +303,14 @@ local function countdown(args, kwargs, meta) -- Retrieve "play_sound" attribute as a string, default to "false" if not present local play_sound = tryPlaySound(getOption(kwargs, "play_sound", "false")) - -- Retrieve positional outcome and handle custom value substitution to ensure appropriate positioning - kwargs["bottom"] = tryOption(kwargs, "bottom") or getOption(kwargs, "top", "0") - kwargs["right"] = tryOption(kwargs, "right") or getOption(kwargs, "left", "0") + -- Check to see if positional outcomes are set; if not, default both bottom and right to 0. + if isVariableEmpty(tryOption(kwargs, "top")) and + isVariableEmpty(tryOption(kwargs, "left")) and + isVariableEmpty(tryOption(kwargs, "right")) and + isVariableEmpty(tryOption(kwargs, "bottom")) then + kwargs["bottom"] = 0 + kwargs["right"] = 0 + end local style = cssInline(kwargs) diff --git a/quarto/example.qmd b/quarto/example.qmd index 7eb3581..766c0f1 100644 --- a/quarto/example.qmd +++ b/quarto/example.qmd @@ -17,21 +17,19 @@ Please make sure you are on Quarto version 1.4.545 or greater. {{< countdown >}} -## Less time - -{{< countdown minutes=0 seconds=20 >}} - ## Time string -{{< countdown "1:23">}} - -## Time string +{{< countdown "1:23" >}} -{{< countdown "1:23" minutes="1" seconds="23">}} +{{< countdown "12:53" minutes="12" seconds="53" left=0 bottom=0 >}} ## Non-standard position -{{< countdown minutes=2 top=0 right=0 >}} +{{< countdown minutes=1 top=0 right=0 >}} + +{{< countdown minutes=2 bottom=0 left=0 >}} + +{{< countdown minutes=3 bottom=0 right=0 >}} ## Add class From e0ac982d57a17fb3f3229d50e4ba24b838751259 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 09:57:42 +0000 Subject: [PATCH 26/35] Remove spurious whitespace addition post merge commit. --- lib/countdown.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/countdown.js b/lib/countdown.js index 34bf944..76379e2 100644 --- a/lib/countdown.js +++ b/lib/countdown.js @@ -274,7 +274,6 @@ class CountdownTimer { } } - stop ({manual = false} = {}) { const { remaining } = this.remainingTime() if (remaining > 1) { From ac8949704949bc899550e87ee39b0233c0cb882a Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sun, 28 Jan 2024 10:02:31 +0000 Subject: [PATCH 27/35] Make sure to force an error and touch up the error --- quarto/_extensions/countdown/countdown.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index ce2175d..a3e7994 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -237,7 +237,11 @@ local function parseTimeString(args) local minutes, seconds = args[1]:match("(%d+):(%d+)") if minutes == nil or seconds == nil then - quarto.log.error("The quartodown time string must be in the format 'MM:SS'.") + quarto.log.error( + "The quartodown time string must be in the format 'MM:SS'.\n" .. + "Please correct countdown timer with time string given as `" .. args[1] .. "`" + ) + assert("true" == "false") end return { minutes = tonumber(minutes), seconds = tonumber(seconds) } From ef9f405213a6a1280ee60e7459703ed19c72e854 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Mon, 29 Jan 2024 02:42:00 -0800 Subject: [PATCH 28/35] Apply suggestions from code review Co-authored-by: Garrick Aden-Buie --- quarto/_extensions/countdown/countdown.lua | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index a3e7994..ddb4c5b 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -251,7 +251,7 @@ local function countdown(args, kwargs, meta) local minutes, seconds -- Retrieve named time arguments and fallback on default values if missing - arg_time = parseTimeString(args) + local arg_time = parseTimeString(args) if isVariablePopulated(arg_time) then minutes = arg_time.minutes seconds = arg_time.seconds @@ -308,11 +308,13 @@ local function countdown(args, kwargs, meta) local play_sound = tryPlaySound(getOption(kwargs, "play_sound", "false")) -- Check to see if positional outcomes are set; if not, default both bottom and right to 0. - if isVariableEmpty(tryOption(kwargs, "top")) and - isVariableEmpty(tryOption(kwargs, "left")) and - isVariableEmpty(tryOption(kwargs, "right")) and + if isVariableEmpty(tryOption(kwargs, "top")) and isVariableEmpty(tryOption(kwargs, "bottom")) then - kwargs["bottom"] = 0 + kwargs["bottom"] = 0 + end + + if isVariableEmpty(tryOption(kwargs, "left")) and + isVariableEmpty(tryOption(kwargs, "right")) then kwargs["right"] = 0 end From 69df9f5e827c0540ac3c41fe9a9dc1da9c10ae2a Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 2 Feb 2024 10:25:04 +0000 Subject: [PATCH 29/35] Restructure defaults to only be a table of CSS variable names. Condense structureCSSCountdown Vars() to match positional options (`key: value;`) and countdown CSS variables (`---countdown-key: value;`) Add documentation on parseTimeString --- quarto/_extensions/countdown/countdown.lua | 170 +++++++-------------- 1 file changed, 55 insertions(+), 115 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index ddb4c5b..8524f14 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -5,66 +5,28 @@ local countdownEmbeddedVersion = "0.0.1" local needsToExportDependencies = true -- List CSS default options -local default_style = { - -- Font size for the countdown element - font_size = "3rem", - -- Margin around the countdown element - margin = "0.6em", - -- Padding within the countdown element - padding = "10px 15px", - -- Shadow applied to the countdown element - box_shadow = "0px 4px 10px 0px rgba(50, 50, 50, 0.4)", - -- Border width of the countdown element - border_width = "0.1875rem", - -- Border radius of the countdown element - border_radius = "0.9rem", - -- Line height of the countdown element - line_height = "1", - -- Border color of the countdown element - color_border = "#ddd", - -- Background color of the countdown element - color_background = "inherit", - -- Text color of the countdown element - color_text = "inherit", - -- Background color when the countdown is running - color_running_background = "#43AC6A", - -- Border color when the countdown is running - color_running_border = "#2A9B59FF", -- Needs color_darken() - -- Text color when the countdown is running - color_running_text = 'inherit', - -- Background color when the countdown is finished - color_finished_background = "#F04124", - -- Border color when the countdown is finished - color_finished_border = "#DE3000FF", -- Needs color_darken() - -- Text color when the countdown is finished - color_finished_text = 'inherit', - -- Background color when the countdown has a warning - color_warning_background = "#E6C229", - -- Border color when the countdown has a warning - color_warning_border = "#CEAC04FF", -- Needs color_darken() - -- Text color when the countdown has a warning - color_warning_text = 'inherit', - -- Selector for the countdown element - selector = "root" +local default_style_keys = { + "font_size", + "margin", + "padding", + "box_shadow", + "border_width", + "border_radius", + "line_height", + "color_border", + "color_background", + "color_text", + "color_running_background", + "color_running_border", + "color_running_text", + "color_finished_background", + "color_finished_border", + "color_finished_text", + "color_warning_background", + "color_warning_border", + "color_warning_text" } --- Extract names from default style table -local function tableKeyNames(namedTable) - - -- Table to store keys - local keysTable = {} - - -- Iterate over keys and store them - for key, _ in pairs(namedTable) do - table.insert(keysTable, key) - end - - return keysTable -end - --- Store names for default styles -local default_style_names = tableKeyNames(default_style) - -- Check if variable missing or an empty string local function isVariableEmpty(s) return s == nil or s == '' @@ -94,7 +56,9 @@ local function tryOption(options, key) return nil end + -- Retrieve the option local option_value = pandoc.utils.stringify(options[key]) + -- Verify the option's value exists, return value otherwise nil. if isVariablePopulated(option_value) then return option_value else @@ -119,61 +83,41 @@ local function tryPlaySound(play_sound) end end --- Function that deletes entries that contain 'nil' -function removeEmptyEntries(tableWithNilEntries) - - -- Define a table to keep full entries - local cleanedTable = {} - - -- Iterate across the table, retain full entries - for key, value in pairs(tableWithNilEntries) do - if isVariablePopulated(value) then - cleanedTable[key] = value - end - end - - -- Return cleaned tables - return cleanedTable -end - -- Define the infix operator %:?% to handle styling if missing -local function safeStyle(options, key) +local function safeStyle(options, key, fmtString) -- Attempt to retrieve the style option local style_option = tryOption(options, key) -- If it is present, format it as a CSS value if isVariablePopulated(style_option) then - return table.concat({key, ":" , pandoc.utils.stringify(style_option), ";"}) + return string.format(fmtString, key:gsub("_", "-"), style_option) end -- Otherwise, return an empty string that when concatenated does nothing. return "" end --- Construct the inline CSS style attributes -local function cssInline(options) +-- Construct the CSS style attributes +local function structureCountdownCSSVars(options) -- Concatenate style properties with their values using %:?% from kwargs - local styleKeys = {"top", "right", "bottom", "left", "margin", "padding", "font_size", "line_height"} - local styleTable = {} + local stylePositional = {"top", "right", "bottom", "left"} + local stylePositionalTable = {} + local styleDefaultOptionsTable = {} - -- Build the style - for i, key in ipairs(styleKeys) do - styleTable[i] = safeStyle(options, key) + -- Build the positional style without prefixing countdown variables + for i, key in ipairs(stylePositional) do + stylePositionalTable[i] = safeStyle(options, key, "%s: %s;") end - -- Concatenate entries together - return table.concat(styleTable) -end - -local function structureCountdownCSSVars(options) - local dots = {} - - for key, value in pairs(options) do - table.insert(dots, string.format("--countdown-%s: %s;", key:gsub("_", "-"), value)) + -- Build the countdown variables for styling + for i, key in ipairs(default_style_keys) do + styleDefaultOptionsTable[i] = safeStyle(options, key, "--countdown-%s: %s;") end - return dots + -- Concatenate entries together + return table.concat(stylePositionalTable) .. table.concat(styleDefaultOptionsTable) end -local function countdown_style(options, defaults) +-- Handle global styling options by reading options set in the meta key +local function countdown_style(options) -- Check if options have values; if it is empty, just exit. if isVariableEmpty(options) or isTableEmpty(options) then @@ -181,29 +125,17 @@ local function countdown_style(options, defaults) end -- Determine the selector value - local possibleSelector = getOption(options, "selector", defaults.selector) + local possibleSelector = getOption(options, "selector", "root") - -- Begin CSS Variables - local cssTable = {} - - -- Pass defaults into make_countdown_css - for key, defaultValue in pairs(defaults) do - -- Assign into the CSS table if key is present - cssTable[key] = getOption(options, key, defaultValue) - end - - -- Delete the selector key (after the fact) - cssTable["selector"] = nil - - -- Restructure options to ("--countdown-: ;) - local structuredCSS = structureCountdownCSSVars(cssTable) + -- Restructure options to ("key:value;--countdown-: ;) string + local structuredCSS = structureCountdownCSSVars(options) -- Embed into the document to avoid rendering to disk and, then, embedding a URL. quarto.doc.include_text('in-header', string.format( "\n", possibleSelector, - table.concat(structuredCSS) + structuredCSS ) ) -- Note: This feature or using `add_supporting` requires Quarto v1.4 or above @@ -223,27 +155,35 @@ local function ensureHTMLDependency(meta) }) -- Embed custom settings into the document based on document-level settings - countdown_style(meta.countdown, default_style) + countdown_style(meta.countdown) -- Disable re-exporting if no-longer needed needsToExportDependencies = false end --- Process unnamed time string format +-- Function to parse an unnamed time string argument supplied +-- in the format of 'MM:SS' local function parseTimeString(args) + -- Check if the input argument is provided and is of type string if #args == 0 or type(args[1]) ~= "string" then return nil end + -- Attempt to extract minutes and seconds from the time string local minutes, seconds = args[1]:match("(%d+):(%d+)") - if minutes == nil or seconds == nil then + + -- Check if the pattern matching was successful + if isVariableEmpty(minutes) or isVariableEmpty(seconds) then + -- Log an error message if the format is incorrect quarto.log.error( "The quartodown time string must be in the format 'MM:SS'.\n" .. "Please correct countdown timer with time string given as `" .. args[1] .. "`" ) + -- Raise an assertion error to stop further execution (optional, depending on your requirements) assert("true" == "false") end + -- Return a table containing minutes and seconds as numbers return { minutes = tonumber(minutes), seconds = tonumber(seconds) } end @@ -318,7 +258,7 @@ local function countdown(args, kwargs, meta) kwargs["right"] = 0 end - local style = cssInline(kwargs) + local style = structureCountdownCSSVars(kwargs) local rawHtml = table.concat({ '
Date: Fri, 2 Feb 2024 10:27:36 +0000 Subject: [PATCH 30/35] Fix detection of `false` is supplied as a string by specifically checking for it before attempting to retrieve the sound in `playSound()`. --- lib/countdown.js | 2 +- quarto/_extensions/countdown/assets/countdown.js | 2 +- r/inst/countdown/countdown.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/countdown.js b/lib/countdown.js index 76379e2..27f64b2 100644 --- a/lib/countdown.js +++ b/lib/countdown.js @@ -377,7 +377,7 @@ class CountdownTimer { playSound () { let url = this.play_sound - if (!url) return + if (!url || url === "false") return if (typeof url === 'boolean') { const src = this.src_location ? this.src_location.replace('/countdown.js', '') diff --git a/quarto/_extensions/countdown/assets/countdown.js b/quarto/_extensions/countdown/assets/countdown.js index 76379e2..27f64b2 100644 --- a/quarto/_extensions/countdown/assets/countdown.js +++ b/quarto/_extensions/countdown/assets/countdown.js @@ -377,7 +377,7 @@ class CountdownTimer { playSound () { let url = this.play_sound - if (!url) return + if (!url || url === "false") return if (typeof url === 'boolean') { const src = this.src_location ? this.src_location.replace('/countdown.js', '') diff --git a/r/inst/countdown/countdown.js b/r/inst/countdown/countdown.js index 76379e2..27f64b2 100644 --- a/r/inst/countdown/countdown.js +++ b/r/inst/countdown/countdown.js @@ -377,7 +377,7 @@ class CountdownTimer { playSound () { let url = this.play_sound - if (!url) return + if (!url || url === "false") return if (typeof url === 'boolean') { const src = this.src_location ? this.src_location.replace('/countdown.js', '') From 706af323383301834b9fd882dc8248376b5a842a Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 2 Feb 2024 11:39:30 +0000 Subject: [PATCH 31/35] First pass on improving the README --- quarto/README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/quarto/README.md b/quarto/README.md index afb9d12..86afbd0 100644 --- a/quarto/README.md +++ b/quarto/README.md @@ -1,8 +1,8 @@ -# quarto-countdown: A Quarto Extension for Countdown +# quarto-countdown: Countdown Timers for Quarto HTML Documents and RevealJS slides -The `countdown` extension allows you to incorporate countdown like timers on Quarto HTML Documents and RevealJS slides. +The `countdown` extension for Quarto allows you to incorporate countdown like timers on Quarto HTML Documents and RevealJS slides. -This extension can be used without installing R or the `{countdown}` R Package. +This extension doesn't require the installation of R or the {countdown} R Package. ## Installation @@ -32,11 +32,16 @@ For a longer or shorter countdown, specify the `minutes` and `seconds` options: {{< countdown minutes=5 seconds=30 >}} ``` +Or use a time string formatted in `"MM:SS"` + +```default +{{< countdown "5:30" >}} +``` + There are many more customizations to choose from. See the next section for more details. ### Customizations - -The extensions offers similar features to the R package version of `countdown`. In particular, we support a document-level set of style options and individual options. +The extension offers extensive customization options, akin to the features provided by the R package version of `countdown`. These customizations cover both functionality and style. We support a document-level set of style options and individual options. #### In-line options @@ -72,7 +77,7 @@ The style options are: #### Document-level Options -Document level options can be specified by placing in the document's header: +Document-level options can be specified in the document's header using a YAML key-value format: ```yaml --- From 495103877921c4c611151457963cfb3cb33993c7 Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 2 Feb 2024 11:59:02 +0000 Subject: [PATCH 32/35] One more set of readme tweaks. --- quarto/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/quarto/README.md b/quarto/README.md index 86afbd0..e1adbf1 100644 --- a/quarto/README.md +++ b/quarto/README.md @@ -1,8 +1,8 @@ -# quarto-countdown: Countdown Timers for Quarto HTML Documents and RevealJS slides +# quarto-countdown: Countdown Timers for Quarto RevealJS slides -The `countdown` extension for Quarto allows you to incorporate countdown like timers on Quarto HTML Documents and RevealJS slides. +The `quarto-countdown` extension for [Quarto](https://quarto.org) allows you to incorporate countdown timers on [Quarto RevealJS slides](https://quarto.org/docs/presentations/revealjs/). -This extension doesn't require the installation of R or the {countdown} R Package. +This extension doesn't require the installation of _R_ or the `{countdown}` _R_ Package. ## Installation @@ -41,7 +41,8 @@ Or use a time string formatted in `"MM:SS"` There are many more customizations to choose from. See the next section for more details. ### Customizations -The extension offers extensive customization options, akin to the features provided by the R package version of `countdown`. These customizations cover both functionality and style. We support a document-level set of style options and individual options. + +The extension offers extensive customization options, akin to the features provided by the R package version of `countdown`. These customizations span both functionality and style. They can be configured either at the document level or for each individual timer. #### In-line options From 98a26bb8d0cb3567e7b9f7c9f80c3784585649db Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 2 Feb 2024 19:09:54 -0800 Subject: [PATCH 33/35] Update countdown.lua Co-authored-by: Garrick Aden-Buie --- quarto/_extensions/countdown/countdown.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 8524f14..2980a74 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -133,7 +133,7 @@ local function countdown_style(options) -- Embed into the document to avoid rendering to disk and, then, embedding a URL. quarto.doc.include_text('in-header', string.format( - "\n", + "\n", possibleSelector, structuredCSS ) From 1e72c36b133aaa774d83c691365cffd7cc9c0afb Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Fri, 2 Feb 2024 19:09:58 -0800 Subject: [PATCH 34/35] Update countdown.lua Co-authored-by: Garrick Aden-Buie --- quarto/_extensions/countdown/countdown.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index 2980a74..e51acf1 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -125,7 +125,7 @@ local function countdown_style(options) end -- Determine the selector value - local possibleSelector = getOption(options, "selector", "root") + local possibleSelector = getOption(options, "selector", ":root") -- Restructure options to ("key:value;--countdown-: ;) string local structuredCSS = structureCountdownCSSVars(options) From 34ec9980c32c8087c570f3ede51cb8c2e01d6fff Mon Sep 17 00:00:00 2001 From: James J Balamuta Date: Sat, 3 Feb 2024 15:33:45 -0800 Subject: [PATCH 35/35] Update quarto/_extensions/countdown/countdown.lua Co-authored-by: Garrick Aden-Buie --- quarto/_extensions/countdown/countdown.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/quarto/_extensions/countdown/countdown.lua b/quarto/_extensions/countdown/countdown.lua index e51acf1..ec12cdb 100644 --- a/quarto/_extensions/countdown/countdown.lua +++ b/quarto/_extensions/countdown/countdown.lua @@ -282,8 +282,6 @@ local function countdown(args, kwargs, meta) '\n
' }) - quarto.log.output(rawHtml) - -- Return a new Div element with modified attributes return pandoc.RawBlock("html", rawHtml) end