@@ -3,7 +3,8 @@ module.exports = function(less) {
3
3
var shortHandProperties = [ "margin" , "border-width" , "padding" , "border-radius" , "border" , "border-style" ] ;
4
4
var keywordProperties = [ "float" , "text-align" ] ;
5
5
6
- function RTLPlugin ( ) {
6
+ function RTLPlugin ( options ) {
7
+ this . _options = options ;
7
8
this . _visitor = new less . visitors . Visitor ( this ) ;
8
9
} ;
9
10
@@ -25,30 +26,76 @@ module.exports = function(less) {
25
26
return this . _visitor . visit ( root ) ;
26
27
} ,
27
28
visitRule : function ( ruleNode , visitArgs ) {
28
- if ( ! ruleNode . variable && ruleNode . name . match ( / ( ^ | - ) ( l e f t | r i g h t ) ( $ | - ) / ) ) {
29
+
30
+ if ( ruleNode . variable ) {
31
+ return ruleNode ;
32
+ }
33
+
34
+ var nodeName = ruleNode . name ,
35
+ wantedDir = this . _options . dir ,
36
+ doReverse = this . _options . autoReverse && wantedDir === "RTL" ,
37
+ doRemove = false ,
38
+ match ;
39
+
40
+ if ( match = nodeName . match ( / ^ - r t l - r e v e r s e - ( .* ) $ / ) ) {
41
+ doReverse = wantedDir === "RTL" ;
42
+ nodeName = match [ 1 ] ;
43
+ }
44
+ else if ( match = nodeName . match ( / ^ - l t r - r e v e r s e - ( .* ) $ / ) ) {
45
+ doReverse = wantedDir === "LTR" ;
46
+ nodeName = match [ 1 ] ;
47
+ }
48
+ else if ( match = nodeName . match ( / ^ ( - r t l - l t r - | - l t r - r t l - ) ( .* ) $ / ) ) {
49
+ doReverse = false ;
50
+ nodeName = match [ 1 ] ;
51
+ }
52
+ else if ( match = nodeName . match ( / ^ - l t r - ( .* ) $ / ) ) {
53
+ doRemove = wantedDir === "RTL" ;
54
+ nodeName = match [ 1 ] ;
55
+ }
56
+ else if ( match = nodeName . match ( / ^ - r t l - ( .* ) $ / ) ) {
57
+ doRemove = wantedDir === "LTR" ;
58
+ nodeName = match [ 1 ] ;
59
+ }
60
+
61
+ if ( doRemove ) {
62
+ return ;
63
+ }
64
+
65
+ if ( ! doReverse && ! doRemove && nodeName === ruleNode . name ) {
66
+ return ruleNode ;
67
+ }
68
+
69
+ if ( doReverse && nodeName . match ( / ( ^ | - ) ( l e f t | r i g h t ) ( $ | - ) / ) ) {
70
+ nodeName = nodeName . replace ( / ( ^ | - ) ( l e f t | r i g h t ) ( $ | - ) / , function ( allOfMatch , leftPart , replacePart , rightPart ) {
71
+ if ( replacePart === "left" ) {
72
+ replacePart = "right" ;
73
+ } else {
74
+ replacePart = "left" ;
75
+ }
76
+ return leftPart + replacePart + rightPart ;
77
+ } ) ;
78
+ }
79
+
80
+ if ( doReverse && keywordProperties . indexOf ( nodeName ) >= 0 ) {
81
+ this . _reverseKeywords = true ;
82
+ }
83
+ else if ( doReverse && shortHandProperties . indexOf ( nodeName ) >= 0 ) {
84
+ this . _shortHandReorder = true ;
85
+ }
86
+
87
+ if ( nodeName !== ruleNode . name ) {
29
88
return new less . tree . Rule (
30
- ruleNode . name . replace ( / ( ^ | - ) ( l e f t | r i g h t ) ( $ | - ) / , function ( allOfMatch , leftPart , replacePart , rightPart ) {
31
- if ( replacePart === "left" ) {
32
- replacePart = "right" ;
33
- } else {
34
- replacePart = "left" ;
35
- }
36
- return leftPart + replacePart + rightPart ;
37
- } ) ,
89
+ nodeName ,
38
90
ruleNode . value ,
39
91
ruleNode . important ,
40
92
ruleNode . merge ,
41
93
ruleNode . index ,
42
94
ruleNode . currentFileInfo ,
43
95
ruleNode . inline ,
44
96
ruleNode . variable ) ;
45
- } else
46
- if ( keywordProperties . indexOf ( ruleNode . name ) >= 0 ) {
47
- this . _reverseKeywords = true ;
48
- } else
49
- if ( shortHandProperties . indexOf ( ruleNode . name ) >= 0 ) {
50
- this . _shortHandReorder = true ;
51
97
}
98
+
52
99
return ruleNode ;
53
100
} ,
54
101
visitRuleOut : function ( ) {
0 commit comments