⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decorator-support.js

📁 原名JSPackager
💻 JS
字号:
$JSI.addCacheScript('js/html/decorator-support.js',function(){this.hook = function(s){return eval(s);};eval(this.varText);var dns = "http://www.xidea.org/taglib/decorator";var nsExp = /^[dD]\:/;function DecoratorEngine() {this.providerMap = {};this.initialize();}DecoratorEngine.prototype.initialize = function () {var dps = $JSI.getAttribute("decoratorProviders") || [];for (var i = dps.length - 1; i >= 0; i--) {this.addProvider.apply(this, dps[i]);}var tag = $JSI.getAttribute("decoratorTag");if (tag) {this.tagExp = new RegExp("^" + tag + "$", "i");}};DecoratorEngine.prepare = function () {EventUtil.addDOMLoadListener(function () {if (!DecoratorEngine.mainEngine) {DecoratorEngine.mainEngine = new DecoratorEngine();window.setTimeout(function () {DecoratorEngine.mainEngine.run();}, 100);}});};DecoratorEngine.prototype.run = function (ele) {var root = this.buildTree(ele || document.body);for (var i = 0; i < root.length; i++) {this.loadTree(root[i]);}};DecoratorEngine.prototype.loadTree = function (node, parent) {var d = this.buildDecorator(node);this.beforeDecorate(d);for (var i = 0; i < node.children.length; i++) {this.loadTree(node.children[i], d);}this.doDecorate(d);};DecoratorEngine.prototype.buildTree = function (root) {var tree = {children:[]};if (this.tagExp) {this.htmlWalk(root, tree);return tree.children;}if (BrowserInfo.isIE()) {var ds = root.all.urns(dns);} else {if (document.documentElement.tagName == "html" && document.documentElement.namespaceURI == "http://www.w3.org/1999/xhtml") {var ds = document.getElementsByTagNameNS(dns, "*");} else {this.domWalk(root, tree);return tree.children;}}var pe = [root];var pn = [tree];outer:for (var i = 0; i < ds.length; i++) {var e = ds[i];var node = new NodeInfo(ds[i]);while (e = e.parentNode) {for (var j = pn.length - 1; j >= 0; j--) {if (pe[j] == e) {pn[j].children.push(node);pn[j + 1] = node;pe[j + 1] = e;pe.length = pn.length = j + 2;continue outer;}}}}delete ds;delete pe;delete pn;return tree.children;};var typeAttr = "d:decorator";if (BrowserInfo.isOpera(0, 8.9)) {typeAttr = "decorator";}DecoratorEngine.prototype.htmlWalk = function (node, parent) {if (this.tagExp.test(node.tagName)) {var dc = node.getAttribute(typeAttr);if (dc) {var info = new NodeInfo(node, true);parent.children.push(info);parent = info;}}var c = node.firstChild;while (c) {if (c.nodeType == 1) {this.htmlWalk(c, parent);}c = c.nextSibling;}};DecoratorEngine.prototype.domWalk = function (node, parent) {if (/^[dD]\:/.test(node.tagName)) {var name = node.tagName.substr(2);var info = new NodeInfo(node);parent.children.push(info);parent = info;}var c = node.firstChild;while (c) {if (c.nodeType == 1) {this.domWalk(c, parent);}c = c.nextSibling;}};function NodeInfo(node, nsAttr) {this.children = [];this.id = node.id || node.uniqueID || (node.id = $puid());if (nsAttr) {this.attrs = new Attributes(node, true);this.cls = this.attrs.get("decorator");} else {this.attrs = new Attributes(node);this.cls = node.tagName.replace(nsExp, "");}}function Attributes(node, ns) {this.valueMap = {};if (BrowserInfo.isIE(0, 5.9)) {this.initializeFromHTML(node, ns);} else {this.initialize(node, ns);}}Attributes.prototype.initializeFromHTML = function (node, ns) {var html = node.cloneNode().outerHTML;var matchs = html.match(/\b([\w\d_\$]+\s*=\s*("(\\.|[^\"\n\r])*"|'(\\.|[^\'\n\r])*'))/g);for (var i = matchs.length - 1; i >= 0; i--) {var values = matchs[i].match(/([\w\d_\$]+)\s*=\s*['"](.*)["']$/);this.valueMap[values[1]] = values[2];}};Attributes.prototype.initialize = function (node, ns) {var attrs = node.attributes;for (var i = attrs.length - 1; i >= 0; i--) {if (!attrs[i].nodeValue) {continue;}var name = attrs[i].nodeName;if (ns) {if (nsExp.test(name)) {name = name.substr(2);} else {continue;}}var node = {key:name, value:attrs[i].nodeValue};this.valueMap[node.key] = node.value;}};Attributes.prototype.get = function (key) {return this.valueMap[key] || this.valueMap[key.toUpperCase()];};DecoratorEngine.prototype.buildDecorator = function (info) {var p = info.attrs.get("provider");var provider = this.getProvider(p);var dec = provider.findDecorator(info.cls);if (!dec) {$log.error("missed decorator:", info.cls);return;}info.decorator = dec = new dec();dec.id = info.id;if (info.parent) {dec.parent = info.parent.decorator;(dec.parent.children || (dec.parent.children = [])).push(dec);}dec.attributes = info.attrs;return dec;};DecoratorEngine.prototype.beforeDecorate = function (dec) {try {dec.before();}catch (e) {$log.info("decorator before error:", e);}};DecoratorEngine.prototype.doDecorate = function (dec) {try {dec.decorate();}catch (e) {$log.info("decorator do decorate error:", e);}};DecoratorEngine.prototype.addProvider = function (pkgname, alias) {var pkg = $JSI.Package.require(pkgname);var provider = new DecoratorProvider(pkg);this.providerMap[pkg.name] = provider;for (var i = arguments.length - 1; i >= 0; i--) {this.providerMap[arguments[i]] = provider;}};DecoratorEngine.prototype.getProvider = function (name) {if (this.providerMap[name]) {return this.providerMap[name];} else {return this.providerMap["*"];}};function DecoratorProvider(pkg) {this.pkg = pkg;this.decoratorMap = {};this.initialize();}DecoratorProvider.prototype.initialize = function () {var names = this.pkg.objectNames;for (var i = 0; i < names.length; i++) {var name = names[i];if (this.decoratorMap[name]) {this.decoratorMap[name].push(name);} else {this.decoratorMap[name] = [name];}var bn = name.toUpperCase();if (this.decoratorMap[bn]) {this.decoratorMap[bn].push(name);} else {this.decoratorMap[bn] = [name];}}};DecoratorProvider.prototype.findDecorator = function (name) {var obj = this.decoratorMap[name];if (!obj) {name = name.toUpperCase();obj = this.decoratorMap[name];}if (obj) {if (obj.prototype instanceof Decorator) {return obj;} else {if (obj instanceof Array) {for (var i = 0; i < obj.length; i++) {var d = this.pkg.prepareObject(obj[i], false);if (d.prototype instanceof Decorator) {this.pkg.prepareObject(obj[i], true);return this.decoratorMap[name] = d;}}delete this.decoratorMap[name];}}}return null;};});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -