| ermoji_gadget <- function() { | ermoji_gadget <- function() { | ||||
| require(shiny) | require(shiny) | ||||
| require(miniUI) | require(miniUI) | ||||
| runGadget(ermoji_ui(), ermoji_server, viewer = paneViewer(500), stopOnCancel = FALSE) | |||||
| } | |||||
| ermoji_shiny <- function() { | |||||
| require(shiny) | |||||
| require(miniUI) | |||||
| shinyApp(ui = ermoji_ui(), server = ermoji_server) | |||||
| } | |||||
| ui <- miniPage( | |||||
| ermoji_ui <- function() { | |||||
| miniPage( | |||||
| title = "ermoji", | |||||
| gadgetTitleBar("ermoji"), | gadgetTitleBar("ermoji"), | ||||
| miniContentPanel( | miniContentPanel( | ||||
| padding = 10, | padding = 10, | ||||
| actionButton("copy_gliph", "Copy Emoji", class = "btn-primary") | actionButton("copy_gliph", "Copy Emoji", class = "btn-primary") | ||||
| ) | ) | ||||
| ) | ) | ||||
| } | |||||
| server <- function(input, output, session) { | |||||
| output$emojis <- DT::renderDataTable({ | |||||
| emojis <- emo::jis | |||||
| emojis <- emojis[, c('emoji', 'name', "group", "keywords", "aliases")] | |||||
| emojis$keywords <- purrr::map_chr(emojis$keywords, ~ paste(., collapse = ", ")) | |||||
| emojis$aliases <- purrr::map_chr(emojis$aliases, ~ paste(., collapse = ", ")) | |||||
| DT::datatable( | |||||
| emojis, | |||||
| rownames = FALSE, | |||||
| colnames = c("Emoji", "Name", "Group", "Keywords", "Aliases"), | |||||
| filter = "top", | |||||
| selection = "single", | |||||
| fillContainer = TRUE, | |||||
| # style = 'bootstrap', | |||||
| class = 'compact stripe nowrap hover', | |||||
| options = list( | |||||
| searchHighlight = TRUE, | |||||
| search = list(regex = TRUE, caseInsensitive = FALSE), | |||||
| columnDefs = list(list( | |||||
| className = "dt-center", targets = 0 | |||||
| )), | |||||
| pageLength = 10, | |||||
| lengthMenu = c(4, 5, 10) | |||||
| ) | |||||
| ermoji_server <- function(input, output, session) { | |||||
| output$emojis <- DT::renderDataTable({ | |||||
| emojis <- emo::jis | |||||
| emojis <- emojis[, c('emoji', 'name', "group", "keywords", "aliases")] | |||||
| emojis$keywords <- purrr::map_chr(emojis$keywords, ~ paste(., collapse = ", ")) | |||||
| emojis$aliases <- purrr::map_chr(emojis$aliases, ~ paste(., collapse = ", ")) | |||||
| DT::datatable( | |||||
| emojis, | |||||
| rownames = FALSE, | |||||
| colnames = c("Emoji", "Name", "Group", "Keywords", "Aliases"), | |||||
| filter = "top", | |||||
| selection = "single", | |||||
| fillContainer = TRUE, | |||||
| # style = 'bootstrap', | |||||
| class = 'compact stripe nowrap hover', | |||||
| options = list( | |||||
| searchHighlight = TRUE, | |||||
| search = list(regex = TRUE, caseInsensitive = FALSE), | |||||
| columnDefs = list(list( | |||||
| className = "dt-center", targets = 0 | |||||
| )), | |||||
| pageLength = 10, | |||||
| lengthMenu = c(4, 5, 10) | |||||
| ) | ) | ||||
| }) | |||||
| this_emoji <- reactive({ | |||||
| req(input$emojis_rows_selected) | |||||
| as.list(emo::jis[input$emojis_rows_selected, ]) | |||||
| }) | |||||
| ) | |||||
| }) | |||||
| this_emoji_name <- reactive({ | |||||
| # name <- this_emoji()$name | |||||
| name <- this_emoji()$aliases[[1]][1] | |||||
| paste0(":", gsub(" ", "_", name), ":") | |||||
| }) | |||||
| this_emoji <- reactive({ | |||||
| req(input$emojis_rows_selected) | |||||
| as.list(emo::jis[input$emojis_rows_selected, ]) | |||||
| }) | |||||
| this_emoji_uni <- reactive({ | |||||
| uni <- paste0("\\U", this_emoji()$runes) | |||||
| gsub(" ", "\\\\U", uni) | |||||
| }) | |||||
| this_emoji_name <- reactive({ | |||||
| # name <- this_emoji()$name | |||||
| name <- this_emoji()$aliases[[1]][1] | |||||
| paste0(":", gsub(" ", "_", name), ":") | |||||
| }) | |||||
| this_emoji_uni_trunc <- reactive({ | |||||
| uni <- this_emoji()$runes | |||||
| uni <- sub(" .+", "...", uni) | |||||
| paste0("\\U", uni) | |||||
| }) | |||||
| this_emoji_uni <- reactive({ | |||||
| uni <- paste0("\\U", this_emoji()$runes) | |||||
| gsub(" ", "\\\\U", uni) | |||||
| }) | |||||
| observeEvent(input$emojis_rows_selected, { | |||||
| if (!isTruthy(input$emojis_rows_selected)) { | |||||
| updateActionButton(session, "copy_name", "Copy :emoji_name:") | |||||
| updateActionButton(session, "copy_utf", "Copy Unicode") | |||||
| updateActionButton(session, "copy_gliph", "Copy Emoji") | |||||
| } else { | |||||
| updateActionButton(session, "copy_name", paste0("Copy <code>", this_emoji_name(), "</code>")) | |||||
| updateActionButton(session, "copy_utf", paste("Copy <code>", this_emoji_uni_trunc(), "</code>")) | |||||
| updateActionButton(session, "copy_gliph", paste("Copy", this_emoji()$emoji)) | |||||
| } | |||||
| }) | |||||
| observeEvent(input$copy_name, { | |||||
| clipr::write_clip(this_emoji_name()) | |||||
| }) | |||||
| observeEvent(input$copy_utf, { | |||||
| clipr::write_clip(this_emoji_uni()) | |||||
| }) | |||||
| observeEvent(input$copy_gliph, { | |||||
| clipr::write_clip(this_emoji()$emoji) | |||||
| }) | |||||
| observeEvent(input$done, { | |||||
| stopApp(invisible()) | |||||
| }) | |||||
| observeEvent(input$cancel, { | |||||
| stopApp(invisible()) | |||||
| }) | |||||
| } | |||||
| this_emoji_uni_trunc <- reactive({ | |||||
| uni <- this_emoji()$runes | |||||
| uni <- sub(" .+", "...", uni) | |||||
| paste0("\\U", uni) | |||||
| }) | |||||
| runGadget(ui, server, viewer = paneViewer(500), stopOnCancel = FALSE) | |||||
| observeEvent(input$emojis_rows_selected, { | |||||
| if (!isTruthy(input$emojis_rows_selected)) { | |||||
| updateActionButton(session, "copy_name", "Copy :emoji_name:") | |||||
| updateActionButton(session, "copy_utf", "Copy Unicode") | |||||
| updateActionButton(session, "copy_gliph", "Copy Emoji") | |||||
| } else { | |||||
| updateActionButton(session, "copy_name", paste0("Copy <code>", this_emoji_name(), "</code>")) | |||||
| updateActionButton(session, "copy_utf", paste("Copy <code>", this_emoji_uni_trunc(), "</code>")) | |||||
| updateActionButton(session, "copy_gliph", paste("Copy", this_emoji()$emoji)) | |||||
| } | |||||
| }) | |||||
| observeEvent(input$copy_name, { | |||||
| clipr::write_clip(this_emoji_name()) | |||||
| }) | |||||
| observeEvent(input$copy_utf, { | |||||
| clipr::write_clip(this_emoji_uni()) | |||||
| }) | |||||
| observeEvent(input$copy_gliph, { | |||||
| clipr::write_clip(this_emoji()$emoji) | |||||
| }) | |||||
| observeEvent(input$done, { | |||||
| stopApp(invisible()) | |||||
| }) | |||||
| observeEvent(input$cancel, { | |||||
| stopApp(invisible()) | |||||
| }) | |||||
| } | } | ||||