pk-template
Version:
p template engine for kubernetes
99 lines • 7.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("../../common");
const styleApply_1 = require("./styleApply");
const styleCompile_1 = require("./styleCompile");
const customTags_1 = require("../../pk-yaml/customTags");
class StyleSheet {
constructor(parent) {
this.parent = parent;
this.styleSheets = {};
}
loadStyles(styles) {
for (const map of styles) {
for (const key of Object.keys(map)) {
const code = map[key];
if (code instanceof customTags_1.CustomYamlTag) {
this.styleSheets[key] = new styleApply_1.StyleApply(key, code);
}
else {
throw new Error(`invalid style definition ${key}`);
}
}
}
}
import(scope, rpath) {
const { uri, data } = scope.loadPkt(rpath);
scope.child2({ uri }, cscope => {
this.load(cscope, data.header);
});
}
load(scope, pkt) {
if (pkt['/import']) {
if (Array.isArray(pkt['/import'])) {
for (let path of pkt['/import']) {
this.import(scope, path);
}
}
else {
this.import(scope, pkt['/import']);
}
}
if (pkt['/style']) {
this.loadStyles(pkt['/style']);
}
}
applyStyle(vm, scope, object, node, style) {
const styleApply = this.styleSheets[style.type];
return styleApply
? styleApply.applyStyle(vm, scope, object, node, style)
: (this.parent
? this.parent.applyStyle(vm, scope, object, node, style)
: false);
}
applyTree(vm, scope, object) {
let updated = false;
let left = null;
common_1.forEachTreeObjectKey(object, (node, key, styles) => {
if (key === '^') {
if (styles.length === 0) {
delete node[key];
return;
}
const leftOvers = [];
for (const style of styles) {
const applied = this.applyStyle(vm, scope, object, node, style);
if (applied) {
updated = true;
}
else {
leftOvers.push(style);
left = style;
}
}
if (leftOvers.length == 0) {
delete node[key];
}
else {
node[key] = leftOvers;
}
}
});
if (!updated && left != null) {
throw new Error(`cannot apply style ${left.type}`);
}
return left != null;
}
apply(vm, scope, object) {
styleCompile_1.compileStyle(vm, scope, object);
while (this.applyTree(vm, scope, object))
;
}
static Build(scope, pkt) {
const styleSheet = new StyleSheet(scope.parent.styleSheet);
styleSheet.load(scope, pkt);
return styleSheet;
}
}
exports.StyleSheet = StyleSheet;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVTaGVldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9way10ZW1wbGF0ZS9zdHlsZXMvc3R5bGVTaGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUE2RDtBQUU3RCw2Q0FBMEM7QUFDMUMsaURBQThDO0FBQzlDLHlEQUF5RDtBQUd6RCxNQUFhLFVBQVU7SUFHckIsWUFBb0IsTUFBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxNQUFnQjtRQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN4QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sSUFBSSxHQUFJLEdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxJQUFJLFlBQVksMEJBQWEsRUFBRTtvQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLHVCQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuRDtxQkFBTTtvQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixHQUFHLEVBQUUsQ0FBQyxDQUFBO2lCQUNuRDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FB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