forked from SPC/spc-site
buildSrc | ||
data | ||
gradle/wrapper | ||
src | ||
.gitignore | ||
.space.kts | ||
build.gradle.kts | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
README.md | ||
settings.gradle.kts |
Scientific programming center site
The site is here
The mechanics
The site is a unique mix between static and dynamic content rendering. It uses DataForge and a prototype for SNARK project to load data lazily and render it with very low resource consumption.
The idea is the following:
- The file tree from data directory is lazily loaded into a DataForge
DataSet
structure. Each element in aDataSet
is a lazy data with eagerly loaded metadata. In case of files, metadata includes some file parameters like extensions and creation time a front matter YAML translated into DFMeta
. - The
DataSet
is transformed using parsers defined inSnarkPlugin
. Parser transforms the bytearray-like file content into some typed object like Markdown or Html. Json/yaml files are transformed intoMeta
. All objects are lazy, they are not parsed and computed until they are read. - There could be additional transformation for tree. For example severl blocks could be combined into one. Data could be loaded inside the page, etc.
- The resulting
DataSet
is loaded into aPageContext
, which is used by a site template to render resulting pages. - In the future, there will be utilities to automatically transform into a
DataSet
, loading templates as plugins. - Once computed, the data is cached in-memory and is not recomputed until the underlying data is changed.
- A
PageContex
is loaded as a context receiver for all page rendering activities. It allows to seamlessly load data into the page, also it could be substituted on language change or other configuration changes. Also one could usePageContext
to isolate different parts of site from each other.
References
Currently, we use two different designs from https://html5up.net/