1 | import * as is from '../is';
|
2 | import * as util from '../util';
|
3 |
|
4 | let styfn = {};
|
5 |
|
6 |
|
7 |
|
8 | styfn.applyBypass = function( eles, name, value, updateTransitions ){
|
9 | let self = this;
|
10 | let props = [];
|
11 | let isBypass = true;
|
12 |
|
13 |
|
14 | if( name === '*' || name === '**' ){
|
15 |
|
16 | if( value !== undefined ){
|
17 | for( let i = 0; i < self.properties.length; i++ ){
|
18 | let prop = self.properties[ i ];
|
19 | let name = prop.name;
|
20 |
|
21 | let parsedProp = this.parse( name, value, true );
|
22 |
|
23 | if( parsedProp ){
|
24 | props.push( parsedProp );
|
25 | }
|
26 | }
|
27 | }
|
28 |
|
29 | } else if( is.string( name ) ){
|
30 | let parsedProp = this.parse( name, value, true );
|
31 |
|
32 | if( parsedProp ){
|
33 | props.push( parsedProp );
|
34 | }
|
35 | } else if( is.plainObject( name ) ){
|
36 | let specifiedProps = name;
|
37 | updateTransitions = value;
|
38 |
|
39 | let names = Object.keys( specifiedProps );
|
40 |
|
41 | for( let i = 0; i < names.length; i++ ){
|
42 | let name = names[i];
|
43 | let value = specifiedProps[ name ];
|
44 |
|
45 | if( value === undefined ){
|
46 | value = specifiedProps[ util.dash2camel( name ) ];
|
47 | }
|
48 |
|
49 | if( value !== undefined ){
|
50 | let parsedProp = this.parse( name, value, true );
|
51 |
|
52 | if( parsedProp ){
|
53 | props.push( parsedProp );
|
54 | }
|
55 | }
|
56 | }
|
57 | } else {
|
58 | return false;
|
59 | }
|
60 |
|
61 |
|
62 | if( props.length === 0 ){ return false; }
|
63 |
|
64 |
|
65 | let ret = false;
|
66 | for( let i = 0; i < eles.length; i++ ){
|
67 | let ele = eles[ i ];
|
68 | let diffProps = {};
|
69 | let diffProp;
|
70 |
|
71 | for( let j = 0; j < props.length; j++ ){
|
72 | let prop = props[ j ];
|
73 |
|
74 | if( updateTransitions ){
|
75 | let prevProp = ele.pstyle( prop.name );
|
76 | diffProp = diffProps[ prop.name ] = { prev: prevProp };
|
77 | }
|
78 |
|
79 | ret = this.applyParsedProperty( ele, util.copy(prop) ) || ret;
|
80 |
|
81 | if( updateTransitions ){
|
82 | diffProp.next = ele.pstyle( prop.name );
|
83 | }
|
84 |
|
85 | }
|
86 |
|
87 | if( ret ){
|
88 | this.updateStyleHints( ele );
|
89 | }
|
90 |
|
91 | if( updateTransitions ){
|
92 | this.updateTransitions( ele, diffProps, isBypass );
|
93 | }
|
94 | }
|
95 |
|
96 | return ret;
|
97 | };
|
98 |
|
99 |
|
100 | styfn.overrideBypass = function( eles, name, value ){
|
101 | name = util.camel2dash( name );
|
102 |
|
103 | for( let i = 0; i < eles.length; i++ ){
|
104 | let ele = eles[ i ];
|
105 | let prop = ele._private.style[ name ];
|
106 | let type = this.properties[ name ].type;
|
107 | let isColor = type.color;
|
108 | let isMulti = type.mutiple;
|
109 | let oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value;
|
110 |
|
111 | if( !prop || !prop.bypass ){
|
112 | this.applyBypass( ele, name, value );
|
113 | } else {
|
114 | prop.value = value;
|
115 |
|
116 | if( prop.pfValue != null ){
|
117 | prop.pfValue = value;
|
118 | }
|
119 |
|
120 | if( isColor ){
|
121 | prop.strValue = 'rgb(' + value.join( ',' ) + ')';
|
122 | } else if( isMulti ){
|
123 | prop.strValue = value.join( ' ' );
|
124 | } else {
|
125 | prop.strValue = '' + value;
|
126 | }
|
127 |
|
128 | this.updateStyleHints( ele );
|
129 | }
|
130 |
|
131 | this.checkTriggers( ele, name, oldValue, value );
|
132 | }
|
133 | };
|
134 |
|
135 | styfn.removeAllBypasses = function( eles, updateTransitions ){
|
136 | return this.removeBypasses( eles, this.propertyNames, updateTransitions );
|
137 | };
|
138 |
|
139 | styfn.removeBypasses = function( eles, props, updateTransitions ){
|
140 | let isBypass = true;
|
141 |
|
142 | for( let j = 0; j < eles.length; j++ ){
|
143 | let ele = eles[ j ];
|
144 | let diffProps = {};
|
145 |
|
146 | for( let i = 0; i < props.length; i++ ){
|
147 | let name = props[ i ];
|
148 | let prop = this.properties[ name ];
|
149 | let prevProp = ele.pstyle( prop.name );
|
150 |
|
151 | if( !prevProp || !prevProp.bypass ){
|
152 |
|
153 | continue;
|
154 | }
|
155 |
|
156 | let value = '';
|
157 | let parsedProp = this.parse( name, value, true );
|
158 | let diffProp = diffProps[ prop.name ] = { prev: prevProp };
|
159 |
|
160 | this.applyParsedProperty( ele, parsedProp );
|
161 |
|
162 | diffProp.next = ele.pstyle( prop.name );
|
163 | }
|
164 |
|
165 | this.updateStyleHints( ele );
|
166 |
|
167 | if( updateTransitions ){
|
168 | this.updateTransitions( ele, diffProps, isBypass );
|
169 | }
|
170 | }
|
171 | };
|
172 |
|
173 | export default styfn;
|