From 36554d3df31cdd1a30f762946c131270b0ff756e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABlle=20Salmon?= Date: Wed, 16 Jul 2025 09:27:39 +0200 Subject: [PATCH 1/4] improve documentation of search --- R/screenshots.R | 63 ++++++++++++++++++++++++-------- browse/api.qmd | 8 ++-- browse/search.qmd | 31 +++++++++++++++- img/search-authorJeroenJson.png | Bin 505646 -> 485505 bytes img/search-exportsToJson.png | Bin 518604 -> 556956 bytes img/search-jeroen-or-curl.png | Bin 0 -> 457912 bytes img/search-jeroenCurl.png | Bin 0 -> 507680 bytes img/search-jeroenCurlJson.png | Bin 0 -> 548916 bytes img/search-missingData.png | Bin 583821 -> 602428 bytes img/search.png | Bin 312911 -> 306453 bytes 10 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 img/search-jeroen-or-curl.png create mode 100644 img/search-jeroenCurl.png create mode 100644 img/search-jeroenCurlJson.png diff --git a/R/screenshots.R b/R/screenshots.R index 208cc22..0b5d6c6 100644 --- a/R/screenshots.R +++ b/R/screenshots.R @@ -1,9 +1,12 @@ library("chromote") -screenshot <- function(b, path, - selector = "html", - cliprect = c(top = 0, left = 0, width = 1920, height = 1080), - expand = NULL) { +screenshot <- function( + b, + path, + selector = "html", + cliprect = c(top = 0, left = 0, width = 1920, height = 1080), + expand = NULL +) { img_path <- file.path("img", path) screen_width <- 1920 screen_height <- 1080 @@ -27,7 +30,7 @@ screen_height <- 1080 b <- ChromoteSession$new(height = screen_height, width = screen_width) # Landing page ---- -p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired +p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired b$Page$navigate("https://r-universe.dev/search/") b$wait_for(p) screenshot(b, "search.png") @@ -35,23 +38,39 @@ screenshot(b, "search.png") # Searching for something ---- screenshot_search <- function(query, screen_width) { message(query) - p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired + p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired b$Page$navigate(sprintf("https://r-universe.dev/search/?q=%s", query)) b$wait_for(p) + filename <- if (query == "jeroen curl") { + "jeroen-or-curl" + } else { + snakecase::to_lower_camel_case(query) + } screenshot( - b, sprintf("search-%s.png", snakecase::to_lower_camel_case(query)) + b, + sprintf("search-%s.png", filename) ) } purrr::walk( - c('"missing-data"', "author:jeroen json", "exports:toJSON"), + c( + '"missing-data"', + "author:jeroen json", + "exports:toJSON", + "jeroen curl", + '"jeroen" "curl"', + "jeroen -curl -json" + ), screenshot_search, screen_width = screen_width ) # Searching, advanced fields ---- -p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired +p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired b$Page$navigate("https://r-universe.dev/search/") b$wait_for(p) -search_info <- b$DOM$querySelector(b$DOM$getDocument()$root$nodeId, "button.btn.btn-outline-secondary.dropdown-toggle.dropdown-toggle-split") +search_info <- b$DOM$querySelector( + b$DOM$getDocument()$root$nodeId, + "button.btn.btn-outline-secondary.dropdown-toggle.dropdown-toggle-split" +) quads <- b$DOM$getBoxModel(search_info$nodeId) content_quad <- as.numeric(quads$model$content) center_x <- mean(content_quad[c(1, 3, 5, 7)]) @@ -77,12 +96,15 @@ b$Input$dispatchMouseEvent( ) Sys.sleep(2) screenshot( - b, "search-advanced.png", selector = "#searchbox", expand = 20 + b, + "search-advanced.png", + selector = "#searchbox", + expand = 20 ) # work from an organization ---- screenshot_org <- function(tab, url) { - p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired + p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired b$Page$navigate(sprintf("%s/%s/", url, tab)) #if (tab == "contributors") Sys.sleep(20) b$wait_for(p) @@ -98,7 +120,7 @@ purrr::walk( pkg_url <- "https://r-spatial.r-universe.dev/sf" fragments <- c("", "citation", "development", "readme", "manual") screenshot_pkg <- function(fragment, pkg_url) { - p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired + p <- b$Page$loadEventFired(wait_ = FALSE) # Get the promise for the loadEventFired b$Page$navigate(pkg_url) b$wait_for(p) @@ -116,9 +138,13 @@ screenshot_pkg <- function(fragment, pkg_url) { b, sprintf("pkg-%s.png", fragment), # https://github.com/rstudio/chromote/issues/168 - cliprect = c(top = 0, left = quads$model$margin[[2]], width = 1920, height = 1080) + cliprect = c( + top = 0, + left = quads$model$margin[[2]], + width = 1920, + height = 1080 + ) ) - } purrr::walk(fragments, screenshot_pkg, pkg_url = pkg_url) @@ -133,5 +159,10 @@ screenshot( b, "pkg-function-doc.png", # are top and left inverted? it seems so! - cliprect = c(top = 0, left = quads$model$margin[[2]], width = 1920, height = 1080) + cliprect = c( + top = 0, + left = quads$model$margin[[2]], + width = 1920, + height = 1080 + ) ) diff --git a/browse/api.qmd b/browse/api.qmd index 4b6269c..d66d60a 100644 --- a/browse/api.qmd +++ b/browse/api.qmd @@ -59,7 +59,8 @@ Example using `{universe}`: ```{r} packages <- universe::universe_ls("jeroen") str(packages) -``` +`` +` ### Information of all packages in an universe @@ -103,7 +104,8 @@ v8 <- httr2::request("https://jeroen.r-universe.dev/api/packages/V8") |> httr2::resp_body_json() str(v8, max.level = 1) -``` +` +`` Example using `{universe}`: @@ -158,7 +160,7 @@ deps$total ``` -## Search all universes +## Search all universes {#api-global-search} URL: `https://r-universe.dev/api/search` Parameters: diff --git a/browse/search.qmd b/browse/search.qmd index 5e377d5..24db8ff 100644 --- a/browse/search.qmd +++ b/browse/search.qmd @@ -3,11 +3,25 @@ title: "Search for packages" --- You can search for packages via using keywords or author names. -To search for an exact phrase like "weather data," use **double quotes** instead of single quotes. -The search bar includes a drop-down button for accessing advanced search fields. +You can use the [API](#api-global-search) to do the same search. + +To search for an exact phrase like "weather data", that can include spaces or other characters, use **double quotes** instead of single quotes. + ![Search landing page](../img/search.png){group="search" fig-alt="Search landing page, with a search box"} +The search bar includes a drop-down button for accessing advanced search fields: + +- Package +- Owner +- Author +- Contributor +- Topic +- Needs +- Exports +- Data + + ![Search landing page, advanced fields](../img/search-advanced.png){group="search" fig-alt="Search landing page, displaying advanced search fields like author and keywords"} ![Search results for '"missing-data"'](../img/search-missingData.png){group="search" fig-alt="Search results for 'missing-data'"} @@ -16,6 +30,19 @@ The search bar includes a drop-down button for accessing advanced search fields. ![Search results for 'exports:toJSON'](../img/search-exportsToJson.png){group="search" fig-alt="Search results for 'exports:tojson'"} +To use a logical OR, add a space between search terms. + +![Search results for 'jeroen curl'](../img/search-jeroen-or-curl.png){group="search" fig-alt="Search results for 'jeroen curl'"} + +To use a logical AND, use double quotes for each search term: + +![Search results for '"jeroen" "curl"'](../img/search-jeroenCurl.png){group="search" fig-alt="Search results for '"jeroen" "curl"'"} + +To use a logical NOT: prefix search terms with -: + +![Search results for 'jeroen -curl -json'](../img/search-jeroenCurlJson.png){group="search" fig-alt="Search results for 'jeroen -curl -json'"} + + ## How is the package-rank score calculated? {#rank} The rank of a package in search results is based on its [match](https://github.com/r-universe-org/cranlike-server/blob/master/src/db.js#L63-L93) with the search queries, and on its popularity/quality. diff --git a/img/search-authorJeroenJson.png b/img/search-authorJeroenJson.png index c926b4d37781aa6555222eb2e6edef937752469a..5e295f8147e4abc1e261c622cf0556516b32813f 100644 GIT binary patch literal 485505 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

e0S#549 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