Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ hugo.linux
# Temporary lock file while building
/.hugo_build.lock

# Generated disciplines markdown export (regenerate via scripts/export_disciplines_to_md.py)
/scripts/output/

### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
Expand Down
22 changes: 22 additions & 0 deletions assets/scss/custom.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1881,6 +1881,28 @@ h1.clusters-site-heading.clusters-hub-page__title {
}
}

/* -------------------------------------------------- */
/* Disciplines page styles */
/* -------------------------------------------------- */
.disciplines-category-badge {
font-size: 0.7rem;
font-weight: 600;
padding: 0.15em 0.5em;
border-radius: 3px;
margin-right: 0.4em;
vertical-align: middle;
white-space: nowrap;
}

.disciplines-resource-item {
margin-bottom: 0.35rem;
line-height: 1.5;
}

.disciplines-resource-item a {
word-break: break-word;
}

/* -------------------------------------------------- */
/* Featured Resources: cards, filters, popups, lists */
/* -------------------------------------------------- */
Expand Down
6 changes: 6 additions & 0 deletions config/_default/menus.toml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,12 @@
weight = 34
parent = "nexus"

[[main]]
name = "Disciplines"
url = "/disciplines"
weight = 34.5
parent = "nexus"

[[main]]
name = "Curated Resources"
url = "/resources"
Expand Down
21 changes: 21 additions & 0 deletions content/disciplines/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
+++
type = "disciplines"
layout = "single"
title = "Open Research Across Disciplines — FORRT"
heading_title = "Open Research Across Disciplines"

summary = "Explore open research practices, examples, and resources across 38 disciplines grouped into 11 fields — from natural sciences and humanities to engineering, meta-research, and cross-cutting methodologies. A curated guide for researchers and educators."

description = "Explore open research practices, examples, and resources across 38 disciplines grouped into 11 fields — from natural sciences and humanities to engineering, meta-research, and cross-cutting methodologies."

sharing_title = "Open Research Across Disciplines — FORRT"
sharing_description = "Open research resources and examples across 38 disciplines: natural sciences, social sciences, humanities, engineering, and more."

keywords = [ "open research", "open science disciplines", "FORRT", "open data", "open methods", "open access", "reproducibility", "research transparency", "discipline-specific open science" ]

draft = false

[sitemap]
changefreq = "monthly"
priority = 0.8
+++
4,298 changes: 4,298 additions & 0 deletions data/disciplines.json

Large diffs are not rendered by default.

38 changes: 38 additions & 0 deletions layouts/disciplines/single.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{{/* layouts/disciplines/single.html - Main layout for Open Research Across Disciplines page */}}
{{ define "main" }}

{{ partial "disciplines/seo_jsonld.html" . }}
<div class="universal-wrapper pt-3 pb-3">
<div class="container">

{{/* Page header */}}
{{ if .Params.image }}
<div class="article-header d-print-none">
<img src="{{ .Params.image }}" alt="{{ .Params.heading_title | default .Title }}" class="article-banner" loading="lazy">
</div>
{{ end }}

<div class="article-container pt-3">
<h1 class="clusters-site-heading clusters-hub-page__title" itemprop="headline">{{ .Params.heading_title | default .Title }}</h1>

{{ if .Params.subtitle }}
<p class="page-subtitle">{{ .Params.subtitle | markdownify }}</p>
{{ end }}
</div>
</div>
</div>

{{/* INTRO SECTION */}}
<section class="clusters-intro-section">
<div class="container">
{{ partial "disciplines/intro.html" . }}
</div>
</section>

{{/* DISCIPLINES DISPLAY SECTION */}}
<section class="cluster-full-width clusters-display-section">
<div class="container">
{{ partial "disciplines/all_fields.html" . }}
</div>
</section>
{{ end }}
5 changes: 4 additions & 1 deletion layouts/partials/custom_js.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

