Update version to 1.6.2 and enhance navigation links across HTML pages
- Updated version number in package-lock.json and relevant HTML files. - Changed navigation links to point to the root path for consistency. - Improved code formatting and structure in various JavaScript and HTML files for better readability.
This commit is contained in:
@@ -594,7 +594,7 @@
|
|||||||
© 2025 BentoPDF. All rights reserved.
|
© 2025 BentoPDF. All rights reserved.
|
||||||
</p>
|
</p>
|
||||||
<p class="text-gray-500 text-xs mt-2">
|
<p class="text-gray-500 text-xs mt-2">
|
||||||
Version <span id="app-version">1.5.0</span>
|
Version <span id="app-version">1.6.2</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "bento-pdf",
|
"name": "bento-pdf",
|
||||||
"version": "1.2.0",
|
"version": "1.6.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bento-pdf",
|
"name": "bento-pdf",
|
||||||
"version": "1.2.0",
|
"version": "1.6.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource/cedarville-cursive": "^5.2.7",
|
"@fontsource/cedarville-cursive": "^5.2.7",
|
||||||
|
|||||||
@@ -654,6 +654,9 @@ const fileDisplayArea = document.getElementById(
|
|||||||
const backToToolsBtn = document.getElementById(
|
const backToToolsBtn = document.getElementById(
|
||||||
'back-to-tools'
|
'back-to-tools'
|
||||||
) as HTMLButtonElement;
|
) as HTMLButtonElement;
|
||||||
|
const closeBtn = document.getElementById(
|
||||||
|
'back-btn'
|
||||||
|
) as HTMLButtonElement;
|
||||||
const canvas = document.getElementById('pdf-canvas');
|
const canvas = document.getElementById('pdf-canvas');
|
||||||
const ctx = canvas.getContext('2d');
|
const ctx = canvas.getContext('2d');
|
||||||
const pageIndicator = document.getElementById('page-indicator');
|
const pageIndicator = document.getElementById('page-indicator');
|
||||||
@@ -2078,7 +2081,13 @@ async function extractExistingBookmarks(doc) {
|
|||||||
// Back to tools button
|
// Back to tools button
|
||||||
if (backToToolsBtn) {
|
if (backToToolsBtn) {
|
||||||
backToToolsBtn.addEventListener('click', () => {
|
backToToolsBtn.addEventListener('click', () => {
|
||||||
window.location.href = '../../index.html#tools-header';
|
window.location.href = '/';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (closeBtn) {
|
||||||
|
closeBtn.addEventListener('click', () => {
|
||||||
|
window.location.href = '/';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ function showStatus(
|
|||||||
type: 'success' | 'error' | 'info' = 'info'
|
type: 'success' | 'error' | 'info' = 'info'
|
||||||
) {
|
) {
|
||||||
statusMessage.textContent = message
|
statusMessage.textContent = message
|
||||||
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${
|
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
|
||||||
type === 'success'
|
|
||||||
? 'bg-green-900 text-green-200'
|
? 'bg-green-900 text-green-200'
|
||||||
: type === 'error'
|
: type === 'error'
|
||||||
? 'bg-red-900 text-red-200'
|
? 'bg-red-900 text-red-200'
|
||||||
@@ -148,7 +147,7 @@ worker.onmessage = async (e: MessageEvent) => {
|
|||||||
|
|
||||||
if (backToToolsBtn) {
|
if (backToToolsBtn) {
|
||||||
backToToolsBtn.addEventListener('click', () => {
|
backToToolsBtn.addEventListener('click', () => {
|
||||||
window.location.href = '../../index.html#tools-header'
|
window.location.href = '/'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ let currentPdfDocs: PDFLibDocument[] = [];
|
|||||||
let splitMarkers: Set<number> = new Set();
|
let splitMarkers: Set<number> = new Set();
|
||||||
let isRendering = false;
|
let isRendering = false;
|
||||||
let renderCancelled = false;
|
let renderCancelled = false;
|
||||||
|
let sortableInstance: Sortable | null = null;
|
||||||
|
|
||||||
const pageCanvasCache = new Map<string, HTMLCanvasElement>();
|
const pageCanvasCache = new Map<string, HTMLCanvasElement>();
|
||||||
|
|
||||||
@@ -114,7 +115,7 @@ function initializeTool() {
|
|||||||
createIcons({ icons });
|
createIcons({ icons });
|
||||||
|
|
||||||
document.getElementById('close-tool-btn')?.addEventListener('click', () => {
|
document.getElementById('close-tool-btn')?.addEventListener('click', () => {
|
||||||
window.location.href = '../../index.html';
|
window.location.href = '/';
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => {
|
document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => {
|
||||||
@@ -247,6 +248,13 @@ function resetAll() {
|
|||||||
pageCanvasCache.clear();
|
pageCanvasCache.clear();
|
||||||
renderCancelled = false;
|
renderCancelled = false;
|
||||||
isRendering = false;
|
isRendering = false;
|
||||||
|
|
||||||
|
// Destroy sortable instance
|
||||||
|
if (sortableInstance) {
|
||||||
|
sortableInstance.destroy();
|
||||||
|
sortableInstance = null;
|
||||||
|
}
|
||||||
|
|
||||||
updatePageDisplay();
|
updatePageDisplay();
|
||||||
document.getElementById('upload-area')?.classList.remove('hidden');
|
document.getElementById('upload-area')?.classList.remove('hidden');
|
||||||
}
|
}
|
||||||
@@ -492,9 +500,18 @@ function setupSortable() {
|
|||||||
const pagesContainer = document.getElementById('pages-container');
|
const pagesContainer = document.getElementById('pages-container');
|
||||||
if (!pagesContainer) return;
|
if (!pagesContainer) return;
|
||||||
|
|
||||||
Sortable.create(pagesContainer, {
|
// Destroy existing instance before creating new one
|
||||||
|
if (sortableInstance) {
|
||||||
|
sortableInstance.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
sortableInstance = Sortable.create(pagesContainer, {
|
||||||
animation: 150,
|
animation: 150,
|
||||||
handle: '.cursor-move',
|
forceFallback: true,
|
||||||
|
touchStartThreshold: 3,
|
||||||
|
fallbackTolerance: 3,
|
||||||
|
delay: 200,
|
||||||
|
delayOnTouchOnly: true,
|
||||||
onEnd: (evt) => {
|
onEnd: (evt) => {
|
||||||
const oldIndex = evt.oldIndex!;
|
const oldIndex = evt.oldIndex!;
|
||||||
const newIndex = evt.newIndex!;
|
const newIndex = evt.newIndex!;
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ function showStatus(
|
|||||||
type: 'success' | 'error' | 'info' = 'info'
|
type: 'success' | 'error' | 'info' = 'info'
|
||||||
) {
|
) {
|
||||||
statusMessage.textContent = message
|
statusMessage.textContent = message
|
||||||
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${
|
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
|
||||||
type === 'success'
|
|
||||||
? 'bg-green-900 text-green-200'
|
? 'bg-green-900 text-green-200'
|
||||||
: type === 'error'
|
: type === 'error'
|
||||||
? 'bg-red-900 text-red-200'
|
? 'bg-red-900 text-red-200'
|
||||||
@@ -144,7 +143,7 @@ worker.onmessage = async (e: MessageEvent) => {
|
|||||||
|
|
||||||
if (backToToolsBtn) {
|
if (backToToolsBtn) {
|
||||||
backToToolsBtn.addEventListener('click', () => {
|
backToToolsBtn.addEventListener('click', () => {
|
||||||
window.location.href = '../../index.html#tools-header'
|
window.location.href = '/'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,8 +53,7 @@ function showStatus(
|
|||||||
type: 'success' | 'error' | 'info' = 'info'
|
type: 'success' | 'error' | 'info' = 'info'
|
||||||
) {
|
) {
|
||||||
statusMessage.textContent = message;
|
statusMessage.textContent = message;
|
||||||
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${
|
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
|
||||||
type === 'success'
|
|
||||||
? 'bg-green-900 text-green-200'
|
? 'bg-green-900 text-green-200'
|
||||||
: type === 'error'
|
: type === 'error'
|
||||||
? 'bg-red-900 text-red-200'
|
? 'bg-red-900 text-red-200'
|
||||||
@@ -198,7 +197,7 @@ worker.onerror = (error) => {
|
|||||||
|
|
||||||
if (backToToolsBtn) {
|
if (backToToolsBtn) {
|
||||||
backToToolsBtn.addEventListener('click', () => {
|
backToToolsBtn.addEventListener('click', () => {
|
||||||
window.location.href = '../../index.html#tools-header';
|
window.location.href = '/';
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ const init = () => {
|
|||||||
© 2025 BentoPDF. All rights reserved.
|
© 2025 BentoPDF. All rights reserved.
|
||||||
</p>
|
</p>
|
||||||
<p class="text-gray-500 text-xs mt-2">
|
<p class="text-gray-500 text-xs mt-2">
|
||||||
Version <span id="app-version-simple">1.6.0</span>
|
Version <span id="app-version-simple">1.6.2</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -1,26 +1,21 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
|
||||||
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Advanced PDF Bookmark Tool - BentoPDF</title>
|
<title>Advanced PDF Bookmark Tool - BentoPDF</title>
|
||||||
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
||||||
<link href="../../src/css/styles.css" rel="stylesheet" />
|
<link href="../../src/css/styles.css" rel="stylesheet" />
|
||||||
<link href="../../src/css/bookmark.css" rel="stylesheet" />
|
<link href="../../src/css/bookmark.css" rel="stylesheet" />
|
||||||
</head>
|
</head>
|
||||||
<body class="antialiased bg-gray-900">
|
|
||||||
|
<body class="antialiased bg-gray-900">
|
||||||
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="flex justify-between items-center h-16">
|
<div class="flex justify-between items-center h-16">
|
||||||
<div
|
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
||||||
class="flex-shrink-0 flex items-center cursor-pointer"
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
||||||
id="home-logo"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="../../public/images/favicon.svg"
|
|
||||||
alt="Bento PDF Logo"
|
|
||||||
class="h-8 w-8"
|
|
||||||
/>
|
|
||||||
<span class="text-white font-bold text-xl ml-2">
|
<span class="text-white font-bold text-xl ml-2">
|
||||||
<a href="index.html">BentoPDF</a>
|
<a href="index.html">BentoPDF</a>
|
||||||
</span>
|
</span>
|
||||||
@@ -36,47 +31,19 @@
|
|||||||
|
|
||||||
<!-- Mobile Hamburger Button -->
|
<!-- Mobile Hamburger Button -->
|
||||||
<div class="md:hidden flex items-center">
|
<div class="md:hidden flex items-center">
|
||||||
<button
|
<button id="mobile-menu-button" type="button"
|
||||||
id="mobile-menu-button"
|
|
||||||
type="button"
|
|
||||||
class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500 transition-colors"
|
class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500 transition-colors"
|
||||||
aria-controls="mobile-menu"
|
aria-controls="mobile-menu" aria-expanded="false">
|
||||||
aria-expanded="false"
|
|
||||||
>
|
|
||||||
<span class="sr-only">Open main menu</span>
|
<span class="sr-only">Open main menu</span>
|
||||||
<!-- Hamburger Icon -->
|
<!-- Hamburger Icon -->
|
||||||
<svg
|
<svg id="menu-icon" class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
|
||||||
id="menu-icon"
|
stroke="currentColor" aria-hidden="true">
|
||||||
class="block h-6 w-6"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M4 6h16M4 12h16M4 18h16"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
<!-- Close Icon -->
|
<!-- Close Icon -->
|
||||||
<svg
|
<svg id="close-icon" class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none"
|
||||||
id="close-icon"
|
viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
||||||
class="hidden h-6 w-6"
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke-width="2"
|
|
||||||
d="M6 18L18 6M6 6l12 12"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -84,31 +51,19 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile Menu Dropdown -->
|
<!-- Mobile Menu Dropdown -->
|
||||||
<div
|
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
||||||
id="mobile-menu"
|
|
||||||
class="hidden md:hidden bg-gray-800 border-t border-gray-700"
|
|
||||||
>
|
|
||||||
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
||||||
<a href="index.html" class="mobile-nav-link">Home</a>
|
<a href="index.html" class="mobile-nav-link">Home</a>
|
||||||
<a href="./about.html" class="mobile-nav-link">About</a>
|
<a href="./about.html" class="mobile-nav-link">About</a>
|
||||||
<a href="./contact.html" class="mobile-nav-link">Contact</a>
|
<a href="./contact.html" class="mobile-nav-link">Contact</a>
|
||||||
<a href="index.html#tools-header" class="mobile-nav-link"
|
<a href="index.html#tools-header" class="mobile-nav-link">All Tools</a>
|
||||||
>All Tools</a
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<div
|
<div id="uploader" class="min-h-screen flex items-center justify-center p-4 bg-gray-900">
|
||||||
id="uploader"
|
<div class="bg-gray-800 rounded-xl shadow-xl p-8 max-w-md w-full text-gray-200 border border-gray-700">
|
||||||
class="min-h-screen flex items-center justify-center p-4 bg-gray-900"
|
<button id="back-to-tools"
|
||||||
>
|
class="flex items-center gap-2 text-indigo-400 hover:text-indigo-300 mb-6 font-semibold">
|
||||||
<div
|
|
||||||
class="bg-gray-800 rounded-xl shadow-xl p-8 max-w-md w-full text-gray-200 border border-gray-700"
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
id="back-to-tools"
|
|
||||||
class="flex items-center gap-2 text-indigo-400 hover:text-indigo-300 mb-6 font-semibold"
|
|
||||||
>
|
|
||||||
<i data-lucide="arrow-left" class="cursor-pointer"></i>
|
<i data-lucide="arrow-left" class="cursor-pointer"></i>
|
||||||
<span class="cursor-pointer"> Back to Tools </span>
|
<span class="cursor-pointer"> Back to Tools </span>
|
||||||
</button>
|
</button>
|
||||||
@@ -117,15 +72,10 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- Drop Zone for Main PDF Upload -->
|
<!-- Drop Zone for Main PDF Upload -->
|
||||||
<div
|
<div id="drop-zone"
|
||||||
id="drop-zone"
|
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
|
||||||
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300"
|
|
||||||
>
|
|
||||||
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
||||||
<i
|
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
|
||||||
data-lucide="upload-cloud"
|
|
||||||
class="w-10 h-10 mb-3 text-gray-400"
|
|
||||||
></i>
|
|
||||||
<p class="mb-2 text-sm text-gray-300">
|
<p class="mb-2 text-sm text-gray-300">
|
||||||
<span class="font-semibold">Click to select a file</span> or drag
|
<span class="font-semibold">Click to select a file</span> or drag
|
||||||
and drop
|
and drop
|
||||||
@@ -135,12 +85,8 @@
|
|||||||
Your files never leave your device.
|
Your files never leave your device.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input type="file" id="file-input" accept=".pdf"
|
||||||
type="file"
|
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
|
||||||
id="file-input"
|
|
||||||
accept=".pdf"
|
|
||||||
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- File Display Area -->
|
<!-- File Display Area -->
|
||||||
@@ -149,11 +95,7 @@
|
|||||||
<!-- Auto Extract Checkbox -->
|
<!-- Auto Extract Checkbox -->
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<label class="flex items-center gap-2 text-sm text-gray-300">
|
<label class="flex items-center gap-2 text-sm text-gray-300">
|
||||||
<input
|
<input type="checkbox" id="auto-extract-checkbox" class="w-4 h-4 accent-blue-500" />
|
||||||
type="checkbox"
|
|
||||||
id="auto-extract-checkbox"
|
|
||||||
class="w-4 h-4 accent-blue-500"
|
|
||||||
/>
|
|
||||||
<span>Auto-extract existing bookmarks</span>
|
<span>Auto-extract existing bookmarks</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -166,12 +108,9 @@
|
|||||||
|
|
||||||
<!-- CSV Upload -->
|
<!-- CSV Upload -->
|
||||||
<label class="block mb-4">
|
<label class="block mb-4">
|
||||||
<span class="text-xs text-gray-500"
|
<span class="text-xs text-gray-500">CSV format: title,page,level</span>
|
||||||
>CSV format: title,page,level</span
|
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300"
|
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300">
|
||||||
>
|
|
||||||
<div class="flex flex-col items-center justify-center pt-4 pb-4">
|
<div class="flex flex-col items-center justify-center pt-4 pb-4">
|
||||||
<i data-lucide="sheet" class="w-8 h-8 mb-2 text-gray-400"></i>
|
<i data-lucide="sheet" class="w-8 h-8 mb-2 text-gray-400"></i>
|
||||||
<p class="text-xs text-gray-400">
|
<p class="text-xs text-gray-400">
|
||||||
@@ -179,12 +118,8 @@
|
|||||||
here
|
here
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input type="file" id="csv-input" accept=".csv"
|
||||||
type="file"
|
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
|
||||||
id="csv-input"
|
|
||||||
accept=".csv"
|
|
||||||
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
@@ -192,8 +127,7 @@
|
|||||||
<label class="block">
|
<label class="block">
|
||||||
<span class="text-xs text-gray-500">JSON format</span>
|
<span class="text-xs text-gray-500">JSON format</span>
|
||||||
<div
|
<div
|
||||||
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300"
|
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300">
|
||||||
>
|
|
||||||
<div class="flex flex-col items-center justify-center pt-4 pb-4">
|
<div class="flex flex-col items-center justify-center pt-4 pb-4">
|
||||||
<i data-lucide="braces" class="w-8 h-8 mb-2 text-gray-400"></i>
|
<i data-lucide="braces" class="w-8 h-8 mb-2 text-gray-400"></i>
|
||||||
<p class="text-xs text-gray-400">
|
<p class="text-xs text-gray-400">
|
||||||
@@ -201,12 +135,8 @@
|
|||||||
drag here
|
drag here
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input type="file" id="json-input" accept=".json"
|
||||||
type="file"
|
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
|
||||||
id="json-input"
|
|
||||||
accept=".json"
|
|
||||||
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@@ -214,41 +144,36 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="app" class="hidden bg-gray-900 min-h-screen">
|
<div id="app" class="hidden bg-gray-900 min-h-screen">
|
||||||
<header
|
<header class="bg-gray-800 border-b border-gray-700 shadow-sm sticky top-0 z-50">
|
||||||
class="bg-gray-800 border-b border-gray-700 shadow-sm sticky top-0 z-50"
|
|
||||||
>
|
|
||||||
<div class="max-w-7xl mx-auto px-4 py-3">
|
<div class="max-w-7xl mx-auto px-4 py-3">
|
||||||
<div class="flex items-center justify-between flex-wrap gap-2">
|
<div class="flex items-center justify-between flex-wrap gap-2">
|
||||||
<h1 class="text-xl font-bold text-white" id="filename-display">
|
<h1 class="text-xl font-bold text-white" id="filename-display">
|
||||||
PDF Bookmark Editor
|
PDF Bookmark Editor
|
||||||
</h1>
|
</h1>
|
||||||
<div class="flex gap-2 flex-wrap">
|
<div class="flex gap-2 flex-wrap">
|
||||||
<button
|
<button id="undo-btn"
|
||||||
id="undo-btn"
|
|
||||||
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
|
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
|
||||||
disabled
|
disabled>
|
||||||
>
|
|
||||||
<i data-lucide="undo-2" class="w-4 h-4"></i> Undo
|
<i data-lucide="undo-2" class="w-4 h-4"></i> Undo
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="redo-btn"
|
||||||
id="redo-btn"
|
|
||||||
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
|
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
|
||||||
disabled
|
disabled>
|
||||||
>
|
|
||||||
<i data-lucide="redo-2" class="w-4 h-4"></i> Redo
|
<i data-lucide="redo-2" class="w-4 h-4"></i> Redo
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="delete-all-btn"
|
||||||
id="delete-all-btn"
|
class="px-3 py-2 text-sm bg-red-600 hover:bg-red-700 text-white rounded flex items-center gap-1">
|
||||||
class="px-3 py-2 text-sm bg-red-600 hover:bg-red-700 text-white rounded flex items-center gap-1"
|
|
||||||
>
|
|
||||||
<i data-lucide="trash-2" class="w-4 h-4"></i> Delete All
|
<i data-lucide="trash-2" class="w-4 h-4"></i> Delete All
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="reset-btn"
|
||||||
id="reset-btn"
|
class="px-3 py-2 text-sm bg-orange-600 hover:bg-orange-700 text-white rounded flex items-center gap-1">
|
||||||
class="px-3 py-2 text-sm bg-orange-600 hover:bg-orange-700 text-white rounded flex items-center gap-1"
|
|
||||||
>
|
|
||||||
<i data-lucide="rotate-ccw" class="w-4 h-4"></i> Reset
|
<i data-lucide="rotate-ccw" class="w-4 h-4"></i> Reset
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button id="back-btn"
|
||||||
|
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded flex items-center gap-1">
|
||||||
|
<i data-lucide="arrow-left" class="w-4 h-4"></i> Back to Tools
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -256,16 +181,10 @@
|
|||||||
|
|
||||||
<div class="lg:hidden bg-gray-800 border-b border-gray-700">
|
<div class="lg:hidden bg-gray-800 border-b border-gray-700">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<button
|
<button id="show-viewer-btn" class="flex-1 py-3 text-sm font-medium bg-indigo-600 text-white">
|
||||||
id="show-viewer-btn"
|
|
||||||
class="flex-1 py-3 text-sm font-medium bg-indigo-600 text-white"
|
|
||||||
>
|
|
||||||
PDF Viewer
|
PDF Viewer
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="show-bookmarks-btn" class="flex-1 py-3 text-sm font-medium text-gray-300 hover:text-white">
|
||||||
id="show-bookmarks-btn"
|
|
||||||
class="flex-1 py-3 text-sm font-medium text-gray-300 hover:text-white"
|
|
||||||
>
|
|
||||||
Bookmarks
|
Bookmarks
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -275,194 +194,113 @@
|
|||||||
<div class="flex flex-col lg:flex-row gap-4">
|
<div class="flex flex-col lg:flex-row gap-4">
|
||||||
<div id="viewer-section" class="w-full lg:w-[50%] flex-shrink-0">
|
<div id="viewer-section" class="w-full lg:w-[50%] flex-shrink-0">
|
||||||
<div class="bg-white rounded-lg shadow-lg p-4">
|
<div class="bg-white rounded-lg shadow-lg p-4">
|
||||||
<div
|
<div class="flex flex-wrap items-center justify-between gap-2 mb-4">
|
||||||
class="flex flex-wrap items-center justify-between gap-2 mb-4"
|
|
||||||
>
|
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<button
|
<button id="prev-page" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm">
|
||||||
id="prev-page"
|
<i data-lucide="chevron-left" class="w-5 h-5 text-blue-600"></i>
|
||||||
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
|
||||||
>
|
|
||||||
←
|
|
||||||
</button>
|
</button>
|
||||||
<span
|
<span id="page-indicator" class="text-sm font-medium text-gray-700 whitespace-nowrap">Page 1 / 1</span>
|
||||||
id="page-indicator"
|
<button id="next-page" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm">
|
||||||
class="text-sm font-medium text-gray-700 whitespace-nowrap"
|
<i data-lucide="chevron-right" class="w-5 h-5 text-blue-600"></i>
|
||||||
>Page 1 / 1</span
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
id="next-page"
|
|
||||||
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
|
||||||
>
|
|
||||||
→
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="text-sm text-gray-600">Go to:</span>
|
<span class="text-sm text-gray-600">Go to:</span>
|
||||||
<input
|
<input type="number" id="goto-page" min="1"
|
||||||
type="number"
|
class="w-16 px-2 py-1 border border-gray-300 rounded text-sm" />
|
||||||
id="goto-page"
|
<button id="goto-btn" class="px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded text-sm">
|
||||||
min="1"
|
|
||||||
class="w-16 px-2 py-1 border border-gray-300 rounded text-sm"
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
id="goto-btn"
|
|
||||||
class="px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded text-sm"
|
|
||||||
>
|
|
||||||
Go
|
Go
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<button
|
<button id="zoom-out-btn" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
||||||
id="zoom-out-btn"
|
title="Zoom Out">
|
||||||
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
<i data-lucide="minus" class="w-5 h-5 text-blue-600"></i>
|
||||||
title="Zoom Out"
|
|
||||||
>
|
|
||||||
−
|
|
||||||
</button>
|
</button>
|
||||||
<span
|
<span id="zoom-indicator"
|
||||||
id="zoom-indicator"
|
class="text-sm font-medium text-gray-700 whitespace-nowrap min-w-[60px] text-center">100%</span>
|
||||||
class="text-sm font-medium text-gray-700 whitespace-nowrap min-w-[60px] text-center"
|
<button id="zoom-in-btn" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
||||||
>100%</span
|
title="Zoom In">
|
||||||
>
|
<i data-lucide="plus" class="w-5 h-5 text-blue-600"></i>
|
||||||
<button
|
|
||||||
id="zoom-in-btn"
|
|
||||||
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
|
||||||
title="Zoom In"
|
|
||||||
>
|
|
||||||
+
|
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="zoom-fit-btn" class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
||||||
id="zoom-fit-btn"
|
title="Fit to Width">
|
||||||
class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded text-sm"
|
|
||||||
title="Fit to Width"
|
|
||||||
>
|
|
||||||
Fit
|
Fit
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div id="picking-mode-banner" class="hidden mb-4 p-3 bg-blue-100 border-2 border-blue-400 rounded-lg">
|
||||||
id="picking-mode-banner"
|
|
||||||
class="hidden mb-4 p-3 bg-blue-100 border-2 border-blue-400 rounded-lg"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<i
|
<i data-lucide="crosshair" class="w-5 h-5 text-blue-600"></i>
|
||||||
data-lucide="crosshair"
|
<span class="text-sm font-medium text-blue-800">Click on the PDF to set bookmark destination</span>
|
||||||
class="w-5 h-5 text-blue-600"
|
|
||||||
></i>
|
|
||||||
<span class="text-sm font-medium text-blue-800"
|
|
||||||
>Click on the PDF to set bookmark destination</span
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button id="cancel-picking-btn"
|
||||||
id="cancel-picking-btn"
|
class="px-3 py-1 bg-red-500 hover:bg-red-600 text-white rounded text-xs">
|
||||||
class="px-3 py-1 bg-red-500 hover:bg-red-600 text-white rounded text-xs"
|
|
||||||
>
|
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div class="overflow-auto border border-gray-200 rounded" id="canvas-container">
|
||||||
class="overflow-auto border border-gray-200 rounded"
|
|
||||||
id="canvas-container"
|
|
||||||
>
|
|
||||||
<div class="pdf-canvas-wrapper" id="pdf-canvas-wrapper">
|
<div class="pdf-canvas-wrapper" id="pdf-canvas-wrapper">
|
||||||
<canvas
|
<canvas id="pdf-canvas" class="max-w-full h-auto mx-auto"></canvas>
|
||||||
id="pdf-canvas"
|
|
||||||
class="max-w-full h-auto mx-auto"
|
|
||||||
></canvas>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div id="bookmarks-section" class="hidden lg:block w-full lg:w-[50%] flex-shrink-0">
|
||||||
id="bookmarks-section"
|
|
||||||
class="hidden lg:block w-full lg:w-[50%] flex-shrink-0"
|
|
||||||
>
|
|
||||||
<div class="bg-white rounded-lg shadow-lg p-4">
|
<div class="bg-white rounded-lg shadow-lg p-4">
|
||||||
<h3 class="text-lg font-bold text-gray-800 mb-4">Bookmarks</h3>
|
<h3 class="text-lg font-bold text-gray-800 mb-4">Bookmarks</h3>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<i
|
<i data-lucide="search"
|
||||||
data-lucide="search"
|
class="absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"></i>
|
||||||
class="absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"
|
<input type="text" id="search-bookmarks" placeholder="Search bookmarks..."
|
||||||
></i>
|
class="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-sm" />
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
id="search-bookmarks"
|
|
||||||
placeholder="Search bookmarks..."
|
|
||||||
class="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-sm"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-4 p-3 bg-gray-50 rounded-lg">
|
<div class="mb-4 p-3 bg-gray-50 rounded-lg">
|
||||||
<input
|
<input type="text" id="bookmark-title" placeholder="Bookmark title..."
|
||||||
type="text"
|
class="w-full px-3 py-2 border border-gray-300 rounded-lg mb-2 text-sm" />
|
||||||
id="bookmark-title"
|
<button id="add-top-level-btn"
|
||||||
placeholder="Bookmark title..."
|
class="w-full px-3 py-2 bg-gradient-to-b from-blue-500 to-blue-600 hover:shadow-xl text-white rounded text-sm font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200">
|
||||||
class="w-full px-3 py-2 border border-gray-300 rounded-lg mb-2 text-sm"
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
id="add-top-level-btn"
|
|
||||||
class="w-full px-3 py-2 bg-gradient-to-b from-blue-500 to-blue-600 hover:shadow-xl text-white rounded text-sm font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200"
|
|
||||||
>
|
|
||||||
<i data-lucide="plus" class="w-4 h-4"></i>
|
<i data-lucide="plus" class="w-4 h-4"></i>
|
||||||
<span
|
<span>Add to Page <span id="current-page-display">1</span></span>
|
||||||
>Add to Page <span id="current-page-display">1</span></span
|
|
||||||
>
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label
|
<label class="flex items-center gap-2 text-sm font-medium text-gray-700 mb-2">
|
||||||
class="flex items-center gap-2 text-sm font-medium text-gray-700 mb-2"
|
<input type="checkbox" id="batch-mode-checkbox" class="w-4 h-4" />
|
||||||
>
|
<span>Batch Mode (<span id="selected-count">0</span>
|
||||||
<input
|
selected)</span>
|
||||||
type="checkbox"
|
|
||||||
id="batch-mode-checkbox"
|
|
||||||
class="w-4 h-4"
|
|
||||||
/>
|
|
||||||
<span
|
|
||||||
>Batch Mode (<span id="selected-count">0</span>
|
|
||||||
selected)</span
|
|
||||||
>
|
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div
|
<div id="batch-operations" class="hidden p-3 bg-blue-50 rounded-lg border border-blue-200">
|
||||||
id="batch-operations"
|
|
||||||
class="hidden p-3 bg-blue-50 rounded-lg border border-blue-200"
|
|
||||||
>
|
|
||||||
<div class="text-xs font-semibold text-gray-700 mb-2">
|
<div class="text-xs font-semibold text-gray-700 mb-2">
|
||||||
Batch Operations
|
Batch Operations
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-2">
|
<div class="flex flex-col gap-2">
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<button
|
<button id="select-all-btn"
|
||||||
id="select-all-btn"
|
class="flex-1 px-3 py-2 bg-blue-500 hover:bg-blue-600 text-white rounded text-xs flex items-center justify-center gap-1">
|
||||||
class="flex-1 px-3 py-2 bg-blue-500 hover:bg-blue-600 text-white rounded text-xs flex items-center justify-center gap-1"
|
|
||||||
>
|
|
||||||
<i data-lucide="check-square" class="w-3 h-3"></i>
|
<i data-lucide="check-square" class="w-3 h-3"></i>
|
||||||
Select All
|
Select All
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="deselect-all-btn"
|
||||||
id="deselect-all-btn"
|
class="flex-1 px-3 py-2 bg-gray-500 hover:bg-gray-600 text-white rounded text-xs flex items-center justify-center gap-1">
|
||||||
class="flex-1 px-3 py-2 bg-gray-500 hover:bg-gray-600 text-white rounded text-xs flex items-center justify-center gap-1"
|
|
||||||
>
|
|
||||||
<i data-lucide="square" class="w-3 h-3"></i> Deselect
|
<i data-lucide="square" class="w-3 h-3"></i> Deselect
|
||||||
All
|
All
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<select
|
<select id="batch-color-select" class="text-xs p-2 border rounded">
|
||||||
id="batch-color-select"
|
|
||||||
class="text-xs p-2 border rounded"
|
|
||||||
>
|
|
||||||
<option value="">Set Color...</option>
|
<option value="">Set Color...</option>
|
||||||
<option value="null">None</option>
|
<option value="null">None</option>
|
||||||
<option value="red">Red</option>
|
<option value="red">Red</option>
|
||||||
@@ -472,10 +310,7 @@
|
|||||||
<option value="purple">Purple</option>
|
<option value="purple">Purple</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select
|
<select id="batch-style-select" class="text-xs p-2 border rounded">
|
||||||
id="batch-style-select"
|
|
||||||
class="text-xs p-2 border rounded"
|
|
||||||
>
|
|
||||||
<option value="">Set Style...</option>
|
<option value="">Set Style...</option>
|
||||||
<option value="null">Normal</option>
|
<option value="null">Normal</option>
|
||||||
<option value="bold">Bold</option>
|
<option value="bold">Bold</option>
|
||||||
@@ -483,10 +318,8 @@
|
|||||||
<option value="bold-italic">Bold & Italic</option>
|
<option value="bold-italic">Bold & Italic</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<button
|
<button id="batch-delete-btn"
|
||||||
id="batch-delete-btn"
|
class="px-3 py-2 bg-red-500 hover:bg-red-600 text-white rounded text-xs flex items-center justify-center gap-1">
|
||||||
class="px-3 py-2 bg-red-500 hover:bg-red-600 text-white rounded text-xs flex items-center justify-center gap-1"
|
|
||||||
>
|
|
||||||
<i data-lucide="trash-2" class="w-3 h-3"></i> Delete
|
<i data-lucide="trash-2" class="w-3 h-3"></i> Delete
|
||||||
Selected
|
Selected
|
||||||
</button>
|
</button>
|
||||||
@@ -495,47 +328,32 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex gap-2 mb-4">
|
<div class="flex gap-2 mb-4">
|
||||||
<button
|
<button id="expand-all-btn"
|
||||||
id="expand-all-btn"
|
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
|
||||||
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
|
|
||||||
>
|
|
||||||
<i data-lucide="chevrons-down" class="w-4 h-4"></i> Expand All
|
<i data-lucide="chevrons-down" class="w-4 h-4"></i> Expand All
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="collapse-all-btn"
|
||||||
id="collapse-all-btn"
|
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
|
||||||
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
|
|
||||||
>
|
|
||||||
<i data-lucide="chevrons-up" class="w-4 h-4"></i> Collapse All
|
<i data-lucide="chevrons-up" class="w-4 h-4"></i> Collapse All
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-2 mb-4">
|
<div class="grid grid-cols-2 gap-2 mb-4">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<button
|
<button id="import-dropdown-btn"
|
||||||
id="import-dropdown-btn"
|
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
|
||||||
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
|
|
||||||
>
|
|
||||||
<i data-lucide="upload" class="w-4 h-4"></i> Import
|
<i data-lucide="upload" class="w-4 h-4"></i> Import
|
||||||
<i data-lucide="chevron-down" class="w-3 h-3"></i>
|
<i data-lucide="chevron-down" class="w-3 h-3"></i>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div id="import-dropdown"
|
||||||
id="import-dropdown"
|
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10">
|
||||||
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10"
|
<button id="import-csv-btn"
|
||||||
>
|
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-t-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150">
|
||||||
<button
|
<i data-lucide="file-text" class="w-4 h-4 text-gray-600"></i>
|
||||||
id="import-csv-btn"
|
|
||||||
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-t-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
data-lucide="file-text"
|
|
||||||
class="w-4 h-4 text-gray-600"
|
|
||||||
></i>
|
|
||||||
Import CSV
|
Import CSV
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="import-json-btn"
|
||||||
id="import-json-btn"
|
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-b-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150">
|
||||||
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-b-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150"
|
|
||||||
>
|
|
||||||
<i data-lucide="braces" class="w-4 h-4 text-gray-600"></i>
|
<i data-lucide="braces" class="w-4 h-4 text-gray-600"></i>
|
||||||
Import JSON
|
Import JSON
|
||||||
</button>
|
</button>
|
||||||
@@ -543,56 +361,39 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<button
|
<button id="export-dropdown-btn"
|
||||||
id="export-dropdown-btn"
|
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
|
||||||
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
|
|
||||||
>
|
|
||||||
<i data-lucide="download" class="w-4 h-4"></i> Export
|
<i data-lucide="download" class="w-4 h-4"></i> Export
|
||||||
<i data-lucide="chevron-down" class="w-3 h-3"></i>
|
<i data-lucide="chevron-down" class="w-3 h-3"></i>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div id="export-dropdown"
|
||||||
id="export-dropdown"
|
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10">
|
||||||
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10"
|
<button id="export-csv-btn"
|
||||||
>
|
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-t-lg">
|
||||||
<button
|
|
||||||
id="export-csv-btn"
|
|
||||||
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-t-lg"
|
|
||||||
>
|
|
||||||
<i data-lucide="file-text" class="w-4 h-4"></i> Export CSV
|
<i data-lucide="file-text" class="w-4 h-4"></i> Export CSV
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="export-json-btn"
|
||||||
id="export-json-btn"
|
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-b-lg">
|
||||||
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-b-lg"
|
|
||||||
>
|
|
||||||
<i data-lucide="braces" class="w-4 h-4"></i> Export JSON
|
<i data-lucide="braces" class="w-4 h-4"></i> Export JSON
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div class="mb-4 max-h-96 overflow-y-auto border border-gray-200 rounded-lg p-2">
|
||||||
class="mb-4 max-h-96 overflow-y-auto border border-gray-200 rounded-lg p-2"
|
|
||||||
>
|
|
||||||
<ul id="bookmark-tree-list" class="space-y-2"></ul>
|
<ul id="bookmark-tree-list" class="space-y-2"></ul>
|
||||||
<div
|
<div id="no-bookmarks" class="text-center py-8 text-gray-400 text-sm">
|
||||||
id="no-bookmarks"
|
|
||||||
class="text-center py-8 text-gray-400 text-sm"
|
|
||||||
>
|
|
||||||
No bookmarks yet. Add one above!
|
No bookmarks yet. Add one above!
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<button
|
<button id="download-btn"
|
||||||
id="download-btn"
|
class="w-full px-4 py-2 bg-gradient-to-b from-blue-600 to-blue-700 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200">
|
||||||
class="w-full px-4 py-2 bg-gradient-to-b from-blue-600 to-blue-700 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200"
|
|
||||||
>
|
|
||||||
Save PDF with Bookmarks
|
Save PDF with Bookmarks
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button id="extract-existing-btn"
|
||||||
id="extract-existing-btn"
|
class="w-full px-4 py-2 bg-gradient-to-b from-green-500 to-green-600 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-green-400 transition duration-200">
|
||||||
class="w-full px-4 py-2 bg-gradient-to-b from-green-500 to-green-600 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-green-400 transition duration-200"
|
|
||||||
>
|
|
||||||
Extract Existing Bookmarks
|
Extract Existing Bookmarks
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -609,16 +410,10 @@
|
|||||||
|
|
||||||
<footer class="mt-16 border-t-2 border-gray-700 py-8 bg-[#111827]">
|
<footer class="mt-16 border-t-2 border-gray-700 py-8 bg-[#111827]">
|
||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div
|
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
|
||||||
class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"
|
|
||||||
>
|
|
||||||
<div class="mb-8 md:mb-0">
|
<div class="mb-8 md:mb-0">
|
||||||
<div class="flex items-center justify-center md:justify-start mb-4">
|
<div class="flex items-center justify-center md:justify-start mb-4">
|
||||||
<img
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
|
||||||
src="../../public/images/favicon.svg"
|
|
||||||
alt="Bento PDF Logo"
|
|
||||||
class="h-10 w-10 mr-3"
|
|
||||||
/>
|
|
||||||
<span class="text-xl font-bold text-white">BentoPDF</span>
|
<span class="text-xl font-bold text-white">BentoPDF</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-400 text-sm">
|
<p class="text-gray-400 text-sm">
|
||||||
@@ -630,17 +425,13 @@
|
|||||||
<h3 class="font-bold text-white mb-4">Company</h3>
|
<h3 class="font-bold text-white mb-4">Company</h3>
|
||||||
<ul class="space-y-2 text-gray-400">
|
<ul class="space-y-2 text-gray-400">
|
||||||
<li>
|
<li>
|
||||||
<a href="./about.html" class="hover:text-indigo-400"
|
<a href="./about.html" class="hover:text-indigo-400">About Us</a>
|
||||||
>About Us</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./faq.html" class="hover:text-indigo-400">FAQ</a>
|
<a href="./faq.html" class="hover:text-indigo-400">FAQ</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./contact.html" class="hover:text-indigo-400"
|
<a href="./contact.html" class="hover:text-indigo-400">Contact Us</a>
|
||||||
>Contact Us</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -649,14 +440,10 @@
|
|||||||
<h3 class="font-bold text-white mb-4">Legal</h3>
|
<h3 class="font-bold text-white mb-4">Legal</h3>
|
||||||
<ul class="space-y-2 text-gray-400">
|
<ul class="space-y-2 text-gray-400">
|
||||||
<li>
|
<li>
|
||||||
<a href="./terms.html" class="hover:text-indigo-400"
|
<a href="./terms.html" class="hover:text-indigo-400">Terms and Conditions</a>
|
||||||
>Terms and Conditions</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="./privacy.html" class="hover:text-indigo-400"
|
<a href="./privacy.html" class="hover:text-indigo-400">Privacy Policy</a>
|
||||||
>Privacy Policy</a
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -664,72 +451,33 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3 class="font-bold text-white mb-4">Follow Us</h3>
|
<h3 class="font-bold text-white mb-4">Follow Us</h3>
|
||||||
<div class="flex justify-center md:justify-start space-x-4">
|
<div class="flex justify-center md:justify-start space-x-4">
|
||||||
<a
|
<a href="https://github.com/alam00000/bentopdf" target="_blank" rel="noopener noreferrer"
|
||||||
href="https://github.com/alam00000/bentopdf"
|
class="text-gray-400 hover:text-indigo-400" title="GitHub">
|
||||||
target="_blank"
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
rel="noopener noreferrer"
|
<path fill-rule="evenodd"
|
||||||
class="text-gray-400 hover:text-indigo-400"
|
|
||||||
title="GitHub"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
class="w-6 h-6"
|
|
||||||
fill="currentColor"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||||||
clip-rule="evenodd"
|
clip-rule="evenodd" />
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a href="https://discord.gg/q42xWQmJ" target="_blank" rel="noopener noreferrer"
|
||||||
href="https://discord.gg/q42xWQmJ"
|
class="text-gray-400 hover:text-indigo-400" title="Discord">
|
||||||
target="_blank"
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="text-gray-400 hover:text-indigo-400"
|
|
||||||
title="Discord"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
class="w-6 h-6"
|
|
||||||
fill="currentColor"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
<path
|
||||||
d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"
|
d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z" />
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a href="https://www.instagram.com/thebentopdf/" class="text-gray-400 hover:text-indigo-400"
|
||||||
href="https://www.instagram.com/thebentopdf/"
|
title="Instagram">
|
||||||
class="text-gray-400 hover:text-indigo-400"
|
|
||||||
title="Instagram"
|
|
||||||
>
|
|
||||||
<i data-lucide="instagram"></i>
|
<i data-lucide="instagram"></i>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a href="https://www.linkedin.com/company/bentopdf/" class="text-gray-400 hover:text-indigo-400"
|
||||||
href="https://www.linkedin.com/company/bentopdf/"
|
title="LinkedIn">
|
||||||
class="text-gray-400 hover:text-indigo-400"
|
|
||||||
title="LinkedIn"
|
|
||||||
>
|
|
||||||
<i data-lucide="linkedin"></i>
|
<i data-lucide="linkedin"></i>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a href="https://x.com/BentoPDF" class="text-gray-400 hover:text-indigo-400" title="X (Twitter)">
|
||||||
href="https://x.com/BentoPDF"
|
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||||
class="text-gray-400 hover:text-indigo-400"
|
|
||||||
title="X (Twitter)"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
class="w-6 h-6"
|
|
||||||
fill="currentColor"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
aria-hidden="true"
|
|
||||||
>
|
|
||||||
<path
|
<path
|
||||||
d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"
|
d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -740,5 +488,6 @@
|
|||||||
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
||||||
<script type="module" src="../js/logic/bookmark-pdf.ts"></script>
|
<script type="module" src="../js/logic/bookmark-pdf.ts"></script>
|
||||||
<script type="module" src="../js/mobileMenu.ts"></script>
|
<script type="module" src="../js/mobileMenu.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,29 +1,31 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
|
||||||
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>JSON to PDF Converter - BentoPDF</title>
|
<title>JSON to PDF Converter - BentoPDF</title>
|
||||||
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
||||||
<link href="../../src/css/styles.css" rel="stylesheet" />
|
<link href="../../src/css/styles.css" rel="stylesheet" />
|
||||||
</head>
|
</head>
|
||||||
<body class="antialiased bg-gray-900">
|
|
||||||
|
<body class="antialiased bg-gray-900">
|
||||||
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="flex justify-between items-center h-16">
|
<div class="flex justify-between items-center h-16">
|
||||||
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
||||||
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
||||||
<span class="text-white font-bold text-xl ml-2">
|
<span class="text-white font-bold text-xl ml-2">
|
||||||
<a href="../../index.html">BentoPDF</a>
|
<a href="/">BentoPDF</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Desktop Navigation -->
|
<!-- Desktop Navigation -->
|
||||||
<div class="hidden md:flex items-center space-x-8 text-white">
|
<div class="hidden md:flex items-center space-x-8 text-white">
|
||||||
<a href="../../index.html" class="nav-link">Home</a>
|
<a href="/" class="nav-link">Home</a>
|
||||||
<a href="../../about.html" class="nav-link">About</a>
|
<a href="/about.html" class="nav-link">About</a>
|
||||||
<a href="../../contact.html" class="nav-link">Contact</a>
|
<a href="/contact.html" class="nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="nav-link">All Tools</a>
|
<a href="/" class="nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile Hamburger Button -->
|
<!-- Mobile Hamburger Button -->
|
||||||
@@ -48,10 +50,10 @@
|
|||||||
<!-- Mobile Menu Dropdown -->
|
<!-- Mobile Menu Dropdown -->
|
||||||
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
||||||
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
||||||
<a href="../../index.html" class="mobile-nav-link">Home</a>
|
<a href="/" class="mobile-nav-link">Home</a>
|
||||||
<a href="../../about.html" class="mobile-nav-link">About</a>
|
<a href="/about.html" class="mobile-nav-link">About</a>
|
||||||
<a href="../../contact.html" class="mobile-nav-link">Contact</a>
|
<a href="/contact.html" class="mobile-nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="mobile-nav-link">All Tools</a>
|
<a href="/" class="mobile-nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -69,12 +71,14 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6">
|
<div class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6">
|
||||||
<p class="text-yellow-200 text-sm">
|
<p class="text-yellow-200 text-sm">
|
||||||
<strong>Note:</strong> Only JSON files created by the PDF-to-JSON converter tool are supported. Standard JSON files from other tools will not work.
|
<strong>Note:</strong> Only JSON files created by the PDF-to-JSON converter tool are supported. Standard JSON
|
||||||
|
files from other tools will not work.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="upload-section mb-6">
|
<div class="upload-section mb-6">
|
||||||
<div class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
|
<div
|
||||||
|
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
|
||||||
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
||||||
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
|
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
|
||||||
<p class="mb-2 text-sm text-gray-300">
|
<p class="mb-2 text-sm text-gray-300">
|
||||||
@@ -83,13 +87,8 @@
|
|||||||
<p class="text-xs text-gray-500">Multiple JSON files</p>
|
<p class="text-xs text-gray-500">Multiple JSON files</p>
|
||||||
<p class="text-xs text-gray-500">Your files never leave your device.</p>
|
<p class="text-xs text-gray-500">Your files never leave your device.</p>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input type="file" id="jsonFiles" accept="application/json" multiple
|
||||||
type="file"
|
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
|
||||||
id="jsonFiles"
|
|
||||||
accept="application/json"
|
|
||||||
multiple
|
|
||||||
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- File Display Area -->
|
<!-- File Display Area -->
|
||||||
@@ -108,6 +107,6 @@
|
|||||||
<script type="module" src="../js/logic/json-to-pdf.ts"></script>
|
<script type="module" src="../js/logic/json-to-pdf.ts"></script>
|
||||||
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
||||||
<script type="module" src="../js/mobileMenu.ts"></script>
|
<script type="module" src="../js/mobileMenu.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<div class="flex-shrink-0 flex items-center">
|
<div class="flex-shrink-0 flex items-center">
|
||||||
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
||||||
<span class="text-white font-bold text-xl ml-2">
|
<span class="text-white font-bold text-xl ml-2">
|
||||||
<a href="../../index.html">BentoPDF</a>
|
<a href="/">BentoPDF</a>
|
||||||
</span>
|
</span>
|
||||||
<span class="text-gray-400 ml-3 text-sm sm:text-base">PDF Multi Tool</span>
|
<span class="text-gray-400 ml-3 text-sm sm:text-base">PDF Multi Tool</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -60,6 +60,7 @@
|
|||||||
|
|
||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Add Blank -->
|
<!-- Add Blank -->
|
||||||
<button id="add-blank-page-btn"
|
<button id="add-blank-page-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
@@ -68,19 +69,19 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Edit:</span>
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Edit:</span>
|
||||||
|
|
||||||
|
|
||||||
<!-- Undo / Redo / Reset -->
|
<!-- Undo / Redo / Reset -->
|
||||||
<button id="undo-btn"
|
<button id="undo-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
<i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
<i data-lucide="undo-2" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
||||||
<span class="hidden lg:inline">Undo</span>
|
<span class="hidden lg:inline">Undo</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="redo-btn"
|
<button id="redo-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
<i data-lucide="rotate-cw" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
<i data-lucide="redo-2" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
||||||
<span class="hidden lg:inline">Redo</span>
|
<span class="hidden lg:inline">Redo</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@@ -93,7 +94,7 @@
|
|||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
|
|
||||||
<!-- Selection -->
|
<!-- Selection -->
|
||||||
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Selection:</span>
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Selection:</span>
|
||||||
|
|
||||||
<button id="select-all-btn"
|
<button id="select-all-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
|
|
||||||
<!-- Rotate -->
|
<!-- Rotate -->
|
||||||
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Rotate:</span>
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Rotate:</span>
|
||||||
<button id="bulk-rotate-left-btn"
|
<button id="bulk-rotate-left-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
<i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
<i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
||||||
@@ -124,6 +125,8 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Transform:</span>
|
||||||
|
|
||||||
|
|
||||||
<!-- Duplicate / Split -->
|
<!-- Duplicate / Split -->
|
||||||
<button id="bulk-duplicate-btn"
|
<button id="bulk-duplicate-btn"
|
||||||
@@ -139,7 +142,7 @@
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Clear:</span>
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Clear:</span>
|
||||||
|
|
||||||
|
|
||||||
<!-- Delete -->
|
<!-- Delete -->
|
||||||
@@ -152,7 +155,7 @@
|
|||||||
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
|
||||||
|
|
||||||
<!-- Download -->
|
<!-- Download -->
|
||||||
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Download:</span>
|
<span class="text-gray-400 text-xs sm:text-sm md:inline">Download:</span>
|
||||||
<button id="bulk-download-btn"
|
<button id="bulk-download-btn"
|
||||||
class="flex items-center gap-1 sm:gap-2 bg-green-600 hover:bg-green-700 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
class="flex items-center gap-1 sm:gap-2 bg-green-600 hover:bg-green-700 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
|
||||||
<i data-lucide="download" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
<i data-lucide="download" class="w-3 h-3 sm:w-4 sm:h-4"></i>
|
||||||
|
|||||||
@@ -1,29 +1,31 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
|
||||||
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>PDF to JSON Converter - BentoPDF</title>
|
<title>PDF to JSON Converter - BentoPDF</title>
|
||||||
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
<link rel="icon" type="image/png" href="../../images/favicon.svg" />
|
||||||
<link href="../../src/css/styles.css" rel="stylesheet" />
|
<link href="../../src/css/styles.css" rel="stylesheet" />
|
||||||
</head>
|
</head>
|
||||||
<body class="antialiased bg-gray-900">
|
|
||||||
|
<body class="antialiased bg-gray-900">
|
||||||
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
|
||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="flex justify-between items-center h-16">
|
<div class="flex justify-between items-center h-16">
|
||||||
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
||||||
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
||||||
<span class="text-white font-bold text-xl ml-2">
|
<span class="text-white font-bold text-xl ml-2">
|
||||||
<a href="../../index.html">BentoPDF</a>
|
<a href="/">BentoPDF</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Desktop Navigation -->
|
<!-- Desktop Navigation -->
|
||||||
<div class="hidden md:flex items-center space-x-8 text-white">
|
<div class="hidden md:flex items-center space-x-8 text-white">
|
||||||
<a href="../../index.html" class="nav-link">Home</a>
|
<a href="/" class="nav-link">Home</a>
|
||||||
<a href="../../about.html" class="nav-link">About</a>
|
<a href="/about.html" class="nav-link">About</a>
|
||||||
<a href="../../contact.html" class="nav-link">Contact</a>
|
<a href="/contact.html" class="nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="nav-link">All Tools</a>
|
<a href="/" class="nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile Hamburger Button -->
|
<!-- Mobile Hamburger Button -->
|
||||||
@@ -48,10 +50,10 @@
|
|||||||
<!-- Mobile Menu Dropdown -->
|
<!-- Mobile Menu Dropdown -->
|
||||||
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
||||||
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
||||||
<a href="../../index.html" class="mobile-nav-link">Home</a>
|
<a href="/" class="mobile-nav-link">Home</a>
|
||||||
<a href="../../about.html" class="mobile-nav-link">About</a>
|
<a href="/about.html" class="mobile-nav-link">About</a>
|
||||||
<a href="../../contact.html" class="mobile-nav-link">Contact</a>
|
<a href="/contact.html" class="mobile-nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="mobile-nav-link">All Tools</a>
|
<a href="/" class="mobile-nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -69,7 +71,8 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="upload-section mb-6">
|
<div class="upload-section mb-6">
|
||||||
<div class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
|
<div
|
||||||
|
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
|
||||||
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
<div class="flex flex-col items-center justify-center pt-5 pb-6">
|
||||||
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
|
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
|
||||||
<p class="mb-2 text-sm text-gray-300">
|
<p class="mb-2 text-sm text-gray-300">
|
||||||
@@ -78,13 +81,8 @@
|
|||||||
<p class="text-xs text-gray-500">Multiple PDF files</p>
|
<p class="text-xs text-gray-500">Multiple PDF files</p>
|
||||||
<p class="text-xs text-gray-500">Your files never leave your device.</p>
|
<p class="text-xs text-gray-500">Your files never leave your device.</p>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input type="file" id="pdfFiles" accept="application/pdf" multiple
|
||||||
type="file"
|
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
|
||||||
id="pdfFiles"
|
|
||||||
accept="application/pdf"
|
|
||||||
multiple
|
|
||||||
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- File Display Area -->
|
<!-- File Display Area -->
|
||||||
@@ -103,6 +101,6 @@
|
|||||||
<script type="module" src="../js/logic/pdf-to-json.ts"></script>
|
<script type="module" src="../js/logic/pdf-to-json.ts"></script>
|
||||||
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
<script type="module" src="../js/utils/lucide-init.ts"></script>
|
||||||
<script type="module" src="../js/mobileMenu.ts"></script>
|
<script type="module" src="../js/mobileMenu.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -16,16 +16,16 @@
|
|||||||
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
|
||||||
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
|
||||||
<span class="text-white font-bold text-xl ml-2">
|
<span class="text-white font-bold text-xl ml-2">
|
||||||
<a href="../../index.html">BentoPDF</a>
|
<a href="/">BentoPDF</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Desktop Navigation -->
|
<!-- Desktop Navigation -->
|
||||||
<div class="hidden md:flex items-center space-x-8 text-white">
|
<div class="hidden md:flex items-center space-x-8 text-white">
|
||||||
<a href="../../index.html" class="nav-link">Home</a>
|
<a href="/" class="nav-link">Home</a>
|
||||||
<a href="../../about.html" class="nav-link">About</a>
|
<a href="/about.html" class="nav-link">About</a>
|
||||||
<a href="../../contact.html" class="nav-link">Contact</a>
|
<a href="/contact.html" class="nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="nav-link">All Tools</a>
|
<a href="/" class="nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile Hamburger Button -->
|
<!-- Mobile Hamburger Button -->
|
||||||
@@ -52,10 +52,10 @@
|
|||||||
<!-- Mobile Menu Dropdown -->
|
<!-- Mobile Menu Dropdown -->
|
||||||
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
|
||||||
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
<div class="px-2 pt-2 pb-3 space-y-1 text-center">
|
||||||
<a href="../../index.html" class="mobile-nav-link">Home</a>
|
<a href="/" class="mobile-nav-link">Home</a>
|
||||||
<a href="../../about.html" class="mobile-nav-link">About</a>
|
<a href="/about.html" class="mobile-nav-link">About</a>
|
||||||
<a href="../../contact.html" class="mobile-nav-link">Contact</a>
|
<a href="/contact.html" class="mobile-nav-link">Contact</a>
|
||||||
<a href="../../index.html#tools-header" class="mobile-nav-link">All Tools</a>
|
<a href="/" class="mobile-nav-link">All Tools</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
Reference in New Issue
Block a user