diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 0a58d9e48957fd2f4dd70c0504fe2ad1970e0821..590b2a3b241435794f1a7f6da2aef2a26520c34e 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -1912,7 +1912,9 @@ var FieldBinaryImage = AbstractFieldBinary.extend({ attach: '.o_content', attachToTarget: true, onShow: function () { - if(this.$zoom.height() < 256 && this.$zoom.width() < 256) { + var zoomHeight = Math.ceil(this.$zoom.height()); + var zoomWidth = Math.ceil(this.$zoom.width()); + if( zoomHeight < 128 && zoomWidth < 128) { this.hide(); } core.bus.on('keydown', this, this.hide); diff --git a/addons/web/static/src/js/libs/zoomodoo.js b/addons/web/static/src/js/libs/zoomodoo.js index a372c1686dc50f3378c1057059b90560d30e5195..07da384c298d7d9d0196f39a563f674d744a7d3d 100644 --- a/addons/web/static/src/js/libs/zoomodoo.js +++ b/addons/web/static/src/js/libs/zoomodoo.js @@ -84,8 +84,8 @@ ZoomOdoo.prototype._init = function () { this.$flyout = $('<div class="zoomodoo-flyout" />'); var $attach = this.$target; - if (this.opts.attach !== undefined && this.$target.parents(this.opts.attach).length) { - $attach = this.$target.parents(this.opts.attach); + if (this.opts.attach !== undefined && this.$target.closest(this.opts.attach).length) { + $attach = this.$target.closest(this.opts.attach); } $attach.parent().on('mousemove.zoomodoo touchmove.zoomodoo', $.proxy(this._onMove, this)); $attach.parent().on('mouseleave.zoomodoo touchend.zoomodoo', $.proxy(this._onLeave, this)); @@ -120,8 +120,8 @@ ZoomOdoo.prototype.show = function (e, testMouseOver) { } var $attach = this.$target; - if (this.opts.attach !== undefined && this.$target.parents(this.opts.attach).length) { - $attach = this.$target.parents(this.opts.attach); + if (this.opts.attach !== undefined && this.$target.closest(this.opts.attach).length) { + $attach = this.$target.closest(this.opts.attach); } // Prevents having multiple zoom flyouts @@ -132,6 +132,19 @@ ZoomOdoo.prototype.show = function (e, testMouseOver) { if (this.opts.attachToTarget) { this.opts.beforeAttach.call(this); + // Be sure that the flyout is at top 0, left 0 to ensure correct computation + // e.g. employees kanban on dashboard + this.$flyout.css('position', 'fixed'); + var flyoutOffset = this.$flyout.offset(); + if (flyoutOffset.left > 0) { + var flyoutLeft = parseFloat(this.$flyout.css('left').replace('px','')); + this.$flyout.css('left', flyoutLeft - flyoutOffset.left + 'px'); + } + if (flyoutOffset.top > 0) { + var flyoutTop = parseFloat(this.$flyout.css('top').replace('px','')); + this.$flyout.css('top', flyoutTop - flyoutOffset.top + 'px'); + } + if(this.$zoom.height() < this.$flyout.height()) { this.$flyout.css('height', this.$zoom.height() + 'px'); } @@ -296,7 +309,7 @@ ZoomOdoo.prototype._move = function (e) { var xl = Math.ceil(pl * rw); // Close if outside - if (xl < 0 || xt < 0 || xl > dw || xt > dh || lx > (offset.left + this.$target.outerWidth())) { + if (!this.opts.attachToTarget && (xl < 0 || xt < 0 || xl > dw || xt > dh || lx > (offset.left + this.$target.outerWidth()))) { this.hide(); } else { var top = xt * -1;