1
0
forked from SPC/spc-site
Go to file
2022-07-19 15:06:48 +00:00
data Spliting site and the snark project complete 2022-07-03 16:28:53 +03:00
gradle/wrapper initial commit 2022-04-23 10:48:53 +03:00
src Quick-fix for sharing common data 2022-07-03 17:13:39 +03:00
.gitignore Fix deploy 2022-06-19 19:36:48 +03:00
.space.kts add deployment configuration 2022-07-07 17:15:51 +00:00
build.gradle.kts Add publishing 2022-07-03 16:39:38 +03:00
gradle.properties Add publishing 2022-07-03 16:39:38 +03:00
gradlew initial commit 2022-04-23 10:48:53 +03:00
gradlew.bat initial commit 2022-04-23 10:48:53 +03:00
README.md Update readme 2022-06-26 13:14:57 +03:00
settings.gradle.kts Add publishing 2022-07-03 16:39:38 +03:00

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 DataSetstructure. Each element in a DataSet 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 DF Meta.
  • The DataSet is transformed using parsers defined in SnarkPlugin. Parser transforms the bytearray-like file content into some typed object like Markdown or Html. Json/yaml files are transformed into Meta. 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 a PageContext, 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 use PageContext to isolate different parts of site from each other.

References

Currently, we use two different designs from https://html5up.net/