library(shiny)
library(frappeCharts)
options(scipen = 1e3)
source("module_typingStats.R")
typingSpeedInput <- function(inputId, label, placeholder = NULL, rows = 4) {
.label <- label
htmltools::withTags(
div(
class = "form-group typing-speed",
label(class = "control-label", `for` = inputId, .label),
textarea(id = inputId, class = "form-control", placeholder = placeholder,
rows = rows),
htmltools::htmlDependency(
name = "typingSpeed",
version = "0.0.1",
src = ".",
script = "typing.js",
all_files = FALSE
)
)
)
}
resetTypingSpeed <- function(inputId, session = getDefaultReactiveDomain()) {
session$sendInputMessage("typing", TRUE)
}
ui <- fluidPage(
typingStatsUI('typing_stats'),
typingSpeedInput("typing", "Type here..."),
actionButton("reset", "Reset"),
frappeCharts::frappeChartOutput("chart_typing_speed")
# verbatimTextOutput("debug")
)
server <- function(input, output, session) {
output$debug <- renderPrint({
str(list(typing = input$typing, typing_reset = input$typing_reset))
})
observeEvent(input$reset, {
resetTypingSpeed("typing")
})
wpm <- typingStats(
"typing_stats",
typing = reactive(input$typing),
typing_reset = reactive(input$typing_reset)
)
output$chart_typing_speed <- frappeCharts::renderFrappeChart({
frappeCharts::frappeChart(
data.frame(time = 0, wpm = 0),
type = "line",
title = "Your Typing Speed",
is_navigable = FALSE,
axisOptions = list(xIsSeries = TRUE),
lineOptions = list(regionFill = TRUE)
)
})
observeEvent(wpm()$time, {
frappeCharts::updateFrappeChart('chart_typing_speed', wpm())
})
}
shinyApp(ui, server)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.