ultimate-jekyll-manager 1.9.5 → 1.9.7
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/dist/assets/css/core/_initialize.scss +0 -11
- package/dist/assets/css/core/_utilities.scss +5 -2
- package/dist/assets/js/libs/form-manager.js +5 -10
- package/dist/defaults/_.gitignore +4 -0
- package/dist/defaults/dist/_includes/core/body.html +1 -7
- package/package.json +8 -1
- package/.nvmrc +0 -1
- package/CHANGELOG.md +0 -804
- package/CLAUDE-ATTRIBUTION.md +0 -215
- package/PROGRESS.md +0 -36
- package/TODO-ATTRIBUTION2.md +0 -753
- package/TODO-AUTH-TESTING.md +0 -165
- package/TODO-BACKEND.md +0 -13
- package/TODO-CHAT1.md +0 -41
- package/TODO-CONSENT-LIVETEST.md +0 -201
- package/TODO-NEW.md +0 -21
- package/TODO-themes.md +0 -34
- package/TODO-tracking.md +0 -69
- package/TODO-tracking2.md +0 -103
- package/TODO.md +0 -415
- package/_notes/CLAUDE-pages.md +0 -19
- package/_notes/CLAUDE-pages2.md +0 -18
- package/_notes/LOGOS.md +0 -1
- package/_notes/NOTES-app.md +0 -92
- package/_notes/NOTES-sub-2.md +0 -42
- package/_notes/NOTES-sub-ai.md +0 -165
- package/_notes/NOTES-sub-endpoints.md +0 -44
- package/_notes/NOTES-sub-example.md +0 -92
- package/_notes/NOTES-sub-plan.md +0 -36
- package/_notes/NOTES-sub-status.md +0 -123
- package/_notes/TODO-Claude.rtf +0 -105
- package/_notes/TODO-FileStructure.md +0 -249
- package/_notes/TODO-checkout.md +0 -33
- package/_notes/TODO-frontend.md +0 -61
- package/_notes/TODO-legacy.md +0 -18
- package/_notes/TODO-template-system.md +0 -73
- package/_notes/TODO-theme.md +0 -17
- package/logs/test.log +0 -144
- package/plans/fix-translation-exclude-404s.md +0 -113
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
⏺ Based on my analysis, here's my comprehensive naming and organization proposal for your Ultimate Jekyll
|
|
2
|
-
template system:
|
|
3
|
-
|
|
4
|
-
Proposed Naming Convention
|
|
5
|
-
|
|
6
|
-
1. Layouts Structure
|
|
7
|
-
|
|
8
|
-
_layouts/
|
|
9
|
-
├── core/ # (was: main/global/)
|
|
10
|
-
│ └── root.html # (was: default.html) - Base HTML skeleton
|
|
11
|
-
├── themes/ # Keep as-is - theme-specific layouts
|
|
12
|
-
│ └── {theme}/
|
|
13
|
-
│ ├── shell.html # (was: base.html) - Theme's main wrapper
|
|
14
|
-
│ ├── page.html # (was: default.html) - Standard pages
|
|
15
|
-
│ ├── legal.html # Keep as-is - Legal pages
|
|
16
|
-
│ ├── blog.html # Blog layouts
|
|
17
|
-
│ └── modal.html # (was: fullscreen.html) - Modal/overlay layouts
|
|
18
|
-
└── blueprints/ # (was: placeholder/) - Content templates
|
|
19
|
-
├── legal/
|
|
20
|
-
│ ├── terms.md
|
|
21
|
-
│ └── privacy.md
|
|
22
|
-
└── blog/
|
|
23
|
-
├── index.html
|
|
24
|
-
└── post.html
|
|
25
|
-
|
|
26
|
-
2. Includes Structure
|
|
27
|
-
|
|
28
|
-
_includes/
|
|
29
|
-
├── parts/ # (was: components/global/) - Core page parts
|
|
30
|
-
│ ├── head.html
|
|
31
|
-
│ ├── body.html
|
|
32
|
-
│ ├── foot.html
|
|
33
|
-
│ ├── nav.html
|
|
34
|
-
│ └── footer.html
|
|
35
|
-
├── widgets/ # (was: modules/) - Reusable components
|
|
36
|
-
│ ├── ads/ # (was: adunits/)
|
|
37
|
-
│ ├── forms/ # Contact forms, signups
|
|
38
|
-
│ ├── cards/ # Card components
|
|
39
|
-
│ └── media/ # Images, videos, embeds
|
|
40
|
-
└── themes/ # Keep as-is - theme-specific includes
|
|
41
|
-
└── {theme}/
|
|
42
|
-
└── blocks/ # (was: sections/) - Theme blocks
|
|
43
|
-
|
|
44
|
-
3. Assets Structure
|
|
45
|
-
|
|
46
|
-
assets/
|
|
47
|
-
├── themes/
|
|
48
|
-
│ ├── _base/ # (was: _template/) - Base theme template
|
|
49
|
-
│ │ ├── theme.js # (was: _theme.js)
|
|
50
|
-
│ │ ├── theme.scss # (was: _theme.scss)
|
|
51
|
-
│ │ ├── js/
|
|
52
|
-
│ │ └── scss/
|
|
53
|
-
│ └── {theme}/ # Actual themes
|
|
54
|
-
│ ├── theme.js
|
|
55
|
-
│ ├── theme.scss
|
|
56
|
-
│ ├── js/
|
|
57
|
-
│ └── scss/
|
|
58
|
-
├── css/
|
|
59
|
-
│ ├── core.scss # (was: ultimate-jekyll-manager.scss)
|
|
60
|
-
│ ├── main.scss # User's main styles
|
|
61
|
-
│ └── pages/ # Page-specific styles
|
|
62
|
-
└── js/
|
|
63
|
-
├── core.js # (was: ultimate-jekyll-manager.js)
|
|
64
|
-
├── main.js # User's main scripts
|
|
65
|
-
└── pages/ # Page-specific scripts
|
|
66
|
-
|
|
67
|
-
Key Benefits of New Names
|
|
68
|
-
|
|
69
|
-
1. core/root.html - Makes it clear this is the foundational HTML document
|
|
70
|
-
2. shell.html - Better describes a theme's outer wrapper than "base"
|
|
71
|
-
3. blueprints - Clearer than "placeholder" for content templates
|
|
72
|
-
4. parts - More intuitive than "components" for page sections
|
|
73
|
-
5. widgets - Better describes reusable UI components than "modules"
|
|
74
|
-
6. blocks - Clearer than "sections" for theme-specific content blocks
|
|
75
|
-
7. _base - More descriptive than "_template" for the theme template
|
|
76
|
-
|
|
77
|
-
Hierarchy Flow Example
|
|
78
|
-
|
|
79
|
-
Using the terms page example:
|
|
80
|
-
1. src/pages/legal/terms.md → uses layout blueprints/legal/terms
|
|
81
|
-
2. blueprints/legal/terms.md → uses layout themes/bootstrap/legal
|
|
82
|
-
3. themes/bootstrap/legal.html → uses layout themes/bootstrap/shell
|
|
83
|
-
4. themes/bootstrap/shell.html → uses layout core/root
|
|
84
|
-
5. core/root.html → includes parts/head, parts/body, parts/foot
|
|
85
|
-
|
|
86
|
-
Additional Organizational Improvements
|
|
87
|
-
|
|
88
|
-
1. Remove __temp directory - Clean up legacy files
|
|
89
|
-
2. Standardize file extensions - Use .html consistently (no .html copy)
|
|
90
|
-
3. Create a docs/architecture.md - Document the naming system
|
|
91
|
-
4. Add .keep files - In empty directories to maintain structure
|
|
92
|
-
5. Theme consistency - Ensure all themes follow the same structure
|
|
93
|
-
|
|
94
|
-
This naming system uses single, descriptive words that clearly indicate each component's purpose while
|
|
95
|
-
maintaining the flexibility for users to create their own layouts without conflicts.
|
|
96
|
-
|
|
97
|
-
⏺ Update Todos
|
|
98
|
-
⎿ ☒ Analyze current template structure and naming patterns
|
|
99
|
-
☒ Examine the layout hierarchy and component relationships
|
|
100
|
-
☒ Propose new naming conventions for layouts, includes, and components
|
|
101
|
-
☒ Suggest organizational improvements for the directory structure
|
|
102
|
-
|
|
103
|
-
> ok what should i name "src/defaults/dist/_layouts/modules/redirect.html"? I have
|
|
104
|
-
"src/defaults/dist/_includes/modules/adunits/adsense.html" notice how it is in an adsense subfolder. give me subfolder name
|
|
105
|
-
|
|
106
|
-
⏺ Looking at your structure and the new naming convention I proposed, for src/defaults/dist/_layouts/modules/redirect.html, I would
|
|
107
|
-
suggest:
|
|
108
|
-
|
|
109
|
-
src/defaults/dist/_layouts/utilities/redirect/redirect.html
|
|
110
|
-
|
|
111
|
-
Or if you want to keep it flatter:
|
|
112
|
-
|
|
113
|
-
src/defaults/dist/_layouts/utilities/redirect.html
|
|
114
|
-
|
|
115
|
-
The reasoning:
|
|
116
|
-
- utilities better describes technical/functional layouts (like redirects) vs content layouts
|
|
117
|
-
- It follows the pattern of your _includes/modules/adunits/adsense.html where the subfolder (adunits) categorizes the type
|
|
118
|
-
- Other utilities might include: utilities/error/404.html, utilities/maintenance/maintenance.html, etc.
|
|
119
|
-
|
|
120
|
-
If you specifically want just the subfolder name: utilities
|
|
121
|
-
|
|
122
|
-
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
|
|
123
|
-
│ > │
|
|
124
|
-
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
125
|
-
? for shortcuts ◯ IDE disconnected
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
NEW
|
|
130
|
-
|
|
131
|
-
⏺ Great question! For organizing layouts within a theme's frontend folder, I suggest a hybrid approach that groups related
|
|
132
|
-
layouts while keeping commonly-used ones at the root level:
|
|
133
|
-
|
|
134
|
-
src/defaults/dist/_layouts/themes/bootstrap/frontend/
|
|
135
|
-
├── base.html # Keep at root - the main theme wrapper
|
|
136
|
-
├── page.html # Keep at root - standard content pages
|
|
137
|
-
├── modal.html # Keep at root - fullscreen/modal layouts
|
|
138
|
-
├── pages/ # Specific page-type layouts
|
|
139
|
-
│ ├── legal.html # Legal pages (terms, privacy)
|
|
140
|
-
│ ├── contact.html # Contact form pages
|
|
141
|
-
│ ├── error.html # Error pages (404, 500)
|
|
142
|
-
│ ├── blog.html # Blog listing/archive
|
|
143
|
-
│ └── post.html # Individual blog posts
|
|
144
|
-
└── formats/ # Alternative content formats
|
|
145
|
-
├── bare.html # Minimal layout (no nav/footer)
|
|
146
|
-
├── print.html # Print-optimized layout
|
|
147
|
-
└── embed.html # For embedded content
|
|
148
|
-
|
|
149
|
-
Rationale:
|
|
150
|
-
1. Root level - Keep the most fundamental layouts (base, page, modal) easily accessible
|
|
151
|
-
2. pages/ subfolder - Group content-specific layouts that correspond to actual page types
|
|
152
|
-
3. formats/ subfolder - Group presentation variants that could apply to any content
|
|
153
|
-
|
|
154
|
-
This way:
|
|
155
|
-
- base.html remains the foundation all others extend from
|
|
156
|
-
- Common layouts are easy to find at the root
|
|
157
|
-
- Specific page layouts are logically grouped
|
|
158
|
-
- It's clear where to add new layouts as the theme grows
|
|
159
|
-
|
|
160
|
-
For your current files:
|
|
161
|
-
- legal.html → pages/legal.html
|
|
162
|
-
- fullscreen.html → modal.html (at root, since it's a common pattern)
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
ok so for the theme-specific layouts, theres a couple things and that leads me to a question
|
|
175
|
-
|
|
176
|
-
So a theme's layouts will live in a folder like (for frontend) "src/defaults/dist/_layouts/themes/bootstrap/frontend"
|
|
177
|
-
- A theme will always have a base.html layout that is the main layout for all pages in that theme
|
|
178
|
-
- However, the placeholder/blueprint pages will need to use specific layouts like legal.html "src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html" and eventually even more like a 404 layout, a contact layout etc.
|
|
179
|
-
- but there are also some more generic layouts like "src/defaults/dist/_layouts/themes/bootstrap/frontend/fullscreen.html"
|
|
180
|
-
|
|
181
|
-
HOW DO I ORGANIZE THESE LAYOUTS inside a theme?
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
I need help re-organizing some things in my lib.
|
|
192
|
-
|
|
193
|
-
Review "src/gulp/tasks/webpack.js" to see how the files are being bundled and loaded and the path aliases used.
|
|
194
|
-
|
|
195
|
-
src/assets/js/ultimate-jekyll-manager.js
|
|
196
|
-
* This is the file that the CONSUMING project will load
|
|
197
|
-
|
|
198
|
-
src/assets/js/utilities
|
|
199
|
-
* This directory is DIRECTLY COPIED to the CONSUMING project so that scripts SUCH AS "src/assets/js/utilities/popupads.js" can be DIRECTLY LOADED IN A SCRIPT TAG (no webpack is run on these files)
|
|
200
|
-
|
|
201
|
-
src/assets/js/libs
|
|
202
|
-
* This directory is not copied to the consuming project OR packed with webpack. It is JUST FILES THAT ARE IMPORTED BY THE ULTIMATE JEKYLL LIBRARY ITSEF. An example is "src/assets/js/libs/dev.js" which is imported during development and has some logging and debugging features.
|
|
203
|
-
|
|
204
|
-
NOW HERES THE PART I NEED HELP WITH:
|
|
205
|
-
|
|
206
|
-
1. I have "src/assets/js/redirect.js" which is loaded by "src/defaults/dist/_layouts/modules/utilities/redirect.html". I would like it to be WEBPACKED but i want to put it in a folder that is AUTOMATICALLY WEBPACKED that is distinctly separate from the main library. I need help naming that folder or deciding on a better strategy for this.
|
|
207
|
-
2. While youre at it, help me decide if "src/assets/js/libs" and "src/assets/js/utilities" are good names or if they should be changed.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
{% assign page-url-stripped = page.url | replace: 'index.html', '' %}
|
|
223
|
-
{%- if page-url-stripped == '/' -%}
|
|
224
|
-
{% assign page-url-stripped = '' %}
|
|
225
|
-
{% endif %}
|
|
226
|
-
|
|
227
|
-
page.canonical: {{ page.canonical }}|
|
|
228
|
-
|
|
229
|
-
{% capture action_icon %}{% if action.icon %}{{ site.icons[action.icon] }}{% endif %}{% endcapture %}
|
|
230
|
-
|
|
231
|
-
METHOD 1
|
|
232
|
-
html class=h-100
|
|
233
|
-
body class=d-flex flex-column h-100
|
|
234
|
-
main class=flex-shrink-0
|
|
235
|
-
footer class=mt-auto
|
|
236
|
-
|
|
237
|
-
METHOD 2
|
|
238
|
-
html class=
|
|
239
|
-
body class=d-flex flex-column min-vh-100
|
|
240
|
-
main class=flex-fill
|
|
241
|
-
footer class=
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
DONT FORGET THE FLOW (goes from top to bottom)
|
|
245
|
-
|
|
246
|
-
│ src/defaults/dist/_layouts/placeholder/app.html\ │
|
|
247
|
-
│ src/defaults/dist/_layouts/themes/bootstrap/frontend/fullscreen.html\ │
|
|
248
|
-
│ src/defaults/dist/_layouts/themes/bootstrap/frontend/core/base.html\ │
|
|
249
|
-
│ src/defaults/dist/_layouts/core/root.html\
|
package/_notes/TODO-checkout.md
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
Build a checkout page @ src/defaults/dist/_layouts/themes/bootstrap/frontend/pages/purchase/checkout.html
|
|
2
|
-
CSS: src/assets/css/pages/purchase/checkout/index.scss
|
|
3
|
-
JS: src/assets/js/pages/purchase/checkout/index.js
|
|
4
|
-
If you need inspiration for how to build a page, look at src/defaults/dist/_layouts/themes/bootstrap/frontend/pages directory.
|
|
5
|
-
* Use bootstrap 5.3.1
|
|
6
|
-
|
|
7
|
-
The checkout page should include:
|
|
8
|
-
* cards and sections for each step of the checkout process
|
|
9
|
-
* a summary of the items being purchased
|
|
10
|
-
* a place for a discount code (if user enters a correct code, apply discount)
|
|
11
|
-
* Support multiple payment methods (credit card, PayPal, Cypto.)
|
|
12
|
-
|
|
13
|
-
* We should be able to get a JSON object and dynamically alter the page contents, like adding some form fields
|
|
14
|
-
* when the user lands on the page, a query parameter with the product id is there to help us load the product details.
|
|
15
|
-
* use the product ID along with the {{ site.brand.app}} id to make a fetch request to https://api.itwcreativeworks.com/app/{app id} to get the product details, price, etc, (its in the response.products[product_id] key), use test data for now. but add the fetch request and jsut assume we use the test data no matter what.
|
|
16
|
-
* the product data will also include whether it is a subscription or one-time purchase.
|
|
17
|
-
* if its a subcripiton were gonna display some slighly different UI,
|
|
18
|
-
* like a toggle for monthly or yearly billing (and show the prices ad how much they are saving by using the yearly billing option)
|
|
19
|
-
* a message that either says "YOu are eligible for a free trial" or "You are not eligible for a free trial" based on the product data in green or red ralert espectively.
|
|
20
|
-
* A message like "You will be charged $X {monthky/annually} starting on {date}" if they have a free trial, or "You will be charged $X today and {annually\monthly} starting {date}" if they do not have a free trial.
|
|
21
|
-
|
|
22
|
-
* IN JS, we should calculate the price after the discount code is applied, and update the total price dynamically, consider also whether they are elgiible for a free trial.
|
|
23
|
-
|
|
24
|
-
* A banner that is fixed to the top of the page that says "FLash sale! Use code FLASH20 for 20% off your purchase!".
|
|
25
|
-
|
|
26
|
-
Next, build a quick /purchase/confirmation.html,
|
|
27
|
-
* The confirmation page should show a summary of the purchase and a thank you message.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
and a /purchase/cart.html that just redirects to the checkout page for now and is meant for sending analytics events and ensuring the user is signed in.
|
package/_notes/TODO-frontend.md
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
Frontend TODO
|
|
2
|
-
- sentry in WM
|
|
3
|
-
- chatsy
|
|
4
|
-
- remake chatsy into a module that we can install here and then users can load it via cdnjs instead of our website
|
|
5
|
-
- contact form with tracking and form-manager and slapform
|
|
6
|
-
|
|
7
|
-
- save utm tags, send during checkout, signup, etc
|
|
8
|
-
|
|
9
|
-
- token redirect for auth system (for auth with desktop apps, etc)
|
|
10
|
-
|
|
11
|
-
ensure blog, article, posts, etc all use proper HTML semantics tags, aria, etc
|
|
12
|
-
|
|
13
|
-
js refactor
|
|
14
|
-
- make all fns await asyn operations
|
|
15
|
-
- order the fn definitions in the order they are called (most import/toplevel first then the rest. put all tracking fns at the bottom)
|
|
16
|
-
- move export to top and do not use init() fn, just call all fns inside dom.ready OR the main export (depends on the structure)
|
|
17
|
-
- track errors w sentry, not ga4/fb/tiktok
|
|
18
|
-
- add Manager, options back to each index.js for standardization
|
|
19
|
-
- for stanndardization, also ALWAYS set webManager = Manager.webManager in the index.js
|
|
20
|
-
|
|
21
|
-
pages
|
|
22
|
-
- blog + post
|
|
23
|
-
- about
|
|
24
|
-
- contact
|
|
25
|
-
- team + member
|
|
26
|
-
- extension and download
|
|
27
|
-
|
|
28
|
-
MAKE OUR CUSTOM THEME CLASSY!!
|
|
29
|
-
|
|
30
|
-
for pages like pricing, home, about etc
|
|
31
|
-
- put default frontmatter in the default pages so user can override
|
|
32
|
-
|
|
33
|
-
NEW PLAN NAME STANDARD
|
|
34
|
-
1. Basic, Starter, Pro, Max
|
|
35
|
-
1. Basic, Starter, Plus, Pro
|
|
36
|
-
|
|
37
|
-
Implement account resolver
|
|
38
|
-
|
|
39
|
-
https://docs.stripe.com/payments/link/express-checkout-element-link
|
|
40
|
-
|
|
41
|
-
// // Load page specific scripts
|
|
42
|
-
// if (url.includes('/pricing')) {
|
|
43
|
-
// dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/pricing-page-handler/index.js'})
|
|
44
|
-
// } else if (url.includes('/download')) {
|
|
45
|
-
// dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/download-page-handler/index.js'})
|
|
46
|
-
// } else if (url.includes('/browser-extension') || url.includes('/extension')) {
|
|
47
|
-
// dom.loadScript({src: 'https://cdn.itwcreativeworks.com/assets/general/js/browser-extension-page-handler/index.js'})
|
|
48
|
-
// } else if (window.location.pathname.endsWith('.html')) {
|
|
49
|
-
// // Redirect and remove .html
|
|
50
|
-
// window.location.pathname = window.location.pathname.replace('.html', '');
|
|
51
|
-
// }
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// // Save user auth data
|
|
56
|
-
// Manager.auth().ready(function (user) {
|
|
57
|
-
// setupTracking(user);
|
|
58
|
-
|
|
59
|
-
// storage.set('user.auth.uid', user.uid);
|
|
60
|
-
// storage.set('user.auth.email', user.email);
|
|
61
|
-
// })
|
package/_notes/TODO-legacy.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
Make themes layout folder
|
|
2
|
-
geeks (with subfolders)
|
|
3
|
-
- frontend
|
|
4
|
-
- backend
|
|
5
|
-
- docs
|
|
6
|
-
|
|
7
|
-
global changes
|
|
8
|
-
- rename placeholder files
|
|
9
|
-
layout: themes/placeholder --> layout: themes/placeholder
|
|
10
|
-
|
|
11
|
-
- mayeb actually move placeholder outside of themes?
|
|
12
|
-
- maybe move themes into master? idk
|
|
13
|
-
|
|
14
|
-
- fix auth-signedin-false-element
|
|
15
|
-
- auth-state-listener = loading, signedin, signedout
|
|
16
|
-
dashboard-status-listenerdata-status="success"
|
|
17
|
-
|
|
18
|
-
- make plugins for each theme, like navbar account dropdown?
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
I have this tempalte system setup so making sites instantly is possible, with the option to further customize each page. It takes advantage of a multi-tier theme system.
|
|
2
|
-
|
|
3
|
-
Here's an example:
|
|
4
|
-
|
|
5
|
-
src/defaults/src/pages/legal/terms.md
|
|
6
|
-
* This page is autmatically created in the CONSUMING project's pages at pages/legal/terms.md
|
|
7
|
-
* You can see it uses "placeholder/legal/terms" layout
|
|
8
|
-
|
|
9
|
-
src/defaults/dist/_layouts/placeholder/legal/terms.md
|
|
10
|
-
* This is the layout used by the page above
|
|
11
|
-
* Looking at it, you can see it uses a SECOND layout "themes/[ site.theme.id ]/frontend/default"
|
|
12
|
-
* The theme ID is dynamically inserted by the gulp preprocessor as set in _config.yml
|
|
13
|
-
|
|
14
|
-
src/defaults/dist/_layouts/themes/bootstrap/frontend/default.html
|
|
15
|
-
* This is the layout used by the page above (in this example, the bootstrap theme)
|
|
16
|
-
* You can see that it includes a nav.html and footer.html as well as the {{ content }} tag (special processing for markdown vs HTML using a custom "page.extension" check)
|
|
17
|
-
|
|
18
|
-
What i want to do is create some more layouts in the "src/defaults/dist/_layouts/themes/bootstrap/frontend" directory, such as a legal layout, which would be used by terms, privacy, and cookies pages.
|
|
19
|
-
|
|
20
|
-
Can you help me create the legal layout and do it in a way that doesnt duplicate too much existing code? Can we somehow take advantage of the existing default.html layout?
|
|
21
|
-
|
|
22
|
-
I want to make even more layouts, such as a "full screen" layout that that would be for pages that want the content to be centered and take up the full width and height of the screen with no header or footer, just the content.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
I have this tempalte system setup so making sites instantly is possible, with the option to further customize each page. It takes advantage of a multi-tier theme system.
|
|
37
|
-
|
|
38
|
-
Here's an example:
|
|
39
|
-
|
|
40
|
-
src/defaults/src/pages/legal/terms.md
|
|
41
|
-
* This page is autmatically created in the CONSUMING project's pages at pages/legal/terms.md
|
|
42
|
-
* You can see it uses "placeholder/legal/terms" layout
|
|
43
|
-
|
|
44
|
-
src/defaults/dist/_layouts/placeholder/legal/terms.md
|
|
45
|
-
* This is the layout used by the page above
|
|
46
|
-
* Looking at it, you can see it uses a SECOND layout "themes/[ site.theme.id ]/frontend/legal"
|
|
47
|
-
* The theme ID is dynamically inserted by the gulp preprocessor as set in _config.yml
|
|
48
|
-
|
|
49
|
-
src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html
|
|
50
|
-
* Uses "themes/bootstrap/frontend/core/base"
|
|
51
|
-
|
|
52
|
-
src/defaults/dist/_layouts/themes/bootstrap/frontend/core/base.html
|
|
53
|
-
* Uses "core/root"
|
|
54
|
-
|
|
55
|
-
src/defaults/dist/_layouts/core/root.html
|
|
56
|
-
* Includes "components" src/defaults/dist/_includes/core/body.html, src/defaults/dist/_includes/core/nav.html, src/defaults/dist/_includes/core/footer.html
|
|
57
|
-
* This is the final layout that is used to render the page and includes all the head meta tags styles, scripts, and some body html like modals and warnings that are dynamically displayed.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
Each theme should have a central file that the various other theme layouts use, like in this example
|
|
61
|
-
* "src/defaults/dist/_layouts/themes/bootstrap/frontend/legal.html" USES "themes/bootstrap/frontend/core/base.html"
|
|
62
|
-
|
|
63
|
-
Each theme's central file will always use "core/root.html"
|
|
64
|
-
* And this file will always include the components that are used by all themes, like the header, footer, and body.
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
I need your help naming ALL these things because i feel like my names are not really fitting or consistent. AND ALSO ORGANIZING THEM.
|
|
68
|
-
|
|
69
|
-
I initially organized the "themes" and "main" layouts in their own folders because this leaves the ability for the user to created layouts that DONT CONFLICT with the ULTIMATE JEKYLL template layouts.
|
|
70
|
-
|
|
71
|
-
The only requirement is that each "name" is a SINGLE word. I like short descriptive words.
|
|
72
|
-
|
|
73
|
-
So for example, i feel like "default" and "base" and "global" are all thrown around a lot and not consistent. Very confusing.
|
package/_notes/TODO-theme.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
> Im going to have you build a custom bootstrap theme. We are using bootstrap 5.3.1.
|
|
2
|
-
|
|
3
|
-
The theme is called Classy, you can make your changes to "src/assets/themes/classy/_theme.scss"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
The theme is a simple, yet modern, clean, and elegant design suitable for various types of websites, but
|
|
7
|
-
witha primary focus on modern tech, AI, and marketing.
|
|
8
|
-
|
|
9
|
-
I've attached some screenshots of the design for reference, go crazy and make it SUPER SEXY!
|
|
10
|
-
|
|
11
|
-
[Image #1]\
|
|
12
|
-
notice how when you scroll, the top bar stays withy ou and also shrinks a little\
|
|
13
|
-
[Image #2]\
|
|
14
|
-
[Image #3]\
|
|
15
|
-
\
|
|
16
|
-
Since we're using bootstrap, DO NOT MAKE CUSTOM CSS FOR ANYTHING UNLESS ABSOILUTELY NECESSARY. Obviously,
|
|
17
|
-
you can make it for the visual changes but DO NOT REINVENT THE WHEEL!
|
package/logs/test.log
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# ujm log — 2026-06-22T21:31:38.629Z — pid=3348
|
|
2
|
-
[14:31:38] 'test': Running tests (layer=all)
|
|
3
|
-
[14:31:38] 'test': Test mode: normal (external APIs skipped)
|
|
4
|
-
|
|
5
|
-
Ultimate Jekyll Manager Tests
|
|
6
|
-
|
|
7
|
-
Framework Tests
|
|
8
|
-
⤷ attach-log-file — tee stdout/stderr to a file
|
|
9
|
-
✓ exports the expected surface (0ms)
|
|
10
|
-
✓ stripAnsi removes color escape codes (0ms)
|
|
11
|
-
hello world
|
|
12
|
-
colored line
|
|
13
|
-
✓ attach + stdout.write + detach: file contains the writes (0ms)
|
|
14
|
-
✓ idempotent: attaching twice with same name returns same fd (1ms)
|
|
15
|
-
✓ attach with falsy name returns null and does nothing (0ms)
|
|
16
|
-
⤷ CLI alias resolution
|
|
17
|
-
✓ cli.js exports a Main class (0ms)
|
|
18
|
-
✓ all expected commands exist on disk (0ms)
|
|
19
|
-
✓ each command module exports an async function (4ms)
|
|
20
|
-
⤷ collectTextNodes (utils/collectTextNodes.js)
|
|
21
|
-
✓ extracts page title (101ms)
|
|
22
|
-
✓ skips <script> and <style> (0ms)
|
|
23
|
-
✓ spellcheck dictionary (utils/dictionary.js) (0ms)
|
|
24
|
-
⤷ expect() matcher set
|
|
25
|
-
✓ toBe + toEqual basics (0ms)
|
|
26
|
-
✓ .not negates (0ms)
|
|
27
|
-
✓ toContain works on arrays and strings (0ms)
|
|
28
|
-
✓ toThrow catches sync + async throws (0ms)
|
|
29
|
-
✓ toBeGreaterThan / toBeLessThan (0ms)
|
|
30
|
-
✓ failing assertions throw AssertionError (0ms)
|
|
31
|
-
✓ package.json exports resolve to real files in dist/ (0ms)
|
|
32
|
-
⤷ Logger (src/lib/logger.js)
|
|
33
|
-
✓ Logger constructor stores name (0ms)
|
|
34
|
-
✓ Logger exposes log/error/warn/info methods (0ms)
|
|
35
|
-
✓ Logger.format is chalk (0ms)
|
|
36
|
-
✓ Logger output goes through console with prefix (0ms)
|
|
37
|
-
⤷ Manager (build.js) public surface
|
|
38
|
-
✓ Manager constructor is a function (0ms)
|
|
39
|
-
✓ static methods match prototype methods (0ms)
|
|
40
|
-
✓ isBuildMode reflects UJ_BUILD_MODE env (0ms)
|
|
41
|
-
✓ isQuickMode reflects UJ_QUICK env (0ms)
|
|
42
|
-
✓ isServer reflects UJ_IS_SERVER env (0ms)
|
|
43
|
-
✓ getEnvironment maps to development/testing/production (0ms)
|
|
44
|
-
✓ actLikeProduction is true when isBuildMode OR UJ_AUDIT_FORCE (0ms)
|
|
45
|
-
✓ getRootPath("package") points at UJM root (0ms)
|
|
46
|
-
✓ getMemoryUsage returns shape with MB-sized numbers (0ms)
|
|
47
|
-
✓ getArguments returns object with _ array + boolean defaults (1ms)
|
|
48
|
-
✓ logger returns object with log/error/warn/info methods (0ms)
|
|
49
|
-
✓ processBatches processes items in chunks and returns flat results (0ms)
|
|
50
|
-
⤷ mergeJekyllConfigs (utils/merge-jekyll-configs.js)
|
|
51
|
-
✓ merges collections from both configs (project additions win) (3ms)
|
|
52
|
-
✓ dedups defaults by scope key (project wins) (1ms)
|
|
53
|
-
✓ returns null when there is nothing to merge (0ms)
|
|
54
|
-
⤷ mode-helpers (isTesting / isDevelopment / isProduction / getVersion)
|
|
55
|
-
✓ helpers attach to Manager statically AND on prototype (1ms)
|
|
56
|
-
✓ isTesting reflects UJ_TEST_MODE env (0ms)
|
|
57
|
-
✓ isDevelopment false / isProduction true when UJ_BUILD_MODE=true (and not testing) (0ms)
|
|
58
|
-
✓ environments are mutually exclusive — testing wins under UJ_TEST_MODE (0ms)
|
|
59
|
-
✓ invariant: is*() exactly matches getEnvironment() + mutually exclusive (every scenario) (0ms)
|
|
60
|
-
✓ getVersion returns a non-empty string when run from a package (0ms)
|
|
61
|
-
⤷ createTemplateTransform (utils/template-transform.js)
|
|
62
|
-
✓ replaces [site.theme.id] with config value in .html files (1ms)
|
|
63
|
-
✓ leaves non-matching extensions untouched (e.g. .css) (0ms)
|
|
64
|
-
✓ passes directories through untouched (0ms)
|
|
65
|
-
⤷ node-powertools templating brackets ({} and [])
|
|
66
|
-
✓ default { } brackets resolve nested keys (0ms)
|
|
67
|
-
✓ [ ] brackets resolve nested keys when explicitly configured (0ms)
|
|
68
|
-
✓ [ ] brackets leave Jekyll {{ }} placeholders alone (0ms)
|
|
69
|
-
⤷ theme contract (structure, swappability, cross-theme JS contracts)
|
|
70
|
-
✓ _template: entry files + config contract (1ms)
|
|
71
|
-
✓ classy: entry files + config contract (0ms)
|
|
72
|
-
✓ neobrutalism: entry files + config contract (1ms)
|
|
73
|
-
✓ newsflash: entry files + config contract (0ms)
|
|
74
|
-
✓ _template: layouts swappable, markup clean (1ms)
|
|
75
|
-
✓ classy: layouts swappable, markup clean (15ms)
|
|
76
|
-
✓ neobrutalism: layouts swappable, markup clean (1ms)
|
|
77
|
-
✓ newsflash: layouts swappable, markup clean (4ms)
|
|
78
|
-
✓ _template: cross-theme JS contracts (0ms)
|
|
79
|
-
✓ classy: cross-theme JS contracts (0ms)
|
|
80
|
-
✓ neobrutalism: cross-theme JS contracts (1ms)
|
|
81
|
-
✓ newsflash: cross-theme JS contracts (0ms)
|
|
82
|
-
✓ page asset files match a declared asset_path shape (3ms)
|
|
83
|
-
⤷ validateYAMLFrontMatter (utils/_validate-yaml.js)
|
|
84
|
-
✓ returns { valid: true } for a file with valid frontmatter (0ms)
|
|
85
|
-
✓ returns { valid: true } when no frontmatter present (1ms)
|
|
86
|
-
✓ flags malformed YAML frontmatter as invalid with error message (0ms)
|
|
87
|
-
⤷ page-layer baseline (DOM + fetch + storage)
|
|
88
|
-
✓ document is interactive or complete (1ms)
|
|
89
|
-
✓ fetch() works against the local harness server (7ms)
|
|
90
|
-
✓ localStorage is available (1ms)
|
|
91
|
-
⤷ FormManager getData / setData / input groups
|
|
92
|
-
✓ _setNested builds nested objects from dot paths (1ms)
|
|
93
|
-
✓ _setNested accumulates duplicate keys into arrays (0ms)
|
|
94
|
-
✓ _getNested reads nested values and returns undefined for missing paths (0ms)
|
|
95
|
-
✓ _flattenObject converts nested objects to dot paths (1ms)
|
|
96
|
-
✓ getData collects text, select, radio, and textarea values with dot notation (5ms)
|
|
97
|
-
✓ getData handles single checkbox (boolean) and checkbox groups (object) (0ms)
|
|
98
|
-
✓ getData excludes honeypot fields (0ms)
|
|
99
|
-
✓ input group filter includes matching + global fields, excludes others (0ms)
|
|
100
|
-
✓ input group filter with multiple groups includes all matching (0ms)
|
|
101
|
-
✓ setData populates text, select, textarea fields (1ms)
|
|
102
|
-
✓ setData sets radio group to matching value (0ms)
|
|
103
|
-
✓ setData sets single checkbox boolean and checkbox group values (0ms)
|
|
104
|
-
⤷ FormManager disabled-state snapshot
|
|
105
|
-
✓ snapshot captures disabled non-submit elements, ignores submit buttons (1ms)
|
|
106
|
-
✓ setDisabled(true) disables everything (0ms)
|
|
107
|
-
✓ setDisabled(false) re-enables managed elements but keeps snapshotted ones disabled (0ms)
|
|
108
|
-
✓ survives multiple disable/enable cycles (1ms)
|
|
109
|
-
✓ onsubmit="return false" blocks native submission before FM loads (10ms)
|
|
110
|
-
⤷ FormManager validation + honeypot + file-accept
|
|
111
|
-
✓ required text field fails when empty, passes when filled (0ms)
|
|
112
|
-
✓ required checkbox fails when unchecked (0ms)
|
|
113
|
-
✓ required radio group fails when none checked (0ms)
|
|
114
|
-
✓ email validation rejects invalid formats and accepts valid ones (1ms)
|
|
115
|
-
✓ number min/max validation catches out-of-range values (2ms)
|
|
116
|
-
✓ minlength and maxlength validation (0ms)
|
|
117
|
-
✓ pattern attribute validation (0ms)
|
|
118
|
-
✓ honeypot detection catches [data-honey] and [name="honey"] fields (0ms)
|
|
119
|
-
✓ honeypot detects data-honey without name="honey" (0ms)
|
|
120
|
-
✓ file-accept matching: extension, wildcard MIME, exact MIME (0ms)
|
|
121
|
-
✓ field error display adds is-invalid class and feedback element (1ms)
|
|
122
|
-
✓ query param population skips UTM/tracking params (0ms)
|
|
123
|
-
✓ data-form-state attribute reflects state transitions (0ms)
|
|
124
|
-
⤷ harness globals (window.Configuration + dataset)
|
|
125
|
-
✓ window.Configuration has brand + theme + web_manager (0ms)
|
|
126
|
-
✓ document.documentElement.dataset.pagePath is set (0ms)
|
|
127
|
-
✓ UJ_TEST_MODE is signalled on globalThis (0ms)
|
|
128
|
-
⤷ prerendered icons template lookup
|
|
129
|
-
✓ template#prerendered-icons exists and has the test icon (1ms)
|
|
130
|
-
✓ looking up a missing icon returns null (0ms)
|
|
131
|
-
⤷ boot tests (consumer _site/)
|
|
132
|
-
✓ /service-worker.js served with javascript content type (74ms)
|
|
133
|
-
✓ index.html registers SW and reaches activated state (169ms)
|
|
134
|
-
✓ SW responds to get-cache-name message with brand-id pattern (75ms)
|
|
135
|
-
✓ home page renders with title + body content (176ms)
|
|
136
|
-
✓ /about resolves via Jekyll-style .html fallback (67ms)
|
|
137
|
-
✓ build.json is served with brand metadata (69ms)
|
|
138
|
-
✓ CSS bundle served with text/css content type (62ms)
|
|
139
|
-
|
|
140
|
-
Results
|
|
141
|
-
110 passing
|
|
142
|
-
|
|
143
|
-
Total: 110 tests in 2945ms
|
|
144
|
-
|