From d2c4e90df3e2da302a75e5829b87e9250190e699 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Fri, 12 Jun 2026 00:20:45 -0700 Subject: [PATCH 1/6] fix: make getTimelineItemWrapper idempotent --- src/utils/interface.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/interface.js b/src/utils/interface.js index 2b90a429d5..66c0e84997 100644 --- a/src/utils/interface.js +++ b/src/utils/interface.js @@ -24,7 +24,8 @@ const targetWrapperSelector = keyToCss( export const getTimelineItemWrapper = element => (element.closest('[data-timeline-id]') && element.closest(listTimelineObjectSelector)?.parentElement) || element.closest(cellSelector) || - element.closest(listTimelineObjectSelector); + element.closest(listTimelineObjectSelector) || + element; /** * @param {Element} element Element within a popover wrapper From 9306b7bd013aaa790902f2fd8dccc020a6b29ebf Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Fri, 12 Jun 2026 00:21:02 -0700 Subject: [PATCH 2/6] fix: do something normal in filtered posts tweak --- src/features/tweaks/hide_filtered_posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/tweaks/hide_filtered_posts.js b/src/features/tweaks/hide_filtered_posts.js index d39730feb5..2276c5c95d 100644 --- a/src/features/tweaks/hide_filtered_posts.js +++ b/src/features/tweaks/hide_filtered_posts.js @@ -1,6 +1,6 @@ import { keyToCss } from '../../utils/css_map.js'; import { createPostHideFunctions } from '../../utils/hide_posts.js'; -import { getTimelineItemWrapper } from '../../utils/interface.js'; +import { postSelector } from '../../utils/interface.js'; import { pageModifications } from '../../utils/mutations.js'; const { hidePost, showPosts } = createPostHideFunctions({ @@ -11,7 +11,7 @@ const { hidePost, showPosts } = createPostHideFunctions({ }); const hideFilteredPosts = filteredScreens => filteredScreens - .map(getTimelineItemWrapper) + .map(filteredScreen => filteredScreen.closest(postSelector)) .forEach(hidePost); export const main = async function () { From 414f480555d24c5895940430768afbb0efa55513 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Fri, 12 Jun 2026 02:00:08 -0700 Subject: [PATCH 3/6] Apply suggestions from code review Co-authored-by: April Sylph <28949509+AprilSylph@users.noreply.github.com> --- src/utils/interface.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/utils/interface.js b/src/utils/interface.js index 66c0e84997..ac2ed04ac7 100644 --- a/src/utils/interface.js +++ b/src/utils/interface.js @@ -9,7 +9,6 @@ export const blogViewSelector = '[style*="--blog-title-color"] *'; export const notificationSelector = `:is(${keyToCss('notification')}[role="listitem"], ${keyToCss('activityItem')})`; const listTimelineObjectSelector = keyToCss('listTimelineObject'); -const cellSelector = keyToCss('cell'); const targetWrapperSelector = keyToCss( 'targetWrapper', 'targetWrapperBlock', @@ -22,10 +21,8 @@ const targetWrapperSelector = keyToCss( * @returns {Element | null} The timeline item wrapper */ export const getTimelineItemWrapper = element => - (element.closest('[data-timeline-id]') && element.closest(listTimelineObjectSelector)?.parentElement) || - element.closest(cellSelector) || - element.closest(listTimelineObjectSelector) || - element; + (element.closest('[data-timeline-id] > div > div') || + element.closest(listTimelineObjectSelector); /** * @param {Element} element Element within a popover wrapper From 5fdc3b580838eedb66b65b4cd7f2427d80dc16a0 Mon Sep 17 00:00:00 2001 From: marcustyphoon Date: Fri, 12 Jun 2026 02:01:49 -0700 Subject: [PATCH 4/6] lint --- src/utils/interface.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/interface.js b/src/utils/interface.js index ac2ed04ac7..c40df88727 100644 --- a/src/utils/interface.js +++ b/src/utils/interface.js @@ -21,7 +21,7 @@ const targetWrapperSelector = keyToCss( * @returns {Element | null} The timeline item wrapper */ export const getTimelineItemWrapper = element => - (element.closest('[data-timeline-id] > div > div') || + element.closest('[data-timeline-id] > div > div') || element.closest(listTimelineObjectSelector); /** From ecdc466757a523708f7ad60f6c8120b6347b2891 Mon Sep 17 00:00:00 2001 From: April Sylph <28949509+AprilSylph@users.noreply.github.com> Date: Fri, 12 Jun 2026 10:39:27 +0100 Subject: [PATCH 5/6] fix: remove margin from hidden posts --- src/utils/hide_posts.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/hide_posts.js b/src/utils/hide_posts.js index e5ca971dd6..575568b32f 100644 --- a/src/utils/hide_posts.js +++ b/src/utils/hide_posts.js @@ -94,6 +94,7 @@ export const createPostHideFunctions = ({ id, permalinkPageControls }) => { [${hiddenAttribute}], [${controlsAttribute}] ~ div [${controlledHiddenAttribute}] { content: linear-gradient(transparent, transparent); height: 0; + margin: 0 !important; } `; From dd54732fbbf72af05e97f46ff43fe449745866a2 Mon Sep 17 00:00:00 2001 From: April Sylph <28949509+AprilSylph@users.noreply.github.com> Date: Fri, 12 Jun 2026 11:17:50 +0100 Subject: [PATCH 6/6] refactor: max simplification of `getTimelineItemWrapper` --- src/utils/interface.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/utils/interface.js b/src/utils/interface.js index c40df88727..e31f3bc5f7 100644 --- a/src/utils/interface.js +++ b/src/utils/interface.js @@ -8,7 +8,6 @@ export const trailItemSelector = `${postSelector} ${keyToCss('reblog')}`; export const blogViewSelector = '[style*="--blog-title-color"] *'; export const notificationSelector = `:is(${keyToCss('notification')}[role="listitem"], ${keyToCss('activityItem')})`; -const listTimelineObjectSelector = keyToCss('listTimelineObject'); const targetWrapperSelector = keyToCss( 'targetWrapper', 'targetWrapperBlock', @@ -20,9 +19,7 @@ const targetWrapperSelector = keyToCss( * @param {Element} element Element within a timeline item * @returns {Element | null} The timeline item wrapper */ -export const getTimelineItemWrapper = element => - element.closest('[data-timeline-id] > div > div') || - element.closest(listTimelineObjectSelector); +export const getTimelineItemWrapper = element => element.closest(`${timelineSelector} > div > div`); /** * @param {Element} element Element within a popover wrapper