-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathclasses.js
More file actions
110 lines (103 loc) · 3.61 KB
/
classes.js
File metadata and controls
110 lines (103 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/** add a class if the condition is true.
* @param {boolean} [condition=true] - condition to display the class
* @param {string} [ifClass=null] - class to be returned if condition is true
* @param {string} [elseClass=null] - class to be returned if condition is false
* @example
* // returns 'on'
* addClassIf(true, 'on', 'off')
* @example
* // returns 'off'
* addClassIf(false, 'on', 'off')
* @returns {string} ifClass or elseClass
*/
function addClassIf(condition = true, ifClass = null, elseClass = null ) {
return !!condition ? ifClass : elseClass;
}
/** concatenate all params as a class
* @param {...string} - classes to be concatenated
* @example
* // returns 'my-component my-second-class ...'
* concatClass('my-component', 'my-second-class', '...')
*
* @return {string} all the params together as html classes
*/
function concatClass(...classes) {
return classes.join(" ").trim();
}
/** add base class and a class if certain condition is true
* @param {boolean} [condition=false] - condition to display de class
* @param {string} [baseClass=null] - the base class is always in the return
* @param {string} [classIf=null] - the class to be returned if condition is true
* @param {string} [classElse=null] - the class to be returned if condition is false
* @example
* // returns 'base-classe on'
* toggleClass(true, 'base-class', 'on', 'off')
* @example
* // returns 'base-class off'
* toggleClass(false, 'base-class', 'on', 'off')
*
* @return {string} the base class and if or else class
*/
function toggleClass(
expression = false,
defaultClass = null,
ifConditionalIsTrue = null,
ifConditionalIsFalse = null
) {
return expression
? concatClass(defaultClass, ifConditionalIsTrue)
: concatClass(defaultClass, ifConditionalIsFalse);
}
/** gst is a acronym to getStyleClass - A css module function to get and return classes inside styles object
* @param {object} [styles={}] - The css module object with hashed classes
* @param {string} [className=''] - The classes separated by space
* @example
*
* const styles = {
* container: 'Component_container__WQ2uP',
* content: 'Component_content__uP24c'
* }
* getStyleClass(styles, 'container content')
* // returns 'Component_container__WQ2uP Component_content__uP24c'
*
* @return {string} string of classes
*/
function gst(styles, type) {
if (type) {
const types = type.split(/\s/);
if (types.length) {
return types
.reduce((acc, currentType) => {
if (styles[currentType]) {
acc.push(styles[currentType]);
}
return acc;
}, [])
.join(" ");
}
}
return null;
}
/** A function mix all helpers together, to prevent verbose code like concacClass(gst(styles, 'container'), 'on')
* @param {object} [styles={}] - object css module of css or scss file
* @param {string} [baseClass=''] - A classes in styles object separated by space
* @param {...string} - strings that will be included (concatenated) with base class
* @example
*
* const styles = {
* container: 'Component_container__WQ2uP',
* content: 'Component_content__uP24c'
* }
* c(styles, 'container content', 'my-other-class')
* // returns 'Component_container__WQ2uP Component_content__uP24c my-other-class'
*/
function c(styles={}, baseClass=null, ...restClass){
return concatClass(gst(styles, baseClass), ...restClass)
}
module.exports = {
addClassIf,
concatClass,
toggleClass,
gst,
c,
}