Commit 2b52ee5520
2b52ee5520cad3c47d30d513946645366f268762
parent: 01c3d342f6
Unsigned
cmc <hello@cleberg.net> · 2026-07-17 16:12 UTC
v4.8.0: Wire markdown/PDF export buttons into share menus
Adds "Export Markdown"/"Export PDF" (and batch/workflow equivalents) to the
single-result, batch, watchlist, and workflow export menus, gated behind
.advancedExports like the existing CSV/JSON options. Matches the existing
menu structure and Pro-gate wording per file rather than introducing a new
shared component, consistent with how CSV/JSON were already duplicated across
these five menus before this change.
Layout: unified · split
DomainDig/ContentView.swift
+20
| @@ -572,11 +572,21 @@ struct ContentView: View { |
| 572 | Button("Export JSON") { |
572 | Button("Export JSON") { |
| 573 | shareSingleResults(format: .json) |
573 | shareSingleResults(format: .json) |
| 574 | } |
574 | } |
| |
575 | Button("Export Markdown") { |
| |
576 | shareSingleResults(format: .markdown) |
| |
577 | } |
| |
578 | Button("Export PDF") { |
| |
579 | shareSingleResults(format: .pdf) |
| |
580 | } |
| 575 | } else { |
581 | } else { |
| 576 | Button("CSV Export • Available in Pro") {} |
582 | Button("CSV Export • Available in Pro") {} |
| 577 | .disabled(true) |
583 | .disabled(true) |
| 578 | Button("JSON Export • Available in Pro") {} |
584 | Button("JSON Export • Available in Pro") {} |
| 579 | .disabled(true) |
585 | .disabled(true) |
| |
586 | Button("Markdown Export • Available in Pro") {} |
| |
587 | .disabled(true) |
| |
588 | Button("PDF Export • Available in Pro") {} |
| |
589 | .disabled(true) |
| 580 | } |
590 | } |
| 581 | } label: { |
591 | } label: { |
| 582 | Image(systemName: "square.and.arrow.up") |
592 | Image(systemName: "square.and.arrow.up") |
| @@ -614,11 +624,21 @@ struct ContentView: View { |
| 614 | Button("Export Batch JSON") { |
624 | Button("Export Batch JSON") { |
| 615 | shareBatchResults(format: .json) |
625 | shareBatchResults(format: .json) |
| 616 | } |
626 | } |
| |
627 | Button("Export Batch Markdown") { |
| |
628 | shareBatchResults(format: .markdown) |
| |
629 | } |
| |
630 | Button("Export Batch PDF") { |
| |
631 | shareBatchResults(format: .pdf) |
| |
632 | } |
| 617 | } else { |
633 | } else { |
| 618 | Button("Batch CSV • Available in Pro") {} |
634 | Button("Batch CSV • Available in Pro") {} |
| 619 | .disabled(true) |
635 | .disabled(true) |
| 620 | Button("Batch JSON • Available in Pro") {} |
636 | Button("Batch JSON • Available in Pro") {} |
| 621 | .disabled(true) |
637 | .disabled(true) |
| |
638 | Button("Batch Markdown • Available in Pro") {} |
| |
639 | .disabled(true) |
| |
640 | Button("Batch PDF • Available in Pro") {} |
| |
641 | .disabled(true) |
| 622 | } |
642 | } |
| 623 | } label: { |
643 | } label: { |
| 624 | Label("Export", systemImage: "square.and.arrow.up") |
644 | Label("Export", systemImage: "square.and.arrow.up") |
DomainDig/WatchlistView.swift
+12
| @@ -160,11 +160,23 @@ struct WatchlistView: View { |
| 160 | Button("Export JSON") { |
160 | Button("Export JSON") { |
| 161 | shareTrackedDomains(format: .json) |
161 | shareTrackedDomains(format: .json) |
| 162 | } |
162 | } |
| |
163 | |
| |
164 | Button("Export Markdown") { |
| |
165 | shareTrackedDomains(format: .markdown) |
| |
166 | } |
| |
167 | |
| |
168 | Button("Export PDF") { |
| |
169 | shareTrackedDomains(format: .pdf) |
| |
170 | } |
| 163 | } else { |
171 | } else { |
| 164 | Button("CSV Export • Available in Pro") {} |
172 | Button("CSV Export • Available in Pro") {} |
| 165 | .disabled(true) |
173 | .disabled(true) |
| 166 | Button("JSON Export • Available in Pro") {} |
174 | Button("JSON Export • Available in Pro") {} |
| 167 | .disabled(true) |
175 | .disabled(true) |
| |
176 | Button("Markdown Export • Available in Pro") {} |
| |
177 | .disabled(true) |
| |
178 | Button("PDF Export • Available in Pro") {} |
| |
179 | .disabled(true) |
| 168 | } |
180 | } |
| 169 | } label: { |
181 | } label: { |
| 170 | Image(systemName: "line.3.horizontal.decrease.circle") |
182 | Image(systemName: "line.3.horizontal.decrease.circle") |
DomainDig/WorkflowsView.swift
+20
| @@ -246,11 +246,21 @@ struct WorkflowDetailView: View { |
| 246 | Button("Export JSON") { |
246 | Button("Export JSON") { |
| 247 | shareWorkflowResults(format: .json) |
247 | shareWorkflowResults(format: .json) |
| 248 | } |
248 | } |
| |
249 | Button("Export Markdown") { |
| |
250 | shareWorkflowResults(format: .markdown) |
| |
251 | } |
| |
252 | Button("Export PDF") { |
| |
253 | shareWorkflowResults(format: .pdf) |
| |
254 | } |
| 249 | } else { |
255 | } else { |
| 250 | Button("CSV Export • Available in Pro") {} |
256 | Button("CSV Export • Available in Pro") {} |
| 251 | .disabled(true) |
257 | .disabled(true) |
| 252 | Button("JSON Export • Available in Pro") {} |
258 | Button("JSON Export • Available in Pro") {} |
| 253 | .disabled(true) |
259 | .disabled(true) |
| |
260 | Button("Markdown Export • Available in Pro") {} |
| |
261 | .disabled(true) |
| |
262 | Button("PDF Export • Available in Pro") {} |
| |
263 | .disabled(true) |
| 254 | } |
264 | } |
| 255 | } label: { |
265 | } label: { |
| 256 | Label("Export Results", systemImage: "square.and.arrow.up") |
266 | Label("Export Results", systemImage: "square.and.arrow.up") |
| @@ -537,11 +547,21 @@ struct WorkflowRunSummaryView: View { |
| 537 | Button("Export JSON") { |
547 | Button("Export JSON") { |
| 538 | share(format: .json) |
548 | share(format: .json) |
| 539 | } |
549 | } |
| |
550 | Button("Export Markdown") { |
| |
551 | share(format: .markdown) |
| |
552 | } |
| |
553 | Button("Export PDF") { |
| |
554 | share(format: .pdf) |
| |
555 | } |
| 540 | } else { |
556 | } else { |
| 541 | Button("CSV Export • Available in Pro") {} |
557 | Button("CSV Export • Available in Pro") {} |
| 542 | .disabled(true) |
558 | .disabled(true) |
| 543 | Button("JSON Export • Available in Pro") {} |
559 | Button("JSON Export • Available in Pro") {} |
| 544 | .disabled(true) |
560 | .disabled(true) |
| |
561 | Button("Markdown Export • Available in Pro") {} |
| |
562 | .disabled(true) |
| |
563 | Button("PDF Export • Available in Pro") {} |
| |
564 | .disabled(true) |
| 545 | } |
565 | } |
| 546 | } label: { |
566 | } label: { |
| 547 | Image(systemName: "square.and.arrow.up") |
567 | Image(systemName: "square.and.arrow.up") |