| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | import noteDetailService from '../services/note_detail.js'; | 
					
						
							|  |  |  | import utils from '../services/utils.js'; | 
					
						
							|  |  |  | import server from '../services/server.js'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const $dialog = $("#note-revisions-dialog"); | 
					
						
							|  |  |  | const $list = $("#note-revision-list"); | 
					
						
							|  |  |  | const $content = $("#note-revision-content"); | 
					
						
							|  |  |  | const $title = $("#note-revision-title"); | 
					
						
							| 
									
										
										
										
											2019-11-09 08:53:13 +01:00
										 |  |  | const $titleButtons = $("#note-revision-title-buttons"); | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | let revisionItems = []; | 
					
						
							| 
									
										
										
										
											2018-11-14 14:52:05 +01:00
										 |  |  | let note; | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-02 19:56:52 +02:00
										 |  |  | export async function showCurrentNoteRevisions() { | 
					
						
							| 
									
										
										
										
											2019-10-20 12:29:34 +02:00
										 |  |  |     await showNoteRevisionsDialog(noteDetailService.getActiveTabNoteId()); | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-20 21:40:47 +02:00
										 |  |  | export async function showNoteRevisionsDialog(noteId, noteRevisionId) { | 
					
						
							| 
									
										
										
										
											2019-06-10 22:45:03 +02:00
										 |  |  |     utils.closeActiveDialog(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  |     glob.activeDialog = $dialog; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-06 17:47:40 +01:00
										 |  |  |     $dialog.modal(); | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $list.empty(); | 
					
						
							|  |  |  |     $content.empty(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-20 12:29:34 +02:00
										 |  |  |     note = noteDetailService.getActiveTabNote(); | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  |     revisionItems = await server.get(`notes/${noteId}/revisions`); | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     for (const item of revisionItems) { | 
					
						
							|  |  |  |         $list.append($('<option>', { | 
					
						
							|  |  |  |             value: item.noteRevisionId, | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  |             text: item.dateLastEdited | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  |         })); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (revisionItems.length > 0) { | 
					
						
							|  |  |  |         if (!noteRevisionId) { | 
					
						
							|  |  |  |             noteRevisionId = $list.find("option:first").val(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $list.val(noteRevisionId).trigger('change'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							|  |  |  |         $title.text("No revisions for this note yet..."); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  | $list.on('change', async () => { | 
					
						
							| 
									
										
										
										
											2018-03-25 20:52:38 -04:00
										 |  |  |     const optVal = $list.find(":selected").val(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const revisionItem = revisionItems.find(r => r.noteRevisionId === optVal); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $title.html(revisionItem.title); | 
					
						
							| 
									
										
										
										
											2018-04-08 12:13:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-09 08:53:13 +01:00
										 |  |  |     const $downloadButton = $('<button class="btn btn-sm btn-primary" type="button">Download</button>'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $downloadButton.on('click', () => { | 
					
						
							|  |  |  |         utils.download(utils.getHost() + `/api/notes/${revisionItem.noteId}/revisions/${revisionItem.noteRevisionId}/download`); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $titleButtons.html($downloadButton); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  |     const fullNoteRevision = await server.get(`notes/${revisionItem.noteId}/revisions/${revisionItem.noteRevisionId}`); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-14 14:52:05 +01:00
										 |  |  |     if (note.type === 'text') { | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  |         $content.html(fullNoteRevision.content); | 
					
						
							| 
									
										
										
										
											2018-04-08 12:13:52 -04:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-11-14 14:52:05 +01:00
										 |  |  |     else if (note.type === 'code') { | 
					
						
							| 
									
										
										
										
											2019-11-01 19:21:48 +01:00
										 |  |  |         $content.html($("<pre>").text(fullNoteRevision.content)); | 
					
						
							| 
									
										
										
										
											2018-04-08 12:13:52 -04:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-11-08 23:09:57 +01:00
										 |  |  |     else if (note.type === 'image') { | 
					
						
							|  |  |  |         $content.html($("<img>") | 
					
						
							| 
									
										
										
										
											2019-11-09 08:53:13 +01:00
										 |  |  |             // reason why we put this inline as base64 is that we do not want to let user to copy this
 | 
					
						
							|  |  |  |             // as a URL to be used in a note. Instead if they copy and paste it into a note, it will be a uploaded as a new note
 | 
					
						
							| 
									
										
										
										
											2019-11-08 23:09:57 +01:00
										 |  |  |             .attr("src", `data:${note.mime};base64,` + fullNoteRevision.content) | 
					
						
							|  |  |  |             .css("width", "100%")); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-11-09 11:58:52 +01:00
										 |  |  |     else if (note.type === 'file') { | 
					
						
							|  |  |  |         $content.html( | 
					
						
							|  |  |  |             $("<table cellpadding='10'>") | 
					
						
							|  |  |  |                 .append($("<tr>").append( | 
					
						
							|  |  |  |                     $("<th>").text("MIME: "), | 
					
						
							|  |  |  |                     $("<td>").text(revisionItem.mime) | 
					
						
							|  |  |  |                 )) | 
					
						
							|  |  |  |                 .append($("<tr>").append( | 
					
						
							|  |  |  |                     $("<th>").text("File size:"), | 
					
						
							|  |  |  |                     $("<td>").text(revisionItem.contentLength + " bytes") | 
					
						
							|  |  |  |                 )) | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-11-14 14:52:05 +01:00
										 |  |  |     else { | 
					
						
							|  |  |  |         $content.text("Preview isn't available for this note type."); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-10-10 20:00:06 +02:00
										 |  |  | }); |