|
9 | 9 | <link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"> |
10 | 10 | <link rel="dns-prefetch" href="https://cdn.jsdelivr.net"> |
11 | 11 |
|
| 12 | + <!-- Canonical Link --> |
| 13 | + <link rel="canonical" href="https://markdownviewer.pages.dev/"> |
| 14 | + |
| 15 | + <!-- Multilingual Hreflang Tags for Search Crawlers --> |
| 16 | + <link rel="alternate" hreflang="x-default" href="https://markdownviewer.pages.dev/" /> |
| 17 | + <link rel="alternate" hreflang="en" href="https://markdownviewer.pages.dev/?lang=en" /> |
| 18 | + <link rel="alternate" hreflang="zh-Hans" href="https://markdownviewer.pages.dev/?lang=zh" /> |
| 19 | + <link rel="alternate" hreflang="ja" href="https://markdownviewer.pages.dev/?lang=ja" /> |
| 20 | + <link rel="alternate" hreflang="ko" href="https://markdownviewer.pages.dev/?lang=ko" /> |
| 21 | + |
| 22 | + <!-- Asian Search Engine Verification Meta Tags --> |
| 23 | + <meta name="baidu-site-verification" content="baidu_verification_code_placeholder" /> |
| 24 | + <meta name="naver-site-verification" content="naver_verification_code_placeholder" /> |
| 25 | + |
| 26 | + <!-- PWA Web Manifest --> |
| 27 | + <link rel="manifest" href="manifest.json"> |
| 28 | + |
12 | 29 | <!-- Primary Meta Tags --> |
13 | 30 | <meta name="title" content="Markdown Viewer"> |
14 | 31 | <meta name="description" content="Markdown Viewer is a powerful GitHub-style Markdown rendering tool with live preview, LaTeX math, Mermaid diagrams, syntax highlighting, dark mode, and export options to PDF, HTML, and MD—all fully client-side and secure."> |
|
33 | 50 | <meta property="twitter:description" content="Markdown Viewer is a powerful GitHub-style Markdown rendering tool with live preview, LaTeX math, Mermaid diagrams, syntax highlighting, dark mode, and export options to PDF, HTML, and MD—all fully client-side and secure."> |
34 | 51 | <meta property="twitter:image" content="https://markdownviewer.pages.dev/assets/icon.jpg"> |
35 | 52 |
|
| 53 | + <!-- JSON-LD Structured Data Schema for Search Rich Snippets --> |
| 54 | + <script type="application/ld+json"> |
| 55 | + { |
| 56 | + "@context": "https://schema.org", |
| 57 | + "@type": "WebApplication", |
| 58 | + "name": "Markdown Viewer", |
| 59 | + "url": "https://markdownviewer.pages.dev/", |
| 60 | + "image": "https://markdownviewer.pages.dev/assets/icon.jpg", |
| 61 | + "description": "A powerful GitHub-style Markdown rendering tool with live preview, LaTeX, Mermaid, syntax highlighting, and PDF export.", |
| 62 | + "applicationCategory": "DeveloperApplication", |
| 63 | + "operatingSystem": "All", |
| 64 | + "browserRequirements": "Requires HTML5 compatible browser", |
| 65 | + "author": { |
| 66 | + "@type": "Organization", |
| 67 | + "name": "ThisIs-Developer", |
| 68 | + "url": "https://github.com/ThisIs-Developer" |
| 69 | + }, |
| 70 | + "offers": { |
| 71 | + "@type": "Offer", |
| 72 | + "price": "0.00", |
| 73 | + "priceCurrency": "USD" |
| 74 | + } |
| 75 | + } |
| 76 | + </script> |
| 77 | + |
36 | 78 | <title>Markdown Viewer</title> |
37 | 79 | <link href="assets/icon.jpg" rel="icon" type="image/jpg"> |
38 | 80 | <!-- Updated libraries to latest versions with Subresource Integrity (SRI) --> |
@@ -78,13 +120,13 @@ <h1 class="h4 mb-0 me-2">Markdown Viewer</h1> |
78 | 120 | </a> |
79 | 121 | <div id="stats-container" class="stats-container d-flex align-items-center d-none d-md-flex"> |
80 | 122 | <div class="stat-item me-3"> |
81 | | - <i class="bi bi-clock me-1"></i> <span id="reading-time">0</span> Min Read |
| 123 | + <i class="bi bi-clock me-1"></i> <span id="reading-time">0</span> <span id="lbl-min-read">Min Read</span> |
82 | 124 | </div> |
83 | 125 | <div class="stat-item me-3"> |
84 | | - <i class="bi bi-text-paragraph me-1"></i> <span id="word-count">0</span> Words |
| 126 | + <i class="bi bi-text-paragraph me-1"></i> <span id="word-count">0</span> <span id="lbl-words">Words</span> |
85 | 127 | </div> |
86 | 128 | <div class="stat-item"> |
87 | | - <i class="bi bi-fonts me-1"></i> <span id="char-count">0</span> Chars |
| 129 | + <i class="bi bi-fonts me-1"></i> <span id="char-count">0</span> <span id="lbl-chars">Chars</span> |
88 | 130 | </div> |
89 | 131 | </div> |
90 | 132 | </div> |
@@ -136,6 +178,18 @@ <h1 class="h4 mb-0 me-2">Markdown Viewer</h1> |
136 | 178 | <i class="bi bi-share"></i> <span class="btn-text">Share</span> |
137 | 179 | </button> |
138 | 180 |
|
| 181 | + <div class="dropdown me-1"> |
| 182 | + <button class="tool-button dropdown-toggle" type="button" id="languageDropdown" data-bs-toggle="dropdown" aria-expanded="false" title="Switch Language"> |
| 183 | + <i class="bi bi-translate"></i> <span id="current-lang-label" class="btn-text">English</span> |
| 184 | + </button> |
| 185 | + <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="languageDropdown"> |
| 186 | + <li><a class="dropdown-item lang-select-item active" href="#" data-lang="en">🇺🇸 English</a></li> |
| 187 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li> |
| 188 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li> |
| 189 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li> |
| 190 | + </ul> |
| 191 | + </div> |
| 192 | + |
139 | 193 | <button id="theme-toggle" class="tool-button" title="Toggle Dark Mode"> |
140 | 194 | <i class="bi bi-moon"></i> |
141 | 195 | </button> |
@@ -189,13 +243,13 @@ <h5>Menu</h5> |
189 | 243 |
|
190 | 244 | <div class="mobile-stats-container mb-3"> |
191 | 245 | <div class="stat-item mb-2"> |
192 | | - <i class="bi bi-clock me-1"></i> <span id="mobile-reading-time">0</span> Min Read |
| 246 | + <i class="bi bi-clock me-1"></i> <span id="mobile-reading-time">0</span> <span id="lbl-mobile-min-read">Min Read</span> |
193 | 247 | </div> |
194 | 248 | <div class="stat-item mb-2"> |
195 | | - <i class="bi bi-text-paragraph me-1"></i> <span id="mobile-word-count">0</span> Words |
| 249 | + <i class="bi bi-text-paragraph me-1"></i> <span id="mobile-word-count">0</span> <span id="lbl-mobile-words">Words</span> |
196 | 250 | </div> |
197 | 251 | <div class="stat-item"> |
198 | | - <i class="bi bi-fonts me-1"></i> <span id="mobile-char-count">0</span> Chars |
| 252 | + <i class="bi bi-fonts me-1"></i> <span id="mobile-char-count">0</span> <span id="lbl-mobile-chars">Chars</span> |
199 | 253 | </div> |
200 | 254 | </div> |
201 | 255 |
|
@@ -235,6 +289,17 @@ <h5>Menu</h5> |
235 | 289 | <button id="mobile-direction-toggle" class="mobile-menu-item" title="Toggle RTL/LTR"> |
236 | 290 | <i class="bi bi-text-right me-2"></i> Switch to RTL |
237 | 291 | </button> |
| 292 | + <div class="mobile-menu-item dropdown w-100 p-0 border-0"> |
| 293 | + <button class="mobile-menu-item w-100 text-start dropdown-toggle" type="button" id="mobileLanguageDropdown" data-bs-toggle="dropdown" aria-expanded="false" title="Switch Language"> |
| 294 | + <i class="bi bi-translate me-2"></i> Language: <span id="mobile-current-lang-label">English</span> |
| 295 | + </button> |
| 296 | + <ul class="dropdown-menu w-100" aria-labelledby="mobileLanguageDropdown"> |
| 297 | + <li><a class="dropdown-item lang-select-item active" href="#" data-lang="en">🇺🇸 English</a></li> |
| 298 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li> |
| 299 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li> |
| 300 | + <li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li> |
| 301 | + </ul> |
| 302 | + </div> |
238 | 303 | <button id="mobile-theme-toggle" class="mobile-menu-item" title="Toggle Dark Mode"> |
239 | 304 | <i class="bi bi-moon me-2"></i> Dark Mode |
240 | 305 | </button> |
|
0 commit comments