1
1
/* JSTYLE - MIT License - (c) 2010 BeeBole.com - rev 1.0 */
2
- window . jstyle = function ( arg ) {
2
+ window . jstyle = ( function ( arg ) {
3
3
var vars = { } ,
4
4
agent = navigator . userAgent . toLowerCase ( ) ,
5
5
browsers = {
@@ -8,31 +8,25 @@ window.jstyle = function(arg){
8
8
'Opera' :agent . indexOf ( 'opera' ) > - 1 ,
9
9
'webkit' :agent . indexOf ( 'webkit' ) > - 1
10
10
} ,
11
- clean = function ( s ) {
12
- var t = s . replace ( / ^ \s \s * / , '' ) ,
13
- w = / \s / ,
14
- l = t . length ;
15
- while ( w . test ( t . charAt ( l -- ) ) ) ;
16
- return t . slice ( 0 , l + 1 ) . replace ( / \s * \n \s * / g, '' ) . replace ( / \t / g, '' ) . replace ( / \/ \* [ ^ \* ] + \* \/ / m, '' ) ;
17
- } ,
18
11
json2css = function ( json ) {
19
- var parseJSON = function ( sub ) {
20
- var a = [ ] , prop , subProp , varCall = / ( \$ \S + ) / , varVal ;
12
+ var jstyle = this ,
13
+ parseJSON = function ( sub ) {
14
+ var a = [ ] ,
15
+ prop , subProp ,
16
+ varCall = / ( \$ ( \S + ) ) / , varVal , vars = jstyle . vars ;
21
17
for ( prop in sub ) {
22
18
subProp = sub [ prop ] ;
23
- subProp = typeof subProp === 'function' ? subProp ( json ) : subProp ;
24
- if ( prop [ 0 ] === '$' ) {
25
- vars [ prop ] = subProp ;
19
+ if ( typeof subProp === 'object' ) {
20
+ a . push ( prop + '{' + parseJSON ( subProp ) + '}' ) ;
26
21
} else {
27
- if ( typeof subProp === 'object' ) {
28
- a . push ( prop + '{' + parseJSON ( subProp ) + '}' ) ;
29
- } else {
30
- if ( ( varCall ) . test ( subProp ) ) {
31
- varVal = vars [ subProp . match ( varCall ) [ 0 ] ] ;
22
+ if ( ( varCall ) . test ( subProp ) ) {
23
+ varVal = vars [ subProp . match ( varCall ) [ 2 ] ] ;
24
+ varVal = typeof varVal === 'function' ? varVal . call ( jstyle , json ) : varVal ;
25
+ if ( subProp ) {
32
26
subProp = subProp . replace ( varCall , varVal ) ;
33
27
}
34
- a . push ( prop + ':' + subProp + ';' ) ;
35
28
}
29
+ a . push ( prop + ':' + subProp + ';' ) ;
36
30
}
37
31
}
38
32
return a . join ( '' ) ;
@@ -58,7 +52,7 @@ window.jstyle = function(arg){
58
52
browsers :browsers ,
59
53
json :{ } ,
60
54
styleNode :{ } ,
61
- jstyle : arguments . callee ,
55
+ vars : { } ,
62
56
addMethod :function ( name , fn ) {
63
57
this [ name ] = fn ;
64
58
return this ;
@@ -81,7 +75,7 @@ window.jstyle = function(arg){
81
75
styleNode = document . createElement ( 'STYLE' ) ;
82
76
styleNode . setAttribute ( 'type' , 'text/css' ) ;
83
77
add2head ( styleNode ) ;
84
- this . css = json2css ( this . json ) ;
78
+ this . css = json2css . call ( this , this . json ) ;
85
79
styleNode . styleSheet ?
86
80
styleNode . styleSheet . cssText = this . css :
87
81
styleNode . appendChild ( document . createTextNode ( this . css ) ) ;
@@ -111,6 +105,17 @@ window.jstyle = function(arg){
111
105
this . json [ rule ] && delete this . json [ rule ] ;
112
106
}
113
107
return this ;
108
+ } ,
109
+ setVars :function ( varHash ) {
110
+ for ( v in varHash ) {
111
+ if ( this . vars [ v ] ) {
112
+ alert ( 'The name ' + v + ' is already in use(' + this . vars [ v ] + '), please choose another one' ) ;
113
+ break ;
114
+ } else {
115
+ this . vars [ v ] = varHash [ v ] ;
116
+ }
117
+ }
118
+ return this ;
114
119
}
115
120
} ;
116
- } ;
121
+ } ) ( ) ;
0 commit comments