mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 84feaabc52 | ||
|  | a6036859b8 | ||
|  | 93dcce2217 | ||
|  | 686af0c6a1 | ||
|  | d07f02b95f | ||
|  | ad74952194 | 
							
								
								
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,11 @@ | ||||
| { | ||||
|   "name": "trilium", | ||||
|   "version": "0.62.1-beta", | ||||
|   "version": "0.62.2", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "trilium", | ||||
|       "version": "0.62.1-beta", | ||||
|       "version": "0.62.2", | ||||
|       "hasInstallScript": true, | ||||
|       "license": "AGPL-3.0-only", | ||||
|       "dependencies": { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   "name": "trilium", | ||||
|   "productName": "Trilium Notes", | ||||
|   "description": "Trilium Notes", | ||||
|   "version": "0.62.2", | ||||
|   "version": "0.62.3", | ||||
|   "license": "AGPL-3.0-only", | ||||
|   "main": "electron.js", | ||||
|   "bin": { | ||||
|   | ||||
| @@ -117,14 +117,14 @@ async function renderCode(note, $renderedContent) { | ||||
| } | ||||
|  | ||||
| function renderImage(entity, $renderedContent, options = {}) { | ||||
|     const sanitizedTitle = entity.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|     const encodedTitle = encodeURIComponent(entity.title); | ||||
|  | ||||
|     let url; | ||||
|  | ||||
|     if (entity instanceof FNote) { | ||||
|         url = `api/images/${entity.noteId}/${sanitizedTitle}?${Math.random()}`; | ||||
|         url = `api/images/${entity.noteId}/${encodedTitle}?${Math.random()}`; | ||||
|     } else if (entity instanceof FAttachment) { | ||||
|         url = `api/attachments/${entity.attachmentId}/image/${sanitizedTitle}?${entity.utcDateModified}">`; | ||||
|         url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}">`; | ||||
|     } | ||||
|  | ||||
|     $renderedContent // styles needed for the zoom to work well | ||||
|   | ||||
| @@ -42,6 +42,7 @@ async function createLink(notePath, options = {}) { | ||||
|     const showNotePath = options.showNotePath === undefined ? false : options.showNotePath; | ||||
|     const showNoteIcon = options.showNoteIcon === undefined ? false : options.showNoteIcon; | ||||
|     const referenceLink = options.referenceLink === undefined ? false : options.referenceLink; | ||||
|     const autoConvertToImage = options.autoConvertToImage === undefined ? false : options.autoConvertToImage; | ||||
|  | ||||
|     const { noteId, parentNoteId } = treeService.getNoteIdAndParentIdFromUrl(notePath); | ||||
|     const viewScope = options.viewScope || {}; | ||||
| @@ -58,6 +59,16 @@ async function createLink(notePath, options = {}) { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     const note = await froca.getNote(noteId); | ||||
|  | ||||
|     if (autoConvertToImage && ['image', 'canvas', 'mermaid'].includes(note.type) && viewMode === 'default') { | ||||
|         const encodedTitle = encodeURIComponent(linkTitle); | ||||
|  | ||||
|         return $("<img>") | ||||
|             .attr("src", `api/images/${noteId}/${encodedTitle}?${Math.random()}`) | ||||
|             .attr("alt", linkTitle); | ||||
|     } | ||||
|  | ||||
|     const $container = $("<span>"); | ||||
|  | ||||
|     if (showNoteIcon) { | ||||
|   | ||||
| @@ -97,7 +97,7 @@ export default class IncludeNoteDialog extends BasicWidget { | ||||
|  | ||||
|         const boxSize = $("input[name='include-note-box-size']:checked").val(); | ||||
|  | ||||
|         if (note.type === 'image') { | ||||
|         if (['image', 'canvas', 'mermaid'].includes(note.type)) { | ||||
|             // there's no benefit to use insert note functionlity for images, | ||||
|             // so we'll just add an IMG tag | ||||
|             this.textTypeWidget.addImage(noteId); | ||||
|   | ||||
| @@ -274,16 +274,16 @@ export default class RevisionsDialog extends BasicWidget { | ||||
|  | ||||
|             this.$content.html($table); | ||||
|         } else if (revisionItem.type === 'canvas') { | ||||
|             const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(revisionItem.title); | ||||
|  | ||||
|             this.$content.html($("<img>") | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`) | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) | ||||
|                 .css("max-width", "100%")); | ||||
|         } else if (revisionItem.type === 'mermaid') { | ||||
|             const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(revisionItem.title); | ||||
|  | ||||
|             this.$content.html($("<img>") | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`) | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) | ||||
|                 .css("max-width", "100%")); | ||||
|  | ||||
|             this.$content.append($("<pre>").text(fullRevision.content)); | ||||
|   | ||||
| @@ -402,11 +402,11 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { | ||||
|                     })); | ||||
|  | ||||
|                     if (notes.length === 1) { | ||||
|                         linkService.createLink(notes[0].noteId, {referenceLink: true}) | ||||
|                         linkService.createLink(notes[0].noteId, {referenceLink: true, autoConvertToImage: true}) | ||||
|                             .then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML)); | ||||
|                     } | ||||
|                     else { | ||||
|                         Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => { | ||||
|                         Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true, autoConvertToImage: true}))).then(links => { | ||||
|                             const $list = $("<ul>").append(...links.map($link => $("<li>").append($link))); | ||||
|  | ||||
|                             data.dataTransfer.setData("text/html", $list[0].outerHTML); | ||||
|   | ||||
| @@ -365,12 +365,10 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { | ||||
|         const note = await froca.getNote(noteId); | ||||
|  | ||||
|         this.watchdog.editor.model.change( writer => { | ||||
|             const sanitizedTitle = note.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const src = `api/images/${note.noteId}/${sanitizedTitle}`; | ||||
|             const encodedTitle = encodeURIComponent(note.title); | ||||
|             const src = `api/images/${note.noteId}/${encodedTitle}`; | ||||
|  | ||||
|             const imageElement = writer.createElement( 'image',  { 'src': src } ); | ||||
|  | ||||
|             this.watchdog.editor.model.insertContent(imageElement, this.watchdog.editor.model.document.selection); | ||||
|             this.watchdog.editor.execute( 'insertImage', { source: src } ); | ||||
|         } ); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -153,8 +153,9 @@ function processContent(images, note, content) { | ||||
|             const buffer = Buffer.from(dataUrl.split(",")[1], 'base64'); | ||||
|  | ||||
|             const attachment = imageService.saveImageToAttachment(note.noteId, buffer, filename, true); | ||||
|             const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const url = `api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}`; | ||||
|  | ||||
|             const encodedTitle = encodeURIComponent(attachment.title); | ||||
|             const url = `api/attachments/${attachment.attachmentId}/image/${encodedTitle}`; | ||||
|  | ||||
|             log.info(`Replacing '${imageId}' with '${url}' in note '${note.noteId}'`); | ||||
|  | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| module.exports = { buildDate:"2023-11-21T20:49:24+01:00", buildRevision: "e2b1421bf3d764ffe444a103c118e67d8c563673" }; | ||||
| module.exports = { buildDate:"2023-11-27T23:37:24+01:00", buildRevision: "a6036859b8bd24be31dfcf6318e57cf696fa25bc" }; | ||||
|   | ||||
| @@ -303,8 +303,8 @@ function importEnex(taskContext, file, parentNote) { | ||||
|  | ||||
|                     const attachment = imageService.saveImageToAttachment(noteEntity.noteId, resource.content, originalName, taskContext.data.shrinkImages); | ||||
|  | ||||
|                     const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|                     const url = `api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}`; | ||||
|                     const encodedTitle = encodeURIComponent(attachment.title); | ||||
|                     const url = `api/attachments/${attachment.attachmentId}/image/${encodedTitle}`; | ||||
|                     const imageLink = `<img src="${url}">`; | ||||
|  | ||||
|                     content = content.replace(mediaRegex, imageLink); | ||||
|   | ||||
| @@ -529,9 +529,9 @@ function downloadImages(noteId, content) { | ||||
|             const imageService = require('../services/image'); | ||||
|             const attachment = imageService.saveImageToAttachment(noteId, imageBuffer, "inline image", true, true); | ||||
|  | ||||
|             const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(attachment.title); | ||||
|  | ||||
|             content = `${content.substr(0, imageMatch.index)}<img src="api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}"${content.substr(imageMatch.index + imageMatch[0].length)}`; | ||||
|             content = `${content.substr(0, imageMatch.index)}<img src="api/attachments/${attachment.attachmentId}/image/${encodedTitle}"${content.substr(imageMatch.index + imageMatch[0].length)}`; | ||||
|         } | ||||
|         else if (!url.includes('api/images/') && !/api\/attachments\/.+\/image\/?.*/.test(url) | ||||
|             // this is an exception for the web clipper's "imageId" | ||||
|   | ||||
| @@ -63,6 +63,8 @@ function isElectron() { | ||||
| } | ||||
|  | ||||
| function hash(text) { | ||||
|     text = text.normalize(); | ||||
|  | ||||
|     return crypto.createHash('sha1').update(text).digest('base64'); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user