lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@rreusser@etpinard
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

lib function to interleave trace updates into a restyle - #847

Closed
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command
Closed

lib function to interleave trace updates into a restyle#847
rreusser wants to merge 1 commit into
masterfrom
trace-to-restyle-command

Conversation

@rreusser

@rreusserrreusser commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

cc: @etpinard. This PR implements an unused library function that translates a frame-style update into a restyle-…um, style update. Goal: ease the burden on reviewing #802, so perhaps review here and I'll cherry-pick into that PR if it passes. It translates this:

[{x: [1],'marker.color': 'red'},{x: [2],someprop: {enabled: true}}]

into this:

{x: [[1],[2]],'marker.color': ['red',undefined],someprop: [undefined,{enabled: true}]}

Caveat: There's some room for ambiguity if you specify marker.color and then overwrite with marker: {}. I'm a fan of strict sanity checking and good error reporting, but it's some extra work to either detect and throw an error or detect and resolve, so I'll hold off on this unless it seems necessary. At the very least, it's consistent. additional comment: How does restyle currently handle ambiguities? Unless we rigorously detect this case already, seems like this would all be the user's burden anyway.

Together with #844, this means frame updates can simply be interleaved and passed to Plotly.restyle. They are interleaved in order received, so that managing trace indices is not a concern of this function.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch 2 times, most recently from 5d6bbf3 to 127a4fdCompareAugust 12, 2016 00:37
Comment threadsrc/lib/index.js Outdated
var output = {};

for(i = 0; i < traces.length; i++) {
for(prop in traces[i]) {

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.

non- 🚫 , but we usually loop over object keys by first var keys = Object.keys(traces) and then looping of keys.

@etpinard

Copy link
Copy Markdown
Contributor

How does restyle currently handle ambiguities?

Here's what restyle does currently: http://codepen.io/etpinard/pen/oLmNPE

so I'll hold off on this unless it seems necessary

That's fine.

@etpinard

Copy link
Copy Markdown
Contributor

💃 once you're happy with it.

@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 127a4fd to 40344ffCompareAugust 12, 2016 15:14
@rreusser
rreusserforce-pushed the trace-to-restyle-command branch from 40344ff to e77a276CompareAugust 12, 2016 15:15
@rreusser

Copy link
Copy Markdown
ContributorAuthor

Regarding ambiguities, I was referring to conflicts within a single statement, which seems to be order-dependent. See example.

Plotly.restyle('graph',{marker: {color: 'red',size: 10},'marker.color': 'blue'})

@etpinard

etpinard commented Aug 12, 2016

Copy link
Copy Markdown
Contributor

I was referring to conflicts within a single statement, which seems to be order-dependent

Oh I see. The last key-value item ('marker.color': 'blue') should always override the previous (marker.color: 'red').

@rreusser did you find any cases where restyle didn't respect that logic?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

I didn't find cases where it didn't obey it, but key order in iterated javascript objects, though likely nailed down pretty well in the specs, doesn't seem like the most friendly thing to confront people with on a regular basis. But it's user input anyway and it's well-defined, if weird, so I'm fine with it.

@rreusser

rreusser commented Aug 12, 2016

Copy link
Copy Markdown
ContributorAuthor

For reference:

ES5: 12.6.4 The for-in statement:

The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified.

And from ES5: 15.2.3.14 Object.keys:

If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm.

That means there's no guarantee {marker: {color: 'red'}, 'marker.color': 'blue'} will have the same effect across different browsers. Practically speaking, keys are probably iterated in the ordered inserted. Though it's not a guarantee, making the input format potentially ambiguous. This is nothing new and probably has/never will present real problems, so am not pursuing this further at the moment.

@etpinard

Copy link
Copy Markdown
Contributor

@rreusser is this now part of #802 ?

@rreusser

Copy link
Copy Markdown
ContributorAuthor

@etpinard whoops. Didn't realize this wasn't already closed. It's not part, but instead managed to avoid the need for it by using the full supply defaults to apply the changes. So I think this is simply not needed, but there's a chance the code could come in handy if it does turn out to be necessary.

@rreusserrreusser closed this Sep 1, 2016
@etpinard
etpinard deleted the trace-to-restyle-command branch November 15, 2016 22:32
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@rreusser@etpinard