From baf578dcf0560d8e4c3cd6efbaabf630e2b33ddf Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 8 Mar 2018 12:48:45 +0100 Subject: [PATCH] Refactor few methods in Canvas --- src/canvas/index.js | 67 +++++++++++++++++------------------ src/canvas/view/CanvasView.js | 20 +++++------ 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/src/canvas/index.js b/src/canvas/index.js index 87f08ca45..d23eaef14 100644 --- a/src/canvas/index.js +++ b/src/canvas/index.js @@ -245,44 +245,41 @@ module.exports = () => { getTargetToElementDim(target, element, options) { var opts = options || {}; var canvasPos = CanvasView.getPosition(); - if (canvasPos) { - var pos = opts.elPos || CanvasView.getElementPos(element); - var toRight = options.toRight || 0; - var targetHeight = opts.targetHeight || target.offsetHeight; - var targetWidth = opts.targetWidth || target.offsetWidth; - var eventToTrigger = opts.event || null; - - var elTop = pos.top - targetHeight; - var elLeft = pos.left; - elLeft += toRight ? pos.width : 0; - elLeft = toRight ? elLeft - targetWidth : elLeft; - - var leftPos = elLeft < canvasPos.left ? canvasPos.left : elLeft; - var topPos = elTop < canvasPos.top ? canvasPos.top : elTop; - topPos = topPos > pos.top + pos.height ? pos.top + pos.height : topPos; - - var result = { - top: topPos, - left: leftPos, - elementTop: pos.top, - elementLeft: pos.left, - elementWidth: pos.width, - elementHeight: pos.height, - targetWidth: target.offsetWidth, - targetHeight: target.offsetHeight, - canvasTop: canvasPos.top, - canvasLeft: canvasPos.left - }; - - // In this way I can catch data and also change the position strategy - if (eventToTrigger && c.em) { - c.em.trigger(eventToTrigger, result); - } + if (!canvasPos) return; + var pos = opts.elPos || CanvasView.getElementPos(element); + var toRight = options.toRight || 0; + var targetHeight = opts.targetHeight || target.offsetHeight; + var targetWidth = opts.targetWidth || target.offsetWidth; + var eventToTrigger = opts.event || null; + + var elTop = pos.top - targetHeight; + var elLeft = pos.left; + elLeft += toRight ? pos.width : 0; + elLeft = toRight ? elLeft - targetWidth : elLeft; + + var leftPos = elLeft < canvasPos.left ? canvasPos.left : elLeft; + var topPos = elTop < canvasPos.top ? canvasPos.top : elTop; + topPos = topPos > pos.top + pos.height ? pos.top + pos.height : topPos; + + var result = { + top: topPos, + left: leftPos, + elementTop: pos.top, + elementLeft: pos.left, + elementWidth: pos.width, + elementHeight: pos.height, + targetWidth: target.offsetWidth, + targetHeight: target.offsetHeight, + canvasTop: canvasPos.top, + canvasLeft: canvasPos.left + }; - return result; + // In this way I can catch data and also change the position strategy + if (eventToTrigger && c.em) { + c.em.trigger(eventToTrigger, result); } - return null; + return result; }, /** diff --git a/src/canvas/view/CanvasView.js b/src/canvas/view/CanvasView.js index c52ca3554..86ebd7845 100644 --- a/src/canvas/view/CanvasView.js +++ b/src/canvas/view/CanvasView.js @@ -308,17 +308,15 @@ module.exports = Backbone.View.extend({ * @private */ getPosition() { - if (this.frame.el.contentDocument) { - var bEl = this.frame.el.contentDocument.body; - var fo = this.getFrameOffset(); - var co = this.getCanvasOffset(); - return { - top: fo.top + bEl.scrollTop - co.top, - left: fo.left + bEl.scrollLeft - co.left - }; - } - - return null; + const doc = this.frame.el.contentDocument; + if (!doc) return; + const bEl = doc.body; + const fo = this.getFrameOffset(); + const co = this.getCanvasOffset(); + return { + top: fo.top + bEl.scrollTop - co.top, + left: fo.left + bEl.scrollLeft - co.left + }; }, /**