fwDOM parseToken function expr var match if exec expr premod RegExp ex

 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
fwDOM.parseToken = function( expr ){
var match, r = {};
if( /^([>:+~=!])/.exec( expr ) ){
r.premod = RegExp.$1;
expr = expr.substr(1);
} else
r.premod = '_';
if((match = fwDOM.Expr.single.exec(expr))){
var aCount = 0;
r.tag = match[2].toUpperCase(); // tag
r.jor = match[3]; // # || .
r.id = r.jor == '#' ? match[4] : null;
r.cl = r.jor == '.' ? match[4] : null;
if( match[5] ){ // params etc
match = match[5].replace(/([:])/,"_$1_").split('_');
if( match[0] ){
var attrs = match[0].split(']');
var _attrs = {};
for (var k in attrs) {
if(attrs[k]) {
aCount+=1;
var g = attrs[k].match(/^\[(.*)/)[1],
m = fwDOM.Expr['mod'].test(g) ? RegExp.$1 : '=';
g = g.split( m );
// @todo Сделать св-во eq со значеями !=, $=, etc
if ( g[1] && g[1].match(/^[\'\"](\w+)/) ) {
_attrs[g[0]] = {strict: RegExp.$1};
} else
_attrs[g[0]] = g[1];
}
}
r.attrs = aCount > 0 ? _attrs : null;
}
if(match[1]){
r.mod = match[1];
}
if(match[2]){
// Додумать как это дальше парсить
r.modificator = match[2];
}
}
r.parsed = 1;
/*if( r.attrs && r.attrs['class']
&& ( r.attrs['class'].strict || /^\w+$/.test(r.attrs['class'])) ){
r.cl = r.attrs['class'].strict || r.attrs['class'];
if(aCount == 1)
delete r.attrs;
else
delete r.attrs['class'];
}*/
}
return r;
}