{{/* Clusters page: load after DOM; defer runs before DOMContentLoaded so onReady still fires */}}
{{ $isClustersPage := and .File (strings.HasPrefix .File.Path "clusters/") }}
{{ if $isClustersPage }}
{{ $isDisciplinesPage := and .File (strings.HasPrefix .File.Path "disciplines/") }}
{{ if or $isClustersPage $isDisciplinesPage }}
<script src="{{ "js/clusters-page.js" | relURL }}" defer></script>
{{ end }}
{{ if $isClustersPage }}
<script src="{{ "js/featured-resources.js" | relURL }}" defer></script>
{{ end }}
31 changes: 31 additions & 0 deletions layouts/partials/disciplines/all_fields.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{{/* all_fields.html - Render all fields from disciplines.json data */}}
{{ $data := site.Data.disciplines }}
{{ if not $data }}
<div class="alert alert-warning">
<strong>Data Error:</strong> disciplines.json not found. Run <code>python3 scripts/parse_disciplines_to_json.py</code>.
</div>
{{ return }}
{{ end }}

{{ $palette := partial "disciplines/colors.html" }}
{{ $colors := $palette.colors }}
{{ $arrowColors := $palette.arrowColors }}

<div class="clusters-layout" id="disciplines-layout">

{{ partial "disciplines/controls.html" . }}

<div class="row">
{{ partial "disciplines/sidebar_nav.html" (dict "data" $data "arrowColors" $arrowColors "link_mode" "anchor") }}

<main class="col-12 col-lg-8 col-xl-9 clusters-content">
{{ range $fi, $field := $data.fields }}
{{ partial "disciplines/field_section.html" (dict "field" $field "fi" $fi "colors" $colors) }}
{{ end }}
</main>
</div>
</div>

<button type="button" class="clusters-back-to-top" id="clusters-back-to-top" aria-label="Back to top">
<i class="fas fa-arrow-up" aria-hidden="true"></i>
</button>
4 changes: 4 additions & 0 deletions layouts/partials/disciplines/colors.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{{/* Shared color palettes for disciplines page — 11 fields */}}
{{ $colors := slice "#cacfdc" "#eadce6" "#d4e4d9" "#BDC5CA" "#dce4ea" "#e8ddd4" "#c9dbcb" "#d9cfe0" "#cddde3" "#e0d8cc" "#d4dce8" }}
{{ $arrowColors := slice "#6070a0" "#a05080" "#408060" "#607080" "#5080a0" "#a08060" "#509060" "#8060a0" "#5090a0" "#907050" "#6070a0" }}
{{ return dict "colors" $colors "arrowColors" $arrowColors }}
25 changes: 25 additions & 0 deletions layouts/partials/disciplines/controls.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{{/* Search toolbar + mobile nav toggle for disciplines page */}}
<div class="clusters-controls mb-3">
<div class="clusters-inline-search">
<div class="clusters-inline-search__row">
<input type="text" id="clusters-inline-search-input" class="form-control clusters-inline-search__input"
placeholder="Search disciplines and resources..." aria-label="Search disciplines and resources" autocomplete="off" spellcheck="false">
<button type="button" class="btn btn-sm btn-primary clusters-inline-search__submit" id="clusters-inline-search-btn" aria-label="Run search">
<i class="fas fa-search" aria-hidden="true"></i>
</button>
<label class="clusters-inline-search__option-label">
<input type="checkbox" id="clusters-search-include-refs" checked>
Include resources
</label>
</div>
<div id="clusters-inline-search-panel" class="clusters-inline-search__panel">
<div id="clusters-inline-search-toolbar" class="clusters-inline-search__toolbar-host" hidden></div>
<div id="clusters-inline-search-results" class="clusters-inline-search__results-body" aria-live="polite"></div>
</div>
</div>

<button class="btn btn-sm btn-outline-secondary d-lg-none clusters-mobile-toggle" type="button"
id="clusters-mobile-toggle">
&#9776; Navigate fields and disciplines
</button>
</div>
75 changes: 75 additions & 0 deletions layouts/partials/disciplines/field_section.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{{/* One field block. Expects dict: field, fi, colors */}}
{{ $field := .field }}
{{ $fi := .fi }}
{{ $colors := .colors }}
{{ $fid := printf "field-%d" (int $field.number) }}
{{ $color := index $colors (mod $fi (len $colors)) }}
{{ $totalRes := 0 }}{{ range $field.disciplines }}{{ $totalRes = add $totalRes (len .resources) }}{{ end }}

