From 29375a5eda2ac42ad6484304dd32b71a848c42b6 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Thu, 13 Aug 2026 12:04:47 +0000 Subject: [PATCH 01/10] Fix typos, heading levels and duplicate page descriptions --- src/content/docs/facility-guides/ctp/installation.mdx | 7 ++++--- src/content/docs/facility-guides/ctp/proxy-server.mdx | 4 ++-- src/content/docs/facility-guides/ctp/run-as-service.mdx | 4 ++-- src/content/docs/index.mdx | 2 +- src/content/docs/user-guides/logging-into-xnat/index.mdx | 2 +- .../managing-data/anonymising-data/project-anonymiser.md | 4 ++-- .../managing-data/anonymising-data/site-anonymiser.md | 2 +- .../managing-data/downloading-data/download-scan.md | 4 ++-- src/content/docs/user-guides/managing-data/index.mdx | 2 +- .../managing-data/uploading-data/resource-uploader.md | 2 +- .../docs/user-guides/processing-data/alias-tokens.md | 2 +- .../processing-data/command-line-tools/index.mdx | 2 +- src/content/docs/user-guides/processing-data/index.mdx | 2 +- .../processing-data/interactive-analysis/index.mdx | 2 +- src/content/docs/user-guides/using-xnat/index.mdx | 2 +- .../user-guides/using-xnat/projects/granting-access.md | 4 ++-- 16 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/content/docs/facility-guides/ctp/installation.mdx b/src/content/docs/facility-guides/ctp/installation.mdx index 967f88c..f7edc94 100644 --- a/src/content/docs/facility-guides/ctp/installation.mdx +++ b/src/content/docs/facility-guides/ctp/installation.mdx @@ -1,11 +1,11 @@ --- title: Installation -description: Installing CTP on Windows 10 +description: Install the Clinical Trials Processor on Windows 10 and configure it to send de-identified DICOM to UQ XNAT --- import { Steps } from '@astrojs/starlight/components'; -### Installing CTP on Windows 10 +## Installing CTP on Windows 10 @@ -112,7 +112,8 @@ import { Steps } from '@astrojs/starlight/components'; -### Further information +## Further information + If you need a different commit of CTP-installer ``` git clone https://github.com/johnperry/CTP diff --git a/src/content/docs/facility-guides/ctp/proxy-server.mdx b/src/content/docs/facility-guides/ctp/proxy-server.mdx index f87158e..4a9b692 100644 --- a/src/content/docs/facility-guides/ctp/proxy-server.mdx +++ b/src/content/docs/facility-guides/ctp/proxy-server.mdx @@ -59,9 +59,9 @@ If CTP uses a proxy server for internet access, you can update the CTP proxy ser -#### Troubleshooting +## Troubleshooting * If the CTP Windows service Stop is disabled, try restarting Windows Services as administrator by right-clicking the icon and selecting **Run as administrator** -#### Further information +## Further information * [CTP Server Settings](https://mircwiki.rsna.org/index.php?title=MIRC_CTP#Server) diff --git a/src/content/docs/facility-guides/ctp/run-as-service.mdx b/src/content/docs/facility-guides/ctp/run-as-service.mdx index 0422307..fc625fe 100644 --- a/src/content/docs/facility-guides/ctp/run-as-service.mdx +++ b/src/content/docs/facility-guides/ctp/run-as-service.mdx @@ -45,11 +45,11 @@ The CTP install.bat script uses Apache procrun. Use the following steps to enabl -#### Troubleshooting +## Troubleshooting * Installation paths are set in install.bat during CTP install so it won't work if you move the CTP folder somewhere else after install * If removing the service (with uninstall.bat) leaves the service stuck in delete pending state, reboot the system to complete -#### Further information +## Further information * [Running CTP as a Windows service](https://mircwiki.rsna.org/index.php?title=Running_CTP_as_a_Windows_Service) * [Apache procrun](https://commons.apache.org/proper/commons-daemon/procrun.html) diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index 19e0dd5..186648e 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -1,5 +1,5 @@ --- -title: UQ XNAT +title: UQ Imaging Data description: Storing, managing and analysing de-identified imaging data for UQ projects and collaborators template: splash hero: diff --git a/src/content/docs/user-guides/logging-into-xnat/index.mdx b/src/content/docs/user-guides/logging-into-xnat/index.mdx index 3adb8db..b2fb7e2 100644 --- a/src/content/docs/user-guides/logging-into-xnat/index.mdx +++ b/src/content/docs/user-guides/logging-into-xnat/index.mdx @@ -34,7 +34,7 @@ If your organisation is part of the Australian Access Federation (AAF), you can :::caution[First time users] -First time users will only see publically accessible projects when they login +First time users will only see publicly accessible projects when they log in. ::: For more details on the Australian Access Federation, see https://aaf.edu.au diff --git a/src/content/docs/user-guides/managing-data/anonymising-data/project-anonymiser.md b/src/content/docs/user-guides/managing-data/anonymising-data/project-anonymiser.md index f677a09..795c157 100644 --- a/src/content/docs/user-guides/managing-data/anonymising-data/project-anonymiser.md +++ b/src/content/docs/user-guides/managing-data/anonymising-data/project-anonymiser.md @@ -1,6 +1,6 @@ --- title: Project anonymiser -description: Project anonymiser +description: Use a DicomEdit script to rename, retag or further anonymise sessions as they are archived into your project --- The Project level anonymiser uses a scripting syntax called DicomEdit to modify, reassign or blank DICOM tags. @@ -21,7 +21,7 @@ The example in this screenshot basically replicates the behaviour in the HIRF on You can use DICOMedit to enforce a particular naming and tagging scheme across your entire project this way. -## Anonymising existing sesssions +## Anonymising existing sessions :::note[Note] If you’re planning to use the project level anonymiser, best solution would be to have your project’s renaming, retagging or anonymisation scheme established before starting data acquisition. diff --git a/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md b/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md index 387934e..b44d486 100644 --- a/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md +++ b/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md @@ -1,6 +1,6 @@ --- title: Site anonymiser -description: Site anonymiser +description: Which DICOM tags are modified and blanked when HIRF and CAI data is anonymised on-site before it reaches XNAT --- HIRF and CAI data are anonymised on-site by default with the following protocols diff --git a/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md b/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md index 8ba75c5..8fe4dc4 100644 --- a/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md +++ b/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md @@ -1,9 +1,9 @@ --- title: Download Scan -description: Downloading induvidual Scans using the XNAT UI +description: Download a single scan, or several at once with Bulk Actions, from a session in the XNAT web interface --- -Induvidual scans can be downloaded from the Sessions page +Individual scans can be downloaded from the Sessions page. ![Download scan from session](./download-scan/downloading-data-scan-1.png) diff --git a/src/content/docs/user-guides/managing-data/index.mdx b/src/content/docs/user-guides/managing-data/index.mdx index f46b2e7..6fc21c1 100644 --- a/src/content/docs/user-guides/managing-data/index.mdx +++ b/src/content/docs/user-guides/managing-data/index.mdx @@ -1,6 +1,6 @@ --- title: Managing Data -description: Managing Data +description: Upload, download, view, sync and anonymise imaging data once your XNAT project exists --- import { CardGrid, LinkCard } from '@astrojs/starlight/components'; diff --git a/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md b/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md index cbd0e1d..3a6e26d 100644 --- a/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md +++ b/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md @@ -1,6 +1,6 @@ --- title: Resource uploader -description: Resource uploader +description: Create a reusable web upload form for repeated uploads of non-DICOM data, such as analysis outputs or behavioural files --- This is to create a web upload form for repeated uploads of any data type. diff --git a/src/content/docs/user-guides/processing-data/alias-tokens.md b/src/content/docs/user-guides/processing-data/alias-tokens.md index 5d40361..e62ef56 100644 --- a/src/content/docs/user-guides/processing-data/alias-tokens.md +++ b/src/content/docs/user-guides/processing-data/alias-tokens.md @@ -1,6 +1,6 @@ --- title: Alias tokens -description: Alias tokens +description: Generate a time-limited username and password so desktop clients, command line tools and XSync can connect to XNAT without your AAF login --- AAF is used for logging into the XNAT website itself. diff --git a/src/content/docs/user-guides/processing-data/command-line-tools/index.mdx b/src/content/docs/user-guides/processing-data/command-line-tools/index.mdx index 746a2d9..96c1476 100644 --- a/src/content/docs/user-guides/processing-data/command-line-tools/index.mdx +++ b/src/content/docs/user-guides/processing-data/command-line-tools/index.mdx @@ -1,6 +1,6 @@ --- title: Command line tools -description: Command line tools +description: Connect to XNAT from the terminal or a Python script with xnatutils, xnatpy or pyxnat --- import { Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/src/content/docs/user-guides/processing-data/index.mdx b/src/content/docs/user-guides/processing-data/index.mdx index f58a0e5..deb1386 100644 --- a/src/content/docs/user-guides/processing-data/index.mdx +++ b/src/content/docs/user-guides/processing-data/index.mdx @@ -1,6 +1,6 @@ --- title: Processing Data -description: Processing Data +description: Reach your XNAT data from outside the web interface, using alias tokens, command line tools or a Jupyter environment --- import { CardGrid, LinkCard } from '@astrojs/starlight/components'; diff --git a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx index 53818d7..7c946f4 100644 --- a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx +++ b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx @@ -1,6 +1,6 @@ --- title: Interactive Analysis -description: Interactive Analysis +description: Request access to a Jupyter environment and run notebooks directly against your XNAT project data --- import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; diff --git a/src/content/docs/user-guides/using-xnat/index.mdx b/src/content/docs/user-guides/using-xnat/index.mdx index dcfd520..86ef271 100644 --- a/src/content/docs/user-guides/using-xnat/index.mdx +++ b/src/content/docs/user-guides/using-xnat/index.mdx @@ -1,6 +1,6 @@ --- title: Using XNAT -description: Using XNAT +description: Browse and organise your imaging data in XNAT, across projects, subjects, sessions and search --- import { CardGrid, LinkCard } from '@astrojs/starlight/components'; diff --git a/src/content/docs/user-guides/using-xnat/projects/granting-access.md b/src/content/docs/user-guides/using-xnat/projects/granting-access.md index 8355d5c..e02ca7a 100644 --- a/src/content/docs/user-guides/using-xnat/projects/granting-access.md +++ b/src/content/docs/user-guides/using-xnat/projects/granting-access.md @@ -1,9 +1,9 @@ --- title: Granting Access -description: Granting project access to other users +description: Add users to an XNAT project and choose whether they are an Owner, Member or Collaborator --- -Switch to the Access tab. Use **Add User** or **Add Users from List** to select the user to add +Switch to the Access tab. Use **Add User** or **Add Users from List** to select the user to add. ![Add user to project](./granting-access/user-access.png) From 6873e5f14a521e06d747ecaf7e65812ab10a888c Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Thu, 13 Aug 2026 12:09:11 +0000 Subject: [PATCH 02/10] Add favicon, social card and icon generation script --- astro.config.mjs | 31 +++++++++++++++++++++++- public/apple-touch-icon.png | Bin 0 -> 2932 bytes public/favicon.svg | 5 ++++ public/icon-192.png | Bin 0 -> 3246 bytes public/icon-512.png | Bin 0 -> 15826 bytes public/og-default.png | Bin 0 -> 75143 bytes scripts/branding/icon-square.svg | 7 ++++++ scripts/branding/og-card.svg | 37 +++++++++++++++++++++++++++++ scripts/generate-icons.mjs | 39 +++++++++++++++++++++++++++++++ 9 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.svg create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png create mode 100644 public/og-default.png create mode 100644 scripts/branding/icon-square.svg create mode 100644 scripts/branding/og-card.svg create mode 100644 scripts/generate-icons.mjs diff --git a/astro.config.mjs b/astro.config.mjs index 08f4f2e..b1152e0 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,6 +2,10 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; +// Canonical origin. Used for `site` and for the absolute social-card URLs, +// which scrapers will not resolve if they are relative. +const SITE = 'https://docs.xnat.rcc.uq.edu.au'; + // Every content page's slug (used to redirect the old Hugo `/docs/...` URLs). const slugs = [ 'user-guides', @@ -96,7 +100,7 @@ const redirects = { // https://astro.build/config export default defineConfig({ - site: 'https://docs.xnat.rcc.uq.edu.au', + site: SITE, redirects, integrations: [ starlight({ @@ -105,6 +109,31 @@ export default defineConfig({ 'Storing, managing and analysing de-identified imaging data for UQ projects and collaborators', customCss: ['./src/styles/custom.css'], tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 3 }, + favicon: '/favicon.svg', + head: [ + // Starlight emits no og:image of its own, but does set + // twitter:card=summary_large_image, so without these the card renders + // blank. One static card for every page: the sharing channels here are + // Slack, Teams and email, which all just want a recognisable banner. + // These URLs must be absolute - most scrapers will not resolve a + // relative path. + { tag: 'meta', attrs: { property: 'og:image', content: `${SITE}/og-default.png` } }, + { tag: 'meta', attrs: { property: 'og:image:width', content: '1200' } }, + { tag: 'meta', attrs: { property: 'og:image:height', content: '630' } }, + { + tag: 'meta', + attrs: { + property: 'og:image:alt', + content: 'UQ XNAT - imaging data documentation', + }, + }, + { tag: 'meta', attrs: { name: 'twitter:image', content: `${SITE}/og-default.png` } }, + { + tag: 'link', + attrs: { rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' }, + }, + { tag: 'meta', attrs: { name: 'theme-color', content: '#51247A' } }, + ], components: { // Replace the header's social-icons slot with our top-nav links. SocialIcons: './src/components/NavLinks.astro', diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb50550879a1d00df60c92214c117e8ae4a4b9c7 GIT binary patch literal 2932 zcmb7`cQo7k8^^z~DLRZQH*``;YevONTeTCbMx{!rRoqlp|5F?7XB}zyr zDr!`#R*VF(+M3r&5u5sH@9+NmJLh-K^L(DqdB4x+bDn>m=e!@9mopjuEe@vWF+L(ClgLm8{m&?5R3*r}v`n^iHM0t}M>|kon^+RRICQ zVJ@FP0O=DLV<71e>=X}O0Hk>tNcyGxYyMJxnSu28iA21%e1Ix{7&ASs_o)8g-n)oc z4=ezML{d@7zP_~Ek?Onf(pw~e6#)&J0!5hi5W@0G%}I#!QbqTrA z<%8k#;h_T}zhb{r!r^@tc4}Y!C-%LcDo7fn`P2C2J+k^LwKV-~x;@>5s)DnSc za9f@Bj8RE0#98D!}V{Me1FCEZ!!s4$o~<$ z@=c3#nz1J;HkpQI~wC`5zVeQb9SRfXx0ddGV5R-=!v;see@mqewFuQNibMc#b=0VwHbwA7W z{yA0CA*XjT1Q&;ff%5mA>AFLu_^>CT5p72uZOi(~D)I>@Rm199%nzf11;WjZ)~KM> zdq`E8!VJlkp01-hc)N||3z8A|TA1GBy#V+%YrC9$9%*|u zeY^d!_`wUL)x`$XjPH>&Su#Hhb(aRisfT;c&)u^Gmwyfp*@%y1Gsl6fIf`O^8}>L- zY`TVyMJVr_Hw<1Bp;zA}=v`zuiV`50nEv+j4v3x%7F+Nj%<#}Nd!{~UfXC&)Y3LB?j-=_QiP3E>b>Mj5VehAMJ@!lxTbE1S(;Da!`;t5Q?L$JCXI5 z{$kl2pzmIu^>y#%yL_xq=!caq{c(Opt9(E1 z92ZggB|qxqmX4)~`7q|ZD@9{zZe{=|VfsRdCsp?+ErnkanUrf=2SD9kUwlkHTOr}O zAlQH3VbpDi+DS4TCr2xQoMi+P!i#cmubRMRpU2$p?X#7Uu4m(u{2?VavBvlDxN{^-8z$&;H3^vKdU)D0EMm=yjQmxSoxDHsLW~H&VqDs zWtv7gPla{K)sIFF_Xz?7u(Ak#>R!#PqK8Kki*JqTU042&nGCiNYNJ-P;L^mOzGS4nrXig%G2X5Gojjx5oap>C zj}{XYy9@$FP(#|Tjjs1@BkP(#(8~-tGU{DK<=3&P^|1`I@eWzi*Bs4J>e|H( ziJUjQrKD#n^sTg|0~PAmTYmV+!fFXUI;k`i!FcD0s8&sX!RoyVs+QRIVP$Ql=p(=ZXtM24DxHd}^vRXME;_CSGT#8Ss#yJ)6#j*G~6D-+f z(`>WZcM6g|z7yjWR}!}Nz+w=4N2CTKca7O;YLMsl)PrsS8!I?5)~R8#u9-nW!Wq6A z^W>-$&L%>S9>(lr@f0vb=Si!-srlmOt^v`7kPj{2Mu@ewx?0EmRNmxOpU(Emmz~kg z(0SE-gBGr}q}t}EWMapf(hh-HOCO|;p*RgcZeVACwepn4{V%nPG>ujvry$}F& zVA;7SMyU%AM+>K1m3deMrrsnky=8dw%}AkT6%1;J;}H=LZwApjWgOrt41VjqE0cZ< zf&x5S9~0{ICai($|Hh>Mg4JINgW?H&|M1zuZMku5PGnl7Zi+G7RJwA z;7EJbrR`k8ggT35UuP9#@75WYdbaPQUmdGzh9(lr(XM+y=9(EWg{w385UEf5bS!$h vwz7V-Nc}I$+(*!Vq4XDm{sX0l=VC2_txaw>9q!)8Xu#|$!syLqx48cR@O6yb literal 0 HcmV?d00001 diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..ba8b707 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..5fe9e19718dee49e6c11e06763128144424ebae1 GIT binary patch literal 3246 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 literal 0 HcmV?d00001 diff --git a/public/og-default.png b/public/og-default.png new file mode 100644 index 0000000000000000000000000000000000000000..c49360271eb180a2f9def92444499f2fb104cba0 GIT binary patch literal 75143 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 literal 0 HcmV?d00001 diff --git a/scripts/branding/icon-square.svg b/scripts/branding/icon-square.svg new file mode 100644 index 0000000..4a266a9 --- /dev/null +++ b/scripts/branding/icon-square.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/scripts/branding/og-card.svg b/scripts/branding/og-card.svg new file mode 100644 index 0000000..569f401 --- /dev/null +++ b/scripts/branding/og-card.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + UQ XNAT + + Imaging data documentation + + + + Research Computing Centre · The University of Queensland + National Imaging Facility · Australian Imaging Service + diff --git a/scripts/generate-icons.mjs b/scripts/generate-icons.mjs new file mode 100644 index 0000000..b0cddb6 --- /dev/null +++ b/scripts/generate-icons.mjs @@ -0,0 +1,39 @@ +/** + * Rasterises the branding SVGs in scripts/branding/ into the PNGs served from + * public/. + * + * Run manually and commit the output - this is deliberately NOT part of + * `npm run build`, so CI stays deterministic and needs no font packages: + * + * node scripts/generate-icons.mjs + * + * Requires DejaVu Sans for the social card text (fonts-dejavu-core on Debian + * and Ubuntu). public/favicon.svg is hand-maintained and is not generated here. + */ +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; +import sharp from 'sharp'; + +const root = join(dirname(fileURLToPath(import.meta.url)), '..'); +const branding = join(root, 'scripts', 'branding'); +const out = join(root, 'public'); + +const targets = [ + { src: 'icon-square.svg', file: 'apple-touch-icon.png', size: 180 }, + { src: 'icon-square.svg', file: 'icon-192.png', size: 192 }, + { src: 'icon-square.svg', file: 'icon-512.png', size: 512 }, +]; + +for (const { src, file, size } of targets) { + await sharp(join(branding, src), { density: 384 }) + .resize(size, size) + .png({ compressionLevel: 9 }) + .toFile(join(out, file)); + console.log(`${file} ${size}x${size}`); +} + +await sharp(join(branding, 'og-card.svg'), { density: 96 }) + .resize(1200, 630) + .png({ compressionLevel: 9 }) + .toFile(join(out, 'og-default.png')); +console.log('og-default.png 1200x630'); From 145fc4d447152962d1c40c6478f51c048aae0481 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Thu, 13 Aug 2026 12:30:24 +0000 Subject: [PATCH 03/10] Add design tokens and fix accessibility failures --- src/styles/custom.css | 152 ------------------------------------------ 1 file changed, 152 deletions(-) delete mode 100644 src/styles/custom.css diff --git a/src/styles/custom.css b/src/styles/custom.css deleted file mode 100644 index 7eb3a49..0000000 --- a/src/styles/custom.css +++ /dev/null @@ -1,152 +0,0 @@ -/* UQ XNAT theme — UQ purple (#51247a) accent. - Overrides Starlight's default accent palette in both colour modes. */ - -:root { - /* Dark mode accents (lighter purples for contrast on dark backgrounds) */ - --sl-color-accent-low: #2a1340; - --sl-color-accent: #8b5fb5; - --sl-color-accent-high: #d6c2e8; -} - -:root[data-theme='light'] { - /* Light mode accents derived from UQ purple #51247a */ - --sl-color-accent-low: #e7ddf1; - --sl-color-accent: #51247a; - --sl-color-accent-high: #341553; -} - -/* Frame screenshots consistently: light border and soft shadow (no rounding — - it looks off on screenshots whose own edges are square). */ -.sl-markdown-content img:not([data-no-border]) { - border: 1px solid var(--sl-color-gray-5); - box-shadow: 0 1px 5px rgba(0, 0, 0, 0.12); -} - -/* ---- Homepage links below the feature cards ---- */ -.home-links { - text-align: center; - margin-top: 3rem; -} -.home-links p { - margin: 0.3rem 0; -} -.home-links__heading { - font-weight: 600; -} -.home-links__heading span { - color: var(--sl-color-gray-3); - font-weight: 400; -} -.home-links__repos a { - margin: 0 0.6rem; -} -.home-links__ais { - margin-top: 1.25rem !important; - font-size: var(--sl-text-sm); -} - -/* Sidebar: keep only the top-level headers (User Guides, Facility Guides) - bold/large. Normalise every nested expandable group label so it matches the - plain single-page links beside it. (`.top-level ul .large` excludes the two - top headers, whose label sits in the summary, not inside a nested list.) */ -.top-level ul .large { - font-size: var(--sl-text-base); - font-weight: 400; -} -@media (min-width: 50rem) { - .top-level ul .large { - font-size: var(--sl-text-sm); - } -} - -/* Starlight only positions the content column correctly when a TOC is present. - The tabbed Getting Started page disables its (duplicate-heading) TOC, which - left the content centred. Give the no-TOC main pane the same geometry as the - with-TOC pages so the content sits in the identical position. */ -@media (min-width: 72rem) { - [data-has-sidebar]:not([data-has-toc]) .main-pane { - --sl-content-margin-inline: auto 0; - width: calc( - var(--sl-content-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2 - ); - } -} - -/* Hero logo: the XNAT mark has a white background, so frame it as a tidy badge - that reads on both light and dark mode. Rendered via hero.image.html so it - keeps its true aspect ratio (Starlight's default image box would crop it). */ -.hero .hero-html { - width: min(100%, 22rem); -} -.hero img { - display: block; - width: 100%; - height: auto; - box-sizing: border-box; - background: #fff; - padding: 1rem 1.25rem; - border-radius: 0.75rem; - border: 1px solid var(--sl-color-gray-5); - box-shadow: 0 2px 14px rgba(0, 0, 0, 0.18); -} - -/* ---- Navbar (adapted from the Neurodesk Starlight site) ---- */ - -/* Pagefind search trigger: Starlight styles it like a wide fake text input. - Restyle as a compact button — magnifier + "Search" + ⌘K hint — so the - affordance matches the modal it actually opens. */ -site-search button[data-open-modal] { - gap: 0.375rem; - font-size: var(--sl-text-xs); -} - -@media (min-width: 50rem) { - site-search button[data-open-modal] { - width: auto; - max-width: none; - padding-inline: 0.5rem; - background-color: transparent; - border-color: transparent; - border-radius: 0.375rem; - } - - site-search button[data-open-modal]:hover { - background-color: var(--sl-color-gray-6); - border-color: transparent; - color: var(--sl-color-white); - } - - /* Pull the ⌘K chip in next to the label instead of pushing it to the edge. */ - site-search button[data-open-modal] > :last-child { - margin-inline-start: 0; - } - - site-search button[data-open-modal] kbd { - padding: 0 0.25rem; - font-size: var(--sl-text-xs); - background-color: var(--sl-color-gray-5); - } - - /* Right-align search beside the nav links / theme toggle, with a divider. */ - .header { - grid-template-columns: auto 1fr auto auto !important; - } - - .header > div:has(site-search) { - grid-column: 3; - justify-self: end; - } - - .header > .right-group { - grid-column: 4; - margin-inline-start: -0.75rem; - } - - .header > .right-group::before { - content: ''; - align-self: center; - height: 1.25rem; - border-inline-start: 1px solid var(--sl-color-gray-5); - } -} - From 28e213d14d275c4c99a42f9bd6a6325b02c73332 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Thu, 13 Aug 2026 12:30:35 +0000 Subject: [PATCH 04/10] Add design tokens and fix accessibility failures --- astro.config.mjs | 16 ++--- scripts/branding/og-card.svg | 7 +- scripts/generate-icons.mjs | 11 ++- src/styles/base.css | 53 ++++++++++++++ src/styles/components.css | 130 +++++++++++++++++++++++++++++++++++ src/styles/tokens.css | 68 ++++++++++++++++++ 6 files changed, 264 insertions(+), 21 deletions(-) create mode 100644 src/styles/base.css create mode 100644 src/styles/components.css create mode 100644 src/styles/tokens.css diff --git a/astro.config.mjs b/astro.config.mjs index b1152e0..ddbdf0f 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,8 +2,6 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; -// Canonical origin. Used for `site` and for the absolute social-card URLs, -// which scrapers will not resolve if they are relative. const SITE = 'https://docs.xnat.rcc.uq.edu.au'; // Every content page's slug (used to redirect the old Hugo `/docs/...` URLs). @@ -107,16 +105,16 @@ export default defineConfig({ title: 'UQ XNAT', description: 'Storing, managing and analysing de-identified imaging data for UQ projects and collaborators', - customCss: ['./src/styles/custom.css'], + customCss: [ + './src/styles/tokens.css', + './src/styles/base.css', + './src/styles/components.css', + ], tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 3 }, favicon: '/favicon.svg', head: [ - // Starlight emits no og:image of its own, but does set - // twitter:card=summary_large_image, so without these the card renders - // blank. One static card for every page: the sharing channels here are - // Slack, Teams and email, which all just want a recognisable banner. - // These URLs must be absolute - most scrapers will not resolve a - // relative path. + // Starlight sets twitter:card=summary_large_image but emits no + // og:image. Scrapers will not resolve a relative image URL. { tag: 'meta', attrs: { property: 'og:image', content: `${SITE}/og-default.png` } }, { tag: 'meta', attrs: { property: 'og:image:width', content: '1200' } }, { tag: 'meta', attrs: { property: 'og:image:height', content: '630' } }, diff --git a/scripts/branding/og-card.svg b/scripts/branding/og-card.svg index 569f401..19c41e5 100644 --- a/scripts/branding/og-card.svg +++ b/scripts/branding/og-card.svg @@ -1,7 +1,5 @@ + Needs DejaVu Sans installed, or the text falls back to another face. --> @@ -12,8 +10,7 @@ - + diff --git a/scripts/generate-icons.mjs b/scripts/generate-icons.mjs index b0cddb6..c261304 100644 --- a/scripts/generate-icons.mjs +++ b/scripts/generate-icons.mjs @@ -1,14 +1,11 @@ /** - * Rasterises the branding SVGs in scripts/branding/ into the PNGs served from - * public/. - * - * Run manually and commit the output - this is deliberately NOT part of - * `npm run build`, so CI stays deterministic and needs no font packages: + * Rasterises scripts/branding/*.svg into the PNGs served from public/. + * Run manually and commit the output; not part of `npm run build`. * * node scripts/generate-icons.mjs * - * Requires DejaVu Sans for the social card text (fonts-dejavu-core on Debian - * and Ubuntu). public/favicon.svg is hand-maintained and is not generated here. + * The social card text needs DejaVu Sans (fonts-dejavu-core). + * public/favicon.svg is hand-maintained, not generated here. */ import { fileURLToPath } from 'node:url'; import { dirname, join } from 'node:path'; diff --git a/src/styles/base.css b/src/styles/base.css new file mode 100644 index 0000000..be4b784 --- /dev/null +++ b/src/styles/base.css @@ -0,0 +1,53 @@ +/* Site-wide base behaviour: links, focus, motion, images. + Loaded after tokens.css and before components.css. */ + +/* Starlight distinguishes prose links by colour alone, at ~1.05:1 against body + text (WCAG 1.4.1). Scoped to markdown content: cards, hero actions and nav + links are distinguishable by shape and position. */ +.sl-markdown-content a:not(:where(.not-content *)) { + text-decoration: underline; + text-underline-offset: 0.2em; + text-decoration-thickness: from-font; +} + +.sl-markdown-content a:not(:where(.not-content *)):hover { + text-decoration-thickness: 2px; +} + +/* Headings that link to themselves shouldn't be underlined. */ +.sl-markdown-content :where(h1, h2, h3, h4, h5, h6) a { + text-decoration: none; +} + +/* The restyled search button and borderless theme toggle have no visible user + agent focus indicator. */ +:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible { + outline: var(--xnat-focus-ring); + outline-offset: var(--xnat-focus-offset); + border-radius: var(--xnat-radius-sm); +} + +/* MemberChooser and the request forms animate borders and backgrounds on hover + with no guard of their own. */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} + +/* Frame screenshots consistently: light border and soft shadow (no rounding - + it looks off on screenshots whose own edges are square). */ +.sl-markdown-content img:not([data-no-border]) { + border: 1px solid var(--xnat-surface-border); + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.12); +} + +::selection { + background: var(--sl-color-accent); + color: var(--sl-color-text-invert); +} diff --git a/src/styles/components.css b/src/styles/components.css new file mode 100644 index 0000000..917f49b --- /dev/null +++ b/src/styles/components.css @@ -0,0 +1,130 @@ +/* Overrides for specific Starlight components and page furniture. + Loaded last, after tokens.css and base.css. */ + +/* ---- Homepage links below the feature cards ---- */ +.home-links { + text-align: center; + margin-top: var(--xnat-space-7); +} +.home-links p { + margin: var(--xnat-space-1) 0; +} +.home-links__heading { + font-weight: 600; +} +.home-links__heading span { + color: var(--sl-color-gray-3); + font-weight: 400; +} +.home-links__repos a { + margin: 0 0.6rem; +} +.home-links__ais { + margin-top: var(--xnat-space-5) !important; + font-size: var(--sl-text-sm); +} + +/* Sidebar: keep only the top-level headers bold/large. Normalise every nested + expandable group label so it matches the plain single-page links beside it. + (`.top-level ul .large` excludes the top headers, whose label sits in the + summary, not inside a nested list.) */ +.top-level ul .large { + font-size: var(--sl-text-base); + font-weight: 400; +} +@media (min-width: 50rem) { + .top-level ul .large { + font-size: var(--sl-text-sm); + } +} + +/* Starlight only positions the content column correctly when a TOC is present. + The tabbed Getting Started page disables its (duplicate-heading) TOC, which + left the content centred. Give the no-TOC main pane the same geometry as the + with-TOC pages so the content sits in the identical position. */ +@media (min-width: 72rem) { + [data-has-sidebar]:not([data-has-toc]) .main-pane { + --sl-content-margin-inline: auto 0; + width: calc( + var(--sl-content-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2 + ); + } +} + +/* Hero logo: the XNAT mark has a white background, so frame it as a tidy badge + that reads on both light and dark mode. Rendered via hero.image.html so it + keeps its true aspect ratio (Starlight's default image box would crop it). */ +.hero .hero-html { + width: min(100%, 22rem); +} +.hero img { + display: block; + width: 100%; + height: auto; + box-sizing: border-box; + background: #fff; + padding: var(--xnat-space-4) var(--xnat-space-5); + border-radius: var(--xnat-radius-lg); + border: 1px solid var(--xnat-surface-border); + box-shadow: 0 2px 14px rgba(0, 0, 0, 0.18); +} + +/* ---- Navbar (adapted from the Neurodesk Starlight site) ---- */ + +/* Pagefind search trigger: Starlight styles it like a wide fake text input. + Restyle as a compact button - magnifier + "Search" + ⌘K hint - so the + affordance matches the modal it actually opens. */ +site-search button[data-open-modal] { + gap: 0.375rem; + font-size: var(--sl-text-xs); +} + +@media (min-width: 50rem) { + site-search button[data-open-modal] { + width: auto; + max-width: none; + padding-inline: var(--xnat-space-2); + background-color: transparent; + border-color: transparent; + border-radius: 0.375rem; + } + + site-search button[data-open-modal]:hover { + background-color: var(--sl-color-gray-6); + border-color: transparent; + color: var(--sl-color-white); + } + + /* Pull the ⌘K chip in next to the label instead of pushing it to the edge. */ + site-search button[data-open-modal] > :last-child { + margin-inline-start: 0; + } + + site-search button[data-open-modal] kbd { + padding: 0 var(--xnat-space-1); + font-size: var(--sl-text-xs); + background-color: var(--sl-color-gray-5); + } + + /* Right-align search beside the nav links / theme toggle, with a divider. */ + .header { + grid-template-columns: auto 1fr auto auto; + } + + .header > div:has(site-search) { + grid-column: 3; + justify-self: end; + } + + .header > .right-group { + grid-column: 4; + margin-inline-start: -0.75rem; + } + + .header > .right-group::before { + content: ''; + align-self: center; + height: 1.25rem; + border-inline-start: 1px solid var(--xnat-surface-border); + } +} diff --git a/src/styles/tokens.css b/src/styles/tokens.css new file mode 100644 index 0000000..7a6078b --- /dev/null +++ b/src/styles/tokens.css @@ -0,0 +1,68 @@ +/* Design tokens. Loaded before base.css and components.css. + + Brand ramp: hue 271 lightness ladder, step 700 = UQ purple #51247A. + + customCss is injected unlayered and so beats Starlight's @layer + starlight.base regardless of specificity. Any --sl-* var set for dark mode + must also be set for light, or the dark value applies in both. */ + +:root { + --xnat-purple-50: #f5effb; + --xnat-purple-100: #e8dbf5; + --xnat-purple-200: #d2bae8; + --xnat-purple-300: #b48ed7; + --xnat-purple-400: #965ec9; + --xnat-purple-500: #7a37b9; + --xnat-purple-600: #632d95; + --xnat-purple-700: #51247a; + --xnat-purple-800: #3e1b5f; + --xnat-purple-900: #2c1244; + --xnat-purple-950: #1d0b2d; + + --xnat-radius-sm: 0.25rem; + --xnat-radius-md: 0.5rem; + --xnat-radius-lg: 0.75rem; + + --xnat-space-1: 0.25rem; + --xnat-space-2: 0.5rem; + --xnat-space-3: 0.75rem; + --xnat-space-4: 1rem; + --xnat-space-5: 1.5rem; + --xnat-space-6: 2rem; + --xnat-space-7: 3rem; + + --xnat-focus-ring: 2px solid var(--sl-color-accent); + --xnat-focus-offset: 2px; + --xnat-transition: 150ms ease; + + /* 45rem squeezes this site's screenshots. */ + --sl-content-width: 47rem; + --sl-line-height: 1.7; +} + +/* Dark mode. accent-high carries prose links (10.1:1 on page background); + accent is used for focus rings and component button text (6.6:1); + accent-low is text-invert, drawn on accent (6.1:1). */ +:root { + --sl-color-accent-low: var(--xnat-purple-900); + --sl-color-accent: var(--xnat-purple-300); + --sl-color-accent-high: var(--xnat-purple-200); + + /* Starlight defines gray-7 in light mode only; components reaching for it + fell back to the page background and rendered without a surface. */ + --xnat-surface: var(--sl-color-gray-6); + --xnat-surface-raised: var(--sl-color-gray-5); + --xnat-surface-border: var(--sl-color-gray-5); +} + +/* Light mode. accent carries prose links (11.2:1 on page background) and is + also bg-accent, with white on it at 11.2:1. */ +:root[data-theme='light'] { + --sl-color-accent-low: var(--xnat-purple-100); + --sl-color-accent: var(--xnat-purple-700); + --sl-color-accent-high: var(--xnat-purple-800); + + --xnat-surface: var(--sl-color-gray-7); + --xnat-surface-raised: #fff; + --xnat-surface-border: var(--sl-color-gray-5); +} From fcb9100d59cadb3bd2c14fae010b0d8914efdc86 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Thu, 13 Aug 2026 13:08:17 +0000 Subject: [PATCH 05/10] Consolidate email request forms into reusable component --- astro.config.mjs | 147 ++++++----- src/components/EmailAafRequestForm.astro | 144 ----------- src/components/EmailJupyterRequestForm.astro | 130 ---------- src/components/EmailRequestForm.astro | 130 ---------- src/components/RequestEmailForm.astro | 235 ++++++++++++++++++ .../user-guides/getting-started/index.mdx | 21 +- .../downloading-data/desktop-client.md | 39 --- .../downloading-data/download-scan.md | 12 - .../managing-data/downloading-data/index.mdx | 117 ++++++++- .../downloading-data/zip-download.md | 20 -- .../interactive-analysis/index.mdx | 10 +- 11 files changed, 457 insertions(+), 548 deletions(-) delete mode 100644 src/components/EmailAafRequestForm.astro delete mode 100644 src/components/EmailJupyterRequestForm.astro delete mode 100644 src/components/EmailRequestForm.astro create mode 100644 src/components/RequestEmailForm.astro delete mode 100644 src/content/docs/user-guides/managing-data/downloading-data/desktop-client.md delete mode 100644 src/content/docs/user-guides/managing-data/downloading-data/download-scan.md delete mode 100644 src/content/docs/user-guides/managing-data/downloading-data/zip-download.md diff --git a/astro.config.mjs b/astro.config.mjs index ddbdf0f..bd31a36 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -19,9 +19,6 @@ const slugs = [ 'user-guides/using-xnat/search', 'user-guides/managing-data', 'user-guides/managing-data/downloading-data', - 'user-guides/managing-data/downloading-data/zip-download', - 'user-guides/managing-data/downloading-data/desktop-client', - 'user-guides/managing-data/downloading-data/download-scan', 'user-guides/managing-data/viewing-images', 'user-guides/managing-data/uploading-data', 'user-guides/managing-data/uploading-data/web-upload', @@ -79,6 +76,22 @@ const redirects = { '/docs/user-guides/using-xnat/sessions/scans': '/user-guides/using-xnat/sessions/#viewing-scans', + // The three download method pages merged into one tabbed page. The ?method= + // values are the tab labels slugified by TabQueryLink; they must match the + // labels in downloading-data/index.mdx. + '/user-guides/managing-data/downloading-data/zip-download': + '/user-guides/managing-data/downloading-data/?method=zip-download', + '/user-guides/managing-data/downloading-data/desktop-client': + '/user-guides/managing-data/downloading-data/?method=desktop-client', + '/user-guides/managing-data/downloading-data/download-scan': + '/user-guides/managing-data/downloading-data/?method=individual-scans', + '/docs/user-guides/managing-data/downloading-data/zip-download': + '/user-guides/managing-data/downloading-data/?method=zip-download', + '/docs/user-guides/managing-data/downloading-data/desktop-client': + '/user-guides/managing-data/downloading-data/?method=desktop-client', + '/docs/user-guides/managing-data/downloading-data/download-scan': + '/user-guides/managing-data/downloading-data/?method=individual-scans', + // CTP Windows/Linux service pages merged into one OS-tabbed page. '/facility-guides/ctp/windows-service': '/facility-guides/ctp/run-as-service', '/facility-guides/ctp/linux-service': '/facility-guides/ctp/run-as-service', @@ -138,79 +151,99 @@ export default defineConfig({ // Cycling theme toggle (auto → light → dark) instead of the dropdown. ThemeSelect: './src/components/ThemeSelect.astro', }, + // Groups are ordered by the order a new user meets them: get in, meet + // your obligations, put data in, find it, take it out, automate. + // Labels are free to change; slugs are not, since ~60 legacy redirects + // point at them. sidebar: [ { - label: 'User Guides', + label: 'Start here', + items: [ + // Getting Started is a single tabbed page (member type via tabs). + { label: 'Getting started', slug: 'user-guides/getting-started' }, + // Logging into XNAT is a single page (AAF + RCC Authenticate tabs). + { label: 'Logging in', slug: 'user-guides/logging-into-xnat' }, + ], + }, + { + label: 'Working with de-identified data', items: [ - // FAQ hidden from the sidebar until it has real content. - // The page still exists at /user-guides/faq (kept for old redirects). - // Getting Started is now a single tabbed page (member type via tabs). - { label: 'Getting Started', slug: 'user-guides/getting-started' }, - // Logging into XNAT is now a single page (AAF + RCC Authenticate tabs). - { label: 'Logging into XNAT', slug: 'user-guides/logging-into-xnat' }, + { label: 'Overview', slug: 'user-guides/managing-data/anonymising-data' }, { - label: 'Using XNAT', - items: [ - { label: 'Overview', slug: 'user-guides/using-xnat' }, - { - label: 'Projects', - items: [ - { label: 'Overview', slug: 'user-guides/using-xnat/projects' }, - { label: 'Granting Access', slug: 'user-guides/using-xnat/projects/granting-access' }, - { label: 'Request Storage', slug: 'user-guides/using-xnat/projects/request-storage' }, - ], - }, - { label: 'Subjects', slug: 'user-guides/using-xnat/subjects' }, - { label: 'Sessions', slug: 'user-guides/using-xnat/sessions' }, - { label: 'Search', slug: 'user-guides/using-xnat/search' }, - ], + label: 'On-site anonymisation', + slug: 'user-guides/managing-data/anonymising-data/site-anonymiser', + }, + { + label: 'Project anonymiser', + slug: 'user-guides/managing-data/anonymising-data/project-anonymiser', + }, + ], + }, + { + label: 'Getting data in', + items: [ + { + label: 'Choosing an upload method', + slug: 'user-guides/managing-data/uploading-data', + }, + { + label: 'Upload from the browser', + slug: 'user-guides/managing-data/uploading-data/web-upload', }, + { label: 'The prearchive', slug: 'user-guides/managing-data/uploading-data/prearchive' }, { - label: 'Managing Data', + label: 'Custom upload forms', + slug: 'user-guides/managing-data/uploading-data/resource-uploader', + }, + ], + }, + { + label: 'Browsing and organising', + items: [ + { label: 'Overview', slug: 'user-guides/using-xnat' }, + { + label: 'Projects', items: [ + { label: 'Overview', slug: 'user-guides/using-xnat/projects' }, { - label: 'Downloading Data', - items: [ - { label: 'Overview', slug: 'user-guides/managing-data/downloading-data' }, - { label: 'Zip Download', slug: 'user-guides/managing-data/downloading-data/zip-download' }, - { label: 'Desktop client', slug: 'user-guides/managing-data/downloading-data/desktop-client' }, - { label: 'Download Scan', slug: 'user-guides/managing-data/downloading-data/download-scan' }, - ], - }, - { label: 'Viewing Images', slug: 'user-guides/managing-data/viewing-images' }, - { - label: 'Uploading Data', - items: [ - { label: 'Overview', slug: 'user-guides/managing-data/uploading-data' }, - { label: 'Web Upload', slug: 'user-guides/managing-data/uploading-data/web-upload' }, - { label: 'Resource uploader', slug: 'user-guides/managing-data/uploading-data/resource-uploader' }, - { label: 'Prearchive', slug: 'user-guides/managing-data/uploading-data/prearchive' }, - ], + label: 'Granting access', + slug: 'user-guides/using-xnat/projects/granting-access', }, - { label: 'Syncing Data', slug: 'user-guides/managing-data/syncing-data' }, { - label: 'Anonymising Data', - items: [ - { label: 'Overview', slug: 'user-guides/managing-data/anonymising-data' }, - { label: 'Project anonymiser', slug: 'user-guides/managing-data/anonymising-data/project-anonymiser' }, - { label: 'Site anonymiser', slug: 'user-guides/managing-data/anonymising-data/site-anonymiser' }, - ], + label: 'Requesting more storage', + slug: 'user-guides/using-xnat/projects/request-storage', }, ], }, + { label: 'Subjects', slug: 'user-guides/using-xnat/subjects' }, + { label: 'Sessions and scans', slug: 'user-guides/using-xnat/sessions' }, + { label: 'Finding data', slug: 'user-guides/using-xnat/search' }, + ], + }, + { + label: 'Getting data out', + items: [ + { label: 'Downloading data', slug: 'user-guides/managing-data/downloading-data' }, + { label: 'Viewing images', slug: 'user-guides/managing-data/viewing-images' }, + { label: 'Sharing and syncing', slug: 'user-guides/managing-data/syncing-data' }, + ], + }, + { + label: 'Analysis and automation', + items: [ + { label: 'Overview', slug: 'user-guides/processing-data' }, + { label: 'Alias tokens', slug: 'user-guides/processing-data/alias-tokens' }, + { label: 'Command line tools', slug: 'user-guides/processing-data/command-line-tools' }, { - label: 'Processing Data', - items: [ - { label: 'Alias tokens', slug: 'user-guides/processing-data/alias-tokens' }, - { label: 'Command line tools', slug: 'user-guides/processing-data/command-line-tools' }, - { label: 'Interactive Analysis', slug: 'user-guides/processing-data/interactive-analysis' }, - ], + label: 'Jupyter environment', + slug: 'user-guides/processing-data/interactive-analysis', }, ], }, { - label: 'Facility Guides', + label: 'Facility guides', items: [ + { label: 'Overview', slug: 'facility-guides' }, { label: 'Clinical Trials Processor (CTP)', items: [ diff --git a/src/components/EmailAafRequestForm.astro b/src/components/EmailAafRequestForm.astro deleted file mode 100644 index 13676a4..0000000 --- a/src/components/EmailAafRequestForm.astro +++ /dev/null @@ -1,144 +0,0 @@ ---- -// Interactive helper that builds an "AAF account request" email from project, -// organisation and acquisition-site fields, with copy-to-clipboard buttons. -// Ported from the Hugo `email-aaf-request-form` shortcode; styled standalone. -const uid = Math.random().toString(36).slice(2, 9); ---- - -
-
- - -
-
- - -
-
- - -
- - -
- - - - diff --git a/src/components/EmailJupyterRequestForm.astro b/src/components/EmailJupyterRequestForm.astro deleted file mode 100644 index 98d97ba..0000000 --- a/src/components/EmailJupyterRequestForm.astro +++ /dev/null @@ -1,130 +0,0 @@ ---- -// Interactive helper that builds a "request Jupyter environment access" email for -// XNAT project data, with copy-to-clipboard buttons. Ported from the Hugo -// `email-request-form` shortcode; styled standalone (no Bootstrap). -const uid = Math.random().toString(36).slice(2, 9); ---- - -
-
- - -
- - -
- - - - diff --git a/src/components/EmailRequestForm.astro b/src/components/EmailRequestForm.astro deleted file mode 100644 index 67ef302..0000000 --- a/src/components/EmailRequestForm.astro +++ /dev/null @@ -1,130 +0,0 @@ ---- -// Interactive helper that builds a "request new XNAT project" email from an -// RDM collection name, with copy-to-clipboard buttons. Ported from the Hugo -// `email-request-form` shortcode; styled standalone (no Bootstrap). -const uid = Math.random().toString(36).slice(2, 9); ---- - -
-
- - -
- - -
- - - - diff --git a/src/components/RequestEmailForm.astro b/src/components/RequestEmailForm.astro new file mode 100644 index 0000000..9a035d4 --- /dev/null +++ b/src/components/RequestEmailForm.astro @@ -0,0 +1,235 @@ +--- +/** + * Builds a support-request email from a set of fields and copies the parts to + * the clipboard. Nothing is submitted anywhere and no mailto: link is used; + * the user pastes into their own mail client. + * + * `subject` and `body` take {fieldId} placeholders matching a field's id. + * + * + */ +interface Field { + id: string; + label: string; + placeholder?: string; + /** Output stays hidden until every required field is filled. Default true. */ + required?: boolean; +} + +interface Props { + fields: Field[]; + subject: string; + body: string; + to?: string; + intro?: string; +} + +const { fields, subject, body, to = 'rcc-support@uq.edu.au', intro } = Astro.props; + +// Namespaces input ids so several instances can share a page. +const uid = Math.random().toString(36).slice(2, 9); +const config = JSON.stringify({ to, subject, body }); +--- + + + {intro &&

