-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Legend scroll fix #2426
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Legend scroll fix #2426
Changes from 2 commits
f75f5ba
ec42784
246b77f
569b378
5660bf5
f2d8cfd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ var d3 = require('d3'); | |
var createGraph = require('../assets/create_graph_div'); | ||
var destroyGraph = require('../assets/destroy_graph_div'); | ||
var getBBox = require('../assets/get_bbox'); | ||
var mouseEvent = require('../assets/mouse_event'); | ||
var mock = require('../../image/mocks/legend_scroll.json'); | ||
|
||
describe('The legend', function() { | ||
|
@@ -76,18 +77,19 @@ describe('The legend', function() { | |
}); | ||
|
||
it('should scroll when there\'s a wheel event', function() { | ||
var legend = getLegend(), | ||
scrollBox = getScrollBox(), | ||
legendHeight = getLegendHeight(gd), | ||
scrollBoxYMax = gd._fullLayout.legend._height - legendHeight, | ||
scrollBarYMax = legendHeight - | ||
constants.scrollBarHeight - | ||
2 * constants.scrollBarMargin, | ||
initialDataScroll = scrollBox.getAttribute('data-scroll'), | ||
wheelDeltaY = 100, | ||
finalDataScroll = '' + Lib.constrain(initialDataScroll - | ||
wheelDeltaY / scrollBarYMax * scrollBoxYMax, | ||
-scrollBoxYMax, 0); | ||
var legend = getLegend(); | ||
var scrollBox = getScrollBox(); | ||
var scrollBar = getScrollBar(); | ||
var legendHeight = getLegendHeight(gd); | ||
var scrollBoxYMax = gd._fullLayout.legend._height - legendHeight; | ||
var scrollBarYMax = legendHeight - | ||
scrollBar.getBoundingClientRect().height - | ||
2 * constants.scrollBarMargin; | ||
var initialDataScroll = scrollBox.getAttribute('data-scroll'); | ||
var wheelDeltaY = 100; | ||
var finalDataScroll = '' + Lib.constrain(initialDataScroll - | ||
wheelDeltaY / scrollBarYMax * scrollBoxYMax, | ||
-scrollBoxYMax, 0); | ||
|
||
legend.dispatchEvent(scrollTo(wheelDeltaY)); | ||
|
||
|
@@ -96,6 +98,69 @@ describe('The legend', function() { | |
'translate(0, ' + finalDataScroll + ')'); | ||
}); | ||
|
||
function dragScroll(element, rightClick) { | ||
var scrollBox = getScrollBox(); | ||
var scrollBar = getScrollBar(); | ||
var scrollBarBB = scrollBar.getBoundingClientRect(); | ||
var legendHeight = getLegendHeight(gd); | ||
var scrollBoxYMax = gd._fullLayout.legend._height - legendHeight; | ||
var scrollBarYMax = legendHeight - | ||
scrollBarBB.height - | ||
2 * constants.scrollBarMargin; | ||
var initialDataScroll = scrollBox.getAttribute('data-scroll'); | ||
var dy = 50; | ||
var finalDataScroll = '' + Lib.constrain(initialDataScroll - | ||
dy / scrollBarYMax * scrollBoxYMax, | ||
-scrollBoxYMax, 0); | ||
|
||
var y0 = scrollBarBB.top + scrollBarBB.height / 5; | ||
var y1 = y0 + dy; | ||
|
||
var elBB = element.getBoundingClientRect(); | ||
var x = elBB.left + elBB.width / 2; | ||
|
||
var opts = {element: element}; | ||
if(rightClick) { | ||
opts.button = 2; | ||
opts.buttons = 2; | ||
} | ||
|
||
mouseEvent('mousedown', x, y0, opts); | ||
mouseEvent('mousemove', x, y1, opts); | ||
mouseEvent('mouseup', x, y1, opts); | ||
|
||
expect(finalDataScroll).not.toBe(initialDataScroll); | ||
|
||
return finalDataScroll; | ||
} | ||
|
||
it('should scroll on dragging the scrollbar', function() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, these do test #2387, if I'm interpreting it correctly. What I think was happening in #2387 is that somehow the |
||
var finalDataScroll = dragScroll(getScrollBar()); | ||
var scrollBox = getScrollBox(); | ||
|
||
expect(scrollBox.getAttribute('data-scroll')).toBe(finalDataScroll); | ||
expect(scrollBox.getAttribute('transform')).toBe( | ||
'translate(0, ' + finalDataScroll + ')'); | ||
}); | ||
|
||
it('should not scroll on dragging the scrollbox', function() { | ||
var scrollBox = getScrollBox(); | ||
var finalDataScroll = dragScroll(scrollBox); | ||
|
||
expect(scrollBox.getAttribute('data-scroll')).not.toBe(finalDataScroll); | ||
expect(scrollBox.getAttribute('transform')).not.toBe( | ||
'translate(0, ' + finalDataScroll + ')'); | ||
}); | ||
|
||
it('should not scroll on dragging the scrollbar with a right click', function() { | ||
var finalDataScroll = dragScroll(getScrollBar(), true); | ||
var scrollBox = getScrollBox(); | ||
|
||
expect(scrollBox.getAttribute('data-scroll')).not.toBe(finalDataScroll); | ||
expect(scrollBox.getAttribute('transform')).not.toBe( | ||
'translate(0, ' + finalDataScroll + ')'); | ||
}); | ||
|
||
it('should keep the scrollbar position after a toggle event', function(done) { | ||
var legend = getLegend(), | ||
scrollBox = getScrollBox(), | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
notice that I moved the drag point away from the center of the
scrollBar
, thereby testing that it drags from where you grab it rather than snapping to the center.