Skip to content

Commit 389ca99

Browse files
jelhanmarcj
authored andcommitted
fix: do not require Content-Secruity-Policy style-src 'unsafe-inline' (#256)
1 parent 0cadf8d commit 389ca99

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
@@ -81,6 +81,18 @@
8181
}
8282
}
8383

84+
/**
85+
* Apply CSS styles to element.
86+
*
87+
* @param {HTMLElement} element
88+
* @param {Object} style
89+
*/
90+
function setStyle(element, style) {
91+
Object.keys(style).forEach(function(key) {
92+
element.style[key] = style[key];
93+
});
94+
}
95+
8496
/**
8597
* Class for dimension change detection.
8698
*
@@ -138,18 +150,47 @@
138150
element.resizeSensor = document.createElement('div');
139151
element.resizeSensor.dir = 'ltr';
140152
element.resizeSensor.className = 'resize-sensor';
141-
var style = 'pointer-events: none; position: absolute; left: 0px; top: 0px; right: 0; bottom: 0; ' +
142-
'overflow: hidden; z-index: -1; visibility: hidden; max-width: 100%;';
143-
var styleChild = 'position: absolute; left: 0; top: 0; transition: 0s;';
144-
145-
element.resizeSensor.style.cssText = style;
146-
element.resizeSensor.innerHTML =
147-
'<div class="resize-sensor-expand" style="' + style + '">' +
148-
'<div style="' + styleChild + '"></div>' +
149-
'</div>' +
150-
'<div class="resize-sensor-shrink" style="' + style + '">' +
151-
'<div style="' + styleChild + ' width: 200%; height: 200%"></div>' +
152-
'</div>';
153+
154+
var style = {
155+
pointerEvents: 'none',
156+
position: 'absolute',
157+
left: '0px',
158+
top: '0px',
159+
right: '0px',
160+
bottom: '0px',
161+
overflow: 'hidden',
162+
zIndex: '-1',
163+
visibility: 'hidden',
164+
maxWidth: '100%'
165+
};
166+
var styleChild = {
167+
position: 'absolute',
168+
left: '0px',
169+
top: '0px',
170+
transition: '0s',
171+
};
172+
173+
setStyle(element.resizeSensor, style);
174+
175+
var expand = document.createElement('div');
176+
expand.className = 'resize-sensor-expand';
177+
setStyle(expand, style);
178+
179+
var expandChild = document.createElement('div');
180+
setStyle(expandChild, styleChild);
181+
expand.appendChild(expandChild);
182+
183+
var shrink = document.createElement('div');
184+
shrink.className = 'resize-sensor-shrink';
185+
setStyle(shrink, style);
186+
187+
var shrinkChild = document.createElement('div');
188+
setStyle(shrinkChild, styleChild);
189+
setStyle(shrinkChild, { width: '200%', height: '200%' });
190+
shrink.appendChild(shrinkChild);
191+
192+
element.resizeSensor.appendChild(expand);
193+
element.resizeSensor.appendChild(shrink);
153194
element.appendChild(element.resizeSensor);
154195

155196
var computedStyle = window.getComputedStyle(element);
@@ -158,9 +199,6 @@
158199
element.style.position = 'relative';
159200
}
160201

161-
var expand = element.resizeSensor.childNodes[0];
162-
var expandChild = expand.childNodes[0];
163-
var shrink = element.resizeSensor.childNodes[1];
164202
var dirty, rafId;
165203
var size = getElementSize(element);
166204
var lastWidth = size.width;

0 commit comments

Comments
 (0)