diff --git a/src/public/app/services/tab_context.js b/src/public/app/services/tab_context.js index 196a52cfe..937b0a075 100644 --- a/src/public/app/services/tab_context.js +++ b/src/public/app/services/tab_context.js @@ -47,6 +47,9 @@ class TabContext extends Component { if (await hoistedNoteService.checkNoteAccess(resolvedNotePath) === false) { return; // note is outside of hoisted subtree and user chose not to unhoist } + + // if user choise to unhoist, cache was reloaded, but might not contain this note (since it's on unexpanded path) + await treeCache.getNote(noteId); } await this.triggerEvent('beforeNoteSwitch', {tabContext: this}); @@ -78,10 +81,17 @@ class TabContext extends Component { notePath: this.notePath }); } + + // close dangling autocompletes after closing the tab + $(".aa-input").autocomplete("close"); } /** @property {NoteShort} */ get note() { + if (this.noteId && !(this.noteId in treeCache.notes)) { + logError(`Cannot find tabContext's note id='${this.noteId}'`); + } + return treeCache.notes[this.noteId]; } diff --git a/src/public/app/services/tree.js b/src/public/app/services/tree.js index 8e285c5e6..d3718249f 100644 --- a/src/public/app/services/tree.js +++ b/src/public/app/services/tree.js @@ -62,7 +62,7 @@ async function resolveNotePathToSegments(notePath, logErrors = true) { if (!parents.length) { if (logErrors) { - ws.logError(`No parents found for ${childNoteId} (${child.title})`); + ws.logError(`No parents found for ${childNoteId} (${child.title}) for path ${notePath}`); } return; @@ -83,8 +83,6 @@ async function resolveNotePathToSegments(notePath, logErrors = true) { for (const noteId of pathToRoot) { effectivePath.push(noteId); } - - effectivePath.push('root'); } break; diff --git a/src/public/app/widgets/note_actions.js b/src/public/app/widgets/note_actions.js index 60eba0229..77b2a5f19 100644 --- a/src/public/app/widgets/note_actions.js +++ b/src/public/app/widgets/note_actions.js @@ -126,13 +126,6 @@ export default class NoteActionsWidget extends TabAwareWidget { this.$showSourceButton.attr('disabled', 'disabled'); } - if (note.type === 'text') { - this.$exportNoteButton.removeAttr('disabled'); - } - else { - this.$exportNoteButton.attr('disabled', 'disabled'); - } - this.$protectButton.toggle(!note.isProtected); this.$unprotectButton.toggle(!!note.isProtected); } diff --git a/src/public/app/widgets/promoted_attributes.js b/src/public/app/widgets/promoted_attributes.js index 255554585..e7c29090e 100644 --- a/src/public/app/widgets/promoted_attributes.js +++ b/src/public/app/widgets/promoted_attributes.js @@ -173,6 +173,9 @@ export default class PromotedAttributesWidget extends TabAwareWidget { } else if (definition.labelType === 'boolean') { $input.prop("type", "checkbox"); + // hack, without this the checkbox is invisible + // we should be using a different bootstrap structure for checkboxes + $input.css('width', '80px'); if (valueAttr.value === "true") { $input.prop("checked", "checked"); diff --git a/src/public/app/widgets/similar_notes.js b/src/public/app/widgets/similar_notes.js index 019c21aa1..4f281162f 100644 --- a/src/public/app/widgets/similar_notes.js +++ b/src/public/app/widgets/similar_notes.js @@ -122,6 +122,11 @@ export default class SimilarNotesWidget extends TabAwareWidget { const similarNotes = await server.get('similar-notes/' + this.noteId); + if (!similarNotes) { + this.toggleInt(false); + return; + } + this.toggleInt(similarNotes.length > 0); if (similarNotes.length === 0) { diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index fac5636a7..ccf2c2541 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -111,6 +111,10 @@ span.fancytree-node.muted { opacity: 0.6; } .zen-mode #center-pane { width: 100% !important; + /* limit max width to improve readability */ + max-width: 1000px; + margin-left: auto; + margin-right: auto; } .ui-autocomplete { diff --git a/src/routes/api/sender.js b/src/routes/api/sender.js index dac2116d8..4d26407ae 100644 --- a/src/routes/api/sender.js +++ b/src/routes/api/sender.js @@ -35,6 +35,12 @@ function saveNote(req) { mime: 'text/html' }); + if (req.body.labels) { + for (const {name, value} of req.body.labels) { + note.setLabel(name, value); + } + } + return { noteId: note.noteId, branchId: branch.branchId diff --git a/src/services/html_sanitizer.js b/src/services/html_sanitizer.js index 81f5000df..89727ba1e 100644 --- a/src/services/html_sanitizer.js +++ b/src/services/html_sanitizer.js @@ -21,7 +21,7 @@ function sanitize(dirtyHtml) { 'input': [ 'class', 'type', 'disabled' ], 'code': [ 'class' ] }, - allowedSchemes: ['http', 'https', 'ftp', 'mailto', 'data'] + allowedSchemes: ['http', 'https', 'ftp', 'mailto', 'data', 'evernote'] }); }