kandi background
Explore Kits

phoenix | SQL skin over HBase , delivered as a client-embedded JDBC

 by   forcedotcom Java Version: Current License: BSD-3-Clause

 by   forcedotcom Java Version: Current License: BSD-3-Clause

Download this library from

kandi X-RAY | phoenix Summary

phoenix is a Java library. phoenix has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has high support. You can download it from GitHub.
Phoenix is a SQL skin over HBase, delivered as a client-embedded JDBC driver, powering the HBase use cases at Salesforce.com. Phoenix targets low-latency queries (milliseconds), as opposed to batch operation via map/reduce.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • phoenix has a highly active ecosystem.
  • It has 565 star(s) with 232 fork(s). There are 158 watchers for this library.
  • It had no major release in the last 12 months.
  • There are 146 open issues and 327 have been closed. On average issues are closed in 38 days. There are 5 open pull requests and 0 closed requests.
  • It has a negative sentiment in the developer community.
  • The latest version of phoenix is current.
phoenix Support
Best in #Java
Average in #Java
phoenix Support
Best in #Java
Average in #Java

quality kandi Quality

  • phoenix has 0 bugs and 0 code smells.
phoenix Quality
Best in #Java
Average in #Java
phoenix Quality
Best in #Java
Average in #Java

securitySecurity

  • phoenix has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • phoenix code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
phoenix Security
Best in #Java
Average in #Java
phoenix Security
Best in #Java
Average in #Java

license License

  • phoenix is licensed under the BSD-3-Clause License. This license is Permissive.
  • Permissive licenses have the least restrictions, and you can use them in most projects.
phoenix License
Best in #Java
Average in #Java
phoenix License
Best in #Java
Average in #Java

buildReuse

  • phoenix releases are not available. You will need to build from source code and install.
  • Build file is available. You can build the component from source.
phoenix Reuse
Best in #Java
Average in #Java
phoenix Reuse
Best in #Java
Average in #Java
Top functions reviewed by kandi - BETA

