✅ 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.
67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
import {
|
|
Function as FunctionToken,
|
|
LeftParenthesis,
|
|
RightParenthesis
|
|
} from '../../tokenizer/index.js';
|
|
|
|
|
|
export const name = 'GeneralEnclosed';
|
|
export const structure = {
|
|
kind: String,
|
|
function: [String, null],
|
|
children: [[]]
|
|
};
|
|
|
|
// <function-token> <any-value> )
|
|
// ( <any-value> )
|
|
export function parse(kind) {
|
|
const start = this.tokenStart;
|
|
let functionName = null;
|
|
|
|
if (this.tokenType === FunctionToken) {
|
|
functionName = this.consumeFunctionName();
|
|
} else {
|
|
this.eat(LeftParenthesis);
|
|
}
|
|
|
|
const children = this.parseWithFallback(
|
|
() => {
|
|
const startValueToken = this.tokenIndex;
|
|
const children = this.readSequence(this.scope.Value);
|
|
|
|
if (this.eof === false &&
|
|
this.isBalanceEdge(startValueToken) === false) {
|
|
this.error();
|
|
}
|
|
|
|
return children;
|
|
},
|
|
() => this.createSingleNodeList(
|
|
this.Raw(null, false)
|
|
)
|
|
);
|
|
|
|
if (!this.eof) {
|
|
this.eat(RightParenthesis);
|
|
}
|
|
|
|
return {
|
|
type: 'GeneralEnclosed',
|
|
loc: this.getLocation(start, this.tokenStart),
|
|
kind,
|
|
function: functionName,
|
|
children
|
|
};
|
|
}
|
|
|
|
export function generate(node) {
|
|
if (node.function) {
|
|
this.token(FunctionToken, node.function + '(');
|
|
} else {
|
|
this.token(LeftParenthesis, '(');
|
|
}
|
|
|
|
this.children(node);
|
|
this.token(RightParenthesis, ')');
|
|
}
|