@rettangoli/sites 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -0
- package/package.json +54 -0
- package/src/cli/build.js +166 -0
- package/src/cli/components/core/articlelist.html +19 -0
- package/src/cli/components/core/cta1.html +9 -0
- package/src/cli/components/core/features1.html +24 -0
- package/src/cli/components/core/hero1.html +4 -0
- package/src/cli/components/core/hero2.html +31 -0
- package/src/cli/components/core/sectionlist1.html +15 -0
- package/src/cli/components/core/spacer.html +1 -0
- package/src/cli/components/core/table1.html +2 -0
- package/src/cli/index.js +5 -0
- package/src/cli/templates/core/admin.html +21 -0
- package/src/cli/templates/core/agreementList.html +102 -0
- package/src/cli/templates/core/article.html +35 -0
- package/src/cli/templates/core/base.html +28 -0
- package/src/cli/templates/core/documentation.html +28 -0
- package/src/cli/templates/core/footer.html +34 -0
- package/src/cli/templates/core/htmlHeader.html +41 -0
- package/src/cli/templates/core/htmlHeaderTable.html +113 -0
- package/src/cli/templates/core/navbar.html +11 -0
- package/src/common.js +803 -0
- package/src/index.js +0 -0
- package/src/markdownItAsync.js +101 -0
package/README.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Sitic
|
|
2
|
+
|
|
3
|
+
Generate static sites using Markdown and YAML. Straightforward, zero-complexity. Complete toolkit for landing pages, blogs, documentation, admin dashboards, and more.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Content-First Approach**: Write content in Markdown, structure with YAML
|
|
8
|
+
- **No HTML/JS Required**: Create complex sites without writing a single line of code
|
|
9
|
+
- **Versatile**: Build landing pages, documentation, blogs, admin dashboards, slides and more
|
|
10
|
+
- **Component-Based**: Reusable components for consistent design
|
|
11
|
+
- **Template System**: Liquid templates for flexible layouts
|
|
12
|
+
- **Customizable**: Create custom components and templates
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
1. Create a project structure:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
my-site/
|
|
20
|
+
├── sitic/
|
|
21
|
+
│ ├── data.yaml # Global site data
|
|
22
|
+
│ ├── templates # Tempaltes
|
|
23
|
+
│ ├── components # Components
|
|
24
|
+
│ └── records/ # Data records (optional)
|
|
25
|
+
└── pages/ # Your content pages
|
|
26
|
+
├── index.md
|
|
27
|
+
└── about.md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
2. Create a simple page (index.md):
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
---
|
|
34
|
+
layout: core/base
|
|
35
|
+
title: My Site
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
```yaml components
|
|
39
|
+
- component: core/hero1
|
|
40
|
+
data:
|
|
41
|
+
hero:
|
|
42
|
+
subtitle: Welcome
|
|
43
|
+
message: This is my first Sitic site
|
|
44
|
+
- component: core/spacer
|
|
45
|
+
data:
|
|
46
|
+
height: 50
|
|
47
|
+
- component: core/features1
|
|
48
|
+
data:
|
|
49
|
+
features:
|
|
50
|
+
- title: Easy to Use
|
|
51
|
+
description: Just write Markdown and YAML
|
|
52
|
+
- title: Fast
|
|
53
|
+
description: Generate static sites quickly
|
|
54
|
+
- title: Flexible
|
|
55
|
+
description: Create any type of site
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
3. Build your site:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
sitic build
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Your site will be generated in the `_site` directory.
|
|
65
|
+
|
|
66
|
+
## CLI Options
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Basic usage
|
|
70
|
+
sitic build
|
|
71
|
+
|
|
72
|
+
# Specify custom directories
|
|
73
|
+
sitic build --resources ./custom-sitic-folder
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Component System
|
|
77
|
+
|
|
78
|
+
Siti uses a component-based approach that allows you to build complex layouts using simple YAML:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
- component: core/hero1
|
|
82
|
+
data:
|
|
83
|
+
hero:
|
|
84
|
+
subtitle: Section Title
|
|
85
|
+
message: Your message here
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Templates
|
|
89
|
+
|
|
90
|
+
The template system uses Liquid for flexible layouts. Create custom templates in the `templates` directory.
|
|
91
|
+
|
|
92
|
+
## Examples
|
|
93
|
+
|
|
94
|
+
Check out the `examples` directory for complete site examples, including:
|
|
95
|
+
|
|
96
|
+
- Landing pages
|
|
97
|
+
- Documentation sites
|
|
98
|
+
- Blogs
|
|
99
|
+
- Admin dashboards
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rettangoli/sites",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Generate static sites using Markdown and YAML. Straightforward, zero-complexity. Complete toolkit for landing pages, blogs, documentation, admin dashboards, and more.git remote add origin git@github.com:yuusoft-org/sitic.git",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Luciano Hanyon Wu",
|
|
7
|
+
"email": "han4wluc@yuusoft.com"
|
|
8
|
+
},
|
|
9
|
+
"main": "./src/index.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./src/index.js",
|
|
12
|
+
"./cli": "./src/cli/index.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"src",
|
|
16
|
+
"components",
|
|
17
|
+
"templates"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"commander": "^13.1.0",
|
|
21
|
+
"html-minifier-terser": "^7.2.0",
|
|
22
|
+
"js-yaml": "^4.1.0",
|
|
23
|
+
"liquidjs": "^10.21.0",
|
|
24
|
+
"luxon": "^3.6.1",
|
|
25
|
+
"markdown-it": "^14.1.0",
|
|
26
|
+
"markdown-it-async": "^2.2.0",
|
|
27
|
+
"shiki": "^3.3.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/bun": "^1.2.8"
|
|
31
|
+
},
|
|
32
|
+
"type": "module",
|
|
33
|
+
"bin": {
|
|
34
|
+
"sitic": "src/cli.js"
|
|
35
|
+
},
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"keywords": [
|
|
38
|
+
"static",
|
|
39
|
+
"site",
|
|
40
|
+
"generator",
|
|
41
|
+
"markdown",
|
|
42
|
+
"yaml",
|
|
43
|
+
"landing",
|
|
44
|
+
"page",
|
|
45
|
+
"blog",
|
|
46
|
+
"documentation",
|
|
47
|
+
"admin",
|
|
48
|
+
"dashboard"
|
|
49
|
+
],
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/yuusoft-org/sitic/issues"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://github.com/yuusoft-org/sitic#readme"
|
|
54
|
+
}
|
package/src/cli/build.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { join, dirname } from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import { DateTime } from "luxon";
|
|
4
|
+
|
|
5
|
+
// Create the equivalent of __dirname for ES modules
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
safeYamlLoad,
|
|
11
|
+
safeReadFile,
|
|
12
|
+
deepMerge,
|
|
13
|
+
createTemplateRenderer,
|
|
14
|
+
createFolderIfNotExists,
|
|
15
|
+
configureMarkdown,
|
|
16
|
+
loadCollections,
|
|
17
|
+
createFileFormatHandlers,
|
|
18
|
+
loadItems,
|
|
19
|
+
copyDirRecursive,
|
|
20
|
+
} from "../common.js";
|
|
21
|
+
import { rm } from "fs/promises";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Copy pages to site with processing
|
|
25
|
+
* @param {Object} options - Options for copying pages
|
|
26
|
+
* @param {string} options.resourcesPath - Path to resources directory
|
|
27
|
+
* @param {string} options.pagesPath - Path to pages directory
|
|
28
|
+
* @param {string} options.outputPath - Path to output directory
|
|
29
|
+
*/
|
|
30
|
+
export const copyPagesToSite = async (options) => {
|
|
31
|
+
const {
|
|
32
|
+
resourcesPath = "./sitic",
|
|
33
|
+
pagesPath = "./pages",
|
|
34
|
+
outputPath = "./_site",
|
|
35
|
+
} = options;
|
|
36
|
+
|
|
37
|
+
const dataPath = join(resourcesPath, "data.yaml");
|
|
38
|
+
const templatesPath = join(resourcesPath, "templates");
|
|
39
|
+
const componentsPath = join(resourcesPath, "components");
|
|
40
|
+
const recordsPath = join(resourcesPath, "records");
|
|
41
|
+
|
|
42
|
+
// Load hello.yaml template data
|
|
43
|
+
const inputYaml = await safeReadFile(dataPath);
|
|
44
|
+
|
|
45
|
+
const templates = await loadItems({
|
|
46
|
+
path: join(__dirname, "./templates"),
|
|
47
|
+
name: "templates",
|
|
48
|
+
isYaml: false,
|
|
49
|
+
keepExtension: true,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
if (templatesPath) {
|
|
53
|
+
const customTemplates = await loadItems({
|
|
54
|
+
path: templatesPath,
|
|
55
|
+
name: "templates",
|
|
56
|
+
isYaml: false,
|
|
57
|
+
keepExtension: true,
|
|
58
|
+
});
|
|
59
|
+
Object.assign(templates, customTemplates);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Load data
|
|
63
|
+
const records = await loadItems({
|
|
64
|
+
path: recordsPath,
|
|
65
|
+
name: "records",
|
|
66
|
+
isYaml: true,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const components = await loadItems({
|
|
70
|
+
path: join(__dirname, "./components"),
|
|
71
|
+
name: "components",
|
|
72
|
+
isYaml: false,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
if (componentsPath) {
|
|
76
|
+
const customComponents = await loadItems({
|
|
77
|
+
path: componentsPath,
|
|
78
|
+
name: "components",
|
|
79
|
+
isYaml: false,
|
|
80
|
+
});
|
|
81
|
+
Object.assign(components, customComponents);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const collections = await loadCollections(pagesPath);
|
|
85
|
+
|
|
86
|
+
const liquidParse = createTemplateRenderer({
|
|
87
|
+
templates,
|
|
88
|
+
filters: {
|
|
89
|
+
json: (obj) => JSON.stringify(obj),
|
|
90
|
+
"json-escaped": (obj) => {
|
|
91
|
+
if (!obj) {
|
|
92
|
+
return "";
|
|
93
|
+
}
|
|
94
|
+
return encodeURIComponent(JSON.stringify(obj));
|
|
95
|
+
},
|
|
96
|
+
postDate: (dateObj) => {
|
|
97
|
+
if (!dateObj || typeof dateObj !== 'string') {
|
|
98
|
+
return ''; // Return empty string or some default value if dateObj is undefined or not a string
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return DateTime.fromFormat(dateObj, "yyyy-MM-dd").toLocaleString(
|
|
102
|
+
DateTime.DATE_MED
|
|
103
|
+
);
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.error(`Error formatting date "${dateObj}":`, error.message);
|
|
106
|
+
return dateObj; // Return the original date string if parsing fails
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
let data;
|
|
113
|
+
try {
|
|
114
|
+
data = safeYamlLoad(liquidParse(inputYaml, { collections }));
|
|
115
|
+
} catch (error) {
|
|
116
|
+
console.error("Error creating template renderer:", error);
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Create global data object for templates
|
|
121
|
+
const globalData = {
|
|
122
|
+
data,
|
|
123
|
+
collections,
|
|
124
|
+
records,
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const yamlComponentRenderer = (content) => {
|
|
128
|
+
const renderedContent = liquidParse(content, globalData);
|
|
129
|
+
const yamlContent = safeYamlLoad(renderedContent);
|
|
130
|
+
|
|
131
|
+
return yamlContent
|
|
132
|
+
.map(({ component, data }) => {
|
|
133
|
+
const foundComponent = components[component];
|
|
134
|
+
if (!foundComponent) {
|
|
135
|
+
throw new Error(`Component not found for ${component}`);
|
|
136
|
+
}
|
|
137
|
+
return liquidParse(foundComponent, deepMerge(globalData, data));
|
|
138
|
+
})
|
|
139
|
+
.join("\n");
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const md = configureMarkdown({
|
|
143
|
+
yamlComponentRenderer,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
const fileFormatHandlers = createFileFormatHandlers({
|
|
147
|
+
basePath: pagesPath,
|
|
148
|
+
templates,
|
|
149
|
+
liquidParse,
|
|
150
|
+
data: globalData.data,
|
|
151
|
+
collections,
|
|
152
|
+
md,
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
await rm(outputPath, { recursive: true, force: true });
|
|
157
|
+
await createFolderIfNotExists(outputPath);
|
|
158
|
+
await copyDirRecursive(pagesPath, outputPath, fileFormatHandlers);
|
|
159
|
+
console.log(`Pages copied from ${pagesPath} to ${outputPath} successfully`);
|
|
160
|
+
} catch (error) {
|
|
161
|
+
console.error(
|
|
162
|
+
`Error copying pages from ${pagesPath} to ${outputPath}:`,
|
|
163
|
+
error
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<rtgl-text><a href="{{ back.href }}" aria-label="{{ back.text }}">{{ back.text }}</a></rtgl-text>
|
|
2
|
+
<rtgl-text s="h2" mt="l">{{ title }}</rtgl-text>
|
|
3
|
+
<rtgl-view mt="l">
|
|
4
|
+
{{ subtitle }}
|
|
5
|
+
</rtgl-view>
|
|
6
|
+
<rtgl-view g="l" mt="xl">
|
|
7
|
+
{%- for item in items -%}
|
|
8
|
+
|
|
9
|
+
<rtgl-view w="f" d="h" av="c">
|
|
10
|
+
{% if item.date %}
|
|
11
|
+
<rtgl-view d="h" w="120">
|
|
12
|
+
<rtgl-text>{{ item.date | postDate }}</rtgl-text>
|
|
13
|
+
</rtgl-view>
|
|
14
|
+
{% endif %}
|
|
15
|
+
<rtgl-text s="lg"><a href="{{ item.url }}">{{ item.title }}</a></rtgl-text>
|
|
16
|
+
</rtgl-view>
|
|
17
|
+
|
|
18
|
+
{%- endfor -%}
|
|
19
|
+
</rtgl-view>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<rtgl-view w="f" ph="xl">
|
|
2
|
+
<rtgl-view w="f" ah="c" bw="s" br="l" p="xl">
|
|
3
|
+
<rtgl-text s="h3" ta="c" mt="l"> {{ cta.title }} </rtgl-text>
|
|
4
|
+
<rtgl-text mt="l" ta="c" c="mu-fg"> {{ cta.description }} </rtgl-text>
|
|
5
|
+
<rtgl-button mt="xl" href="{{ cta.cta.href }}" target="_blank" rel="noreferrer"> {{
|
|
6
|
+
cta.cta.text
|
|
7
|
+
}} </rtgl-button>
|
|
8
|
+
</rtgl-view>
|
|
9
|
+
</rtgl-view>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<rtgl-view d="h" h="64"></rtgl-view>
|
|
2
|
+
<rtgl-view pv="xl" mv="xl" mh="l" g="xl" ah="c">
|
|
3
|
+
<rtgl-text s="h2" at="c"> {{ feature.title }} </rtgl-text>
|
|
4
|
+
<rtgl-view d="h" w="f" g="xl" av="c" mt="l">
|
|
5
|
+
<rtgl-view flex="2" mb="m" g="m" style="min-width: 320px;">
|
|
6
|
+
<rtgl-text s="bl" mt="l"> {{ feature.description }} </rtgl-text>
|
|
7
|
+
<ul>
|
|
8
|
+
<rtgl-view >
|
|
9
|
+
{%- for item in feature.items -%}
|
|
10
|
+
<li>
|
|
11
|
+
<rtgl-view>
|
|
12
|
+
<rtgl-text mt="l"><b> {{ item.label }}:</b> {{ item.description }} </rtgl-text>
|
|
13
|
+
</rtgl-view>
|
|
14
|
+
</li>
|
|
15
|
+
{%- endfor -%}
|
|
16
|
+
</rtgl-view>
|
|
17
|
+
</ul>
|
|
18
|
+
</rtgl-view>
|
|
19
|
+
<rtgl-view flex="3" style="min-width: 320px; overflow: hidden;" bw="xs" br="s">
|
|
20
|
+
<rtgl-image src="{{ feature.picture }}" w="f" alt="{{ feature.imageAlt | default: feature.title }}"></rtgl-image>
|
|
21
|
+
</rtgl-view>
|
|
22
|
+
</rtgl-view>
|
|
23
|
+
</rtgl-view>
|
|
24
|
+
<rtgl-view d="h" h="64"></rtgl-view>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{%- if hero.video -%}
|
|
2
|
+
<rtgl-view h="8vh"></rtgl-view>
|
|
3
|
+
{%- else -%}
|
|
4
|
+
<rtgl-view h="20vh"></rtgl-view>
|
|
5
|
+
{%- endif -%}
|
|
6
|
+
<rtgl-view w="f" pv="xl" av="c" ah="c" ph="xl">
|
|
7
|
+
<rtgl-text s="h1" ta="c" mb="lg"> {{ hero.title }} </rtgl-text>
|
|
8
|
+
{%- for subtitle in hero.subtitles -%}
|
|
9
|
+
<rtgl-text s="lg" ta="c"> {{ subtitle }} </rtgl-text>
|
|
10
|
+
{%- endfor -%}
|
|
11
|
+
{%- if hero.cta -%}
|
|
12
|
+
<rtgl-button mt="xl" href="{{ hero.cta.href }}" {% if hero.cta.openNewTab %}target="_blank" rel="noreferrer"{% endif %}> {{
|
|
13
|
+
hero.cta.text
|
|
14
|
+
}} </rtgl-button>
|
|
15
|
+
{%- endif -%}
|
|
16
|
+
</rtgl-view>
|
|
17
|
+
|
|
18
|
+
{%- if hero.video-%}
|
|
19
|
+
<rtgl-view w="f" ah="c" mt="xl">
|
|
20
|
+
|
|
21
|
+
<rtgl-view lg-h="calc((100vw - 32px) / 1.777)" lg-w="calc(100vw - 32px)" h="calc(66.66vw / 1.777)" w="66.66vw"
|
|
22
|
+
bw="xs" br="xs" shadow="sm">
|
|
23
|
+
<video playsinline loop controls width="100%" aria-label="{{ hero.video.title | default: 'Video content' }}">
|
|
24
|
+
<source src="{{ hero.video.url }}" type="video/mp4">
|
|
25
|
+
</video>
|
|
26
|
+
</rtgl-view>
|
|
27
|
+
</rtgl-view>
|
|
28
|
+
{%- else -%}
|
|
29
|
+
<rtgl-view h="20vh">
|
|
30
|
+
</rtgl-view>
|
|
31
|
+
{%- endif -%}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<rtgl-view g="m" w="f" mt="xl">
|
|
2
|
+
<rtgl-text s="h3">{{ sectionTitle }}</rtgl-text>
|
|
3
|
+
<rtgl-view g="l" w="f">
|
|
4
|
+
{% for item in items %}
|
|
5
|
+
<a href="{{ item.href }}" style="display: contents; color: inherit;">
|
|
6
|
+
<rtgl-view bgc="mu" bw="s" br="m" p="m" w="f" g="xs">
|
|
7
|
+
<rtgl-view d="h" g="m">
|
|
8
|
+
<rtgl-text s="h4">{{ item.label }}</rtgl-text>
|
|
9
|
+
</rtgl-view>
|
|
10
|
+
<rtgl-text>{{ item.description }}</rtgl-text>
|
|
11
|
+
</rtgl-view>
|
|
12
|
+
</a>
|
|
13
|
+
{% endfor %}
|
|
14
|
+
</rtgl-view>
|
|
15
|
+
</rtgl-view>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<rtgl-view h="{{ height }}"></rtgl-view>
|
package/src/cli/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
{% include "core/htmlHeader.html" %}
|
|
6
|
+
{% include "core/htmlHeaderTable.html" %}
|
|
7
|
+
</head>
|
|
8
|
+
|
|
9
|
+
<body class="dark">
|
|
10
|
+
<rtgl-view w="f" ah="c" h="f">
|
|
11
|
+
<rtgl-view d="h" w="f" h="f">
|
|
12
|
+
<rtgl-sidebar title="{{ docs.title | json-escaped }}" items="{{ admin.items | json-escaped }}"></rtgl-sidebar>
|
|
13
|
+
<rtgl-view h="100vh" w="f" sv id="content-container" ph="l">
|
|
14
|
+
{{ content }}
|
|
15
|
+
<rtgl-view h="50vh"></rtgl-view>
|
|
16
|
+
</rtgl-view>
|
|
17
|
+
</rtgl-view>
|
|
18
|
+
</rtgl-view>
|
|
19
|
+
</body>
|
|
20
|
+
|
|
21
|
+
</html>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
{% include "core/htmlHeader.html" %}
|
|
6
|
+
</head>
|
|
7
|
+
|
|
8
|
+
<body>
|
|
9
|
+
<rtgl-view bgc="su" w="f" ah="c">
|
|
10
|
+
<rtgl-view md-w="100vw" lg-w="768" w="1024" p="lg">
|
|
11
|
+
{% include "core/navbar.html" %}
|
|
12
|
+
<rtgl-view h="48"></rtgl-view>
|
|
13
|
+
<rtgl-text s="dm" mt="lg">Agreements</rtgl-text>
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
<rtgl-text s="tl" mt="lg">Current Effective Agreements</rtgl-text>
|
|
17
|
+
|
|
18
|
+
<rtgl-view h="24"></rtgl-view>
|
|
19
|
+
|
|
20
|
+
{%- for agreement in collections['agreement'] -%}
|
|
21
|
+
{%- if agreement.status == 'Effective' -%}
|
|
22
|
+
<rtgl-view h="32" av="c" mt="lg">
|
|
23
|
+
<rtgl-text s="ll">
|
|
24
|
+
<a href="{{ agreement.url }}">{{ agreement.title }} {{ agreement.version }}</a>
|
|
25
|
+
</rtgl-text>
|
|
26
|
+
</rtgl-view>
|
|
27
|
+
{%- endif -%}
|
|
28
|
+
{%- endfor -%}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
<rtgl-view h="48"></rtgl-view>
|
|
32
|
+
<rtgl-text s="tl">Past agreements changelog</rtgl-text>
|
|
33
|
+
|
|
34
|
+
<rtgl-view h="32" av="c" mt="lg">
|
|
35
|
+
<rtgl-text s="tm">
|
|
36
|
+
Privacy Policy
|
|
37
|
+
</rtgl-text>
|
|
38
|
+
</rtgl-view>
|
|
39
|
+
|
|
40
|
+
<rtgl-view w="calc(100vw - 32px)" sh>
|
|
41
|
+
<rtgl-view w="640px">
|
|
42
|
+
<rtgl-view d="h">
|
|
43
|
+
<rtgl-view w="120"><rtgl-text s="bm">Version</rtgl-text></rtgl-view>
|
|
44
|
+
<rtgl-view w="120"><rtgl-text s="bm">Effective Date</rtgl-text></rtgl-view>
|
|
45
|
+
<rtgl-view w="120"><rtgl-text s="bm">Status</rtgl-text></rtgl-view>
|
|
46
|
+
<rtgl-view w="240"><rtgl-text s="bm">Changes</rtgl-text></rtgl-view>
|
|
47
|
+
</rtgl-view>
|
|
48
|
+
|
|
49
|
+
{%- for agreement in collections['privacy-policy'] -%}
|
|
50
|
+
<rtgl-view d="h">
|
|
51
|
+
<rtgl-view w="120"><rtgl-text s="bm"><a href="{{ agreement.url }}">{{ agreement.version
|
|
52
|
+
}}</a></rtgl-text></rtgl-view>
|
|
53
|
+
<rtgl-view w="120"><rtgl-text s="bm">{{ agreement.effective_date | postDate }}</rtgl-text></rtgl-view>
|
|
54
|
+
<rtgl-view w="120"><rtgl-text s="bm">{{ agreement.status }}</rtgl-text></rtgl-view>
|
|
55
|
+
<rtgl-view w="240"><rtgl-text s="bm">
|
|
56
|
+
{%- for change in agreement.summary_of_changes -%}
|
|
57
|
+
<li>{{ change }}</li>
|
|
58
|
+
{%- endfor -%}
|
|
59
|
+
</rtgl-text></rtgl-view>
|
|
60
|
+
</rtgl-view>
|
|
61
|
+
{%- endfor -%}
|
|
62
|
+
</rtgl-view>
|
|
63
|
+
</rtgl-view>
|
|
64
|
+
|
|
65
|
+
<rtgl-view h="32" av="c" mt="lg">
|
|
66
|
+
<rtgl-text s="tm">
|
|
67
|
+
Terms of Service
|
|
68
|
+
</rtgl-text>
|
|
69
|
+
</rtgl-view>
|
|
70
|
+
|
|
71
|
+
<rtgl-view w="calc(100vw - 32px)" sh>
|
|
72
|
+
<rtgl-view w="640px">
|
|
73
|
+
<rtgl-view d="h">
|
|
74
|
+
<rtgl-view w="120"><rtgl-text s="bm">Version</rtgl-text></rtgl-view>
|
|
75
|
+
<rtgl-view w="120"><rtgl-text s="bm">Effective Date</rtgl-text></rtgl-view>
|
|
76
|
+
<rtgl-view w="120"><rtgl-text s="bm">Status</rtgl-text></rtgl-view>
|
|
77
|
+
<rtgl-view w="240"><rtgl-text s="bm">Changes</rtgl-text></rtgl-view>
|
|
78
|
+
</rtgl-view>
|
|
79
|
+
|
|
80
|
+
{%- for agreement in collections['terms-of-service'] -%}
|
|
81
|
+
<rtgl-view d="h">
|
|
82
|
+
<rtgl-view w="120"><rtgl-text s="bm"><a href="{{ agreement.url }}">{{ agreement.version
|
|
83
|
+
}}</a></rtgl-text></rtgl-view>
|
|
84
|
+
<rtgl-view w="120"><rtgl-text s="bm">{{ agreement.effective_date | postDate }}</rtgl-text></rtgl-view>
|
|
85
|
+
<rtgl-view w="120"><rtgl-text s="bm">{{ agreement.status }}</rtgl-text></rtgl-view>
|
|
86
|
+
<rtgl-view w="240"><rtgl-text s="bm">
|
|
87
|
+
{%- for change in agreement.summary_of_changes -%}
|
|
88
|
+
<li>{{ change }}</li>
|
|
89
|
+
{%- endfor -%}
|
|
90
|
+
</rtgl-text></rtgl-view>
|
|
91
|
+
</rtgl-view>
|
|
92
|
+
{%- endfor -%}
|
|
93
|
+
</rtgl-view>
|
|
94
|
+
</rtgl-view>
|
|
95
|
+
</rtgl-view>
|
|
96
|
+
|
|
97
|
+
{% include "core/footer.html" %}
|
|
98
|
+
</rtgl-view>
|
|
99
|
+
|
|
100
|
+
</body>
|
|
101
|
+
|
|
102
|
+
</html>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
{% include "core/htmlHeader.html" %}
|
|
6
|
+
</head>
|
|
7
|
+
|
|
8
|
+
<body class="dark">
|
|
9
|
+
<rtgl-view id="top" bgc="su" w="f" ah="c">
|
|
10
|
+
<rtgl-view md-w="100vw" w="768" p="lg">
|
|
11
|
+
<rtgl-view h="72"></rtgl-view>
|
|
12
|
+
<rtgl-text><a href="{{ layoutConfiguration.back.href | default: "/" }}">{{ layoutConfiguration.back.label | default: "Back" }}
|
|
13
|
+
</a></rtgl-text>
|
|
14
|
+
<rtgl-text s="h1" mt="lg"><a href="#" style="display: contents;">{{ title }}</a></rtgl-text>
|
|
15
|
+
{% if date %}
|
|
16
|
+
<rtgl-text mt="sm">{{ date | postDate }}</rtgl-text>
|
|
17
|
+
{% endif %}
|
|
18
|
+
<rtgl-view mt="lg" id="content-container" w="f">
|
|
19
|
+
{{ content }}
|
|
20
|
+
<rtgl-view h="128"></rtgl-view>
|
|
21
|
+
<rtgl-view w="f" ah="c">
|
|
22
|
+
<rtgl-text s="lg"><a href="#top">Back to top</a></rtgl-text>
|
|
23
|
+
</rtgl-view>
|
|
24
|
+
</rtgl-view>
|
|
25
|
+
</rtgl-view>
|
|
26
|
+
|
|
27
|
+
<rtgl-view pos="fix" cor="right" style="top: 32px" sv w="256" h="100vh" p="xl" g="lg" xl-hidden>
|
|
28
|
+
<rtgl-page-outline id="page-outline"></rtgl-page-outline>
|
|
29
|
+
</rtgl-view>
|
|
30
|
+
{% include "core/footer.html" %}
|
|
31
|
+
{% include "core/navbar.html" %}
|
|
32
|
+
</rtgl-view>
|
|
33
|
+
</body>
|
|
34
|
+
|
|
35
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
{% include "core/htmlHeader.html" %}
|
|
6
|
+
</head>
|
|
7
|
+
|
|
8
|
+
{% assign base_template_size_attrs = "w=\"768\"" %}
|
|
9
|
+
{% unless layoutConfiguration.size == "small" %}
|
|
10
|
+
{% assign base_template_size_attrs = "w=\"1024\" lg-w=\"768\"" %}
|
|
11
|
+
{% endunless %}
|
|
12
|
+
|
|
13
|
+
<body class="dark">
|
|
14
|
+
<rtgl-view h="48"></rtgl-view>
|
|
15
|
+
<rtgl-view w="f" ah="c">
|
|
16
|
+
<rtgl-view
|
|
17
|
+
md-w="100vw"
|
|
18
|
+
{{ base_template_size_attrs }}
|
|
19
|
+
ph="lg"
|
|
20
|
+
pb="lg">
|
|
21
|
+
{{ content }}
|
|
22
|
+
</rtgl-view>
|
|
23
|
+
{% include "core/footer.html" %}
|
|
24
|
+
</rtgl-view>
|
|
25
|
+
{% include "core/navbar.html" %}
|
|
26
|
+
</body>
|
|
27
|
+
|
|
28
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
{% include "core/htmlHeader.html" %}
|
|
6
|
+
</head>
|
|
7
|
+
|
|
8
|
+
<body class="dark">
|
|
9
|
+
<rtgl-view bgc="bg" w="f" ah="c" h="f">
|
|
10
|
+
<rtgl-view d="h" w="f" h="f">
|
|
11
|
+
<rtgl-view md-hidden h="100vh">
|
|
12
|
+
<rtgl-sidebar header="{{ docs.header | json-escaped }}" items="{{ docs.items | json-escaped }}"></rtgl-sidebar>
|
|
13
|
+
</rtgl-view>
|
|
14
|
+
<rtgl-view flex="1" ah="c" h="100vh">
|
|
15
|
+
<rtgl-view pv="lg" md-w="100vw" w="720" ph="xl" sv id="content-container">
|
|
16
|
+
<rtgl-text s="h1" mb="md">{{ title }}</rtgl-text>
|
|
17
|
+
{{ content }}
|
|
18
|
+
<rtgl-view h="50vh"></rtgl-view>
|
|
19
|
+
</rtgl-view>
|
|
20
|
+
</rtgl-view>
|
|
21
|
+
<rtgl-view sv w="256" h="100vh" p="xl" g="lg" xl-hidden>
|
|
22
|
+
<rtgl-page-outline id="page-outline" target-id="content-container"></rtgl-page-outline>
|
|
23
|
+
</rtgl-view>
|
|
24
|
+
</rtgl-view>
|
|
25
|
+
</rtgl-view>
|
|
26
|
+
</body>
|
|
27
|
+
|
|
28
|
+
</html>
|