Commit Graph
114 Commits
Author SHA1 Message Date
fen a9f94ce806 Merge pull request '#233: file attachment title takes the file name' (#236) from fix-233 into dev
CI / test (push) Successful in 50s
CI / docker (push) Successful in 44s
2026-09-10 23:39:44 +00:00
fen c89d064eb8 #240: indent burn-after-read readable box under the option label text and match row padding rhythm
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
2026-09-10 18:09:00 -05:00
fen f25ed8bc5d #240: keep submenu padding on burn-after-read row
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
2026-09-10 17:58:21 -05:00
fen b840bffeba #238: drop hardcoded page 2 from pagination window
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
2026-09-10 17:29:28 -05:00
fen 5075374abe Merge pull request '#235: rename Language column to Type; attachments show file extension' (#237) from fix-235 into dev
CI / test (push) Successful in 43s
CI / docker (push) Successful in 37s
2026-09-10 22:14:57 +00:00
fen 0008b8ce0c #235: rename Language column to Type; attachment pastes show file extension
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
- history/mine table column 'Language' -> 'Type' (data-sort key 'type')
- /api/public and /api/mine rows gain a 'type' field: file extension for
  attachment pastes, stored language otherwise (default 'text')
- paste page stats label 'Language' -> 'Type'; summary line uses the same
  label; get-paste JSON gains 'type'
- store list queries LEFT JOIN attachments to expose the filename
- table.js sorting accepts the 'type' key
2026-09-10 17:13:37 -05:00
fen 9a5eaed00b #232: file pill shows filename twice on non-image files; drop duplicate, let long names truncate wider and reveal on hover
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
2026-09-10 17:05:18 -05:00
fen 785fafcaf9 #233: file attachment title takes the file name, fallback date.ext
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
2026-09-10 17:05:08 -05:00
fen ca59c19fa4 fix-232: drop attachment-preview img for non-image files (alt text painted duplicate filename); widen chip name max-width to 560px
CI / test (pull_request) Successful in 42s
CI / docker (pull_request) Skipped
2026-09-10 17:02:54 -05:00
fen 86eb821780 #229: padding between image and pill border, drop corner-clipped inner border
CI / test (pull_request) Successful in 46s
CI / docker (pull_request) Skipped
2026-09-10 14:54:28 -05:00
fen d18bbb7064 #221: summary pill size must come from the attachment blob for file pastes
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
The merged #224 fix covered the details grid but left the summary
pill using humanSize(len(row.Content)), which reads 0 for attachment
pastes (text content is empty). Use the attachment size there too.
2026-09-10 14:31:56 -05:00
fen 98ea7eefa9 fix #221: scale image pastes, drop text box, fix raw view and size
CI / test (pull_request) Successful in 45s
CI / docker (pull_request) Skipped
- image pastes render the image scaled to fit the viewer box (aspect
  ratio preserved, max-height 70vh), no text/code box below it
- link pill moved under the image as a small inline chip
- /raw serves image attachment bytes as an image instead of empty text
- view details size reports the actual attachment file size
2026-09-10 14:19:07 -05:00
fen fa702eb8b1 Fix details pill border clipped thin at corners (#222)
CI / test (pull_request) Successful in 42s
CI / docker (pull_request) Skipped
The details pill drew its own 1px border with a 10px radius inside .float, which draws the real border at 20px radius and clips with overflow:hidden. The parent's looser curve clipped the pill's tighter corner curve, making the border appear thinner/cut at the corners, in both collapsed and expanded states. Drop the pill's own border/radius so .float is the single border surface, matching the other pills on the page.

Ref #222
2026-09-10 14:16:28 -05:00
fen 7c7e60375c Merge pull request #217 from fen/fix-209
CI / test (push) Successful in 41s
CI / docker (push) Successful in 37s
Fix #209 r2: arrows immediately right of the column label text
2026-09-10 13:27:49 -05:00
fen 700b8252f0 Merge pull request 'Fix #209 r2: sort arrows immediately right of label text' (#218) from fix-209 into dev
CI / test (push) Successful in 47s
CI / docker (push) Successful in 41s
2026-09-10 18:17:39 +00:00
fen 89a9c173ca Fix #209 r2: sort arrows immediately right of label text
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
2026-09-10 13:15:06 -05:00
fen 13884ca786 Merge pull request #215 from fix-205
CI / test (push) Successful in 46s
CI / docker (push) Successful in 42s
Fix #205: stop gutter drift from phantom newline rows
2026-09-10 18:15:03 +00:00
fen 7cffd21df9 Fix #209 r2: arrows immediately right of label text, fixed gap
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
Absolute right:8px pinned arrows to the column edge; inline span after
the label with margin-left:6px keeps a consistent gap from the text.
2026-09-10 13:14:28 -05:00
fen 5034f156ee Fix #205: strip whitespace-only text nodes between codeline blocks
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
paste-lines.js rebuilt the codebody with innerHTML but relied on the
server-side '\n' delimiters disappearing between the per-line blocks.
Under white-space: pre any whitespace-only text node that survives
(cached HTML, template drift) renders as a phantom row and drifts the
gutter numbers off their lines. splitLines() now strips whitespace-only
text nodes after rebuilding, keeping renumber() geometry intact.
2026-09-10 13:12:12 -05:00
fen c320fa03c9 Fix #207 r2: dark mode toggle left aligned per owner feedback
CI / test (pull_request) Successful in 46s
CI / docker (pull_request) Skipped
2026-09-10 13:07:14 -05:00
fen 5039a76bec Fix #209: move sort arrows to the right of the column label
CI / test (pull_request) Successful in 45s
CI / docker (pull_request) Skipped
2026-09-10 13:02:22 -05:00
fen 8636a23f49 Fix #210: declare missing delete-button column in saved pastes table
CI / test (pull_request) Successful in 45s
CI / docker (pull_request) Skipped
/mine rows render 7 cells (ID + delete button) but the colgroup and
thead only declared 6 columns, so under table-layout:fixed the delete
button cell overlapped the ID column at narrower widths. Add a
col-del column + empty header th to match the row cells.
2026-09-10 12:56:10 -05:00
fen 348f792c73 Merge pull request 'Fix #169: persistent full-width divider between dropdown title and body' (#195) from fix-195 into dev
CI / test (push) Successful in 44s
CI / docker (push) Successful in 45s
2026-09-10 12:27:33 -05:00
fen ec791cc2db Fix #167 r2: measure-based gutter rows + fix undefined tops ref in renumber
CI / test (pull_request) Successful in 42s
CI / docker (pull_request) Skipped
QA of the #167 follow-up found two defects:
1) renumber() referenced an undefined 'tops' variable in the rAF
   re-verification pass, so any wrap toggle that reflowed a partially
   filled last visual row left stale (non-idempotent) numbering.
2) rows were derived from per-span heights while the code column also
   renders newline text nodes between .codeline blocks, so the gutter
   could drift from the code column's real visual rows.

renumber() now measures each .codeline's actual offsetTop and places
every number on the visual row its line starts on (a line wrapping to N
rows gets its number on the first of them), pads filler rows in between,
and self-corrects one frame later if reflow moves any line. Wrap-OFF
path stays unchanged ('1
2
3
4'). Verified in headless Chromium:
gutter/code row alignment exact at 1200px and 640px, toggle cycles
stable, no horizontal scroll, no CSP console errors; go build/test pass.
2026-09-10 12:19:44 -05:00
fen 23cf3151c4 Merge pull request 'Fix settings dark mode toggle and center it (#197)' (#199) from fix-197 into dev
CI / test (push) Successful in 42s
CI / docker (push) Successful in 50s
2026-09-10 17:16:38 +00:00
fen f1665f1b31 Merge fix-167 (PR #200) into dev
CI / test (push) Successful in 38s
CI / docker (push) Successful in 43s
Resolves #167

QA: fen
2026-09-10 12:14:21 -05:00
fen e1056df747 Fix #167: gutter alignment with wrap on
CI / test (pull_request) Successful in 46s
CI / docker (pull_request) Skipped
Rebuild renumber() so gutter numbers are placed by measured geometry:
each .gutline block is one visual row and each number is assigned to the
row whose top matches its .codeline's top, instead of counting rows per
line. This keeps numbers aligned with wrapped line starts regardless of
how many visual rows a line occupies. Wrap OFF path unchanged.
2026-09-10 12:12:31 -05:00
fen 5fdb34a059 Fix #167: align gutter numbers with actual rendered line rows (wrap ON)
CI / test (pull_request) Successful in 44s
CI / docker (pull_request) Skipped
paste-lines.js joined .codeline spans with '\n' text nodes that pre-wrap
renders as extra line boxes, and renumber() counted per-line span heights
(rounding) instead of real geometry, so gutter numbers drifted off their
line starts on wrapped lines. Fix: join spans with '' (blocks need no
newline text), and build one .gutline per visual row measured from the
code body's real height, placing each number at the visual row whose top
matches its .codeline's measured top. Wrap OFF path unchanged. Mobile
font-size rule added so gutter row pitch matches code rows at 375x812.
2026-09-10 12:12:00 -05:00
fen 734d656f0c Merge pull request 'Fix #194 r2: line-number gutter alignment in both wrap modes' (#198) from fix-194-r2 into dev
CI / test (push) Successful in 47s
CI / docker (push) Successful in 49s
2026-09-10 17:11:08 +00:00
fen 8042116a69 Fix settings dark mode toggle double-binding and center it (#197)
CI / test (pull_request) Successful in 50s
CI / docker (pull_request) Skipped
topbar.js binds click handlers to every .dark-toggle, including the
settings one; settings.js then also wired a delegation that re-clicked
the topbar button, so each click flipped dark mode twice (net no-op).
Mark buttons as wired in topbar.js and only add a fallback handler in
settings.js when topbar.js did not run.

CSS: center the toggle horizontally under the Settings title with auto
margins, matching .settings-body padding.

Closes #197
2026-09-10 12:10:00 -05:00
fen 2149fcc2e1 Fix #167: gutter numbers align with wrapped-line starts
CI / test (pull_request) Successful in 49s
CI / docker (pull_request) Skipped
- splitLines(): join .codeline blocks with "" not "\n" — newline text
  nodes under pre-wrap rendered an extra line box per logical line, so
  every gutter number drifted one row per line
- renumber(): geometry-driven placement — one gutline per visual row of
  the code body, each number assigned to the row matching its line's
  measured offsetTop; verified second pass re-runs if a partially-filled
  last wrapped row reflows after the gutter rebuild
- app.css: mobile media query gives .code .gutter the same 13px font as
  .code so gutter rows and code rows share one line box at 375px

Verified in local build with headless chromium (long unbroken token on
line 5, wrap ON): all numbers align with line starts, no misalignment,
no horizontal scroll at 1400x900 and 375x812.
2026-09-10 12:09:16 -05:00
fen e430eb57b7 Fix #167: renumber gutter to visual rows when line wrap is on
CI / test (pull_request) Successful in 39s
CI / docker (pull_request) Skipped
Split the paste codebody into per-line block spans (paste-lines.js) and
rebuild the gutter from each line's wrapped height so numbers count
visual rows, not logical lines. Pinned the gutter width (flex 0 0 auto,
3ch) so its row count no longer feeds back into the code column width.
ResizeObserver renumbers on wrap toggle / resize; wrap-off behavior is
unchanged (one number per newline).
2026-09-10 12:08:49 -05:00
fen 1f5e671a43 Fix #194 r2: align line-number gutter in both wrap modes
CI / test (pull_request) Successful in 43s
CI / docker (pull_request) Skipped
QA FAIL of PR #179 (verified on palette-dev 2026-09-10) found two defects:

1) Row accounting: splitLines() joined .codeline blocks with '\n' text
   nodes. Since dee062d made .codeline display:block, each interleaved
   newline text node rendered as its own extra visual row in the code
   column under pre-wrap, but renumber() counted only .codeline span
   heights, so the gutter had one fewer row per line break and numbers
   drifted off alignment on wrapped lines. Fix: join('') so blocks are
   adjacent with no phantom newline rows; blank source lines become
   empty blocks given a line box via .codeline:empty::before (ZWJ) in
   app.css so they still count as one row.

2) Inline gutter spans: .gutline spans were appended with no separators
   and .code .gutter .gutline { display: block } did not exist on the
   deployed build, so all numbers landed on one row. That rule is
   present in origin/dev (merged via #183); kept unchanged and verified
   by rendering in a local build.

Wrap OFF path unchanged: gutter still gets '1\n2\n3\n4' text and the
horizontal-scroll gutter behavior is untouched (no CSS changes to
scrolling; only a :empty line-box rule). CSP unchanged: no inline
styles/handlers, static JS only.
2026-09-10 12:07:42 -05:00
fen 2a21251c47 Fix #187: add favicon (paint palette)
CI / test (pull_request) Successful in 39s
CI / docker (pull_request) Skipped
2026-09-10 12:01:54 -05:00
fen 179eb17da9 Fix #169: persistent full-width divider between dropdown title and body
CI / test (pull_request) Successful in 46s
CI / docker (pull_request) Skipped
The can page 'Show content' dropdown had no divider between the summary
title and the body; the only line-like artifact appeared hover-dependent
(the stats header hover background edge). Per the owner follow-up, the
divider between a dropdown title and its body must be persistent (not
hover dependent) and extend the full width of the card left and right.

can page: .can-item-body[open] summary now carries a permanent 1px
var(--border) bottom rule spanning the full card width via negative
margins matching the card padding, plus matching bottom padding.
2026-09-10 11:58:41 -05:00
fen 6c1bfaf15e Fix #184: file upload replaces the main editing area on /new
CI / test (pull_request) Successful in 48s
CI / docker (pull_request) Skipped
Image files render fitted into the editor area (editor and gutter
hidden); the title auto-fills with the file name. Text files always
load their content into the editor, replacing any text already there,
instead of only filling an empty editor. Title auto-fill still only
applies when the title is blank; a typed title is never overwritten.
Drawing and cropping tools are noted in the issue as possible future
work and are intentionally not implemented here.
2026-09-10 11:54:59 -05:00
fen 368620eb15 Merge pull request 'fix #171: CSP-compliant image preview (data: URL instead of blob:)' (#186) from fix-171 into dev
CI / test (push) Successful in 41s
CI / docker (push) Successful in 50s
2026-09-10 16:42:15 +00:00
fen 80e761f53d Fix #169: persistent full-width divider under stats dropdown title
CI / test (pull_request) Successful in 40s
CI / docker (pull_request) Skipped
The divider between the stats dropdown head and body lived on
.stats-body's border-top, so it vanished when collapsed and only the
hover background hinted at the boundary (flicker). Move it to
.stats-head border-bottom so it is always present and spans the full
pill width.
2026-09-10 11:40:59 -05:00
fen f947415b23 fix #171: use FileReader data: URL for image preview (CSP blocks blob:)
CI / test (pull_request) Successful in 39s
CI / docker (pull_request) Skipped
2026-09-10 11:38:22 -05:00
fen 0e5cfcd403 Merge pull request 'Revise notification pill (#168)' (#181) from fix-168 into dev
CI / test (push) Successful in 42s
CI / docker (push) Successful in 50s
2026-09-10 16:38:08 +00:00
fen 9692531a40 Fix #167 rev: add missing .gutline CSS so gutter numbers align with wrapped lines
CI / test (pull_request) Successful in 41s
CI / docker (pull_request) Skipped
QA of PR #179 found paste-lines.js creates .gutline spans but no CSS rule
existed, so all gutter numbers rendered inline on one visual row. Stack
them one per row under .code .gutter; blank fill spans inherit it.
2026-09-10 11:35:39 -05:00
fen b801d7fb56 Revise notification pill per reopened #168: short text, smaller, side placement
CI / test (pull_request) Successful in 40s
CI / docker (pull_request) Skipped
- Pill now reads only 'Paste Created' (no combined 'Paste Created - Link Copied')
- Copy fallback toast now says 'Link Copied'
- Pill shrunk (smaller padding/font) and anchored tighter to the right side

Fixes #168
2026-09-10 11:33:45 -05:00
fen 362a59690f Merge pull request 'Clean up notification pill (#168)' (#178) from fix-168 into dev
CI / test (push) Successful in 40s
CI / docker (push) Successful in 50s
2026-09-10 16:25:56 +00:00
fen 0643ca433e Merge pull request 'Fix #167: gutter numbers realign with wrapped lines' (#179) from fix-167 into dev
CI / test (push) Successful in 39s
CI / docker (push) Successful in 49s
2026-09-10 16:25:15 +00:00
fen 6064404723 Merge remote fix-168: keep corner pill, cookie-based token flow
CI / test (pull_request) Successful in 40s
CI / docker (pull_request) Skipped
2026-09-10 11:25:15 -05:00
fen aa4d017631 Fix #168: compact corner notification pill for paste creation 2026-09-10 11:24:24 -05:00
fen dee062dfa5 Fix #167: gutter numbers track wrapped visual rows when line wrap enabled
CI / test (pull_request) Successful in 38s
CI / docker (pull_request) Skipped
2026-09-10 11:23:49 -05:00
fen 6ef0de6e19 Merge remote-tracking branch 'origin/dev' into qa178
# Conflicts:
#	internal/web/templates/paste.html
2026-09-10 11:23:47 -05:00
fen 28a79b20ea Merge pull request 'editor head: wrap toggle state and pill highlight (#166)' (#172) from fix-166 into dev
CI / test (push) Successful in 37s
CI / docker (push) Successful in 43s
2026-09-10 16:21:28 +00:00
fen 3fa2c93e22 clean up notification pill wording, size, and placement (#168)
CI / test (pull_request) Successful in 39s
CI / docker (pull_request) Skipped
2026-09-10 11:18:57 -05:00