mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 11:39:01 +01:00 
			
		
		
		
	fix(share): heading and navigation not supporting CJK (closes #6430)
This commit is contained in:
		
							parent
							
								
									e953f0cc1a
								
							
						
					
					
						commit
						94d62f810a
					
				| @ -497,6 +497,14 @@ export function formatSize(size: number | null | undefined) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export function slugify(text: string) { | ||||||
|  |     return text | ||||||
|  |         .normalize("NFKD") // handles accents like é → e
 | ||||||
|  |         .toLowerCase() | ||||||
|  |         .replace(/[^\p{Letter}\p{Number}]+/gu, "-") // keep Unicode letters/numbers | ||||||
|  |         .replace(/(^-|-$)+/g, ""); // trim leading/trailing dashes
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export default { | export default { | ||||||
|     compareVersions, |     compareVersions, | ||||||
|     crash, |     crash, | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ import log from "../services/log.js"; | |||||||
| import type SNote from "./shaca/entities/snote.js"; | import type SNote from "./shaca/entities/snote.js"; | ||||||
| import type SBranch from "./shaca/entities/sbranch.js"; | import type SBranch from "./shaca/entities/sbranch.js"; | ||||||
| import type SAttachment from "./shaca/entities/sattachment.js"; | import type SAttachment from "./shaca/entities/sattachment.js"; | ||||||
| import utils, { isDev, safeExtractMessageAndStackFromError } from "../services/utils.js"; | import utils, { isDev, safeExtractMessageAndStackFromError, slugify } from "../services/utils.js"; | ||||||
| import options from "../services/options.js"; | import options from "../services/options.js"; | ||||||
| import { t } from "i18next"; | import { t } from "i18next"; | ||||||
| import ejs from "ejs"; | import ejs from "ejs"; | ||||||
| @ -175,7 +175,8 @@ function register(router: Router) { | |||||||
|             appPath: isDev ? appPath : `../${appPath}`, |             appPath: isDev ? appPath : `../${appPath}`, | ||||||
|             showLoginInShareTheme, |             showLoginInShareTheme, | ||||||
|             t, |             t, | ||||||
|             isDev |             isDev, | ||||||
|  |             slugify | ||||||
|         }; |         }; | ||||||
|         let useDefaultView = true; |         let useDefaultView = true; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -90,7 +90,6 @@ const currentTheme = note.getLabel("shareTheme") === "light" ? "light" : "dark"; | |||||||
| const themeClass = currentTheme === "light" ? " theme-light" : " theme-dark"; | const themeClass = currentTheme === "light" ? " theme-light" : " theme-dark"; | ||||||
| const headingRe = /(<h[1-6]>)(.+?)(<\/h[1-6]>)/g; | const headingRe = /(<h[1-6]>)(.+?)(<\/h[1-6]>)/g; | ||||||
| const headingMatches = [...content.matchAll(headingRe)]; | const headingMatches = [...content.matchAll(headingRe)]; | ||||||
| const slugify = (text) => text.toLowerCase().replace(/[^\w]/g, "-"); |  | ||||||
| content = content.replaceAll(headingRe, (...match) => { | content = content.replaceAll(headingRe, (...match) => { | ||||||
|     match[0] = match[0].replace(match[3], `<a id="${slugify(match[2])}" class="toc-anchor" name="${slugify(match[2])}" href="#${slugify(match[2])}">#</a>${match[3]}`); |     match[0] = match[0].replace(match[3], `<a id="${slugify(match[2])}" class="toc-anchor" name="${slugify(match[2])}" href="#${slugify(match[2])}">#</a>${match[3]}`); | ||||||
|     return match[0]; |     return match[0]; | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| <% | <% | ||||||
| const slugify = (text) => text.toLowerCase().replace(/[^\w]/g, "-"); |  | ||||||
| const slug = slugify(entry.name); | const slug = slugify(entry.name); | ||||||
| %> | %> | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Elian Doran
						Elian Doran