{intro}

} + + { + fields.map((field) => ( +
+ + +
+ )) + } + + + +

+
+ + + + diff --git a/src/content/docs/user-guides/getting-started/index.mdx b/src/content/docs/user-guides/getting-started/index.mdx index 263e148..5c961d7 100644 --- a/src/content/docs/user-guides/getting-started/index.mdx +++ b/src/content/docs/user-guides/getting-started/index.mdx @@ -5,8 +5,7 @@ tableOfContents: false --- import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; -import EmailRequestForm from '@components/EmailRequestForm.astro'; -import EmailAafRequestForm from '@components/EmailAafRequestForm.astro'; +import RequestEmailForm from '@components/RequestEmailForm.astro'; import SignInAaf from '@partials/sign-in-aaf.mdx'; import AccessingProject from '@partials/accessing-project.mdx'; import TabQueryLink from '@components/TabQueryLink.astro'; @@ -55,7 +54,13 @@ Only one member of the project team needs to request for the project 2. Open a ticket with RCC support. Fill in your RDM collection name below and click to send a pre-filled email. - + 3. The support ticket will inform you when the project is set up. XNAT project setup typically takes around ~24 hours from ticket submission. @@ -87,7 +92,15 @@ For users from non-AAF organisations (QLD Health, TRI, QIMR, QLD Xray). QCIF/QRI 1. Open a ticket with RCC support to request an AAF account. Fill in your details below and click to send a pre-filled email. - + 2. AAF's VHO service will return an email regarding the account registration process. diff --git a/src/content/docs/user-guides/managing-data/downloading-data/desktop-client.md b/src/content/docs/user-guides/managing-data/downloading-data/desktop-client.md deleted file mode 100644 index fc06719..0000000 --- a/src/content/docs/user-guides/managing-data/downloading-data/desktop-client.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Desktop client -description: Downloading data using the XNAT Desktop client ---- - -The XNAT Desktop client is maintained by the XNAT development team. For information see the link below. - -XNAT Desktop client -: https://www.xnat.org/download/desktop-client/ - -## Install client - -Download and install the client for you operating system - -![Install desktop client](./desktop-client/desktop-client-1.png) - -## Download images - -The Project, Subject and Sessions page has the option to **Download Images** from the right hand side menu - -![Download Images menu](./desktop-client/desktop-client-2.png) - -Select **Option 1: Download via Desktop Client** - -:::caution[Note] -Untick **Simply downloaded archive structure** to keep scan names in scan folders -::: - -![Download via Desktop Client](./desktop-client/desktop-client-3.png) - -Click **Download Via App** - -![Download Via App](./desktop-client/desktop-client-4.png) - -Select a local destination folder - -![Select destination folder](./desktop-client/desktop-client-5.png) - -Download should start, and progress can be monitored diff --git a/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md b/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md deleted file mode 100644 index 8fe4dc4..0000000 --- a/src/content/docs/user-guides/managing-data/downloading-data/download-scan.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Download Scan -description: Download a single scan, or several at once with Bulk Actions, from a session in the XNAT web interface ---- - -Individual scans can be downloaded from the Sessions page. - -![Download scan from session](./download-scan/downloading-data-scan-1.png) - -Multiple scans can be selected and downloaded using **Bulk Actions** - -![Bulk download scans](./download-scan/downloading-data-scan-2.png) diff --git a/src/content/docs/user-guides/managing-data/downloading-data/index.mdx b/src/content/docs/user-guides/managing-data/downloading-data/index.mdx index d37f69c..266e504 100644 --- a/src/content/docs/user-guides/managing-data/downloading-data/index.mdx +++ b/src/content/docs/user-guides/managing-data/downloading-data/index.mdx @@ -1,16 +1,115 @@ --- title: Downloading Data -description: Downloading data from XNAT Projects +description: Download a whole project, a single session or individual scans from XNAT, as a zip or via the Desktop client --- -import { CardGrid, LinkCard } from '@astrojs/starlight/components'; +import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import TabQueryLink from '@components/TabQueryLink.astro'; -There are a few ways to download data from XNAT, depending on how much you need and the tools you prefer. +There are three ways to get data out of XNAT. Which one you want depends on how +much you are taking and what you plan to do with it. - - - - - +| If you want | Use | Notes | +| --- | --- | --- | +| A whole project, subject or session | **Zip download** | Everything in one archive, straight from the browser | +| Large downloads, or a resumable transfer | **Desktop client** | A separate application you install once | +| One scan, or a few scans from a session | **Individual scans** | Fastest when you only need part of a session | -For further information refer to the [XNAT official guide on downloading data](https://wiki.xnat.org/documentation/how-to-use-xnat/how-to-download-image-data-from-xnat-projects). +{/* Tab labels are load-bearing: TabQueryLink slugifies the label to build the + ?method= value, and the legacy redirects in astro.config.mjs point at those + exact slugs. Renaming a label breaks those URLs silently. */} + + + + +The Project, Subject and Sessions pages each have a **Download Images** option +in the right hand side menu. + + + +1. Open **Download Images** from the right hand menu. + + ![Download Images menu](./zip-download/downloading-data-1.png) + +2. Choose what to include from the download options. + + ![Download options](./zip-download/downloading-data-2.png) + +3. Select **Option 2: ZIP download**. + + ![Download dialog](./zip-download/downloading-data-3.png) + + :::caution + Untick **Simply downloaded archive structure** to keep scan names in scan folders. + ::: + +4. Filter the sessions and scans using the first two columns, then select **Submit**. + + ![ZIP download options](./zip-download/downloading-data-zip.png) + + + + + + +The XNAT Desktop client is a separate application maintained by the XNAT +development team. Install it once, then trigger downloads from the browser and +hand them to the client. + + + +1. Download and install [the XNAT Desktop client](https://www.xnat.org/download/desktop-client/) + for your operating system. + + ![Install desktop client](./desktop-client/desktop-client-1.png) + +2. In XNAT, open **Download Images** from the right hand menu of a Project, + Subject or Session. + + ![Download Images menu](./desktop-client/desktop-client-2.png) + +3. Select **Option 1: Download via Desktop Client**. + + :::caution + Untick **Simply downloaded archive structure** to keep scan names in scan folders. + ::: + + ![Download via Desktop Client](./desktop-client/desktop-client-3.png) + +4. Click **Download Via App**. + + ![Download Via App](./desktop-client/desktop-client-4.png) + +5. Select a local destination folder. The download starts, and you can monitor + its progress in the client. + + ![Select destination folder](./desktop-client/desktop-client-5.png) + + + + + + +When you only need part of a session, download the scans directly from the +Sessions page rather than taking the whole session. + + + +1. Open the session and download the scan from the Sessions page. + + ![Download scan from session](./download-scan/downloading-data-scan-1.png) + +2. To take several at once, select the scans you want and use **Bulk Actions**. + + ![Bulk download scans](./download-scan/downloading-data-scan-2.png) + + + + + + + + +## Further reading + +- [XNAT official guide on downloading image data](https://wiki.xnat.org/documentation/how-to-use-xnat/how-to-download-image-data-from-xnat-projects) diff --git a/src/content/docs/user-guides/managing-data/downloading-data/zip-download.md b/src/content/docs/user-guides/managing-data/downloading-data/zip-download.md deleted file mode 100644 index 3649453..0000000 --- a/src/content/docs/user-guides/managing-data/downloading-data/zip-download.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Zip Download -description: Downloading data as Zip using the XNAT UI ---- - -The Project, Subject and Sessions page has the option to **Download Images** from the right hand side menu - -![Download Images menu](./zip-download/downloading-data-1.png) -![Download options](./zip-download/downloading-data-2.png) -![Download dialog](./zip-download/downloading-data-3.png) - -Select **Option 2: ZIP download** - -:::caution[Note] -Untick **Simply downloaded archive structure** to keep scan names in scan folders -::: - -![ZIP download options](./zip-download/downloading-data-zip.png) - -Filter out the Session and scans from the first two columns and select **Submit** diff --git a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx index 7c946f4..03d9ddb 100644 --- a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx +++ b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx @@ -4,7 +4,7 @@ description: Request access to a Jupyter environment and run notebooks directly --- import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; -import EmailJupyterRequestForm from '@components/EmailJupyterRequestForm.astro'; +import RequestEmailForm from '@components/RequestEmailForm.astro'; You can access a Jupyter environment directly from XNAT. This allows you to run analysis on your data using familiar tools like Jupyter notebooks. RCC support can set up access to the Jupyter environment. @@ -12,9 +12,13 @@ You can access a Jupyter environment directly from XNAT. This allows you to run -1. Open a ticket with RCC support. Fill in your XNAT project name/s that should be accessible from the Jupyter environment below and click to send a pre-filled email. +1. Open a ticket with RCC support. Fill in the XNAT projects that should be accessible from the Jupyter environment, then copy the generated email into your mail client. - + 2. The support ticket will inform you when your access is set up. Jupyter access setup typically takes around ~24 hours from ticket submission. From c69b2fffd3573e0d71d724350ec99d24727cd927 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Fri, 21 Aug 2026 03:38:45 +0000 Subject: [PATCH 06/10] Add review queue for unanswered domain questions --- REVIEW.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 REVIEW.md diff --git a/REVIEW.md b/REVIEW.md new file mode 100644 index 0000000..4c98e09 --- /dev/null +++ b/REVIEW.md @@ -0,0 +1,73 @@ +# Docs review queue + +Questions that can't be answered from the codebase, the screenshots or public +XNAT documentation. Grouped by what they block. + +## Blocks launch + +- [ ] **De-identification obligations.** Who is responsible for de-identifying + before upload? What ethics approval is presupposed? What must a user do if + identifiable data reaches the archive, and will RCC purge it? + Currently the only statement of this anywhere is a `:::note` inside step 1 + of `uploading-data/web-upload.mdx`. +- [ ] **Site anonymiser coverage.** `anonymising-data/site-anonymiser.md` says + HIRF and CAI data is anonymised on-site. `getting-started` names HIRF, CAI + **and TRI**. Which is right, and is the DICOM tag table current? This is a + privacy claim, so it needs to be exact. + +## Blocks new pages + +- [ ] **Data residency and lifecycle.** Where do the bytes actually live? Does + deleting in XNAT delete in UQ-RDM? What happens at project end? Backups? +- [x] **Who can create a project.** Answered: UQ users can request their own. + Non-UQ AAF users and non-AAF users cannot; their projects are created by + the facility or they are granted access by a project lead. Non-AAF users + additionally need an AAF VHO account first. Captured in + `using-xnat/projects/your-project.mdx`. +- [ ] **Facility project creation.** Projects for HIRF, CAI and TRI data are + sometimes created automatically and sometimes not. What determines it? + The Facility data tab currently tells users to check their project list + and contact the facility if it is missing, which avoids the question but + does not answer it. +- [ ] **Automated facility uploads.** With CTP retired, what sends imaging data + from HIRF, CAI and TRI scanners to XNAT, and who operates it? How long + does it normally take, does the data land in the project directly or wait + in the prearchive, and how long should a user wait before chasing it — + with the facility or with RCC support? Blocks + `uploading-data/facility-uploads.md`, currently `draft: true`. +- [ ] **Which instance for which user.** `xnat.rcc` vs `opex.xnat` vs + `irc5.xnat`. The homepage flags the latter two as UQ network or VPN only, + and `partials/sign-in-aaf.mdx` already hedges with "if you have been + provided with a project specific XNAT link, use that one instead" — + that hedge exists because the rule was never written down. +- [ ] **Support routing.** When is it `rcc-support@uq.edu.au` vs + `HIRFAdministration@health.qld.gov.au`? Business hours? Escalation path? + The "~24 hours" turnaround appears on two pages with no source. + +## Corrections to existing pages + +- [ ] **XNAT version in production.** Determines whether the quoted UI strings + are right. +- [ ] **"Simply downloaded archive structure"** — quoted on the downloading page. + Is the real checkbox label "Simplify downloaded archive structure"? Left + verbatim rather than silently corrected. +- [ ] **Alias token expiry.** `alias-tokens.md` says 60 days. This is + site-configurable in XNAT — confirm for this instance. +- [ ] **Storage quota.** "1TB storage and 1 million files" — current? Per + project or per user? What does a user see when they hit it? +- [ ] **Feature availability.** The Actions menu in `using-xnat/subjects.png` + shows XSync, Pipelines and Event Service. None are documented. Are they + generally available, restricted, or disabled? +- [ ] **AAF Keycloak login error.** There is an unused screenshot at + `logging-into-xnat/ais-keycloak-login-error.png` showing "Unexpected error + when authenticating with identity provider". What is the fix? Someone hit + this and never wrote it up. +- [ ] **FAQ content.** `user-guides/faq.md` is an honest placeholder. Real + questions from the ticket queue would be better than invented ones. + +## Drafted content awaiting sign-off + +Pages drafted from screenshots and public XNAT docs are marked either +`draft: true` (excluded from production builds) or with a review banner and a +sidebar badge. Nothing drafted should be published without a pass from someone +who runs the service. From 911c43b36eb53a8a91806c4dbc792e1b55ed7000 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Fri, 21 Aug 2026 03:38:56 +0000 Subject: [PATCH 07/10] Restructure navigation and onboarding around user tasks --- astro.config.mjs | 122 +++++++-------- src/components/ChoiceCards.astro | 143 ++++++++++++++++++ src/components/MemberChooser.astro | 117 -------------- .../facility-guides/ctp/close-launcher.png | Bin 54085 -> 0 bytes .../docs/facility-guides/ctp/index.mdx | 14 -- .../docs/facility-guides/ctp/installation.mdx | 132 ---------------- .../docs/facility-guides/ctp/proxy-config.png | Bin 44988 -> 0 bytes .../docs/facility-guides/ctp/proxy-server.mdx | 67 -------- .../facility-guides/ctp/run-as-service.mdx | 89 ----------- .../facility-guides/ctp/windows-service.png | Bin 50136 -> 0 bytes src/content/docs/facility-guides/index.mdx | 12 -- src/content/docs/index.mdx | 4 +- .../user-guides/getting-started/index.mdx | 122 ++++++--------- src/content/docs/user-guides/index.md | 4 - src/content/docs/user-guides/index.mdx | 41 +++++ .../user-guides/logging-into-xnat/index.mdx | 46 ++---- .../managing-data/anonymising-data/index.mdx | 2 +- .../anonymising-data/site-anonymiser.md | 2 +- .../managing-data/downloading-data/index.mdx | 5 + .../managing-data/syncing-data/index.md | 2 +- .../uploading-data/facility-uploads.md | 38 +++++ .../managing-data/uploading-data/index.mdx | 37 ++++- .../uploading-data/prearchive.md | 44 ++++-- .../uploading-data/resource-uploader.md | 2 +- .../uploading-data/web-upload.mdx | 4 +- .../user-guides/processing-data/index.mdx | 6 +- .../interactive-analysis/index.mdx | 2 +- .../docs/user-guides/using-xnat/index.mdx | 4 +- .../user-guides/using-xnat/projects/index.md | 6 + .../using-xnat/projects/request-storage.mdx | 2 +- .../using-xnat/projects/your-project.mdx | 107 +++++++++++++ .../your-project}/uqrdm-create-record.png | Bin .../user-guides/using-xnat/sessions/index.md | 2 +- src/partials/accessing-project.mdx | 7 - src/partials/sign-in-aaf.mdx | 2 +- src/styles/base.css | 2 +- src/styles/components.css | 6 + 37 files changed, 553 insertions(+), 642 deletions(-) create mode 100644 src/components/ChoiceCards.astro delete mode 100644 src/components/MemberChooser.astro delete mode 100644 src/content/docs/facility-guides/ctp/close-launcher.png delete mode 100644 src/content/docs/facility-guides/ctp/index.mdx delete mode 100644 src/content/docs/facility-guides/ctp/installation.mdx delete mode 100644 src/content/docs/facility-guides/ctp/proxy-config.png delete mode 100644 src/content/docs/facility-guides/ctp/proxy-server.mdx delete mode 100644 src/content/docs/facility-guides/ctp/run-as-service.mdx delete mode 100644 src/content/docs/facility-guides/ctp/windows-service.png delete mode 100644 src/content/docs/facility-guides/index.mdx delete mode 100644 src/content/docs/user-guides/index.md create mode 100644 src/content/docs/user-guides/index.mdx create mode 100644 src/content/docs/user-guides/managing-data/uploading-data/facility-uploads.md create mode 100644 src/content/docs/user-guides/using-xnat/projects/your-project.mdx rename src/content/docs/user-guides/{getting-started => using-xnat/projects/your-project}/uqrdm-create-record.png (100%) delete mode 100644 src/partials/accessing-project.mdx diff --git a/astro.config.mjs b/astro.config.mjs index bd31a36..e029af9 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -31,10 +31,6 @@ const slugs = [ 'user-guides/processing-data', 'user-guides/processing-data/command-line-tools', 'user-guides/processing-data/interactive-analysis', - 'facility-guides', - 'facility-guides/ctp', - 'facility-guides/ctp/installation', - 'facility-guides/ctp/proxy-server', ]; // Old Hugo `/docs/` -> new `/`, plus the legacy Hugo aliases. @@ -46,16 +42,16 @@ const redirects = { // every old per-member URL (both the Astro and original Hugo `/docs/` forms) // and the legacy Hugo aliases to the matching tab. '/user-guides/getting-started/uq-members': - '/user-guides/getting-started/?member=uq-members', + '/user-guides/getting-started/?member=aaf-members', '/user-guides/getting-started/other-aaf-members': - '/user-guides/getting-started/?member=other-aaf-members', + '/user-guides/getting-started/?member=aaf-members', '/user-guides/getting-started/non-aaf-members': '/user-guides/getting-started/?member=non-aaf-members', '/user-guides/getting-started/hirf-users': '/user-guides/getting-started/', '/docs/user-guides/getting-started/uq-members': - '/user-guides/getting-started/?member=uq-members', + '/user-guides/getting-started/?member=aaf-members', '/docs/user-guides/getting-started/other-aaf-members': - '/user-guides/getting-started/?member=other-aaf-members', + '/user-guides/getting-started/?member=aaf-members', '/docs/user-guides/getting-started/non-aaf-members': '/user-guides/getting-started/?member=non-aaf-members', '/docs/user-guides/getting-started/hirf-users': '/user-guides/getting-started/', @@ -92,18 +88,32 @@ const redirects = { '/docs/user-guides/managing-data/downloading-data/download-scan': '/user-guides/managing-data/downloading-data/?method=individual-scans', - // CTP Windows/Linux service pages merged into one OS-tabbed page. - '/facility-guides/ctp/windows-service': '/facility-guides/ctp/run-as-service', - '/facility-guides/ctp/linux-service': '/facility-guides/ctp/run-as-service', - '/docs/facility-guides/ctp/windows-service': '/facility-guides/ctp/run-as-service', - '/docs/facility-guides/ctp/linux-service': '/facility-guides/ctp/run-as-service', + // CTP was retired; its pages are gone. Send the old URLs to the remaining + // upload methods rather than 404. + '/facility-guides': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp/installation': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp/proxy-server': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp/run-as-service': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp/windows-service': '/user-guides/managing-data/uploading-data', + '/facility-guides/ctp/linux-service': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp/installation': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp/proxy-server': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp/run-as-service': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp/windows-service': '/user-guides/managing-data/uploading-data', + '/docs/facility-guides/ctp/linux-service': '/user-guides/managing-data/uploading-data', // Legacy aliases declared in the original Hugo front matter. - '/docs/user-guides/create-xnat-project': '/user-guides/getting-started', + // Project creation now has its own page; these legacy URLs were always about + // creating a project rather than onboarding. + '/docs/user-guides/create-xnat-project': + '/user-guides/using-xnat/projects/your-project', '/docs/user-guides/create-xnat-project/create-q-collection-uq-users': - '/user-guides/getting-started/?member=uq-members', + '/user-guides/using-xnat/projects/your-project', '/docs/user-guides/create-xnat-project/create-q-collection-non-uq-users': - '/user-guides/getting-started/?member=other-aaf-members', + '/user-guides/using-xnat/projects/your-project', '/docs/user-guides/browsing-xnat': '/user-guides/using-xnat', '/docs/user-guides/login-to-xnat': '/user-guides/logging-into-xnat', '/docs/user-guides/login-to-xnat/aaf-login': '/user-guides/logging-into-xnat/', @@ -151,50 +161,46 @@ export default defineConfig({ // Cycling theme toggle (auto → light → dark) instead of the dropdown. ThemeSelect: './src/components/ThemeSelect.astro', }, - // Groups are ordered by the order a new user meets them: get in, meet - // your obligations, put data in, find it, take it out, automate. - // Labels are free to change; slugs are not, since ~60 legacy redirects - // point at them. + // Single axis: every group is a task, ordered the way a new user meets + // them. Labels are free to change; slugs are not, since the legacy + // redirects point at them. sidebar: [ { - label: 'Start here', + label: 'Getting started', items: [ - // Getting Started is a single tabbed page (member type via tabs). - { label: 'Getting started', slug: 'user-guides/getting-started' }, - // Logging into XNAT is a single page (AAF + RCC Authenticate tabs). + // Tabbed by member type; covers requesting a project and an account. + { label: 'Signing up', slug: 'user-guides/getting-started' }, { label: 'Logging in', slug: 'user-guides/logging-into-xnat' }, - ], - }, - { - label: 'Working with de-identified data', - items: [ - { label: 'Overview', slug: 'user-guides/managing-data/anonymising-data' }, { - label: 'On-site anonymisation', - slug: 'user-guides/managing-data/anonymising-data/site-anonymiser', - }, - { - label: 'Project anonymiser', - slug: 'user-guides/managing-data/anonymising-data/project-anonymiser', + label: 'Your project', + slug: 'user-guides/using-xnat/projects/your-project', }, ], }, { - label: 'Getting data in', + label: 'Uploading and downloading', items: [ { - label: 'Choosing an upload method', + label: 'Overview', slug: 'user-guides/managing-data/uploading-data', }, { label: 'Upload from the browser', slug: 'user-guides/managing-data/uploading-data/web-upload', }, - { label: 'The prearchive', slug: 'user-guides/managing-data/uploading-data/prearchive' }, + { + label: 'Fixing stuck uploads', + slug: 'user-guides/managing-data/uploading-data/prearchive', + }, { label: 'Custom upload forms', slug: 'user-guides/managing-data/uploading-data/resource-uploader', }, + { label: 'Downloading data', slug: 'user-guides/managing-data/downloading-data' }, + { + label: 'Syncing between XNATs', + slug: 'user-guides/managing-data/syncing-data', + }, ], }, { @@ -217,23 +223,28 @@ export default defineConfig({ }, { label: 'Subjects', slug: 'user-guides/using-xnat/subjects' }, { label: 'Sessions and scans', slug: 'user-guides/using-xnat/sessions' }, - { label: 'Finding data', slug: 'user-guides/using-xnat/search' }, + { label: 'Viewing images', slug: 'user-guides/managing-data/viewing-images' }, + { label: 'Search', slug: 'user-guides/using-xnat/search' }, ], }, { - label: 'Getting data out', + label: 'Anonymising data', items: [ - { label: 'Downloading data', slug: 'user-guides/managing-data/downloading-data' }, - { label: 'Viewing images', slug: 'user-guides/managing-data/viewing-images' }, - { label: 'Sharing and syncing', slug: 'user-guides/managing-data/syncing-data' }, + { label: 'Overview', slug: 'user-guides/managing-data/anonymising-data' }, + { + label: 'On-site anonymisation', + slug: 'user-guides/managing-data/anonymising-data/site-anonymiser', + }, + { + label: 'Project anonymiser', + slug: 'user-guides/managing-data/anonymising-data/project-anonymiser', + }, ], }, { - label: 'Analysis and automation', + // Plugins layered on top of XNAT, rather than core platform features. + label: 'Analysis and pipelines', items: [ - { label: 'Overview', slug: 'user-guides/processing-data' }, - { label: 'Alias tokens', slug: 'user-guides/processing-data/alias-tokens' }, - { label: 'Command line tools', slug: 'user-guides/processing-data/command-line-tools' }, { label: 'Jupyter environment', slug: 'user-guides/processing-data/interactive-analysis', @@ -241,18 +252,11 @@ export default defineConfig({ ], }, { - label: 'Facility guides', + label: 'Command line access', items: [ - { label: 'Overview', slug: 'facility-guides' }, - { - label: 'Clinical Trials Processor (CTP)', - items: [ - { label: 'Overview', slug: 'facility-guides/ctp' }, - { label: 'Installation', slug: 'facility-guides/ctp/installation' }, - { label: 'Run CTP as a service', slug: 'facility-guides/ctp/run-as-service' }, - { label: 'Proxy Server Settings', slug: 'facility-guides/ctp/proxy-server' }, - ], - }, + { label: 'Overview', slug: 'user-guides/processing-data' }, + { label: 'Alias tokens', slug: 'user-guides/processing-data/alias-tokens' }, + { label: 'Command line tools', slug: 'user-guides/processing-data/command-line-tools' }, ], }, ], diff --git a/src/components/ChoiceCards.astro b/src/components/ChoiceCards.astro new file mode 100644 index 0000000..8c848f5 --- /dev/null +++ b/src/components/ChoiceCards.astro @@ -0,0 +1,143 @@ +--- +/** + * Explainer cards that sit above a Starlight block and let the reader + * self-select a path. Each card maps to a tab by its slugified label; clicking + * a card selects that tab. Cards stay in sync however the tab was chosen + * (card, tab bar, or a ?param= deep link via TabQueryLink). + * + * + * ... + */ +interface Option { + /** Must match the exactly. */ + tab: string; + /** Supporting line under the title. */ + who: string; +} + +interface Props { + options: Option[]; + label: string; +} + +const { options, label } = Astro.props; + +const slugify = (s: string) => + s + .trim() + .toLowerCase() + .replace(/[^a-z0-9]+/g, '-') + .replace(/(^-|-$)/g, ''); +--- + + + { + options.map((o) => ( + + )) + } + + + + + diff --git a/src/components/MemberChooser.astro b/src/components/MemberChooser.astro deleted file mode 100644 index 3fefd86..0000000 --- a/src/components/MemberChooser.astro +++ /dev/null @@ -1,117 +0,0 @@ ---- -// Explainer cards that sit above the visible Starlight on Getting -// Started. Each card maps to a tab by its slugified label; clicking a card -// selects that tab (the tab bar stays visible as a second, explicit switcher). -// Cards stay highlighted in sync with the active tab, however it was chosen -// (card click, tab-bar click, or ?member= deep link via TabQueryLink). -const options = [ - { tab: 'UQ members', who: 'UQ staff and students' }, - { - tab: 'Other AAF members', - who: 'QUT, Griffith, CQU, JCU, USQ, USC, Bond, CSIRO, QCIF and other AAF members', - }, - { tab: 'Non-AAF members', who: 'TRI, QIMR, QLD Health, QLD Xray, Pacific Radiology' }, -]; - -const slugify = (s) => - s.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, ''); ---- - -
- { - options.map((o) => ( - - )) - } -
- - - - diff --git a/src/content/docs/facility-guides/ctp/close-launcher.png b/src/content/docs/facility-guides/ctp/close-launcher.png deleted file mode 100644 index 3d9e6011d6b89ad72e1899a29aee69fab3de1687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54085 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

