ol.Overlay bug (fixed)

by Simon Seyock

HTML

<script src="http://ol3js.org/en/master/build/ol-debug.js"></script>
<div class="map" id="map"></div>
<div class="log"></div>

CSS

.map {
        height: 400px;
        width: 100%;
}

.label {
    background-color: white;
}

JavaScript

var layers = [new ol.layer.Tile({
    source: new ol.source.MapQuest({layer: 'sat'})
})];

var center = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857');

var view = new ol.View({
    center: center,
    zoom: 4
});

//BUGFIX BEGIN

ol.Overlay.prototype.updatePixelPosition_ = function() {

  var map = this.getMap();
  var position = this.getPosition();
  if (!goog.isDef(map) || !map.isRendered() || !goog.isDef(position)) {
    if (this.rendered_.visible) {
      goog.style.setElementShown(this.element_, false);
      this.rendered_.visible = false;
    }
    return;
  }

  var pixel = map.getPixelFromCoordinate(position);
  goog.asserts.assert(!goog.isNull(pixel));
  var mapSize = map.getSize();
  goog.asserts.assert(goog.isDef(mapSize));
  var style = this.element_.style;
  var offset = this.getOffset();
  goog.asserts.assert(goog.isArray(offset));
  var positioning = this.getPositioning();
  goog.asserts.assert(goog.isDef(positioning));

  var offsetX = offset[0];
  var offsetY = offset[1];
  if (positioning == ol.OverlayPositioning.BOTTOM_RIGHT ||
      positioning == ol.OverlayPositioning.CENTER_RIGHT ||
      positioning == ol.OverlayPositioning.TOP_RIGHT) {
    if (this.rendered_.left_ !== '') {
      this.rendered_.left_ = style.left = '';
    }
    //offsetX -= goog.style.getSize(this.element_).width;
    var right = Math.round(mapSize[0] - pixel[0] - offsetX) + 'px';
    if (this.rendered_.right_ != right) {
      this.rendered_.right_ = style.right = right;
    }
  } else {
    if (this.rendered_.right_ !== '') {
      this.rendered_.right_ = style.right = '';
    }
    if (positioning == ol.OverlayPositioning.BOTTOM_CENTER ||
        positioning == ol.OverlayPositioning.CENTER_CENTER ||
        positioning == ol.OverlayPositioning.TOP_CENTER) {
      offsetX -= goog.style.getSize(this.element_).width / 2;
    }
    var left = Math.round(pixel[0] + offsetX) + 'px';
    if (this.rendered_.left_ != left) {
      this.rendered_.left_ = style.left...