UNPKG

pk-template

Version:
99 lines 7.39 kB
"use strict"; 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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