Skip to content

daattali/inputknob

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

inputknob

An input knob web component for Shiny apps, using the {shinywc} framework.

library(shiny)

test_ui <- function(id) {
  ns <- NS(id)
  tagList(
    inputknob::inputknob(
      id = ns("testknob"),
      value = 50, scale = 10, min = 0, max = 100,
      slot = "^",
      slot_back_side = tags$span('..'),
      css_knob_size = "150px"
    ),
    
    fluidRow(
      column(
        2,
        h3("Get attribute"),
        selectInput(ns("get_attr_id"), "Attribute", c("value", "scale", "max", "min")),
        actionButton(ns("get_attr"), "Show attribute"),
      ),
      column(
        2,
        h3("Set attribute"),
        selectInput(ns("set_attr_id"), "Attribute", c("value", "scale", "max", "min")),
        numericInput(ns("set_attr_val"), "value", 70),
        actionButton(ns("set_attr"), "Set")
      ),
      column(
        2,
        h3("Get property"),
        selectInput(ns("get_prop_id"), "Property", c("value", "scale", "max", "min")),
        actionButton(ns("get_prop"), "Show property"),
      ),
      column(
        2,
        h3("Set property"),
        selectInput(ns("set_prop_id"), "Property", c("value", "scale", "max", "min")),
        numericInput(ns("set_prop_val"), "Value", 50),
        actionButton(ns("set_prop"), "Set")
      ),
      column(
        2,
        h3("Call method"),
        selectInput(ns("method"), "Method", c("rotateRight", "rotateLeft")),
        numericInput(ns("rotatenum"), "How many turns?", 0.1),
        actionButton(ns("call"), "Go")
      ),
      column(
        2,
        h3("Events"),
        h4("knob-move-change:"), textOutput(ns("event_change")),
        h4("knob-move-start:"), textOutput(ns("event_start")),
        h4("knob-move-end:"), textOutput(ns("event_end"))
      )
    )
  )
}

test_server <- function(input, output, session) {
  knob <- inputknob::inputknob_proxy("testknob")
  
  observeEvent(input$get_attr, {
    val <- knob[[input$get_attr_id]]
    shinyalert::shinyalert(text = val)
  })
  
  observeEvent(input$set_attr, {
    knob[[input$get_attr_id]] <- input$set_attr_val
  })
  
  observeEvent(input$get_prop, {
    fnx <- paste0("get_", input$get_prop_id, "_prop")
    knob[[fnx]](function(x){ shinyalert::shinyalert(text = as.character(jsonlite::toJSON(x))) })
  })
  
  observeEvent(input$set_prop, {
    fnx <- paste0("set_", input$set_prop_id, "_prop")
    knob[[fnx]](input$set_prop_val)
  })
  
  observeEvent(input$call, {
    fnx <- paste0("call_", input$method)
    knob[[fnx]](input$rotatenum)
  })
  
  output$event_change <- renderText({
    req(knob$event_knob_move_change())
    paste(Sys.time(), knob$event_knob_move_change())
  })
  output$event_start <- renderText({
    req(knob$event_knob_move_start())
    paste(Sys.time(), knob$event_knob_move_start())
  })
  output$event_end <- renderText({
    req(knob$event_knob_move_end())
    paste(Sys.time(), knob$event_knob_move_end())
  })
}

ui <- fluidPage(
  h1("<input-knob> web component Shiny demo"),
  test_ui("test")
)

server <- function(input, output, session) {
  callModule(test_server, "test")
}

shinyApp(ui, server)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published