mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-05 03:50:29 +01:00
fix: fit wide tables when printing, keep editor panes from collapsing, rename Upload to Select in Markdown to PDF
This commit is contained in:
@@ -840,7 +840,7 @@
|
||||
"subtitle": "اكتب أو الصق Markdown وصدّره كـ PDF منسق بشكل جميل.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "معاينة",
|
||||
"btnUpload": "رفع",
|
||||
"btnUpload": "اختيار",
|
||||
"btnSyncScroll": "مزامنة التمرير",
|
||||
"btnSettings": "الإعدادات",
|
||||
"btnExportPdf": "تصدير PDF",
|
||||
|
||||
@@ -842,7 +842,7 @@
|
||||
"subtitle": "Напісаць або ўставіць Markdown і экспартаваць яго ў прыгожа аформлены PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Папярэдні прагляд",
|
||||
"btnUpload": "Запампаваць",
|
||||
"btnUpload": "Выбраць",
|
||||
"btnSyncScroll": "Сінхранізацыя пракруткі",
|
||||
"btnSettings": "Налады",
|
||||
"btnExportPdf": "Экспартаваць PDF",
|
||||
|
||||
@@ -864,7 +864,7 @@
|
||||
"subtitle": "Escriu o enganxa Markdown i exporta'l com un PDF amb un format acurat.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Previsualització",
|
||||
"btnUpload": "Puja",
|
||||
"btnUpload": "Selecciona",
|
||||
"btnSyncScroll": "Sincronitza el desplaçament",
|
||||
"btnSettings": "Configuració",
|
||||
"btnExportPdf": "Exporta el PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Skriv eller indsæt Markdown og eksportér som en flot formateret PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Forhåndsvisning",
|
||||
"btnUpload": "Upload",
|
||||
"btnUpload": "Vælg",
|
||||
"btnSyncScroll": "Synkron rulning",
|
||||
"btnSettings": "Indstillinger",
|
||||
"btnExportPdf": "Eksportér PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Schreiben oder fügen Sie Markdown ein und exportieren Sie es als schön formatiertes PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Vorschau",
|
||||
"btnUpload": "Hochladen",
|
||||
"btnUpload": "Auswählen",
|
||||
"btnSyncScroll": "Sync-Scrollen",
|
||||
"btnSettings": "Einstellungen",
|
||||
"btnExportPdf": "PDF exportieren",
|
||||
|
||||
@@ -856,7 +856,7 @@
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnUpload": "Select",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Escribe o pega Markdown y expórtalo como un PDF bellamente formateado.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Vista Previa",
|
||||
"btnUpload": "Cargar",
|
||||
"btnUpload": "Seleccionar",
|
||||
"btnSyncScroll": "Sincronizar Desplazamiento",
|
||||
"btnSettings": "Configuración",
|
||||
"btnExportPdf": "Exportar PDF",
|
||||
|
||||
@@ -856,7 +856,7 @@
|
||||
"subtitle": "Markdown بنویسید یا بچسبانید و آن را بهصورت یک PDF زیبا برونریزی کنید.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "پیشنمایش",
|
||||
"btnUpload": "بارگذاری",
|
||||
"btnUpload": "انتخاب",
|
||||
"btnSyncScroll": "پیمایش همزمان",
|
||||
"btnSettings": "تنظیمات",
|
||||
"btnExportPdf": "برونریزی PDF",
|
||||
|
||||
@@ -855,7 +855,7 @@
|
||||
"subtitle": "Écrire ou coller du Markdown et l’exporter en PDF avec une mise en forme soignée.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Aperçu",
|
||||
"btnUpload": "Téléverser",
|
||||
"btnUpload": "Sélectionner",
|
||||
"btnSyncScroll": "Synchroniser le défilement",
|
||||
"btnSettings": "Paramètres",
|
||||
"btnExportPdf": "Exporter en PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Tulis atau tempel Markdown dan ekspor sebagai PDF yang diformat dengan indah.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Pratinjau",
|
||||
"btnUpload": "Unggah",
|
||||
"btnUpload": "Pilih",
|
||||
"btnSyncScroll": "Sinkron Gulir",
|
||||
"btnSettings": "Pengaturan",
|
||||
"btnExportPdf": "Ekspor PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Scrivi o incolla Markdown ed esportalo come un PDF ben formattato.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Anteprima",
|
||||
"btnUpload": "Carica",
|
||||
"btnUpload": "Seleziona",
|
||||
"btnSyncScroll": "Sincronizza scorrimento",
|
||||
"btnSettings": "Impostazioni",
|
||||
"btnExportPdf": "Esporta PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Markdownを記述または貼り付けて、見栄えの良いPDFとしてエクスポートします。",
|
||||
"paneMarkdown": "マークダウン",
|
||||
"panePreview": "プレビュー",
|
||||
"btnUpload": "アップロード",
|
||||
"btnUpload": "選択",
|
||||
"btnSyncScroll": "同期スクロール",
|
||||
"btnSettings": "設定",
|
||||
"btnExportPdf": "PDFをエクスポート",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Markdown을 작성하거나 붙여넣고 깔끔하게 서식이 적용된 PDF로 내보냅니다.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "미리보기",
|
||||
"btnUpload": "업로드",
|
||||
"btnUpload": "선택",
|
||||
"btnSyncScroll": "스크롤 동기화",
|
||||
"btnSettings": "설정",
|
||||
"btnExportPdf": "PDF 내보내기",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Schrijf of plak Markdown en zet het om in een opgemaakte PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Voorbeeld",
|
||||
"btnUpload": "Laden",
|
||||
"btnUpload": "Selecteren",
|
||||
"btnSyncScroll": "Synchroon bladeren",
|
||||
"btnSettings": "Instellingen",
|
||||
"btnExportPdf": "PDF exporteren",
|
||||
|
||||
@@ -677,7 +677,7 @@
|
||||
"subtitle": "Napisz lub wklej Markdown i wyeksportuj jako pięknie sformatowany PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Podgląd",
|
||||
"btnUpload": "Prześlij",
|
||||
"btnUpload": "Wybierz",
|
||||
"btnSyncScroll": "Zsynchronizowane przewijanie",
|
||||
"btnSettings": "Ustawienia",
|
||||
"btnExportPdf": "Eksportuj PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Escreva ou cole Markdown e exporte como um belo formato PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Pré-visualizar",
|
||||
"btnUpload": "Upload",
|
||||
"btnUpload": "Selecionar",
|
||||
"btnSyncScroll": "Sincronizar Scroll",
|
||||
"btnSettings": "Configurações",
|
||||
"btnExportPdf": "Exportar PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Написать или вставить Markdown, чтобы экспортировать его в виде отформатированного PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Предварительный просмотр",
|
||||
"btnUpload": "Загрузить",
|
||||
"btnUpload": "Выбрать",
|
||||
"btnSyncScroll": "Синхронизировать прокрутку",
|
||||
"btnSettings": "Настройки",
|
||||
"btnExportPdf": "Экспортировать PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Napíšte alebo vložte Markdown a exportujte ho ako krásne naformátované PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Náhľad",
|
||||
"btnUpload": "Nahrať",
|
||||
"btnUpload": "Vybrať",
|
||||
"btnSyncScroll": "Synchrónne posúvanie",
|
||||
"btnSettings": "Nastavenia",
|
||||
"btnExportPdf": "Exportovať PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Skriv eller klistra in Markdown och exportera som en vackert formaterad PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Förhandsvisning",
|
||||
"btnUpload": "Ladda upp",
|
||||
"btnUpload": "Välj",
|
||||
"btnSyncScroll": "Synkronisera scroll",
|
||||
"btnSettings": "Inställningar",
|
||||
"btnExportPdf": "Exportera PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnUpload": "Seç",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Напишіть або вставте Markdown і експортуйте його у красиво оформлений PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Попередній перегляд",
|
||||
"btnUpload": "Завантажити",
|
||||
"btnUpload": "Вибрати",
|
||||
"btnSyncScroll": "Синхронізувати прокрутку",
|
||||
"btnSettings": "Налаштування",
|
||||
"btnExportPdf": "Експортувати у PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "Viết hoặc dán Markdown và xuất nó thành PDF được định dạng đẹp.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Xem trước",
|
||||
"btnUpload": "Tải lên",
|
||||
"btnUpload": "Chọn",
|
||||
"btnSyncScroll": "Cuộn đồng bộ",
|
||||
"btnSettings": "Cài đặt",
|
||||
"btnExportPdf": "Xuất PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "編寫或貼上 Markdown 並匯出為精美格式的 PDF。",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "預覽",
|
||||
"btnUpload": "上傳",
|
||||
"btnUpload": "選擇",
|
||||
"btnSyncScroll": "同步捲動",
|
||||
"btnSettings": "設定",
|
||||
"btnExportPdf": "匯出 PDF",
|
||||
|
||||
@@ -840,7 +840,7 @@
|
||||
"subtitle": "编写或粘贴 Markdown 并将其导出为精美格式的 PDF。",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "预览",
|
||||
"btnUpload": "上传",
|
||||
"btnUpload": "选择",
|
||||
"btnSyncScroll": "同步滚动",
|
||||
"btnSettings": "设置",
|
||||
"btnExportPdf": "导出 PDF",
|
||||
|
||||
+36
-11
@@ -115,7 +115,7 @@
|
||||
/* Split View Container */
|
||||
.md-editor-main {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
||||
gap: 1rem;
|
||||
height: 600px;
|
||||
border: 1px solid rgb(55, 65, 81);
|
||||
@@ -127,6 +127,7 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
min-width: 0;
|
||||
background: rgb(31, 41, 55);
|
||||
}
|
||||
|
||||
@@ -284,6 +285,22 @@
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
.md-editor-preview ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
|
||||
.md-editor-preview ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
|
||||
.md-editor-preview ul ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
|
||||
.md-editor-preview ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
.md-editor-preview li {
|
||||
margin: 0.25em 0;
|
||||
}
|
||||
@@ -559,7 +576,6 @@
|
||||
|
||||
/* Print Styles */
|
||||
@media print {
|
||||
|
||||
/* Reset all backgrounds, margins, and padding */
|
||||
html,
|
||||
body {
|
||||
@@ -584,10 +600,10 @@
|
||||
nav,
|
||||
footer,
|
||||
#back-to-tools,
|
||||
.bg-gray-800>h1.text-2xl,
|
||||
.bg-gray-800>p.text-gray-400,
|
||||
#markdown-editor-container~h1,
|
||||
#markdown-editor-container~p {
|
||||
.bg-gray-800 > h1.text-2xl,
|
||||
.bg-gray-800 > p.text-gray-400,
|
||||
#markdown-editor-container ~ h1,
|
||||
#markdown-editor-container ~ p {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@@ -600,7 +616,7 @@
|
||||
.py-8,
|
||||
.px-4,
|
||||
#markdown-editor-container,
|
||||
[class*="container"] {
|
||||
[class*='container'] {
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
background: white !important;
|
||||
@@ -646,6 +662,7 @@
|
||||
background: white !important;
|
||||
color: black !important;
|
||||
padding: 0 !important;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.md-editor-preview h1,
|
||||
@@ -658,8 +675,8 @@
|
||||
page-break-after: avoid;
|
||||
}
|
||||
|
||||
.md-editor-preview>h1:first-child,
|
||||
.md-editor-preview>*:first-child {
|
||||
.md-editor-preview > h1:first-child,
|
||||
.md-editor-preview > *:first-child {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
@@ -682,10 +699,13 @@
|
||||
background: #f6f8fa !important;
|
||||
border: 1px solid #e1e4e8 !important;
|
||||
page-break-inside: avoid;
|
||||
white-space: pre-wrap !important;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.md-editor-preview pre code {
|
||||
color: #24292e !important;
|
||||
white-space: pre-wrap !important;
|
||||
}
|
||||
|
||||
.md-editor-preview blockquote {
|
||||
@@ -697,6 +717,11 @@
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.md-editor-preview table.md-table-break-anywhere th,
|
||||
.md-editor-preview table.md-table-break-anywhere td {
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.md-editor-preview th,
|
||||
.md-editor-preview td {
|
||||
border-color: #e1e4e8 !important;
|
||||
@@ -750,7 +775,7 @@
|
||||
}
|
||||
|
||||
.md-editor-main {
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
height: auto;
|
||||
gap: 0;
|
||||
}
|
||||
@@ -814,4 +839,4 @@
|
||||
.md-editor-actions {
|
||||
gap: 0.375rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,9 @@ export interface MarkdownEditorOptions {
|
||||
|
||||
export type { MarkdownItOptions } from '@/types';
|
||||
|
||||
const MIN_TABLE_ZOOM = 0.6;
|
||||
const TABLE_BREAK_CLASS = 'md-table-break-anywhere';
|
||||
|
||||
const DEFAULT_MARKDOWN = `# Welcome to BentoPDF Markdown Editor
|
||||
|
||||
This is a **live preview** markdown editor with full plugin support.
|
||||
@@ -342,7 +345,7 @@ export class MarkdownEditor {
|
||||
<input type="file" accept=".md,.markdown,.txt" id="mdFileInput" style="display: none;" />
|
||||
<button class="md-editor-btn md-editor-btn-secondary" id="mdUpload">
|
||||
<i data-lucide="upload"></i>
|
||||
<span data-i18n="tools:markdownToPdf.btnUpload">Upload</span>
|
||||
<span data-i18n="tools:markdownToPdf.btnUpload">Select</span>
|
||||
</button>
|
||||
<div class="theme-toggle">
|
||||
<i data-lucide="moon" width="16" height="16"></i>
|
||||
@@ -439,6 +442,13 @@ export class MarkdownEditor {
|
||||
this.updatePreview();
|
||||
});
|
||||
|
||||
window
|
||||
.matchMedia('print')
|
||||
.addEventListener('change', (event) =>
|
||||
this.fitTablesToPage(event.matches)
|
||||
);
|
||||
window.addEventListener('afterprint', () => this.fitTablesToPage(false));
|
||||
|
||||
// Sync scroll
|
||||
const syncScrollBtn = document.getElementById('mdSyncScroll');
|
||||
syncScrollBtn?.addEventListener('click', () => {
|
||||
@@ -752,6 +762,26 @@ export class MarkdownEditor {
|
||||
});
|
||||
}
|
||||
|
||||
private fitTablesToPage(printing: boolean): void {
|
||||
if (!this.preview) return;
|
||||
const available = this.preview.clientWidth;
|
||||
for (const table of this.preview.querySelectorAll('table')) {
|
||||
table.style.zoom = '';
|
||||
table.classList.remove(TABLE_BREAK_CLASS);
|
||||
if (!printing || table.scrollWidth <= available) continue;
|
||||
if (available / table.scrollWidth < MIN_TABLE_ZOOM) {
|
||||
table.classList.add(TABLE_BREAK_CLASS);
|
||||
}
|
||||
let zoom = 1;
|
||||
for (let attempt = 0; attempt < 5; attempt++) {
|
||||
const width = table.getBoundingClientRect().width;
|
||||
if (width <= available) break;
|
||||
zoom = Math.floor(((zoom * available) / width) * 100) / 100;
|
||||
table.style.zoom = String(zoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private exportPdf(): void {
|
||||
// Use browser's native print functionality
|
||||
window.print();
|
||||
|
||||
Reference in New Issue
Block a user