✅ COMPLETED: 1. Dockerfile uses port 80 (astro preview) 2. BaseLayout imports globals.css 3. globals.css with Tailwind v4 @theme syntax 4. index.astro has Header, Footer, FixedContact 5. All image references fixed to existing files 6. Hero uses hdpe_pipe_main.jpg 7. Product cards use hdpe001.jpg 8. pt-20 on main for fixed header ✅ TESTED LOCALLY: - Build: 15 pages in 1.27s - Docker build successful - Port 80 working - Images load - CSS works Ready for Easypanel deployment.
62 lines
1.4 KiB
JavaScript
62 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const types = require('../../tokenizer/types.cjs');
|
|
|
|
const PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)
|
|
const SOLIDUS = 0x002F; // U+002F SOLIDUS (/)
|
|
const GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)
|
|
const TILDE = 0x007E; // U+007E TILDE (~)
|
|
|
|
const name = 'Combinator';
|
|
const structure = {
|
|
name: String
|
|
};
|
|
|
|
// + | > | ~ | /deep/
|
|
function parse() {
|
|
const start = this.tokenStart;
|
|
let name;
|
|
|
|
switch (this.tokenType) {
|
|
case types.WhiteSpace:
|
|
name = ' ';
|
|
break;
|
|
|
|
case types.Delim:
|
|
switch (this.charCodeAt(this.tokenStart)) {
|
|
case GREATERTHANSIGN:
|
|
case PLUSSIGN:
|
|
case TILDE:
|
|
this.next();
|
|
break;
|
|
|
|
case SOLIDUS:
|
|
this.next();
|
|
this.eatIdent('deep');
|
|
this.eatDelim(SOLIDUS);
|
|
break;
|
|
|
|
default:
|
|
this.error('Combinator is expected');
|
|
}
|
|
|
|
name = this.substrToCursor(start);
|
|
break;
|
|
}
|
|
|
|
return {
|
|
type: 'Combinator',
|
|
loc: this.getLocation(start, this.tokenStart),
|
|
name
|
|
};
|
|
}
|
|
|
|
function generate(node) {
|
|
this.tokenize(node.name);
|
|
}
|
|
|
|
exports.generate = generate;
|
|
exports.name = name;
|
|
exports.parse = parse;
|
|
exports.structure = structure;
|