Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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" + '
handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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('^' + ".*" + ' handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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('^' + ".*" + ' handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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" + ' handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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('^' + ".*" + ' handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson
, '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); } })(); })(); handle various time formats in ticklabelmode period by archmoj · Pull Request #5065 · plotly/plotly.js · GitHub
Skip to content

handle various time formats in ticklabelmode period - #5065

Merged
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode
Aug 13, 2020
Merged

handle various time formats in ticklabelmode period#5065
archmoj merged 14 commits into
masterfrom
new-formats-in-period-ticklabelmode

Conversation

@archmoj

Copy link
Copy Markdown
Contributor

Follow up of implementing #4911 by #4993 and considering adding new time-formats added in #5026.

@plotly/plotly_js

Comment threadsrc/plots/cartesian/axes.js Outdated
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name
_has('%U') || // Sunday-based week of the year as a decimal number [00,53]

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.

where in the code do you differentiate between the start point of %U and %W (Sunday vs Monday) ?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No. This is just the fall back to set the distance between labels.

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.

OK, but then how can we differentiate between sunday- and monday-starting weeks? via tick0 ?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Good point - it's a bit different from the point of this PR, but here's where the automatic tick0 gets set to Sundays:

// get week ticks on sunday
// this will also move the base tick off 2000-01-01 if dtick is
// 2 or 3 days... but that's a weird enough case that we'll ignore it.
ax.tick0=Lib.dateTick0(ax.calendar,true);

I guess with a tickformat including %W we should add a day to the result there.

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.

I believe we should, yes :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also %V starts on Mondays.

Side note: Am I missing something or are %u (new week on Monday) and %w (new week on Sunday) backward compared to %U (new week on Sunday) and %W (new week on Monday)? I mean, not an error here, nor in D3, this dates back to strftime from C so has probably been around for 40 years...

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@archmoj functionally this looks good. I feel like perf and compactness may improve with a single regex test, eg /%[fLQsSMHIpX]/.test(ax.tickformat) instead of repeated indexOf calls. Not a big deal though. Just need a couple of jasmine tests, and your call whether to add the tick0 Sunday/Monday fix here or in a separate PR.

@nicolaskruchten

Copy link
Copy Markdown
Contributor

Here's a pen based on this bundle: https://codepen.io/nicolaskruchten/pen/rNeOgXj?editors=0010 (no rangebreaks) ... the label doesn't appear in the middle of the week unfortunately

Comment threadsrc/plots/cartesian/axes.js Outdated
) definedDelta = ONEDAY;
else if(
_has('%A') || // full weekday name
_has('%a') || // abbreviated weekday name

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Don't weekdays go in the ONEDAY bucket?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 9424347.

Comment threadtest/jasmine/tests/axes_test.js Outdated
afterEach(destroyGraphDiv);

function _assert(msg, exp) {
var labelPositions = gd._fullLayout.xaxis._vals.map(function(d) { return d.periodX; });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Very nice tests! But can we use _fullLayout.xaxis.c2d(d.periodX) to get these back into date string form - eg 1562079600000 would give '2019-07-02 15:00', and it's not clear to me how we got that precise value, but at least it has a recognizable meaning.

Good call. Done in f0f078a.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Also perhaps we can test the text that's stored in xaxis._vals[].text so it's obvious what labels we're showing at what datetime values?

Done in 90ee834.

Comment threadtest/jasmine/tests/axes_test.js Outdated
Comment on lines +5246 to +5247
})
.then(function() {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggested change
})
.then(function(){

Not a big deal, but here (and the other new tests) these assertions can be done together.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Done in 1c94ba9.

@alexcjohnsonalexcjohnson left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Beauty! Thanks for the test changes, much easier to see what's really going on 💃

@archmoj
archmoj merged commit 00d7c6b into masterAug 13, 2020
@archmoj
archmoj deleted the new-formats-in-period-ticklabelmode branch August 13, 2020 21:24
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.

3 participants

@archmoj@nicolaskruchten@alexcjohnson