coralite 0.3.0 → 0.4.1
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/.github/workflows/test-e2e.yml +45 -0
- package/README.md +16 -3
- package/bin/coralite.js +15 -11
- package/eslint.config.js +116 -0
- package/lib/html-module.js +2 -2
- package/lib/parse.js +72 -54
- package/package.json +9 -3
- package/playwright.config.js +52 -0
- package/tests/e2e/index.spec.js +30 -0
- package/tests/fixtures/pages/about.html +12 -0
- package/tests/fixtures/pages/blog/index.html +21 -0
- package/tests/fixtures/pages/blog/post-1.html +22 -0
- package/tests/fixtures/pages/blog/post-2.html +18 -0
- package/tests/fixtures/pages/index.html +15 -0
- package/tests/fixtures/templates/components/author.html +24 -0
- package/tests/fixtures/templates/components/head.html +7 -0
- package/tests/fixtures/templates/components/header.html +5 -0
- package/tests/fixtures/templates/components/post.html +7 -0
- package/tests/fixtures/templates/components/posts.html +29 -0
- package/tests/fixtures/templates/components/title.html +3 -0
- package/tests/fixtures/templates/layouts/layout.html +5 -0
- package/tests/lib/coralite.spec.js +27 -0
- package/types/index.js +21 -10
- package/website/assets/logo.svg +57 -0
- package/website/assets/path1.svg +22 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Test e2e
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
- push
|
|
5
|
+
- pull_request
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
timeout-minutes: 60
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: pnpm/action-setup@v4
|
|
17
|
+
name: Install pnpm
|
|
18
|
+
with:
|
|
19
|
+
version: 9
|
|
20
|
+
run_install: false
|
|
21
|
+
|
|
22
|
+
- name: Install Node.js
|
|
23
|
+
uses: actions/setup-node@v4
|
|
24
|
+
with:
|
|
25
|
+
node-version: 22
|
|
26
|
+
cache: "pnpm"
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: pnpm install
|
|
30
|
+
|
|
31
|
+
- name: Build HTML from templates
|
|
32
|
+
run: pnpm run html
|
|
33
|
+
|
|
34
|
+
- name: Install Playwright Browser
|
|
35
|
+
run: pnpm exec playwright install firefox --with-deps
|
|
36
|
+
|
|
37
|
+
- name: Run Playwright tests
|
|
38
|
+
run: pnpm exec playwright test
|
|
39
|
+
|
|
40
|
+
- uses: actions/upload-artifact@v4
|
|
41
|
+
if: ${{ !cancelled() }}
|
|
42
|
+
with:
|
|
43
|
+
name: playwright-report
|
|
44
|
+
path: playwright-report/
|
|
45
|
+
retention-days: 30
|
package/README.md
CHANGED
|
@@ -23,6 +23,19 @@ yarn add -D coralite
|
|
|
23
23
|
pnpm add -D coralite
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
+
## Requirements
|
|
27
|
+
|
|
28
|
+
Coralite uses **ECMAScript Modules** which requires to run Node.js with the **`--experimental-vm-modules`** option enabled.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
node --experimental-vm-modules node_modules/coralite/bin/coralite.js [options]
|
|
32
|
+
```
|
|
33
|
+
or using NODE_OPTIONS
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
NODE_OPTIONS=--experimental-vm-modules coralite [options]
|
|
37
|
+
```
|
|
38
|
+
|
|
26
39
|
## Basic Syntax
|
|
27
40
|
|
|
28
41
|
Coralite is executed using the following command:
|
|
@@ -37,14 +50,14 @@ Replace `[options]` with the desired flags and arguments.
|
|
|
37
50
|
|
|
38
51
|
To generate a website using Coralite, you must provide three essential options:
|
|
39
52
|
|
|
40
|
-
- **-c or --
|
|
53
|
+
- **-c or --templates**: The path to your templates directory containing reusable UI elements (e.g., `-c ./src/templates`).
|
|
41
54
|
- **-p or --pages**: The path to your pages directory where static HTML files reside (e.g., `-p ./src/pages`).
|
|
42
55
|
- **--output or -o**: The output directory for the generated site (e.g., `--output ./dist`).
|
|
43
56
|
|
|
44
57
|
Here's an example of how these options might look:
|
|
45
58
|
|
|
46
59
|
```bash
|
|
47
|
-
coralite --
|
|
60
|
+
coralite --templates ./src/templates --pages ./src/pages --output ./dist
|
|
48
61
|
```
|
|
49
62
|
|
|
50
63
|
## Optional Options
|
|
@@ -54,5 +67,5 @@ coralite --components ./src/components --pages ./src/pages --output ./dist
|
|
|
54
67
|
Run the CLI in dry-run mode to preview the actions that would be performed without actually generating the website. This is useful for debugging or when you want to check potential issues before committing changes:
|
|
55
68
|
|
|
56
69
|
```bash
|
|
57
|
-
coralite --
|
|
70
|
+
coralite --templates ./src/templates --pages ./src/pages --output ./dist --dry
|
|
58
71
|
```
|
package/bin/coralite.js
CHANGED
|
@@ -17,7 +17,7 @@ program
|
|
|
17
17
|
.name(pkg.name)
|
|
18
18
|
.description(pkg.description)
|
|
19
19
|
.version(pkg.version)
|
|
20
|
-
.requiredOption('-
|
|
20
|
+
.requiredOption('-t, --templates <path>', 'Path to templates directory')
|
|
21
21
|
.requiredOption('-p, --pages <path>', 'Path to pages directory')
|
|
22
22
|
.requiredOption('-o, --output <path>', 'Output directory for the generated site')
|
|
23
23
|
.option('-d, --dry', 'Run in dry-run mode')
|
|
@@ -28,13 +28,13 @@ program.on('error', (err) => {
|
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
const options = program.opts()
|
|
31
|
-
const
|
|
31
|
+
const templatesPath = options.templates
|
|
32
32
|
const pagesPath = options.pages
|
|
33
33
|
const outputDir = options.output
|
|
34
34
|
const dryRun = options.dry
|
|
35
35
|
|
|
36
|
-
const
|
|
37
|
-
path:
|
|
36
|
+
const htmlTemplates = await getHTML({
|
|
37
|
+
path: templatesPath,
|
|
38
38
|
recursive: true
|
|
39
39
|
})
|
|
40
40
|
const htmlPages = await getHTML({
|
|
@@ -45,9 +45,9 @@ const htmlPages = await getHTML({
|
|
|
45
45
|
/** @type {Object.<string, CoraliteModule>} */
|
|
46
46
|
const coraliteModules = {}
|
|
47
47
|
|
|
48
|
-
// create
|
|
49
|
-
for (let i = 0; i <
|
|
50
|
-
const html =
|
|
48
|
+
// create templates
|
|
49
|
+
for (let i = 0; i < htmlTemplates.length; i++) {
|
|
50
|
+
const html = htmlTemplates[i]
|
|
51
51
|
const coraliteModule = parseModule(html.content)
|
|
52
52
|
|
|
53
53
|
coraliteModules[coraliteModule.id] = coraliteModule
|
|
@@ -57,7 +57,7 @@ for (let i = 0; i < htmlPages.length; i++) {
|
|
|
57
57
|
const html = htmlPages[i]
|
|
58
58
|
const document = parseHTMLDocument(html, {
|
|
59
59
|
pages: pagesPath,
|
|
60
|
-
|
|
60
|
+
templates: templatesPath
|
|
61
61
|
})
|
|
62
62
|
|
|
63
63
|
for (let i = 0; i < document.customElements.length; i++) {
|
|
@@ -70,9 +70,13 @@ for (let i = 0; i < htmlPages.length; i++) {
|
|
|
70
70
|
document
|
|
71
71
|
})
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
for (let i = 0; i < component.children.length; i++) {
|
|
74
|
+
// update component parent
|
|
75
|
+
component.children[i].parent = customElement.parent
|
|
76
|
+
}
|
|
77
|
+
const index = customElement.parent.children.indexOf(customElement, customElement.parentChildIndex)
|
|
78
|
+
// replace custom element with template
|
|
79
|
+
customElement.parent.children.splice(index, 1, ...component.children)
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
// render document
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import stylisticJs from '@stylistic/eslint-plugin-js'
|
|
2
|
+
import stylisticPlus from '@stylistic/eslint-plugin-plus'
|
|
3
|
+
|
|
4
|
+
export default [
|
|
5
|
+
{
|
|
6
|
+
plugins: {
|
|
7
|
+
'@stylistic/js': stylisticJs,
|
|
8
|
+
'@stylistic/plus': stylisticPlus
|
|
9
|
+
},
|
|
10
|
+
rules: {
|
|
11
|
+
'@stylistic/plus/curly-newline': ['error', 'always'],
|
|
12
|
+
'@stylistic/js/indent': [
|
|
13
|
+
'error', 2, {
|
|
14
|
+
SwitchCase: 1,
|
|
15
|
+
VariableDeclarator: 1,
|
|
16
|
+
outerIIFEBody: 1,
|
|
17
|
+
MemberExpression: 1,
|
|
18
|
+
FunctionExpression: {
|
|
19
|
+
body: 1,
|
|
20
|
+
parameters: 1
|
|
21
|
+
},
|
|
22
|
+
CallExpression: {
|
|
23
|
+
arguments: 1
|
|
24
|
+
},
|
|
25
|
+
ArrayExpression: 1,
|
|
26
|
+
ObjectExpression: 1,
|
|
27
|
+
ImportDeclaration: 1,
|
|
28
|
+
flatTernaryExpressions: true,
|
|
29
|
+
ignoreComments: false
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
'@stylistic/js/object-curly-spacing': ['error', 'always'],
|
|
33
|
+
'@stylistic/js/object-property-newline': 'error',
|
|
34
|
+
'@stylistic/js/object-curly-newline': ['error', {
|
|
35
|
+
ObjectExpression: {
|
|
36
|
+
multiline: true,
|
|
37
|
+
consistent: true
|
|
38
|
+
},
|
|
39
|
+
ObjectPattern: {
|
|
40
|
+
multiline: true,
|
|
41
|
+
consistent: true
|
|
42
|
+
},
|
|
43
|
+
ImportDeclaration: {
|
|
44
|
+
multiline: true,
|
|
45
|
+
consistent: true
|
|
46
|
+
},
|
|
47
|
+
ExportDeclaration: {
|
|
48
|
+
multiline: true,
|
|
49
|
+
consistent: true
|
|
50
|
+
}
|
|
51
|
+
}],
|
|
52
|
+
'@stylistic/js/quote-props': ['error', 'as-needed'],
|
|
53
|
+
'@stylistic/js/space-before-function-paren': ['error', 'always'],
|
|
54
|
+
'@stylistic/js/function-call-spacing': ['error', 'never'],
|
|
55
|
+
'@stylistic/js/implicit-arrow-linebreak': ['error', 'beside'],
|
|
56
|
+
'@stylistic/js/eol-last': ['error', 'always'],
|
|
57
|
+
'@stylistic/js/brace-style': [
|
|
58
|
+
'error', '1tbs', {
|
|
59
|
+
allowSingleLine: false
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
'@stylistic/js/semi': ['error', 'never'],
|
|
63
|
+
'@stylistic/js/quotes': [
|
|
64
|
+
'error', 'single', {
|
|
65
|
+
avoidEscape: true,
|
|
66
|
+
allowTemplateLiterals: true
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
'@stylistic/js/comma-dangle': ['error', 'never'],
|
|
70
|
+
'@stylistic/js/comma-spacing': [
|
|
71
|
+
'error', {
|
|
72
|
+
before: false,
|
|
73
|
+
after: true
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
'@stylistic/js/comma-style': ['error', 'last'],
|
|
77
|
+
'@stylistic/js/array-bracket-spacing': ['error', 'never'],
|
|
78
|
+
'@stylistic/js/array-bracket-newline': ['error', 'consistent'],
|
|
79
|
+
'@stylistic/js/array-element-newline': ['error', 'consistent'],
|
|
80
|
+
'@stylistic/js/computed-property-spacing': ['error', 'never'],
|
|
81
|
+
'@stylistic/js/no-mixed-operators': [
|
|
82
|
+
'error',
|
|
83
|
+
{
|
|
84
|
+
groups: [
|
|
85
|
+
[
|
|
86
|
+
'+', '-', '*', '/', '%', '**'
|
|
87
|
+
],
|
|
88
|
+
[
|
|
89
|
+
'&', '|', '^', '~', '<<', '>>', '>>>'
|
|
90
|
+
],
|
|
91
|
+
[
|
|
92
|
+
'==', '!=', '===', '!==', '>', '>=', '<', '<='
|
|
93
|
+
],
|
|
94
|
+
['&&', '||'],
|
|
95
|
+
['in', 'instanceof']
|
|
96
|
+
],
|
|
97
|
+
allowSamePrecedence: false
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
'@stylistic/js/key-spacing': [
|
|
101
|
+
'error', {
|
|
102
|
+
mode: 'strict'
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
'@stylistic/js/no-trailing-spaces': 'error',
|
|
106
|
+
'@stylistic/js/no-multi-spaces': 'error',
|
|
107
|
+
'@stylistic/js/no-confusing-arrow': 'error'
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
ignores: [
|
|
112
|
+
'**/dist/',
|
|
113
|
+
'**/.history/'
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
]
|
package/lib/html-module.js
CHANGED
|
@@ -3,7 +3,7 @@ import getHTML from './get-html.js'
|
|
|
3
3
|
import { createComponent, parseHTMLMeta } from './parse.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @import { CoraliteTokenOptions, CoraliteModule, CoraliteDocument } from '#types'
|
|
6
|
+
* @import { CoraliteTokenOptions, CoraliteModule, CoraliteDocument, CoraliteModuleValues } from '#types'
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -14,7 +14,7 @@ import { createComponent, parseHTMLMeta } from './parse.js'
|
|
|
14
14
|
* @param {string} options.componentId - Unique identifier for the component
|
|
15
15
|
* @param {boolean} [options.recursive] - Whether to recursively search subdirectories
|
|
16
16
|
* @param {CoraliteTokenOptions} [options.tokens] - Token configuration options
|
|
17
|
-
* @param {
|
|
17
|
+
* @param {CoraliteModuleValues} values - Default token values
|
|
18
18
|
* @param {Object.<string, CoraliteModule>} components - Available components library
|
|
19
19
|
* @param {CoraliteDocument} document - Current document being processed
|
|
20
20
|
*
|
package/lib/parse.js
CHANGED
|
@@ -16,7 +16,8 @@ import { invalidCustomTags, validTags } from './tags.js'
|
|
|
16
16
|
* CoraliteModuleSlotElement,
|
|
17
17
|
* CoraliteDocumentTokens,
|
|
18
18
|
* CoraliteDocumentRoot,
|
|
19
|
-
*
|
|
19
|
+
* CoraliteContentNode,
|
|
20
|
+
* CoraliteModuleValues,
|
|
20
21
|
* } from '#types'
|
|
21
22
|
*/
|
|
22
23
|
|
|
@@ -42,7 +43,7 @@ const customElementTagTokenRegExp = /^[^-].*[-._a-z0-9\u00B7\u00C0-\u00D6\u00D8-
|
|
|
42
43
|
*
|
|
43
44
|
* const path = {
|
|
44
45
|
* pages: 'path/to/pages',
|
|
45
|
-
*
|
|
46
|
+
* templates: 'path/to/templates'
|
|
46
47
|
* };
|
|
47
48
|
*
|
|
48
49
|
* const document = parseHTMLDocument(html, path);
|
|
@@ -57,6 +58,7 @@ export function parseHTMLDocument (html, path) {
|
|
|
57
58
|
children: []
|
|
58
59
|
}
|
|
59
60
|
// stack to keep track of current element hierarchy
|
|
61
|
+
/** @type {CoraliteContentNode[]} */
|
|
60
62
|
const stack = [root]
|
|
61
63
|
const customElements = []
|
|
62
64
|
|
|
@@ -69,22 +71,28 @@ export function parseHTMLDocument (html, path) {
|
|
|
69
71
|
})
|
|
70
72
|
},
|
|
71
73
|
onopentag (originalName, attributes) {
|
|
72
|
-
|
|
74
|
+
const parent = stack[stack.length - 1]
|
|
75
|
+
const element = createElement(originalName, attributes, customElements, parent)
|
|
76
|
+
|
|
77
|
+
// push element to stack as it may have children
|
|
78
|
+
stack.push(element)
|
|
73
79
|
},
|
|
74
80
|
ontext (text) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
const parent = stack[stack.length - 1]
|
|
82
|
+
|
|
83
|
+
createTextNode(text, parent)
|
|
78
84
|
},
|
|
79
85
|
onclosetag () {
|
|
80
86
|
// remove current element from stack as we're done with its children
|
|
81
87
|
stack.pop()
|
|
82
88
|
},
|
|
83
89
|
oncomment (data) {
|
|
84
|
-
stack[stack.length - 1]
|
|
90
|
+
const parent = stack[stack.length - 1]
|
|
91
|
+
|
|
92
|
+
parent.children.push({
|
|
85
93
|
type: 'comment',
|
|
86
94
|
data,
|
|
87
|
-
parent
|
|
95
|
+
parent
|
|
88
96
|
})
|
|
89
97
|
}
|
|
90
98
|
})
|
|
@@ -129,7 +137,7 @@ export function parseHTMLDocument (html, path) {
|
|
|
129
137
|
* @returns {Object.<string, CoraliteToken[]>}
|
|
130
138
|
*
|
|
131
139
|
* @example
|
|
132
|
-
* ```
|
|
140
|
+
* ```
|
|
133
141
|
* // Example usage:
|
|
134
142
|
* const html = `<meta name="title" content="Finding Nemo">`;
|
|
135
143
|
* const meta = parseHTMLMeta(html);
|
|
@@ -222,6 +230,7 @@ export function parseModule (string) {
|
|
|
222
230
|
children: []
|
|
223
231
|
}
|
|
224
232
|
// stack to keep track of current element hierarchy
|
|
233
|
+
/** @type {CoraliteContentNode[]} */
|
|
225
234
|
const stack = [root]
|
|
226
235
|
const customElements = []
|
|
227
236
|
/** @type {Object.<string, Object.<string,CoraliteModuleSlotElement>>} */
|
|
@@ -236,9 +245,13 @@ export function parseModule (string) {
|
|
|
236
245
|
|
|
237
246
|
const parser = new Parser({
|
|
238
247
|
onopentag (originalName, attributes) {
|
|
239
|
-
const
|
|
248
|
+
const parent = stack[stack.length -1]
|
|
249
|
+
const element = createElement(originalName, attributes, customElements, parent)
|
|
240
250
|
const attributeNames = Object.keys(attributes)
|
|
241
251
|
|
|
252
|
+
// push element to stack as it may have children
|
|
253
|
+
stack.push(element)
|
|
254
|
+
|
|
242
255
|
// collect tokens
|
|
243
256
|
if (attributeNames.length) {
|
|
244
257
|
for (let i = 0; i < attributeNames.length; i++) {
|
|
@@ -300,8 +313,10 @@ export function parseModule (string) {
|
|
|
300
313
|
}
|
|
301
314
|
},
|
|
302
315
|
ontext (text) {
|
|
316
|
+
const parent = stack[stack.length - 1]
|
|
317
|
+
const textNode = createTextNode(text, parent)
|
|
318
|
+
|
|
303
319
|
if (text.trim()) {
|
|
304
|
-
const textNode = createTextNode(text, stack)
|
|
305
320
|
const tokens = getTokensFromString(text)
|
|
306
321
|
|
|
307
322
|
// store tokens
|
|
@@ -340,23 +355,26 @@ export function parseModule (string) {
|
|
|
340
355
|
for (let i = 0; i < root.children.length; i++) {
|
|
341
356
|
const node = root.children[i]
|
|
342
357
|
|
|
343
|
-
if (node.type === '
|
|
344
|
-
|
|
345
|
-
|
|
358
|
+
if (node.type === 'tag') {
|
|
359
|
+
if (node.name === 'template') {
|
|
360
|
+
if (template) {
|
|
361
|
+
throw new Error('One template element is permitted')
|
|
362
|
+
}
|
|
346
363
|
|
|
347
|
-
|
|
348
|
-
if (template) {
|
|
349
|
-
throw new Error('One template element is permitted')
|
|
350
|
-
}
|
|
364
|
+
template = node
|
|
351
365
|
|
|
352
|
-
|
|
366
|
+
} else if (node.name == 'script') {
|
|
367
|
+
if (node.attribs.type !== 'module') {
|
|
368
|
+
throw new Error('Script tag must contain the `type="module"` attribute')
|
|
369
|
+
}
|
|
370
|
+
const scriptString = node.children[0]
|
|
353
371
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
}
|
|
372
|
+
if (scriptString.type !== 'text') {
|
|
373
|
+
throw new Error('Script tag must contain text')
|
|
374
|
+
}
|
|
358
375
|
|
|
359
|
-
|
|
376
|
+
script = scriptString.data
|
|
377
|
+
}
|
|
360
378
|
}
|
|
361
379
|
}
|
|
362
380
|
|
|
@@ -377,10 +395,9 @@ export function parseModule (string) {
|
|
|
377
395
|
/**
|
|
378
396
|
* @param {Object} options
|
|
379
397
|
* @param {string} options.id - id - Unique identifier for the component
|
|
380
|
-
* @param {
|
|
381
|
-
* @param {Object.<string, CoraliteModuleSlotElement[]>} [options.customElementSlots = {}] - Custom slots and their configurations for the component
|
|
398
|
+
* @param {CoraliteModuleValues} options.values - Token values available for replacement
|
|
382
399
|
* @param {Object.<string, CoraliteModule>} options.components - Mapping of component IDs to their module definitions
|
|
383
|
-
* @param {CoraliteElement} options.element - Mapping of component IDs to their module definitions
|
|
400
|
+
* @param {CoraliteElement} [options.element] - Mapping of component IDs to their module definitions
|
|
384
401
|
* @param {CoraliteDocument} options.document - Current document being processed
|
|
385
402
|
* @returns {Promise<CoraliteElement>}
|
|
386
403
|
*
|
|
@@ -392,11 +409,6 @@ export function parseModule (string) {
|
|
|
392
409
|
* values: {
|
|
393
410
|
* 'some-token': 'value-for-token'
|
|
394
411
|
* },
|
|
395
|
-
* customElementSlots: {
|
|
396
|
-
* 'slot-name': [
|
|
397
|
-
* { name: 'sub-slot', element: 'p' }
|
|
398
|
-
* ]
|
|
399
|
-
* },
|
|
400
412
|
* components: {
|
|
401
413
|
* 'my-component': {
|
|
402
414
|
* id: 'my-component',
|
|
@@ -450,8 +462,10 @@ export async function createComponent ({
|
|
|
450
462
|
}
|
|
451
463
|
}
|
|
452
464
|
|
|
453
|
-
|
|
454
|
-
|
|
465
|
+
if (typeof value === 'string') {
|
|
466
|
+
// replace token with value
|
|
467
|
+
item.element.attribs[item.name] = item.element.attribs[item.name].replace(token.content, value)
|
|
468
|
+
}
|
|
455
469
|
}
|
|
456
470
|
}
|
|
457
471
|
|
|
@@ -478,8 +492,10 @@ export async function createComponent ({
|
|
|
478
492
|
}
|
|
479
493
|
}
|
|
480
494
|
|
|
481
|
-
|
|
482
|
-
|
|
495
|
+
if (typeof value === 'string') {
|
|
496
|
+
// replace token with value
|
|
497
|
+
item.textNode.data = item.textNode.data.replace(token.content, value)
|
|
498
|
+
}
|
|
483
499
|
}
|
|
484
500
|
}
|
|
485
501
|
|
|
@@ -494,9 +510,13 @@ export async function createComponent ({
|
|
|
494
510
|
const node = computedToken.node
|
|
495
511
|
const value = values[computedToken.name]
|
|
496
512
|
|
|
497
|
-
if (
|
|
513
|
+
if (
|
|
514
|
+
computedToken.type === 'attribute'
|
|
515
|
+
&& node.type === 'tag'
|
|
516
|
+
&& typeof value === 'string'
|
|
517
|
+
) {
|
|
498
518
|
node.attribs[computedToken.attribute] = node.attribs[computedToken.attribute].replace(computedToken.content, value)
|
|
499
|
-
} else {
|
|
519
|
+
} else if (node.type === 'text') {
|
|
500
520
|
if (Array.isArray(value)) {
|
|
501
521
|
// inject nodes
|
|
502
522
|
const textSplit = node.data.split(computedToken.content)
|
|
@@ -597,7 +617,7 @@ export async function createComponent ({
|
|
|
597
617
|
* Parses a Coralite module script and compiles it into JavaScript.
|
|
598
618
|
*
|
|
599
619
|
* @param {CoraliteModule} component - The Coralite module to parse
|
|
600
|
-
* @param {
|
|
620
|
+
* @param {CoraliteModuleValues} values - Replacement tokens for the component
|
|
601
621
|
* @param {Object.<string, CoraliteModule>} components - Mapping of other components that might be referenced
|
|
602
622
|
* @param {CoraliteDocument} document - The current document being processed
|
|
603
623
|
* @returns {Promise<Object.<string,(string|(CoraliteElement|CoraliteTextNode)[])>>}
|
|
@@ -746,11 +766,10 @@ function addMetadata (meta, name, content) {
|
|
|
746
766
|
* @param {string} name
|
|
747
767
|
* @param {Object.<string, string>} attributes
|
|
748
768
|
* @param {CoraliteElement[]} customElements
|
|
749
|
-
* @param {
|
|
769
|
+
* @param {CoraliteElement | CoraliteDocumentRoot} parent
|
|
750
770
|
*/
|
|
751
|
-
function createElement (name, attributes, customElements,
|
|
771
|
+
function createElement (name, attributes, customElements, parent) {
|
|
752
772
|
const sanitisedName = name.toLowerCase()
|
|
753
|
-
const parent = stack[stack.length - 1]
|
|
754
773
|
|
|
755
774
|
/** @type {CoraliteElement} */
|
|
756
775
|
const element = {
|
|
@@ -779,28 +798,27 @@ function createElement (name, attributes, customElements, stack) {
|
|
|
779
798
|
// add element to its parent's children
|
|
780
799
|
parent.children.push(element)
|
|
781
800
|
|
|
782
|
-
// push element to stack as it may have children
|
|
783
|
-
stack.push(element)
|
|
784
|
-
|
|
785
801
|
return element
|
|
786
802
|
}
|
|
787
803
|
|
|
788
804
|
/**
|
|
789
|
-
* @param {string} text
|
|
790
|
-
* @param {CoraliteElement
|
|
805
|
+
* @param {string} data - The text content to create a text node
|
|
806
|
+
* @param {CoraliteElement | CoraliteDocumentRoot} parent - parent node
|
|
791
807
|
* @returns {CoraliteTextNode}
|
|
808
|
+
*
|
|
809
|
+
* @example
|
|
810
|
+
* const textNode = createTextNode('Hello World', parentNode);
|
|
792
811
|
*/
|
|
793
|
-
function createTextNode (
|
|
794
|
-
|
|
795
|
-
const parentIndex = stack.length - 1
|
|
812
|
+
function createTextNode (data, parent) {
|
|
813
|
+
/** @type {CoraliteTextNode} */
|
|
796
814
|
const textNode = {
|
|
797
815
|
type: 'text',
|
|
798
|
-
data
|
|
799
|
-
parent
|
|
816
|
+
data,
|
|
817
|
+
parent
|
|
800
818
|
}
|
|
801
819
|
|
|
802
|
-
|
|
820
|
+
// @ts-ignore
|
|
821
|
+
parent.children.push(textNode)
|
|
803
822
|
|
|
804
823
|
return textNode
|
|
805
824
|
}
|
|
806
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coralite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "HTML modules static site generator",
|
|
5
5
|
"main": "./lib/coralite.js",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,11 @@
|
|
|
28
28
|
"format": "eslint --cache --fix .",
|
|
29
29
|
"lint": "eslint --cache .",
|
|
30
30
|
"test-unit": "node --test test/lib/*",
|
|
31
|
-
"
|
|
31
|
+
"test-e2e": "playwright test",
|
|
32
|
+
"test-e2e-report": "playwright show-report",
|
|
33
|
+
"test-e2e-ui": "playwright test --ui",
|
|
34
|
+
"html": "node --experimental-vm-modules bin/coralite.js -t tests/fixtures/templates -p tests/fixtures/pages -o dist",
|
|
35
|
+
"server": "sirv dist --dev --port 3000"
|
|
32
36
|
},
|
|
33
37
|
"bin": "bin/coralite.js",
|
|
34
38
|
"imports": {
|
|
@@ -42,9 +46,11 @@
|
|
|
42
46
|
"devDependencies": {
|
|
43
47
|
"@commitlint/cli": "^19.6.1",
|
|
44
48
|
"@commitlint/config-conventional": "^19.6.0",
|
|
49
|
+
"@playwright/test": "^1.50.0",
|
|
45
50
|
"@stylistic/eslint-plugin-js": "^2.12.1",
|
|
46
51
|
"@stylistic/eslint-plugin-plus": "^2.12.1",
|
|
47
|
-
"@types/node": "^22.10.5"
|
|
52
|
+
"@types/node": "^22.10.5",
|
|
53
|
+
"sirv-cli": "^3.0.0"
|
|
48
54
|
},
|
|
49
55
|
"engines": {
|
|
50
56
|
"node": ">=18"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { defineConfig, devices } from '@playwright/test'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read environment variables from file.
|
|
6
|
+
* https://github.com/motdotla/dotenv
|
|
7
|
+
*/
|
|
8
|
+
// import dotenv from 'dotenv';
|
|
9
|
+
// import path from 'path';
|
|
10
|
+
// dotenv.config({ path: path.resolve(__dirname, '.env') });
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @see https://playwright.dev/docs/test-configuration
|
|
14
|
+
*/
|
|
15
|
+
export default defineConfig({
|
|
16
|
+
testDir: './tests/e2e',
|
|
17
|
+
/* Run tests in files in parallel */
|
|
18
|
+
fullyParallel: true,
|
|
19
|
+
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
20
|
+
forbidOnly: !!process.env.CI,
|
|
21
|
+
/* Retry on CI only */
|
|
22
|
+
retries: process.env.CI ? 2 : 0,
|
|
23
|
+
/* Opt out of parallel tests on CI. */
|
|
24
|
+
workers: process.env.CI ? 1 : undefined,
|
|
25
|
+
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
26
|
+
reporter: 'html',
|
|
27
|
+
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
28
|
+
use: {
|
|
29
|
+
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
30
|
+
baseURL: 'http://localhost:3000',
|
|
31
|
+
|
|
32
|
+
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
33
|
+
trace: 'on-first-retry'
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
/* Configure projects for major browsers */
|
|
37
|
+
projects: [
|
|
38
|
+
{
|
|
39
|
+
name: 'firefox',
|
|
40
|
+
use: { ...devices['Desktop Firefox'] }
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
|
|
44
|
+
/* Run your local dev server before starting the tests */
|
|
45
|
+
webServer: {
|
|
46
|
+
command: 'pnpm run server',
|
|
47
|
+
url: 'http://localhost:3000',
|
|
48
|
+
reuseExistingServer: !process.env.CI,
|
|
49
|
+
timeout: 120000
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test'
|
|
2
|
+
|
|
3
|
+
test('has title', async ({ page }) => {
|
|
4
|
+
await page.goto('/')
|
|
5
|
+
|
|
6
|
+
// Expect a title "to contain" a substring.
|
|
7
|
+
await expect(page).toHaveTitle(/Home page/)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('has compiled coralite-header custom element', async ({ page }) => {
|
|
11
|
+
await page.goto('/')
|
|
12
|
+
|
|
13
|
+
// Check if the custom coralite-header element exists and contains the expected text
|
|
14
|
+
await expect(page.locator('body')).toMatchAriaSnapshot(`
|
|
15
|
+
- text: Hello
|
|
16
|
+
- banner: This is the mighty header
|
|
17
|
+
- text: world
|
|
18
|
+
`)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('', async ({ page }) => {
|
|
22
|
+
await page.goto('/about.html')
|
|
23
|
+
|
|
24
|
+
await expect(page.locator('body')).toMatchAriaSnapshot(`
|
|
25
|
+
- text: Hello
|
|
26
|
+
- banner: This is the mighty header
|
|
27
|
+
- text: world
|
|
28
|
+
`)
|
|
29
|
+
})
|
|
30
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Blog posts</title>
|
|
7
|
+
<coralite-head>
|
|
8
|
+
<meta slot="meta" name="name" content="coralite">
|
|
9
|
+
<meta slot="meta" name="description" content="look mum, no database!">
|
|
10
|
+
<span>default slot</span>
|
|
11
|
+
<span>default slot</span>
|
|
12
|
+
</coralite-head>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
Hello
|
|
16
|
+
|
|
17
|
+
<coralite-header></coralite-header>
|
|
18
|
+
<coralite-posts path="blog"></coralite-posts>
|
|
19
|
+
world
|
|
20
|
+
</body>
|
|
21
|
+
</html>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Document</title>
|
|
7
|
+
<meta name="title" content="Post 1">
|
|
8
|
+
<meta name="author" content="Nemo">
|
|
9
|
+
<meta name="image" content="image.png">
|
|
10
|
+
<meta name="image_alt" content="Photo of a cat">
|
|
11
|
+
<meta name="description" content="short description">
|
|
12
|
+
<meta name="published_time" content="2025-01-08T20:23:07.645Z">
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
Hello
|
|
16
|
+
|
|
17
|
+
<coralite-header></coralite-header>
|
|
18
|
+
<coralite-author name="Nemo" datetime="2025-01-08T20:23:07.645Z"></coralite-author>
|
|
19
|
+
|
|
20
|
+
world
|
|
21
|
+
</body>
|
|
22
|
+
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Document</title>
|
|
7
|
+
<meta name="title" content="Post 2">
|
|
8
|
+
<meta name="author" content="Nemo">
|
|
9
|
+
<meta name="image" content="image.png">
|
|
10
|
+
<meta name="image_alt" content="Photo of a dog">
|
|
11
|
+
<meta name="description" content="short description">
|
|
12
|
+
<meta name="published_time" content="2025-01-09T20:23:07.645Z">
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<coralite-header></coralite-header>
|
|
16
|
+
<coralite-author name="Nemo" datetime="2025-01-08T20:23:07.645Z"></coralite-author>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Home page</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
Hello
|
|
10
|
+
|
|
11
|
+
<coralite-header></coralite-header>
|
|
12
|
+
|
|
13
|
+
world
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template id="coralite-author">
|
|
2
|
+
<span>{{ name }}</span>
|
|
3
|
+
<time datetime="{{ datetime }}">
|
|
4
|
+
{{ localeDate }}
|
|
5
|
+
</time>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script type="module">
|
|
9
|
+
import { defineComponent, tokens } from 'coralite'
|
|
10
|
+
|
|
11
|
+
export default defineComponent({
|
|
12
|
+
id: 'coralite-author',
|
|
13
|
+
tokens: {
|
|
14
|
+
localeDate () {
|
|
15
|
+
return new Date(tokens.datetime).toLocaleDateString('en-AU', {
|
|
16
|
+
weekday: 'short',
|
|
17
|
+
year: '2-digit',
|
|
18
|
+
month: 'short',
|
|
19
|
+
day: 'numeric'
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
</script>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<template id="coralite-posts">
|
|
2
|
+
{{ posts }}
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script type="module">
|
|
6
|
+
import { defineComponent, tokens, aggregate } from 'coralite'
|
|
7
|
+
|
|
8
|
+
export default defineComponent({
|
|
9
|
+
id: 'coralite-posts',
|
|
10
|
+
tokens: {
|
|
11
|
+
posts () {
|
|
12
|
+
return aggregate({
|
|
13
|
+
path: tokens.path,
|
|
14
|
+
componentId: 'coralite-post',
|
|
15
|
+
pages: 10,
|
|
16
|
+
sortBy: 'published_time',
|
|
17
|
+
tokens: {
|
|
18
|
+
aliases: {
|
|
19
|
+
datetime: ['published_time']
|
|
20
|
+
},
|
|
21
|
+
values: {
|
|
22
|
+
image: 'default.png'
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
</script>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { deepStrictEqual, strictEqual } from 'node:assert'
|
|
2
|
+
import { describe, it } from 'node:test'
|
|
3
|
+
import { getTokensFromString } from '#lib'
|
|
4
|
+
|
|
5
|
+
describe('Get tokens from string', function () {
|
|
6
|
+
it('should extract name token', function () {
|
|
7
|
+
const string = `<template id="template1">Hello {{ name }}! Wassup? <code>import { red } from 'lib.js'</code></template>`
|
|
8
|
+
const tokens = getTokensFromString(string)
|
|
9
|
+
|
|
10
|
+
strictEqual(tokens.length, 1)
|
|
11
|
+
deepStrictEqual(tokens[0], {
|
|
12
|
+
name: 'name',
|
|
13
|
+
content: '{{ name }}'
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('should extract name token', function () {
|
|
18
|
+
const string = `<template id="template1">Hello {{ name }}! Wassup? <code>import { red } from 'lib.js'</code></template>`
|
|
19
|
+
const tokens = getTokensFromString(string)
|
|
20
|
+
|
|
21
|
+
strictEqual(tokens.length, 1)
|
|
22
|
+
deepStrictEqual(tokens[0], {
|
|
23
|
+
name: 'name',
|
|
24
|
+
content: '{{ name }}'
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
})
|
package/types/index.js
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Represents the paths to Coralite pages and
|
|
9
|
+
* Represents the paths to Coralite pages and templates within a project.
|
|
10
10
|
* @typedef {Object} CoralitePath
|
|
11
11
|
* @property {string} pages - The path to the root pages directory
|
|
12
|
-
* @property {string}
|
|
12
|
+
* @property {string} templates - The path to the root templates directory
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
* @property {Object.<string, string[]>} [aliases] - Token aliases and their possible values
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {Object.<string, (string | (CoraliteTextNode | CoraliteElement)[])>} CoraliteModuleValues
|
|
23
|
+
*/
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* @typedef {Object} CoraliteModule
|
|
@@ -50,9 +53,8 @@
|
|
|
50
53
|
|
|
51
54
|
/**
|
|
52
55
|
* @typedef {Object} CoraliteTextNodeToken
|
|
53
|
-
* @property {
|
|
54
|
-
* @property {
|
|
55
|
-
* @property {CoraliteElement} parent - Parent element of the text node
|
|
56
|
+
* @property {CoraliteTextNode} textNode - Text node that contains the token
|
|
57
|
+
* @property {CoraliteToken[]} tokens - Array of associated tokens
|
|
56
58
|
*/
|
|
57
59
|
|
|
58
60
|
/**
|
|
@@ -67,8 +69,9 @@
|
|
|
67
69
|
* @property {string} name - Tag name
|
|
68
70
|
* @property {Object.<string, string>} attribs - Element attributes
|
|
69
71
|
* @property {CoraliteAnyNode[]} children - Child nodes of the element
|
|
70
|
-
* @property {
|
|
72
|
+
* @property {CoraliteContentNode} parent - Parent element
|
|
71
73
|
* @property {number} [parentChildIndex] - Position in parent's child list
|
|
74
|
+
* @property {Object[]} [slots]
|
|
72
75
|
*/
|
|
73
76
|
|
|
74
77
|
|
|
@@ -76,11 +79,20 @@
|
|
|
76
79
|
* @typedef {Object} CoraliteTextNode
|
|
77
80
|
* @property {'text'} type - Text node type
|
|
78
81
|
* @property {string} data - Additional attributes for the text node
|
|
79
|
-
* @property {
|
|
82
|
+
* @property {CoraliteContentNode} parent - Parent element of the text node
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @typedef {Object} CoraliteComment
|
|
87
|
+
* @property {'comment'} type - Comment type
|
|
88
|
+
* @property {string} data - Additional attributes for the text node
|
|
89
|
+
* @property {CoraliteContentNode} parent - Parent element of the text node
|
|
80
90
|
*/
|
|
81
91
|
|
|
92
|
+
|
|
82
93
|
/**
|
|
83
|
-
* @typedef {
|
|
94
|
+
* @typedef {CoraliteElement | CoraliteTextNode | CoraliteComment} CoraliteAnyNode
|
|
95
|
+
* @typedef {CoraliteElement | CoraliteDocumentRoot} CoraliteContentNode
|
|
84
96
|
*/
|
|
85
97
|
|
|
86
98
|
/**
|
|
@@ -100,7 +112,7 @@
|
|
|
100
112
|
/**
|
|
101
113
|
* @typedef {Object} CoraliteDocumentRoot
|
|
102
114
|
* @property {'root'} type - Node type
|
|
103
|
-
* @property {CoraliteAnyNode[]} children - Document list
|
|
115
|
+
* @property {(CoraliteAnyNode | CoraliteDirective)[]} children - Document list
|
|
104
116
|
*/
|
|
105
117
|
|
|
106
118
|
/**
|
|
@@ -109,6 +121,5 @@
|
|
|
109
121
|
* @property {string} parentPath - Parent file path
|
|
110
122
|
* @property {CoraliteDocumentRoot} root - Array of elements and text nodes in the document
|
|
111
123
|
* @property {CoraliteElement[]} customElements - Custom elements defined in the document
|
|
112
|
-
* @property {Object.<string, CoraliteSlotElement[]>} customElementSlots - Slots with their respective elements
|
|
113
124
|
* @property {CoralitePath} path - Document's file path
|
|
114
125
|
*/
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="210mm"
|
|
6
|
+
height="297mm"
|
|
7
|
+
viewBox="0 0 210 297"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg1"
|
|
10
|
+
xml:space="preserve"
|
|
11
|
+
inkscape:version="1.4 (1:1.4+202410161351+e7c3feb100)"
|
|
12
|
+
sodipodi:docname="logo.svg"
|
|
13
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
14
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
15
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
16
|
+
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
|
17
|
+
id="namedview1"
|
|
18
|
+
pagecolor="#505050"
|
|
19
|
+
bordercolor="#eeeeee"
|
|
20
|
+
borderopacity="1"
|
|
21
|
+
inkscape:showpageshadow="0"
|
|
22
|
+
inkscape:pageopacity="0"
|
|
23
|
+
inkscape:pagecheckerboard="0"
|
|
24
|
+
inkscape:deskcolor="#505050"
|
|
25
|
+
inkscape:document-units="mm"
|
|
26
|
+
inkscape:zoom="0.70710678"
|
|
27
|
+
inkscape:cx="1715.4411"
|
|
28
|
+
inkscape:cy="-318.90516"
|
|
29
|
+
inkscape:window-width="2560"
|
|
30
|
+
inkscape:window-height="1371"
|
|
31
|
+
inkscape:window-x="0"
|
|
32
|
+
inkscape:window-y="0"
|
|
33
|
+
inkscape:window-maximized="1"
|
|
34
|
+
inkscape:current-layer="layer1"
|
|
35
|
+
showguides="true"><sodipodi:guide
|
|
36
|
+
position="110.89681,253.6422"
|
|
37
|
+
orientation="1,0"
|
|
38
|
+
id="guide1"
|
|
39
|
+
inkscape:locked="false" /></sodipodi:namedview><defs
|
|
40
|
+
id="defs1" /><g
|
|
41
|
+
inkscape:label="Layer 1"
|
|
42
|
+
inkscape:groupmode="layer"
|
|
43
|
+
id="layer1"><path
|
|
44
|
+
style="fill:#000000"
|
|
45
|
+
d="m 298.57278,-42.548343 -1.57193,-0.95101 -8.46667,-4.82686 -8.46666,-4.82685 -7.54063,-4.25358 -7.54062,-4.25357 -9.92188,-5.54313 -9.92187,-5.54312 -0.83747,-0.7842 -0.83748,-0.7842 -0.29184,-1.08381 -0.29184,-1.08381 0.071,-34.349607 0.071,-34.34961 0.45352,-0.82838 0.45352,-0.82838 0.74506,-0.62683 0.74505,-0.62683 3.69622,-2.09811 3.69622,-2.09811 5.29166,-3.03444 5.29167,-3.03444 7.14375,-4.10268 7.14375,-4.10269 4.49791,-2.55913 4.49792,-2.55913 5.82083,-3.39734 5.82084,-3.39733 2.4974,-1.31786 1.40074,-2e-5 c 2.86306,1.50973 6.36082,3.41854 9.45889,5.21825 l 8.3388,4.84409 18.91771,10.78535 18.9177,10.78535 0.84627,0.80042 0.84627,0.80042 0.27821,1.29725 0.27821,1.29724 -0.006,33.91979 -0.006,33.919787 -0.49105,1.05833 -0.49104,1.05833 -0.89221,0.81561 -0.8922,0.8156 -10.05417,5.64853 -10.05417,5.64852 -17.05914,9.7416 -17.05915,9.7416 h -1.47725 -1.47725 z m -10.07626,-28.1711 c -4.18857,-0.51534 -7.77638,-1.17424 -10.84552,-2.53296 -2.92767,-1.2961 -5.36699,-3.24983 -8.06878,-5.47912 -0.94895,-0.89498 -1.34047,-3.57834 0.005,-4.97691 1.34533,-1.39856 3.76756,-1.16911 4.92419,-0.27754 l 4.37699,4.02218 c 3.86085,2.30005 8.30646,2.74342 12.6829,3.2415 1.12639,-0.19663 1.56927,-0.94448 1.32865,-2.24354 -1.88926,-1.88481 -3.92259,-3.6124 -5.93549,-5.3617 -2.95933,-2.86246 -6.11886,-5.27287 -9.85143,-7.02012 -7.50215,-0.56709 -13.13233,-2.0385 -18.58347,-6.33354 -0.63866,-0.58882 -0.58007,-2.610077 0.39438,-3.820617 0.97445,-1.21054 3.30629,-1.58259 4.48868,-0.94795 l 1.79605,1.30939 c 1.9763,1.476157 5.23436,3.310727 7.71354,2.827177 l 0.38902,-0.14928 c -0.2606,-1.02271 -0.97521,-1.785997 -1.54093,-2.645167 -0.51971,-0.82928 -1.27764,-1.60239 -2.1114,-2.20081 -0.83377,-0.59842 -1.64526,-0.90244 -2.5306,-1.25733 -1.85425,-0.84855 -3.2686,-1.87817 -4.85167,-3.70328 -1.58306,-1.82511 -3.05131,-4.5981 -4.30168,-7.08018 -0.75466,-3.36601 2.78893,-5.94414 5.70784,-3.02773 l 1.31327,2.46697 c 0.64344,1.68533 1.69338,2.86145 2.91215,4.12628 l 1.59888,1.65931 c 0.44025,0.17148 0.66734,0.0958 1.08174,-0.0661 0.84942,-1.81566 0.35088,-3.71933 0.0963,-5.60376 -0.0771,-0.72919 0.25197,-2.94957 2.76903,-3.2113 2.51706,-0.26173 4.13752,1.51643 3.83534,5.44163 -0.52005,8.56828 -0.26417,10.4647 2.97336,13.27877 0.74309,0.645897 2.30507,0.527127 2.8468,0.23536 0.54173,-0.29177 2.10712,-2.70109 2.10712,-2.70109 1.21222,-3.1555 1.37903,-10.89808 -0.65124,-12.90162 l -3.04271,-1.78178 -3.0427,-1.78178 c -9.66534,-5.24713 -18.86526,-11.36145 -28.69225,-16.30833 h -0.13983 -0.13984 v 28.70397 28.703977 l 0.99219,0.62357 0.99218,0.62357 4.8948,2.77803 4.89479,2.77804 10.71562,6.04275 10.71563,6.04275 7.40833,4.20767 7.40834,4.20767 0.26458,0.25535 0.26458,0.25534 0.0767,-7.35561 0.0767,-7.35562 c -0.57447,-4.95323 -5.68058,-5.29653 -9.71606,-5.70649 z m 40.98193,6.54806 24.01094,-13.71052 v -28.821247 -28.82126 h -0.15091 -0.15091 l -2.93408,1.62115 -2.93407,1.62114 -2.93429,1.71817 -2.93428,1.71817 -6.48229,3.70518 -6.4823,3.70518 -5.23307,3.04119 -5.23308,3.04118 -0.25377,0.47418 -0.25377,0.47417 c -0.26941,4.96868 -1.09667,9.64087 -3.47683,14.07358 -1.69223,3.712857 -5.30682,5.714467 -8.70147,7.705777 l -0.54736,1.02276 0.1514,5.10296 1.45693,1.08607 c 5.67445,-2.83566 1.54564,-1.93404 13.38272,-9.83269 3.07431,-2.97393 4.88489,-6.766477 5.93014,-10.879157 v -10.37529 c 0.13391,-1.41756 1.94903,-2.7093 3.40012,-2.69712 1.06101,0.009 3.43024,1.04801 3.22824,3.03314 l -0.34835,5.38821 0.90433,0.75053 c 3.33504,-1.51403 4.69062,-5.0797 6.26629,-8.16827 0.97075,-1.53729 2.7696,-1.71246 3.80687,-1.24363 1.04653,0.47303 2.57757,1.58139 2.12235,3.72429 -1.46348,3.32572 -3.24133,6.51266 -5.86172,9.07156 -1.73969,1.7013 -4.10964,2.52776 -6.25726,3.60737 -1.51107,1.38197 -2.53112,3.0008 -3.40807,4.838067 l 0.56672,0.90442 c 1.48661,0.28482 2.67301,-0.0267 4.02291,-0.66867 2.1239,-0.69205 3.44563,-2.465717 4.9658,-4.013347 1.26664,-1.11381 3.28221,-0.93637 4.3817,0.15604 1.01689,1.01035 2.22424,2.490017 0.51147,4.790587 -2.60642,2.57748 -5.8419,4.41711 -9.3084,5.57628 -3.03449,0.84327 -6.28531,0.66144 -9.41735,0.8293 -5.67408,2.56503 -10.77555,6.67564 -14.90465,11.3215 -0.12583,0.95067 0.60449,1.62337 1.10001,2.38125 8.33436,-0.31258 11.28603,-1.13059 17.53711,-7.21661 1.55169,-1.24954 2.98403,-0.69057 4.09457,0.23271 0.97058,0.80691 2.15291,2.67844 0.33502,5.13182 -3.0026,3.14278 -6.80257,5.16246 -10.87168,6.58737 -5.11102,1.61153 -5.75631,0.6512 -14.34832,2.58785 -1.45383,0.90224 -2.43548,2.05077 -3.28667,3.52477 l -0.0808,7.89358 -0.0808,7.89357 0.34535,-0.0884 0.34536,-0.0884 z m -31.15468,-22.09368 v -10.59474 -10.594737 c -1.21811,-0.809 -2.297,-1.551 -3.48536,-2.26664 -0.89719,-0.53464 -1.78527,-1.08465 -2.68586,-1.61357 -0.31275,3.34128 0.44282,6.84642 -0.80526,10.00488 -0.99294,3.487347 -3.6408,4.276487 -4.22057,7.307357 0.0134,1.23318 0.71869,1.80546 1.05187,2.12602 3.23777,2.84588 5.88297,5.14625 8.02851,6.61953 0.64135,0.29443 1.72516,-0.27102 2.11667,-0.9881 z m 12.43534,-24.938637 -2.70426,1.60096 -2.70427,1.60096 -0.54459,1.01758 v 5.74979 c 0.36869,0.71878 0.89171,0.93045 1.56908,0.635 3.24646,-2.5687 4.4255,-6.5793 4.38404,-10.60429 z m 42.46569,-31.82138 -0.004,-0.15227 -0.004,-0.15227 -48.10265,-27.64896 h -0.15409 -0.15408 l -0.012,31.08854 c 0,2.08154 -0.7647,3.48702 -3.13224,3.50919 -3.06395,-0.10276 -3.52357,-1.91844 -3.52357,-5.15623 0.0746,-6.60115 -0.0784,-12.80544 -0.0784,-29.43495 -14.16045,8.03959 -27.12211,15.92816 -48.02187,27.55611 v 0.17795 0.17794 c 0,-0.17794 51.72983,29.49604 51.44512,29.49604 h 0.28471 c -0.28471,0 51.45707,-29.46109 51.45707,-29.46109 z m -54.7635,25.88921 -0.006,-12.03019 c 0.34808,-1.15737 1.99053,-1.99921 3.36254,-1.9775 1.16883,0.0185 2.92444,1.15781 2.98746,2.7459 l -0.008,11.09643 c -0.95461,1.07394 -1.64367,1.8698 -3.02106,1.90043 -1.67841,0.0373 -2.14819,-0.64251 -3.31494,-1.73507 z m -12.52508,-6.92125 -0.31569,-1.24334 c -0.11483,-1.1976 -1.14333,-2.4324 -1.58426,-2.60131 -2.5898,-1.11888 -4.50207,-3.31215 -6.27131,-5.44384 0,0 -2.5337,-4.29153 -2.8068,-5.83127 -0.2731,-1.53974 -0.4918,-3.67807 1.29544,-4.69356 1.56481,-1.03909 3.09017,-0.40037 4.06329,0.59164 0.22935,0.2338 0.59072,0.63992 0.83322,1.54495 1.2604,3.99784 1.87196,5.21392 4.34289,7.53236 1.8928,0.47066 1.95147,-0.36269 2.18882,-1.16123 l -0.37803,-13.84185 c 0.2388,-1.11462 0.96833,-2.74078 3.19205,-2.77147 1.60472,-0.27199 2.55717,1.09367 3.33001,2.27321 l -0.0348,16.42737 c -0.008,0.49315 -0.14139,0.59992 -0.40939,1.60011 -1.21143,4.52112 -1.38432,4.48276 -1.14026,7.56628 l 0.18134,2.29125 -0.35232,1.11008 h -0.32455 -0.32455 z m 24.67877,2.48135 0.31631,-5.34968 -1.44627,-4.49792 -0.2227,-17.4625 c 0,-2.38787 1.9467,-3.22837 3.25251,-3.18388 1.60631,0.0547 3.21089,0.96188 3.21089,2.37032 l -0.35191,14.04273 c 0.0754,1.12281 0.71202,1.622 1.90993,1.49755 l 0.98333,-0.65074 c 2.46876,-1.7082 3.16023,-5.36831 4.04009,-8.1083 0.42784,-1.16565 2.38625,-1.71294 3.76761,-1.36012 1.30785,0.33406 2.72705,1.89604 2.32151,3.27907 -0.74484,3.03808 -2.10117,6.48213 -4.56128,9.26878 -0.92742,1.29941 -2.19183,2.10943 -3.47617,3.00939 -1.23785,0.67732 -2.07858,1.44717 -2.82604,2.58937 l -0.34385,2.15447 -0.49476,0.30898 -0.49476,0.30899 -2.31215,1.32576 -2.31214,1.32576 c -0.5695,0.24074 -0.88955,-0.0486 -0.96015,-0.86803 z"
|
|
46
|
+
id="path1"
|
|
47
|
+
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccsczccccccczcccczzczccccccczcszccccccccccccccccccccccccccccccccccccccccccccccsccccscccccccsccccccsccccccccccccccccccccccccccccccccccccccccccccsccsccccczcscccccccsccccccccccscccccsccccccccccc" /><text
|
|
48
|
+
xml:space="preserve"
|
|
49
|
+
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:83.8112px;line-height:2;font-family:'Edu AU VIC WA NT Pre';-inkscape-font-specification:'Edu AU VIC WA NT Pre Semi-Bold';text-align:center;text-decoration-color:#000000;letter-spacing:-0.402293px;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;stroke-width:1.43066"
|
|
50
|
+
x="549.49823"
|
|
51
|
+
y="-72.142212"
|
|
52
|
+
id="text1"><tspan
|
|
53
|
+
sodipodi:role="line"
|
|
54
|
+
id="tspan1"
|
|
55
|
+
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:'Edu AU VIC WA NT Pre';-inkscape-font-specification:'Edu AU VIC WA NT Pre Semi-Bold';stroke-width:1.43066"
|
|
56
|
+
x="549.29706"
|
|
57
|
+
y="-72.142212">Coralite</tspan></text></g></svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="479.0517mm"
|
|
6
|
+
height="138.19606mm"
|
|
7
|
+
viewBox="0 0 479.0517 138.19606"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg1"
|
|
10
|
+
xml:space="preserve"
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
|
13
|
+
id="defs1" /><g
|
|
14
|
+
id="layer1"
|
|
15
|
+
transform="translate(-242.88389,179.7934)"><path
|
|
16
|
+
style="fill:#000000"
|
|
17
|
+
d="m 298.57278,-42.548343 -1.57193,-0.95101 -8.46667,-4.82686 -8.46666,-4.82685 -7.54063,-4.25358 -7.54062,-4.25357 -9.92188,-5.54313 -9.92187,-5.54312 -0.83747,-0.7842 -0.83748,-0.7842 -0.29184,-1.08381 -0.29184,-1.08381 0.071,-34.349607 0.071,-34.34961 0.45352,-0.82838 0.45352,-0.82838 0.74506,-0.62683 0.74505,-0.62683 3.69622,-2.09811 3.69622,-2.09811 5.29166,-3.03444 5.29167,-3.03444 7.14375,-4.10268 7.14375,-4.10269 4.49791,-2.55913 4.49792,-2.55913 5.82083,-3.39734 5.82084,-3.39733 2.4974,-1.31786 1.40074,-2e-5 c 2.86306,1.50973 6.36082,3.41854 9.45889,5.21825 l 8.3388,4.84409 18.91771,10.78535 18.9177,10.78535 0.84627,0.80042 0.84627,0.80042 0.27821,1.29725 0.27821,1.29724 -0.006,33.91979 -0.006,33.919787 -0.49105,1.05833 -0.49104,1.05833 -0.89221,0.81561 -0.8922,0.8156 -10.05417,5.64853 -10.05417,5.64852 -17.05914,9.7416 -17.05915,9.7416 h -1.47725 -1.47725 z m -10.07626,-28.1711 c -4.18857,-0.51534 -7.77638,-1.17424 -10.84552,-2.53296 -2.92767,-1.2961 -5.36699,-3.24983 -8.06878,-5.47912 -0.94895,-0.89498 -1.34047,-3.57834 0.005,-4.97691 1.34533,-1.39856 3.76756,-1.16911 4.92419,-0.27754 l 4.37699,4.02218 c 3.86085,2.30005 8.30646,2.74342 12.6829,3.2415 1.12639,-0.19663 1.56927,-0.94448 1.32865,-2.24354 -1.88926,-1.88481 -3.92259,-3.6124 -5.93549,-5.3617 -2.95933,-2.86246 -6.11886,-5.27287 -9.85143,-7.02012 -7.50215,-0.56709 -13.13233,-2.0385 -18.58347,-6.33354 -0.63866,-0.58882 -0.58007,-2.610077 0.39438,-3.820617 0.97445,-1.21054 3.30629,-1.58259 4.48868,-0.94795 l 1.79605,1.30939 c 1.9763,1.476157 5.23436,3.310727 7.71354,2.827177 l 0.38902,-0.14928 c -0.2606,-1.02271 -0.97521,-1.785997 -1.54093,-2.645167 -0.51971,-0.82928 -1.27764,-1.60239 -2.1114,-2.20081 -0.83377,-0.59842 -1.64526,-0.90244 -2.5306,-1.25733 -1.85425,-0.84855 -3.2686,-1.87817 -4.85167,-3.70328 -1.58306,-1.82511 -3.05131,-4.5981 -4.30168,-7.08018 -0.75466,-3.36601 2.78893,-5.94414 5.70784,-3.02773 l 1.31327,2.46697 c 0.64344,1.68533 1.69338,2.86145 2.91215,4.12628 l 1.59888,1.65931 c 0.44025,0.17148 0.66734,0.0958 1.08174,-0.0661 0.84942,-1.81566 0.35088,-3.71933 0.0963,-5.60376 -0.0771,-0.72919 0.25197,-2.94957 2.76903,-3.2113 2.51706,-0.26173 4.13752,1.51643 3.83534,5.44163 -0.52005,8.56828 -0.26417,10.4647 2.97336,13.27877 0.74309,0.645897 2.30507,0.527127 2.8468,0.23536 0.54173,-0.29177 2.10712,-2.70109 2.10712,-2.70109 1.21222,-3.1555 1.37903,-10.89808 -0.65124,-12.90162 l -3.04271,-1.78178 -3.0427,-1.78178 c -9.66534,-5.24713 -18.86526,-11.36145 -28.69225,-16.30833 h -0.13983 -0.13984 v 28.70397 28.703977 l 0.99219,0.62357 0.99218,0.62357 4.8948,2.77803 4.89479,2.77804 10.71562,6.04275 10.71563,6.04275 7.40833,4.20767 7.40834,4.20767 0.26458,0.25535 0.26458,0.25534 0.0767,-7.35561 0.0767,-7.35562 c -0.57447,-4.95323 -5.68058,-5.29653 -9.71606,-5.70649 z m 40.98193,6.54806 24.01094,-13.71052 v -28.821247 -28.82126 h -0.15091 -0.15091 l -2.93408,1.62115 -2.93407,1.62114 -2.93429,1.71817 -2.93428,1.71817 -6.48229,3.70518 -6.4823,3.70518 -5.23307,3.04119 -5.23308,3.04118 -0.25377,0.47418 -0.25377,0.47417 c -0.26941,4.96868 -1.09667,9.64087 -3.47683,14.07358 -1.69223,3.712857 -5.30682,5.714467 -8.70147,7.705777 l -0.54736,1.02276 0.1514,5.10296 1.45693,1.08607 c 5.67445,-2.83566 1.54564,-1.93404 13.38272,-9.83269 3.07431,-2.97393 4.88489,-6.766477 5.93014,-10.879157 v -10.37529 c 0.13391,-1.41756 1.94903,-2.7093 3.40012,-2.69712 1.06101,0.009 3.43024,1.04801 3.22824,3.03314 l -0.34835,5.38821 0.90433,0.75053 c 3.33504,-1.51403 4.69062,-5.0797 6.26629,-8.16827 0.97075,-1.53729 2.7696,-1.71246 3.80687,-1.24363 1.04653,0.47303 2.57757,1.58139 2.12235,3.72429 -1.46348,3.32572 -3.24133,6.51266 -5.86172,9.07156 -1.73969,1.7013 -4.10964,2.52776 -6.25726,3.60737 -1.51107,1.38197 -2.53112,3.0008 -3.40807,4.838067 l 0.56672,0.90442 c 1.48661,0.28482 2.67301,-0.0267 4.02291,-0.66867 2.1239,-0.69205 3.44563,-2.465717 4.9658,-4.013347 1.26664,-1.11381 3.28221,-0.93637 4.3817,0.15604 1.01689,1.01035 2.22424,2.490017 0.51147,4.790587 -2.60642,2.57748 -5.8419,4.41711 -9.3084,5.57628 -3.03449,0.84327 -6.28531,0.66144 -9.41735,0.8293 -5.67408,2.56503 -10.77555,6.67564 -14.90465,11.3215 -0.12583,0.95067 0.60449,1.62337 1.10001,2.38125 8.33436,-0.31258 11.28603,-1.13059 17.53711,-7.21661 1.55169,-1.24954 2.98403,-0.69057 4.09457,0.23271 0.97058,0.80691 2.15291,2.67844 0.33502,5.13182 -3.0026,3.14278 -6.80257,5.16246 -10.87168,6.58737 -5.11102,1.61153 -5.75631,0.6512 -14.34832,2.58785 -1.45383,0.90224 -2.43548,2.05077 -3.28667,3.52477 l -0.0808,7.89358 -0.0808,7.89357 0.34535,-0.0884 0.34536,-0.0884 z m -31.15468,-22.09368 v -10.59474 -10.594737 c -1.21811,-0.809 -2.297,-1.551 -3.48536,-2.26664 -0.89719,-0.53464 -1.78527,-1.08465 -2.68586,-1.61357 -0.31275,3.34128 0.44282,6.84642 -0.80526,10.00488 -0.99294,3.487347 -3.6408,4.276487 -4.22057,7.307357 0.0134,1.23318 0.71869,1.80546 1.05187,2.12602 3.23777,2.84588 5.88297,5.14625 8.02851,6.61953 0.64135,0.29443 1.72516,-0.27102 2.11667,-0.9881 z m 12.43534,-24.938637 -2.70426,1.60096 -2.70427,1.60096 -0.54459,1.01758 v 5.74979 c 0.36869,0.71878 0.89171,0.93045 1.56908,0.635 3.24646,-2.5687 4.4255,-6.5793 4.38404,-10.60429 z m 42.46569,-31.82138 -0.004,-0.15227 -0.004,-0.15227 -48.10265,-27.64896 h -0.15409 -0.15408 l -0.012,31.08854 c 0,2.08154 -0.7647,3.48702 -3.13224,3.50919 -3.06395,-0.10276 -3.52357,-1.91844 -3.52357,-5.15623 0.0746,-6.60115 -0.0784,-12.80544 -0.0784,-29.43495 -14.16045,8.03959 -27.12211,15.92816 -48.02187,27.55611 v 0.17795 0.17794 c 0,-0.17794 51.72983,29.49604 51.44512,29.49604 h 0.28471 c -0.28471,0 51.45707,-29.46109 51.45707,-29.46109 z m -54.7635,25.88921 -0.006,-12.03019 c 0.34808,-1.15737 1.99053,-1.99921 3.36254,-1.9775 1.16883,0.0185 2.92444,1.15781 2.98746,2.7459 l -0.008,11.09643 c -0.95461,1.07394 -1.64367,1.8698 -3.02106,1.90043 -1.67841,0.0373 -2.14819,-0.64251 -3.31494,-1.73507 z m -12.52508,-6.92125 -0.31569,-1.24334 c -0.11483,-1.1976 -1.14333,-2.4324 -1.58426,-2.60131 -2.5898,-1.11888 -4.50207,-3.31215 -6.27131,-5.44384 0,0 -2.5337,-4.29153 -2.8068,-5.83127 -0.2731,-1.53974 -0.4918,-3.67807 1.29544,-4.69356 1.56481,-1.03909 3.09017,-0.40037 4.06329,0.59164 0.22935,0.2338 0.59072,0.63992 0.83322,1.54495 1.2604,3.99784 1.87196,5.21392 4.34289,7.53236 1.8928,0.47066 1.95147,-0.36269 2.18882,-1.16123 l -0.37803,-13.84185 c 0.2388,-1.11462 0.96833,-2.74078 3.19205,-2.77147 1.60472,-0.27199 2.55717,1.09367 3.33001,2.27321 l -0.0348,16.42737 c -0.008,0.49315 -0.14139,0.59992 -0.40939,1.60011 -1.21143,4.52112 -1.38432,4.48276 -1.14026,7.56628 l 0.18134,2.29125 -0.35232,1.11008 h -0.32455 -0.32455 z m 24.67877,2.48135 0.31631,-5.34968 -1.44627,-4.49792 -0.2227,-17.4625 c 0,-2.38787 1.9467,-3.22837 3.25251,-3.18388 1.60631,0.0547 3.21089,0.96188 3.21089,2.37032 l -0.35191,14.04273 c 0.0754,1.12281 0.71202,1.622 1.90993,1.49755 l 0.98333,-0.65074 c 2.46876,-1.7082 3.16023,-5.36831 4.04009,-8.1083 0.42784,-1.16565 2.38625,-1.71294 3.76761,-1.36012 1.30785,0.33406 2.72705,1.89604 2.32151,3.27907 -0.74484,3.03808 -2.10117,6.48213 -4.56128,9.26878 -0.92742,1.29941 -2.19183,2.10943 -3.47617,3.00939 -1.23785,0.67732 -2.07858,1.44717 -2.82604,2.58937 l -0.34385,2.15447 -0.49476,0.30898 -0.49476,0.30899 -2.31215,1.32576 -2.31214,1.32576 c -0.5695,0.24074 -0.88955,-0.0486 -0.96015,-0.86803 z"
|
|
18
|
+
id="path1" /><path
|
|
19
|
+
d="m 408.49003,-72.100306 q -5.90869,0 -10.60212,-2.640053 -4.69343,-2.681959 -7.79444,-7.543008 -3.10102,-4.902956 -4.19056,-11.565946 -1.08955,-6.704897 0.33524,-14.750777 1.38289,-7.62681 3.60389,-14.03837 2.22099,-6.45346 5.40582,-11.48214 3.18482,-5.07057 7.37538,-8.63255 4.19056,-3.56198 9.47067,-5.40582 5.32201,-1.84385 11.77547,-1.84385 5.61535,0 10.64403,1.84385 5.02867,1.80194 9.764,6.24393 1.96957,1.76004 2.59815,3.93913 0.67049,2.13718 -1.04764,3.85531 -1.71813,1.71813 -3.89722,1.29908 -2.17909,-0.41906 -4.19056,-2.17909 -3.10102,-3.01721 -6.45346,-4.27438 -3.35245,-1.25716 -7.50111,-1.25716 -4.65152,0 -8.46493,1.5086 -3.7715,1.46669 -6.78871,4.27437 -2.97529,2.76577 -5.2801,6.7049 -2.2629,3.93912 -3.85532,8.84208 -1.59241,4.90295 -2.59814,10.64402 -1.00574,5.9925 -0.58668,10.937362 0.46096,4.902956 2.09528,8.506837 1.67622,3.603882 4.31627,5.573445 2.64006,1.927658 5.99251,1.927658 5.36391,0 10.39258,-2.514336 5.02868,-2.556242 9.00971,-6.830613 2.09528,-2.220997 3.64579,-3.059109 1.59241,-0.838112 2.97529,-0.838112 2.09528,0 3.18483,1.089546 1.13145,1.04764 1.17336,2.556241 0,1.424791 -0.83812,2.849581 -0.83811,1.382885 -3.0591,3.855316 -5.1963,5.699161 -12.23644,9.05161 -7.04014,3.352448 -14.37362,3.352448 z m 50.63872,0.419056 q -6.53727,0 -10.26687,-4.86105 -3.7296,-4.902955 -3.7296,-13.24217 0,-7.584914 2.38862,-13.15836 2.43052,-5.57344 6.78871,-8.59065 4.40009,-3.0172 10.30878,-3.0172 1.04764,0 2.43052,0.20953 1.42479,0.16762 2.76577,0.41905 1.34098,0.20953 2.09528,0.37715 0.25143,0 1.00573,0.16763 0.79621,0.12571 2.89149,0.50286 2.13719,0.37715 6.32775,1.21527 2.38862,0.50286 3.56197,1.88575 1.17336,1.38288 1.17336,3.14292 0,2.80767 -1.88575,4.19056 -1.88575,1.34098 -4.73534,1.13145 l -0.96382,-0.16762 q 0.16762,0.54477 0.25143,1.21526 0.0838,0.628584 0.0838,1.340979 0,5.489634 -1.67622,10.434495 -1.63432,4.902955 -4.4839,8.674459 -2.84958,3.771504 -6.57918,5.950595 -3.6877,2.179092 -7.75254,2.179092 z m 0.83811,-9.303044 q 2.64006,0 4.81915,-2.47243 2.22099,-2.514336 3.56197,-6.57918 1.34098,-4.106749 1.34098,-8.925893 0,-3.101013 -1.5505,-4.735333 -1.55051,-1.63432 -4.19056,-1.63432 -2.72387,0 -4.81915,1.92766 -2.05337,1.88575 -3.22673,5.405822 -1.13145,3.478165 -1.13145,8.255403 0,4.022938 1.38288,6.411557 1.42479,2.346714 3.81341,2.346714 z m 43.93391,8.842082 q -2.05338,0 -3.64579,-1.340979 -1.59241,-1.382885 -1.17336,-3.81341 l 3.93913,-22.419497 q 0.12572,-0.628582 0.0838,-1.299072 -0.0419,-0.7124 -0.20953,-1.29907 -0.16762,-0.58668 -0.46096,-0.96383 -0.29334,-0.37715 -0.7543,-0.37715 -1.00573,0 -1.63432,0.46096 -0.58668,0.46096 -1.04764,1.21526 l -1.59241,2.262902 q -0.83811,1.257168 -1.80194,2.09528 -0.92192,0.796207 -1.96956,0.796207 -1.71813,0 -3.10102,-1.04764 -1.34098,-1.089546 -1.34098,-3.268639 0,-1.00573 0.46096,-2.64005 0.46096,-1.67623 2.09528,-3.64579 2.55625,-3.22673 5.07058,-4.98676 2.55624,-1.76004 6.11822,-1.63432 2.80767,0.0419 5.19629,1.21526 2.43053,1.17336 4.02294,3.26864 1.63432,2.09528 1.96956,4.94486 3.22674,-4.77724 5.99251,-7.33348 2.76577,-2.55625 4.98676,-2.55625 1.92766,0 2.72387,0.75431 0.7962,0.71239 1.34098,1.46669 0.58667,0.7543 1.80194,0.7543 1.17335,0 2.38862,-0.7543 1.25716,-0.7543 1.88575,-1.21526 1.17335,-0.7543 2.89148,-0.83811 1.76004,-0.0838 3.14292,0.88002 1.38289,0.96382 1.38289,3.22673 0,1.59241 -0.79621,2.64005 -0.7543,1.00573 -1.84384,1.67622 -1.04764,0.62859 -2.01147,1.13145 -1.67623,0.92193 -3.81341,1.84385 -2.13719,0.92192 -3.52007,0.92192 -1.67623,0 -2.9753,-0.67049 -1.29907,-0.67049 -2.38862,-1.34097 -1.08955,-0.67049 -2.09528,-0.67049 -0.79621,0 -2.2629,1.29907 -1.4667,1.25717 -3.64579,4.232465 -2.17909,2.933392 -5.02867,8.00397 l -2.55624,14.541244 q -0.37715,2.220997 -2.17909,3.352448 -1.76004,1.131451 -3.64579,1.131451 z m 47.16058,0.544773 q -4.02294,0 -6.7049,-2.179091 -2.64005,-2.220997 -3.60388,-6.285841 -0.92192,-4.106749 0.0838,-9.680194 1.34098,-7.501102 4.52581,-12.948835 3.22673,-5.44772 7.83635,-8.42302 4.65152,-2.9753 10.22496,-2.9753 h 12.6974 q 2.55624,0 3.43626,1.67623 0.92192,1.63431 0.41906,4.35818 l -3.39436,19.905158 q -0.20953,1.215263 -0.29334,2.220997 -0.0419,1.005735 0.0419,1.760035 0.12571,0.754301 0.37715,1.215263 0.29334,0.419056 0.7543,0.419056 0.79621,0 1.5086,-0.460962 0.7124,-0.502867 1.25717,-1.257168 l 1.55051,-2.262902 q 0.83811,-1.257168 1.76003,-2.053375 0.96383,-0.838112 2.01147,-0.838112 1.76004,0 3.05911,1.089546 1.34098,1.04764 1.34098,3.226731 0,1.005735 -0.46096,2.681959 -0.41906,1.634318 -2.05338,3.645787 -2.51433,3.184826 -5.07058,4.902955 -2.51433,1.71813 -6.0344,1.71813 -4.73534,0 -7.20777,-3.352448 -2.47243,-3.352448 -2.89148,-8.171592 l 0.0419,-0.921924 q -2.64005,4.274372 -5.2382,7.165858 -2.59814,2.891487 -5.07057,4.358183 -2.47244,1.466696 -4.90296,1.466696 z m 2.84958,-9.261138 q 1.55051,0 3.98103,-2.598147 2.47243,-2.640053 5.32201,-7.543009 2.89149,-4.944861 5.65726,-11.859287 l 0.41906,-2.01147 h -5.53154 q -2.93339,0 -5.40583,1.88576 -2.47243,1.88575 -4.23246,5.280101 -1.76004,3.352448 -2.55624,7.920159 -0.67049,3.981032 0.0419,6.453462 0.7543,2.472431 2.30481,2.472431 z m 51.97971,8.716365 q -3.22673,0 -5.44773,-1.550507 -2.17909,-1.550507 -3.43626,-4.064844 -1.21526,-2.514336 -1.5505,-5.531539 -0.33525,-3.059109 0.16762,-6.076312 l 9.93163,-56.572566 q 0.41905,-2.22099 1.96956,-3.10101 1.55051,-0.92192 3.26864,-0.92192 2.22099,0 3.93912,1.38288 1.71813,1.38289 1.25717,3.93913 l -9.764,55.441108 q -0.25144,1.424791 -0.37715,2.681959 -0.0838,1.215262 0,2.09528 0.0838,0.880017 0.37715,1.382885 0.29333,0.502867 0.7543,0.502867 0.83811,0 1.5505,-0.460962 0.7124,-0.502867 1.21527,-1.257168 l 1.5505,-2.262902 q 0.83812,-1.257168 1.80194,-2.053375 0.96383,-0.838112 2.01147,-0.838112 1.71813,0 3.05911,1.089546 1.34098,1.04764 1.34098,3.226731 0,1.005735 -0.46096,2.681959 -0.41906,1.634318 -2.05337,3.645787 -2.55625,3.184826 -5.07058,4.902955 -2.51434,1.71813 -6.03441,1.71813 z m 31.69728,-50.286718 q -2.2629,0 -3.93913,-1.63432 -1.67622,-1.67623 -1.67622,-4.06485 0,-2.2629 1.63432,-3.93912 1.63432,-1.71813 3.98103,-1.71813 2.221,0 3.98103,1.63432 1.80194,1.59241 1.80194,4.02293 0,2.38862 -1.71813,4.06485 -1.67622,1.63432 -4.06484,1.63432 z m -1.76003,50.286718 q -3.18483,0 -5.40583,-1.508602 -2.17909,-1.508601 -3.43626,-3.981032 -1.25716,-2.514336 -1.63432,-5.489634 -0.33524,-3.017203 0.12572,-6.034406 l 3.64579,-20.366124 q 0.0838,-0.7543 0.67049,-1.84384 0.62858,-1.08955 1.92766,-1.88576 1.34098,-0.83811 3.56197,-0.83811 2.51434,0 3.6877,1.38289 1.17335,1.34098 0.7543,3.72959 l -3.52007,19.821354 q -0.33525,1.927658 -0.41906,3.436259 -0.0419,1.508602 0.20953,2.346714 0.29334,0.838112 0.92192,0.838112 0.83811,0 1.55051,-0.460962 0.71239,-0.502867 1.21526,-1.257168 l 1.55051,-2.262902 q 0.83811,-1.257168 1.80194,-2.053375 0.96383,-0.838112 2.01147,-0.838112 1.71813,0 3.05911,1.089546 1.34098,1.04764 1.34098,3.226731 0,1.005735 -0.46097,2.681959 -0.41905,1.634318 -2.05337,3.645787 -2.55624,3.184826 -5.07058,4.902955 -2.51433,1.71813 -6.0344,1.71813 z m 32.07454,0 q -3.18483,0 -5.40583,-1.508602 -2.17909,-1.508601 -3.47816,-3.939126 -1.25717,-2.472431 -1.63432,-5.447728 -0.33525,-2.975298 0.16762,-5.950596 l 2.80768,-16.091746 h -5.86679 q -2.59814,0 -3.93912,-1.25717 -1.34098,-1.25717 -1.34098,-3.22673 0,-1.96957 1.34098,-3.22674 1.34098,-1.29907 3.89722,-1.29907 h 7.5011 l 3.89722,-22.20997 q 0.33525,-1.84384 1.88575,-2.84958 1.59242,-1.04764 3.31055,-1.04764 1.46669,0 2.80767,0.46096 1.34098,0.46096 2.09528,1.55051 0.7543,1.04764 0.41906,2.89149 l -3.7296,21.20423 h 6.95633 q 2.64005,0 3.98103,1.29907 1.34098,1.25717 1.34098,3.22674 0,1.96956 -1.34098,3.22673 -1.34098,1.25717 -3.98103,1.25717 h -8.50684 l -2.89149,16.385085 q -0.25143,1.299074 -0.33524,2.430525 -0.0419,1.131452 0.0419,1.969564 0.0838,0.838112 0.33524,1.299073 0.25143,0.460962 0.7543,0.460962 0.83811,0 1.55051,-0.460962 0.71239,-0.502867 1.21526,-1.257168 l 1.59241,-2.262902 q 0.83812,-1.257168 1.76004,-2.053375 0.96383,-0.838112 1.96956,-0.838112 1.76004,0 3.10102,1.089546 1.34098,1.04764 1.34098,3.226731 0,1.005735 -0.46097,2.681959 -0.41905,1.634318 -2.09528,3.645787 -2.51433,3.184826 -5.07057,4.902955 -2.51434,1.71813 -5.9925,1.71813 z m 32.61939,0.754301 q -6.36966,0 -9.6802,-3.729599 -3.26864,-3.771504 -3.26864,-10.769739 0,-5.741068 1.92766,-10.937362 1.92766,-5.238199 5.1963,-9.303039 3.31054,-4.06485 7.5011,-6.36966 4.23247,-2.34671 8.84208,-2.34671 5.40582,0 8.12969,2.2629 2.76577,2.26291 2.76577,6.57918 0,2.01147 -0.92193,3.89722 -0.88001,1.88576 -2.59814,3.64579 -1.67623,1.760036 -4.02294,3.43626 -2.34671,1.634318 -5.2382,3.268637 -2.01147,1.173356 -5.02867,2.723864 -3.01721,1.508601 -6.16013,3.017203 0,0.712395 0.0838,1.340979 0.0838,0.586679 0.20952,1.131451 0.29334,1.299074 1.08955,2.220997 0.79621,0.880018 1.92766,0.880018 2.05337,0 4.10675,-1.089546 2.09528,-1.131451 3.72959,-3.14292 1.84385,-2.137185 3.81341,-2.723864 2.01147,-0.586678 3.60389,0.628584 0.7962,0.586679 1.29907,1.71813 0.54477,1.089545 0.29334,2.640053 -0.20953,1.508601 -1.71813,3.352448 -2.89149,3.52007 -7.12395,5.61535 -4.19056,2.053375 -8.75827,2.053375 z m -1.34098,-23.509043 q 1.29907,-0.670489 2.64005,-1.42479 1.34098,-0.754301 2.64005,-1.466696 2.47243,-1.42479 4.19056,-2.68196 1.71813,-1.29907 2.68196,-2.38862 0.96383,-1.13145 0.96383,-2.05337 0,-0.67049 -0.41906,-1.21526 -0.41905,-0.58668 -1.21526,-0.58668 -2.55624,0 -4.81914,1.5505 -2.221,1.50861 -3.93913,4.19056 -1.67622,2.640057 -2.72386,6.076316 z"
|
|
20
|
+
id="text1"
|
|
21
|
+
style="font-weight:600;font-size:83.8112px;line-height:2;font-family:'Edu AU VIC WA NT Pre';-inkscape-font-specification:'Edu AU VIC WA NT Pre Semi-Bold';text-align:center;letter-spacing:-0.402293px;text-anchor:middle;fill:#000000;stroke-width:1.43066"
|
|
22
|
+
aria-label="Coralite" /></g></svg>
|