hypebright / brackets

Wrapper around brackets-viewer.js: a simple library to display tournament brackets
Other
16 stars 1 forks source link

brackets

Wrapper around brackets-viewer.js: a simple library to display tournament brackets. Display round-robin, single elimination and double elimination tournaments in R or Shiny.

Lifecycle: experimental R-CMD-check

Installation

You can install the package from GitHub:

pak::pak("hypebright/brackets")

Data

The data needed for the tournament brackets is a list of participants and a list of matches. The data follows the brackets-model.

Usage

Above mentioned data is essential for using brackets effectively. The following example shows how to create a simple tournament bracket and show the results in a Shiny application ✨:

library(brackets)
library(shiny)

tennis_data <- list(
  participant = list(
    list(id = 0, tournament_id = 0, name = "πŸ‡±πŸ‡» Jelena Ostapenko"),
    list(id = 1, tournament_id = 0, name = "πŸ‡ΊπŸ‡Έ Coco Gauff"),
    list(id = 2, tournament_id = 0, name = "πŸ‡·πŸ‡΄ Sorana Cirstea"),
    list(id = 3, tournament_id = 0, name = "πŸ‡¨πŸ‡Ώ Karolina Muchova"),
    list(id = 4, tournament_id = 0, name = "πŸ‡¨πŸ‡Ώ Marketa Vondrousova"),
    list(id = 5, tournament_id = 0, name = "πŸ‡ΊπŸ‡Έ Madison Keys"),
    list(id = 6, tournament_id = 0, name = "πŸ‡¨πŸ‡³ Zheng Qinwen"),
    list(id = 7, tournament_id = 0, name = "πŸ‡§πŸ‡Ύ Aryna Sabalenka")
  ),
  stage = list(
    list(
      id = 0,
      tournament_id = 0,
      name = "US Open 2023 (Finals) 🎾",
      type = "single_elimination",
      number = 1,
      settings = list(
        size = 8,
        seedOrdering = list("natural"),
        grandFinal = "simple",
        matchesChildCount = 0
      )
    )
  ),
  round = list(
    list(id = 0, number = 1, stage_id = 0, group_id = 0),
    list(id = 1, number = 2, stage_id = 0, group_id = 0),
    list(id = 2, number = 3, stage_id = 0, group_id = 0)
  ),
  match = list(
    list(
      id = 0,
      number = 1,
      stage_id = 0,
      group_id = 0,
      round_id = 0,
      child_count = 0,
      status = 4,
      opponent1 = list(id = 0, position = 20, score = 0, result = "loss"),
      opponent2 = list(id = 1, position = 6, score = 2, result = "win")
    ),
    list(
      id = 1,
      number = 2,
      stage_id = 0,
      group_id = 0,
      round_id = 0,
      child_count = 0,
      status = 3,
      opponent1 = list(id = 2, position = 30, score = 0, result = "loss"),
      opponent2 = list(id = 3, position = 10, score = 2, result = "win")
    ),
    list(
      id = 2,
      number = 3,
      stage_id = 0,
      group_id = 0,
      round_id = 0,
      child_count = 0,
      status = 0,
      opponent1 = list(id = 4, position = 9, score = 0, result = "loss"),
      opponent2 = list(id = 5, position = 17, score = 2, result = "win")
    ),
    list(
      id = 3,
      number = 4,
      stage_id = 0,
      group_id = 0,
      round_id = 0,
      child_count = 0,
      status = 2,
      opponent1 = list(id = 6, position = 23, score = 0, result = "loss"),
      opponent2 = list(id = 7, position = 2, score = 2, result = "win")
    ),
    list(
      id = 4,
      number = 1,
      stage_id = 0,
      group_id = 0,
      round_id = 1,
      child_count = 0,
      status = 3,
      opponent1 = list(id = 1, score = 2, result = "win"),
      opponent2 = list(id = 3, score = 0, result = "loss")
    ),
    list(
      id = 5,
      number = 2,
      stage_id = 0,
      group_id = 0,
      round_id = 1,
      child_count = 0,
      status = 1,
      opponent1 = list(id = 5, score = 1, result = "loss"),
      opponent2 = list(id = 7, score = 2, result = "win")
    ),
    list(
      id = 6,
      number = 1,
      stage_id = 0,
      group_id = 0,
      round_id = 2,
      child_count = 0,
      status = 0,
      opponent1 = list(id = 1, score = 2, result = "win"),
      opponent2 = list(id = 7, score = 1, result = "loss")
    )
  ),
  match_game = list()
)

ui <- fluidPage(
  titlePanel("Tennis Tournament Bracket"),
  bracketsViewerOutput("bracket")
)

server <- function(input, output) {
  output$bracket <- renderBracketsViewer({
    bracketsViewer(tennis_data,
                   roundWidth = 300)
  })
}

shinyApp(ui, server)

You can find more extensive examples in the example Shiny app.

CustomiZing WidgetZ course

This package was developed during the CustomiZing WidgetZ course. During this course you will learn everything about Shiny package development: from the basics of HTML, CSS, and JavaScript to the way Shiny builds the UI and deals with dependencies. You will learn how to create custom Shiny inputs and outputs, and how to build any widget you can possibly imagine. You will also learn about {htmlwidgets}, which is the foundation of the {brackets} package.

Acknowledgements

Thanks to Corentin Girard for creating the underlying brackets libraries.

Related documentation: