fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749
, '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

fix(web): fully clear diff route state when closing panel - #953

Closed
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close
Closed

fix(web): fully clear diff route state when closing panel#953
copypasteitworks wants to merge 1 commit into
pingdotgg:mainfrom
copypasteitworks:pr/diff-toggle-close

Conversation

@copypasteitworks

@copypasteitworkscopypasteitworks commented Mar 12, 2026

Copy link
Copy Markdown

Summary

This also targets the diff-panel close bug addressed in #937. I noticed that PR after preparing this one, so if that approach is preferred this PR can be closed.

This affects both browser and desktop builds because the diff panel state is driven by the same web route/search logic.

This version differs in two ways:

  • it clears the full diff route state on close, not just diff
  • it adds a focused regression test for removing diff search state from the active thread route

Closes#931
Closes#935

Repro

  1. Open a thread.
  2. Open the diff panel.
  3. Try to close it with the close button.
  4. On narrow layouts, try dismissing it by clicking the overlay.

Actual on main

The route keeps diff=1, so the diff panel does not really close.

Root Cause

The thread route retains the diff search param at the route level, so explicit close navigation that strips diff params is immediately overridden by retained search state.

What This Changes

  • removes route-level diff search retention from the thread route
  • keeps shared diff search validation through the thread route search options
  • adds a regression test proving stripDiffSearchParams(previous) removes diff route state from the active thread route

Why This Differs From #937

#937 fixes the stuck-open symptom by unsetting diff, but leaves diffTurnId and diffFilePath behind.

This PR clears all diff route params on close, which keeps the URL and route state fully in sync after dismissing the panel.

Testing

  • bun fmt
  • bun lint
  • bun typecheck
  • bun run test -- src/threadRouteSearch.test.ts
  • manually verified on main that:
    • close button does not close the diff panel
    • overlay dismiss does not close the diff panel on narrow layouts
  • manually verified on this branch that both close paths work

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a4308e8b-8169-4f1d-a274-c72c33e1d00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Mar 12, 2026
@ByQwank

Copy link
Copy Markdown

Merge already!! this has been driving me nuts today

@aashishsingla567

Copy link
Copy Markdown

Can we merge either this or the other fix? its very annoying.

@juliusmarminge

Copy link
Copy Markdown
Member

fixed

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

Labels

vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] I can't close the View diff sidepanel? [BUG] Diff panel toggle doesn't hide the diff panel

5 participants

@copypasteitworks@ByQwank@aashishsingla567@juliusmarminge@minseob749