1
1
'use strict' ;
2
2
3
3
const rcs = require ( '../rcs' ) ;
4
+ const _ = require ( 'lodash' ) ;
4
5
5
6
/**
6
7
* a library holding all information about the selectors including its old states
@@ -9,7 +10,6 @@ class SelectorLibrary {
9
10
constructor ( ) {
10
11
this . selectors = { } ;
11
12
this . compressedSelectors = { } ;
12
- this . created
13
13
}
14
14
15
15
/**
@@ -21,16 +21,15 @@ class SelectorLibrary {
21
21
get ( selector , options ) {
22
22
// @todo set options with isSelectors
23
23
let matchedSelector = selector . replace ( / ( \. | # ) / , '' ) ; // replaces the first character from a css selector `#test` and `.test` into `test`
24
- let result = this . selectors [ matchedSelector ] ; ;
25
-
26
- // set options if its is not set or is not an object
27
- options = ! options && typeof options !== 'object' ? { } : options ;
24
+ let result = this . selectors [ matchedSelector ] ;
28
25
26
+ const optionsDefault = {
27
+ origValues : true ,
28
+ isSelectors : false ,
29
+ isCompressed : true
30
+ }
29
31
30
- // set default parameters if they are not set in the options
31
- options . isCompressed = typeof options . isCompressed !== 'undefined' ? options . isCompressed : true ; // default true
32
- options . isSelectors = typeof options . isSelectors !== 'undefined' ? options . isSelectors : false ; // default false
33
- options . origValues = typeof options . origValues !== 'undefined' ? options . origValues : true ; // default true
32
+ options = _ . merge ( optionsDefault , options ) ;
34
33
35
34
// change the objects if origValues are set to false - to get information about the compressed selectors
36
35
if ( ! options . origValues ) {
@@ -52,72 +51,88 @@ class SelectorLibrary {
52
51
return result ;
53
52
}
54
53
54
+ /**
55
+ * @typedef {Object } getAllOptions
56
+ * @property {Boolean } [origValues=true] if it should return the original values or the compressed one
57
+ * @property {Boolean } [regex=false] if it should return a regex string
58
+ * @property {Boolean } [isSelectors=false] true appends appends the # for IDs or . for Classes
59
+ * @property {Boolean } [extended=false] extend the normal return value with metadata - has NO EFFECT in combination with REGEX
60
+ */
55
61
/**
56
62
* gets all selectors
57
63
*
58
- * @param {Boolean } [origValues=true]
59
- * @param {Boolean } [makeRegex=false] should return a regex string
60
- * @return {Object } returns this.selectors
64
+ * @todo add combination with isSelectors and extended
65
+ *
66
+ * @param {getAllOptions } [options]
67
+ * @return {String | Object } returns either a regex string or an object with elements, depends on the setted options
61
68
*/
62
69
getAll ( options ) {
63
70
let regex ;
64
71
let selector ;
65
- let selectors ;
72
+ let selectors = this . selectors ;
66
73
let compressedSelector ;
67
74
let originalSelector ;
68
75
let result = { } ;
69
76
let resultArray = [ ] ;
70
77
71
- // set options if its is not set or is not an object
72
- options = ! options && typeof options !== 'object' ? { } : options ;
78
+ const optionsDefault = {
79
+ origValues : true ,
80
+ regex : false ,
81
+ isSelectors : false ,
82
+ extended : false
83
+ }
73
84
74
- // set default parameters if they are not set in the options
75
- options . origValues = typeof options . origValues !== 'undefined' ? options . origValues : true ; // default true
76
- options . regex = typeof options . regex !== 'undefined' ? options . regex : false ; // default false
77
- options . isSelectors = typeof options . isSelectors !== 'undefined' ? options . isSelectors : false ; // default false
85
+ options = _ . merge ( optionsDefault , options ) ;
78
86
79
- selectors = this . selectors ;
87
+ if ( ! options . extended ) {
88
+ for ( selector in selectors ) {
89
+ compressedSelector = selectors [ selector ] . compressedSelector ;
90
+ originalSelector = selector ;
80
91
81
- for ( selector in selectors ) {
82
- compressedSelector = selectors [ selector ] . compressedSelector ;
83
- originalSelector = selector ;
92
+ if ( options . origValues ) { // save originalSelectors
93
+ result [ selector ] = compressedSelector
94
+ resultArray . push ( originalSelector ) ;
95
+ } else { // save compressedSelectors
96
+ result [ compressedSelector ] = originalSelector ;
97
+ resultArray . push ( compressedSelector ) ;
98
+ }
99
+ }
84
100
85
- if ( options . origValues ) { // save originalSelectors
86
- result [ selector ] = compressedSelector
87
- resultArray . push ( originalSelector ) ;
88
- } else { // save compressedSelectors
89
- result [ compressedSelector ] = originalSelector ;
90
- resultArray . push ( compressedSelector ) ;
101
+ // sort array by it's length to avoid e.g. BEM syntax
102
+ if ( options . regex ) {
103
+ resultArray = resultArray . sort ( ( a , b ) => {
104
+ return b . length - a . length ;
105
+ } ) ;
91
106
}
92
- }
93
107
94
- // sort array by it's length to avoid e.g. BEM syntax
95
- resultArray = resultArray . sort ( ( a , b ) => {
96
- return b . length - a . length ;
97
- } ) ;
98
-
99
- if ( options . isSelectors ) {
100
- resultArray = resultArray . map ( value => {
101
- let selectorMap = this . get ( value , {
102
- origValues : options . origValues ,
103
- isSelectors : options . isSelectors ,
104
- isCompressed : false
108
+ if ( options . isSelectors ) {
109
+ resultArray = resultArray . map ( value => {
110
+ let selectorMap = this . get ( value , {
111
+ origValues : options . origValues ,
112
+ isSelectors : options . isSelectors ,
113
+ isCompressed : false
114
+ } ) ;
115
+
116
+ return selectorMap . typeChar + value ;
105
117
} ) ;
118
+ }
106
119
107
- return selectorMap . typeChar + value ;
108
- } ) ;
109
- }
120
+ // return a new regex
121
+ if ( options . regex ) {
122
+ regex = resultArray . length === 0 ? undefined : new RegExp ( resultArray . join ( "|" ) , 'g' ) ;
110
123
111
- // console.log(resultArray);
124
+ return regex ;
125
+ }
112
126
113
- // return a new regex
114
- if ( options . regex ) {
115
- regex = resultArray . length === 0 ? undefined : new RegExp ( resultArray . join ( "|" ) , 'g' ) ;
127
+ return result ;
128
+ }
116
129
117
- return regex ;
130
+ // if it is extended
131
+ if ( options . origValues ) {
132
+ return this . selectors ;
118
133
}
119
134
120
- return result ;
135
+ return this . compressedSelectors ;
121
136
}
122
137
123
138
/**
@@ -154,7 +169,7 @@ class SelectorLibrary {
154
169
155
170
selectorLibrarySelector = value . slice ( 1 , value . length ) ;
156
171
157
- // save into this.selectors and this.compressedSelectors
172
+ // save css selector into this.selectors and this.compressedSelectors
158
173
this . selectors [ selectorLibrarySelector ] = this . setValue ( value ) ;
159
174
this . compressedSelectors [ this . selectors [ selectorLibrarySelector ] . compressedSelector ] = this . selectors [ selectorLibrarySelector ] ;
160
175
@@ -194,19 +209,6 @@ class SelectorLibrary {
194
209
compressedSelector : compressedSelector
195
210
} ;
196
211
}
197
-
198
- /**
199
- * generates a file including all old and new selectors/names
200
- * includes also unused class selectors
201
- */
202
- generateLibraryFile ( ) {
203
- // @todo available options
204
- // savePath
205
- // justIds?
206
- // justClasses?
207
- // @todo get all selectors
208
- // @todo save file into path
209
- }
210
212
} ;
211
213
212
214
/**
0 commit comments