Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
cd782eb
changed alt text for profile picture in about partial
bgv2 Nov 26, 2025
3c93628
added titles to navbar buttons
bgv2 Nov 30, 2025
67b060b
add title to close search button
bgv2 Nov 30, 2025
e7255df
update link descriptions on Topics page
bgv2 Nov 30, 2025
2a8cb6f
switch left side toc to use div/span instead of lists
bgv2 Nov 30, 2025
639d977
move book_menu changes to separate partial file
bgv2 Dec 1, 2025
e19367c
move navbar and search changes to layouts/partials folder
bgv2 Dec 1, 2025
1a3be19
remove list markup from right side toc and add hover color for dark m…
bgv2 Dec 1, 2025
c8788b4
add screen reader text for categories and labels
bgv2 Dec 1, 2025
eaa7f29
fix active section of left toc not changing color in dark mode
bgv2 Dec 1, 2025
872baec
change search h3 to h2
bgv2 Dec 1, 2025
701a6df
change aria-live of search results to announce results
bgv2 Dec 1, 2025
69e3377
revert theme book_menu
bgv2 Dec 1, 2025
72fec2b
move academic-search.js changes out of themes folder
bgv2 Dec 1, 2025
a3dd859
add alt text to code download shortcode
bgv2 Dec 8, 2025
eb1a6a0
add aria-label and title fields to link button shortcode
bgv2 Dec 8, 2025
970ad9b
add titles/aria-labels to fiji course buttons
bgv2 Dec 8, 2025
7bf0d38
fixed broken images in fiji-omero tutorial
bgv2 Dec 8, 2025
b567f80
Merge branch 'uvarc:staging' into staging
bgv2 Dec 12, 2025
32eaa52
Slurm from Terminal accessibility changes
bgv2 Dec 14, 2025
632a885
replace hpc intro videos with new ones
bgv2 Dec 15, 2025
7987be8
add title to file download button
bgv2 Dec 15, 2025
417cf48
move file download text to link
bgv2 Dec 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 185 additions & 0 deletions assets/js/academic-search.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
/*************************************************
* Academic
* https://github.com/gcushen/hugo-academic
*
* In-built Fuse based search algorithm.
**************************************************/

/* ---------------------------------------------------------------------------
* Configuration.
* --------------------------------------------------------------------------- */

// Configure Fuse.
let fuseOptions = {
shouldSort: true,
includeMatches: true,
tokenize: true,
threshold: search_config.threshold, // Set to ~0.3 for parsing diacritics and CJK languages.
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: search_config.minLength, // Set to 1 for parsing CJK languages.
keys: [
{name:'title', weight:0.99}, /* 1.0 doesn't work o_O */
{name:'summary', weight:0.6},
{name:'authors', weight:0.5},
{name:'content', weight:0.2},
{name:'tags', weight:0.5},
{name:'categories', weight:0.5}
]
};

// Configure summary.
let summaryLength = 60;

/* ---------------------------------------------------------------------------
* Functions.
* --------------------------------------------------------------------------- */

// Get query from URI.
function getSearchQuery(name) {
return decodeURIComponent((location.search.split(name + '=')[1] || '').split('&')[0]).replace(/\+/g, ' ');
}

// Set query in URI without reloading the page.
function updateURL(url) {
if (history.replaceState) {
window.history.replaceState({path:url}, '', url);
}
}

// Pre-process new search query.
function initSearch(force, fuse) {
let query = $("#search-query").val();

// If query deleted, clear results.
if ( query.length < 1) {
$('#search-hits').empty();
}

// Check for timer event (enter key not pressed) and query less than minimum length required.
if (!force && query.length < fuseOptions.minMatchCharLength)
return;

// Do search.
$('#search-hits').empty();
searchAcademic(query, fuse);
let newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + '?q=' + encodeURIComponent(query) + window.location.hash;
updateURL(newURL);
}

// Perform search.
function searchAcademic(query, fuse) {
let results = fuse.search(query);
// console.log({"results": results});

if (results.length > 0) {
$('#search-hits').append('<h2 class="mt-0">' + results.length + ' ' + i18n.results + '</h2>');
parseResults(query, results);
} else {
$('#search-hits').append('<div class="search-no-results">' + i18n.no_results + '</div>');
}
}

