Skip to content

Commit db93624

Browse files
committed
refactor(optimization): Only compute element style when simple checks have not catched on
1 parent e4a9c5d commit db93624

File tree

1 file changed

+58
-58
lines changed

1 file changed

+58
-58
lines changed

plugins/removeHiddenElems.js

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -190,38 +190,6 @@ export const fn = (root, params) => {
190190
}
191191
}
192192

193-
// Removes hidden elements
194-
// https://www.w3schools.com/cssref/pr_class_visibility.asp
195-
const computedStyle = computeStyle(stylesheet, node);
196-
if (
197-
isHidden &&
198-
computedStyle.visibility &&
199-
computedStyle.visibility.type === 'static' &&
200-
computedStyle.visibility.value === 'hidden' &&
201-
// keep if any descendant enables visibility
202-
querySelector(node, '[visibility=visible]') == null
203-
) {
204-
removeElement(node, parentNode);
205-
return;
206-
}
207-
208-
// display="none"
209-
//
210-
// https://www.w3.org/TR/SVG11/painting.html#DisplayProperty
211-
// "A value of display: none indicates that the given element
212-
// and its children shall not be rendered directly"
213-
if (
214-
displayNone &&
215-
computedStyle.display &&
216-
computedStyle.display.type === 'static' &&
217-
computedStyle.display.value === 'none' &&
218-
// markers with display: none still rendered
219-
node.name !== 'marker'
220-
) {
221-
removeElement(node, parentNode);
222-
return;
223-
}
224-
225193
// Circles with zero radius
226194
//
227195
// https://www.w3.org/TR/SVG11/shapes.html#CircleElementRAttribute
@@ -363,32 +331,6 @@ export const fn = (root, params) => {
363331
return;
364332
}
365333

366-
// Path with empty data
367-
//
368-
// https://www.w3.org/TR/SVG11/paths.html#DAttribute
369-
//
370-
// <path d=""/>
371-
if (pathEmptyD && node.name === 'path') {
372-
if (node.attributes.d == null) {
373-
removeElement(node, parentNode);
374-
return;
375-
}
376-
const pathData = parsePathData(node.attributes.d);
377-
if (pathData.length === 0) {
378-
removeElement(node, parentNode);
379-
return;
380-
}
381-
// keep single point paths for markers
382-
if (
383-
pathData.length === 1 &&
384-
computedStyle['marker-start'] == null &&
385-
computedStyle['marker-end'] == null
386-
) {
387-
removeElement(node, parentNode);
388-
return;
389-
}
390-
}
391-
392334
// Polyline with empty points
393335
//
394336
// https://www.w3.org/TR/SVG11/shapes.html#PolylineElementPointsAttribute
@@ -417,6 +359,64 @@ export const fn = (root, params) => {
417359
return;
418360
}
419361

362+
// Removes hidden elements
363+
// https://www.w3schools.com/cssref/pr_class_visibility.asp
364+
const computedStyle = computeStyle(stylesheet, node);
365+
if (
366+
isHidden &&
367+
computedStyle.visibility &&
368+
computedStyle.visibility.type === 'static' &&
369+
computedStyle.visibility.value === 'hidden' &&
370+
// keep if any descendant enables visibility
371+
querySelector(node, '[visibility=visible]') == null
372+
) {
373+
removeElement(node, parentNode);
374+
return;
375+
}
376+
377+
// display="none"
378+
//
379+
// https://www.w3.org/TR/SVG11/painting.html#DisplayProperty
380+
// "A value of display: none indicates that the given element
381+
// and its children shall not be rendered directly"
382+
if (
383+
displayNone &&
384+
computedStyle.display &&
385+
computedStyle.display.type === 'static' &&
386+
computedStyle.display.value === 'none' &&
387+
// markers with display: none still rendered
388+
node.name !== 'marker'
389+
) {
390+
removeElement(node, parentNode);
391+
return;
392+
}
393+
394+
// Path with empty data
395+
//
396+
// https://www.w3.org/TR/SVG11/paths.html#DAttribute
397+
//
398+
// <path d=""/>
399+
if (pathEmptyD && node.name === 'path') {
400+
if (node.attributes.d == null) {
401+
removeElement(node, parentNode);
402+
return;
403+
}
404+
const pathData = parsePathData(node.attributes.d);
405+
if (pathData.length === 0) {
406+
removeElement(node, parentNode);
407+
return;
408+
}
409+
// keep single point paths for markers
410+
if (
411+
pathData.length === 1 &&
412+
computedStyle['marker-start'] == null &&
413+
computedStyle['marker-end'] == null
414+
) {
415+
removeElement(node, parentNode);
416+
return;
417+
}
418+
}
419+
420420
for (const [name, value] of Object.entries(node.attributes)) {
421421
const ids = findReferences(name, value);
422422

0 commit comments

Comments
 (0)