Skip to content

Commit 3044a46

Browse files
committed
fix: do not require Content-Secruity-Policy style-src 'unsafe-inline'
1 parent 31cabb5 commit 3044a46

File tree

1 file changed

+53
-15
lines changed

1 file changed

+53
-15
lines changed

src/ResizeSensor.js

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,18 @@
7474
}
7575
}
7676

77+
/**
78+
* Apply CSS styles to element.
79+
*
80+
* @param {HTMLElement} element
81+
* @param {Object} style
82+
*/
83+
function setStyle(element, style) {
84+
Object.keys(style).forEach(function(key) {
85+
element.style[key] = style[key];
86+
});
87+
}
88+
7789
/**
7890
* Class for dimension change detection.
7991
*
@@ -131,18 +143,47 @@
131143
element.resizeSensor = document.createElement('div');
132144
element.resizeSensor.dir = 'ltr';
133145
element.resizeSensor.className = 'resize-sensor';
134-
var style = 'pointer-events: none; position: absolute; left: 0px; top: 0px; right: 0; bottom: 0; ' +
135-
'overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;';
136-
var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;';
137-
138-
element.resizeSensor.style.cssText = style;
139-
element.resizeSensor.innerHTML =
140-
'<div class="resize-sensor-expand" style="' + style + '">' +
141-
'<div style="' + styleChild + '"></div>' +
142-
'</div>' +
143-
'<div class="resize-sensor-shrink" style="' + style + '">' +
144-
'<div style="' + styleChild + ' width: 200%; height: 200%"></div>' +
145-
'</div>';
146+
147+
var style = {
148+
pointerEvents: 'none',
149+
position: 'absolute',
150+
left: '0px',
151+
top: '0px',
152+
right: '0px',
153+
bottom: '0px',
154+
overflow: 'hidden',
155+
zIndex: '-1',
156+
visibility: 'hidden',
157+
maxWidth: '100%'
158+
};
159+
var styleChild = {
160+
position: 'absolute',
161+
left: '0px',
162+
top: '0px',
163+
transition: '0s',
164+
};
165+
166+
setStyle(element.resizeSensor, style);
167+
168+
var expand = document.createElement('div');
169+
expand.className = 'resize-sensor-expand';
170+
setStyle(expand, style);
171+
172+
var expandChild = document.createElement('div');
173+
setStyle(expandChild, styleChild);
174+
expand.appendChild(expandChild);
175+
176+
var shrink = document.createElement('div');
177+
shrink.className = 'resize-sensor-shrink';
178+
setStyle(shrink, style);
179+
180+
var shrinkChild = document.createElement('div');
181+
setStyle(shrinkChild, styleChild);
182+
setStyle(shrinkChild, { width: '200%', height: '200%' });
183+
shrink.appendChild(shrinkChild);
184+
185+
element.resizeSensor.appendChild(expand);
186+
element.resizeSensor.appendChild(shrink);
146187
element.appendChild(element.resizeSensor);
147188

148189
var computedStyle = window.getComputedStyle(element);
@@ -151,9 +192,6 @@
151192
element.style.position = 'relative';
152193
}
153194

154-
var expand = element.resizeSensor.childNodes[0];
155-
var expandChild = expand.childNodes[0];
156-
var shrink = element.resizeSensor.childNodes[1];
157195
var dirty, rafId;
158196
var size = getElementSize(element);
159197
var lastWidth = size.width;

0 commit comments

Comments
 (0)