{{/* Category badge colors */}}
{{ $catColors := dict "General" "#6c757d" "Open Data" "#17a2b8" "Open Methods" "#28a745" "Open Outputs" "#fd7e14" "Open Education" "#6f42c1" }}

<section id="{{ $fid }}" class="cluster-section" style="background-color: {{ $color }};">
<div class="cluster-header">
<h2 class="cluster-title">
<span class="cluster-number">{{ (int $field.number) }}</span>
{{ $field.name }}
</h2>
<span class="cluster-stats">{{ len $field.disciplines }} discipline{{ if gt (len $field.disciplines) 1 }}s{{ end }} &middot; {{ $totalRes }} resources</span>
</div>

{{ if $field.summary }}
<p class="cluster-description">{{ $field.summary }}</p>
{{ end }}

{{ if gt (len $field.disciplines) 0 }}
<ul class="nav nav-tabs cluster-tabs" id="tabs-{{ $fid }}" role="tablist">
{{ range $di, $disc := $field.disciplines }}
{{ $did := printf "f%d-d%d" (int $field.number) $di }}
<li class="nav-item">
<a class="nav-link{{ if eq $di 0 }} active{{ end }}" id="{{ $did }}-tab"
data-toggle="tab" href="#{{ $did }}" role="tab"
aria-controls="{{ $did }}" aria-selected="{{ if eq $di 0 }}true{{ else }}false{{ end }}">
<span class="tab-label">{{ $disc.name }}</span>
</a>
</li>
{{ end }}
</ul>

<div class="tab-content cluster-tab-content" id="content-{{ $fid }}">
{{ range $di, $disc := $field.disciplines }}
{{ $did := printf "f%d-d%d" (int $field.number) $di }}
<div class="tab-pane fade{{ if eq $di 0 }} show active{{ end }}" id="{{ $did }}"
role="tabpanel" aria-labelledby="{{ $did }}-tab">

<h3 class="sc-heading">{{ $disc.name }}</h3>

{{ if $disc.examples }}
<div class="sc-description">
<strong>Examples of open research practices:</strong> {{ $disc.examples }}
</div>
{{ end }}

{{ if $disc.resources }}
<ul class="publication-list disciplines-resource-list">
{{ range $disc.resources }}
<li class="publication-item disciplines-resource-item">
{{ $badgeColor := index $catColors .category | default "#6c757d" }}
<span class="badge disciplines-category-badge" style="background:{{ $badgeColor }};color:#fff;">{{ .category }}</span>
{{ if .link }}
<a href="{{ .link }}" target="_blank" rel="noopener">{{ .title }}</a>
{{ else }}
{{ .title }}
{{ end }}
</li>
{{ end }}
</ul>
{{ else }}
<p class="text-muted"><em>No resources listed for this discipline yet.</em></p>
{{ end }}

