2016-05-05 12 views
4

Ich möchte ein (?) Neben dem Titel eines Widgets hinzufügen, so dass der Benutzer den Mauszeiger bewegen oder darauf klicken kann und zusätzliche Informationen und einen Link erhält, auf den er klicken kann.hinzufügen popovers zu glänzenden app?

Das ist, was ich jetzt haben:

## app.R ## 
library(shiny) 
library(shinydashboard) 
library(shinyBS) 
# Header 
header <- dashboardHeader() 
# Sidebar 
sidebar <- dashboardSidebar(fileInput("chosenfile", label = h4("File input"), 
             accept = ".csv"), 
          bsButton("q1", label = "", icon = icon("question"), 
            style = "info", size = "extra-small"), 
          bsPopover(id = "q1", title = "Tidy data", 
             content = paste0("You should read the ", 
                 a("tidy data paper", 
                 href = "http://vita.had.co.nz/papers/tidy-data.pdf", 
                 target="_blank")), 
             placement = "right", 
             trigger = "click", 
             options = list(container = "body") 
            ) 
          ) 
# Body 
body <- dashboardBody() 
# ui 
ui <- dashboardPage(header, sidebar, body) 
# server 
server <- function(input, output) { 

} 
# run 
shinyApp(ui, server) 

popover

Aber es ist bei weitem nicht perfekt. Zum Beispiel steht die Platzierung von (?) Nicht neben "Dateieingabe". Um das Popover zu schließen, müssen Sie erneut auf das Fragezeichen klicken, anstatt ein (x) im Popover zu haben.

+0

Sie müssen die 'h4' von Etikett mit einigen HTML-und JS-Code zu ändern, denke ich. Dieses Problem kann hilfreich sein (der letzte Beitrag): https://github.com/ebailey78/shinyBS/issues/26 – Gopala

+0

Danke @ Gopala. Ach, ich weiß nicht, JS :( – Ignacio

Antwort

7

diese Antwort ist wahrscheinlich nicht das, was Sie ursprünglich wollte, aber es für Sie arbeiten könnte noch.

Sie sagten, Sie wollten das Tooltip-Fragezeichen neben dem Etikett, also legte ich es in das Etikett. Mit der richtigen Ausrichtung. Zweitens wollte der Tooltip nicht geöffnet werden, bis die Schaltfläche erneut angeklickt wird, weil dies irritierend ist. Die Popover-Option "Fokus" ist dann vielleicht das Richtige für dich.

## app.R ## 
library(shiny) 
library(shinydashboard) 
library(shinyBS) 
# Header 
header <- dashboardHeader() 
# Sidebar 
sidebar <- dashboardSidebar(
    fileInput("chosenfile", 
    label = h4("File input ", 
       tags$style(type = "text/css", "#q1 {vertical-align: top;}"), 
       bsButton("q1", label = "", icon = icon("question"), style = "info", size = "extra-small") 
      ), 
    accept = ".csv"), 
    bsPopover(id = "q1", title = "Tidy data", 
    content = paste0("You should read the ", 
       a("tidy data paper", 
        href = "http://vita.had.co.nz/papers/tidy-data.pdf", 
        target="_blank") 
       ), 
    placement = "right", 
    trigger = "focus", 
    options = list(container = "body") 
) 
) 
# Body 
body <- dashboardBody() 
# ui 
ui <- dashboardPage(header, sidebar, body) 
# server 
server <- function(input, output) {} 
# run 
shinyApp(ui, server) 
0

Ich weiß nicht viel über JS, aber this post hat mir sehr geholfen mit 'Styling'.

Eine Möglichkeit, Widgets in derselben Zeile anzuzeigen, besteht darin, sie in ein div mit 'style: inline-block' zu schreiben. Da der fileInput zu groß ist, wird die (?) Weiterhin in die nächste Zeile verschoben, sodass Sie gewaltsam angeben können, wie viel Speicherplatz der DateiInput mit 'width: somepercetage%' oder 'width: somepixels px' belegt.

diese Ideen Nach der Code würde wie folgt aussehen:

div(
    div(
    # edit1 
    style="width:80%; display:inline-block; vertical-align: middle;", 
    fileInput("chosenfile", label = h4("File input"), 
       accept = ".csv") 
), 
    div(
    # edit2 
    style="display:inline-block; vertical-align: middle;", 
    bsButton("q1", label = "", icon = icon("question"), 
      style = "info"), 
    bsPopover(id = "q1", title = "Tidy data", 
       content = paste0("You should read the ", 
           a("tidy data paper", 
           href = "http://vita.had.co.nz/papers/tidy-data.pdf", 
           target="_blank")), 
       placement = "right", 
       trigger = "click", 
       options = list(container = "body") 
    ) 
) 
) 

Chrome

+0

Das Fragezeichen auf Ihrer Lösung ist seltsam platziert, http://screenshot.net/1r4yjs5 – Ignacio

+0

In Rstudio Viewer die Dinge funktionierten gut, aber die Dinge werden wirklich chaotisch in einem Browser. Ich habe meine Antwort mit ''vertical-align: middle'' in (?)' s div bearbeitet und es sollte jetzt gut aussehen. – user5029763

+0

Sie könnten beide divs auch unten ausrichten. Hier ist ein Link mit anderen Möglichkeiten: http: // www.w3schools.com/cssref/pr_pos_vertical-align.asp – user5029763