// Parse search results.
function parseResults(query, results) {
$.each( results, function(key, value) {
let content_key = value.item.section;
let content = "";
let snippet = "";
let snippetHighlights = [];

// Show abstract in results for content types where the abstract is often the primary content.
if (["publication", "talk"].includes(content_key)) {
content = value.item.summary;
} else {
content = value.item.content;
}

if ( fuseOptions.tokenize ) {
snippetHighlights.push(query);
} else {
$.each( value.matches, function(matchKey, matchValue) {
if (matchValue.key == "content") {
let start = (matchValue.indices[0][0]-summaryLength>0) ? matchValue.indices[0][0]-summaryLength : 0;
let end = (matchValue.indices[0][1]+summaryLength<content.length) ? matchValue.indices[0][1]+summaryLength : content.length;
snippet += content.substring(start, end);
snippetHighlights.push(matchValue.value.substring(matchValue.indices[0][0], matchValue.indices[0][1]-matchValue.indices[0][0]+1));
}
});
}

if (snippet.length < 1) {
snippet += value.item.summary; // Alternative fallback: `content.substring(0, summaryLength*2);`
}

// Load template.
let template = $('#search-hit-fuse-template').html();

// Localize content types.
if (content_key in content_type) {
content_key = content_type[content_key];
}

// Parse template.
let templateData = {
key: key,
title: value.item.title,
type: content_key,
relpermalink: value.item.relpermalink,
snippet: snippet
};
let output = render(template, templateData);
$('#search-hits').append(output);

// Highlight search terms in result.
$.each( snippetHighlights, function(hlKey, hlValue){
$("#summary-"+key).mark(hlValue);
});

});
}

function render(template, data) {
// Replace placeholders with their values.
let key, find, re;
for (key in data) {
find = '\\{\\{\\s*' + key + '\\s*\\}\\}'; // Expect placeholder in the form `{{x}}`.
re = new RegExp(find, 'g');
template = template.replace(re, data[key]);
}
return template;
}

/* ---------------------------------------------------------------------------
* Initialize.
* --------------------------------------------------------------------------- */

// If Academic's in-built search is enabled and Fuse loaded, then initialize it.
if (typeof Fuse === 'function') {
// Wait for Fuse to initialize.
$.getJSON(search_config.indexURI, function (search_index) {
let fuse = new Fuse(search_index, fuseOptions);

// On page load, check for search query in URL.
if (query = getSearchQuery('q')) {
$("body").addClass('searching');
$('.search-results').css({opacity: 0, visibility: "visible"}).animate({opacity: 1},200);
$("#search-query").val(query);
$("#search-query").focus();
initSearch(true, fuse);
}

// On search box key up, process query.
$('#search-query').keyup(function (e) {
clearTimeout($.data(this, 'searchTimer')); // Ensure only one timer runs!
if (e.keyCode == 13) {
initSearch(true, fuse);
} else {
$(this).data('searchTimer', setTimeout(function () {
initSearch(false, fuse);
}, 250));
}
});
});
}
71 changes: 68 additions & 3 deletions assets/scss/custom.scss
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,39 @@ html {
}

#TableOfContents li a,
.toc-top li a {
.toc-top li a,
.toc-top span a
{
color: rgb(89, 89, 89);
}

.toc-top {
padding-left: 0;
}

// TOC indentation for each level.
#TableOfContents div div {
padding-left: 0.8rem;
}

#TableOfContents span {
display: block;
}

#TableOfContents span a,
.toc-top span a {
display: block;
padding: .125rem 1.5rem;
font-size: 0.7rem;
}

#TableOfContents span a:hover,
.toc-top span a:hover
{
color: $sta-primary;
text-decoration: none;
}

