$(document).bind('keydown', 'alt+l', () => { $("#noteAutocomplete").val(''); $("#linkTitle").val(''); const noteDetail = $('#noteDetail'); noteDetail.summernote('editor.saveRange'); $("#insertLinkDialog").dialog({ modal: true, width: 500 }); function setDefaultLinkTitle(noteId) { const noteTitle = getNoteTitle(noteId); $("#linkTitle").val(noteTitle); } $("#noteAutocomplete").autocomplete({ source: getAutocompleteItems(globalAllNoteIds), minLength: 0, change: () => { const val = $("#noteAutocomplete").val(); const noteId = getNodeIdFromLabel(val); if (noteId) { setDefaultLinkTitle(noteId); } }, // this is called when user goes through autocomplete list with keyboard // at this point the item isn't selected yet so we use supplied ui.item to see where the cursor is focus: (event, ui) => { const noteId = getNodeIdFromLabel(ui.item.value); setDefaultLinkTitle(noteId); } }); }); $("#insertLinkForm").submit(() => { let val = $("#noteAutocomplete").val(); const noteId = getNodeIdFromLabel(val); if (noteId) { const linkTitle = $("#linkTitle").val(); const noteDetail = $('#noteDetail'); $("#insertLinkDialog").dialog("close"); noteDetail.summernote('editor.restoreRange'); noteDetail.summernote('createLink', { text: linkTitle, url: 'app#' + noteId, isNewWindow: true }); } return false; }); // when click on link popup, in case of internal link, just go the the referenced note instead of default behavior // of opening the link in new window/tab $(document).on('click', 'div.popover-content a', e => { goToInternalNote(e); }); $(document).on('dblclick', '.note-editable a', e => { goToInternalNote(e); }); function goToInternalNote(e, callback) { const targetUrl = $(e.target).attr("href"); const noteIdMatch = /app#([A-Za-z0-9]{22})/.exec(targetUrl); if (noteIdMatch !== null) { const noteId = noteIdMatch[1]; getNodeByKey(noteId).setActive(); e.preventDefault(); if (callback) { callback(); } } } function getNodeIdFromLabel(label) { const noteIdMatch = / \(([A-Za-z0-9]{22})\)/.exec(label); if (noteIdMatch !== null) { return noteIdMatch[1]; } return null; }