From 7e2ee7f34dc87a9048aa69ebdd5687b4bfd3d844 Mon Sep 17 00:00:00 2001 From: yoko Date: Tue, 1 Jul 2014 18:08:54 +0900 Subject: [PATCH 1/2] Selectable: Fixes #4377 --- ui/selectable.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/ui/selectable.js b/ui/selectable.js index 81a3f978954..914f1b48a09 100644 --- a/ui/selectable.js +++ b/ui/selectable.js @@ -56,7 +56,10 @@ return $.widget("ui.selectable", $.ui.mouse, { selectees.addClass("ui-selectee"); selectees.each(function() { var $this = $(this), + context = $(that.options.appendTo), pos = $this.offset(); + pos.top += context.scrollTop(); + pos.left += context.scrollLeft(); $.data(this, "selectable-item", { element: this, $element: $this, @@ -91,9 +94,12 @@ return $.widget("ui.selectable", $.ui.mouse, { _mouseStart: function(event) { var that = this, - options = this.options; + options = this.options, + context = $(options.appendTo), + scrollLeft = context.scrollLeft(), + scrollTop = context.scrollTop(); - this.opos = [ event.pageX, event.pageY ]; + this.opos = [ scrollLeft + event.pageX, scrollTop + event.pageY ]; if (this.options.disabled) { return; @@ -106,8 +112,8 @@ return $.widget("ui.selectable", $.ui.mouse, { $(options.appendTo).append(this.helper); // position helper (lasso) this.helper.css({ - "left": event.pageX, - "top": event.pageY, + "left": scrollLeft + event.pageX, + "top": scrollTop + event.pageY, "width": 0, "height": 0 }); @@ -169,10 +175,11 @@ return $.widget("ui.selectable", $.ui.mouse, { var tmp, that = this, options = this.options, + context = $(options.appendTo), x1 = this.opos[0], y1 = this.opos[1], - x2 = event.pageX, - y2 = event.pageY; + x2 = event.pageX + context.scrollLeft(), + y2 = event.pageY + context.scrollTop(); if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; } From 8366e56041e3a10060a1b93366dd4bf83d133df7 Mon Sep 17 00:00:00 2001 From: yoko Date: Wed, 2 Jul 2014 18:44:15 +0900 Subject: [PATCH 2/2] Selectable: Fix selection range is shifted from cursor --- ui/selectable.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/ui/selectable.js b/ui/selectable.js index 914f1b48a09..de17898869d 100644 --- a/ui/selectable.js +++ b/ui/selectable.js @@ -56,10 +56,11 @@ return $.widget("ui.selectable", $.ui.mouse, { selectees.addClass("ui-selectee"); selectees.each(function() { var $this = $(this), + w = $(window), context = $(that.options.appendTo), pos = $this.offset(); - pos.top += context.scrollTop(); - pos.left += context.scrollLeft(); + pos.left += context.scrollLeft() - w.scrollLeft(); + pos.top += context.scrollTop() - w.scrollTop(); $.data(this, "selectable-item", { element: this, $element: $this, @@ -95,11 +96,12 @@ return $.widget("ui.selectable", $.ui.mouse, { _mouseStart: function(event) { var that = this, options = this.options, + w = $(window), context = $(options.appendTo), - scrollLeft = context.scrollLeft(), - scrollTop = context.scrollTop(); + x = event.pageX + context.scrollLeft() - w.scrollLeft(), + y = event.pageY + context.scrollTop() - w.scrollTop(); - this.opos = [ scrollLeft + event.pageX, scrollTop + event.pageY ]; + this.opos = [ x, y ]; if (this.options.disabled) { return; @@ -112,8 +114,8 @@ return $.widget("ui.selectable", $.ui.mouse, { $(options.appendTo).append(this.helper); // position helper (lasso) this.helper.css({ - "left": scrollLeft + event.pageX, - "top": scrollTop + event.pageY, + "left": x, + "top": y, "width": 0, "height": 0 }); @@ -175,11 +177,12 @@ return $.widget("ui.selectable", $.ui.mouse, { var tmp, that = this, options = this.options, + w = $(window), context = $(options.appendTo), x1 = this.opos[0], y1 = this.opos[1], - x2 = event.pageX + context.scrollLeft(), - y2 = event.pageY + context.scrollTop(); + x2 = event.pageX + context.scrollLeft() - w.scrollLeft(), + y2 = event.pageY + context.scrollTop() - w.scrollTop(); if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }