diff --git a/src/overlay.js b/src/overlay.js
index 7d485d42..61f5fa88 100644
--- a/src/overlay.js
+++ b/src/overlay.js
@@ -128,9 +128,17 @@
};
}
+ this.elementWrapper = document.createElement('div');
this.element = options.element;
- this.element.innerHTML = "
" + this.element.innerHTML + "
";
- this.style = options.element.style;
+ this.elementWrapper.appendChild(this.element);
+
+ if (this.element.id) {
+ this.elementWrapper.id = "overlay-wrapper-" + this.element.id;
+ } else {
+ this.elementWrapper.id = "overlay-wrapper";
+ }
+
+ this.style = this.elementWrapper.style;
this._init(options);
};
@@ -197,7 +205,7 @@
* @function
*/
destroy: function() {
- var element = this.element;
+ var element = this.elementWrapper;
var style = this.style;
if (element.parentNode) {
@@ -242,7 +250,7 @@
* @param {Element} container
*/
drawHTML: function(container, viewport) {
- var element = this.element;
+ var element = this.elementWrapper;
if (element.parentNode !== container) {
//save the source parent for later if we need it
element.prevElementParent = element.parentNode;
@@ -253,7 +261,7 @@
this.style.position = "absolute";
// this.size is used by overlays which don't get scaled in at
// least one direction when this.checkResize is set to false.
- this.size = $.getElementSize(element);
+ this.size = $.getElementSize(this.elementWrapper);
}
var positionAndSize = this._getOverlayPositionAndSize(viewport);
var position = positionAndSize.position;
@@ -270,15 +278,15 @@
this.onDraw(position, size, this.element);
} else {
var style = this.style;
- var innerElement = element.firstChild;
- var innerStyle = innerElement.style;
+ var innerStyle = this.element.style;
+ innerStyle.display = "block";
style.left = position.x + "px";
style.top = position.y + "px";
if (this.width !== null) {
- style.width = size.x + "px";
+ innerStyle.width = size.x + "px";
}
if (this.height !== null) {
- style.height = size.y + "px";
+ innerStyle.height = size.y + "px";
}
var transformOriginProp = $.getCssPropertyWithVendorPrefix(
'transformOrigin');
@@ -303,7 +311,7 @@
style[transformProp] = "";
}
}
- style.display = 'block';
+ style.display = 'flex';
}
},
@@ -355,7 +363,7 @@
}
if (this.checkResize &&
(this.width === null || this.height === null)) {
- var eltSize = this.size = $.getElementSize(this.element);
+ var eltSize = this.size = $.getElementSize(this.elementWrapper);
if (this.width === null) {
width = eltSize.x;
}
diff --git a/test/modules/overlays.js b/test/modules/overlays.js
index 8b9cd58f..a328f50b 100644
--- a/test/modules/overlays.js
+++ b/test/modules/overlays.js
@@ -254,10 +254,10 @@
var expPosition = viewport.imageToViewerElementCoordinates(
new OpenSeadragon.Point(13, 120));
- var actPosition = $("#overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("overlay").position, true);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Y position mismatch " + contextMessage);
var zoom = viewport.viewportToImageZoom(viewport.getZoom(true));
@@ -271,10 +271,10 @@
expPosition = viewport.imageToViewerElementCoordinates(
new OpenSeadragon.Point(400, 500));
- actPosition = $("#fixed-overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ actPosition = viewport.pixelFromPoint(viewer.getOverlayById("fixed-overlay").position, true);;
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"Fixed overlay X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Fixed overlay Y position mismatch " + contextMessage);
Util.assessNumericValue(assert, $("#fixed-overlay").width(), 70, epsilon,
@@ -326,10 +326,10 @@
var expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.2, 0.1));
- var actPosition = $("#overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("overlay").position, true);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Y position mismatch " + contextMessage);
var expectedSize = viewport.deltaPixelsFromPoints(
@@ -342,10 +342,10 @@
expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.5, 0.6));
- actPosition = $("#fixed-overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ actPosition = viewport.pixelFromPoint(viewer.getOverlayById("fixed-overlay").position, true);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"Fixed overlay X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Fixed overlay Y position mismatch " + contextMessage);
Util.assessNumericValue(assert, $("#fixed-overlay").width(), 70, epsilon,
@@ -402,10 +402,10 @@
var expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.2, 0.1));
- var actPosition = $("#overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("overlay").position, true);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Y position mismatch " + contextMessage);
}
@@ -415,10 +415,11 @@
var expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.5, 0.6))
.plus(expectedOffset);
- var actPosition = $("#fixed-overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("fixed-overlay").position, true).plus(expectedOffset);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"Fixed overlay X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Fixed overlay Y position mismatch " + contextMessage);
}
@@ -481,10 +482,10 @@
var expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.5, 0.6))
.plus(expectedOffset);
- var actPosition = $("#fixed-overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("fixed-overlay").position, true).plus(expectedOffset);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"Fixed overlay X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Fixed overlay Y position mismatch " + contextMessage);
}
@@ -536,10 +537,10 @@
var expPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.5, 0.6))
.plus(expectedOffset);
- var actPosition = $("#fixed-overlay").position();
- Util.assessNumericValue(assert, actPosition.left, expPosition.x, epsilon,
+ var actPosition = viewport.pixelFromPoint(viewer.getOverlayById("fixed-overlay").position, true).plus(expectedOffset);
+ Util.assessNumericValue(assert, actPosition.x, expPosition.x, epsilon,
"Fixed overlay X position mismatch " + contextMessage);
- Util.assessNumericValue(assert, actPosition.top, expPosition.y, epsilon,
+ Util.assessNumericValue(assert, actPosition.y, expPosition.y, epsilon,
"Fixed overlay Y position mismatch " + contextMessage);
}
@@ -789,10 +790,10 @@
var expectedPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(1, 1))
.minus(expectedSize);
- var actualPosition = $overlay.position();
- Util.assessNumericValue(assert, actualPosition.left, expectedPosition.x, epsilon,
+ var actualPosition = viewport.pixelFromPoint(viewer.getOverlayById("fully-scaled-overlay").position, true).minus(expectedSize);
+ Util.assessNumericValue(assert, actualPosition.x, expectedPosition.x, epsilon,
"Scaled overlay position.x should adjust to rotation.");
- Util.assessNumericValue(assert, actualPosition.top, expectedPosition.y, epsilon,
+ Util.assessNumericValue(assert, actualPosition.y, expectedPosition.y, epsilon,
"Scaled overlay position.y should adjust to rotation.");
var actualWidth = $overlay.width();
@@ -851,10 +852,10 @@
var expectedPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0.5, 0.5))
.minus(new OpenSeadragon.Point(expectedWidth / 2, notScaledHeight / 2));
- var actualPosition = $overlay.position();
- Util.assessNumericValue(assert, actualPosition.left, expectedPosition.x, epsilon,
+ var actualPosition = viewport.pixelFromPoint(viewer.getOverlayById("horizontally-scaled-overlay").position, true).minus(new OpenSeadragon.Point(expectedWidth / 2, notScaledHeight / 2));
+ Util.assessNumericValue(assert, actualPosition.x, expectedPosition.x, epsilon,
"Horizontally scaled overlay position.x should adjust to rotation.");
- Util.assessNumericValue(assert, actualPosition.top, expectedPosition.y, epsilon,
+ Util.assessNumericValue(assert, actualPosition.y, expectedPosition.y, epsilon,
"Horizontally scaled overlay position.y should adjust to rotation.");
var actualWidth = $overlay.width();
@@ -914,10 +915,10 @@
var expectedPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(0, 0.5))
.minus(new OpenSeadragon.Point(0, expectedHeight / 2));
- var actualPosition = $overlay.position();
- Util.assessNumericValue(assert, actualPosition.left, expectedPosition.x, epsilon,
+ var actualPosition= viewport.pixelFromPoint(viewer.getOverlayById("vertically-scaled-overlay").position).minus(new OpenSeadragon.Point(0, expectedHeight / 2));
+ Util.assessNumericValue(assert, actualPosition.x, expectedPosition.x, epsilon,
"Vertically scaled overlay position.x should adjust to rotation.");
- Util.assessNumericValue(assert, actualPosition.top, expectedPosition.y, epsilon,
+ Util.assessNumericValue(assert, actualPosition.y, expectedPosition.y, epsilon,
"Vertically scaled overlay position.y should adjust to rotation.");
var actualWidth = $overlay.width();
@@ -975,10 +976,10 @@
var expectedPosition = viewport.viewportToViewerElementCoordinates(
new OpenSeadragon.Point(1, 0))
.minus(new OpenSeadragon.Point(notScaledWidth, 0));
- var actualPosition = $overlay.position();
- Util.assessNumericValue(assert, actualPosition.left, expectedPosition.x, epsilon,
+ var actualPosition= viewport.pixelFromPoint(viewer.getOverlayById("not-scaled-overlay").position).minus(new OpenSeadragon.Point(notScaledWidth, 0));
+ Util.assessNumericValue(assert, actualPosition.x, expectedPosition.x, epsilon,
"Not scaled overlay position.x should adjust to rotation.");
- Util.assessNumericValue(assert, actualPosition.top, expectedPosition.y, epsilon,
+ Util.assessNumericValue(assert, actualPosition.y, expectedPosition.y, epsilon,
"Not scaled overlay position.y should adjust to rotation.");
var actualWidth = $overlay.width();
@@ -1060,6 +1061,28 @@
});
});
+
+ // ----------
+ QUnit.test('Remove Child from Overlay', function(assert){
+ var done = assert.async();
+ viewer = OpenSeadragon({
+ id: 'example-overlays',
+ prefixUrl: '/build/openseadragon/images/',
+ tileSources: '/test/data/testpattern.dzi'
+ });
+
+ viewer.addOnceHandler('open', function() {
+ var $overlay = document.createElement("div");
+ var something = document.createElement("p");
+ $overlay.appendChild(something);
+ viewer.addOverlay($overlay);
+ $overlay.removeChild(something);
+ something.innerHTML = '...';
+ assert.equal(something.innerHTML, '...');
+ done();
+ });
+ });
+
// ----------
QUnit.test('Fully scaled overlay rotation mode EXACT', function(assert) {
var done = assert.async();
@@ -1082,7 +1105,6 @@
viewer.addOnceHandler('open', function() {
var viewport = viewer.viewport;
-
var $overlay = $("#fully-scaled-overlay");
var expectedSize = viewport.deltaPixelsFromPointsNoRotate(
new OpenSeadragon.Point(1, 1));
@@ -1090,7 +1112,7 @@
new OpenSeadragon.Point(1, 1))
.minus(expectedSize);
// We can't rely on jQuery.position with transforms.
- var actualStyle = $overlay.get(0).style;
+ var actualStyle= viewer.getOverlayById("fully-scaled-overlay").style;
var left = Number(actualStyle.left.replace("px", ""));
var top = Number(actualStyle.top.replace("px", ""));
Util.assessNumericValue(assert, left, expectedPosition.x, epsilon,