thunderbird-patch-review

Easy-to-use patch review interface for Thunderbird

Contribute: ~marcc/thunderbird-review-plugin@lists.sr.ht

git clone git://mccd.space/thunderbird-patch-review

commit 690db80a5947ee75bf9278979797682e9af9081e
parent 28d27e979bbd73f374f5fb4e9544954ea34a0aa2
Author: Pi Agent <agent@pi.local>
Date:   Sat, 18 Jul 2026 22:18:30 +0200

review: fold each file's diff into the patch box, separated by borders

Move the per-file diff (and the no-diff note) inside the .patch-box so the\nseries nav, commit message, general comment, and every file's diff render\nas one card. Sections are separated by top borders instead of separate\ncards: the commit message gains a bottom border, each .file drops its own\nborder/radius and gets a single top border, and the general comment card\nsits flush as a section rather than indented like an inline card.

Diffstat:
Mextension/review/review.css | 21+++++++++++++++++----
Mextension/review/review.js | 6+++---
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/extension/review/review.css b/extension/review/review.css
@@ -243,6 +243,7 @@ button.primary:hover { color: #fff; opacity: 0.9; }
   margin: 0;
   padding: 0.8rem 1rem;
   border: 0;
+  border-bottom: 1px solid var(--border);
   border-radius: 0;
   background: transparent;
   white-space: pre-wrap;
@@ -276,15 +277,16 @@ button.primary:hover { color: #fff; opacity: 0.9; }
 .commit-message .patch-headers > dt + dd::after { content: "\A"; white-space: pre; }
 
 .file {
-  margin-bottom: 1rem;
-  border: 1px solid var(--border);
-  border-radius: 6px;
+  margin: 0;
+  border: 0;
+  border-top: 1px solid var(--border);
+  border-radius: 0;
   overflow: hidden;
 }
 
 .file > summary {
   padding: 0.4rem 0.8rem;
-  background: var(--surface);
+  background: transparent;
   font-family: ui-monospace, monospace;
   font-weight: 600;
   cursor: pointer;
@@ -359,6 +361,17 @@ tr.comment-row td { padding: 0; }
   font-family: -apple-system, "Segoe UI", sans-serif;
 }
 
+/* The patch-level (general) comment card sits inside the patch box as a
+   section of its own, flush with the others rather than indented like the
+   inline cards under diff lines. */
+.patch-box > .comment-box.readonly {
+  margin: 0;
+  border: 0;
+  border-top: 1px solid var(--border);
+  border-radius: 0;
+  background: var(--comment-bg);
+}
+
 .comment-box .comment-text { padding: 0.5rem 0.8rem; white-space: pre-wrap; }
 
 .comment-box textarea {
diff --git a/extension/review/review.js b/extension/review/review.js
@@ -155,7 +155,6 @@ function renderPatch() {
   if (existingGeneral) {
     box.appendChild(commentCard(existingGeneral.text, () => openGeneralEditor(msg, null)));
   }
-  content.appendChild(box);
 
   parsed.files.forEach((file, fileIndex) => {
     const details = document.createElement("details");
@@ -171,15 +170,16 @@ function renderPatch() {
     } else {
       details.appendChild(renderFileTable(file, fileIndex));
     }
-    content.appendChild(details);
+    box.appendChild(details);
   });
 
   if (!parsed.files.length && !patch.isCover) {
     const note = document.createElement("div");
     note.className = "file-note";
     note.textContent = "No diff found in this message.";
-    content.appendChild(note);
+    box.appendChild(note);
   }
+  content.appendChild(box);
 }
 
 function headerRow(name, value, into) {