UNPKG

@extjs/sencha-cmd-linux-32

Version:

Productivity and performance optimization tool for building applications with Sencha Ext JS and Sencha Touch.

142 lines (117 loc) 4.78 kB
"use strict"; var SelectorList = require('../type/selectors/SelectorList.js'); module.exports = { init (runtime) { var selectorHooks = {}, styleHooks = {}, atRuleHooks = {}, functionCallHooks = {}, toPrune = [], registered = false; function register() { if (registered) { return; } registered = true; runtime.registerProcessor({ runHooks (obj, hooks) { if (hooks) { for (var h = 0; h < hooks.length; h++) { hooks[h].call(this, obj, this.context); } } }, functioncall (obj) { this.runHooks(obj, functionCallHooks[obj.name]); }, declaration (obj) { this.runHooks(obj, styleHooks[obj.property]); obj.descend(this); }, // process selectors for registered name watches ruleset (obj) { let me = this; me.currRuleset = obj; let selectors = obj.selectors, selectorsStr = selectors.toString(), len = toPrune.length, filter; for (let i = 0; i < len; i++) { filter = toPrune[i]; if (filter.test(selectorsStr)) { if (selectors.$isFashionSelectorPart || selectors.$isFashionMultiPartSelector || selectors.$isFashionCompoundSelector) { obj.selectors = null; } else if (selectors.$isFashionSelectorList) { selectors = selectors.items; for (let j = selectors.length - 1; j >= 0; j--) { if (filter.test(selectors[j].toString())) { selectors.splice(j--,1); } } if (selectors.length == 0) { obj.selectors = null; } else if (selectors.length == 1) { selectors = obj.selectors = selectors[0]; selectorsStr = selectors.toString(); continue; } else { obj.selectors = new SelectorList(selectors); } } break; } } if (obj.selectors != null) { me.visit(obj.selectors); if (obj.isAtRule()) { me.runHooks(obj, atRuleHooks[obj.getFirstSelectorStr()]); } me.visit(obj.declarations); me.visit(obj.children); } me.currRuleset = null; }, selector (obj) { this.runHooks(this.currRuleset, selectorHooks[obj.toString()]); }, execute (obj, ctx) { this.context = ctx; this.visit(obj); this.context = null; } }); } function registerHooks(map, obj) { register(); var hooks; for (var key in obj) { hooks = map[key]; if (!hooks) { hooks = map[key] = []; } hooks.push(obj[key]); } } runtime.registerSelectorHooks = function (obj) { registerHooks(selectorHooks, obj); }; runtime.registerAtRuleHook = function (obj) { registerHooks(atRuleHooks, obj); }; runtime.registerStyleHooks = function (obj) { registerHooks(styleHooks, obj); }; runtime.registerFunctionCallHooks = function (obj) { registerHooks(functionCallHooks, obj); }; if (runtime.context.getConfig('prune') != null) { toPrune = runtime.context.getConfig('prune').map((s) => { s = s.replace(/[\-\[\]/{}()*+?.\\\^$|]/g, "\\$&"); return new RegExp(`^${s}$|${s}\\b`); }); register(); } } };