mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/stable'
# Conflicts: # db/demo.zip # src/services/notes.js # src/services/request.js
This commit is contained in:
		| @@ -1,10 +1,18 @@ | ||||
| /* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ | ||||
|  | ||||
| .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * CKEditor 5 (v19.1.1) content styles. | ||||
|  * Generated on Fri, 19 Jun 2020 01:26:44 GMT. | ||||
|  * CKEditor 5 (v21.0.0) content styles. | ||||
|  * Generated on Wed, 29 Jul 2020 12:14:43 GMT. | ||||
|  * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/content-styles.html | ||||
|  */ | ||||
|  | ||||
| :root { | ||||
|     --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); | ||||
|     --ck-color-mention-text: hsl(341, 100%, 30%); | ||||
|     --ck-highlight-marker-blue: hsl(201, 97%, 72%); | ||||
|     --ck-highlight-marker-green: hsl(120, 93%, 68%); | ||||
|     --ck-highlight-marker-pink: hsl(345, 96%, 73%); | ||||
| @@ -15,6 +23,81 @@ | ||||
|     --ck-todo-list-checkmark-size: 16px; | ||||
| } | ||||
|  | ||||
| /* ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image { | ||||
|     display: table; | ||||
|     clear: both; | ||||
|     text-align: center; | ||||
|     margin: 1em auto; | ||||
| } | ||||
| /* ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image img { | ||||
|     display: block; | ||||
|     margin: 0 auto; | ||||
|     max-width: 100%; | ||||
|     min-width: 50px; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagecaption.css */ | ||||
| .ck-content .image > figcaption { | ||||
|     display: table-caption; | ||||
|     caption-side: bottom; | ||||
|     word-break: break-word; | ||||
|     color: hsl(0, 0%, 20%); | ||||
|     background-color: hsl(0, 0%, 97%); | ||||
|     padding: .6em; | ||||
|     font-size: .75em; | ||||
|     outline-offset: -1px; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized { | ||||
|     max-width: 100%; | ||||
|     display: block; | ||||
|     box-sizing: border-box; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized img { | ||||
|     width: 100%; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized > figcaption { | ||||
|     display: block; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-side { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
|     max-width: 50%; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-left { | ||||
|     float: left; | ||||
|     margin-right: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-center { | ||||
|     margin-left: auto; | ||||
|     margin-right: auto; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-right { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content blockquote { | ||||
|     overflow: hidden; | ||||
|     padding-right: 1.5em; | ||||
|     padding-left: 1.5em; | ||||
|     margin-left: 0; | ||||
|     margin-right: 0; | ||||
|     font-style: italic; | ||||
|     border-left: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content[dir="rtl"] blockquote { | ||||
|     border-left: 0; | ||||
|     border-right: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list { | ||||
|     list-style: none; | ||||
| @@ -82,12 +165,54 @@ | ||||
| .ck-content .todo-list .todo-list__label .todo-list__label__description { | ||||
|     vertical-align: middle; | ||||
| } | ||||
| /* ckeditor5-media-embed/theme/mediaembed.css */ | ||||
| .ck-content .media { | ||||
|     clear: both; | ||||
|     margin: 1em 0; | ||||
|     display: block; | ||||
|     min-width: 15em; | ||||
| /* ckeditor5-horizontal-line/theme/horizontalline.css */ | ||||
| .ck-content hr { | ||||
|     margin: 15px 0; | ||||
|     height: 4px; | ||||
|     background: hsl(0, 0%, 87%); | ||||
|     border: 0; | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-yellow { | ||||
|     background-color: var(--ck-highlight-marker-yellow); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-green { | ||||
|     background-color: var(--ck-highlight-marker-green); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-pink { | ||||
|     background-color: var(--ck-highlight-marker-pink); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-blue { | ||||
|     background-color: var(--ck-highlight-marker-blue); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-red { | ||||
|     color: var(--ck-highlight-pen-red); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-green { | ||||
|     color: var(--ck-highlight-pen-green); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-tiny { | ||||
|     font-size: .7em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-small { | ||||
|     font-size: .85em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-big { | ||||
|     font-size: 1.4em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-huge { | ||||
|     font-size: 1.8em; | ||||
| } | ||||
| /* ckeditor5-basic-styles/theme/code.css */ | ||||
| .ck-content code { | ||||
| @@ -95,21 +220,6 @@ | ||||
|     padding: .15em; | ||||
|     border-radius: 2px; | ||||
| } | ||||
| /* ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content blockquote { | ||||
|     overflow: hidden; | ||||
|     padding-right: 1.5em; | ||||
|     padding-left: 1.5em; | ||||
|     margin-left: 0; | ||||
|     margin-right: 0; | ||||
|     font-style: italic; | ||||
|     border-left: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content[dir="rtl"] blockquote { | ||||
|     border-left: 0; | ||||
|     border-right: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* ckeditor5-table/theme/table.css */ | ||||
| .ck-content .table { | ||||
|     margin: 1em auto; | ||||
| @@ -143,98 +253,6 @@ | ||||
| .ck-content[dir="ltr"] .table th { | ||||
|     text-align: left; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized { | ||||
|     max-width: 100%; | ||||
|     display: block; | ||||
|     box-sizing: border-box; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized img { | ||||
|     width: 100%; | ||||
| } | ||||
| /* ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized > figcaption { | ||||
|     display: block; | ||||
| } | ||||
| /* ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image { | ||||
|     display: table; | ||||
|     clear: both; | ||||
|     text-align: center; | ||||
|     margin: 1em auto; | ||||
| } | ||||
| /* ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image img { | ||||
|     display: block; | ||||
|     margin: 0 auto; | ||||
|     max-width: 100%; | ||||
|     min-width: 50px; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagecaption.css */ | ||||
| .ck-content .image > figcaption { | ||||
|     display: table-caption; | ||||
|     caption-side: bottom; | ||||
|     word-break: break-word; | ||||
|     color: hsl(0, 0%, 20%); | ||||
|     background-color: hsl(0, 0%, 97%); | ||||
|     padding: .6em; | ||||
|     font-size: .75em; | ||||
|     outline-offset: -1px; | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-yellow { | ||||
|     background-color: var(--ck-highlight-marker-yellow); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-green { | ||||
|     background-color: var(--ck-highlight-marker-green); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-pink { | ||||
|     background-color: var(--ck-highlight-marker-pink); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-blue { | ||||
|     background-color: var(--ck-highlight-marker-blue); | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-red { | ||||
|     color: var(--ck-highlight-pen-red); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-green { | ||||
|     color: var(--ck-highlight-pen-green); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-side, | ||||
| .ck-content .image-style-align-left, | ||||
| .ck-content .image-style-align-center, | ||||
| .ck-content .image-style-align-right { | ||||
|     max-width: 50%; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-side { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-left { | ||||
|     float: left; | ||||
|     margin-right: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-center { | ||||
|     margin-left: auto; | ||||
|     margin-right: auto; | ||||
| } | ||||
| /* ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-right { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* ckeditor5-page-break/theme/pagebreak.css */ | ||||
| .ck-content .page-break { | ||||
|     position: relative; | ||||
| @@ -271,21 +289,12 @@ | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-tiny { | ||||
|     font-size: .7em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-small { | ||||
|     font-size: .85em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-big { | ||||
|     font-size: 1.4em; | ||||
| } | ||||
| /* ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-huge { | ||||
|     font-size: 1.8em; | ||||
| /* ckeditor5-media-embed/theme/mediaembed.css */ | ||||
| .ck-content .media { | ||||
|     clear: both; | ||||
|     margin: 1em 0; | ||||
|     display: block; | ||||
|     min-width: 15em; | ||||
| } | ||||
| /* ckeditor5-code-block/theme/codeblock.css */ | ||||
| .ck-content pre { | ||||
| @@ -307,12 +316,10 @@ | ||||
|     padding: 0; | ||||
|     border-radius: 0; | ||||
| } | ||||
| /* ckeditor5-horizontal-line/theme/horizontalline.css */ | ||||
| .ck-content hr { | ||||
|     margin: 15px 0; | ||||
|     height: 4px; | ||||
|     background: hsl(0, 0%, 87%); | ||||
|     border: 0; | ||||
| /* ckeditor5-mention/theme/mention.css */ | ||||
| .ck-content .mention { | ||||
|     background: var(--ck-color-mention-background); | ||||
|     color: var(--ck-color-mention-text); | ||||
| } | ||||
| @media print { | ||||
|     /* ckeditor5-page-break/theme/pagebreak.css */ | ||||
| @@ -324,9 +331,3 @@ | ||||
|         display: none; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ | ||||
|  | ||||
| .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ | ||||
|     display: none; | ||||
| } | ||||
|   | ||||
							
								
								
									
										2
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -81,6 +81,8 @@ function setupGlobs() { | ||||
|  | ||||
|     $("body").on("click", "a.external", function () { | ||||
|         window.open($(this).attr("href"), '_blank'); | ||||
|  | ||||
|         return false; | ||||
|     }); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -24,7 +24,7 @@ async function getRenderedContent(note) { | ||||
|             .attr("src", `api/images/${note.noteId}/${note.title}`) | ||||
|             .css("max-width", "100%"); | ||||
|     } | ||||
|     else if (type === 'file') { | ||||
|     else if (type === 'file' || type === 'pdf') { | ||||
|         function getFileUrl() { | ||||
|             return utils.getUrlForDownload("api/notes/" + note.noteId + "/download"); | ||||
|         } | ||||
| @@ -47,19 +47,21 @@ async function getRenderedContent(note) { | ||||
|         // open doesn't work for protected notes since it works through browser which isn't in protected session | ||||
|         $openButton.toggle(!note.isProtected); | ||||
|  | ||||
|         $rendered = $('<div>'); | ||||
|         $rendered = $('<div style="display: flex; flex-direction: column; height: 100%;">'); | ||||
|  | ||||
|         if (note.mime === 'application/pdf' && utils.isElectron()) { | ||||
|             const $pdfPreview = $('<iframe class="pdf-preview" style="width: 100%; height: 100%; flex-grow: 100;"></iframe>'); | ||||
|         if (type === 'pdf') { | ||||
|             const $pdfPreview = $('<iframe class="pdf-preview" style="width: 100%; flex-grow: 100;"></iframe>'); | ||||
|             $pdfPreview.attr("src", utils.getUrlForDownload("api/notes/" + note.noteId + "/open")); | ||||
|  | ||||
|             $rendered.append($pdfPreview); | ||||
|         } | ||||
|  | ||||
|         $rendered | ||||
|             .append($downloadButton) | ||||
|             .append('   ') | ||||
|             .append($openButton); | ||||
|         $rendered.append( | ||||
|             $("<div>") | ||||
|                 .append($downloadButton) | ||||
|                 .append('   ') | ||||
|                 .append($openButton) | ||||
|         ); | ||||
|     } | ||||
|     else if (type === 'render') { | ||||
|         $rendered = $('<div>'); | ||||
| @@ -90,6 +92,10 @@ async function getRenderedContent(note) { | ||||
| function getRenderingType(note) { | ||||
|     let type = note.type; | ||||
|  | ||||
|     if (type === 'file' && note.mime === 'application/pdf' && utils.isElectron()) { | ||||
|         type = 'pdf'; | ||||
|     } | ||||
|  | ||||
|     if (note.isProtected) { | ||||
|         if (protectedSessionHolder.isProtectedSessionAvailable()) { | ||||
|             protectedSessionHolder.touchProtectedSession(); | ||||
| @@ -104,4 +110,4 @@ function getRenderingType(note) { | ||||
|  | ||||
| export default { | ||||
|     getRenderedContent | ||||
| }; | ||||
| }; | ||||
|   | ||||
| @@ -288,6 +288,13 @@ class TreeCache { | ||||
|     async getNoteComplement(noteId) { | ||||
|         if (!this.noteComplementPromises[noteId]) { | ||||
|             this.noteComplementPromises[noteId] = server.get('notes/' + noteId).then(row => new NoteComplement(row)); | ||||
|  | ||||
|             // we don't want to keep large payloads forever in memory so we clean that up quite quickly | ||||
|             // this cache is more meant to share the data between different components within one business transaction (e.g. loading of the note into the tab context and all the components) | ||||
|             // this is also a work around for missing invalidation after change | ||||
|             this.noteComplementPromises[noteId].then( | ||||
|                 () => setTimeout(() => this.noteComplementPromises[noteId] = null, 1000) | ||||
|             ); | ||||
|         } | ||||
|  | ||||
|         return await this.noteComplementPromises[noteId]; | ||||
|   | ||||
| @@ -329,4 +329,9 @@ export default class NoteDetailWidget extends TabAwareWidget { | ||||
|             saveSelection: true | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     // used by cutToNote in CKEditor build | ||||
|     async saveNoteDetailNowCommand() { | ||||
|         await this.spacedUpdate.updateNowIfNecessary(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -305,6 +305,10 @@ export default class NoteTreeWidget extends TabAwareWidget { | ||||
|             keyboard: false, // we takover keyboard handling in the hotkeys plugin | ||||
|             extensions: utils.isMobile() ? ["dnd5", "clones"] : ["hotkeys", "dnd5", "clones"], | ||||
|             source: treeData, | ||||
|             scrollOfs: { | ||||
|                 top: 200, | ||||
|                 bottom: 200 | ||||
|             }, | ||||
|             scrollParent: this.$tree, | ||||
|             minExpandLevel: 2, // root can't be collapsed | ||||
|             click: (event, data) => { | ||||
|   | ||||
| @@ -36,10 +36,10 @@ export default class AbstractTextTypeWidget extends TypeWidget { | ||||
|                     .append($link) | ||||
|             ); | ||||
|  | ||||
|             const {renderedContent} = await noteContentRenderer.getRenderedContent(note); | ||||
|             const {renderedContent, type} = await noteContentRenderer.getRenderedContent(note); | ||||
|  | ||||
|             $el.append( | ||||
|                 $('<div class="include-note-content">') | ||||
|                 $(`<div class="include-note-content type-${type}">`) | ||||
|                     .append(renderedContent) | ||||
|             ); | ||||
|         } | ||||
|   | ||||
| @@ -135,7 +135,7 @@ export default class FileTypeWidget extends TypeWidget { | ||||
|         this.$pdfPreview.attr('src', '').empty().hide(); | ||||
|  | ||||
|         if (noteComplement.content) { | ||||
|             this.$previewContent.show(); | ||||
|             this.$previewContent.show().scrollTop(0); | ||||
|             this.$previewContent.text(noteComplement.content); | ||||
|         } | ||||
|         else if (note.mime === 'application/pdf' && utils.isElectron()) { | ||||
|   | ||||
| @@ -687,11 +687,23 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href | ||||
|     overflow: auto; | ||||
| } | ||||
|  | ||||
| .include-note.box-size-small .include-note-content.type-pdf { | ||||
|     height: 10em; /* PDF is rendered in iframe and must be sized absolutely */ | ||||
| } | ||||
|  | ||||
| .include-note.box-size-medium .include-note-content { | ||||
|     max-height: 20em; | ||||
|     overflow: auto; | ||||
| } | ||||
|  | ||||
| .include-note.box-size-medium .include-note-content.type-pdf { | ||||
|     height: 20em; /* PDF is rendered in iframe and must be sized absolutely */ | ||||
| } | ||||
|  | ||||
| .include-note.box-size-full .include-note-content.type-pdf { | ||||
|     height: 50em; /* PDF is rendered in iframe and it's not possible to put full height so at least a large height */ | ||||
| } | ||||
|  | ||||
| .alert-warning { | ||||
|     color: var(--main-text-color) !important; | ||||
|     background-color: var(--accented-background-color) !important; | ||||
|   | ||||
| @@ -17,8 +17,9 @@ function getNote(req) { | ||||
|     if (note.isStringNote()) { | ||||
|         note.content = note.getContent(); | ||||
|  | ||||
|         if (note.type === 'file') { | ||||
|             note.content = note.content.substr(0, 10000); | ||||
|         if (note.type === 'file' && note.content.length > 10000) { | ||||
|             note.content = note.content.substr(0, 10000) | ||||
|                 + `\r\n\r\n... and ${note.content.length - 10000} more characters.`; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -279,18 +279,15 @@ const downloadImagePromises = {}; | ||||
| function replaceUrl(content, url, imageNote) { | ||||
|     const quotedUrl = utils.quoteRegex(url); | ||||
|  | ||||
|     return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "g"), ` src="api/images/${imageNote.noteId}/${imageNote.title}"`); | ||||
|     return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "ig"), ` src="api/images/${imageNote.noteId}/${imageNote.title}"`); | ||||
| } | ||||
|  | ||||
| function downloadImages(noteId, content) { | ||||
|     const re = /<img[^>]*?\ssrc=['"]([^'">]+)['"]/ig; | ||||
|     let match; | ||||
|  | ||||
|     const origContent = content; | ||||
|  | ||||
|     while (match = re.exec(origContent)) { | ||||
|         const url = match[1]; | ||||
|     const imageRe = /<img[^>]*?\ssrc=['"]([^'">]+)['"]/ig; | ||||
|     let imageMatch; | ||||
|  | ||||
|     while (imageMatch = imageRe.exec(content)) { | ||||
|         const url = imageMatch[1]; | ||||
|         const inlineImageMatch = /^data:image\/[a-z]+;base64,/.exec(url); | ||||
|  | ||||
|         if (inlineImageMatch) { | ||||
| @@ -300,9 +297,9 @@ function downloadImages(noteId, content) { | ||||
|             const imageService = require('../services/image'); | ||||
|             const {note} = imageService.saveImage(noteId, imageBuffer, "inline image", true); | ||||
|  | ||||
|             content = content.substr(0, match.index) | ||||
|             content = content.substr(0, imageMatch.index) | ||||
|                 + `<img src="api/images/${note.noteId}/${note.title}"` | ||||
|                 + content.substr(match.index + match[0].length); | ||||
|                 + content.substr(imageMatch.index + imageMatch[0].length); | ||||
|         } | ||||
|         else if (!url.includes('api/images/') | ||||
|             // this is an exception for the web clipper's "imageId" | ||||
| @@ -316,7 +313,6 @@ function downloadImages(noteId, content) { | ||||
|                 } | ||||
|                 else { | ||||
|                     content = replaceUrl(content, url, imageNote); | ||||
|  | ||||
|                     continue; | ||||
|                 } | ||||
|             } | ||||
| @@ -328,7 +324,6 @@ function downloadImages(noteId, content) { | ||||
|                 imageUrlToNoteIdMapping[url] = existingImage.noteId; | ||||
|  | ||||
|                 content = replaceUrl(content, url, existingImage); | ||||
|  | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -84,10 +84,11 @@ function exec(opts) { | ||||
| } | ||||
|  | ||||
| function getImage(imageUrl) { | ||||
|     const proxyConf = syncOptions.getSyncProxy(); | ||||
|     const opts = { | ||||
|         method: 'GET', | ||||
|         url: imageUrl, | ||||
|         proxy: syncOptions.getSyncProxy() | ||||
|         proxy: proxyConf !== "noproxy" ? proxyConf : null | ||||
|     }; | ||||
|  | ||||
|     const client = getClient(opts); | ||||
|   | ||||
| @@ -155,7 +155,11 @@ function getContentDisposition(filename) { | ||||
|     return `file; filename="${sanitizedFilename}"; filename*=UTF-8''${sanitizedFilename}`; | ||||
| } | ||||
|  | ||||
| const STRING_MIME_TYPES = ["application/x-javascript", "image/svg+xml"]; | ||||
| const STRING_MIME_TYPES = [ | ||||
|     "application/javascript", | ||||
|     "application/x-javascript", | ||||
|     "image/svg+xml" | ||||
| ]; | ||||
|  | ||||
| function isStringNote(type, mime) { | ||||
|     // render and book are string note in the sense that they are expected to contain empty string | ||||
|   | ||||
		Reference in New Issue
	
	Block a user