Skip to content

Commit a48e42e

Browse files
authored
Merge pull request #19 from CSBiology/development
Add slider banner and new team members ✨
2 parents 765ff2b + 2d8a738 commit a48e42e

25 files changed

+10977
-483
lines changed

README.md

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# csbiology.github.io
2-
The csb website.
2+
3+
The official [CSB-Website](https://csbiology.github.io).
4+
35

46
# Local Development
57

@@ -38,4 +40,23 @@ alumni: 2020-Master Student
3840
phone: +49 000 111 4242 # this is only an example
3941
4042
---
41-
```
43+
```
44+
45+
### Research
46+
47+
Create a `.md` file in `src/content/research`. All fields without an `#!` are optional.
48+
49+
Images must be places in `src/content/images/research`.
50+
51+
Without `index` slides are sorted to the end.
52+
53+
```yaml
54+
---
55+
index: <int>
56+
img: <image_name_in_folder>
57+
img_url: <url_to_image>
58+
---
59+
# My cool research
60+
61+
Any content in **markdown**!
62+
```

src/config.fsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ let staticPredicate (projectRoot: string, page: string) =
1818
let fileShouldBeExcluded =
1919
ext = ".fsx" ||
2020
ext = ".md" ||
21+
ext = ".p" ||
22+
ext = ".bib" ||
2123
page.Contains "_public" ||
2224
page.Contains "_bin" ||
2325
page.Contains "_lib" ||
Loading
Loading

src/content/images/research/rdm.png

57.1 KB
Loading

src/content/images/team/paul.jpg

257 KB
Loading
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
img: biologicalDataScience.png
3+
index: 2
4+
---
5+
6+
# Biological data science
7+
8+
Modern technologies now allow researchers to simultaneously study biological organisms and processes across various molecular layers and in diverse biological contexts. To leverage this wealth of data, we are developing advanced methods for both supervised and unsupervised analysis of multi-modal omics data using cutting-edge machine learning and statistical modeling techniques. As part of fslabs.org, we contribute to the open-source data analysis library environment, ensuring that our innovations are accessible to the broader research community. Our methods enable comprehensive, data-driven integration and analysis of data derived from multiple omics technologies and varied biological scenarios, thereby enhancing our understanding of complex biological systems.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
img: predictionOmicsData.png
3+
index: 3
4+
---
5+
6+
# Prediction of acclimation modulators and integrators based on ‘omics data
7+
8+
Acclimation responses involve complex interactions among genes, proteins, and metabolites, resulting in both general and specific elements. Previously, we focused on extracting response-specific structural models from complex 'omics data using functional constraint aggregation and network topology inference.
9+
---
10+
Predicting modulators and integrators based on regulatory network topology and differential expression levels remains challenging, especially with limited acclimation data. However, incorporating additional regulatory characteristics of proteins—such as thermostability, aggregation propensity, intrinsic disorder, and post-translational modifications—can improve this identification.
11+
12+
This project proposes a novel approach using sequential meta-learning to integrate these regulatory characteristics, overcoming data sparsity challenges. In collaboration with CRC experimental groups, we will test our model’s predictions by introducing thermostable protein homologs into plant and algal cells. These experiments are expected to reduce acclimation capabilities and cause growth retardation, validating our approach in experimental evolution assays.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
img: rdm.png
3+
index: 1
4+
---
5+
6+
# Research data management (RDM)
7+
8+
We are committed to the success of FAIR (Findable, Accessible, Interoperable, and Reusable) and open research data. Research data possess immense value, which, when combined with tomorrow's technologies such as machine and deep learning, can unlock answers to questions we cannot even conceive today. Therefore, the flexible contextualization of research data with machine-actionable metadata is essential to advance modern science.
9+
---
10+
We draw inspiration from the open-source software community's success, developing approaches that enable the biological community to collaboratively build a community-wide FAIR research data resource. Our research group participates in the National Research Data Infrastructure (NFDI) initiative with the DataPLANT project, which empowers plant researchers to engage in a thriving RDM ecosystem without barriers.

src/content/team/benedikt_venn.md renamed to src/content/team/alumni/benedikt_venn.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: Benedikt Venn
33
img: venn.png
4-
role: PhD Student
4+
role: Alumni PhD Student
55
orcid: 0000-0003-4203-1596
66
twitter: BenediktVenn
77
github: bvenn

src/content/team/selina_ziegler.md renamed to src/content/team/alumni/selina_ziegler.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: Selina Ziegler
33
img: ziegler.png
4-
role: Research Associate
4+
role: alumni Research Associate
55
github: zieglerSe
66
orcid: 0009-0002-4713-0040
77
alumni: 2023-Master Student

src/content/team/annika_paul.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
name: Annika Paul
3+
img: paul.jpg
4+
role: Bachelor
5+
github: Rookabu
6+
orcid: 0009-0008-7417-0965
7+
8+
---

src/content/team/tobias_scheid.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
name: Tobias Scheid
3+
role: Bachelor
4+
github: ScheidTo
5+
6+
---

src/generators/layout.fsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#r "../_lib/Fornax.Core.dll"
22

3-
43
open Html
54

65
let rptu_navbar() =
@@ -64,6 +63,10 @@ let scaffold (ctx : SiteContents) bodyCnt =
6463
meta [Name "description"; Content "CSB (Computational Systems Biology) at RPTU Kaiserslautern, Germany"]
6564
// link [Rel "stylesheet"; Type "text/css"; Href "https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css"]
6665
link [Rel "stylesheet"; Href "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"; Integrity "sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="; CrossOrigin "anonymous"; HtmlProperties.Custom("referrerpolicy", "no-referrer")]
66+
// https://splidejs.com/guides/getting-started/ for research carousel
67+
script [Src "https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"] []
68+
link [Rel "stylesheet"; Href "https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide.min.css"]
69+
link [Rel "stylesheet"; Href "https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css"]
6770
script [Defer true; Src "https://kit.fontawesome.com/0d3e0ea7a6.js"; CrossOrigin "anonymous"] []
6871
link [Rel "stylesheet"; Type "text/css"; Href "style/css/main.css"]
6972
link [Rel "preload"; HtmlProperties.Custom("as","image"); Href "./content/images/logo_small_dark.png"]
@@ -73,7 +76,6 @@ let scaffold (ctx : SiteContents) bodyCnt =
7376
rptu_navbar()
7477
csb_navbar()
7578
main [Class "csb-content"] [
76-
// bodyCnt
7779
yield! bodyCnt
7880
]
7981

@@ -106,6 +108,7 @@ let scaffold (ctx : SiteContents) bodyCnt =
106108
})(document);
107109
"""
108110
]
111+
109112
]
110113
]
111114

src/generators/sections/research.fsx

Lines changed: 107 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,114 @@
11
#r "../../_lib/Fornax.Core.dll"
2+
#if !FORNAX
3+
#load "../../loaders/researchloader.fsx"
4+
#endif
25

36
open Html
47

8+
let private SliderHeight = "fit-content"
9+
let private createModalId(slide: Researchloader.FrameSlide) =
10+
sprintf "More-Content-Modal-%i" slide.Index
11+
12+
13+
let private createResearchModal(slide: Researchloader.FrameSlide) =
14+
let id = createModalId slide
15+
// Bulma Modal
16+
div [Class "modal"; HtmlProperties.Id id] [
17+
div [Class "modal-background"] []
18+
div [Class "modal-content"] [
19+
div [Class "box"] [
20+
div [Class "content"] [
21+
!!slide.MainContent
22+
match slide.MoreContent with
23+
| Some c ->
24+
!!c
25+
| None -> ()
26+
]
27+
]
28+
]
29+
button [Class "modal-close is-large"; HtmlProperties.Custom("aria-label", "close")] []
30+
]
31+
32+
33+
let private createMoreContentModalButton (slide: Researchloader.FrameSlide) =
34+
let id = createModalId slide
35+
div [] [
36+
// Trigger Button
37+
button [Class "button is-primary is-small js-modal-trigger"; HtmlProperties.Custom("data-target", id)] [
38+
!!"More"
39+
]
40+
]
41+
42+
let private createFrameSlide (slide: Researchloader.FrameSlide) =
43+
let innerFlexBoxContainer = HtmlProperties.Style [Display "flex"; CSSProperties.Height "100%"; AlignItems "center"]
44+
li [Class "splide__slide"] [
45+
// container
46+
div [Class "is-flex fixed-grid research__bg has-1-cols-mobile"; HtmlProperties.Style [CSSProperties.Height "100%"; AlignItems "center"; JustifyContent "center"]] [
47+
div [Class "grid research__grid"; HtmlProperties.Style [CSSProperties.Custom("justify-items", "end"); CSSProperties.Height "fit-content"; CSSProperties.MaxHeight SliderHeight]] [
48+
div [Class "cell research__cell"; HtmlProperties.Style [CSSProperties.Width "100%"; CSSProperties.MaxWidth "unset"]] [
49+
div [innerFlexBoxContainer] [
50+
div [] [
51+
img [
52+
match slide with
53+
| { Image = Some i} -> Src i
54+
| { ImageUrl = Some i} -> Src i
55+
| _ -> ()
56+
HtmlProperties.Style [MaxWidth "100%"]
57+
]
58+
]
59+
]
60+
]
61+
div [Class "cell research__cell"] [
62+
div [innerFlexBoxContainer] [
63+
div [Class "content research__content"] [
64+
!!slide.MainContent
65+
match slide.MoreContent with
66+
| Some _ ->
67+
createMoreContentModalButton(slide)
68+
| None -> ()
69+
]
70+
]
71+
]
72+
]
73+
]
74+
]
75+
576
let generate (ctx : SiteContents) (_: string) =
6-
section [Class "section research"; Id "research"] [
7-
div [Class "container container--full"] [
8-
div [Class "research__title"] [
9-
div [] [
10-
h2 [] [ !! "Welcome to CSB" ];
11-
p [] [ !! "What our research is aiming for"];
77+
let researchList: Researchloader.FrameSlide list =
78+
ctx.TryGetValues<Researchloader.FrameSlide> ()
79+
|> Option.defaultValue Seq.empty
80+
|> Seq.toList
81+
div [HtmlProperties.Style [CSSProperties.Height SliderHeight]] [
82+
section [Class "splide"; HtmlProperties.Custom("aria-label","current research information")] [
83+
// div [Class "splide__slider"] [
84+
// ]
85+
div [Class "splide__track"] [
86+
ul [Class "splide__list"] [
87+
for slide in researchList do
88+
createFrameSlide slide
89+
]
90+
]
91+
div [Class "splide__progress"] [
92+
div [Class "splide__progress__bar"] []
93+
]
94+
// https://github.com/Splidejs/splide/issues/1310
95+
button [Class "splide__toggle"; Type "button"] [
96+
svg [Class "splide__toggle__play"; HtmlProperties.Custom("viewBox","0 0 24 24"); HtmlProperties.Custom("xmlns", "http://www.w3.org/2000/svg")] [
97+
path [HtmlProperties.Custom("d", "m22 12-20 11v-22l10 5.5z")] []
98+
]
99+
svg [Class "splide__toggle__pause"; HtmlProperties.Custom("viewBox","0 0 24 24"); HtmlProperties.Custom("xmlns", "http://www.w3.org/2000/svg")] [
100+
path [HtmlProperties.Custom("d", "m2 1v22h7v-22zm13 0v22h7v-22z")] []
12101
]
13-
];
14-
15-
div [Class "research__text"] [
16-
p [] [!! "The main focus of our group is the application and development of computational methods to process and integrate quantitative biological data from modern high-throughput measurements in order to gain novel insights into biological responses to environment changes. The main challenge is the rigorous integration of different system level analyses and present knowledge into biological interpretable models. Therefore, we want to drive theory and technology forward with a combination of biological science, applied informatics, statistical and machine learning approaches."]
17102
]
18-
]
19-
]
103+
]
104+
script [] [
105+
!!"""document.addEventListener( 'DOMContentLoaded', function() {
106+
var splide = new Splide( '.splide', { type: 'loop', autoplay: true } );
107+
splide.mount();
108+
} );"""
109+
]
110+
section [] [
111+
for researchSlide in researchList do
112+
createResearchModal researchSlide
113+
]
114+
]

src/loaders/bibloader.fsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ let loadFile (featured:bool) (bibFile: string) =
8080

8181
let loader (projectRoot: string) (siteContent: SiteContents) =
8282
let postsPath = Path.Combine(projectRoot, contentDir)
83-
printfn "%s" postsPath
8483
let options = EnumerationOptions(RecurseSubdirectories = false)
8584
let files = Directory.GetFiles(postsPath, "*", options)
8685
files

src/loaders/researchloader.fsx

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#r "../_lib/Fornax.Core.dll"
2+
#r "../_lib/Markdig.dll"
3+
4+
open System.IO
5+
open Markdig
6+
7+
let key_image = "img"
8+
let key_image_url: string = "img_url"
9+
10+
let contentDir = "content/research/"
11+
12+
let imgDir = "content/images/research/"
13+
14+
15+
module ContentReader =
16+
17+
let pipeline =
18+
let n = new MarkdownPipelineBuilder()
19+
n
20+
.UseAdvancedExtensions()
21+
.Build();
22+
23+
let isSeparator (input : string) =
24+
input.StartsWith "---"
25+
26+
///`fileContent` - content of page to parse. Usually whole content of `.md` file
27+
/// Returns map<string,string> with frontmatter and everything else as "content".
28+
let getData (fileContent : string []) =
29+
let fileContent = fileContent |> Array.skip 1 //First line must be ---
30+
let indexOfSeperator = fileContent |> Array.findIndex isSeparator
31+
let splitKey (line: string) =
32+
let seperatorIndex = line.IndexOf(':')
33+
if seperatorIndex > 0 then
34+
let key = line.[.. seperatorIndex - 1].Trim().ToLower()
35+
let value = line.[seperatorIndex + 1 ..].Trim()
36+
Some(key, value)
37+
else
38+
None
39+
let frontmatter, content =
40+
fileContent
41+
|> Array.splitAt indexOfSeperator
42+
|> fun (x, y) -> x,y.[1..] //skip closing ---
43+
let moreContentIndex = content |> Array.tryFindIndex isSeparator
44+
let content, moreContent =
45+
match moreContentIndex with
46+
| Some i ->
47+
let content, moreContent = content |> Array.splitAt i
48+
content, Some moreContent.[1..] //skip closing ---
49+
| None ->
50+
content, None
51+
frontmatter
52+
|> Seq.choose splitKey
53+
|> Map.ofSeq
54+
|> fun x ->
55+
match moreContent with
56+
| None -> x
57+
| Some moreContent ->
58+
let moreContent = moreContent |> String.concat "\n"
59+
x.Add("more", moreContent)
60+
|> fun x ->
61+
x.Add(
62+
"content",
63+
content
64+
|> String.concat "\n"
65+
)
66+
67+
68+
type FrameSlide = {
69+
/// This will always be on the slider
70+
MainContent: string
71+
/// This is hidden behind "More" button. Only exists if content after empty line exists.
72+
MoreContent: string option
73+
Image: string option
74+
ImageUrl: string option
75+
Index: int
76+
} with
77+
static member create(content: string, index:int, ?moreContent, ?image, ?imageurl) =
78+
{ MainContent = content; Index = index; MoreContent = moreContent; Image = image; ImageUrl = imageurl }
79+
80+
let getImageUrl (imageName: string) =
81+
imgDir + imageName
82+
83+
open Markdig
84+
85+
let loadFile (filePath: string) =
86+
let lines = File.ReadAllLines(filePath)
87+
let metadata = ContentReader.getData lines
88+
let content = metadata.["content"] |> fun c -> Markdown.ToHtml(c, ContentReader.pipeline)
89+
let moreContent = metadata |> Map.tryFind "more" |> Option.map (fun mc -> Markdown.ToHtml(mc, ContentReader.pipeline))
90+
let image = metadata |> Map.tryFind key_image |> Option.map getImageUrl
91+
let imageUrl = metadata |> Map.tryFind key_image_url
92+
let index = metadata |> Map.tryFind "index" |> Option.map int |> Option.defaultValue System.Int32.MaxValue
93+
FrameSlide.create(content, index, ?moreContent=moreContent, ?image=image, ?imageurl=imageUrl)
94+
95+
let loader (projectRoot: string) (siteContent: SiteContents) =
96+
let postsPath = Path.Combine(projectRoot, contentDir)
97+
let options = EnumerationOptions(RecurseSubdirectories = true)
98+
let files = Directory.GetFiles(postsPath, "*", options)
99+
files
100+
|> Array.filter (fun n -> n.EndsWith ".md")
101+
|> Array.map (loadFile)
102+
|> Array.sortBy (fun x -> x.Index)
103+
|> Array.mapi (fun i x -> { x with Index = i }) // make index unique
104+
|> Array.iter siteContent.Add
105+
// siteContent.Add({disableLiveRefresh = false})
106+
siteContent

src/style/css/main.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/style/css/main.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)