# Description of Changes
This pull request introduces dynamic document meta tag management and
improves URL routing and tool metadata handling in the frontend. The
most significant changes are the addition of a custom hook to update
document meta tags (including OpenGraph tags) based on the selected
tool, enhancements to the tool selection context for better URL
synchronization, and enrichment of the `Tool` type and tool registry
with more metadata.

**Dynamic document meta management:**

* Added a new `useDocumentMeta` hook that updates the page's `<title>`,
description, and OpenGraph meta tags based on the currently selected
tool, and restores the original values on cleanup.
(`frontend/src/hooks/useDocumentMeta.ts`)
* Integrated `useDocumentMeta` into `HomePageContent` so the document's
meta tags dynamically reflect the selected tool's metadata, improving
SEO and social sharing. (`frontend/src/pages/HomePage.tsx`)
[[1]](diffhunk://#diff-85c26b21681286c20e97a26a4912f0b91812776c9d4d0c54aa541fded2565c7eR2-R8)
[[2]](diffhunk://#diff-85c26b21681286c20e97a26a4912f0b91812776c9d4d0c54aa541fded2565c7eR17)
[[3]](diffhunk://#diff-85c26b21681286c20e97a26a4912f0b91812776c9d4d0c54aa541fded2565c7eR28-R37)

**Tool metadata and context improvements:**

* Enhanced the `Tool` type and tool registry to include `title` and
`description` fields, which are now translated and used throughout the
UI and meta tags. (`frontend/src/types/tool.ts`,
`frontend/src/hooks/useToolManagement.tsx`)
[[1]](diffhunk://#diff-0b557df7bd27ac90cd2f925ddd8ef8096ea2decfaee9a5c12a94dc7a03c64bfaR46)
[[2]](diffhunk://#diff-57f8a6b3e75ecaec10ad445b01afe8fccc376af6f8ad4d693c68cf98e8863273L116-R118)
* Updated the `ToolWorkflowContext` to use the new `Tool` type for
`selectedTool`, replacing the previous `ToolConfiguration` type.
(`frontend/src/contexts/ToolWorkflowContext.tsx`)
[[1]](diffhunk://#diff-9b36e2c06dddbcfba6cb66fd0b303b7860f88ca8b562bb2534af1ab50390d385L6-R8)
[[2]](diffhunk://#diff-9b36e2c06dddbcfba6cb66fd0b303b7860f88ca8b562bb2534af1ab50390d385L72-R72)

**URL routing and synchronization:**

* Implemented logic in `ToolWorkflowContext` to synchronize the selected
tool with the browser URL, initialize tool selection from the URL on
load, and handle browser navigation (back/forward) for tool selection.
(`frontend/src/contexts/ToolWorkflowContext.tsx`)
---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.
This commit is contained in:
Anthony Stirling
2025-08-14 15:52:38 +01:00
committed by GitHub
parent 22db7bec76
commit 8149cb157c
103 changed files with 845 additions and 574 deletions
+14 -14
View File
@@ -347,7 +347,7 @@
"title": "Xoay",
"desc": "Dễ dàng xoay PDF của bạn."
},
"imageToPdf": {
"imageToPDF": {
"title": "Hình ảnh sang PDF",
"desc": "Chuyển đổi hình ảnh (PNG, JPEG, GIF) sang PDF."
},
@@ -371,7 +371,7 @@
"title": "Thay đổi quyền",
"desc": "Thay đổi quyền của tài liệu PDF của bạn"
},
"removePages": {
"pageRemover": {
"title": "Xóa",
"desc": "Xóa các trang không mong muốn khỏi tài liệu PDF của bạn."
},
@@ -383,7 +383,7 @@
"title": "Xóa mật khẩu",
"desc": "Xóa bảo vệ mật khẩu khỏi tài liệu PDF của bạn."
},
"compressPdfs": {
"compress": {
"title": "Nén",
"desc": "Nén PDF để giảm kích thước tệp."
},
@@ -479,7 +479,7 @@
"title": "Pipeline (Nâng cao)",
"desc": "Chạy nhiều thao tác trên PDF bằng cách định nghĩa các tập lệnh pipeline"
},
"add-page-numbers": {
"addPageNumbers": {
"title": "Thêm số trang",
"desc": "Thêm số trang xuyên suốt tài liệu ở vị trí cố định"
},
@@ -487,7 +487,7 @@
"title": "Tự động đổi tên tệp PDF",
"desc": "Tự động đổi tên tệp PDF dựa trên tiêu đề được phát hiện"
},
"adjust-contrast": {
"adjustContrast": {
"title": "Điều chỉnh màu sắc/tương phản",
"desc": "Điều chỉnh độ tương phản, độ bão hòa và độ sáng của PDF"
},
@@ -499,7 +499,7 @@
"title": "Tự động tách trang",
"desc": "Tự động tách PDF đã quét với mã QR tách trang quét vật lý"
},
"sanitizePdf": {
"sanitizePDF": {
"title": "Làm sạch",
"desc": "Xóa các tập lệnh và phần tử khác khỏi các tệp PDF"
},
@@ -523,11 +523,11 @@
"title": "Lấy TẤT CẢ thông tin về PDF",
"desc": "Lấy bất kỳ và tất cả thông tin có thể về PDF"
},
"extractPage": {
"pageExtracter": {
"title": "Trích xuất (các) trang",
"desc": "Trích xuất các trang được chọn từ PDF"
},
"PdfToSinglePage": {
"pdfToSinglePage": {
"title": "PDF sang một trang lớn",
"desc": "Ghép tất cả các trang PDF thành một trang lớn duy nhất"
},
@@ -543,11 +543,11 @@
"title": "Manual Redaction",
"desc": "Redacts a PDF based on selected text, drawn shapes and/or selected page(s)"
},
"tableExtraxt": {
"PDFToCSV": {
"title": "PDF sang CSV",
"desc": "Trích xuất bảng từ PDF chuyển đổi thành CSV"
},
"autoSizeSplitPDF": {
"split-by-size-or-count": {
"title": "Tự động chia theo kích thước/số lượng",
"desc": "Chia một tệp PDF thành nhiều tài liệu dựa trên kích thước, số trang hoặc số lượng tài liệu"
},
@@ -563,11 +563,11 @@
"title": "Thêm dấu vào PDF",
"desc": "Thêm văn bản hoặc hình ảnh dấu tại vị trí cố định"
},
"removeImagePdf": {
"removeImage": {
"title": "Remove image",
"desc": "Remove image from PDF to reduce file size"
},
"splitPdfByChapters": {
"splitByChapters": {
"title": "Split PDF by Chapters",
"desc": "Split a PDF into multiple files based on its chapter structure."
},
@@ -575,7 +575,7 @@
"title": "Validate PDF Signature",
"desc": "Verify digital signatures and certificates in PDF documents"
},
"replaceColorPdf": {
"replace-color": {
"title": "Replace and Invert Color",
"desc": "Replace color for text and background in PDF and invert full color of pdf to reduce file size"
}
@@ -1558,4 +1558,4 @@
}
}
}
}
}