Skip to content

Commit

Permalink
error free
Browse files Browse the repository at this point in the history
  • Loading branch information
angelina-momin committed May 24, 2024
1 parent a403f02 commit 8f80674
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 67 deletions.
3 changes: 2 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ Imports:
rorcid,
osfr,
httr,
zen4R
zen4R,
whisker
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.3.1
Expand Down
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ importFrom(xtable,xtable)
importFrom(yaml,read_yaml)
importFrom(yaml,yaml.load)
importFrom(zen4R,ZenodoRecord)
importFrom(whisker, whisker.render)
17 changes: 10 additions & 7 deletions R/register.R
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
CONFIG <- new.env()
CONFIG$FILTER_SUB_GROUPS <- list(
venues = list("community", "journal", "conference", "codecheck_nl")
)
CONFIG$MD_COLUMNS_WIDTHS <- "|:-------|:--------------------------------|:------------------|:---|:--------------------------|:----------|"

#' Function for rendering the register into different view
#'
#' NOTE: You should put a GitHub API token inth the environment variable `GITHUB_PAT` to fix rate limits. Acquire one at see https://github.com/settings/tokens.
Expand All @@ -19,13 +25,10 @@
#'
#' @export
register_render <- function(register = read.csv("register.csv", as.is = TRUE),
filter_by = c("venue"),
filter_by = c("venues"),
outputs = c("html", "md", "json")) {
CONFIG$MD_TEMPLATE <- system.file("extdata", "templates/template_register.md", package = "codecheck")

list_venue_categories <- c("community", "journal", "conference")
md_template <- system.file("extdata", "templates/template_register.md", package = "codecheck")
md_columns_widths <- "|:-------|:--------------------------------|:------------------|:---|:--------------------------|:----------|"

register_table <- preprocess_register(register)

# Creating list of of register tables with indices being the filter types
Expand All @@ -40,8 +43,8 @@ register_render <- function(register = read.csv("register.csv", as.is = TRUE),
}

# Rendering files
if ("md" %in% outputs) render_register_mds(list_register_tables, md_template, md_columns_widths)
if ("html" %in% outputs) render_register_htmls(list_register_tables, md_template, md_columns_widths)
if ("md" %in% outputs) render_register_mds(list_register_tables)
if ("html" %in% outputs) render_register_htmls(list_register_tables)
if ("json" %in% outputs) render_register_jsons(list_register_tables)

return(register_table)
Expand Down
33 changes: 20 additions & 13 deletions R/utils_create_filtered_register_csvs.R
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
create_filtered_register_csvs <- function(filter_by, register){
create_filtered_register_csvs <- function(filter_by, register, FILTER_SUB_GROUPS){

for (filter in filter_by){
column_name <- determine_column_name(filter)
unique_values <- unique(register$column_name)
unique_values <- unique(register[[column_name]])

for (value in unique_values) {
filtered_register <- register[register$column_name==value, ]
output_dir <- get_output_dir(filter, value)
filtered_register <- register[register[[column_name]]==value, ]
output_dir <- paste0(get_output_dir(filter, value), "register.csv")

if (!dir.exists(dirname(output_dir))) {
dir.create(dirname(output_dir), recursive = TRUE, showWarnings = TRUE)
Expand All @@ -18,27 +18,32 @@ create_filtered_register_csvs <- function(filter_by, register){
}

determine_column_name <- function(filter) {
result <- switch(filter,
"venue" = "Type",
column_name <- switch(filter,
"venues" = "Type",
NULL # Default case is set to NULL
)
if (is.null(result)) {
if (is.null(column_name)) {
stop(paste("Filter", filter, "is not recognized."))
}

return(result)
return(column_name)
}

get_output_dir <- function(filter, value) {
if (filter=="none"){
return(paste0("docs/"))
}

else if (filter=="venue"){
else if (filter=="venues"){
venue_category <- determine_venue_category(value)
# Removing the venue category to obtain the venue name
venue_name <- trimws(gsub("[()]", "", gsub(venue_category, "", venue_name)))
if (!(venue_category %in% CONFIG$FILTER_SUB_GROUPS[["venues"]])){
venue_category <- gsub(" ", "_", venue_category)
return(paste0("docs/", filter, "/", venue_category, "/"))
}

# Removing the venue category to obtain the venue name
venue_name <- trimws(gsub("[()]", "", gsub(venue_category, "", value)))
venue_name <- gsub(" ", "_", venue_name)
return(paste0("docs/", filter, "/", venue_category, "/", venue_name, "/"))
}

Expand All @@ -48,11 +53,13 @@ get_output_dir <- function(filter, value) {
}

determine_venue_category <- function(venue_name){
list_venue_categories <- CONFIG$FILTER_SUB_GROUPS[["venues"]]
for (category in list_venue_categories){
if (grepl(category, venue_name)) {
return(category)
}
}
# The venue does not belong to the listed categories. Throwing an error
stop(paste("Register venue does not fall into any of the following venue categories:", toString(list_venue_categories)))
# The venue does not belong to the listed categories.
warning(paste("Register venue does not fall into any of the following venue categories:", toString(list_venue_categories), "Setting its own name as a"))
return(venue_name)
}
10 changes: 6 additions & 4 deletions R/utils_register_sort.R → R/utils_filter_register_table.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ add_filtered_register_tables <- function(list_register_tables, register_table, f
for (filter in filter_by){
list_register_tables[[filter]] <- create_filtered_register_tables(register_table, filter)
}


list_1 <- unlist(list_register_tables, recursive = TRUE)
return(list_register_tables)
}

Expand All @@ -24,13 +25,14 @@ create_filtered_register_tables <- function(register_table, filter) {
list_filtered_register_tables <- list()

column_name <- determine_column_name(filter)
unique_values <- unique(register_table$column_name)

unique_values <- unique(register_table[[column_name]])
# Loop over the unique values. We create a sorted table for each value
for (value in unique_values) {
filtered_table <- register_table[register_table$column_name==value, ]
filtered_table <- register_table[register_table[[column_name]]==value, ]
rownames(filtered_table) <- NULL # Reset row names to remove row numbers
list_filtered_register_tables[[value]] <- filtered_table
}

print(names(list_filtered_register_tables))
return(list_filtered_register_tables)
}
25 changes: 13 additions & 12 deletions R/utils_render_register_mds.R
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ load_md_template <- function(template_path){
#'
#' @return The modified markdown table
adjust_markdown_title <- function(md_table, register_table_name){

if (register_table_name != "Original"){
if (register_table_name == "original"){
title_addition <- ""
}

Expand Down Expand Up @@ -71,41 +70,43 @@ add_repository_links_md <- function(register_table) {
}

# Helper function to process each table and convert it to markdown format
render_register_md <- function(filter, register_table, register_table_name, md_table, md_columns_widths, is_temp_file=FALSE) {
render_register_md <- function(filter, register_table, register_table_name, is_temp_file=FALSE) {
# Fill in the content
md_table <- load_md_template(CONFIG$MD_TEMPLATE)

markdown_content <- capture.output(kable(register_table, format = "markdown"))

md_table <- adjust_markdown_title(md_table, register_table_name)
md_table <- gsub("\\$content\\$", paste(markdown_content, collapse = "\n"), md_table)

# Adjusting the column widths
md_table <- unlist(strsplit(md_table, "\n", fixed = TRUE))
# Determining which line to add the md column widths in
alignment_line_index <- grep("^\\|:---", md_table)
md_table[alignment_line_index] <- md_columns_widths
md_table[alignment_line_index] <- CONFIG$MD_COLUMNS_WIDTHS

# Determining the directory and saving the file
output_dir <- get_output_dir(filter, register_table_name)

if (!dir.exists(output_dir)) {
dir.create(output_dir, recursive = TRUE, showWarnings = TRUE)
}

if (is_temp_file){
output_file_path <- paste0(output_dir, "temp.md")
output_dir <- paste0(output_dir, "temp.md")
}

else{
output_file_path <- paste0(output_dir, "register.md")
output_dir <- paste0(output_dir, "register.md")
}

writeLines(md_table, output_file_path)
writeLines(md_table, output_dir)
}

render_register_mds <- function(list_register_tables, md_template){
md_table <- load_md_template(md_template)
render_register_mds <- function(list_register_tables){
for (filter in names(list_register_tables)){
for (register_table_name in names(list_register_tables[[filter]]))
for (register_table_name in names(list_register_tables[[filter]])){
register_table <- list_register_tables[[filter]][[register_table_name]]
render_register_md(filter, register_table, register_table_name, md_table, md_columns_widths)
render_register_md(filter, register_table, register_table_name)
}
}
}
53 changes: 23 additions & 30 deletions R/utils_render_reigster_html.r
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ add_repository_links_html <- function(register_table) {
#'
#' @return None
generate_html_document_yml <- function(filter, register_table_name) {
dir <- paste0(getwd(), get_output_dir(filter, register_table_name))
dir <- paste0(getwd(), "/", get_output_dir(filter, register_table_name))

yaml_content <- sprintf(
"# DO NOT EDIT THIS FILE MANUALLY
Expand All @@ -56,25 +56,24 @@ create_index_postfix_html <- function(filter, register_table_name){
hrefs <- set_html_postfix_hrefs(filter, register_table_name)

# Using the index_postfix_template
postfix_template <- readLines(paste0(getwd(), "/docs/index_postfix.html"), warn = FALSE)

postfix_template <- readLines(paste0(getwd(), "/docs/index_postfix_template.html"), warn = FALSE)
# Render the template with the correct hrefs
output <- whisker.render(postfix_template, hrefs)
writeLines(output, get_output_dir(filter, register_table_name))
writeLines(output, paste0(get_output_dir(filter, register_table_name), "index_postfix.html"))
}

create_index_prefix_html <- function(filter, register_table_name){
# Using the index_prefix_template
prefix_template <- readLines(paste0(getwd(), "/docs/index_prefix.html"), warn = FALSE)
prefix_template <- readLines(paste0(getwd(), "/docs/index_prefix_template.html"), warn = FALSE)

writeLines(prefix_template, get_output_dir(filter, register_table_name))
writeLines(prefix_template, paste0(get_output_dir(filter, register_table_name), "index_prefix.html"))
}

create_index_header_html <- function(filter, register_table_name){
# Using the index_header_template
header_template <- readLines(paste0(getwd(), "/docs/index_header.html"), warn = FALSE)
header_template <- readLines(paste0(getwd(), "/docs/index_header_template.html"), warn = FALSE)

writeLines(header_template, get_output_dir(filter, register_table_name))
writeLines(header_template, paste0(get_output_dir(filter, register_table_name), "index_header.html"))
}

set_html_postfix_hrefs <- function(filter, register_table_name) {
Expand All @@ -87,25 +86,24 @@ set_html_postfix_hrefs <- function(filter, register_table_name) {
return(hrefs)
}

set_href <- function(filter, register_table_name, href_type) {
base_url <- "https://"

set_href <- function(filter, register_table_name, href_type, filter_subcatetgories) {

# Determine base path based on the resource type
switch(href_type,
"csv_source" = base_url <- paste0(base_url, "raw.githubusercontent.com/codecheckers/register/master/"),
"searchable_csv" = base_url <- paste0(base_url, "github.com/codecheckers/register/blob/master/"),
"json" = base_url <- paste0(base_url, "codecheck.org.uk/register/"),
"md" = base_url <- paste0(base_url, "codecheck.org.uk/register/")
result <- switch(href_type,
"csv_source" = list(base_url = "https://raw.githubusercontent.com/codecheckers/register/master/", ext = ".csv"),
"searchable_csv" = list(base_url ="https://github.com/codecheckers/register/blob/master/", ext = ".csv"),
"json" = base_url <- list(base_url = "https://codecheck.org.uk/register/", ext = ".json"),
"md" = base_url <- list(base_url = "https://codecheck.org.uk/register/", ext = ".md")
)

if (filter == "None") {
return(paste0(base_url, "register.", href_type))
} else if (filter == "venue") {
} else if (filter == "venues") {
venue_category <- determine_venue_category(register_table_name)
venue_name <- trimws(gsub("[()]", "", gsub(venue_category, "", register_table_name)))
return(paste0(base_url, filter, "/", venue_category, "/", venue_name, "/register.", href_type))
return(paste0(result$base_url, filter, "/", venue_category, "/", venue_name, "/register", result$ext))
} else {
return(paste0(base_url, filter, "/", register_table_name, "/register.", href_type))
return(paste0(result$base_url, filter, "/", register_table_name, "/register", result$ext))
}
}

Expand All @@ -115,15 +113,13 @@ create_section_htmls <- function(filter, register_table_name) {
create_index_header_html(filter, register_table_name)
}

render_register_html <- function(filter, register_table, register_table_name, md_table, md_columns_widths){
generate_html_document_yml(filter, register_table_name)

render_register_html <- function(filter, register_table, register_table_name){
# Add icons to the Repository column for HTML output, use a copy of the register.md
register_table <- add_repository_links_html(register_table)

# Dynamically create the index header, prefix and postfix files
create_section_htmls(filter, register_table_name)
create_html_yaml(filter, register_table_name)
generate_html_document_yml(filter, register_table_name)

output_dir <- get_output_dir(filter, register_table_name)
# Capture the HTML output from a markdown file
Expand All @@ -135,12 +131,11 @@ render_register_html <- function(filter, register_table, register_table_name, md

# If .md does not exist create a temp md file
else{
render_register_md(filter, register_table, register_table_name, md_table, md_columns_widths, is_temp_file=TRUE)
render_register_md(filter, register_table, register_table_name, is_temp_file=TRUE)
md_file_path <- paste0(output_dir, "temp.md")
temp_md_used <- TRUE
}

yaml_path <- normalizePath(file.path(getwd(), paste0(output_dir, "docs/html_document.yml")))
yaml_path <- normalizePath(file.path(getwd(), paste0(output_dir, "html_document.yml")))

# Render HTML from markdown
rmarkdown::render(
Expand All @@ -155,14 +150,12 @@ render_register_html <- function(filter, register_table, register_table_name, md
}
}

render_register_htmls <- function(list_register_tables, md_template, md_columns_widths) {
md_table <- load_md_template(md_template)

render_register_htmls <- function(list_register_tables) {
# Loop over each register table
for (filter in names(list_register_tables)){
for (register_table_name in names(list_register_tables[[filter]])) {
register_table <- list_register_tables[[filter]][[register_table_name]]
render_register_html(filter, register_table, register_table_name, md_table, md_columns_widths)
render_register_html(filter, register_table, register_table_name)
}
}
}

0 comments on commit 8f80674

Please sign in to comment.