Skip to content

Commit 77878d5

Browse files
committed
Merge pull request #157 from L0stSoul/left-indent
Left indent
2 parents 80b3b13 + 138f463 commit 77878d5

File tree

4 files changed

+64
-23
lines changed

4 files changed

+64
-23
lines changed

lib/options/vendor-prefix-align.js

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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
/**

test/options/vendor-prefix-align.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ describe('options/vendor-prefix-align', function() {
2020
this.shouldBeEqual('both.css', 'both.expected.css');
2121
});
2222

23+
it('Should correctly work when value and property name are the same', function() {
24+
this.shouldBeEqual('same-name.css', 'same-name.expected.css');
25+
});
26+
2327
it('Should always correctly align prefixes', function() {
2428
this.shouldBeEqual('complex.css', 'complex.expected.css');
2529
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.test
2+
{
3+
-webkit-transition: -webkit-transform .6s;
4+
transition: transform .6s;
5+
-webkit-transform: scale(.6, .6);
6+
transform: scale(.6, .6);
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.test
2+
{
3+
-webkit-transition: -webkit-transform .6s;
4+
transition: transform .6s;
5+
-webkit-transform: scale(.6, .6);
6+
transform: scale(.6, .6);
7+
}

0 commit comments

Comments
 (0)