joplin-plugin-explorer 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -65
- package/package.json +25 -25
- package/publish/index.js +1 -1
- package/publish/manifest.json +13 -13
- package/publish/plugin.jpl +0 -0
- package/publish/webview/panel.css +621 -621
- package/publish/webview/panel.js +1 -1
package/publish/webview/panel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _savedScrollTop=0,_isFirstRender=!0;function postMsg(e){webviewApi.postMessage(e)}function currentSortMode(){var e=document.getElementById("notes-in-list-root");return e&&e.dataset.sort||""}document.addEventListener("scroll",function(e){e.target&&"tree-container"===e.target.id&&(_savedScrollTop=e.target.scrollTop)},!0);var _observer=new MutationObserver(function(){var e=document.getElementById("tree-container");if(e)if(_isFirstRender){_isFirstRender=!1;var t=e.querySelector(".tree-item.note.selected");t&&setTimeout(function(){t.scrollIntoView({block:"nearest",behavior:"instant"})},30)}else e.scrollTop=_savedScrollTop});function loadI18n(){var e=document.getElementById("notes-in-list-root");if(e&&e.dataset.i18n)try{window._i18n=JSON.parse(e.dataset.i18n)}catch(e){}}function T(e){return window._i18n||loadI18n(),window._i18n&&window._i18n[e]||e}function getPinnedData(){var e=document.getElementById("notes-in-list-root");if(e&&e.dataset.pinned)try{return JSON.parse(e.dataset.pinned)}catch(e){}return[]}function isPinned(e){for(var t=getPinnedData(),a=0;a<t.length;a++)if(t[a].id===e)return!0;return!1}function showInlineInput(e,t,a){var n=document.getElementById("inline-input-overlay");n&&n.remove();var o=document.createElement("div");o.id="inline-input-overlay",o.className="inline-input-overlay",o.innerHTML='<div class="inline-input-dialog"><div class="inline-input-label">'+e+'</div><input class="inline-input-field" type="text" value="'+(t||"").replace(/"/g,""")+'" /><div class="inline-input-buttons"><button class="inline-input-ok">OK</button><button class="inline-input-cancel">'+(T("cancel")||"Cancel")+"</button></div></div>",document.body.appendChild(o);var s=o.querySelector(".inline-input-field");function i(){var e=s.value;o.remove(),a(e)}function d(){o.remove(),a(null)}s.focus(),s.select(),o.querySelector(".inline-input-ok").addEventListener("click",i),o.querySelector(".inline-input-cancel").addEventListener("click",d),s.addEventListener("keydown",function(e){"Enter"===e.key&&i(),"Escape"===e.key&&d()}),o.addEventListener("click",function(e){e.target===o&&d()})}function toggleFolderLocal(e,t){var a=e.classList.toggle("collapsed"),n=document.querySelector('.children[data-folder-id="'+t+'"]');n&&n.classList.toggle("collapsed",a);var o=e.querySelector(".toggle");o&&(o.textContent=a?"▶":"▼",o.classList.toggle("expanded",!a))}function collapseAllLocal(){var e=document.getElementById("tree-container");e&&(e.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")){e.classList.add("collapsed");var t=e.querySelector(".toggle");t&&(t.textContent="▶",t.classList.remove("expanded"))}}),e.querySelectorAll(".children").forEach(function(e){e.classList.add("collapsed")}))}function clearDropIndicators(){document.querySelectorAll(".drop-target").forEach(function(e){e.classList.remove("drop-target")}),document.querySelectorAll(".drop-above").forEach(function(e){e.classList.remove("drop-above")}),document.querySelectorAll(".drop-below").forEach(function(e){e.classList.remove("drop-below")})}function endDrag(){clearDropIndicators();var e=document.getElementById("tree-container");e&&e.classList.remove("dragging-active")}_observer.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("click",function(e){var t=e.target.closest(".ctx-item");if(t){postMsg({name:"contextMenu",action:t.dataset.action,id:t.dataset.id,itemType:t.dataset.type});var a=document.getElementById("ctx-menu");a&&a.remove()}else{var n=document.getElementById("ctx-menu");n&&n.remove();var o=e.target.closest(".search-tag-item");if(o)o.dataset.tagId&&postMsg({name:"loadTagNotes",tagId:o.dataset.tagId});else{var s=e.target.closest(".search-folder-item");if(s)s.dataset.folderId&&postMsg({name:"locateFolder",folderId:s.dataset.folderId});else{var i=e.target.closest(".pinned-section-header");if(i){var d=i.classList.toggle("collapsed"),r=document.getElementById("pinned-body");r&&r.classList.toggle("collapsed",d);var c=i.querySelector(".toggle");return c&&(c.textContent=d?"▶":"▼"),void postMsg({name:"togglePinnedCollapse"})}var l=e.target.closest(".search-section-header");if(l){var v=document.getElementById("search-section-"+l.dataset.section);if(v){var u=l.querySelector(".section-toggle");v.classList.contains("collapsed")?(v.classList.remove("collapsed"),u&&(u.textContent="▼")):(v.classList.add("collapsed"),u&&(u.textContent="▶"))}}else{var g=e.target.closest(".tree-item");if(g){var m=g.dataset.type,p=g.dataset.id,f=g.classList.contains("pinned-item");"note"===m?(document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),g.classList.add("selected"),postMsg({name:"openNote",id:p})):"folder"===m&&(f?postMsg({name:"locatePinnedFolder",folderId:p}):(toggleFolderLocal(g,p),postMsg({name:"toggleFolder",id:p})))}else{var h=e.target.closest("button");if(h)switch(h.id){case"btn-new-notebook":postMsg({name:"newNotebook"});break;case"btn-new-note":postMsg({name:"newNote"});break;case"btn-new-todo":postMsg({name:"newTodo"});break;case"btn-sort":postMsg({name:"cycleSort"});break;case"btn-collapse-all":collapseAllLocal(),postMsg({name:"collapseAll"});break;case"btn-sync":h.disabled||(h.disabled=!0,h.classList.add("syncing"),h.textContent="🔄 "+T("syncing"),postMsg({name:"sync"}))}}}}}}}),document.addEventListener("contextmenu",function(e){var t=document.getElementById("ctx-menu");t&&t.remove();var a=e.target.closest(".tree-item");if(a){e.preventDefault();var n=a.dataset.type,o=a.dataset.id,s="",i=a.querySelector(".label");i&&(s=i.textContent);var d='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("folder"===n){var r=isPinned(o);d+='<div class="ctx-item" data-action="'+(r?"unpinFolder":"pinFolder")+'" data-id="'+o+'" data-type="folder">'+T(r?"ctxUnpin":"ctxPin")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="newNote" data-id="'+o+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",d+='<div class="ctx-item" data-action="newTodo" data-id="'+o+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",d+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+o+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="renameFolder" data-id="'+o+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",d+='<div class="ctx-item" data-action="exportFolder" data-id="'+o+'" data-type="folder">'+T("ctxExportFolder")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item ctx-danger" data-action="deleteFolder" data-id="'+o+'" data-type="folder">'+T("ctxDeleteFolder")+"</div>"}else if("note"===n){var c=isPinned(o);d+='<div class="ctx-item" data-action="'+(c?"unpinNote":"pinNote")+'" data-id="'+o+'" data-type="note">'+T(c?"ctxUnpin":"ctxPin")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="openNote" data-id="'+o+'" data-type="note">'+T("ctxOpenNote")+"</div>",d+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+o+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="copyLink" data-id="'+o+'" data-type="note">'+T("ctxCopyLink")+"</div>",d+='<div class="ctx-item" data-action="duplicateNote" data-id="'+o+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",d+='<div class="ctx-item" data-action="switchNoteType" data-id="'+o+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>",d+='<div class="ctx-item" data-action="toggleTodo" data-id="'+o+'" data-type="note">'+T("ctxToggleTodo")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="renameNote" data-id="'+o+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",d+='<div class="ctx-item" data-action="noteInfo" data-id="'+o+'" data-type="note">'+T("ctxNoteInfo")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+o+'" data-type="note">'+T("ctxDeleteNote")+"</div>"}d+="</div>",document.body.insertAdjacentHTML("beforeend",d);var l=document.getElementById("ctx-menu"),v=l.getBoundingClientRect();v.right>window.innerWidth&&(l.style.left=window.innerWidth-v.width-4+"px"),v.bottom>window.innerHeight&&(l.style.top=window.innerHeight-v.height-4+"px")}}),document.addEventListener("mousedown",function(e){if(!e.target.closest("#ctx-menu")){var t=document.getElementById("ctx-menu");t&&t.remove()}}),webviewApi.onMessage(function(e){if(e&&e.message){var t=e.message;if("syncState"===t.name){var a=document.getElementById("btn-sync");if(!a)return;"syncing"===t.state?(a.disabled=!0,a.classList.remove("sync-done","sync-error"),a.classList.add("syncing"),a.textContent="🔄 "+T("syncing")):"done"===t.state?(a.classList.remove("syncing","sync-error"),a.classList.add("sync-done"),a.textContent=T("syncDone"),setTimeout(function(){var e=document.getElementById("btn-sync");e&&(e.disabled=!1,e.classList.remove("sync-done"),e.textContent="🔄 "+T("sync"))},2e3)):"error"===t.state&&(a.classList.remove("syncing","sync-done"),a.classList.add("sync-error"),a.textContent=T("syncFailed"),setTimeout(function(){var e=document.getElementById("btn-sync");e&&(e.disabled=!1,e.classList.remove("sync-error"),e.textContent="🔄 "+T("sync"))},4e3))}else if("searchResults"===t.name){if(void 0!==t.searchId&&t.searchId!==_searchId)return;t.notes||t.tags||t.folders?renderSearchResults(t.notes||[],t.tags||[],t.folders||[],t.query):_searchMode&&exitSearchMode()}else if("tagNotes"===t.name)expandTagNotes(t.tagId,t.notes);else if("scrollToFolder"===t.name)setTimeout(function(){var e=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+t.folderId+'"]');e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),e.classList.add("locate-flash"),setTimeout(function(){e.classList.remove("locate-flash")},1500))},80);else if("exitSearch"===t.name){var n=document.getElementById("search-input");n&&(n.value=""),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var o=document.getElementById("search-input");o&&(o.value=""),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){var e=document.querySelector('.tree-item.folder[data-id="'+t.folderId+'"]');e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),e.classList.add("locate-flash"),setTimeout(function(){e.classList.remove("locate-flash")},1500))},80)}else if("copyText"===t.name)if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t.text);else{var s=document.createElement("textarea");s.value=t.text,document.body.appendChild(s),s.select(),document.execCommand("copy"),s.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var i=document.querySelector('.tree-item.note[data-id="'+t.id+'"]');i&&(i.classList.add("selected"),i.scrollIntoView({block:"nearest",behavior:"instant"}))}else"updateNote"===t.name&&document.querySelectorAll('.tree-item.note[data-id="'+t.id+'"]').forEach(function(e){var a=e.querySelector(".label");a&&(a.textContent=t.title);var n=e.querySelector(".search-result-title");n&&(n.textContent=t.title);var o=e.querySelector(".note-icon");o&&(o.textContent=t.icon)})}}),document.addEventListener("mousedown",function(e){var t=e.target.closest(".tree-item");t&&0===e.button&&t.setAttribute("draggable","true")}),document.addEventListener("dragstart",function(e){var t=e.target.closest(".tree-item");if(t){var a=t.classList.contains("pinned-item");if(e.dataTransfer.setData("text/plain",JSON.stringify({id:t.dataset.id,type:t.dataset.type,pinned:a})),e.dataTransfer.effectAllowed="move",t.classList.add("dragging"),!a){var n=document.getElementById("tree-container");n&&n.classList.add("dragging-active")}}}),document.addEventListener("dragend",function(e){var t=e.target.closest(".tree-item");t&&(t.classList.remove("dragging"),t.removeAttribute("draggable")),endDrag()}),document.addEventListener("dragover",function(e){var t=e.target;if(t&&3===t.nodeType&&(t=t.parentElement),t){var a=t.closest(".tree-item");if(document.getElementById("tree-container"),t.closest("#drop-zone-empty"))document.querySelector(".tree-item.dragging.pinned-item")||(e.preventDefault(),e.dataTransfer.dropEffect="move");else{if(t.closest(".pinned-section-header"))return e.preventDefault(),e.dataTransfer.dropEffect="move",void clearDropIndicators();if(t.closest(".pinned-section-body")){if(document.querySelector(".tree-item.dragging.pinned-item")&&a&&a.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var n=a.getBoundingClientRect();e.clientY-n.top<.5*n.height?a.classList.add("drop-above"):a.classList.add("drop-below")}}else if(a){var o=document.querySelector(".tree-item.dragging");if(!o||!o.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var s=a.dataset.type,i=a.getBoundingClientRect(),d=e.clientY-i.top,r=i.height;"folder"===s?d<.25*r?a.classList.add("drop-above"):d>.75*r?a.classList.add("drop-below"):a.classList.add("drop-target"):"manual"===currentSortMode()?d<.5*r?a.classList.add("drop-above"):a.classList.add("drop-below"):a.classList.add("drop-target")}}}}}),document.addEventListener("dragleave",function(e){var t=e.target.closest(".tree-item");t&&(t.classList.remove("drop-target"),t.classList.remove("drop-above"),t.classList.remove("drop-below"));var a=document.getElementById("tree-container");a&&e.target===a&&a.classList.remove("drop-empty")}),document.addEventListener("drop",function(e){e.preventDefault();var t=e.target;t&&3===t.nodeType&&(t=t.parentElement);var a,n=t?t.closest(".tree-item"):null;document.getElementById("tree-container");try{a=JSON.parse(e.dataTransfer.getData("text/plain"))}catch(e){return void endDrag()}var o=a.id,s=a.type,i=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!i)return postMsg({name:"dragToEmpty",dragId:o,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!i)return"note"===s?postMsg({name:"contextMenu",action:"pinNote",id:o,itemType:"note"}):"folder"===s&&postMsg({name:"contextMenu",action:"pinFolder",id:o,itemType:"folder"}),void endDrag();if(t&&t.closest(".pinned-section-body")&&i){var d=n&&n.classList.contains("pinned-item")?n:null;if(d&&d.dataset.id!==o){var r=d.getBoundingClientRect(),c=e.clientY-r.top<.5*r.height?"before":"after";postMsg({name:"reorderPinned",dragId:o,dragType:s,targetId:d.dataset.id,position:c})}endDrag()}else if(i)endDrag();else if(n){var l=n.dataset.id,v=n.dataset.type;if(o!==l){var u=n.getBoundingClientRect(),g=e.clientY-u.top,m=u.height;postMsg("folder"===v?g>=.25*m&&g<=.75*m?{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:"into"}:{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:g<.25*m?"above":"below"}:"note"===s?{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:g<.5*m?"above":"below"}:{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:"into"}),endDrag()}else endDrag()}else endDrag()});var _searchTimer=null,_searchMode=!1,_searchId=0;function escapeRegex(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function escapeHtml(e){return String(null==e?"":e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function highlightText(e,t){var a=escapeHtml(e);if(!t)return a;var n=new RegExp("("+escapeRegex(t)+")","gi");return a.replace(n,'<mark class="search-highlight">$1</mark>')}function showSearchContainer(e){var t=document.getElementById("tree-container"),a=document.getElementById("search-results");t&&(t.style.display=e?"none":""),a&&(a.style.display=e?"":"none")}function renderNoteItem(e,t){var a="📝";e.is_todo&&(a=e.todo_completed?"☑":"☐");var n='<div class="search-result-item tree-item note" data-id="'+e.id+'" data-type="note">';return n+='<span class="icon note-icon">'+a+"</span>",n+='<div class="search-result-content">',n+='<div class="search-result-title">'+highlightText(e.title,t)+"</div>",e.folderName&&(n+='<div class="search-result-folder">📂 '+escapeHtml(e.folderName)+"</div>"),e.snippet&&(n+='<div class="search-result-snippet">'+highlightText(e.snippet,t)+"</div>"),n+"</div></div>"}function renderSearchResults(e,t,a,n){var o=document.getElementById("search-results");if(o){showSearchContainer(!0);var s=e.length+t.length+a.length;if(0!==s){var i='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){i+=m("📁",T("searchSectionFolders"),a.length,"folders"),i+='<div class="search-section-body" id="search-section-folders">';for(var d=0;d<a.length;d++){var r=a[d],c=r.iconEmoji||"📁";i+='<div class="search-result-item search-folder-item" data-folder-id="'+r.id+'">',i+='<span class="icon">'+c+"</span>",i+='<div class="search-result-content">',i+='<div class="search-result-title">'+highlightText(r.title,n)+"</div>",i+="</div></div>"}i+="</div>"}if(e.length>0){i+=m("📝",T("searchSectionNotes"),e.length,"notes"),i+='<div class="search-section-body" id="search-section-notes">';for(var l=0;l<e.length;l++)i+=renderNoteItem(e[l],n);i+="</div>"}if(t.length>0){i+=m("🏷️",T("searchSectionTags"),t.length,"tags"),i+='<div class="search-section-body" id="search-section-tags">';for(var v=0;v<t.length;v++){var u=t[v],g=T("searchTagNoteCount").replace("{count}",u.noteCount);i+='<div class="search-result-item search-tag-item" data-tag-id="'+u.id+'">',i+='<span class="icon">🏷️</span>',i+='<div class="search-result-content">',i+='<div class="search-result-title">'+highlightText(u.title,n)+"</div>",i+='<div class="search-result-folder">'+g+"</div>",i+="</div>",i+='<span class="tag-expand-arrow">▶</span>',i+="</div>",i+='<div class="tag-notes-container" id="tag-notes-'+u.id+'"></div>'}i+="</div>"}o.innerHTML=i,_searchMode=!0}else o.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function m(e,t,a,n){return'<div class="search-section-header" data-section="'+n+'"><span class="section-toggle">▼</span> '+e+" "+t+" ("+a+")</div>"}}function expandTagNotes(e,t){var a=document.getElementById("tag-notes-"+e);if(a){var n;if(a.children.length>0)return a.innerHTML="",void((n=document.querySelector('.search-tag-item[data-tag-id="'+e+'"] .tag-expand-arrow'))&&n.classList.remove("expanded"));for(var o="",s=0;s<t.length;s++)o+=renderNoteItem(t[s],"");0===t.length&&(o='<div class="search-status" style="padding-left:30px;">'+T("searchNoResult")+"</div>"),a.innerHTML=o,(n=document.querySelector('.search-tag-item[data-tag-id="'+e+'"] .tag-expand-arrow'))&&n.classList.add("expanded")}}function exitSearchMode(){_searchMode=!1,showSearchContainer(!1)}document.addEventListener("input",function(e){if("search-input"===e.target.id){var t=e.target.value.trim();_searchTimer&&clearTimeout(_searchTimer);var a=++_searchId;if(t){_searchMode=!0;var n=document.getElementById("search-results");n&&(n.innerHTML='<div class="search-status">'+T("searching")+"</div>"),showSearchContainer(!0),_searchTimer=setTimeout(function(){postMsg({name:"search",query:t,searchId:a})},400)}else _searchMode&&exitSearchMode()}}),document.addEventListener("keydown",function(e){if("Escape"===e.key){var t=document.getElementById("search-input");t&&t.value&&(t.value="",_searchMode&&exitSearchMode())}});
|
|
1
|
+
var _savedScrollTop=0,_isFirstRender=!0;function postMsg(e){webviewApi.postMessage(e)}function currentSortMode(){var e=document.getElementById("notes-in-list-root");return e&&e.dataset.sort||""}document.addEventListener("scroll",function(e){e.target&&"tree-container"===e.target.id&&(_savedScrollTop=e.target.scrollTop)},!0);var _observer=new MutationObserver(function(){var e=document.getElementById("tree-container");if(e)if(_isFirstRender){_isFirstRender=!1;var t=e.querySelector(".tree-item.note.selected");t&&setTimeout(function(){t.scrollIntoView({block:"nearest",behavior:"instant"})},30)}else e.scrollTop=_savedScrollTop});function loadI18n(){var e=document.getElementById("notes-in-list-root");if(e&&e.dataset.i18n)try{window._i18n=JSON.parse(e.dataset.i18n)}catch(e){}}function T(e){return window._i18n||loadI18n(),window._i18n&&window._i18n[e]||e}function getPinnedData(){var e=document.getElementById("notes-in-list-root");if(e&&e.dataset.pinned)try{return JSON.parse(e.dataset.pinned)}catch(e){}return[]}function isPinned(e){for(var t=getPinnedData(),a=0;a<t.length;a++)if(t[a].id===e)return!0;return!1}function showInlineInput(e,t,a){var n=document.getElementById("inline-input-overlay");n&&n.remove();var o=document.createElement("div");o.id="inline-input-overlay",o.className="inline-input-overlay",o.innerHTML='<div class="inline-input-dialog"><div class="inline-input-label">'+e+'</div><input class="inline-input-field" type="text" value="'+(t||"").replace(/"/g,""")+'" /><div class="inline-input-buttons"><button class="inline-input-ok">OK</button><button class="inline-input-cancel">'+(T("cancel")||"Cancel")+"</button></div></div>",document.body.appendChild(o);var s=o.querySelector(".inline-input-field");function i(){var e=s.value;o.remove(),a(e)}function d(){o.remove(),a(null)}s.focus(),s.select(),o.querySelector(".inline-input-ok").addEventListener("click",i),o.querySelector(".inline-input-cancel").addEventListener("click",d),s.addEventListener("keydown",function(e){"Enter"===e.key&&i(),"Escape"===e.key&&d()}),o.addEventListener("click",function(e){e.target===o&&d()})}function toggleFolderLocal(e,t){var a=e.classList.toggle("collapsed"),n=document.querySelector('.children[data-folder-id="'+t+'"]');n&&n.classList.toggle("collapsed",a);var o=e.querySelector(".toggle");o&&(o.textContent=a?"▶":"▼",o.classList.toggle("expanded",!a))}function collapseAllLocal(){var e=document.getElementById("tree-container");e&&(e.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")){e.classList.add("collapsed");var t=e.querySelector(".toggle");t&&(t.textContent="▶",t.classList.remove("expanded"))}}),e.querySelectorAll(".children").forEach(function(e){e.classList.add("collapsed")}))}function clearDropIndicators(){document.querySelectorAll(".drop-target").forEach(function(e){e.classList.remove("drop-target")}),document.querySelectorAll(".drop-above").forEach(function(e){e.classList.remove("drop-above")}),document.querySelectorAll(".drop-below").forEach(function(e){e.classList.remove("drop-below")})}function endDrag(){clearDropIndicators();var e=document.getElementById("tree-container");e&&e.classList.remove("dragging-active")}_observer.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("click",function(e){var t=e.target.closest(".ctx-item");if(t){postMsg({name:"contextMenu",action:t.dataset.action,id:t.dataset.id,itemType:t.dataset.type});var a=document.getElementById("ctx-menu");a&&a.remove()}else{var n=document.getElementById("ctx-menu");n&&n.remove();var o=e.target.closest(".search-tag-item");if(o)o.dataset.tagId&&postMsg({name:"loadTagNotes",tagId:o.dataset.tagId});else{var s=e.target.closest(".search-folder-item");if(s)s.dataset.folderId&&postMsg({name:"locateFolder",folderId:s.dataset.folderId});else{var i=e.target.closest(".pinned-section-header");if(i){var d=i.classList.toggle("collapsed"),r=document.getElementById("pinned-body");r&&r.classList.toggle("collapsed",d);var c=i.querySelector(".toggle");return c&&(c.textContent=d?"▶":"▼"),void postMsg({name:"togglePinnedCollapse"})}var l=e.target.closest(".search-section-header");if(l){var v=document.getElementById("search-section-"+l.dataset.section);if(v){var u=l.querySelector(".section-toggle");v.classList.contains("collapsed")?(v.classList.remove("collapsed"),u&&(u.textContent="▼")):(v.classList.add("collapsed"),u&&(u.textContent="▶"))}}else{var g=e.target.closest(".tree-item");if(g){var m=g.dataset.type,p=g.dataset.id,f=g.classList.contains("pinned-item");"note"===m?(document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),g.classList.add("selected"),postMsg({name:"openNote",id:p})):"folder"===m&&(f?postMsg({name:"locatePinnedFolder",folderId:p}):(toggleFolderLocal(g,p),postMsg({name:"toggleFolder",id:p})))}else{var h=e.target.closest("button");if(h)switch(h.id){case"btn-new-notebook":postMsg({name:"newNotebook"});break;case"btn-new-note":postMsg({name:"newNote"});break;case"btn-new-todo":postMsg({name:"newTodo"});break;case"btn-sort":postMsg({name:"cycleSort"});break;case"btn-collapse-all":collapseAllLocal(),postMsg({name:"collapseAll"});break;case"btn-sync":h.disabled||(h.disabled=!0,h.classList.add("syncing"),h.textContent="🔄 "+T("syncing"),postMsg({name:"sync"}))}}}}}}}),document.addEventListener("contextmenu",function(e){var t=document.getElementById("ctx-menu");t&&t.remove();var a=e.target.closest(".tree-item");if(a){e.preventDefault();var n=a.dataset.type,o=a.dataset.id,s="",i=a.querySelector(".label");i&&(s=i.textContent);var d='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("folder"===n){var r=isPinned(o);d+='<div class="ctx-item" data-action="'+(r?"unpinFolder":"pinFolder")+'" data-id="'+o+'" data-type="folder">'+T(r?"ctxUnpin":"ctxPin")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="newNote" data-id="'+o+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",d+='<div class="ctx-item" data-action="newTodo" data-id="'+o+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",d+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+o+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="renameFolder" data-id="'+o+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",d+='<div class="ctx-item" data-action="exportFolder" data-id="'+o+'" data-type="folder">'+T("ctxExportFolder")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item ctx-danger" data-action="deleteFolder" data-id="'+o+'" data-type="folder">'+T("ctxDeleteFolder")+"</div>"}else if("note"===n){var c=isPinned(o);d+='<div class="ctx-item" data-action="'+(c?"unpinNote":"pinNote")+'" data-id="'+o+'" data-type="note">'+T(c?"ctxUnpin":"ctxPin")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="openNote" data-id="'+o+'" data-type="note">'+T("ctxOpenNote")+"</div>",d+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+o+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="copyLink" data-id="'+o+'" data-type="note">'+T("ctxCopyLink")+"</div>",d+='<div class="ctx-item" data-action="duplicateNote" data-id="'+o+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",d+='<div class="ctx-item" data-action="switchNoteType" data-id="'+o+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(d+='<div class="ctx-item" data-action="toggleTodo" data-id="'+o+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item" data-action="renameNote" data-id="'+o+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",d+='<div class="ctx-item" data-action="noteInfo" data-id="'+o+'" data-type="note">'+T("ctxNoteInfo")+"</div>",d+='<div class="ctx-sep"></div>',d+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+o+'" data-type="note">'+T("ctxDeleteNote")+"</div>"}d+="</div>",document.body.insertAdjacentHTML("beforeend",d);var l=document.getElementById("ctx-menu"),v=l.getBoundingClientRect();v.right>window.innerWidth&&(l.style.left=window.innerWidth-v.width-4+"px"),v.bottom>window.innerHeight&&(l.style.top=window.innerHeight-v.height-4+"px")}}),document.addEventListener("mousedown",function(e){if(!e.target.closest("#ctx-menu")){var t=document.getElementById("ctx-menu");t&&t.remove()}}),webviewApi.onMessage(function(e){if(e&&e.message){var t=e.message;if("syncState"===t.name){var a=document.getElementById("btn-sync");if(!a)return;"syncing"===t.state?(a.disabled=!0,a.classList.remove("sync-done","sync-error"),a.classList.add("syncing"),a.textContent="🔄 "+T("syncing")):"done"===t.state?(a.classList.remove("syncing","sync-error"),a.classList.add("sync-done"),a.textContent=T("syncDone"),setTimeout(function(){var e=document.getElementById("btn-sync");e&&(e.disabled=!1,e.classList.remove("sync-done"),e.textContent="🔄 "+T("sync"))},2e3)):"error"===t.state&&(a.classList.remove("syncing","sync-done"),a.classList.add("sync-error"),a.textContent=T("syncFailed"),setTimeout(function(){var e=document.getElementById("btn-sync");e&&(e.disabled=!1,e.classList.remove("sync-error"),e.textContent="🔄 "+T("sync"))},4e3))}else if("searchResults"===t.name){if(void 0!==t.searchId&&t.searchId!==_searchId)return;t.notes||t.tags||t.folders?renderSearchResults(t.notes||[],t.tags||[],t.folders||[],t.query):_searchMode&&exitSearchMode()}else if("tagNotes"===t.name)expandTagNotes(t.tagId,t.notes);else if("scrollToFolder"===t.name)setTimeout(function(){var e=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+t.folderId+'"]');e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),e.classList.add("locate-flash"),setTimeout(function(){e.classList.remove("locate-flash")},1500))},80);else if("exitSearch"===t.name){var n=document.getElementById("search-input");n&&(n.value=""),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var o=document.getElementById("search-input");o&&(o.value=""),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){var e=document.querySelector('.tree-item.folder[data-id="'+t.folderId+'"]');e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),e.classList.add("locate-flash"),setTimeout(function(){e.classList.remove("locate-flash")},1500))},80)}else if("copyText"===t.name)if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t.text);else{var s=document.createElement("textarea");s.value=t.text,document.body.appendChild(s),s.select(),document.execCommand("copy"),s.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var i=document.querySelector('.tree-item.note[data-id="'+t.id+'"]');i&&(i.classList.add("selected"),i.scrollIntoView({block:"nearest",behavior:"instant"}))}else"updateNote"===t.name&&document.querySelectorAll('.tree-item.note[data-id="'+t.id+'"]').forEach(function(e){var a=e.querySelector(".label");a&&(a.textContent=t.title);var n=e.querySelector(".search-result-title");n&&(n.textContent=t.title);var o=e.querySelector(".note-icon");o&&(o.textContent=t.icon)})}}),document.addEventListener("mousedown",function(e){var t=e.target.closest(".tree-item");t&&0===e.button&&t.setAttribute("draggable","true")}),document.addEventListener("dragstart",function(e){var t=e.target.closest(".tree-item");if(t){var a=t.classList.contains("pinned-item");if(e.dataTransfer.setData("text/plain",JSON.stringify({id:t.dataset.id,type:t.dataset.type,pinned:a})),e.dataTransfer.effectAllowed="move",t.classList.add("dragging"),!a){var n=document.getElementById("tree-container");n&&n.classList.add("dragging-active")}}}),document.addEventListener("dragend",function(e){var t=e.target.closest(".tree-item");t&&(t.classList.remove("dragging"),t.removeAttribute("draggable")),endDrag()}),document.addEventListener("dragover",function(e){var t=e.target;if(t&&3===t.nodeType&&(t=t.parentElement),t){var a=t.closest(".tree-item");if(document.getElementById("tree-container"),t.closest("#drop-zone-empty"))document.querySelector(".tree-item.dragging.pinned-item")||(e.preventDefault(),e.dataTransfer.dropEffect="move");else{if(t.closest(".pinned-section-header"))return e.preventDefault(),e.dataTransfer.dropEffect="move",void clearDropIndicators();if(t.closest(".pinned-section-body")){if(document.querySelector(".tree-item.dragging.pinned-item")&&a&&a.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var n=a.getBoundingClientRect();e.clientY-n.top<.5*n.height?a.classList.add("drop-above"):a.classList.add("drop-below")}}else if(a){var o=document.querySelector(".tree-item.dragging");if(!o||!o.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var s=a.dataset.type,i=a.getBoundingClientRect(),d=e.clientY-i.top,r=i.height;"folder"===s?d<.25*r?a.classList.add("drop-above"):d>.75*r?a.classList.add("drop-below"):a.classList.add("drop-target"):"manual"===currentSortMode()?d<.5*r?a.classList.add("drop-above"):a.classList.add("drop-below"):a.classList.add("drop-target")}}}}}),document.addEventListener("dragleave",function(e){var t=e.target.closest(".tree-item");t&&(t.classList.remove("drop-target"),t.classList.remove("drop-above"),t.classList.remove("drop-below"));var a=document.getElementById("tree-container");a&&e.target===a&&a.classList.remove("drop-empty")}),document.addEventListener("drop",function(e){e.preventDefault();var t=e.target;t&&3===t.nodeType&&(t=t.parentElement);var a,n=t?t.closest(".tree-item"):null;document.getElementById("tree-container");try{a=JSON.parse(e.dataTransfer.getData("text/plain"))}catch(e){return void endDrag()}var o=a.id,s=a.type,i=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!i)return postMsg({name:"dragToEmpty",dragId:o,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!i)return"note"===s?postMsg({name:"contextMenu",action:"pinNote",id:o,itemType:"note"}):"folder"===s&&postMsg({name:"contextMenu",action:"pinFolder",id:o,itemType:"folder"}),void endDrag();if(t&&t.closest(".pinned-section-body")&&i){var d=n&&n.classList.contains("pinned-item")?n:null;if(d&&d.dataset.id!==o){var r=d.getBoundingClientRect(),c=e.clientY-r.top<.5*r.height?"before":"after";postMsg({name:"reorderPinned",dragId:o,dragType:s,targetId:d.dataset.id,position:c})}endDrag()}else if(i)endDrag();else if(n){var l=n.dataset.id,v=n.dataset.type;if(o!==l){var u=n.getBoundingClientRect(),g=e.clientY-u.top,m=u.height;postMsg("folder"===v?g>=.25*m&&g<=.75*m?{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:"into"}:{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:g<.25*m?"above":"below"}:"note"===s?{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:g<.5*m?"above":"below"}:{name:"dragDrop",dragId:o,dragType:s,targetId:l,position:"into"}),endDrag()}else endDrag()}else endDrag()});var _searchTimer=null,_searchMode=!1,_searchId=0;function escapeRegex(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function escapeHtml(e){return String(null==e?"":e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function highlightText(e,t){var a=escapeHtml(e);if(!t)return a;var n=new RegExp("("+escapeRegex(t)+")","gi");return a.replace(n,'<mark class="search-highlight">$1</mark>')}function showSearchContainer(e){var t=document.getElementById("tree-container"),a=document.getElementById("search-results");t&&(t.style.display=e?"none":""),a&&(a.style.display=e?"":"none")}function renderNoteItem(e,t){var a="📝";e.is_todo&&(a=e.todo_completed?"☑":"☐");var n='<div class="search-result-item tree-item note" data-id="'+e.id+'" data-type="note" data-todo="'+(e.is_todo?1:0)+'">';return n+='<span class="icon note-icon">'+a+"</span>",n+='<div class="search-result-content">',n+='<div class="search-result-title">'+highlightText(e.title,t)+"</div>",e.folderName&&(n+='<div class="search-result-folder">📂 '+escapeHtml(e.folderName)+"</div>"),e.snippet&&(n+='<div class="search-result-snippet">'+highlightText(e.snippet,t)+"</div>"),n+"</div></div>"}function renderSearchResults(e,t,a,n){var o=document.getElementById("search-results");if(o){showSearchContainer(!0);var s=e.length+t.length+a.length;if(0!==s){var i='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){i+=m("📁",T("searchSectionFolders"),a.length,"folders"),i+='<div class="search-section-body" id="search-section-folders">';for(var d=0;d<a.length;d++){var r=a[d],c=r.iconEmoji||"📁";i+='<div class="search-result-item search-folder-item" data-folder-id="'+r.id+'">',i+='<span class="icon">'+c+"</span>",i+='<div class="search-result-content">',i+='<div class="search-result-title">'+highlightText(r.title,n)+"</div>",i+="</div></div>"}i+="</div>"}if(e.length>0){i+=m("📝",T("searchSectionNotes"),e.length,"notes"),i+='<div class="search-section-body" id="search-section-notes">';for(var l=0;l<e.length;l++)i+=renderNoteItem(e[l],n);i+="</div>"}if(t.length>0){i+=m("🏷️",T("searchSectionTags"),t.length,"tags"),i+='<div class="search-section-body" id="search-section-tags">';for(var v=0;v<t.length;v++){var u=t[v],g=T("searchTagNoteCount").replace("{count}",u.noteCount);i+='<div class="search-result-item search-tag-item" data-tag-id="'+u.id+'">',i+='<span class="icon">🏷️</span>',i+='<div class="search-result-content">',i+='<div class="search-result-title">'+highlightText(u.title,n)+"</div>",i+='<div class="search-result-folder">'+g+"</div>",i+="</div>",i+='<span class="tag-expand-arrow">▶</span>',i+="</div>",i+='<div class="tag-notes-container" id="tag-notes-'+u.id+'"></div>'}i+="</div>"}o.innerHTML=i,_searchMode=!0}else o.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function m(e,t,a,n){return'<div class="search-section-header" data-section="'+n+'"><span class="section-toggle">▼</span> '+e+" "+t+" ("+a+")</div>"}}function expandTagNotes(e,t){var a=document.getElementById("tag-notes-"+e);if(a){var n;if(a.children.length>0)return a.innerHTML="",void((n=document.querySelector('.search-tag-item[data-tag-id="'+e+'"] .tag-expand-arrow'))&&n.classList.remove("expanded"));for(var o="",s=0;s<t.length;s++)o+=renderNoteItem(t[s],"");0===t.length&&(o='<div class="search-status" style="padding-left:30px;">'+T("searchNoResult")+"</div>"),a.innerHTML=o,(n=document.querySelector('.search-tag-item[data-tag-id="'+e+'"] .tag-expand-arrow'))&&n.classList.add("expanded")}}function exitSearchMode(){_searchMode=!1,showSearchContainer(!1)}document.addEventListener("input",function(e){if("search-input"===e.target.id){var t=e.target.value.trim();_searchTimer&&clearTimeout(_searchTimer);var a=++_searchId;if(t){_searchMode=!0;var n=document.getElementById("search-results");n&&(n.innerHTML='<div class="search-status">'+T("searching")+"</div>"),showSearchContainer(!0),_searchTimer=setTimeout(function(){postMsg({name:"search",query:t,searchId:a})},400)}else _searchMode&&exitSearchMode()}}),document.addEventListener("keydown",function(e){if("Escape"===e.key){var t=document.getElementById("search-input");t&&t.value&&(t.value="",_searchMode&&exitSearchMode())}});
|