@@ -12,30 +12,48 @@ module.exports = {
1212 'o'
1313 ] ,
1414
15+ /**
16+ * Internal
17+ *
18+ * Make namespace from property name
19+ * @param {String } propertyName
20+ * @returns {String|undefined }
21+ */
22+ _makeNamespace : function ( propertyName ) {
23+ var info = this . _getPrefixInfo ( propertyName ) ;
24+ return info && info . baseName ;
25+ } ,
26+
1527 /**
1628 * Internal
1729 *
1830 * Create object which contains info about vendor prefix used in propertyName.
1931 * @param {String } propertyName property name
2032 * @returns {Object|undefined }
2133 */
22- _getPrefixInfo : function ( propertyName ) {
23- if ( ! propertyName ) return ;
34+ _getPrefixInfo : function ( propertyName , namespace ) {
35+ var baseName = propertyName ;
36+ var prefixLength = 0 ;
2437
25- var result = { baseName : propertyName , prefixLength : 0 } ;
38+ namespace = namespace || '' ;
39+
40+ if ( ! propertyName ) return ;
2641
2742 this . _prefixesList . some ( function ( prefix ) {
28- // TODO: Why don't we store prefixes with `-`?
2943 prefix = '-' + prefix + '-' ;
3044 if ( propertyName . indexOf ( prefix ) !== 0 ) return ;
31- result = {
32- baseName : propertyName . substr ( prefix . length ) ,
33- prefixLength : prefix . length
34- } ;
45+
46+ baseName = baseName . substr ( prefix . length ) ;
47+ prefixLength = prefix . length ;
48+
3549 return true ;
3650 } ) ;
3751
38- return result ;
52+ return {
53+ id : namespace + baseName ,
54+ baseName : baseName ,
55+ prefixLength : prefixLength
56+ } ;
3957 } ,
4058
4159 /**
@@ -46,9 +64,12 @@ module.exports = {
4664 * @param {function } selector
4765 * @param {function } payload
4866 */
49- _walk : function ( node , selector , payload ) {
67+ _walk : function ( node , selector , payload , namespaceSelector ) {
5068 node . forEach ( function ( item , i ) {
51- var info = this . _getPrefixInfo ( selector ( item ) ) ;
69+ var info = this . _getPrefixInfo (
70+ selector ( item ) ,
71+ namespaceSelector && this . _makeNamespace ( namespaceSelector ( item ) )
72+ ) ;
5273 if ( ! info ) return ;
5374 payload ( info , i ) ;
5475 } , this ) ;
@@ -103,14 +124,14 @@ module.exports = {
103124 _updateDict : function ( info , dict , whitespaceNode ) {
104125 if ( info . prefixLength === 0 ) return ;
105126
106- var indent = dict [ info . baseName ] || { prefixLength : 0 , baseLength : 0 } ;
127+ var indent = dict [ info . id ] || { prefixLength : 0 , baseLength : 0 } ;
107128
108- dict [ info . baseName ] = indent . prefixLength > info . prefixLength ?
109- indent :
110- {
111- prefixLength : info . prefixLength ,
112- baseLength : whitespaceNode . substr ( whitespaceNode . lastIndexOf ( '\n' ) + 1 ) . length
113- } ;
129+ dict [ info . id ] = indent . prefixLength > info . prefixLength ?
130+ indent :
131+ {
132+ prefixLength : info . prefixLength ,
133+ baseLength : whitespaceNode . substr ( whitespaceNode . lastIndexOf ( '\n' ) + 1 ) . length
134+ } ;
114135 } ,
115136
116137 /**
@@ -121,14 +142,15 @@ module.exports = {
121142 * @returns {String }
122143 */
123144 _updateIndent : function ( info , dict , whitespaceNode ) {
124- if ( ! dict [ info . baseName ] )
145+ var item = dict [ info . id ] ;
146+ if ( ! item )
125147 return whitespaceNode ;
126148
127149 var firstPart = whitespaceNode . substr ( 0 , whitespaceNode . lastIndexOf ( '\n' ) + 1 ) ;
128150 var extraIndent = new Array (
129- dict [ info . baseName ] . prefixLength -
151+ item . prefixLength -
130152 info . prefixLength +
131- dict [ info . baseName ] . baseLength + 1 ) . join ( ' ' ) ;
153+ item . baseLength + 1 ) . join ( ' ' ) ;
132154
133155 return firstPart . concat ( extraIndent ) ;
134156 } ,
@@ -160,15 +182,16 @@ module.exports = {
160182 } ) ;
161183 this . _walk ( node , this . _getValName , function ( info , i ) {
162184 _this . _updateDict ( info , dict , node [ i ] [ 3 ] [ 1 ] [ 1 ] ) ;
163- } ) ;
185+ } , this . _getDeclName ) ;
164186
165187 // Update nodes
166188 this . _walk ( node , this . _getDeclName , function ( info , i ) {
167189 node [ i - 1 ] [ 1 ] = _this . _updateIndent ( info , dict , node [ i - 1 ] [ 1 ] ) ;
168190 } ) ;
169191 this . _walk ( node , this . _getValName , function ( info , i ) {
170192 node [ i ] [ 3 ] [ 1 ] [ 1 ] = _this . _updateIndent ( info , dict , node [ i ] [ 3 ] [ 1 ] [ 1 ] ) ;
171- } ) ;
193+ } , this . _getDeclName ) ;
194+
172195 } ,
173196
174197 /**
0 commit comments