</div>
{{ end }}
</div>
{{ end }}
</section>
19 changes: 19 additions & 0 deletions layouts/partials/disciplines/intro.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{{/* intro.html - Intro text for Open Research Across Disciplines */}}
<div class="clusters-intro">
<div class="intro-hero">
<div class="intro-hero-text">
<p class="intro-paragraph">
Open research applies to all disciplines. If the concept of open research is new to you, it might be difficult to determine how you can apply open research practices to your research. This page provides resources and examples of open research practices relevant to your discipline. As a starting point, it may be useful to read the <a href="https://www.ukrn.org/primers/" target="_blank" rel="noopener">UK Reproducibility Network primers</a>.
</p>
<p class="intro-paragraph">
Use the sidebar to jump to your overarching field and specific discipline. Resources are categorised into five areas: <span class="badge" style="background:#6c757d;color:#fff;">General</span> <span class="badge" style="background:#17a2b8;color:#fff;">Open Data</span> <span class="badge" style="background:#28a745;color:#fff;">Open Methods</span> <span class="badge" style="background:#fd7e14;color:#fff;">Open Outputs</span> <span class="badge" style="background:#6f42c1;color:#fff;">Open Education</span>.
</p>
<p class="intro-paragraph" style="font-style:italic;">
"As open as possible, as closed as necessary."
</p>
<p class="intro-paragraph">
If you have resources or disciplines to add, or spot errors, please <a href="https://docs.google.com/forms/d/e/1FAIpQLSfs-BCYWGet5QNZAWQ8IQVZ05TAUUwvD4mkc31Ehrm5tK8q3Q/viewform" target="_blank" rel="noopener">fill out this form</a>.
</p>
</div>
</div>
</div>
20 changes: 20 additions & 0 deletions layouts/partials/disciplines/seo_jsonld.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{{/* Structured data: WebPage + ItemList for disciplines page */}}
{{ $data := site.Data.disciplines }}
{{ if not $data }}{{ return }}{{ end }}

{{ $summary := .Params.summary | default .Description | default "FORRT open research across disciplines for educators and researchers." }}

{{ $elements := slice }}
{{ range $i, $f := $data.fields }}
{{ $d := "" }}
{{ with $f.summary }}{{ $d = plainify . | truncate 240 "..." }}{{ end }}
{{ $item := dict "@type" "ListItem" "position" (add $i 1) "name" $f.name }}
{{ if $d }}{{ $item = merge $item (dict "description" $d) }}{{ end }}
{{ $elements = $elements | append $item }}
{{ end }}

{{ $webpage := dict "@type" "WebPage" "@id" (printf "%s#webpage" .Permalink) "url" .Permalink "name" .Title "description" $summary "inLanguage" (site.LanguageCode | default "en-US") }}
{{ $itemlist := dict "@type" "ItemList" "@id" (printf "%s#itemlist" .Permalink) "name" "Open Research Across Disciplines" "description" "Fields and disciplines with open research resources and examples." "numberOfItems" (len $data.fields) "itemListElement" $elements }}
{{ $graph := slice $webpage $itemlist }}
{{ $root := dict "@context" "https://schema.org" "@graph" $graph }}
<script type="application/ld+json">{{ $root | jsonify | safeHTML }}</script>
35 changes: 35 additions & 0 deletions layouts/partials/disciplines/sidebar_nav.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{{/* Sidebar navigation for disciplines page */}}
{{ $data := .data }}
{{ $arrowColors := .arrowColors }}
{{ $link_mode := .link_mode | default "anchor" }}

<div class="col-lg-4 col-xl-3 clusters-sidebar" id="clusters-sidebar">
<div class="clusters-sidebar-inner">
<div class="sidebar-header">Fields &amp; Disciplines</div>
<nav id="cluster-nav">
{{ range $fi, $field := $data.fields }}
{{ $fid := printf "field-%d" (int $field.number) }}
{{ $fieldHref := printf "#%s" $fid }}
<div class="cluster-nav-group" data-cluster="{{ $fid }}">
<a href="{{ $fieldHref }}" class="cluster-nav-heading">
{{ $arrowColor := index $arrowColors (mod $fi (len $arrowColors)) }}
<span class="cluster-nav-toggle" style="color:{{ $arrowColor }};">&#9656;</span>
{{ $field.name }}
</a>
<ul class="cluster-nav-subs" style="display:none;">
{{ range $di, $disc := $field.disciplines }}
{{ $did := printf "f%d-d%d" (int $field.number) $di }}
{{ $subHref := printf "#%s" $fid }}
<li class="nav-item">
<a href="{{ $subHref }}" class="nav-link sc-nav-link" data-cluster="{{ $fid }}" data-tab="{{ $did }}-tab">
{{ $disc.name }}
<span class="badge badge-pill">{{ len $disc.resources }}</span>
</a>
</li>
{{ end }}
</ul>
</div>
{{ end }}
</nav>
</div>
</div>
Loading
Loading