nibula 1.5.3 → 1.6.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/CHANGELOG.md +38 -0
- package/README.md +2 -0
- package/bin/create.js +1 -1
- package/bin/delegate.js +58 -0
- package/bin/nibula.js +4 -19
- package/docs/Assistant CLI.md +3 -3
- package/docs/Components.md +68 -12
- package/docs/Creating pages.md +18 -13
- package/docs/Head and SEO.md +7 -6
- package/docs/Javascript.md +11 -9
- package/docs/Styling with SCSS.md +9 -11
- package/package.json +17 -22
- package/src/frontend/components/welcome.njk +1 -0
- package/src/frontend/data/pages.json +27 -0
- package/src/frontend/data/site.json +1 -28
- package/src/frontend/js/global.js +11 -0
- package/src/frontend/js/pages/404.js +2 -1
- package/src/frontend/js/pages/homepage.js +2 -1
- package/src/frontend/layouts/base.njk +23 -19
- package/src/frontend/scss/{modules/_global.scss → _global.scss} +9 -10
- package/src/frontend/scss/_root.scss +14 -0
- package/src/frontend/scss/modules/_animations.scss +1 -1
- package/src/frontend/scss/modules/_footer.scss +2 -1
- package/src/frontend/scss/modules/_header.scss +1 -2
- package/src/frontend/scss/modules/_mobile.scss +1 -1
- package/src/frontend/scss/modules/_typography.scss +5 -1
- package/src/frontend/scss/pages/404.scss +2 -2
- package/src/frontend/scss/pages/homepage.scss +2 -2
- package/src/frontend/sitemap.njk +1 -1
- package/src/frontend/ts/global.ts +12 -0
- package/src/frontend/ts/pages/404.ts +2 -1
- package/src/frontend/ts/pages/homepage.ts +2 -1
- package/tools/cli/ui.js +17 -3
- package/tools/config/messages.json +10 -8
- package/tools/config/settings.json +2 -6
- package/tools/lib/pageActions.js +8 -5
- package/tools/lib/pagesData.js +88 -0
- package/tools/lib/paths.js +8 -5
- package/tools/lib/validation.js +1 -0
- package/tools/res/templates/template.js +1 -1
- package/tools/res/templates/template.scss +3 -3
- package/tools/res/templates/template.ts +2 -1
- package/src/frontend/js/modules/global.js +0 -10
- package/src/frontend/scss/modules/_root.scss +0 -35
- package/src/frontend/ts/modules/global.ts +0 -10
- package/tools/lib/siteData.js +0 -89
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// NOTE: This file contains only Sass variables (no CSS output).
|
|
2
|
-
// When imported with @import, all variables are global and may be
|
|
3
|
-
// overwritten by other imported files with the same variable names.
|
|
4
|
-
// Use @use 'root' as root; to avoid namespace collisions.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
//==========================
|
|
8
|
-
// STRUCTURE
|
|
9
|
-
//==========================
|
|
10
|
-
$header-height: 10vh;
|
|
11
|
-
$header-padding-y: 15px;
|
|
12
|
-
$header-padding-x: 15px;
|
|
13
|
-
|
|
14
|
-
//==========================
|
|
15
|
-
// COLORS — BASE
|
|
16
|
-
//==========================
|
|
17
|
-
$primary: rgba(0, 0, 0, 0.5);
|
|
18
|
-
$secondary: #a3dcff;
|
|
19
|
-
$accent: #f9a8c9;
|
|
20
|
-
|
|
21
|
-
//==========================
|
|
22
|
-
// COLORS — NEUTRALS
|
|
23
|
-
//==========================
|
|
24
|
-
$white: #ffffff;
|
|
25
|
-
$light: #f5f5f5;
|
|
26
|
-
$muted: #888888;
|
|
27
|
-
$dark: #2d2d2d;
|
|
28
|
-
|
|
29
|
-
//==========================
|
|
30
|
-
// COLORS — SEMANTIC
|
|
31
|
-
//==========================
|
|
32
|
-
$success: #198754;
|
|
33
|
-
$warning: #ffc107;
|
|
34
|
-
$danger: #dc3545;
|
|
35
|
-
$info: #0dcaf0;
|
package/tools/lib/siteData.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const settings = require('../config/settings.json');
|
|
3
|
-
const { PATHS } = require('./paths');
|
|
4
|
-
const { exists, readText, writeJson } = require('./files');
|
|
5
|
-
const { log } = require('./logger');
|
|
6
|
-
const { toCamelCase, toTitleCase, formatValue } = require('./text');
|
|
7
|
-
|
|
8
|
-
const PAGES_KEY = settings.page.dataKeys.pages;
|
|
9
|
-
const SEO_KEY = settings.page.dataKeys.seo;
|
|
10
|
-
const TITLE_KEY = settings.page.dataKeys.title;
|
|
11
|
-
|
|
12
|
-
function readSiteData() {
|
|
13
|
-
if (!exists(PATHS.siteData)) {
|
|
14
|
-
log('siteData.fileMissing', { path: PATHS.siteData });
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const data = JSON.parse(readText(PATHS.siteData));
|
|
19
|
-
if (!data[PAGES_KEY] || typeof data[PAGES_KEY] !== 'object') data[PAGES_KEY] = {};
|
|
20
|
-
return data;
|
|
21
|
-
} catch (error) {
|
|
22
|
-
log('siteData.parseFailed', { file: path.basename(PATHS.siteData), error: error.message });
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function writeSiteData(data) {
|
|
28
|
-
writeJson(PATHS.siteData, data);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function createRecord(pageName) {
|
|
32
|
-
return formatValue(settings.page.defaultData, { title: toTitleCase(pageName) });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function addSiteData(pageName) {
|
|
36
|
-
const data = readSiteData();
|
|
37
|
-
if (!data) return;
|
|
38
|
-
|
|
39
|
-
const camelName = toCamelCase(pageName);
|
|
40
|
-
if (data[PAGES_KEY][camelName]) {
|
|
41
|
-
log('siteData.recordExists', { name: camelName });
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
data[PAGES_KEY][camelName] = createRecord(pageName);
|
|
46
|
-
|
|
47
|
-
writeSiteData(data);
|
|
48
|
-
log('siteData.recordAdded', { name: camelName });
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function removeSiteData(pageName) {
|
|
52
|
-
const data = readSiteData();
|
|
53
|
-
if (!data) return;
|
|
54
|
-
|
|
55
|
-
const camelName = toCamelCase(pageName);
|
|
56
|
-
if (!data[PAGES_KEY][camelName]) {
|
|
57
|
-
log('siteData.recordMissing', { name: camelName });
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
delete data[PAGES_KEY][camelName];
|
|
62
|
-
writeSiteData(data);
|
|
63
|
-
log('siteData.recordRemoved', { name: camelName });
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function renameSiteData(oldName, newName) {
|
|
67
|
-
const data = readSiteData();
|
|
68
|
-
if (!data) return;
|
|
69
|
-
|
|
70
|
-
const oldCamelName = toCamelCase(oldName);
|
|
71
|
-
const newCamelName = toCamelCase(newName);
|
|
72
|
-
|
|
73
|
-
if (!data[PAGES_KEY][oldCamelName]) {
|
|
74
|
-
log('siteData.recordMissing', { name: oldCamelName });
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (data[PAGES_KEY][newCamelName]) {
|
|
78
|
-
log('siteData.recordExists', { name: newCamelName });
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
data[PAGES_KEY][newCamelName] = data[PAGES_KEY][oldCamelName];
|
|
83
|
-
delete data[PAGES_KEY][oldCamelName];
|
|
84
|
-
|
|
85
|
-
writeSiteData(data);
|
|
86
|
-
log('siteData.recordRenamed', { source: oldCamelName, destination: newCamelName });
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
module.exports = { addSiteData, removeSiteData, renameSiteData };
|