UNPKG

@pubgcorp/pk-template

Version:
100 lines 7.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StyleSheet = void 0; 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; (0, 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) { (0, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVTaGVldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9way10ZW1wbGF0ZS9zdHlsZXMvc3R5bGVTaGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkQ7QUFFN0QsNkNBQTBDO0FBQzFDLGlEQUE4QztBQUM5Qyx5REFBeUQ7QUFHekQsTUFBYSxVQUFVO0lBR3JCLFlBQW9CLE1BQTBCO1FBQTFCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBZ0I7UUFDakMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQyxNQUFNLElBQUksR0FBSSxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksSUFBSSxZQUFZLDBCQUFhLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSx1QkFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkQ7cUJBQU07b0JBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQTtpQkFDbkQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUN6QyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztR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