footer {
display: flex;
justify-content: flex-start;
Expand Down Expand Up @@ -230,6 +259,25 @@ footer {
display: none;
}

.docs-sidebar .nav>span>a {
display: block;
padding: .25rem 1.5rem;
font-size: 0.8rem;
color: rgba(0, 0, 0, .65);
}

.docs-sidebar .nav>span>a:hover {
color: rgba(0, 0, 0, .85);
text-decoration: none;
background-color: transparent;
}

.docs-sidebar .nav>span>a:hover {
color: rgba(0, 0, 0, .85);
text-decoration: none;
background-color: transparent;
}

.dark {

.site-footer-logo-dark {
Expand All @@ -241,6 +289,10 @@ footer {
display: none;
}

.docs-sidebar .nav > span:not(.active) > a {
color: rgb(248, 248, 242);
}

.btn-primary, .btn.btn-primary.active, .btn-light {
color: white;
}
Expand All @@ -254,14 +306,27 @@ footer {
}

#TableOfContents li a,
.toc-top li a {
.toc-top li a,
.toc-top span a
{
color: rgb(191, 190, 193);
}

#TableOfContents li a:hover,
.toc-top li a:hover,
.toc-top span a:hover,
.docs-sidebar .docs-toc-item a:hover,
.docs-sidenav a:hover,
.docs-sidebar .nav > span:not(.active) > a:hover
{
color: mix(white, $sta-primary-light, 50%);
}

a,
.docs-sidebar .docs-toc-item.active a,
.docs-sidebar .nav>.active:hover>a,
.docs-sidebar .nav>.active>a {
.docs-sidebar .nav>.active>a,
.docs-sidebar .docs-toc-item.active span a {
color: mix(white, $sta-primary-light, 50%);
}

Expand Down
12 changes: 6 additions & 6 deletions content/courses/fiji-image-processing/fiji-omero/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,8 @@ Before you begin, you need to know the dataset ID that the image should be linke

3. Go to OMERO webclient (http://omero.hpc.virginia.edu) and look for the uploaded image in `Orphaned Images`.

<img src="/courses/fiji-omero/leaf.png" style="float:left;width:40%;height:auto">
<img src="/courses/fiji-omero/fiji-omero-new-export.png" style="width:40%;height:auto">
<img src="./leaf.png" style="float:left;width:40%;height:auto">
<img src="./fiji-omero-new-export.png" style="width:40%;height:auto">


<br>
Expand Down Expand Up @@ -211,15 +211,15 @@ Before you begin, you need to know the dataset ID that the image should be linke
a. Go to `Process` > `Filter` > `Median`. In the popup dialog enter a `Radius` of `3.0` and click `OK`. This will smooth out some of the image's intrinsic noise without degrading the object outlines.

b. Go to `Image` > `Adjust Threshold`. In the popup dialog choose the `Default` thresholding algorithm, uncheck the `Dark Background` box and click `Apply`. The image should have been converted to a binary mask with white objects ona black background.
<img src="/courses/fiji-omero/fiji-omero-setthreshold.png" style="float:left;width:47%;height:auto">
<img src="/courses/fiji-omero/fiji-omero-blobs-thresholded.png" style="width:40%;height:auto">
<img src="./fiji-omero-setthreshold.png" style="float:left;width:47%;height:auto">
<img src="./fiji-omero-blobs-thresholded.png" style="width:40%;height:auto">


c. Go to `Analyze` > `Set Measurements...`. In the popup dialog specify the parameters as shown in this screenshot. Click `OK`.

d. Go to `Analyze` > `Analyze Particles` and set up the parameters as shown. Click `OK`.
<img src="/courses/fiji-omero/fiji-omero-setmeasurements.png" style="float:left;width:40%;height:auto">
<img src="/courses/fiji-omero/fiji-omero-analyzeparticles.png" style="width:50%;height:auto">
<img src="./fiji-omero-setmeasurements.png" style="float:left;width:40%;height:auto">
<img src="./fiji-omero-analyzeparticles.png" style="width:50%;height:auto">

e. These steps should create a `Results` and a `Summary` table.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ url_dataset: data/intro-fiji-images.zip

{{< figure src="/img/fiji.png" >}}

{{% link-button href="/data/intro-fiji-images.zip" icon="fa fa-download" %}}Data{{% /link-button %}}
{{% link-button href="/data/intro-fiji-images.zip" icon="fa fa-download" aria-label="Download Data" title="Download Data" %}}Data{{% /link-button %}}

## Fiji Installation

Expand Down
2 changes: 1 addition & 1 deletion content/courses/fiji-image-processing/scripting/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ url_code: /scripts/fiji/fiji-example-scripts.zip

{{< figure library="true" src="fiji.png" >}}

{{% link-button href="/scripts/fiji/fiji-example-scripts.zip" icon="fa fa-download" %}}Scripts{{% /link-button %}}
{{% link-button href="/scripts/fiji/fiji-example-scripts.zip" icon="fa fa-download" title="Download Scripts" aria-label="Download Scripts" %}}Scripts{{% /link-button %}}

This chapter is an introduction to the scripting interface of the [Fiji](https://fiji.sc) application, an open-source and enhanced version of the popular ImageJ program used for scientific image processing. Here you will learn how to write scripts for automated execution of image processing pipelines and batch processing of multiple image files in Fiji.

Expand Down
4 changes: 2 additions & 2 deletions content/landing/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ subtitle = ""

## [Tutorials](/tutorials) are perfect for introducing yourself to a new topic.

Some tutorials are offered as in-person and/or Zoom workshops regularly. Find the notes or slides and download materials [here](/tutorials).
Some tutorials are offered as in-person and/or Zoom workshops regularly. Find the notes or slides and download materials [on the Tutorials page](/tutorials).

For a list of upcoming workshops, please see our [page](https://www.rc.virginia.edu/education/workshops/) at the UVARC Website.
For a list of upcoming workshops, please see [the Workshops page](https://www.rc.virginia.edu/education/workshops/) at the UVARC Website.

## [Short courses](/courses) are longer and more in-depth than tutorials or workshops.

Expand Down
5 changes: 3 additions & 2 deletions content/notes/slurm-from-cli/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ type: docs
weight: 1
menu:
slurm-from-cli:
name: The Slurm Resource Manager
---

{{< figure src="/notes/slurm-from-cli/img/slurm_logo.png" width=30% >}}
{{< figure src="/notes/slurm-from-cli/img/slurm_logo.png" width=30% alt="Slurm resource manager logo" >}}


[Slurm](https://slurm.schedmd.com/) is a __resource manager__ (RM), also known as a _queueing system_.
[Slurm](https://slurm.schedmd.com/ "The official Slurm website") is a __resource manager__ (RM), also known as a _queueing system_.

Resource managers are used to submit _jobs_ on a computing cluster to compute nodes from an access point generally called a login node.

Expand Down
Binary file modified content/notes/slurm-from-cli/img/slurm_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions content/notes/slurm-from-cli/section1.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ menu:

## Resources and Partitions

An HPC **job** is a description of the resources required, any preparatory steps such as loading [modules](https://www.rc.virginia.edu/userinfo/rivanna/software/modules/) or otherwise setting up an environment, and the commands to run the software, along with any postprocessing that may be appropriate.
An HPC **job** is a description of the resources required, any preparatory steps such as loading [modules](https://www.rc.virginia.edu/userinfo/rivanna/software/modules/ "The Research Computing website's modules page") or otherwise setting up an environment, and the commands to run the software, along with any postprocessing that may be appropriate.

The job is specified through a special form of script often called a _batch script_. Usually it is written in `bash`.

Expand All @@ -34,7 +34,7 @@ Slurm began when cpus had only one core each. Beginning around 2005, cpus began

**Memory** refers to _random-access memory_. It is not the same thing as storage. If a process reports running out of memory, it means RAM memory. Running out of disk space will result in a different error.

For more details about the structure of a computational cluster, see our [introduction](https://learning.rc.virginia.edu/notes/hpc-intro/).
For more details about the structure of a computational cluster, see our [introduction](/notes/hpc-intro/ "Intro to High Performance Computing notes").
## Processes and Tasks

A **process** can be envisioned an instance of an executable that is running on a particular computer. Most executables run only a single process. Some executables run _threads_ within the _root_ process.
Expand All @@ -44,7 +44,7 @@ Slurm refers to the root process as a **task**. By default, each task is assigne

## Slurm Resource Requests

SLURM refers to queues as __partitions__ . We do not have a default partition; each job must request one explicitly.
SLURM refers to queues as __partitions__. We do not have a default partition; each job must request one explicitly.

{{< table >}}
| Queue Name | Purpose | Job Time Limit | Max Memory / Node / Job | Max Cores / Node |
Expand Down
Loading