forked from Kholid060/inspect-css
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetElementProperties.js
More file actions
75 lines (56 loc) · 1.75 KB
/
getElementProperties.js
File metadata and controls
75 lines (56 loc) · 1.75 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
/* eslint-disable no-param-reassign */
function generateBoxModels(name) {
const directions = ['top', 'right', 'bottom', 'left'];
const keys = directions.map((direction) => `${name}-${direction}`);
return keys;
}
function removePx(str) {
if (str === 'fontFamily') return '';
const value = str.replace('px', '');
const result = +value === 0 ? '-' : Math.floor(value);
return result;
}
function filterClasses(classes) {
const blackListClasses = ['hover-element', 'active-element'];
const filtered = classes.filter((name) => !blackListClasses.includes(name));
return filtered.length !== 0 ? `.${filtered.join('.')}` : '';
}
class ElementProperties {
constructor(reference) {
this.reference = reference;
this.computedStyleKeys = [
...generateBoxModels('margin'),
...generateBoxModels('padding'),
'fontFamily',
];
}
getSelector() {
const selector = {
tag: this.reference.tagName.toLowerCase(),
id: this.reference.id ? `#${this.reference.id}` : '',
classes: filterClasses(Array.from(this.reference.classList)),
};
return selector;
}
getSize() {
const { height, width } = this.reference.getBoundingClientRect();
return { height, width };
}
getComputedStyles() {
const computedStyles = this.computedStyleKeys.reduce((styles, key) => {
const value = getComputedStyle(this.reference)[key];
styles[key] = key === 'fontFamily' ? value.split(',')[0].replace(/"/g, '') : removePx(value);
return styles;
}, {});
return computedStyles;
}
getAll() {
const properties = {
selector: this.getSelector(),
size: this.getSize(),
computedStyles: this.getComputedStyles(),
};
return properties;
}
}
export default ElementProperties;