Skip to content

Commit ab8e982

Browse files
committed
refactor: move getClassName function to class utilities
1 parent 280f1ed commit ab8e982

File tree

2 files changed

+73
-50
lines changed

2 files changed

+73
-50
lines changed

src/twcss-to-sass.ts

Lines changed: 20 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import beautifyCss, { CSSBeautifyOptions } from 'js-beautify'
33

44
import Utils from './utils/utils'
55
import HtmlUtils from './utils/html'
6-
import SlugUtils from './utils/slug'
76
import ClassUtils from './utils/class'
87

98
import { ITwToSassOptions } from './interfaces/tw-to-sass-options'
@@ -167,51 +166,6 @@ function filterHtmlData(nodeTree: IHtmlNode[], deepth = 0): IHtmlNode[] {
167166
return []
168167
}
169168

170-
/**
171-
* Get CSS class name from node details
172-
*
173-
* @param node IHtmlNode
174-
* @param deepth number
175-
*
176-
* @returns string
177-
*/
178-
function getClassName(node: IHtmlNode, deepth: number): string {
179-
let className = ''
180-
181-
const exceptTagNames = ['html', 'head', 'body', 'style']
182-
183-
// comment to class name
184-
if (node.comment && _defaultOptions.useCommentBlocksAsClassName) {
185-
let classSlug = _defaultOptions.classNameOptions.prefix
186-
187-
classSlug += SlugUtils.slugify(
188-
SlugUtils.removeUrl(node.comment),
189-
_defaultOptions.classNameOptions
190-
)
191-
192-
classSlug =
193-
classSlug.length > _defaultOptions.maxClassNameLength
194-
? classSlug.substring(0, _defaultOptions.maxClassNameLength)
195-
: classSlug
196-
197-
classSlug += _defaultOptions.classNameOptions.suffix
198-
199-
className = '.' + classSlug
200-
} // tag name selector
201-
else if (
202-
exceptTagNames.indexOf(node.tagName) > -1 ||
203-
(!node.hasElementChildren && node.tagName != 'div')
204-
) {
205-
// TODO: add exclude option for tag names
206-
className = `${node.tagName}`
207-
} // default placeholder class name
208-
else {
209-
className = `.class-${node.tagName}${deepth ? '-' + deepth : ''}`
210-
}
211-
212-
return className
213-
}
214-
215169
/**
216170
* Get CSS class name from node details
217171
*
@@ -267,7 +221,11 @@ function groupUtilityToSass(
267221
const groupModifierPair = <IGroupModifierPair>{
268222
modifier: matches?.[1],
269223
utility: matches?.[2],
270-
className: getClassName(node, node.order),
224+
className: ClassUtils.getClassName(
225+
node,
226+
node.order,
227+
_defaultOptions
228+
),
271229
}
272230

273231
groupModifierList.push(groupModifierPair)
@@ -365,7 +323,11 @@ function peerUtilityToSass(
365323
const groupModifierPair = <IGroupModifierPair>{
366324
modifier: matches?.[1],
367325
utility: matches?.[2],
368-
className: getClassName(node, node.order),
326+
className: ClassUtils.getClassName(
327+
node,
328+
node.order,
329+
_defaultOptions
330+
),
369331
}
370332

371333
peerModifierList.push(groupModifierPair)
@@ -534,7 +496,11 @@ function getSassTree(nodeTree: IHtmlNode[]): string {
534496
} */`
535497
: ''
536498

537-
const className = getClassName(node, node.order)
499+
const className = ClassUtils.getClassName(
500+
node,
501+
node.order,
502+
_defaultOptions
503+
)
538504

539505
let groupUtilityTree = ''
540506

@@ -592,7 +558,11 @@ function getHtmlTree(nodeTree: IHtmlNode[]): string {
592558
let htmlTree = ''
593559

594560
nodeTree.forEach(function (node: IHtmlNode, index) {
595-
const className = getClassName(node, node.order)
561+
const className = ClassUtils.getClassName(
562+
node,
563+
node.order,
564+
_defaultOptions
565+
)
596566

597567
if (node.type == 'element' && node.tagName != 'style') {
598568
if (_defaultOptions.printHtmlComments) {

src/utils/class.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import { IHtmlNode } from '../interfaces/html-node'
2+
import { ITwToSassOptions } from '../interfaces/tw-to-sass-options'
3+
import SlugUtils from './slug'
4+
15
const ClassUtils = {
26
/**
37
* Order by class names
@@ -16,6 +20,55 @@ const ClassUtils = {
1620

1721
return orderedClassList
1822
},
23+
24+
/**
25+
* Get CSS class name from node details
26+
*
27+
* @param node IHtmlNode
28+
* @param deepth number
29+
*
30+
* @returns string
31+
*/
32+
getClassName(
33+
node: IHtmlNode,
34+
deepth: number,
35+
options: ITwToSassOptions
36+
): string {
37+
let className = ''
38+
39+
const exceptTagNames = ['html', 'head', 'body', 'style']
40+
41+
// comment to class name
42+
if (node.comment && options.useCommentBlocksAsClassName) {
43+
let classSlug = options.classNameOptions.prefix
44+
45+
classSlug += SlugUtils.slugify(
46+
SlugUtils.removeUrl(node.comment),
47+
options.classNameOptions
48+
)
49+
50+
classSlug =
51+
classSlug.length > options.maxClassNameLength
52+
? classSlug.substring(0, options.maxClassNameLength)
53+
: classSlug
54+
55+
classSlug += options.classNameOptions.suffix
56+
57+
className = '.' + classSlug
58+
} // tag name selector
59+
else if (
60+
exceptTagNames.indexOf(node.tagName) > -1 ||
61+
(!node.hasElementChildren && node.tagName != 'div')
62+
) {
63+
// TODO: add exclude option for tag names
64+
className = `${node.tagName}`
65+
} // default placeholder class name
66+
else {
67+
className = `.class-${node.tagName}${deepth ? '-' + deepth : ''}`
68+
}
69+
70+
return className
71+
},
1972
}
2073

2174
export default ClassUtils

0 commit comments

Comments
 (0)