187 lines
4.9 KiB
Markdown
187 lines
4.9 KiB
Markdown
|
|
# CLI Templates Demo
|
||
|
|
|
||
|
|
This directory contains comprehensive Pug template examples for testing the `pug-compile` CLI tool.
|
||
|
|
|
||
|
|
## What's Here
|
||
|
|
|
||
|
|
This is a complete demonstration of:
|
||
|
|
- **Layouts** with extends/blocks
|
||
|
|
- **Partials** (header, footer)
|
||
|
|
- **Mixins** (buttons, forms, cards, alerts)
|
||
|
|
- **Pages** demonstrating all Pug features
|
||
|
|
|
||
|
|
## Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
cli-templates-demo/
|
||
|
|
├── layouts/
|
||
|
|
│ ├── main.pug # Main layout with header/footer
|
||
|
|
│ └── simple.pug # Minimal layout
|
||
|
|
├── partials/
|
||
|
|
│ ├── header.pug # Site header with navigation
|
||
|
|
│ └── footer.pug # Site footer
|
||
|
|
├── mixins/
|
||
|
|
│ ├── buttons.pug # Button components
|
||
|
|
│ ├── forms.pug # Form input components
|
||
|
|
│ ├── cards.pug # Card components
|
||
|
|
│ └── alerts.pug # Alert/notification components
|
||
|
|
├── pages/
|
||
|
|
│ ├── index.pug # Homepage
|
||
|
|
│ ├── features-demo.pug # Complete features demonstration
|
||
|
|
│ ├── attributes-demo.pug # All attribute syntax examples
|
||
|
|
│ └── about.pug # About page
|
||
|
|
├── public/
|
||
|
|
│ └── css/
|
||
|
|
│ └── style.css # Demo styles
|
||
|
|
├── generated/ # Compiled templates output (after compilation)
|
||
|
|
└── README.md # This file
|
||
|
|
```
|
||
|
|
|
||
|
|
## Testing the CLI Tool
|
||
|
|
|
||
|
|
### 1. Compile All Pages
|
||
|
|
|
||
|
|
From the pugz root directory:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build the CLI tool
|
||
|
|
zig build
|
||
|
|
|
||
|
|
# Compile templates
|
||
|
|
./zig-out/bin/cli --dir src/tests/examples/cli-templates-demo/pages --out src/tests/examples/cli-templates-demo/generated
|
||
|
|
```
|
||
|
|
|
||
|
|
This will generate:
|
||
|
|
- `generated/pages/*.zig` - Compiled page templates
|
||
|
|
- `generated/helpers.zig` - Shared helper functions
|
||
|
|
- `generated/root.zig` - Module exports
|
||
|
|
|
||
|
|
### 2. Test Individual Templates
|
||
|
|
|
||
|
|
Compile a single template:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./zig-out/bin/cli src/tests/examples/cli-templates-demo/pages/index.pug src/tests/examples/cli-templates-demo/generated/index.zig
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Use in Application
|
||
|
|
|
||
|
|
```zig
|
||
|
|
const tpls = @import("cli-templates-demo/generated/root.zig");
|
||
|
|
|
||
|
|
// Render a page
|
||
|
|
const html = try tpls.pages_index.render(allocator, .{
|
||
|
|
.pageTitle = "Home",
|
||
|
|
.currentPage = "home",
|
||
|
|
.year = "2024",
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
## What's Demonstrated
|
||
|
|
|
||
|
|
### Pages
|
||
|
|
|
||
|
|
1. **index.pug** - Homepage
|
||
|
|
- Hero section
|
||
|
|
- Feature cards using mixins
|
||
|
|
- Demonstrates: extends, includes, mixins
|
||
|
|
|
||
|
|
2. **features-demo.pug** - Complete Features
|
||
|
|
- Mixins: buttons, forms, cards, alerts
|
||
|
|
- Conditionals: if/else, unless
|
||
|
|
- Loops: each with arrays/objects
|
||
|
|
- Case/when statements
|
||
|
|
- Text interpolation
|
||
|
|
- Code blocks
|
||
|
|
|
||
|
|
3. **attributes-demo.pug** - All Attributes
|
||
|
|
- Basic attributes
|
||
|
|
- JavaScript expressions
|
||
|
|
- Multiline attributes
|
||
|
|
- Quoted attributes
|
||
|
|
- Attribute interpolation
|
||
|
|
- Unescaped attributes
|
||
|
|
- Boolean attributes
|
||
|
|
- Style attributes (string/object)
|
||
|
|
- Class attributes (array/object/conditional)
|
||
|
|
- Class/ID literals
|
||
|
|
- &attributes spreading
|
||
|
|
- Data and ARIA attributes
|
||
|
|
|
||
|
|
4. **about.pug** - Standard Content
|
||
|
|
- Tables, lists, links
|
||
|
|
- Regular content page
|
||
|
|
|
||
|
|
### Mixins
|
||
|
|
|
||
|
|
- **buttons.pug**: Various button styles and types
|
||
|
|
- **forms.pug**: Input, textarea, select, checkbox
|
||
|
|
- **cards.pug**: Different card layouts
|
||
|
|
- **alerts.pug**: Alert notifications
|
||
|
|
|
||
|
|
### Layouts
|
||
|
|
|
||
|
|
- **main.pug**: Full layout with header/footer
|
||
|
|
- **simple.pug**: Minimal layout
|
||
|
|
|
||
|
|
### Partials
|
||
|
|
|
||
|
|
- **header.pug**: Navigation header
|
||
|
|
- **footer.pug**: Site footer
|
||
|
|
|
||
|
|
## Supported vs Not Supported
|
||
|
|
|
||
|
|
### ✅ Runtime Mode (Full Support)
|
||
|
|
All features work perfectly in runtime mode:
|
||
|
|
- All mixins
|
||
|
|
- Includes and extends
|
||
|
|
- Conditionals and loops
|
||
|
|
- All attribute types
|
||
|
|
|
||
|
|
### ⚠️ Compiled Mode (Partial Support)
|
||
|
|
|
||
|
|
Currently supported:
|
||
|
|
- ✅ Basic tags and nesting
|
||
|
|
- ✅ Text interpolation `#{var}`
|
||
|
|
- ✅ Attributes (static and dynamic)
|
||
|
|
- ✅ Doctypes
|
||
|
|
- ✅ Comments
|
||
|
|
- ✅ Buffered code `p= var`
|
||
|
|
|
||
|
|
Not yet supported:
|
||
|
|
- ❌ Conditionals (in progress, has bugs)
|
||
|
|
- ❌ Loops
|
||
|
|
- ❌ Mixins
|
||
|
|
- ❌ Runtime includes (resolved at compile time)
|
||
|
|
|
||
|
|
## Testing Workflow
|
||
|
|
|
||
|
|
1. **Edit templates** in this directory
|
||
|
|
2. **Compile** using the CLI tool
|
||
|
|
3. **Check generated code** in `generated/`
|
||
|
|
4. **Test runtime** by using templates directly
|
||
|
|
5. **Test compiled** by importing generated modules
|
||
|
|
|
||
|
|
## Notes
|
||
|
|
|
||
|
|
- Templates use demo data variables (set with `-` in templates)
|
||
|
|
- The `generated/` directory is recreated each compilation
|
||
|
|
- CSS is provided for visual reference but not required
|
||
|
|
- All templates follow Pug best practices
|
||
|
|
|
||
|
|
## For Compiled Templates Development
|
||
|
|
|
||
|
|
This directory serves as a comprehensive test suite for the `pug-compile` CLI tool. When adding new features to the compiler:
|
||
|
|
|
||
|
|
1. Add examples here
|
||
|
|
2. Compile and verify output
|
||
|
|
3. Test generated Zig code compiles
|
||
|
|
4. Test generated code produces correct HTML
|
||
|
|
5. Compare with runtime rendering
|
||
|
|
|
||
|
|
## Resources
|
||
|
|
|
||
|
|
- [Pug Documentation](https://pugjs.org/)
|
||
|
|
- [Pugz Main README](../../../../README.md)
|
||
|
|
- [Compiled Templates Docs](../../../../docs/COMPILED_TEMPLATES.md)
|