') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); Upgrade d3 time format to expose new formatting options for weekdays, weeks and quarters by archmoj · Pull Request #5026 · plotly/plotly.js · GitHub
Skip to content

Upgrade d3 time format to expose new formatting options for weekdays, weeks and quarters - #5026

Merged
archmoj merged 6 commits into
masterfrom
new-d3-time-format
Jul 30, 2020
Merged

Upgrade d3 time format to expose new formatting options for weekdays, weeks and quarters#5026
archmoj merged 6 commits into
masterfrom
new-d3-time-format

Conversation

@archmoj

@archmojarchmoj commented Jul 28, 2020

Copy link
Copy Markdown
Contributor

Supersedes #5023 and resolves#5009 by upgrading d3-time-format to the latest version.

@plotly/plotly_js

- support formatting options e.g. quarters, weeks and weekdays
- update description link to list various time format options
@alexcjohnson

Copy link
Copy Markdown
Collaborator

The fix looks great. But for low-level non-graphical items like this I'd like us to get away from using image tests. This one should just add a few more test cases to this test:

it('should accept custom formats using d3 specs even for world cals',function(){

That's both faster (in terms of our overall test suite time going forward) and more complete: we can easily add arbitrarily many cases, and it'll also tell us how the new fields play with world calendars - no need to fix anything that might come up there, I just want to know what we do and do not support, like:

'Mesori \'28 WOY:## DOW:##'// world-cals doesn't support U or w

@archmojarchmoj added the bug something broken label Jul 29, 2020
[
'%B \'%y WOY:%U DOW:%w',
'August \'12 WOY:32 DOW:1',
'August \'12 WOY:33 DOW:1',

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.

Fixed bug reported in d3/d3-time-format#62.

'Mon Aug 13 06:19:34 2012 && 08/13/2012 && .57 .5678',
'Pes Meso 7 06:19:34 1728 && 12/07/1728 && .57 .5678'
'8/13/2012, 6:19:34 AM && 8/13/2012 && .57 .5678',
'Pes Meso 7 6:19:34 AM 1728 && 12/07/1728 && .57 .5678'

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.

According to https://github.com/d3/d3/blob/master/CHANGES.md#time-formats-d3-time-format
The default U.S. English locale now uses 12-hour time and a more concise representation of the date. This aligns with local convention and is consistent with date.toLocaleString in Chrome, Firefox and Node

varnow=newDate;d3.timeFormat("%c")(newDate);// "6/23/2016, 2:01:33 PM"d3.timeFormat("%x")(newDate);// "6/23/2016"d3.timeFormat("%X")(newDate);// "2:01:38 PM"

@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.

Excellent! Thanks for the test updates! 💃

@archmoj
archmoj merged commit 0426df3 into masterJul 30, 2020
@archmoj
archmoj deleted the new-d3-time-format branch July 30, 2020 13:32
@archmojarchmoj mentioned this pull request Jul 30, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugsomething brokenfeaturesomething new

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Formatting for weeks and quarters

2 participants

@archmoj@alexcjohnson