kandi has reviewed phoenix and discovered the below as its top functions. This is intended to give you an instant insight into phoenix implemented functionality, and help decide if they suit your requirements.

  • Create a table .
    • overrides the visitor to filter expressions
      • The main entry point .
        • Rewrite a select statement .
          • Create a table if it exists .
            • Generate key ranges .
              • Retrieves the primary keys .
                • Mutate column .
                  • Produces an index row key for the row key .
                    • Scans an ordered scan over rows .

                      Get all kandi verified functions for this library.

                      Get all kandi verified functions for this library.

                      phoenix Key Features

                      Fixing Cluttered Titles on Graphs

                      copy iconCopydownload iconDownload
                      library(visNetwork)
                      library(tidyverse)
                      library(igraph)
                      library(manipulateWidget)
                      library(htmltools)
                      
                      create_trip_graph <-
                        function(x, distance = NULL) {
                          n <- 15
                          data <- tibble(d = 1:n,
                                         name =
                                           c(
                                             "new york",
                                             "chicago",
                                             "los angeles",
                                             "orlando",
                                             "houston",
                                             "seattle",
                                             "washington",
                                             "baltimore",
                                             "atlanta",
                                             "las vegas",
                                             "oakland",
                                             "phoenix",
                                             "kansas",
                                             "miami",
                                             "newark"
                                           ))
                          
                          relations <-  tibble(from = sample(data$d),
                                               to = lead(from, default = from[1]))    
                          graph <-
                            graph_from_data_frame(relations, directed = TRUE, vertices = data)
                          
                          V(graph)$color <-
                            ifelse(data$d == relations$from[1], "red", "orange")
                          
                          if (is.null(distance))
                            # This generates a random distance value if none is 
                            # specified in the function call. Values are just for 
                            # demonstration, no actual distances are calculated.
                            distance <- sample(seq(19, 25, .1), 1)
                          
                          toVisNetworkData(graph) %>%
                            c(., list(
                              main = paste0("Trip ", x, " : "),
                              submain = paste0(distance, "KM")
                            )) %>%
                            do.call(visNetwork, .) %>%
                            visIgraphLayout(layout = "layout_in_circle") %>%
                            visInteraction(navigationButtons = TRUE) %>%
                            visEdges(arrows = 'to')
                        }
                      
                      comb_vgraphs <- lapply(1:25, function (x) list(
                        create_trip_graph(x),
                        htmltools::a("NEXT TRIP", 
                                     onclick = 'window.scrollBy(0,950)', 
                                     style = 'color:blue; text-decoration:underline;')))  %>%
                        unlist(recursive = FALSE)
                      
                      
                      ff <-
                        combineWidgets(
                          list = comb_vgraphs,
                          ncol = 1,
                          height = 25 * 950,
                          rowsize = c(24, 1)
                        )
                      
                      htmltools::save_html(html = ff, file = "widgets.html")
                      
                      comb_vgraphs2 <- lapply(1:25, function(x) {
                        a <- list(create_trip_graph(x))
                        # We detect whenever we are creating the 5th, 10th, 15th etc. network map
                        # and add the link after that one.
                        if (x %% 5 == 0 & x < 25) a[[2]] <- htmltools::a("NEXT 5 TRIPS", 
                                                                onclick = 'window.scrollBy(0,500)', 
                                                                style = 'color:blue; text-decoration:underline;')
                        a
                      }) %>%
                        unlist(recursive = FALSE)
                      
                      ff2 <-
                        combineWidgets(
                          list = comb_vgraphs2,
                          ncol = 6, # We need six columns, 5 for the network maps 
                                    # and 1 for the link to scroll the page.
                          height = 6 * 500,
                          width = 1700
                          #rowsize = c(24, 1)
                        )
                      
                      # We need to add some white space in for the scrolling by clicking the link to 
                      # still work for the last row.
                      ff2$widgets[[length(ff2$widgets) + 1]] <- htmltools::div(style = "height: 1000px;")
                      
                      htmltools::save_html(html = ff2, file = "widgets2.html")
                      
                      library(visNetwork)
                      library(tidyverse)
                      library(igraph)
                      library(manipulateWidget)
                      library(htmltools)
                      
                      create_trip_graph <-
                        function(x, distance = NULL) {
                          n <- 15
                          data <- tibble(d = 1:n,
                                         name =
                                           c(
                                             "new york",
                                             "chicago",
                                             "los angeles",
                                             "orlando",
                                             "houston",
                                             "seattle",
                                             "washington",
                                             "baltimore",
                                             "atlanta",
                                             "las vegas",
                                             "oakland",
                                             "phoenix",
                                             "kansas",
                                             "miami",
                                             "newark"
                                           ))
                          
                          relations <-  tibble(from = sample(data$d),
                                               to = lead(from, default = from[1]))    
                          graph <-
                            graph_from_data_frame(relations, directed = TRUE, vertices = data)
                          
                          V(graph)$color <-
                            ifelse(data$d == relations$from[1], "red", "orange")
                          
                          if (is.null(distance))
                            # This generates a random distance value if none is 
                            # specified in the function call. Values are just for 
                            # demonstration, no actual distances are calculated.
                            distance <- sample(seq(19, 25, .1), 1)
                          
                          toVisNetworkData(graph) %>%
                            c(., list(
                              main = paste0("Trip ", x, " : "),
                              submain = paste0(distance, "KM")
                            )) %>%
                            do.call(visNetwork, .) %>%
                            visIgraphLayout(layout = "layout_in_circle") %>%
                            visInteraction(navigationButtons = TRUE) %>%
                            visEdges(arrows = 'to')
                        }
                      
                      comb_vgraphs <- lapply(1:25, function (x) list(
                        create_trip_graph(x),
                        htmltools::a("NEXT TRIP", 
                                     onclick = 'window.scrollBy(0,950)', 
                                     style = 'color:blue; text-decoration:underline;')))  %>%
                        unlist(recursive = FALSE)
                      
                      
                      ff <-
                        combineWidgets(
                          list = comb_vgraphs,
                          ncol = 1,
                          height = 25 * 950,
                          rowsize = c(24, 1)
                        )
                      
                      htmltools::save_html(html = ff, file = "widgets.html")
                      
                      comb_vgraphs2 <- lapply(1:25, function(x) {
                        a <- list(create_trip_graph(x))
                        # We detect whenever we are creating the 5th, 10th, 15th etc. network map
                        # and add the link after that one.
                        if (x %% 5 == 0 & x < 25) a[[2]] <- htmltools::a("NEXT 5 TRIPS", 
                                                                onclick = 'window.scrollBy(0,500)', 
                                                                style = 'color:blue; text-decoration:underline;')
                        a
                      }) %>%
                        unlist(recursive = FALSE)
                      
                      ff2 <-
                        combineWidgets(
                          list = comb_vgraphs2,
                          ncol = 6, # We need six columns, 5 for the network maps 
                                    # and 1 for the link to scroll the page.
                          height = 6 * 500,
                          width = 1700
                          #rowsize = c(24, 1)
                        )
                      
                      # We need to add some white space in for the scrolling by clicking the link to 
                      # still work for the last row.
                      ff2$widgets[[length(ff2$widgets) + 1]] <- htmltools::div(style = "height: 1000px;")
                      
                      htmltools::save_html(html = ff2, file = "widgets2.html")
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      
                      ---
                      title: "Just for antonoyaro8"
                      output: 
                        flexdashboard::flex_dashboard:
                          orientation: columns
                          vertical_layout: fill
                      ---
                      
                      <style>
                      select {
                        // A reset of styles, including removing the default dropdown arrow
                        appearance: none;
                        background-color: transparent;
                        border: none;
                        padding: 0 1em 0 0;
                        margin: 0;
                        width: 100%;
                        font-family: inherit;
                        font-size: inherit;
                        cursor: inherit;
                        line-height: inherit;
                      }
                      .select {
                        display: grid;
                        grid-template-areas: "select";
                        align-items: center;
                        position: relative;
                        min-width: 15ch;
                        max-width: 100ch;
                        border: 1px solid var(--select-border);
                        border-radius: 0.25em;
                        padding: 0.25em 0.5em;
                        font-size: 1.25rem;
                        cursor: pointer;
                        line-height: 1.1;
                        background-color: #fff;
                        background-image: linear-gradient(to top, #f9f9f9, #fff 33%);
                      }
                      select[multiple] {
                        padding-right: 0; 
                        /* Safari will not show options unless labels fit   */
                        height: 50rem;   // how many options show at one time
                        font-size: 1rem;
                      }
                      #column-1 > div.containIt > div.visNetwork canvas {
                        width: 100%;
                        height: 80%;
                      }
                      .containIt {
                        display: flex;
                        flex-flow: row wrap;
                        flex-grow: 1;
                        justify-content: space-around;
                        align-items: flex-start;
                        align-content: space-around;
                        overflow: hidden;
                        height: 100%;
                        width: 100%;
                        margin-top: 2vw;
                        height: 80vh;
                        widhth: 80vw;
                        overflow: hidden;
                      }
                      
                      </style>
                      
                      ```{r setup, include=FALSE}
                      
                      library(flexdashboard)
                      library(visNetwork)
                      library(htmltools)
                      library(igraph)
                      library(tidyverse)
                      library(shinyRPG) # remotes::install_github("RinteRface/shinyRPG")
                      
                      ```
                      
                      ```{r dataStuff}
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      #red circle: starting point and final point
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), 
                                  submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to')
                      
                      # collect the correct order
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      a = toVisNetworkData(graph) %>%
                        c(., list(main = list(text = paste0("Trip ", m_1, " : "), 
                                              style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"),
                                  submain = list(text = paste0(m_2, "KM"),
                                                 style = "font-family: Georgia; font-size: 100%; text-align:center;"))) %>%
                        do.call(visNetwork, .) %>%
                        visInteraction(navigationButtons = TRUE) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') %>% 
                        visOptions(width = "100%", height = "80%", autoResize = T)
                      
                      a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ```
                      
                      Column {data-width=200}
                      -----------------------------------------------------------------------
                      
                      ### Select Options
                      
                      You can select one or more options from the list. 
                      
                      ```{r selectiver}
                      tagSel <- rpgSelect(
                        "selectBox",                      # don't change this (connected)
                        "Selections:",                    # visible on HTML; change away or set to ""
                        c(setNames(1:25, letters[1:25])), # left is values, right is labels
                        multiple = T                      # all multiple selections
                      )        # other attributes controlled by css at the top
                      
                      tagSel$attribs$class <- 'select select--multiple'       # connect styles
                      tagSel$children[[2]]$attribs$class <- "mutli-select"    # connect styles
                      tagSel$children[[2]]$attribs$onchange <- "getOps(this)" # connect the JS function
                      
                      tagSel
                      
                      ```
                      
                      Column
                      -----------------------------------------------------------------------
                      
                      <div class="containIt">
                      
                      ```{r notNow, include=T}
                      
                      a
                      b
                      c
                      d
                      e
                      f
                      g
                      h
                      i
                      j
                      k
                      l
                      m
                      n
                      o
                      p
                      q
                      r
                      s
                      t
                      u
                      v
                      w
                      x
                      y
                      
                      ```
                      
                      </div>
                      
                      ```{r pickMe,results='asis',engine='js'}
                      
                      //remove inherent knitr element-- after using mutlti-select starts harboring space
                      byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options');
                      byeknit.remove(1);
                      
                      // Reset Sizing of Widgets
                      h = document.querySelector('#column-1 > div.containIt').clientHeight;
                      w = document.querySelector('#column-1 > div.containIt').clientWidth;
                      hw = h * w;
                      
                      cont = document.querySelectorAll('#column-1 > div.containIt > div');
                      
                      newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85;
                      
                      for(i = 0; i < cont.length; ++i){
                        cont[i].style.height = newHeight + 'px';
                        cont[i].style.width = newHeight + 'px';
                        cn = cont[i].childNodes;
                        if(cn.length > 0){
                            th = cn[0].clientHeight + cn[1].clientHeight;
                            console.log("canvas found");
                            mb = newheight - th;
                            cn[5].style.height = mb + 'px'; //canvas control attempt
                        }
                      }
                      
                      function resizePlease(count) { //resize plots based on selections
                        // screen may have resized**
                        h = document.querySelector('#column-1 > div.containIt').clientHeight;
                        w = document.querySelector('#column-1 > div.containIt').clientWidth;
                        hw = h * w;  // get the area
                        
                        // based on selected count** these should fit--- 
                        // RStudio!
                        newHeight = Math.floor(Math.sqrt(hw/count)) * .85; 
                        for(i = 0; i < graphy.length; ++i){
                          graphy[i].style.height = newHeight + 'px';
                          graphy[i].style.width = newHeight + 'px';
                          gcn = graphy[i].childNodes;
                          if(cn.length > 0){
                              th = gcn[0].clientHeight + gcn[1].clientHeight;
                              mb = newHeight - th;
                              gcn[5].style.height = mb + 'px'; //canvas control attempt
                              canYouPLEASElisten = graphy[i].querySelector('canvas');
                              canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!!
                              canYouPLEASElisten.style.height = '100%';
                          }
                        }
                      }
                      
                      
                      // Something selected triggers this function
                      function getOps(sel) {   
                        //get ref to select list and display text box
                        graphy = document.querySelectorAll('#column-1 div.visNetwork');
                        count = 0; // reset count of selected vis
                        // loop through selections
                        for(i = 0; i < sel.length; i++) {
                          opt = sel.options[i];
                          if ( opt.selected ) {
                            count++
                            graphy[i].style.display = 'block';
                            console.log(opt + "selected");
                            console.log(count + " options selected");
                          } else {
                            graphy[i].style.display = 'none';
                          }
                        }
                        resizePlease(count); 
                      }
                      
                      ```
                      

                      Adding Labels to Graph Nodes

                      copy iconCopydownload iconDownload
                      sort(c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3, 1))
                      # [1]  1  2  3  4  5  6  7  9 10 11 12 12 13 14 15
                      # missing 8, two 12
                      
                      library(tidyverse)
                      
                      # collect the correct order
                      
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      
                      V(graph)$name = data$label = df2
                      
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      
                      sort(c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3, 1))
                      # [1]  1  2  3  4  5  6  7  9 10 11 12 12 13 14 15
                      # missing 8, two 12
                      
                      library(tidyverse)
                      
                      # collect the correct order
                      
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      
                      V(graph)$name = data$label = df2
                      
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      
                      sort(c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3, 1))
                      # [1]  1  2  3  4  5  6  7  9 10 11 12 12 13 14 15
                      # missing 8, two 12
                      
                      library(tidyverse)
                      
                      # collect the correct order
                      
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      
                      V(graph)$name = data$label = df2
                      
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      
                      sort(c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3, 1))
                      # [1]  1  2  3  4  5  6  7  9 10 11 12 12 13 14 15
                      # missing 8, two 12
                      
                      library(tidyverse)
                      
                      # collect the correct order
                      
                      df2 <- data %>% 
                        mutate(d = as.numeric(d),
                               nuname = factor(a$x$edges$from, 
                                               levels = unlist(data$name))) %>%
                        arrange(nuname) %>% 
                        select(d) %>% unlist(use.names = F)
                      #  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 
                      
                      V(graph)$name = data$label = df2
                      
                      V(graph)$name = data$label = paste0(df2, "\n", data$name)
                      
                      library(dplyr)
                      library(igraph)
                      
                      set.seed(123)
                      n=15
                      
                      # Build the dataframe of 'nodes'
                      nodes <- data.frame(d = 1:n,
                                          name = c("new york", "chicago", "los angeles", "orlando", "houston", 
                                                   "seattle", "washington", "baltimore", "atlanta", "las vegas", 
                                                   "oakland", "phoenix", "kansas", "miami", "newark"))
                      
                      # Build the dataframe of 'edges'
                      edges <- data.frame(from = sample(nodes$d)) %>% 
                                            mutate(to = lead(from, default = from[1]))
                      
                      # Build the graph
                      graph <- graph_from_data_frame(edges, directed = TRUE, vertices = nodes) %>% 
                        set_vertex_attr("name", 
                                        index = V(.), 
                                        paste0(order(as.numeric(edges$from)), "\n", nodes$name)) %>% 
                        set_vertex_attr("color",
                                        index = V(.),
                                        ifelse(nodes$d == edges$from[1], "red", "orange"))
                      
                      library(visNetwork)
                      
                      m_1 <- 1
                      m_2 <- 23.6
                      
                      a <- toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') 
                      a
                      
                      library(dplyr)
                      library(igraph)
                      
                      set.seed(123)
                      n=15
                      
                      # Build the dataframe of 'nodes'
                      nodes <- data.frame(d = 1:n,
                                          name = c("new york", "chicago", "los angeles", "orlando", "houston", 
                                                   "seattle", "washington", "baltimore", "atlanta", "las vegas", 
                                                   "oakland", "phoenix", "kansas", "miami", "newark"))
                      
                      # Build the dataframe of 'edges'
                      edges <- data.frame(from = sample(nodes$d)) %>% 
                                            mutate(to = lead(from, default = from[1]))
                      
                      # Build the graph
                      graph <- graph_from_data_frame(edges, directed = TRUE, vertices = nodes) %>% 
                        set_vertex_attr("name", 
                                        index = V(.), 
                                        paste0(order(as.numeric(edges$from)), "\n", nodes$name)) %>% 
                        set_vertex_attr("color",
                                        index = V(.),
                                        ifelse(nodes$d == edges$from[1], "red", "orange"))
                      
                      library(visNetwork)
                      
                      m_1 <- 1
                      m_2 <- 23.6
                      
                      a <- toVisNetworkData(graph) %>%
                        c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') 
                      a
                      

                      Directly Adding Titles and Labels to Visnetwork

                      copy iconCopydownload iconDownload
                      n=15
                      
                      data = data.frame(id = 1:n)
                      data$color = ifelse(data$id == 1, "Red", "Orange")
                      data$label = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      relations = data.frame(tibble(
                        from = sample(data$id),
                        to = lead(from, default=from[1]),
                      ))
                      
                      visNetwork(data, relations, main = "my graph") %>%  visEdges(arrows = "to")
                      
                      toVisNetworkData(graph) %>%
                        c(list(main = "my title")) %>%
                        do.call(visNetwork, .)
                      
                      toVisNetworkData(graph) %>%
                        {
                          do.call(visNetwork, c(., list(main = "my title", submain = "subtitle")))
                        }
                      
                      toVisNetworkData(graph) %>%
                        c(list(main = "my title")) %>%
                        do.call(visNetwork, .)
                      
                      toVisNetworkData(graph) %>%
                        {
                          do.call(visNetwork, c(., list(main = "my title", submain = "subtitle")))
                        }
                      

                      Adjusting Graph Layouts

                      copy iconCopydownload iconDownload
                      library(dplyr)
                      library(igraph)
                      library(visNetwork)
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      # data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      visIgraph(graph, layout='layout_randomly')
                      
                      permute(graph, permutation = sample(vcount(graph))) %>% 
                        visIgraph(layout='layout_in_circle')
                      
                      library(dplyr)
                      library(igraph)
                      library(visNetwork)
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      # data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      visIgraph(graph, layout='layout_randomly')
                      
                      permute(graph, permutation = sample(vcount(graph))) %>% 
                        visIgraph(layout='layout_in_circle')
                      
                      library(dplyr)
                      library(igraph)
                      library(visNetwork)
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      # data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      visIgraph(graph, layout='layout_randomly')
                      
                      permute(graph, permutation = sample(vcount(graph))) %>% 
                        visIgraph(layout='layout_in_circle')
                      

                      Understanding &quot;list&quot; and &quot;do.call&quot; commands

                      copy iconCopydownload iconDownload
                      library(dplyr)
                      library(visNetwork)
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      toVisNetworkData(graph) %>%
                        c(., list(main = "my title", submain = "subtitle")) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') 
                      
                      library(dplyr)
                      library(visNetwork)
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      toVisNetworkData(graph) %>%
                        c(., list(main = "my title", submain = "subtitle")) %>%
                        do.call(visNetwork, .) %>%
                        visIgraphLayout(layout = "layout_in_circle") %>% 
                        visEdges(arrows = 'to') 
                      

                      Tree of locations object type declaration

                      copy iconCopydownload iconDownload
                      type Foo = { id: number } | { id: number } & { [key: string]: Foo };
                      
                      type Idable = { id: number }
                      
                      type IndexableLocation = { [key: string]: SomeLocation }
                      
                      type SomeLocation = Idable | (Idable & IndexableLocation)
                      
                      
                      const locations: SomeLocation = {
                        id: 0,
                        USA: {
                          id: 1,
                          ARIZONA: {
                            id: 2,
                            PHOENIX: {
                              id: 3
                            },
                            TUSCANY: {
                              id: 4
                            }
                          },
                          ALABAMA: {
                            id: 4,
                      
                          }
                        },
                        CANADA: {
                          id: 6,
                          ONTARIO: {
                            id: 7,
                            TORONTO: {
                              id: 8
                            },
                            OTTAWA: {
                              id: 9
                            }
                          },
                          QUEBEC: {
                            id: 10,
                            MONTREAL: {
                              id: 11
                            }
                          },
                        },
                        UK: {
                          id: 12,
                          LONDON: {
                            id: 13
                          }
                        }
                      };
                      
                      console.log((locations as IndexableLocation)["USA"]); // Type Asserion is important ere to satisfy the compiler
                      
                      console.log(locations.id);
                      
                      type Idable = { id: number }
                      
                      type IndexableLocation = { [key: string]: SomeLocation }
                      
                      type SomeLocation = Idable | (Idable & IndexableLocation)
                      
                      
                      const locations: SomeLocation = {
                        id: 0,
                        USA: {
                          id: 1,
                          ARIZONA: {
                            id: 2,
                            PHOENIX: {
                              id: 3
                            },
                            TUSCANY: {
                              id: 4
                            }
                          },
                          ALABAMA: {
                            id: 4,
                      
                          }
                        },
                        CANADA: {
                          id: 6,
                          ONTARIO: {
                            id: 7,
                            TORONTO: {
                              id: 8
                            },
                            OTTAWA: {
                              id: 9
                            }
                          },
                          QUEBEC: {
                            id: 10,
                            MONTREAL: {
                              id: 11
                            }
                          },
                        },
                        UK: {
                          id: 12,
                          LONDON: {
                            id: 13
                          }
                        }
                      };
                      
                      console.log((locations as IndexableLocation)["USA"]); // Type Asserion is important ere to satisfy the compiler
                      
                      console.log(locations.id);
                      

                      JavaScript get UTC from local midnight

                      copy iconCopydownload iconDownload
                      let thedate = $('#datetimepicker').find("input").val();
                      let utcdate = moment.utc(thedate);
                      let localdate = utcdate.tz(timezone);
                      
                      function getTime() {
                        let thedate = $('#thedate').val();
                        console.log(thedate)
                        
                        // create a timestamp in the respective timezone
                        let localdate = moment.tz(thedate, "America/Phoenix");
                        // convert it to utc
                        let utcdate = localdate.utc();
                        // format the timestamp
                        console.log(utcdate.format("YYYY-MM-DD HH:mm:ss"));
                      }
                      <script src="https://momentjs.com/downloads/moment.js"></script>
                      <script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      <input id="thedate" type="date">
                      <input type="button" onClick="getTime()" value="Get Time">
                      let thedate = $('#datetimepicker').find("input").val();
                      let utcdate = moment.utc(thedate);
                      let localdate = utcdate.tz(timezone);
                      
                      function getTime() {
                        let thedate = $('#thedate').val();
                        console.log(thedate)
                        
                        // create a timestamp in the respective timezone
                        let localdate = moment.tz(thedate, "America/Phoenix");
                        // convert it to utc
                        let utcdate = localdate.utc();
                        // format the timestamp
                        console.log(utcdate.format("YYYY-MM-DD HH:mm:ss"));
                      }
                      <script src="https://momentjs.com/downloads/moment.js"></script>
                      <script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      <input id="thedate" type="date">
                      <input type="button" onClick="getTime()" value="Get Time">
                      let thedate = $('#datetimepicker').find("input").val();
                      let utcdate = moment.utc(thedate);
                      let localdate = utcdate.tz(timezone);
                      
                      function getTime() {
                        let thedate = $('#thedate').val();
                        console.log(thedate)
                        
                        // create a timestamp in the respective timezone
                        let localdate = moment.tz(thedate, "America/Phoenix");
                        // convert it to utc
                        let utcdate = localdate.utc();
                        // format the timestamp
                        console.log(utcdate.format("YYYY-MM-DD HH:mm:ss"));
                      }
                      <script src="https://momentjs.com/downloads/moment.js"></script>
                      <script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      <input id="thedate" type="date">
                      <input type="button" onClick="getTime()" value="Get Time">

                      Nginx Lua regex match first word

                      copy iconCopydownload iconDownload
                      ^[%w%s_-]*%w
                      
                      local function extract(text)
                          return string.match(text, "^[%w%s_-]*%w")
                      end
                       
                      print(extract("mar_paci (toto totot)"))
                      -- => mar_paci
                      print(extract("toi-re/3.9"))
                      -- => toi-re
                      
                      ^[%w%s_-]*%w
                      
                      local function extract(text)
                          return string.match(text, "^[%w%s_-]*%w")
                      end
                       
                      print(extract("mar_paci (toto totot)"))
                      -- => mar_paci
                      print(extract("toi-re/3.9"))
                      -- => toi-re
                      

                      function Map.put/4 is undefined or private

                      copy iconCopydownload iconDownload
                      - Map.put(assigns, :changeset, :action, Routes.post_post_path(@conn, :add_comment, @post))
                      + Map.put(assigns, :action, Routes.post_post_path(@conn, :add_comment, @post))
                      

                      Python package installs globally but fails within virtual environment

                      copy iconCopydownload iconDownload
                      python3 -m pip install cytopy
                      
                      [python path] -m pip install package
                      

                      Community Discussions

                      Trending Discussions on phoenix
                      • Fixing Cluttered Titles on Graphs
                      • Adding Labels to Graph Nodes
                      • Directly Adding Titles and Labels to Visnetwork
                      • Adjusting Graph Layouts
                      • Understanding &quot;list&quot; and &quot;do.call&quot; commands
                      • Tree of locations object type declaration
                      • Elixir Desktop has dialyzer issues in MenuBar
                      • JavaScript get UTC from local midnight
                      • Failed to unregister class Chrome_WidgetWin_0. Error
                      • Nginx Lua regex match first word
                      Trending Discussions on phoenix

                      QUESTION

                      Fixing Cluttered Titles on Graphs

                      Asked 2022-Mar-07 at 19:08

                      I made the following 25 network graphs (all of these graphs are copies for simplicity - in reality, they will all be different):

                      library(tidyverse)
                      library(igraph)
                      
                      
                      set.seed(123)
                      n=15
                      data = data.frame(tibble(d = paste(1:n)))
                      
                      relations = data.frame(tibble(
                        from = sample(data$d),
                        to = lead(from, default=from[1]),
                      ))
                      
                      data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )
                      
                      graph = graph_from_data_frame(relations, directed=T, vertices = data) 
                      
                      V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
                      
                      plot(graph, layout=layout.circle, edge.arrow.size = 0.2, main = "my_graph")
                      
                      library(visNetwork)
                      
                          a = visIgraph(graph)  
                      
                      m_1 = 1
                      m_2 = 23.6
                      
                       a = toVisNetworkData(graph) %>%
                          c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
                          do.call(visNetwork, .) %>%
                          visIgraphLayout(layout = "layout_in_circle") %>% 
                          visEdges(arrows = 'to') 
                      
                      
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      

                      I would like to "tile" them as 5 x 5 : Since these are interactive html plots - I used the following command:

                      library(manipulateWidget)
                      library(htmltools)
                      
                      ff = combineWidgets(y , x , w , v , u , t , s , r , q  , p , o , n , m , l , k , j , i , h , g , f , e , d , c , b , a)
                      
                      htmltools::save_html(html = ff, file = "widgets.html")
                      

                      I found out how to add a zoom option for each individual graph:

                       a = toVisNetworkData(graph) %>%
                          c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
                          do.call(visNetwork, .) %>%
                          visIgraphLayout(layout = "layout_in_circle") %>%  
                          visInteraction(navigationButtons = TRUE) %>% 
                          visEdges(arrows = 'to') 
                      
                      y = x = w = v = u = t = s = r = q  = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a
                      
                      ff = combineWidgets(y , x , w , v , u , t , s , r , q  , p , o , n , m , l , k , j , i , h , g , f , e , d , c , b , a)
                      
                      htmltools::save_html(html = ff, file = "widgets.html")
                      

                      enter image description here

                      But now the "zoom" options and "titles" have "cluttered" all the graphs!

                      I was thinking it might be better to "stack" all these graphs on top of each other and save each graph as a "group type" - and then hide/unhide as we please:

                      visNetwork(data, relations) %>% 
                       visOptions(selectedBy = "group")
                      
                      • Can we put all 25 graphs on one page and then "zoom" into each individual graph to view it better (e.g. have only one set of zoom/navigation buttons in the corner of the screen that works for all graphs)?

                      • Is there a way to stop the titles from overlapping with the graphs?

                      • Can we put all 25 graphs on one page and then "hide" individual graphs by "checking" an option menu button? (like the last example on this page: https://datastorm-open.github.io/visNetwork/options.html)

                      Here are the possible solutions I have thought of for this problem:

                      • Option 1: (a single zoom/navigation option for all graphs and no cluttered labels)

                      enter image description here

                      • Option 2: (In the future, each "trip" will be different - "trips" will contain the same nodes, but have different edge connections and different titles/subtitles.)

                      enter image description here

                      I know that this style of selection ("Option 2") can be made using the following code:

                      nodes <- data.frame(id = 1:15, label = paste("Label", 1:15),
                       group = sample(LETTERS[1:3], 15, replace = TRUE))
                      
                      edges <- data.frame(from = trunc(runif(15)*(15-1))+1,
                       to = trunc(runif(15)*(15-1))+1)
                      
                      
                      
                      visNetwork(nodes, edges) %>% 
                          visOptions(selectedBy = "group")
                      

                      But I am not sure how to adapt the above code for a pre-existing set of "visNetwork" graphs. For example, suppose I already have "visNetwork" graphs "a, b, c, d, e" - how can I "stack them on top of each other" and "shuffle through them" with a "select menu" like in the above code?

                      enter image description here

                      Can someone please show me a way of addressing this clutter problem using Option 1 and Option 2?

                      Thank you!

                      ANSWER

                      Answered 2022-Mar-03 at 21:12

                      While my solution isn't exactly what you describe under Option 2, it is close. We use combineWidgets() to create a grid with a single column and a row height where one graph covers most of the screen height. We squeeze in a link between each widget instance that scrolls the browser window down to show the following graph when clicked.

                      Let me know if this is working for you. It should be possible to automatically adjust the row size according to the browser window size. Currently, this depends on the browser window height being around 1000px.

                      I modified your code for the graph creation slightly and wrapped it in a function. This allows us to create 25 different-looking graphs easily. This way testing the resulting HTML file is more fun! What follows the function definition is the code to create a list of HTML objects that we then feed into combineWidgets().

                      library(visNetwork)
                      library(tidyverse)
                      library(igraph)
                      library(manipulateWidget)
                      library(htmltools)
                      
                      create_trip_graph <-
                        function(x, distance = NULL) {
                          n <- 15
                          data <- tibble(d = 1:n,
                                         name =
                                           c(
                                             "new york",
                                             "chicago",
                                             "los angeles",
                                             "orlando",
                                             "houston",
                                             "seattle",
                                             "washington",
                                             "baltimore",
                                             "atlanta",
                                             "las vegas",
                                             "oakland",
                                             "phoenix",
                                             "kansas",
                                             "miami",
                                             "newark"
                                           ))
                          
                          relations <-  tibble(from = sample(data$d),
                                               to = lead(from, default = from[1]))    
                          graph <-
                            graph_from_data_frame(relations, directed = TRUE, vertices = data)
                          
                          V(graph)$color <-
                            ifelse(data$d == relations$from[1], "red", "orange")
                          
                          if (is.null(distance))
                            # This generates a random distance value if none is 
                            # specified in the function call. Values are just for 
                            # demonstration, no actual distances are calculated.
                            distance <- sample(seq(19, 25, .1), 1)
                          
                          toVisNetworkData(graph) %>%
                            c(., list(
                              main = paste0("Trip ", x, " : "),
                              submain = paste0(distance, "KM")
                            )) %>%
                            do.call(visNetwork, .) %>%
                            visIgraphLayout(layout = "layout_in_circle") %>%
                            visInteraction(navigationButtons = TRUE) %>%
                            visEdges(arrows = 'to')
                        }
                      
                      comb_vgraphs <- lapply(1:25, function (x) list(
                        create_trip_graph(x),
                        htmltools::a("NEXT TRIP", 
                                     onclick = 'window.scrollBy(0,950)', 
                                     style = 'color:blue; text-decoration:underline;')))  %>%
                        unlist(recursive = FALSE)
                      
                      
                      ff <-
                        combineWidgets(
                          list = comb_vgraphs,
                          ncol = 1,
                          height = 25 * 950,
                          rowsize = c(24, 1)
                        )
                      
                      htmltools::save_html(html = ff, file = "widgets.html")
                      

                      If you want to have 5 network maps per row the code gets a bit more complex and it also might lead to a situation where the user might have to do horizontal scrolling in order to see everything, which is something you usually want to avoid when creating HTML pages. Here is the code for a 5 maps per row solution:

                      comb_vgraphs2 <- lapply(1:25, function(x) {
                        a <- list(create_trip_graph(x))
                        # We detect whenever we are creating the 5th, 10th, 15th etc. network map
                        # and add the link after that one.
                        if (x %% 5 == 0 & x < 25) a[[2]] <- htmltools::a("NEXT 5 TRIPS", 
                                                                onclick = 'window.scrollBy(0,500)', 
                                                                style = 'color:blue; text-decoration:underline;')
                        a
                      }) %>%
                        unlist(recursive = FALSE)
                      
                      ff2 <-
                        combineWidgets(
                          list = comb_vgraphs2,
                          ncol = 6, # We need six columns, 5 for the network maps 
                                    # and 1 for the link to scroll the page.
                          height = 6 * 500,
                          width = 1700
                          #rowsize = c(24, 1)
                        )
                      
                      # We need to add some white space in for the scrolling by clicking the link to 
                      # still work for the last row.
                      ff2$widgets[[length(ff2$widgets) + 1]] <- htmltools::div(style = "height: 1000px;")
                      
                      htmltools::save_html(html = ff2, file = "widgets2.html")
                      

                      In general I'd recommend you play around with the height and width, ncol and nrow arguments of combineWidgets() to achieve a satisfying solution. My strategy when building this was to first create a grid without the scroll link and add that in, after getting the grid right.

                      Source https://stackoverflow.com/questions/71244872

                      Community Discussions, Code Snippets contain sources that include Stack Exchange Network

                      Vulnerabilities

                      No vulnerabilities reported

                      Install phoenix

                      You can download it from GitHub.
                      You can use phoenix like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the phoenix component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

                      Support

                      For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

                      DOWNLOAD this Library from

                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      Share this Page

                      share link
                      Consider Popular Java Libraries
                      Try Top Libraries by forcedotcom
                      Compare Java Libraries with Highest Support
                      Compare Java Libraries with Highest Quality
                      Compare Java Libraries with Highest Security
                      Compare Java Libraries with Permissive License
                      Compare Java Libraries with Highest Reuse
                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      • © 2022 Open Weaver Inc.