Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Legend scroll fix by alexcjohnson · Pull Request #2426 · plotly/plotly.js · GitHub
Skip to content

Legend scroll fix - #2426

Merged
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix
Mar 1, 2018
Merged

Legend scroll fix#2426
alexcjohnson merged 6 commits into
masterfrom
legend-scroll-fix

Conversation

@alexcjohnson

Copy link
Copy Markdown
Collaborator

Fixes#2387 - don't allow dragging from the scroll box of a legend, only from the scroll bar itself, and even then not on right clicks, only left click. I also made the scroll bar handle a little bit wider so it's a bit easier to grab. And another part of the issue is that the scrollbar would jump to be centered on the mouse cursor, rather than simply moving with it from wherever you grabbed it. I fixed that too.

Fixes the legend part of #1859 - makes the scrollbar scale to show the fraction of the legend that's visible.

cc @etpinard

@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Since this doesn't show up in test images, here's what the new scrollbars look like - a little wider and a lot taller:
screen shot 2018-02-28 at 4 21 05 pm

@etpinard

Copy link
Copy Markdown
Contributor

Fixes the legend part of #1859

Referencing #2054, more than ever it would be nice to unify all our scrollbox implementations.

return finalDataScroll;
}

it('should scroll on dragging the scrollbar', function() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these general legend scrollbox tests and/or tests that 🔒 the fix for #2387? (I'm asking as I would be surprised if #2387 was reproducible in a jasmine test).

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

The 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 scrollBox drag was being triggered - and that's what I decided (with no dissent) had no reason ever to happen. So this test shows that regular drag works, then the next one shows that the scrollBox won't drag even if it does somehow get the event, and then the third new test shows that right-click (the only form of #2387 I could reproduce on my own computer) even on the scrollBar will not trigger drag.

@etpinard

Copy link
Copy Markdown
Contributor

Probably related to #808. The new variable-height scroll bar doesn't update. For example, from legend_scroll repeatedly calling Plotly.deleteTraces(gd, [0]) gives:

peek 2018-02-28 16-47

No need to fix this in this PR though, just confirming that scrollable legends don't update well as first reported in #808


var scrollBarBB = scrollBar.getBoundingClientRect();
var y0 = scrollBarBB.top + scrollBarBB.height / 2;
var y0 = scrollBarBB.top + scrollBarBB.height / 5;

Copy link
Copy Markdown
CollaboratorAuthor

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.

and when `this` isn't important - ie in all of our helper functions
but we still need `call` for `d3.behavior.drag()`
too confusing with it always being negative
@alexcjohnson

Copy link
Copy Markdown
CollaboratorAuthor

Fixed #808 (and #2426 (comment)) in 569b378

Comment threadsrc/components/legend/draw.js Outdated
var scrollRatio = scrollBarYMax / scrollBoxYMax;

var scrollBarY = constants.scrollBarMargin;
var scrollBoxY = scrollBox.attr('data-scroll') || 0;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Way better to use _ then a DOM attr 🎉


// scrollBoxY is 0 or a negative number
var scrollBoxY = Math.max(opts._scrollY || 0, -scrollBoxYMax);
var scrollBoxY = Math.min(opts._scrollY || 0, scrollBoxYMax);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@etpinard

Copy link
Copy Markdown
Contributor

Amazing PR! 💃

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething broken

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clicking legend item causes legend to scroll

2 participants

@alexcjohnson@etpinard