loader.js

来自「ajax框架原吗,dojo目前很流行的,希望大家多多学习啊」· JavaScript 代码 · 共 147 行

JS
147
字号
if(!dojo._hasResource["dojox.dtl.tag.loader"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.dtl.tag.loader"] = true;dojo.provide("dojox.dtl.tag.loader");dojo.require("dojox.dtl._base");dojox.dtl.tag.loader.BlockNode = function(name, nodelist){	this.name = name;	this.nodelist = nodelist; // Can be overridden}dojo.extend(dojox.dtl.tag.loader.BlockNode, {	render: function(context, buffer){		if(this.override){			buffer = this.override.render(context, buffer, this);			this.rendered = this.override;		}else{			buffer =  this.nodelist.render(context, buffer, this);			this.rendered = this.nodelist;		}		this.override = null;		return buffer;	},	unrender: function(context, buffer){		return this.rendered.unrender(context, buffer);	},	setOverride: function(nodelist){		// summary: In a shared parent, we override, not overwrite		if(!this.override){			this.override = nodelist;		}	},	toString: function(){ return "dojox.dtl.tag.loader.BlockNode"; }});dojox.dtl.tag.loader.block = function(parser, text){	var parts = text.split(" ");	var name = parts[1];		parser._blocks = parser._blocks || {};	parser._blocks[name] = parser._blocks[name] || [];	parser._blocks[name].push(name);		var nodelist = parser.parse(["endblock", "endblock " + name]);	parser.next();	return new dojox.dtl.tag.loader.BlockNode(name, nodelist);}dojox.dtl.tag.loader.ExtendsNode = function(getTemplate, nodelist, shared, parent, key){	this.getTemplate = getTemplate;	this.nodelist = nodelist;	this.shared = shared;	this.parent = parent;	this.key = key;}dojo.extend(dojox.dtl.tag.loader.ExtendsNode, {	parents: {},	getParent: function(context){		if(!this.parent){			this.parent = context.get(this.key, false);			if(!this.parent){				throw new Error("extends tag used a variable that did not resolve");			}			if(typeof this.parent == "object"){				if(this.parent.url){					if(this.parent.shared){						this.shared = true;					}					this.parent = this.parent.url.toString();				}else{					this.parent = this.parent.toString();				}			}			if(this.parent && this.parent.indexOf("shared:") == 0){				this.shared = true;				this.parent = this.parent.substring(7, parent.length);			}		}		var parent = this.parent;		if(!parent){			throw new Error("Invalid template name in 'extends' tag.");		}		if(parent.render){			return parent;		}		if(this.parents[parent]){			return this.parents[parent];		}		this.parent = this.getTemplate(dojox.dtl.text.getTemplateString(parent));		if(this.shared){			this.parents[parent] = this.parent;		}		return this.parent;	},	render: function(context, buffer){		var st = dojox.dtl;		var stbl = dojox.dtl.tag.loader;		var parent = this.getParent(context);		var isChild = parent.nodelist[0] instanceof this.constructor;		var parentBlocks = {};		for(var i = 0, node; node = parent.nodelist.contents[i]; i++){			if(node instanceof stbl.BlockNode){				parentBlocks[node.name] = node;			}		}		for(var i = 0, node; node = this.nodelist.contents[i]; i++){			if(node instanceof stbl.BlockNode){				var block = parentBlocks[node.name];				if(!block){					if(isChild){						parent.nodelist[0].nodelist.append(node);					}				}else{					if(this.shared){						block.setOverride(node.nodelist);					}else{						block.nodelist = node.nodelist;					}				}			}		}		this.rendered = parent;		return parent.render(context, buffer, this);	},	unrender: function(context, buffer){		return this.rendered.unrender(context, buffer, this);	},	toString: function(){ return "dojox.dtl.block.ExtendsNode"; }});dojox.dtl.tag.loader.extends_ = function(parser, text){	var parts = text.split(" ");	var shared = false;	var parent = null;	var key = null;	if(parts[1].charAt(0) == '"' || parts[1].charAt(0) == "'"){		parent = parts[1].substring(1, parts[1].length - 1);	}else{		key = parts[1];	}	if(parent && parent.indexOf("shared:") == 0){		shared = true;		parent = parent.substring(7, parent.length);	}	var nodelist = parser.parse();	return new dojox.dtl.tag.loader.ExtendsNode(parser.getTemplate, nodelist, shared, parent, key);}}

⌨️ 快捷键说明

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