Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo
, '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

Distinguish section mutations from item mutations - #16

Open
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations
Open

Distinguish section mutations from item mutations#16
ivopintodasilva wants to merge 3 commits into
RACCommunity:masterfrom
ivopintodasilva:feature/decouple-section-mutations

Conversation

@ivopintodasilva

Copy link
Copy Markdown
Contributor

Hello 👋

On the original implementation of FlexibleDiff we are considering a section mutation happens when:

  1. A section's metadata has changed;
  2. The items of the sections have changed/moved.

I've forked the library and have been using a slightly different approach where the Changeset only reveals a section mutation when the actual section's metadata has changed, disregarding any changes on the section's items for this purpose.

In my use case, this gives me a direct correlation between the changeset and the updates that I need to perform on a given collection view:

  • I can update a section header only when a section's metadata has changed;
  • When only items have changed I don't need to "refresh" the whole section.

What do you think about this approach?

Thanks for the great work! 😃

@ivopintodasilvaivopintodasilva changed the title Distinguish between section mutations and item mutationsDistinguish section mutations from item mutationsJul 5, 2019
@andersio

Copy link
Copy Markdown
Member

will need to be released as a major version

@andersio

andersio commented Feb 10, 2021

Copy link
Copy Markdown
Member

/// - precondition: Offsets in `sections.mutations` and `sections.moves` must have a
/// corresponding entry in `mutatedSections` if they represent a
/// mutation.

The precondition here is no longer valid, so it will need to be updated.

Since this has to be released as a API breaking change, I wonder if it is worth dropping SectionedChangeset.sections, and re-introduce the index sets to be top-level field of SectionedChangeset. This then allows us to rename sections.mutations to metadataMutated to make a strong distinction vs mutatedSections (maybe rename to itemMutatedSections).

@ivopintodasilva
ivopintodasilvaforce-pushed the feature/decouple-section-mutations branch from 6028923 to 785aab0CompareFebruary 20, 2021 10:50
@p4checo

Copy link
Copy Markdown

Bumping this 😇

@andersio are you still waiting for changes, or can this work get merged and a new release cut? Thanks! 🙏🏼

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.

3 participants

@ivopintodasilva@andersio@p4checo