diff --git a/src/plugins/built-in/messageFolders/index.ts b/src/plugins/built-in/messageFolders/index.ts
index c0b35cb9..e8170e86 100644
--- a/src/plugins/built-in/messageFolders/index.ts
+++ b/src/plugins/built-in/messageFolders/index.ts
@@ -1,7 +1,23 @@
import type { Plugin } from "../../core/types";
+import { booleanSetting } from "@/plugins/core/settingsHelpers";
import { waitForElm } from "@/seqta/utils/waitForElm";
import styles from "./styles.css?inline";
+const messageFoldersSettings = {
+ showTagsInAllMessages: booleanSetting({
+ default: true,
+ title: "Show folder tags in All Messages",
+ description:
+ "When off, folder tags are not shown on the message list until you select a folder.",
+ }),
+ hideFolderedMessagesInAll: booleanSetting({
+ default: true,
+ title: "Hide foldered messages in All Messages",
+ description:
+ "When on, messages assigned to a custom folder are hidden from the inbox until you open that folder.",
+ }),
+} as const;
+
interface Folder {
id: string;
name: string;
@@ -20,7 +36,6 @@ const FOLDER_COLORS = [
const FOLDER_ICON_SVG = ``;
const PLUS_SVG = ``;
-const CHECK_SVG_DARK = ``;
const CHECK_SVG_WHITE = ``;
const CLOSE_SVG = ``;
const EDIT_SVG = ``;
@@ -30,12 +45,12 @@ function generateId(): string {
return Date.now().toString(36) + Math.random().toString(36).slice(2, 7);
}
-const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
+const messageFoldersPlugin: Plugin = {
id: "messageFolders",
name: "Message Folders",
description: "Organize direct messages into custom folders",
version: "1.0.0",
- settings: {},
+ settings: messageFoldersSettings,
disableToggle: true,
defaultEnabled: true,
@@ -95,6 +110,25 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
return (getAssignments()[folderId] ?? []).length;
};
+ const restoreSubjectPlain = (subject: Element) => {
+ subject.querySelector(".bsplus-msg-badges")?.remove();
+ const textWrap = subject.querySelector(".bsplus-subject-text");
+ if (textWrap) {
+ subject.textContent = textWrap.textContent ?? "";
+ }
+ };
+
+ const isMessageInAnyCustomFolder = (messageId: string): boolean => {
+ for (const msgIds of Object.values(getAssignments())) {
+ if (msgIds.includes(messageId)) return true;
+ }
+ return false;
+ };
+
+ const shouldShowBadgesInList = (): boolean => {
+ return api.settings.showTagsInAllMessages || activeFolderId !== null;
+ };
+
// ── Confirm modal ──
const showConfirmModal = (
@@ -190,6 +224,7 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
allItem.addEventListener("click", () => {
activeFolderId = null;
applyFolderFilter();
+ applyBadges();
renderSidebarFolders();
});
section.appendChild(allItem);
@@ -258,6 +293,7 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
item.addEventListener("click", () => {
activeFolderId = folder.id;
applyFolderFilter();
+ applyBadges();
renderSidebarFolders();
});
@@ -372,6 +408,7 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
if (activeFolderId !== null) {
activeFolderId = null;
applyFolderFilter();
+ applyBadges();
renderSidebarFolders();
}
}
@@ -496,9 +533,22 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
// ── Message badges ──
const applyBadges = () => {
+ const messageItems = document.querySelectorAll("[class*='MessageList__MessageList___'] ol > li[data-message]");
+
+ if (!shouldShowBadgesInList()) {
+ for (const li of messageItems) {
+ const subject = li.querySelector("[class*='MessageList__subject___']");
+ if (subject && (subject.querySelector(".bsplus-msg-badges") || subject.querySelector(".bsplus-subject-text"))) {
+ restoreSubjectPlain(subject);
+ } else {
+ li.querySelector(".bsplus-msg-badges")?.remove();
+ }
+ }
+ return;
+ }
+
const folders = getFolders();
const assignments = getAssignments();
- const messageItems = document.querySelectorAll("[class*='MessageList__MessageList___'] ol > li[data-message]");
for (const li of messageItems) {
const msgId = li.getAttribute("data-message");
@@ -547,6 +597,7 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
e.stopPropagation();
activeFolderId = folder.id;
applyFolderFilter();
+ applyBadges();
renderSidebarFolders();
});
badgeContainer.appendChild(badge);
@@ -561,8 +612,19 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
const moreBtn = document.querySelector("[class*='MessageList__MessageList___'] ol > button");
if (activeFolderId === null) {
- for (const li of messageItems) {
- li.classList.remove("bsplus-folder-hidden");
+ if (api.settings.hideFolderedMessagesInAll) {
+ for (const li of messageItems) {
+ const msgId = li.getAttribute("data-message");
+ if (msgId && isMessageInAnyCustomFolder(msgId)) {
+ li.classList.add("bsplus-folder-hidden");
+ } else {
+ li.classList.remove("bsplus-folder-hidden");
+ }
+ }
+ } else {
+ for (const li of messageItems) {
+ li.classList.remove("bsplus-folder-hidden");
+ }
}
if (moreBtn) (moreBtn as HTMLElement).classList.remove("bsplus-folder-hidden");
return;
@@ -649,6 +711,17 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
const mountUnsub = api.seqta.onMount("div.messages", handleMessagesPage);
unregisters.push(mountUnsub);
+ unregisters.push(
+ api.settings.onChange("showTagsInAllMessages", () => {
+ applyBadges();
+ }),
+ );
+ unregisters.push(
+ api.settings.onChange("hideFolderedMessagesInAll", () => {
+ applyFolderFilter();
+ }),
+ );
+
return () => {
for (const u of unregisters) u.unregister();
messageListObserver?.disconnect();
@@ -659,6 +732,11 @@ const messageFoldersPlugin: Plugin<{}, MessageFoldersStorage> = {
document.querySelectorAll(".bsplus-folders-section").forEach((el) => el.remove());
document.querySelectorAll(".bsplus-folder-btn").forEach((el) => el.remove());
document.querySelectorAll(".bsplus-msg-badges").forEach((el) => el.remove());
+ document.querySelectorAll("[class*='MessageList__subject___']").forEach((subject) => {
+ if (subject.querySelector(".bsplus-subject-text")) {
+ restoreSubjectPlain(subject);
+ }
+ });
document.querySelectorAll(".bsplus-folder-hidden").forEach((el) =>
el.classList.remove("bsplus-folder-hidden"),
);