* 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ⅅO!pjHIPJyz_Ivz2zDsW1~5H}^h@3r@o22>}es?;9NC1{+eiMcvj z9K3imv?ssq*a#2XKH+16^*|!)$R6wG>yQj8Oux@qp~h7o!w>$d4P&_%N36OWZl{XA ztaNp|NoYoVPh64$*4~@kH~#QVNJ^@Xp5%ATQdM%owv8y`bFS$?9^?X99}+z9!Tkl# zBE^0nkk!)v;&c@&O`|Z_lT(?^`W822U!pm@h{r1G`;#xzan#pk6}kBs;&-qE{aufh zBNxYm`Sc)WcWo7Y@AC!MYX`!%WoIw-7-UB>8R`fk@l&k@=`L#q96eSFxDxvp4KC3W zCdc|1vh|gui1gngT9p&Tp_~esd_9|CKSEsDQ)+t6?;NYfcVLM`7hSCS)^R$99SH2( zXYwyit(-~U)ie5ha}x25bN#Hcv{pk!K4whcpHGFYX501y*k)Q(o?-ww)ZthpE4_`^ zF$5feUQbXfyvB=G5UiQoHp}?JEGIz`z3$9PS`nGr*PL%h!Qd-NfP0U{qdBpjp+k2* zqHaADOC1J^k4BpY;?o82$$;Smy4&`kB&)W-0xT6q+qf>v{p2u!CaX{VT7{Unk{s8C zsYUb*N-{mB%N_d->|vA<*9H2%{Oe;J#PZ7e$`gDHqkIR3l0I^N{9=T)PQ~WC>eb8e zrwqfT{uF$hU%*pqH2^p~c5ENEW0NYrnfbSz{uJ-s6#m7w@XR7Yi33eKuR#gE!}r4Rqw7=;4~;)x94}z+)?(I|&4}wwW4D$5XWj72 z!z8d5ffBk7E#gn4!M10vnY<<80+eD*`MJHFVoK2_t54?474)j@wx}5eIrYtdM!$hS zFbEFA1D9SUX?Ggo6g&doLZ^am57jCQLS&=Enk5&$f#&9boaP% zXXd&OOc#zL7u68M#@oWvv0A2$loI4rFmz}zL^`{8I4R@hXsY38!p+HAN>f+NDA=s; zt>ogMW-{c~H$yI`uXZsg3DwDUnt9I63QL=#kA}zfZ2BGYljw#_Pro@L_rcMLOP1%g zJbI5p1o39)GT0_dQfS-3P*bY_^p5%45mB6HROdnx`(590Dr)WIfOdF35WH^9Lmym9 zv0I!%#Wmo)0=C-V!kX}$7$jRC8S|d01RIPM!r{%<6jWCQkW^GI`@p$XtIJu^ent_B z7Bc{8U(ogo^0LNLIB>MavRc^nEuBaN&U9V@`NfXg@^0jFxgBM-c_9@@Zz>Qg9gj8i z{=JBl@&zimWBE|94?X%J9`IsD(e$J+-9OH?!REk)$@}phzn!PrS_H}e_9>(}o$a_y z6J%{rw@z|w+Wa(R17jp$98k$pbBWoU=FPy=CxM~aZ+0Gh2H}e}dc$*k^MQGh(d~Y& zMsMOVWBNWpT9k-iwNKAkr#Tiy)i} - - - - diff --git a/src/content/docs/facility-guides/ctp/installation.mdx b/src/content/docs/facility-guides/ctp/installation.mdx deleted file mode 100644 index f7edc94..0000000 --- a/src/content/docs/facility-guides/ctp/installation.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Installation -description: Install the Clinical Trials Processor on Windows 10 and configure it to send de-identified DICOM to UQ XNAT ---- - -import { Steps } from '@astrojs/starlight/components'; - -## Installing CTP on Windows 10 - - - -1. Create a new user for CTP on UQ XNAT (not an AAF/OpenID user) with required project access, without admin access - -2. Download the following files - - - [CTP-installer.jar](https://github.com/johnperry/CTP/raw/master/products/CTP-installer.jar) - - [ctp_clinical_site_to_xnat_config.xml](https://github.com/Australian-Imaging-Service/configuration/raw/0c784a9bdd817ee5e0534034a5a108b4a1c6f4aa/CTP/ctp_clinical_site_to_xnat_config.xml) - - [dcmtk-3.6.6-win64-dynamic.zip](https://dicom.offis.de/download/dcmtk/dcmtk366/bin/dcmtk-3.6.6-win64-dynamic.zip) - - [dicom_viewer_Mrbrain.zip](http://www.rubomedical.com/dicom_files/dicom_viewer_Mrbrain.zip) - - Optional if you need more DICOM samples: [sample1.zip](https://download.nrg.wustl.edu/pub/data/sample1.zip) - -3. Install CTP using: - - ``` - cd INSTALL_FOLDER (replace with your actual folder) - java -jar CTP-installer.jar - ``` - -4. Replace CTP/config.xml with ctp_clinical_site_to_xnat_config.xml - -5. Edit CTP/config.xml - - - Change "xxxx.xxxx" in two "url" tags to "xnat.rcc.uq.edu.au" - - Change "xxxx" username and password tags to match new user from step 1 - - If CTP internet access is via a proxy server, add the proxy server element to the Server config - - ```xml - ... - - - - ... - ``` - - Once this element is added proxy server settings can be updated in the CTP Launcher GUI - -6. Add CTP the anonymiser script - - - Copy CTP/scripts/DicomServiceAnonymizer.script to CTP/scripts/dicom-anonymizer-sender.script - - Add the PROJECTID parameter to the list of parameters at the start of the file - - `

my xnat project id

` - - Change the PatientComments element 0010,4000 to set XNAT project routing info - - `@always()@append(){Project:@param(@PROJECTID) Subject:@contents([0010,0010]) Session:@contents([0008,0050])}` - - Review/set other parameters at the start of the file - - PROFILENAME, eg. AIS-Clinical-Site-210604 - - DATEINC, eg. 0 - - PROJECTNAME, SITEID, SITENAME, TRIALNAME, TRIALSPONSOR as required - - Optional: review script to check anonymisation settings are appropriate - -7. Start CTP GUI - - ``` - java -jar Launcher.jar - ``` - -8. Click the CTP "Start" button - -9. Click the "CTP Home Page" button to open the Web UI - - - If the browser can't connect, check CTP is not already running, or try changing the Server port - -10. Login - - - Top RHS banner should show "Welcome admin" - -11. Optional: click "User Manager" to change default usernames/passwords - -12. Optional: click "DICOM Anonymizer" to view/edit anonymiser script - -13. Unzip DCMTK and MrBrain dicom sample - -14. Try sending an dicom to CTP using dcmtk - - ``` - cd dcmtk-3.6.5-win64-dynamic/bin - dcmsend localhost 25055 ../../dicom_viewer_Mrbrain/MRBRAIN.DCM - ``` - -15. Login to the XNAT server with an admin account to view Prearchive - - - Use "Upload" → "Go to prearchive" - - DICOM should appear in "Receiving" status, with project id assigned from step 6 - - Optional: non-admin users need to search by subject/etc - - Use Refresh to check when "Ready" or it disappears from list (as it has been routed to the project) - - Debugging: use dcm2xml from DCMTK to check anonymised dicom file under CTP/roots/FileAfterAnonymization25055 - -16. Logout and login with the new XNAT user from step 1 - -17. Navigate to the project set in step 6 - - - You should see the dicom listed as subject "1737775597" - -18. Use subject "1737775597" → "MR Session" → "View Images" to view the uploaded image - -19. Try a dicom send from the scanner using PC address and port 25055 (check windows firewall settings?) - -20. Enable CTP as a service. Instructions [here](/facility-guides/ctp/run-as-service) - -
- -## Further information - -If you need a different commit of CTP-installer -``` -git clone https://github.com/johnperry/CTP -cd CTP/products -git checkout CTP-Installer.jar -``` -If you need other AIS CTP config files -``` -git clone https://github.com/Australian-Imaging-Service/configuration.git -cd configuration/CTP -``` -CTP documentation links: - -[MIRC CTP Wiki](http://mircwiki.rsna.org/index.php?title=MIRC_CTP) - -[CTP DICOM Anonymizer](http://mircwiki.rsna.org/index.php?title=The_CTP_DICOM_Anonymizer) diff --git a/src/content/docs/facility-guides/ctp/proxy-config.png b/src/content/docs/facility-guides/ctp/proxy-config.png deleted file mode 100644 index 2ac64dca8824931a8ca249f803b36e62da3e7d0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44988 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 - -1. Stop the CTP Windows service - - - If you already have a Services short-cut on the Windows desktop, double-click the short-cut to start Windows Services - - If not, click the Windows start button, start typing "services" and the Services App icon should appear - - Click the Services App icon to start Windows Services - - Locate the CTP service in the list of services, right-click and select **Stop** from the context menu - -2. Start the CTP Launcher - - - If you already have a CTP Launcher short-cut on the Windows desktop, double-click the short-cut to start the CTP Launcher - - If not, locate the CTP service in the list of services again, right-click and select **Properties** from the context menu - 1. Use the **Path to executable** entry to find the installation folder for CTP. It will be in the form `\windows\CTP.exe` - 2. Open a Windows Command prompt window (Start button, type "cmd", click the Command Prompt App icon) - 3. In the Command Prompt window, enter the following commands - - ``` - cd - java -jar Launcher.jar - ``` - -3. Navigate to the CTP Launcher Configuration tab - -4. Use the navigation panel on the left to select **Configuration** -> **Server** -> **ProxyServer** - - ![CTP Launcher proxy configuration](./proxy-config.png) - -5. Update the proxy server settings in the right panel as required. You can set an IP address or host name in the proxyIPAddress field - -6. Select **File** -> **Save** from the main menu bar to save your changes - -7. Close the CTP Launcher using the Window close button at the top right - - :::caution - If the following prompt appears, select **No**. - - ![Close launcher prompt](./close-launcher.png) - - If the CTP is stopped, restart it from the Windows services menu (See below) - ::: - -8. Close the Command Prompt window - -9. Re-Start the CTP Windows service using Windows Services - - Locate the CTP service in the list of services, right-click and select **Start** from the context menu - - ![Start CTP Windows service](./windows-service.png) - - - -## Troubleshooting -* If the CTP Windows service Stop is disabled, try restarting Windows Services as administrator by right-clicking the icon and selecting **Run as administrator** - -## Further information - -* [CTP Server Settings](https://mircwiki.rsna.org/index.php?title=MIRC_CTP#Server) diff --git a/src/content/docs/facility-guides/ctp/run-as-service.mdx b/src/content/docs/facility-guides/ctp/run-as-service.mdx deleted file mode 100644 index fc625fe..0000000 --- a/src/content/docs/facility-guides/ctp/run-as-service.mdx +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Run CTP as a service -description: Enabling CTP as a service on Windows or Linux ---- - -import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; - -Run CTP automatically in the background by installing it as a service. Choose your operating system. - - - - -The CTP install.bat script uses Apache procrun. Use the following steps to enable CTP as a Windows service, including an update to use a JRE other than system default (leave out step 2 if using the system default JRE) - - - -1. Install CTP - - ``` - java -jar CTP-installer.jar - ``` - -2. To use JRE other than system default, edit `/windows/install.bat`. Find the `--Jvm=auto`, add a `--JavaHome` entry and set both as follows - - ``` - --JavaHome=" " ^ - --Jvm="\bin\server\jvm.dll" ^ - ``` - - - `^` is needed to wrap/continue command line in batch file - - The jvm.dll location under `` is the same for JRE 1.7 and 1.8 installs. Confirm this is the case for other JREs/JDKs - -3. Run install.bat as Administrator to create the CTP windows service - - ``` - cd /windows - install - ``` - -4. Open Windows Services as Administrator and start the CTP service - -5. Open CTP administration page in Web browser - -6. Confirm the correct JRE is reported in Admin → System Properties and/or Admin → Log Viewer → ctp.log - - - -## Troubleshooting -* Installation paths are set in install.bat during CTP install so it won't work if you move the CTP folder somewhere else after install -* If removing the service (with uninstall.bat) leaves the service stuck in delete pending state, reboot the system to complete - -## Further information - -* [Running CTP as a Windows service](https://mircwiki.rsna.org/index.php?title=Running_CTP_as_a_Windows_Service) -* [Apache procrun](https://commons.apache.org/proper/commons-daemon/procrun.html) - - - - - - -1. Open `./linux/ctpService-ubuntu.sh` and update the following parameters: - - ``` - USER=ubuntu - CTP_HOME=/opt/ctp/CTP - JAVA_BIN=/usr/lib/jvm/java-17-openjdk-amd64/bin - JAVA=$JAVA_BIN/java - CTP_PID=$CTP_HOME/ctp.pid - ``` - -2. Install the ctpService into init.d: - - ``` - sudo ln -s ./linux/ctpService-ubuntu.sh /etc/init.d/ctpService - sudo update-rc.d ctpService defaults 98 02 - ``` - -3. Start and stop CTP using the following commands: - - ``` - sudo service ctpService start - sudo service ctpService stop - ``` - - - - - diff --git a/src/content/docs/facility-guides/ctp/windows-service.png b/src/content/docs/facility-guides/ctp/windows-service.png deleted file mode 100644 index 6a5f2269d0c4dcce997716bb45eda3e82bbcafa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50136 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 D7S{0a diff --git a/src/content/docs/facility-guides/index.mdx b/src/content/docs/facility-guides/index.mdx deleted file mode 100644 index 8cdda63..0000000 --- a/src/content/docs/facility-guides/index.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Facility Guides -description: For Clinical and Imaging facilities ---- - -import { CardGrid, LinkCard } from '@astrojs/starlight/components'; - -Guides for facilities setting up infrastructure to send imaging data to the UQ XNAT. - - - - diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index 186648e..ff7e108 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -8,8 +8,8 @@ hero: image: html: 'XNAT' actions: - - text: Documentation - link: /user-guides/getting-started + - text: Browse the guides + link: /user-guides icon: open-book variant: primary - text: Go to XNAT diff --git a/src/content/docs/user-guides/getting-started/index.mdx b/src/content/docs/user-guides/getting-started/index.mdx index 5c961d7..82ec3ef 100644 --- a/src/content/docs/user-guides/getting-started/index.mdx +++ b/src/content/docs/user-guides/getting-started/index.mdx @@ -1,96 +1,67 @@ --- -title: Getting Started -description: Sign up and get started with UQ XNAT — choose your organisation type +title: Signing up +description: Sign up for UQ XNAT with your AAF credentials, or request an AAF Virtual Home account if your organisation is not an AAF member tableOfContents: false --- -import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import { Tabs, TabItem, Steps, LinkCard } from '@astrojs/starlight/components'; +import ChoiceCards from '@components/ChoiceCards.astro'; import RequestEmailForm from '@components/RequestEmailForm.astro'; import SignInAaf from '@partials/sign-in-aaf.mdx'; -import AccessingProject from '@partials/accessing-project.mdx'; import TabQueryLink from '@components/TabQueryLink.astro'; -import MemberChooser from '@components/MemberChooser.astro'; -Choose the option that matches your organisation — your selection is remembered as you move through the docs. - - +Logging in to XNAT uses the Australian Access Federation (AAF). How you start +depends on whether your organisation is an AAF member. + + - - -For UQ staff and students. - -## Signing into XNAT - - - -## Creating an XNAT project - -For UQ users, XNAT uses UQ-RDM HPC collections for storage allocation. For any general questions about UQ-RDM, please refer to the [library guides](https://guides.library.uq.edu.au/for-researchers/uq-research-data-manager). - -:::caution[Note] -Only one member of the project team needs to request for the project -::: - - - -1. Before creating an XNAT project, you'll require a UQ-RDM **HPC Collection** - - - **HPC collections** end with **-Q** and a 4-digit numerical identifier (e.g. PROJ001-**Q0189**) - - **Non-HPC collections** end with **-A** (e.g. PROJ001-**A0189**) or **-I** (PROJ001-**I0189**) - - Open [https://rdm.uq.edu.au/create-record](https://rdm.uq.edu.au/create-record), sign in and fill in the record as per your project details - - ![UQ-RDM create record](./uqrdm-create-record.png) - - :::caution[Important] - For **(6) Data Storage Options**, select the second option (_The project data needs to be mounted on UQ HPC facilities._). Any other option will be incompatible with XNAT, requiring a new RDM request. - ::: - - **REQUEST DATA STORAGE** when complete. You should have an RDM collection name ready (e.g. **PROJ001-Q0189**) - -2. Open a ticket with RCC support. Fill in your RDM collection name below and click to send a pre-filled email. - - - -3. The support ticket will inform you when the project is set up. XNAT project setup typically takes around ~24 hours from ticket submission. - - - - - - + -For users from Australian universities and AAF member organisations (QUT, Griffith, CQU, JCU, USQ, USC, CSIRO and others). Full list of AAF members found [here](https://aaf.edu.au/subscribers). +If your organisation is part of the AAF, you already have everything you need to +log in. The [full list of AAF members](https://aaf.edu.au/subscribers) is on the +AAF site. -## Signing into XNAT +## Logging into XNAT -## Accessing your XNAT project +## Your XNAT project - + -For users from non-AAF organisations (QLD Health, TRI, QIMR, QLD Xray). QCIF/QRIScloud can provide an AAF Virtual Home (VHO) account for login. +If your organisation is not an AAF member, QCIF and QRIScloud can provide an AAF +Virtual Home (VHO) account so you can log in. Request that first. ## Request an AAF VHO account -1. Open a ticket with RCC support to request an AAF account. Fill in your details below and click to send a pre-filled email. +1. Open a ticket with RCC support. Fill in your details below, then copy the + generated email into your mail client. -2. AAF's VHO service will return an email regarding the account registration process. +2. AAF's VHO service will email you about the account registration process. -## Signing into XNAT +## Logging into XNAT -1. Open [https://xnat.rcc.uq.edu.au](https://xnat.rcc.uq.edu.au) and log in with the AAF Single sign-on button. +1. Open [https://xnat.rcc.uq.edu.au](https://xnat.rcc.uq.edu.au) and log in with + the AAF Single sign-on button. ![XNAT AAF login page](../logging-into-xnat/xnat-aaf-login-page.png) -2. Select the **AAF Virtual Home** option and login with your AAF VHO credentials. +2. Select the **AAF Virtual Home** option and log in with your VHO credentials. ![AAF Virtual Home login](../logging-into-xnat/aaf-virtual-home-login.png) ![AAF VHO sign-in](../logging-into-xnat/aaf-vho-signin.png) -3. After the AAF sign-in, you should be redirected back to XNAT. There will be **no projects listed** the first time. +3. After the AAF sign-in you are redirected back to XNAT. There will be **no + projects listed** the first time. ![Signed in to XNAT](./xnat-signed-in.png) -## Accessing your XNAT project +## Your XNAT project - + :::note -Data acquired at HIRF, CAI or TRI can be sent to the UQ XNAT repository. If you have multiple valid affiliations, we'd recommend using UQ or AAF where possible. Questions: contact rcc-support@uq.edu.au or HIRFAdministration@health.qld.gov.au +Data acquired at HIRF, CAI or TRI can be sent to the UQ XNAT repository. If you +have multiple valid affiliations, we recommend using UQ or AAF where possible. ::: diff --git a/src/content/docs/user-guides/index.md b/src/content/docs/user-guides/index.md deleted file mode 100644 index 4341419..0000000 --- a/src/content/docs/user-guides/index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: User Guides -description: For Researchers and Collaborators ---- diff --git a/src/content/docs/user-guides/index.mdx b/src/content/docs/user-guides/index.mdx new file mode 100644 index 0000000..c4d2821 --- /dev/null +++ b/src/content/docs/user-guides/index.mdx @@ -0,0 +1,41 @@ +--- +title: Guides +description: Find the guide for what you are trying to do in UQ XNAT, from getting access through to running analysis +--- + +import { CardGrid, LinkCard } from '@astrojs/starlight/components'; + +Find what you are trying to do below, or use the sidebar to browse everything. + +## Getting set up + + + + + + + +## Getting data in and out + + + + + + + + +## Working with your data + + + + + + + + +## Scripting and analysis + + + + + diff --git a/src/content/docs/user-guides/logging-into-xnat/index.mdx b/src/content/docs/user-guides/logging-into-xnat/index.mdx index b2fb7e2..4fe509f 100644 --- a/src/content/docs/user-guides/logging-into-xnat/index.mdx +++ b/src/content/docs/user-guides/logging-into-xnat/index.mdx @@ -1,31 +1,25 @@ --- -title: Logging into XNAT -description: Logging into XNAT with AAF or RCC Authenticate +title: Logging in +description: Log in to UQ XNAT with your organisation's AAF credentials --- -import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; -import TabQueryLink from '@components/TabQueryLink.astro'; +import { Steps } from '@astrojs/starlight/components'; - - -There are two ways to log into XNAT. AAF is the recommended option for most users. - - - +If your organisation is part of the Australian Access Federation (AAF), you can +use your existing institutional credentials to log in. :::note -AAF is the recommended way to sign up and login to XNAT. - -If your organisation is not in the AAF list during the sign-up process, please contact the respective XNAT support for further options +If your organisation is not in the AAF list during sign-up, contact RCC support +for other options. ::: -If your organisation is part of the Australian Access Federation (AAF), you can use your AAF credentials to sign up. Follow the steps below to sign-up/login using AAF. +## Logging in with AAF 1. Open [https://xnat.rcc.uq.edu.au](https://xnat.rcc.uq.edu.au) -2. Log in with the AAF Single sign-on button (shown below) +2. Log in with the AAF Single sign-on button. ![XNAT AAF login page](./xnat-aaf-login-page.png) @@ -33,22 +27,12 @@ If your organisation is part of the Australian Access Federation (AAF), you can -:::caution[First time users] -First time users will only see publicly accessible projects when they log in. +:::note[First time users] +You will not see any projects the first time you log in — your account has only +just been created. See [Your project](/user-guides/using-xnat/projects/your-project) +for how to get access to one. ::: -For more details on the Australian Access Federation, see https://aaf.edu.au - - - - -To use this login, you would have received an email from a UQ XNAT administrator with the login information. - -:::caution[Note] -If you have not received an email, either use **AAF** (see the other tab) or contact the respective XNAT support. - -RCC Authenticate credentials are **NOT** your UQ or institutional username and password -::: +## Further reading - - +- [Australian Access Federation](https://aaf.edu.au) diff --git a/src/content/docs/user-guides/managing-data/anonymising-data/index.mdx b/src/content/docs/user-guides/managing-data/anonymising-data/index.mdx index 079b65e..45dfa43 100644 --- a/src/content/docs/user-guides/managing-data/anonymising-data/index.mdx +++ b/src/content/docs/user-guides/managing-data/anonymising-data/index.mdx @@ -1,5 +1,5 @@ --- -title: Anonymising Data +title: Anonymising data description: Site-level and project-level anonymisation of DICOM data --- diff --git a/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md b/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md index b44d486..8c2043b 100644 --- a/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md +++ b/src/content/docs/user-guides/managing-data/anonymising-data/site-anonymiser.md @@ -1,5 +1,5 @@ --- -title: Site anonymiser +title: On-site anonymisation description: Which DICOM tags are modified and blanked when HIRF and CAI data is anonymised on-site before it reaches XNAT --- diff --git a/src/content/docs/user-guides/managing-data/downloading-data/index.mdx b/src/content/docs/user-guides/managing-data/downloading-data/index.mdx index 266e504..4a99ad2 100644 --- a/src/content/docs/user-guides/managing-data/downloading-data/index.mdx +++ b/src/content/docs/user-guides/managing-data/downloading-data/index.mdx @@ -56,6 +56,11 @@ The XNAT Desktop client is a separate application maintained by the XNAT development team. Install it once, then trigger downloads from the browser and hand them to the client. +:::note +The client signs in to XNAT with an +[alias token](/user-guides/processing-data/alias-tokens), not your AAF login. +::: + 1. Download and install [the XNAT Desktop client](https://www.xnat.org/download/desktop-client/) diff --git a/src/content/docs/user-guides/managing-data/syncing-data/index.md b/src/content/docs/user-guides/managing-data/syncing-data/index.md index 4330267..e99c3b6 100644 --- a/src/content/docs/user-guides/managing-data/syncing-data/index.md +++ b/src/content/docs/user-guides/managing-data/syncing-data/index.md @@ -1,5 +1,5 @@ --- -title: Syncing Data +title: Syncing between XNATs description: Request syncing of datasets to other XNATs in Australia --- diff --git a/src/content/docs/user-guides/managing-data/uploading-data/facility-uploads.md b/src/content/docs/user-guides/managing-data/uploading-data/facility-uploads.md new file mode 100644 index 0000000..94452ff --- /dev/null +++ b/src/content/docs/user-guides/managing-data/uploading-data/facility-uploads.md @@ -0,0 +1,38 @@ +--- +title: Automated facility uploads +description: How imaging data acquired at HIRF, CAI or TRI reaches your XNAT project without you uploading it +draft: true +--- + +:::caution[Draft — not yet reviewed] +This page is a skeleton. The details marked below need confirming by someone who +runs the service before it is published. +::: + +If your data is acquired at HIRF, CAI or TRI, you do not need to upload it. The +facility sends it to XNAT for you. + +## What happens + + + +1. Your session is acquired at the facility. +2. The data is de-identified on-site before it leaves the facility. See + [On-site anonymisation](/user-guides/managing-data/anonymising-data/site-anonymiser) + for the DICOM tags this changes. +3. The data is sent to UQ XNAT and archived into your project. + + + +## If your data has not arrived + +- Check the prearchive — data waiting there has arrived but not been archived. + See [Fixing stuck uploads](/user-guides/managing-data/uploading-data/prearchive). +- Check you have access to the project. Data can be in XNAT before you are added + to the project. See [Your project](/user-guides/using-xnat/projects/your-project). +- If neither applies, contact the facility that acquired the data. + + diff --git a/src/content/docs/user-guides/managing-data/uploading-data/index.mdx b/src/content/docs/user-guides/managing-data/uploading-data/index.mdx index a4d2c9d..0d39a31 100644 --- a/src/content/docs/user-guides/managing-data/uploading-data/index.mdx +++ b/src/content/docs/user-guides/managing-data/uploading-data/index.mdx @@ -1,14 +1,39 @@ --- -title: Uploading Data -description: Upload data to XNAT Projects +title: Uploading and downloading data +description: Compare the ways of getting imaging data into and out of XNAT, and pick the one that suits your data and tools --- import { CardGrid, LinkCard } from '@astrojs/starlight/components'; +There are several ways to move data in and out of XNAT. Which one suits you +depends on how much data you have and whether you are working in the browser or +from a script. + +## Getting data in + + + + + + + +## Getting data out + - - - + + -Data can also be uploaded via the XNAT data client or CTP. For further information refer to the [image session upload methods in XNAT](https://wiki.xnat.org/documentation/how-to-use-xnat/image-session-upload-methods-in-xnat). +## From the command line + +Scripted uploads and downloads use the same tools in both directions, and need +an alias token rather than your AAF login. + + + + + + +## Further reading + +- [Image session upload methods in XNAT](https://wiki.xnat.org/documentation/how-to-use-xnat/image-session-upload-methods-in-xnat) diff --git a/src/content/docs/user-guides/managing-data/uploading-data/prearchive.md b/src/content/docs/user-guides/managing-data/uploading-data/prearchive.md index eb60326..b6f86bb 100644 --- a/src/content/docs/user-guides/managing-data/uploading-data/prearchive.md +++ b/src/content/docs/user-guides/managing-data/uploading-data/prearchive.md @@ -1,29 +1,45 @@ --- -title: Prearchive -description: XNAT Prearchive +title: Fixing stuck uploads +description: What to do when uploaded data does not appear in your project, and how to archive or merge a session waiting in the prearchive --- -If a dataset has not arrived into your XNAT project, the prearchive would be the place to check +If data you uploaded has not appeared in your XNAT project, it is probably +waiting in the **prearchive** — a holding area that uploads pass through before +they are archived into a project. -This usually happens when: -- a DICOM dataset matching an existing session gets resent -- a part of a session gets uploaded separately +Data usually stops there when: -## Accessing the prearchive +- a DICOM dataset matching an existing session is sent again +- part of a session is uploaded separately -Go to **Upload** on the top menu, and **Go to prearchive** +## Finding your data + +Go to **Upload** on the top menu, then **Go to prearchive**. ![Go to prearchive](./prearchive/prearchive-1.png) -The following is an example of a session that is in conflict. -We can select the session and choose **Details**. +Select the session and choose **Details** to review it. Below is an example of a +session in conflict. ![Prearchive session details](./prearchive/prearchive-2.png) -Here we can download the session, or individual scans. -And review the datasets +From here you can download the session or individual scans to check the contents +before deciding what to do with it. -- Choose **Archive** if you want the dataset merged into the existing one on the archive, -- choose **Modify and Archive** if any details need to be changed before archiving, or if you don’t want this dataset to merge with the existing one +## Archiving the data ![Archive options](./prearchive/prearchive-3.png) + +This choice matters, and it cannot be undone easily: + +- **Archive** merges the data into the existing session in your project. Use this + when the upload is the missing part of a session that is already there. +- **Modify and Archive** lets you change the details first. Use this when the + data should become a separate session, or when the session or subject labels + are wrong. + +:::caution +If you are not sure whether the data belongs to the existing session, download +it and check before archiving. Merging the wrong data into a session is harder +to unpick than archiving it separately. +::: diff --git a/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md b/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md index 3a6e26d..914fc94 100644 --- a/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md +++ b/src/content/docs/user-guides/managing-data/uploading-data/resource-uploader.md @@ -1,5 +1,5 @@ --- -title: Resource uploader +title: Custom upload forms description: Create a reusable web upload form for repeated uploads of non-DICOM data, such as analysis outputs or behavioural files --- diff --git a/src/content/docs/user-guides/managing-data/uploading-data/web-upload.mdx b/src/content/docs/user-guides/managing-data/uploading-data/web-upload.mdx index ff1d0e1..7adc45a 100644 --- a/src/content/docs/user-guides/managing-data/uploading-data/web-upload.mdx +++ b/src/content/docs/user-guides/managing-data/uploading-data/web-upload.mdx @@ -1,5 +1,5 @@ --- -title: Web Upload +title: Upload from the browser description: Upload using XNAT compressed uploader --- @@ -47,4 +47,4 @@ This is for uploading **de-identified DICOM** files using the uploader directly -For further information refer to the [XNAT official guide on using the compressed image uploader](https://wiki.xnat.org/documentation/how-to-use-xnat/image-session-upload-methods-in-xnat/using-the-compressed-image-uploader). +For further information refer to the [XNAT official guide on using the compressed image uploader](https://wiki.xnat.org/documentation/how-to-use-xnat/using-the-compressed-image-uploader). diff --git a/src/content/docs/user-guides/processing-data/index.mdx b/src/content/docs/user-guides/processing-data/index.mdx index deb1386..6ceb0b7 100644 --- a/src/content/docs/user-guides/processing-data/index.mdx +++ b/src/content/docs/user-guides/processing-data/index.mdx @@ -1,11 +1,11 @@ --- -title: Processing Data -description: Reach your XNAT data from outside the web interface, using alias tokens, command line tools or a Jupyter environment +title: Command line access +description: Connect to XNAT from a terminal or script using an alias token with xnatutils, xnatpy or pyxnat --- import { CardGrid, LinkCard } from '@astrojs/starlight/components'; + - diff --git a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx index 03d9ddb..625fef0 100644 --- a/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx +++ b/src/content/docs/user-guides/processing-data/interactive-analysis/index.mdx @@ -1,5 +1,5 @@ --- -title: Interactive Analysis +title: Jupyter environment description: Request access to a Jupyter environment and run notebooks directly against your XNAT project data --- diff --git a/src/content/docs/user-guides/using-xnat/index.mdx b/src/content/docs/user-guides/using-xnat/index.mdx index 86ef271..4427e44 100644 --- a/src/content/docs/user-guides/using-xnat/index.mdx +++ b/src/content/docs/user-guides/using-xnat/index.mdx @@ -1,5 +1,5 @@ --- -title: Using XNAT +title: Browsing and organising description: Browse and organise your imaging data in XNAT, across projects, subjects, sessions and search --- @@ -12,4 +12,4 @@ import { CardGrid, LinkCard } from '@astrojs/starlight/components'; -For further information refer to the [XNAT official guides on browsing data](https://wiki.xnat.org/documentation/how-to-use-xnat/using-the-standard-search/browsing-data-types). +For further information refer to the [XNAT official guides on browsing data](https://wiki.xnat.org/documentation/how-to-use-xnat/browsing-data-types). diff --git a/src/content/docs/user-guides/using-xnat/projects/index.md b/src/content/docs/user-guides/using-xnat/projects/index.md index 4639582..edb33a3 100644 --- a/src/content/docs/user-guides/using-xnat/projects/index.md +++ b/src/content/docs/user-guides/using-xnat/projects/index.md @@ -9,3 +9,9 @@ When you login into the home page, the list of projects that you have access to - User access is controlled at the project level ![Project list](./project-list.png) + +## Working with projects + +- [Your XNAT project](/user-guides/using-xnat/projects/your-project) — request a new project, or get access to an existing one +- [Granting access](/user-guides/using-xnat/projects/granting-access) — add users as Owners, Members or Collaborators +- [Requesting more storage](/user-guides/using-xnat/projects/request-storage) — raise the 1TB and 1 million file limits diff --git a/src/content/docs/user-guides/using-xnat/projects/request-storage.mdx b/src/content/docs/user-guides/using-xnat/projects/request-storage.mdx index f41e25b..7082a02 100644 --- a/src/content/docs/user-guides/using-xnat/projects/request-storage.mdx +++ b/src/content/docs/user-guides/using-xnat/projects/request-storage.mdx @@ -1,5 +1,5 @@ --- -title: Request Storage +title: Requesting more storage description: Request increase in storage and file count limits --- diff --git a/src/content/docs/user-guides/using-xnat/projects/your-project.mdx b/src/content/docs/user-guides/using-xnat/projects/your-project.mdx new file mode 100644 index 0000000..8189614 --- /dev/null +++ b/src/content/docs/user-guides/using-xnat/projects/your-project.mdx @@ -0,0 +1,107 @@ +--- +title: Your project +description: Request a new XNAT project, join a colleague's project, or get access to data acquired at a facility +--- + +import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import ChoiceCards from '@components/ChoiceCards.astro'; +import RequestEmailForm from '@components/RequestEmailForm.astro'; +import TabQueryLink from '@components/TabQueryLink.astro'; + +Every dataset in XNAT lives in a project, and access is controlled per project. +When you first log in you will have no projects listed. + + + + + + + +Only UQ staff and students can request a new project, because each XNAT project +is allocated against a UQ-RDM HPC collection. If you are not at UQ, ask a UQ +collaborator to request it. + +:::note +If your data is acquired at HIRF, CAI or TRI, check with the facility first — +they may create the project for you as part of your imaging booking. +::: + + + +1. Create a UQ-RDM **HPC Collection**. + + Open [https://rdm.uq.edu.au/create-record](https://rdm.uq.edu.au/create-record), + log in, and fill in the record with your project details. + + ![UQ-RDM create record](./your-project/uqrdm-create-record.png) + + :::caution[Important] + For **(6) Data Storage Options**, select the second option (_The project data + needs to be mounted on UQ HPC facilities._). Any other option is incompatible + with XNAT and will require a new RDM request. + ::: + + Select **REQUEST DATA STORAGE**. You will end up with a collection name such + as **PROJ001-Q0189** — HPC collections end in **-Q**, not **-A** or **-I**. + +2. Send the request to RCC support. + + + +3. Wait for confirmation. Project setup typically takes around 24 hours. + + + + + + + +Access is granted per project by an Owner, so someone has to add you. + + + +1. Ask the person who owns the project to add you. + + - **A study run by a colleague** — ask the study lead. + - **Data acquired at HIRF, CAI or TRI** — ask the facility, if they set the + project up. + +2. They follow [Granting access](/user-guides/using-xnat/projects/granting-access) + and choose your role — Owner, Member or Collaborator. + +3. Log in to XNAT. The project appears in your project list. + + + +:::caution +Contact RCC support if you have been told access was granted but the project is +still missing after five working days. +::: + +:::note +If you are from a non-AAF organisation, request an AAF account first — see +[Signing up](/user-guides/getting-started/?member=non-aaf-members). +::: + + + + + + + +## Further reading + +- [Granting access to your project](/user-guides/using-xnat/projects/granting-access) +- [Requesting more storage](/user-guides/using-xnat/projects/request-storage) diff --git a/src/content/docs/user-guides/getting-started/uqrdm-create-record.png b/src/content/docs/user-guides/using-xnat/projects/your-project/uqrdm-create-record.png similarity index 100% rename from src/content/docs/user-guides/getting-started/uqrdm-create-record.png rename to src/content/docs/user-guides/using-xnat/projects/your-project/uqrdm-create-record.png diff --git a/src/content/docs/user-guides/using-xnat/sessions/index.md b/src/content/docs/user-guides/using-xnat/sessions/index.md index a0be045..00daf38 100644 --- a/src/content/docs/user-guides/using-xnat/sessions/index.md +++ b/src/content/docs/user-guides/using-xnat/sessions/index.md @@ -1,5 +1,5 @@ --- -title: Sessions +title: Sessions and scans description: Managing Scan Sessions --- diff --git a/src/partials/accessing-project.mdx b/src/partials/accessing-project.mdx deleted file mode 100644 index bd08a60..0000000 --- a/src/partials/accessing-project.mdx +++ /dev/null @@ -1,7 +0,0 @@ -#### If you are acquiring data at HIRF, CAI or TRI -- The respective facility will organise the project creation. -- You will receive a follow up email when access has been granted -- Contact rcc-support@uq.edu.au if you have not received access within 5 working days - -#### If you are collaborating on an existing XNAT project -- Contact the project lead to grant you access to the XNAT project diff --git a/src/partials/sign-in-aaf.mdx b/src/partials/sign-in-aaf.mdx index d6869f6..3e8ea31 100644 --- a/src/partials/sign-in-aaf.mdx +++ b/src/partials/sign-in-aaf.mdx @@ -16,7 +16,7 @@ import { Steps } from '@astrojs/starlight/components'; 3. After the AAF sign-in, you should be redirected back to XNAT. - There will be **no projects listed** when signing in for the first-time, as your user account would have just been created. + There will be **no projects listed** the first time, as your user account has only just been created. ![Signed in to XNAT](../content/docs/user-guides/getting-started/xnat-signed-in.png) diff --git a/src/styles/base.css b/src/styles/base.css index be4b784..66552a3 100644 --- a/src/styles/base.css +++ b/src/styles/base.css @@ -27,7 +27,7 @@ border-radius: var(--xnat-radius-sm); } -/* MemberChooser and the request forms animate borders and backgrounds on hover +/* ChoiceCards and the request forms animate borders and backgrounds on hover with no guard of their own. */ @media (prefers-reduced-motion: reduce) { *, diff --git a/src/styles/components.css b/src/styles/components.css index 917f49b..51bd6b4 100644 --- a/src/styles/components.css +++ b/src/styles/components.css @@ -128,3 +128,9 @@ site-search button[data-open-modal] { border-inline-start: 1px solid var(--xnat-surface-border); } } + +/* Hero and link buttons. Starlight makes these full pills (999rem); square them + off to match the cards and framed screenshots. */ +.sl-link-button:is(.primary, .secondary, .minimal) { + border-radius: var(--xnat-radius-md); +} From 7019aad12319c2013ac1ab54391e1aec412bc72f Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Fri, 21 Aug 2026 03:43:23 +0000 Subject: [PATCH 08/10] Replace Docsy contributing guide --- CONTRIBUTING.md | 72 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index db177d4..182c7f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,28 +1,60 @@ -# How to Contribute +# Contributing -We'd love to accept your patches and contributions to this project. There are -just a few small guidelines you need to follow. +This repository holds the documentation for [UQ XNAT](https://docs.xnat.rcc.uq.edu.au), +operated by the Research Computing Centre at The University of Queensland. -## Contributor License Agreement +Corrections are welcome from anyone who uses the service. If a screenshot is out +of date or a step no longer matches what XNAT does, that is worth reporting even +if you do not fix it yourself. -Contributions to this project must be accompanied by a Contributor License -Agreement. You (or your employer) retain the copyright to your contribution; -this simply gives us permission to use and redistribute your contributions as -part of the project. Head over to to see -your current agreements on file or to sign a new one. +## Quickest way to fix a page -You generally only need to submit a CLA once, so if you've already submitted one -(even if it was for a different project), you probably don't need to do it -again. +Every page has an **Edit page** link at the bottom. It opens the file in the +GitHub web editor, where you can make a change and open a pull request without +cloning anything. -## Code reviews +## Working locally -All submissions, including submissions by project members, require review. We -use GitHub pull requests for this purpose. Consult -[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more -information on using pull requests. +```sh +npm install +npm run dev # http://localhost:4321 +npm run build # production build, run this before opening a PR +``` -## Community Guidelines +Content lives in `src/content/docs/`, one directory per section. Screenshots sit +beside the page that uses them. The sidebar and the URL redirects are both in +`astro.config.mjs`. -This project follows -[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). +## Writing conventions + +- **Australian English** — anonymise, organisation, de-identified. +- **Second person, imperative.** "Select **Upload**", not "we can select Upload". +- **Every page needs `title` and `description` frontmatter.** The description is + the meta description, the social card text and the search result snippet, so + make it a real sentence rather than a repeat of the title. +- **Sentence case for headings**, and at least two `##` headings per page so the + table of contents has something to show. Do not open a page at `###`. +- **Quote the interface exactly.** If XNAT's button says **Begin Upload**, write + that, in bold, with the same capitalisation. +- Prefer `` for ordered procedures, `` for mutually exclusive + paths, and plain prose for explanation. + +## Screenshots + +- **Never include real patient data, or anything that could identify a + participant.** Use a demo project with synthetic data. This is a public + repository and its history cannot be quietly rewritten. +- Colocate images with the page that references them. +- Write alt text describing what to look for, not what the page is. + +## Renaming and moving pages + +A page's URL comes from its filename, so renaming a file changes its URL. The +site carries around 60 redirects for URLs that already exist in the wild +(`astro.config.mjs`). If you move or rename a page, add a redirect from the old +path and check the build still passes. + +## Review + +Pull requests are reviewed by RCC. For anything about the service itself rather +than the documentation, contact `rcc-support@uq.edu.au`. From 6ff0010a782f2c475fb65eb17e1eb895d962ce02 Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Fri, 21 Aug 2026 03:43:23 +0000 Subject: [PATCH 09/10] Add page edit links and last updated dates --- .github/workflows/gh-pages.yml | 2 ++ astro.config.mjs | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 1438a53..4e033db 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -11,6 +11,8 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 # lastUpdated reads commit dates - name: Setup Node uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 diff --git a/astro.config.mjs b/astro.config.mjs index e029af9..9026bab 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -134,6 +134,9 @@ export default defineConfig({ './src/styles/components.css', ], tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 3 }, + editLink: { baseUrl: 'https://github.com/UQ-RCC/xnat/edit/main/' }, + // Reads git commit times, so CI needs full history (fetch-depth: 0). + lastUpdated: true, favicon: '/favicon.svg', head: [ // Starlight sets twitter:card=summary_large_image but emits no From eec6204ec6a8018c7d82018da6d67e52ef5dd5cc Mon Sep 17 00:00:00 2001 From: aswinnarayanan Date: Fri, 21 Aug 2026 03:43:23 +0000 Subject: [PATCH 10/10] Drop netlify config and fix dependabot ecosystems --- .github/dependabot.yml | 31 +++++++++++++++++++------------ netlify.toml | 6 ------ 2 files changed, 19 insertions(+), 18 deletions(-) delete mode 100644 netlify.toml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 573e2f0..9061708 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,14 +1,21 @@ version: 2 updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: daily - time: '20:00' - open-pull-requests-limit: 10 -- package-ecosystem: bundler - directory: "/" - schedule: - interval: daily - time: '20:00' - open-pull-requests-limit: 10 + # The bundler ecosystem was dropped with the Hugo site; there is no Gemfile. + - package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 5 + groups: + # astro and its integrations have to move together. + astro: + patterns: + - "astro" + - "@astrojs/*" + + # Workflow actions are pinned by SHA, so without this they never get updates. + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 5 diff --git a/netlify.toml b/netlify.toml deleted file mode 100644 index 5626533..0000000 --- a/netlify.toml +++ /dev/null @@ -1,6 +0,0 @@ -[build] -command = "npm run build" -publish = "dist" - -[build.environment] -NODE_VERSION = "22"