Blame view

framework/thirdparty/jquery-entwine/src/jquery.selector.affectedby.js 1.55 KB
385d70ca   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  (function($) {
  
  	// TODO:
  	// Make attributes & IDs work
  
  	var DIRECT = /DIRECT/g;
  	var CONTEXT = /CONTEXT/g;
  	var EITHER = /DIRECT|CONTEXT/g;
  
  	$.selector.SelectorBase.addMethod('affectedBy', function(props) {
  		this.affectedBy = new Function('props', ([
  			'var direct_classes, context_classes, direct_attrs, context_attrs, t;',
  			this.ABC_compile().replace(DIRECT, 'direct').replace(CONTEXT, 'context'),
  			'return {classes: {context: context_classes, direct: direct_classes}, attrs: {context: context_attrs, direct: direct_attrs}};'
  		]).join("\n"));
  
  		// DEBUG: Print out the compiled funciton
  		// console.log(this.selector, ''+this.affectedBy);
  
  		return this.affectedBy(props);
  	});
  
  	$.selector.SimpleSelector.addMethod('ABC_compile', function() {
  		var parts = [];
  
  		$.each(this.classes, function(i, cls){
  			parts[parts.length] = "if (t = props.classes['"+cls+"']) (DIRECT_classes || (DIRECT_classes = {}))['"+cls+"'] = t;";
  		});
  
  		$.each(this.nots, function(i, not){
  			parts[parts.length] = not.ABC_compile();
  		});
  
  		return parts.join("\n");
  	});
  
  	$.selector.Selector.addMethod('ABC_compile', function(arg){
  		var parts = [];
  		var i = this.parts.length-1;
  
  		parts[parts.length] = this.parts[i].ABC_compile();
  		while ((i = i - 2) >= 0) parts[parts.length] = this.parts[i].ABC_compile().replace(EITHER, 'CONTEXT');
  
  		return parts.join("\n");
  	});
  
  	$.selector.SelectorsGroup.addMethod('ABC_compile', function(){
  		var parts = [];
  
  		$.each(this.parts, function(i,part){
  			parts[parts.length] = part.ABC_compile();
  		});
  
  		return parts.join("\n");
  	});
  
  
  })(jQuery);