mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
cleanup work
This commit is contained in:
parent
509b032089
commit
79f868cbca
1 changed files with 0 additions and 123 deletions
|
|
@ -1,126 +1,3 @@
|
|||
/**
|
||||
* Template provides directions an how to bind to a given element.
|
||||
* It contains a list of init functions which need to be called to
|
||||
* bind to a new instance of elements. It also provides a list
|
||||
* of child paths which contain child templates
|
||||
*/
|
||||
function Template() {
|
||||
this.paths = [];
|
||||
this.children = [];
|
||||
this.inits = [];
|
||||
}
|
||||
|
||||
Template.prototype = {
|
||||
init: function(element, scope) {
|
||||
foreach(this.inits, function(fn) {
|
||||
scope.apply(fn, element);
|
||||
});
|
||||
|
||||
var i,
|
||||
childNodes = element.childNodes,
|
||||
children = this.children,
|
||||
paths = this.paths,
|
||||
length = paths.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
children[i].init(childNodes[paths[i]], scope);
|
||||
}
|
||||
},
|
||||
|
||||
addInit:function(init) {
|
||||
if (init) {
|
||||
this.inits.push(init);
|
||||
}
|
||||
},
|
||||
|
||||
setExclusiveInit: function(init) {
|
||||
this.inits = [init];
|
||||
this.addInit = noop;
|
||||
},
|
||||
|
||||
|
||||
addChild: function(index, template) {
|
||||
this.paths.push(index);
|
||||
this.children.push(template);
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////
|
||||
// Compiler
|
||||
//////////////////////////////////
|
||||
|
||||
function Compiler(markup, directives){
|
||||
this.markup = markup;
|
||||
this.directives = directives;
|
||||
}
|
||||
|
||||
DIRECTIVE = /^ng-(.*)$/;
|
||||
|
||||
Compiler.prototype = {
|
||||
compile: function(element) {
|
||||
var template = this.templetize(element) || new Template();
|
||||
return function(element){
|
||||
var scope = new Scope();
|
||||
scope.element = element;
|
||||
return {
|
||||
scope: scope,
|
||||
element:element,
|
||||
init: bind(template, template.init, element, scope)
|
||||
};
|
||||
};
|
||||
},
|
||||
|
||||
templetize: function(element){
|
||||
var chldrn, item, child, length, i, j, directive, init, template,
|
||||
childTemplate, recurse = true, directives = this.directives,
|
||||
markup = this.markup, markupLength = markup.length;
|
||||
|
||||
for (i = 0, chldrn = element.childNodes, length = chldrn.length;
|
||||
i < length; i++) {
|
||||
if ((child = chldrn[i]).nodeType == Node.TEXT_NODE) {
|
||||
for (j = 0; j < markupLength; j++) {
|
||||
markup[j].call(this, child.nodeValue, child, element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process attributes/directives
|
||||
for (i = 0, chldrn = element.attributes || [], length = chldrn.length;
|
||||
i < length; i++) {
|
||||
item = chldrn[i];
|
||||
var match = item.name.match(DIRECTIVE);
|
||||
if (match) {
|
||||
directive = directives[match[1]];
|
||||
if (directive) {
|
||||
init = directive.call(this, item.value, element);
|
||||
template = template || new Template();
|
||||
if (directive.exclusive) {
|
||||
template.setExclusiveInit(init);
|
||||
i = length; // quit iterations
|
||||
} else {
|
||||
template.addInit(init);
|
||||
}
|
||||
recurse = recurse && init;
|
||||
} else {
|
||||
error("Directive '" + match[0] + "' is not recognized.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process children
|
||||
if (recurse) {
|
||||
for (i = 0, chldrn = element.childNodes, length = chldrn.length;
|
||||
i < length; i++) {
|
||||
if((child = chldrn[i]).nodeType != Node.TEXT_NODE &&
|
||||
(childTemplate = this.templetize(child))) {
|
||||
template = template || new Template();
|
||||
template.addChild(i, childTemplate);
|
||||
}
|
||||
}
|
||||
}
|
||||
return template;
|
||||
}
|
||||
};
|
||||
|
||||
describe('compiler', function(){
|
||||
function element(html) {
|
||||
return jQuery(html)[0];
|
||||
|
|
|
|||
Loading…
Reference in a new issue