Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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" + '
Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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('^' + ".*" + ' Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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('^' + ".*" + ' Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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" + ' Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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('^' + ".*" + ' Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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('^' + ".*" + ' Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk
, '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); } })(); })(); Clone figure.layout so plotly.js doesn't mutate it by valentijnnieman · Pull Request #279 · plotly/dash-core-components · GitHub
Skip to content
This repository was archived by the owner on Aug 29, 2025. It is now read-only.

Clone figure.layout so plotly.js doesn't mutate it - #279

Merged
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix
Sep 7, 2018
Merged

Clone figure.layout so plotly.js doesn't mutate it#279
valentijnnieman merged 7 commits into
masterfrom
graph_resize_fix

Conversation

@valentijnnieman

Copy link
Copy Markdown
Contributor

This fixes the bug where Graphs would resize when only supplying one of either width or height in figure.layout, especially visible in a Tab component.

@chriddyp

chriddyp commented Aug 27, 2018

Copy link
Copy Markdown
Member
  • Can we create a test case for this? You could run through the example that you created and take screenshots on every click. If you rebase, then we should see the test fail before the commit and then fixed after the commit.
  • Can we create a new issue about cloning data and include some of the notes from our internal discussion about cloning data arrays?

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@chriddyp Created issue #287 and wrote a test.

Comment threadtest/test_integration.py Outdated
self.snapshot("Tabs with Graph - initial (graph should not resize)")

tab_two.click()
time.sleep(1)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Instead of sleeping, could we try adding an element with an ID inside tab-2-example and then doing a self.wait_for_element_by_css_selector('#tab-2-element')? In principle it should be more stable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Although maybe let's try to start using the official selenium API rather than my wait_for_element_by_css_selector api, which might be buggy. more context here: #288

@chriddyp

Copy link
Copy Markdown
Member

thanks! 💃

@rmarren1

Copy link
Copy Markdown
Contributor

Can you re-base? You would just need to change PlotMethod to Plotly.react

@radekwlsk

radekwlsk commented Sep 5, 2018

Copy link
Copy Markdown

Change introduced in 0.28.1 breaks my candlestick dcc.Graph.

Changed

candlestick and OHLC charts are now plotted using the Plotly.react method instead of the Plotly.newPlot method.

On 0.28.0 it works correctly.

My dcc.Graph has initially empty figure and is in a hidden html.Div, once button of input form is pressed the callbacks generating data, and returning it to output which is figure of a dcc.Graph fires together with callback that sets hidden=False of the html.Div containing the graph.
On 0.28.1 it does not resize correctly to page width set in CSS, the figure only has height=900 set.

Is that what those changes fix?

@chriddyp

Copy link
Copy Markdown
Member

@radekwlsk - Can you create a small, reproducable example?

@rmarren1

Copy link
Copy Markdown
Contributor

@radekwlsk This is a known issue: https://community.plot.ly/t/plotly-resize-bug-using-html-details-hidden-div-and-width-100/11201/6

I think that the temporary patch on candlestick we had between 0.22.1 and 0.28.1 fixed this on candlestick, but lead to other bugs.

I think that as a work-around, you can display an empty Div (no children) when you should have hidden=True and then, rather than setting the figure prop of your Graph with a callback, you can set the children prop of your Div with a newly constructed Graph. This way, it will re-size.

@valentijnnieman
valentijnnieman merged commit 5aa3962 into masterSep 7, 2018
@valentijnnieman
valentijnnieman deleted the graph_resize_fix branch September 7, 2018 16:36
@rmarren1

Copy link
Copy Markdown
Contributor

Can this be closed? #256

@valentijnnieman

Copy link
Copy Markdown
ContributorAuthor

@rmarren1 Yep.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@valentijnnieman@chriddyp@rmarren1@radekwlsk