joplin-plugin-explorer 1.5.6 → 1.5.7
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/package.json +1 -1
- package/publish/manifest.json +1 -1
- package/publish/plugin.jpl +0 -0
- package/publish/webview/panel.js +1 -1
package/package.json
CHANGED
package/publish/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 1,
|
|
3
3
|
"id": "com.github.joplin-explorer",
|
|
4
4
|
"app_min_version": "2.6.0",
|
|
5
|
-
"version": "1.5.
|
|
5
|
+
"version": "1.5.7",
|
|
6
6
|
"name": "Joplin Explorer",
|
|
7
7
|
"description": "A unified sidebar that displays notebooks and notes together in a single tree view",
|
|
8
8
|
"author": "lim0513",
|
package/publish/plugin.jpl
CHANGED
|
Binary file
|
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||""}postMsg({name:"panelReady"}),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 d=document.createElement("div");d.id="inline-input-overlay",d.className="inline-input-overlay",d.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(d);var s=d.querySelector(".inline-input-field");function o(){var e=s.value;d.remove(),a(e)}function i(){d.remove(),a(null)}s.focus(),s.select(),d.querySelector(".inline-input-ok").addEventListener("click",o),d.querySelector(".inline-input-cancel").addEventListener("click",i),s.addEventListener("keydown",function(e){"Enter"===e.key&&o(),"Escape"===e.key&&i()}),d.addEventListener("click",function(e){e.target===d&&i()})}function animateExpand(e){e&&(e.classList.remove("anim-expand"),e.offsetWidth,e.classList.add("anim-expand"))}function toggleFolderLocal(e,t){var a=e.classList.toggle("collapsed"),n=document.querySelector('.children[data-folder-id="'+t+'"]');n&&n.classList.toggle("collapsed",a),a||animateExpand(n);var d=e.querySelector(".toggle");d&&(d.textContent=a?"▶":"▼",d.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 expandAllLocal(){var e=document.getElementById("tree-container");if(!e)return[];var t=[];return e.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")&&!e.classList.contains("tag-folder")){var a=e.dataset.id,n=document.querySelector('.children[data-folder-id="'+a+'"]'),d=n&&n.querySelector(".tree-item.folder"),s=e.querySelector(".toggle");d?(e.classList.remove("collapsed"),n&&n.classList.remove("collapsed"),s&&(s.textContent="▼",s.classList.add("expanded"))):(e.classList.add("collapsed"),n&&n.classList.add("collapsed"),s&&(s.textContent="▶",s.classList.remove("expanded")),a&&t.push(a))}}),t}function applyCollapsedSet(e){for(var t={},a=0;a<e.length;a++)t[e[a]]=!0;var n=[],d=document.getElementById("tree-container");return d?(d.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")&&!e.classList.contains("tag-folder")){var a=e.dataset.id,d=document.querySelector('.children[data-folder-id="'+a+'"]'),s=e.querySelector(".toggle"),o=!!t[a];e.classList.toggle("collapsed",o),d&&d.classList.toggle("collapsed",o),s&&(s.textContent=o?"▶":"▼",s.classList.toggle("expanded",!o)),o&&a&&n.push(a)}}),n):n}_observer.observe(document.body,{childList:!0,subtree:!0});var _collapseSnapshot=null;function expandAncestorsLocal(e){for(var t=e.closest(".children");t;){t.classList.remove("collapsed");var a=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+t.dataset.folderId+'"]');if(a){a.classList.remove("collapsed");var n=a.querySelector(".toggle");n&&(n.textContent="▼",n.classList.add("expanded"))}t=t.parentElement?t.parentElement.closest(".children"):null}}var _hoverTimer=null,_hoverNoteId="";function hidePreview(){_hoverTimer&&(clearTimeout(_hoverTimer),_hoverTimer=null),_hoverNoteId="";var e=document.getElementById("note-preview");e&&e.remove()}function hoverPreviewEnabled(){var e=document.getElementById("notes-in-list-root");return!e||"0"!==e.dataset.hoverPreview}function showPreview(e){if(e.id===_hoverNoteId&&!document.getElementById("ctx-menu")){var t=document.querySelector('.tree-item.note[data-id="'+e.id+'"]');if(t&&t.matches(":hover")){var a=document.getElementById("note-preview");a&&a.remove();var n=document.createElement("div");n.id="note-preview";var d=document.createElement("div");d.className="note-preview-title",d.textContent=e.title,n.appendChild(d);var s=document.createElement("div");s.className="note-preview-meta";for(var o=[T("pvType")+": "+(e.isTodo?T("pvTodo"):T("pvNote"))+" · "+T("pvSize")+": "+(e.size||0)+" "+T("pvChars"),T("pvCreated")+": "+m(e.created),T("pvUpdated")+": "+m(e.updated)],i=0;i<o.length;i++){var r=document.createElement("div");r.textContent=o[i],s.appendChild(r)}n.appendChild(s);var l=document.createElement("div");l.className="note-preview-body",l.textContent=e.snippet||"",e.snippet&&n.appendChild(l),document.body.appendChild(n);var c=t.getBoundingClientRect(),v=n.getBoundingClientRect(),p=c.bottom+4;p+v.height>window.innerHeight-8&&(p=Math.max(8,c.top-v.height-4)),n.style.top=p+"px",n.style.left=Math.max(8,Math.min(c.left+20,window.innerWidth-v.width-8))+"px"}}function m(e){if(!e)return"";var t=new Date(e);return t.getFullYear()+"-"+("0"+(t.getMonth()+1)).slice(-2)+"-"+("0"+t.getDate()).slice(-2)+" "+("0"+t.getHours()).slice(-2)+":"+("0"+t.getMinutes()).slice(-2)}}document.addEventListener("mouseover",function(e){if(hoverPreviewEnabled())if(document.getElementById("ctx-menu"))hidePreview();else{var t=e.target.closest?e.target.closest(".tree-item.note"):null;if(t){var a=t.dataset.id;a&&a!==_hoverNoteId&&(hidePreview(),_hoverNoteId=a,_hoverTimer=setTimeout(function(){_hoverNoteId!==a||document.querySelector(".tree-item.dragging")||postMsg({name:"notePreview",id:a})},450))}else hidePreview()}}),document.addEventListener("scroll",function(){hidePreview()},!0),document.addEventListener("mousedown",function(){hidePreview()}),document.addEventListener("dragstart",function(){hidePreview()}),window.addEventListener("blur",function(){var e=document.getElementById("ctx-menu");e&&e.remove(),hidePreview()}),document.addEventListener("click",function(e){var t=e.target.closest(".ctx-item");if(t){if(t.dataset.msg){postMsg({name:t.dataset.msg});var a=document.getElementById("ctx-menu");return void(a&&a.remove())}if(t.classList.contains("ctx-drill")){var n=document.getElementById("ctx-menu"),d=n?n.querySelector(".ctx-export-template"):null;return void(n&&d&&(window._ctxMainHtml=n.innerHTML,n.innerHTML='<div class="ctx-item ctx-back">◂ '+(d.dataset.title||"")+'</div><div class="ctx-sep"></div>'+d.innerHTML))}if(t.classList.contains("ctx-back")){var s=document.getElementById("ctx-menu");return void(s&&window._ctxMainHtml&&(s.innerHTML=window._ctxMainHtml))}if(!t.dataset.action)return;postMsg({name:"contextMenu",action:t.dataset.action,id:t.dataset.id,itemType:t.dataset.type,tagId:t.dataset.tagId,format:t.dataset.format});var o=document.getElementById("ctx-menu");o&&o.remove()}else{var i=document.getElementById("ctx-menu");i&&i.remove();var r=e.target.closest(".shared-badge");if(r){var l=r.closest(".tree-item");l&&l.dataset.id&&postMsg({name:"contextMenu",action:"publishNote",id:l.dataset.id,itemType:"note"})}else{var c=e.target.closest(".search-tag-item");if(c)c.dataset.tagId&&postMsg({name:"loadTagNotes",tagId:c.dataset.tagId});else{var v=e.target.closest(".search-folder-item");if(v)v.dataset.folderId&&postMsg({name:"locateFolder",folderId:v.dataset.folderId});else{var p=e.target.closest(".pinned-section-header");if(p){var m=p.classList.toggle("collapsed"),g=document.getElementById("pinned-body");g&&g.classList.toggle("collapsed",m),m||animateExpand(g);var u=p.querySelector(".toggle");return u&&(u.textContent=m?"▶":"▼"),void postMsg({name:"togglePinnedCollapse"})}var f=e.target.closest(".tags-section-header");if(f){var h=f.classList.toggle("collapsed"),y=document.getElementById("tags-body");y&&y.classList.toggle("collapsed",h),h||animateExpand(y);var x=f.querySelector(".toggle");return x&&(x.textContent=h?"▶":"▼"),void postMsg({name:"toggleTagsSection"})}var L=e.target.closest(".smart-section-header");if(L){var I=L.classList.toggle("collapsed"),E=document.getElementById("smart-body");E&&E.classList.toggle("collapsed",I),I||animateExpand(E);var b=L.querySelector(".toggle");return b&&(b.textContent=I?"▶":"▼"),void postMsg({name:"toggleSmartSection"})}var S=e.target.closest(".smart-folder");if(S){var w=S.dataset.smartId,M=document.querySelector('.smart-children[data-smart-id="'+w+'"]');if(!M)return;var N=M.classList.toggle("collapsed");S.classList.toggle("collapsed",N),N||animateExpand(M);var _=S.querySelector(".toggle");return _&&(_.textContent=N?"▶":"▼"),void(N||postMsg({name:"smartFolderNotes",smartId:w,query:S.dataset.query}))}var q=e.target.closest(".trash-section-header");if(q){var C=q.classList.toggle("collapsed"),B=document.getElementById("trash-children");B&&B.classList.toggle("collapsed",C),C||animateExpand(B);var D=q.querySelector(".toggle");return D&&(D.textContent=C?"▶":"▼"),postMsg({name:"toggleTrashSection"}),void(C||!B||B.dataset.loaded||postMsg({name:"trashNotes"}))}var A=e.target.closest(".tag-folder");if(A){var H=A.dataset.tagId,k=document.querySelector('.tag-children[data-tag-id="'+H+'"]');if(!k)return;var F=k.classList.toggle("collapsed");A.classList.toggle("collapsed",F),F||animateExpand(k);var R=A.querySelector(".toggle");return R&&(R.textContent=F?"▶":"▼"),void(F||k.dataset.loaded||postMsg({name:"tagFolderNotes",tagId:H}))}var P=e.target.closest(".search-section-header");if(P){var O=document.getElementById("search-section-"+P.dataset.section);if(O){var Y=P.querySelector(".section-toggle");O.classList.contains("collapsed")?(O.classList.remove("collapsed"),Y&&(Y.textContent="▼")):(O.classList.add("collapsed"),Y&&(Y.textContent="▶"))}}else{var j=e.target.closest(".tree-item");if(j){if("1"===j.dataset.trash){if("folder"===j.dataset.type){var J=document.querySelector('.trash-folder-children[data-folder-id="'+j.dataset.id+'"]');if(J){var W=J.classList.toggle("collapsed");W||animateExpand(J);var z=j.querySelector(".toggle");z&&(z.textContent=W?"▶":"▼"),W||J.dataset.loaded||postMsg({name:"trashFolderNotes",folderId:j.dataset.id})}}else"note"===j.dataset.type&&postMsg({name:"openNote",id:j.dataset.id});return}var V=j.dataset.type,U=j.dataset.id,X=j.classList.contains("pinned-item");"note"===V?(document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),j.classList.add("selected"),postMsg({name:"openNote",id:U})):"folder"===V&&(X?postMsg({name:"locatePinnedFolder",folderId:U}):(toggleFolderLocal(j,U),postMsg({name:"toggleFolder",id:U})))}else{var $=e.target.closest("button");if($)switch($.id){case"btn-new":var K=document.getElementById("ctx-menu");if(K){K.remove();break}var G=document.getElementById("btn-new");if(!G)break;var Q=G.getBoundingClientRect();document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+Q.left+"px;top:"+(Q.bottom+2)+'px;"><div class="ctx-item" data-msg="newNotebook"><span class="ctx-icon">📁</span>'+T("newNotebook")+'</div><div class="ctx-item" data-msg="newNote"><span class="ctx-icon">📝</span>'+T("newNote")+'</div><div class="ctx-item" data-msg="newTodo"><span class="ctx-icon">☐</span>'+T("newTodo")+"</div></div>");break;case"btn-sort":postMsg({name:"cycleSort"});break;case"btn-collapse-all":var Z=document.getElementById("btn-collapse-all");if(Z&&"expand"===Z.dataset.mode){var ee,te=document.getElementById("notes-in-list-root"),ae=te&&te.dataset.expandMode||"restore";if("all"===ae)ee=applyCollapsedSet([]);else if("restore"===ae){var ne=_collapseSnapshot;if(!ne&&te)try{ne=JSON.parse(te.dataset.collapseSnapshot||"null")}catch(e){ne=null}ee=Array.isArray(ne)?applyCollapsedSet(ne):expandAllLocal()}else ee=expandAllLocal();postMsg({name:"expandAll",collapsedIds:ee}),Z.dataset.mode="collapse",Z.textContent="▲",Z.title=T("collapseAll")}else{var de=[];document.querySelectorAll("#tree-container .tree-item.folder").forEach(function(e){e.classList.contains("pinned-item")||e.classList.contains("tag-folder")||e.classList.contains("collapsed")&&e.dataset.id&&de.push(e.dataset.id)}),_collapseSnapshot=de,collapseAllLocal(),postMsg({name:"collapseAll",prevCollapsed:de}),Z&&(Z.dataset.mode="expand",Z.textContent="▼",Z.title=T("expandAll"))}break;case"btn-refresh":postMsg({name:"refreshView"});break;case"btn-sync":$.disabled||($.disabled=!0,$.classList.add("syncing"),$.textContent="🔄 "+T("syncing"),postMsg({name:"sync"}))}}}}}}}}),document.addEventListener("contextmenu",function(e){hidePreview();var t=document.getElementById("ctx-menu");if(t&&t.remove(),e.target.closest(".trash-section-header"))return e.preventDefault(),void document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;"><div class="ctx-item ctx-danger" data-action="emptyTrash" data-type="trashSection" data-id="trash">'+T("ctxEmptyTrash")+"</div></div>");var a=e.target.closest(".tree-item");if(a){e.preventDefault();var n=a.dataset.type,d=a.dataset.id,s="",o=a.querySelector(".label");o&&(s=o.textContent);var i='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("1"===a.dataset.trash){var r="folder"===n?"trashFolder":"trashNote";i+='<div class="ctx-item" data-action="restoreItem" data-id="'+d+'" data-type="'+r+'">'+T("ctxRestoreNote")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="permanentDeleteItem" data-id="'+d+'" data-type="'+r+'">'+T("ctxPermanentDelete")+"</div>"}else if("folder"===n){var l=isPinned(d);i+='<div class="ctx-item" data-action="'+(l?"unpinFolder":"pinFolder")+'" data-id="'+d+'" data-type="folder">'+T(l?"ctxUnpin":"ctxPin")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="newNote" data-id="'+d+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",i+='<div class="ctx-item" data-action="newTodo" data-id="'+d+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",i+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+d+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="renameFolder" data-id="'+d+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",i+='<div class="ctx-item" data-action="exportFolder" data-id="'+d+'" data-type="folder">'+T("ctxExportFolder")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteFolder" data-id="'+d+'" data-type="folder">'+T("ctxDeleteFolder")+"</div>"}else if("note"===n){var c=isPinned(d);i+='<div class="ctx-item" data-action="'+(c?"unpinNote":"pinNote")+'" data-id="'+d+'" data-type="note">'+T(c?"ctxUnpin":"ctxPin")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="openNote" data-id="'+d+'" data-type="note">'+T("ctxOpenNote")+"</div>",i+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+d+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="setTags" data-id="'+d+'" data-type="note">'+T("ctxSetTags")+"</div>",i+='<div class="ctx-item" data-action="switchNoteType" data-id="'+d+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(i+='<div class="ctx-item" data-action="toggleTodo" data-id="'+d+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),i+='<div class="ctx-item" data-action="moveToFolderDialog" data-id="'+d+'" data-type="note">'+T("ctxMoveToFolder")+"</div>",i+='<div class="ctx-item" data-action="duplicateNote" data-id="'+d+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="copyLink" data-id="'+d+'" data-type="note">'+T("ctxCopyLink")+"</div>",i+='<div class="ctx-item" data-action="copyExternalLink" data-id="'+d+'" data-type="note">'+T("ctxCopyExternalLink")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="publishNote" data-id="'+d+'" data-type="note">'+T("ctxPublishNote")+"</div>",i+='<div class="ctx-item ctx-drill">'+T("ctxExport")+'<span class="ctx-sub-arrow">▸</span></div>',i+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExport")+'"><div class="ctx-item" data-action="exportPdf" data-id="'+d+'" data-type="note">PDF</div><div class="ctx-item" data-action="exportNote" data-format="md" data-id="'+d+'" data-type="note">Markdown</div><div class="ctx-item" data-action="exportNote" data-format="md_frontmatter" data-id="'+d+'" data-type="note">Markdown + Front Matter</div><div class="ctx-item" data-action="exportNote" data-format="jex" data-id="'+d+'" data-type="note">JEX</div><div class="ctx-item" data-action="exportNote" data-format="html" data-id="'+d+'" data-type="note">HTML</div></div>',i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="renameNote" data-id="'+d+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",i+='<div class="ctx-item" data-action="noteInfo" data-id="'+d+'" data-type="note">'+T("ctxNoteInfo")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+d+'" data-type="note">'+T("ctxDeleteNote")+"</div>",a.dataset.tagId&&(i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="untagNote" data-id="'+d+'" data-type="note" data-tag-id="'+a.dataset.tagId+'">'+T("ctxUntagNote")+"</div>")}else if("tag"===n){var v=a.dataset.tagId;i+='<div class="ctx-item" data-action="renameTag" data-id="'+v+'" data-type="tag">'+T("ctxRenameTag")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteTag" data-id="'+v+'" data-type="tag">'+T("ctxDeleteTag")+"</div>"}i+="</div>",document.body.insertAdjacentHTML("beforeend",i);var p=document.getElementById("ctx-menu"),m=p.getBoundingClientRect();m.right>window.innerWidth&&(p.style.left=window.innerWidth-m.width-4+"px"),m.bottom>window.innerHeight&&(p.style.top=window.innerHeight-m.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("tagFolderNotes"===t.name){var n=document.querySelector('.tag-children[data-tag-id="'+t.tagId+'"]');if(n){n.dataset.loaded="1";for(var d="",s=0;s<t.notes.length;s++){var o=t.notes[s],i=o.is_todo?o.todo_completed?"☑":"☐":"📝";d+='<div class="tree-item note tag-note" data-id="'+o.id+'" data-type="note" data-tag-id="'+t.tagId+'" data-todo="'+(o.is_todo?1:0)+'"><span class="icon note-icon">'+i+'</span><span class="label">'+escapeHtml(o.title)+"</span></div>"}t.notes.length||(d='<div class="tag-empty">—</div>'),n.innerHTML=d}}else if("trashNotes"===t.name){var r=document.getElementById("trash-children");if(r){r.dataset.loaded="1";for(var l="",c=t.folders||[],v=0;v<c.length;v++){var p=c[v],m=p.depth||0;l+='<div class="tree-item folder trash-note" style="padding-left:'+(34+16*m)+'px" data-id="'+p.id+'" data-type="folder" data-trash="1" data-depth="'+m+'"><span class="toggle">'+(p.hasNotes?"▶":"")+'</span><span class="icon">📁</span><span class="label">'+escapeHtml(p.title)+"</span></div>",p.hasNotes&&(l+='<div class="trash-folder-children collapsed" data-folder-id="'+p.id+'" data-depth="'+m+'"></div>')}for(var g=t.notes||[],u=0;u<g.length;u++){var f=g[u],h=f.is_todo?f.todo_completed?"☑":"☐":"📝";l+='<div class="tree-item note trash-note" style="padding-left:34px" data-id="'+f.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+h+'</span><span class="label">'+escapeHtml(f.title)+"</span></div>"}l||(l='<div class="tag-empty">—</div>'),r.innerHTML=l}}else if("smartFolderNotes"===t.name){var y=document.querySelector('.smart-children[data-smart-id="'+t.smartId+'"]');if(y){for(var x="",L=0;L<t.notes.length;L++){var I=t.notes[L],E=I.is_todo?I.todo_completed?"☑":"☐":"📝";x+='<div class="tree-item note smart-note" style="padding-left:44px" data-id="'+I.id+'" data-type="note" data-todo="'+(I.is_todo?1:0)+'"><span class="icon note-icon">'+E+'</span><span class="label">'+escapeHtml(I.title)+"</span></div>"}t.notes.length||(x='<div class="tag-empty">—</div>'),y.innerHTML=x}}else if("notePreview"===t.name)showPreview(t);else if("trashFolderNotes"===t.name){var b=document.querySelector('.trash-folder-children[data-folder-id="'+t.folderId+'"]');if(b){b.dataset.loaded="1";for(var S=34+16*(parseInt(b.dataset.depth||"0",10)+1),w="",M=0;M<t.notes.length;M++){var N=t.notes[M],_=N.is_todo?N.todo_completed?"☑":"☐":"📝";w+='<div class="tree-item note trash-note" style="padding-left:'+S+'px" data-id="'+N.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+_+'</span><span class="label">'+escapeHtml(N.title)+"</span></div>"}t.notes.length||(w='<div class="tag-empty" style="padding-left:'+S+'px">—</div>'),b.innerHTML=w}}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&&(expandAncestorsLocal(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 q=document.getElementById("search-input");q&&(q.value=""),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var C=document.getElementById("search-input");C&&(C.value=""),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){var e=document.querySelector('.tree-item.folder[data-id="'+t.folderId+'"]');e&&(expandAncestorsLocal(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 B=document.createElement("textarea");B.value=t.text,document.body.appendChild(B),B.select(),document.execCommand("copy"),B.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var D=document.querySelector('.tree-item.note[data-id="'+t.id+'"]');D&&(D.classList.add("selected"),D.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 d=e.querySelector(".note-icon");d&&(d.textContent=t.icon),e.querySelectorAll(".todo-pie, .shared-badge").forEach(function(e){e.remove()}),t.badges&&e.insertAdjacentHTML("beforeend",t.badges)})}}),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)if(t.closest(".trash-children")||t.closest(".smart-section-body")||t.classList.contains("tag-folder"))e.preventDefault();else{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")}}});var _dragScrollDir=0,_dragScrollRaf=null;function dragScrollStep(){var e=document.getElementById("tree-container");e&&_dragScrollDir?(e.scrollTop+=_dragScrollDir,_dragScrollRaf=requestAnimationFrame(dragScrollStep)):_dragScrollRaf=null}function updateDragScroll(e){var t=document.getElementById("tree-container");if(t){var a=t.getBoundingClientRect(),n=a.bottom,d=document.getElementById("drop-zone-empty");if(d&&t.classList.contains("dragging-active")){var s=d.getBoundingClientRect();s.height>0&&s.top>a.top&&(n=s.top)}var o=0;e<a.top+40?o=-Math.ceil((a.top+40-e)/4):e>n?o=0:e>n-40&&(o=Math.ceil((e-(n-40))/4)),_dragScrollDir=o,o&&!_dragScrollRaf&&(_dragScrollRaf=requestAnimationFrame(dragScrollStep))}else _dragScrollDir=0}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(){_dragScrollDir=0,clearDropIndicators();var e=document.getElementById("tree-container");e&&e.classList.remove("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){document.querySelector(".tree-item.dragging")&&updateDragScroll(e.clientY);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{var d=t.closest(".tag-folder");if(d)document.querySelector(".tree-item.note.dragging")&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),d.classList.add("drop-target"));else if(!(t.closest(".tags-section-body")||t.closest(".tags-section-header")||t.closest(".trash-children")||t.closest(".trash-section-header")||t.closest(".smart-section-body")||t.closest(".smart-section-header"))&&a){var s=document.querySelector(".tree-item.dragging");if(!s||!s.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var o=a.dataset.type,i=a.getBoundingClientRect(),r=e.clientY-i.top,l=i.height;"folder"===o?r<.25*l?a.classList.add("drop-above"):r>.75*l?a.classList.add("drop-below"):a.classList.add("drop-target"):"manual"===currentSortMode()?r<.5*l?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 d=a.id,s=a.type,o=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!o)return postMsg({name:"dragToEmpty",dragId:d,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!o)return"note"===s?postMsg({name:"contextMenu",action:"pinNote",id:d,itemType:"note"}):"folder"===s&&postMsg({name:"contextMenu",action:"pinFolder",id:d,itemType:"folder"}),void endDrag();if(t&&t.closest(".pinned-section-body")&&o){var i=n&&n.classList.contains("pinned-item")?n:null;if(i&&i.dataset.id!==d){var r=i.getBoundingClientRect(),l=e.clientY-r.top<.5*r.height?"before":"after";postMsg({name:"reorderPinned",dragId:d,dragType:s,targetId:i.dataset.id,position:l})}endDrag()}else{var c=t?t.closest(".tag-folder"):null;if(c)return"note"===s&&postMsg({name:"tagNoteAdd",tagId:c.dataset.tagId,noteId:d}),void endDrag();if(t&&(t.closest(".tags-section-body")||t.closest(".tags-section-header")||t.closest(".trash-children")||t.closest(".trash-section-header")||t.closest(".smart-section-body")||t.closest(".smart-section-header")))endDrag();else if(o)endDrag();else if(n){var v=n.dataset.id,p=n.dataset.type;if(d!==v){var m=n.getBoundingClientRect(),g=e.clientY-m.top,u=m.height;postMsg("folder"===p?g>=.25*u&&g<=.75*u?{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:"into"}:{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:g<.25*u?"above":"below"}:"note"===s?{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:g<.5*u?"above":"below"}:{name:"dragDrop",dragId:d,dragType:s,targetId:v,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 d=document.getElementById("search-results");if(d){showSearchContainer(!0);var s=e.length+t.length+a.length;if(0!==s){var o='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){o+=g("📁",T("searchSectionFolders"),a.length,"folders"),o+='<div class="search-section-body" id="search-section-folders">';for(var i=0;i<a.length;i++){var r=a[i],l=r.iconEmoji||"📁";o+='<div class="search-result-item search-folder-item" data-folder-id="'+r.id+'">',o+='<span class="icon">'+l+"</span>",o+='<div class="search-result-content">',o+='<div class="search-result-title">'+highlightText(r.title,n)+"</div>",o+="</div></div>"}o+="</div>"}if(e.length>0){o+=g("📝",T("searchSectionNotes"),e.length,"notes"),o+='<div class="search-section-body" id="search-section-notes">';for(var c=0;c<e.length;c++)o+=renderNoteItem(e[c],n);o+="</div>"}if(t.length>0){o+=g("🏷️",T("searchSectionTags"),t.length,"tags"),o+='<div class="search-section-body" id="search-section-tags">';for(var v=0;v<t.length;v++){var p=t[v],m=T("searchTagNoteCount").replace("{count}",p.noteCount);o+='<div class="search-result-item search-tag-item" data-tag-id="'+p.id+'">',o+='<span class="icon">🏷️</span>',o+='<div class="search-result-content">',o+='<div class="search-result-title">'+highlightText(p.title,n)+"</div>",o+='<div class="search-result-folder">'+m+"</div>",o+="</div>",o+='<span class="tag-expand-arrow">▶</span>',o+="</div>",o+='<div class="tag-notes-container" id="tag-notes-'+p.id+'"></div>'}o+="</div>"}d.innerHTML=o,_searchMode=!0}else d.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function g(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 d="",s=0;s<t.length;s++)d+=renderNoteItem(t[s],"");0===t.length&&(d='<div class="search-status" style="padding-left:30px;">'+T("searchNoResult")+"</div>"),a.innerHTML=d,(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||""}postMsg({name:"panelReady"}),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 d=document.createElement("div");d.id="inline-input-overlay",d.className="inline-input-overlay",d.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(d);var s=d.querySelector(".inline-input-field");function o(){var e=s.value;d.remove(),a(e)}function i(){d.remove(),a(null)}s.focus(),s.select(),d.querySelector(".inline-input-ok").addEventListener("click",o),d.querySelector(".inline-input-cancel").addEventListener("click",i),s.addEventListener("keydown",function(e){"Enter"===e.key&&o(),"Escape"===e.key&&i()}),d.addEventListener("click",function(e){e.target===d&&i()})}function animateExpand(e){e&&(e.classList.remove("anim-expand"),e.offsetWidth,e.classList.add("anim-expand"))}function toggleFolderLocal(e,t){var a=e.classList.toggle("collapsed"),n=document.querySelector('.children[data-folder-id="'+t+'"]');n&&n.classList.toggle("collapsed",a),a||animateExpand(n);var d=e.querySelector(".toggle");d&&(d.textContent=a?"▶":"▼",d.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 expandAllLocal(){var e=document.getElementById("tree-container");if(!e)return[];var t=[];return e.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")&&!e.classList.contains("tag-folder")){var a=e.dataset.id,n=document.querySelector('.children[data-folder-id="'+a+'"]'),d=n&&n.querySelector(".tree-item.folder"),s=e.querySelector(".toggle");d?(e.classList.remove("collapsed"),n&&n.classList.remove("collapsed"),s&&(s.textContent="▼",s.classList.add("expanded"))):(e.classList.add("collapsed"),n&&n.classList.add("collapsed"),s&&(s.textContent="▶",s.classList.remove("expanded")),a&&t.push(a))}}),t}function applyCollapsedSet(e){for(var t={},a=0;a<e.length;a++)t[e[a]]=!0;var n=[],d=document.getElementById("tree-container");return d?(d.querySelectorAll(".tree-item.folder").forEach(function(e){if(!e.classList.contains("pinned-item")&&!e.classList.contains("tag-folder")){var a=e.dataset.id,d=document.querySelector('.children[data-folder-id="'+a+'"]'),s=e.querySelector(".toggle"),o=!!t[a];e.classList.toggle("collapsed",o),d&&d.classList.toggle("collapsed",o),s&&(s.textContent=o?"▶":"▼",s.classList.toggle("expanded",!o)),o&&a&&n.push(a)}}),n):n}_observer.observe(document.body,{childList:!0,subtree:!0});var _collapseSnapshot=null;function expandAncestorsLocal(e){for(var t=e.closest(".children");t;){t.classList.remove("collapsed");var a=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+t.dataset.folderId+'"]');if(a){a.classList.remove("collapsed");var n=a.querySelector(".toggle");n&&(n.textContent="▼",n.classList.add("expanded"))}t=t.parentElement?t.parentElement.closest(".children"):null}}var _hoverTimer=null,_hoverNoteId="";function hidePreview(){_hoverTimer&&(clearTimeout(_hoverTimer),_hoverTimer=null),_hoverNoteId="";var e=document.getElementById("note-preview");e&&e.remove()}function hoverPreviewEnabled(){var e=document.getElementById("notes-in-list-root");return!e||"0"!==e.dataset.hoverPreview}function showPreview(e){if(e.id===_hoverNoteId&&!document.getElementById("ctx-menu")){var t=document.querySelector('.tree-item.note[data-id="'+e.id+'"]');if(t&&t.matches(":hover")){var a=document.getElementById("note-preview");a&&a.remove();var n=document.createElement("div");n.id="note-preview";var d=document.createElement("div");d.className="note-preview-title",d.textContent=e.title,n.appendChild(d);var s=document.createElement("div");s.className="note-preview-meta";for(var o=[T("pvType")+": "+(e.isTodo?T("pvTodo"):T("pvNote"))+" · "+T("pvSize")+": "+(e.size||0)+" "+T("pvChars"),T("pvCreated")+": "+p(e.created),T("pvUpdated")+": "+p(e.updated)],i=0;i<o.length;i++){var r=document.createElement("div");r.textContent=o[i],s.appendChild(r)}n.appendChild(s);var c=document.createElement("div");c.className="note-preview-body",c.textContent=e.snippet||"",e.snippet&&n.appendChild(c),document.body.appendChild(n);var l=t.getBoundingClientRect(),v=n.getBoundingClientRect(),m=l.bottom+4;m+v.height>window.innerHeight-8&&(m=Math.max(8,l.top-v.height-4)),n.style.top=m+"px",n.style.left=Math.max(8,Math.min(l.left+20,window.innerWidth-v.width-8))+"px"}}function p(e){if(!e)return"";var t=new Date(e);return t.getFullYear()+"-"+("0"+(t.getMonth()+1)).slice(-2)+"-"+("0"+t.getDate()).slice(-2)+" "+("0"+t.getHours()).slice(-2)+":"+("0"+t.getMinutes()).slice(-2)}}document.addEventListener("mouseover",function(e){if(hoverPreviewEnabled())if(document.getElementById("ctx-menu"))hidePreview();else{var t=e.target.closest?e.target.closest(".tree-item.note"):null;if(t){var a=t.dataset.id;a&&a!==_hoverNoteId&&(hidePreview(),_hoverNoteId=a,_hoverTimer=setTimeout(function(){_hoverNoteId!==a||document.querySelector(".tree-item.dragging")||postMsg({name:"notePreview",id:a})},450))}else hidePreview()}}),document.addEventListener("scroll",function(){hidePreview()},!0),document.addEventListener("mousedown",function(){hidePreview()}),document.addEventListener("dragstart",function(){hidePreview()}),window.addEventListener("blur",function(){var e=document.getElementById("ctx-menu");e&&e.remove(),hidePreview()}),document.addEventListener("click",function(e){var t=e.target.closest(".ctx-item");if(t){if(t.dataset.msg){postMsg({name:t.dataset.msg});var a=document.getElementById("ctx-menu");return void(a&&a.remove())}if(t.classList.contains("ctx-drill")){var n=document.getElementById("ctx-menu"),d=n?n.querySelector(".ctx-export-template"):null;return void(n&&d&&(window._ctxMainHtml=n.innerHTML,n.innerHTML='<div class="ctx-item ctx-back">◂ '+(d.dataset.title||"")+'</div><div class="ctx-sep"></div>'+d.innerHTML))}if(t.classList.contains("ctx-back")){var s=document.getElementById("ctx-menu");return void(s&&window._ctxMainHtml&&(s.innerHTML=window._ctxMainHtml))}if(!t.dataset.action)return;postMsg({name:"contextMenu",action:t.dataset.action,id:t.dataset.id,itemType:t.dataset.type,tagId:t.dataset.tagId,format:t.dataset.format});var o=document.getElementById("ctx-menu");o&&o.remove()}else{var i=document.getElementById("ctx-menu");i&&i.remove();var r=e.target.closest(".shared-badge");if(r){var c=r.closest(".tree-item");c&&c.dataset.id&&postMsg({name:"contextMenu",action:"publishNote",id:c.dataset.id,itemType:"note"})}else{var l=e.target.closest(".search-tag-item");if(l)l.dataset.tagId&&postMsg({name:"loadTagNotes",tagId:l.dataset.tagId});else{var v=e.target.closest(".search-folder-item");if(v)v.dataset.folderId&&postMsg({name:"locateFolder",folderId:v.dataset.folderId});else{var m=e.target.closest(".pinned-section-header");if(m){var p=m.classList.toggle("collapsed"),g=document.getElementById("pinned-body");g&&g.classList.toggle("collapsed",p),p||animateExpand(g);var u=m.querySelector(".toggle");return u&&(u.textContent=p?"▶":"▼"),void postMsg({name:"togglePinnedCollapse"})}var f=e.target.closest(".tags-section-header");if(f){var h=f.classList.toggle("collapsed"),y=document.getElementById("tags-body");y&&y.classList.toggle("collapsed",h),h||animateExpand(y);var x=f.querySelector(".toggle");return x&&(x.textContent=h?"▶":"▼"),void postMsg({name:"toggleTagsSection"})}var L=e.target.closest(".smart-section-header");if(L){var I=L.classList.toggle("collapsed"),E=document.getElementById("smart-body");E&&E.classList.toggle("collapsed",I),I||animateExpand(E);var b=L.querySelector(".toggle");return b&&(b.textContent=I?"▶":"▼"),void postMsg({name:"toggleSmartSection"})}var S=e.target.closest(".smart-folder");if(S){var w=S.dataset.smartId,M=document.querySelector('.smart-children[data-smart-id="'+w+'"]');if(!M)return;var N=M.classList.toggle("collapsed");S.classList.toggle("collapsed",N),N||animateExpand(M);var _=S.querySelector(".toggle");return _&&(_.textContent=N?"▶":"▼"),void(N||postMsg({name:"smartFolderNotes",smartId:w,query:S.dataset.query}))}var q=e.target.closest(".trash-section-header");if(q){var C=q.classList.toggle("collapsed"),B=document.getElementById("trash-children");B&&B.classList.toggle("collapsed",C),C||animateExpand(B);var D=q.querySelector(".toggle");return D&&(D.textContent=C?"▶":"▼"),postMsg({name:"toggleTrashSection"}),void(C||!B||B.dataset.loaded||postMsg({name:"trashNotes"}))}var A=e.target.closest(".tag-folder");if(A){var H=A.dataset.tagId,k=document.querySelector('.tag-children[data-tag-id="'+H+'"]');if(!k)return;var F=k.classList.toggle("collapsed");A.classList.toggle("collapsed",F),F||animateExpand(k);var R=A.querySelector(".toggle");return R&&(R.textContent=F?"▶":"▼"),void(F||k.dataset.loaded||postMsg({name:"tagFolderNotes",tagId:H}))}var P=e.target.closest(".search-section-header");if(P){var O=document.getElementById("search-section-"+P.dataset.section);if(O){var Y=P.querySelector(".section-toggle");O.classList.contains("collapsed")?(O.classList.remove("collapsed"),Y&&(Y.textContent="▼")):(O.classList.add("collapsed"),Y&&(Y.textContent="▶"))}}else{var j=e.target.closest(".tree-item");if(j){if("1"===j.dataset.trash){if("folder"===j.dataset.type){var J=document.querySelector('.trash-folder-children[data-folder-id="'+j.dataset.id+'"]');if(J){var W=J.classList.toggle("collapsed");W||animateExpand(J);var z=j.querySelector(".toggle");z&&(z.textContent=W?"▶":"▼"),W||J.dataset.loaded||postMsg({name:"trashFolderNotes",folderId:j.dataset.id})}}else"note"===j.dataset.type&&postMsg({name:"openNote",id:j.dataset.id});return}var V=j.dataset.type,U=j.dataset.id,X=j.classList.contains("pinned-item");"note"===V?(document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),j.classList.add("selected"),postMsg({name:"openNote",id:U})):"folder"===V&&(X?postMsg({name:"locatePinnedFolder",folderId:U}):(toggleFolderLocal(j,U),postMsg({name:"toggleFolder",id:U})))}else{var $=e.target.closest("button");if($)switch($.id){case"btn-new":var K=document.getElementById("ctx-menu");if(K){K.remove();break}var G=document.getElementById("btn-new");if(!G)break;var Q=G.getBoundingClientRect();document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+Q.left+"px;top:"+(Q.bottom+2)+'px;"><div class="ctx-item" data-msg="newNotebook"><span class="ctx-icon">📁</span>'+T("newNotebook")+'</div><div class="ctx-item" data-msg="newNote"><span class="ctx-icon">📝</span>'+T("newNote")+'</div><div class="ctx-item" data-msg="newTodo"><span class="ctx-icon">☐</span>'+T("newTodo")+"</div></div>");break;case"btn-sort":postMsg({name:"cycleSort"});break;case"btn-collapse-all":var Z=document.getElementById("btn-collapse-all");if(Z&&"expand"===Z.dataset.mode){var ee,te=document.getElementById("notes-in-list-root"),ae=te&&te.dataset.expandMode||"restore";if("all"===ae)ee=applyCollapsedSet([]);else if("restore"===ae){var ne=_collapseSnapshot;if(!ne&&te)try{ne=JSON.parse(te.dataset.collapseSnapshot||"null")}catch(e){ne=null}ee=Array.isArray(ne)?applyCollapsedSet(ne):expandAllLocal()}else ee=expandAllLocal();postMsg({name:"expandAll",collapsedIds:ee}),Z.dataset.mode="collapse",Z.textContent="▲",Z.title=T("collapseAll")}else{var de=[];document.querySelectorAll("#tree-container .tree-item.folder").forEach(function(e){e.classList.contains("pinned-item")||e.classList.contains("tag-folder")||e.classList.contains("collapsed")&&e.dataset.id&&de.push(e.dataset.id)}),_collapseSnapshot=de,collapseAllLocal(),postMsg({name:"collapseAll",prevCollapsed:de}),Z&&(Z.dataset.mode="expand",Z.textContent="▼",Z.title=T("expandAll"))}break;case"btn-refresh":postMsg({name:"refreshView"});break;case"btn-sync":$.disabled||($.disabled=!0,$.classList.add("syncing"),$.textContent="🔄 "+T("syncing"),postMsg({name:"sync"}))}}}}}}}}),document.addEventListener("contextmenu",function(e){hidePreview();var t=document.getElementById("ctx-menu");if(t&&t.remove(),e.target.closest(".trash-section-header"))return e.preventDefault(),void document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;"><div class="ctx-item ctx-danger" data-action="emptyTrash" data-type="trashSection" data-id="trash">'+T("ctxEmptyTrash")+"</div></div>");var a=e.target.closest(".tree-item");if(a){e.preventDefault();var n=a.dataset.type,d=a.dataset.id;if("smart"!==n){var s="",o=a.querySelector(".label");o&&(s=o.textContent);var i='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("1"===a.dataset.trash){var r="folder"===n?"trashFolder":"trashNote";i+='<div class="ctx-item" data-action="restoreItem" data-id="'+d+'" data-type="'+r+'">'+T("ctxRestoreNote")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="permanentDeleteItem" data-id="'+d+'" data-type="'+r+'">'+T("ctxPermanentDelete")+"</div>"}else if("folder"===n){var c=isPinned(d);i+='<div class="ctx-item" data-action="'+(c?"unpinFolder":"pinFolder")+'" data-id="'+d+'" data-type="folder">'+T(c?"ctxUnpin":"ctxPin")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="newNote" data-id="'+d+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",i+='<div class="ctx-item" data-action="newTodo" data-id="'+d+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",i+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+d+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="renameFolder" data-id="'+d+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",i+='<div class="ctx-item" data-action="exportFolder" data-id="'+d+'" data-type="folder">'+T("ctxExportFolder")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteFolder" data-id="'+d+'" data-type="folder">'+T("ctxDeleteFolder")+"</div>"}else if("note"===n){var l=isPinned(d);i+='<div class="ctx-item" data-action="'+(l?"unpinNote":"pinNote")+'" data-id="'+d+'" data-type="note">'+T(l?"ctxUnpin":"ctxPin")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="openNote" data-id="'+d+'" data-type="note">'+T("ctxOpenNote")+"</div>",i+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+d+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="setTags" data-id="'+d+'" data-type="note">'+T("ctxSetTags")+"</div>",i+='<div class="ctx-item" data-action="switchNoteType" data-id="'+d+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(i+='<div class="ctx-item" data-action="toggleTodo" data-id="'+d+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),i+='<div class="ctx-item" data-action="moveToFolderDialog" data-id="'+d+'" data-type="note">'+T("ctxMoveToFolder")+"</div>",i+='<div class="ctx-item" data-action="duplicateNote" data-id="'+d+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="copyLink" data-id="'+d+'" data-type="note">'+T("ctxCopyLink")+"</div>",i+='<div class="ctx-item" data-action="copyExternalLink" data-id="'+d+'" data-type="note">'+T("ctxCopyExternalLink")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="publishNote" data-id="'+d+'" data-type="note">'+T("ctxPublishNote")+"</div>",i+='<div class="ctx-item ctx-drill">'+T("ctxExport")+'<span class="ctx-sub-arrow">▸</span></div>',i+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExport")+'"><div class="ctx-item" data-action="exportPdf" data-id="'+d+'" data-type="note">PDF</div><div class="ctx-item" data-action="exportNote" data-format="md" data-id="'+d+'" data-type="note">Markdown</div><div class="ctx-item" data-action="exportNote" data-format="md_frontmatter" data-id="'+d+'" data-type="note">Markdown + Front Matter</div><div class="ctx-item" data-action="exportNote" data-format="jex" data-id="'+d+'" data-type="note">JEX</div><div class="ctx-item" data-action="exportNote" data-format="html" data-id="'+d+'" data-type="note">HTML</div></div>',i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="renameNote" data-id="'+d+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",i+='<div class="ctx-item" data-action="noteInfo" data-id="'+d+'" data-type="note">'+T("ctxNoteInfo")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+d+'" data-type="note">'+T("ctxDeleteNote")+"</div>",a.dataset.tagId&&(i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item" data-action="untagNote" data-id="'+d+'" data-type="note" data-tag-id="'+a.dataset.tagId+'">'+T("ctxUntagNote")+"</div>")}else if("tag"===n){var v=a.dataset.tagId;i+='<div class="ctx-item" data-action="renameTag" data-id="'+v+'" data-type="tag">'+T("ctxRenameTag")+"</div>",i+='<div class="ctx-sep"></div>',i+='<div class="ctx-item ctx-danger" data-action="deleteTag" data-id="'+v+'" data-type="tag">'+T("ctxDeleteTag")+"</div>"}if(!((i+="</div>").indexOf("ctx-item")<0)){document.body.insertAdjacentHTML("beforeend",i);var m=document.getElementById("ctx-menu"),p=m.getBoundingClientRect();p.right>window.innerWidth&&(m.style.left=window.innerWidth-p.width-4+"px"),p.bottom>window.innerHeight&&(m.style.top=window.innerHeight-p.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("tagFolderNotes"===t.name){var n=document.querySelector('.tag-children[data-tag-id="'+t.tagId+'"]');if(n){n.dataset.loaded="1";for(var d="",s=0;s<t.notes.length;s++){var o=t.notes[s],i=o.is_todo?o.todo_completed?"☑":"☐":"📝";d+='<div class="tree-item note tag-note" data-id="'+o.id+'" data-type="note" data-tag-id="'+t.tagId+'" data-todo="'+(o.is_todo?1:0)+'"><span class="icon note-icon">'+i+'</span><span class="label">'+escapeHtml(o.title)+"</span></div>"}t.notes.length||(d='<div class="tag-empty">—</div>'),n.innerHTML=d}}else if("trashNotes"===t.name){var r=document.getElementById("trash-children");if(r){r.dataset.loaded="1";for(var c="",l=t.folders||[],v=0;v<l.length;v++){var m=l[v],p=m.depth||0;c+='<div class="tree-item folder trash-note" style="padding-left:'+(34+16*p)+'px" data-id="'+m.id+'" data-type="folder" data-trash="1" data-depth="'+p+'"><span class="toggle">'+(m.hasNotes?"▶":"")+'</span><span class="icon">📁</span><span class="label">'+escapeHtml(m.title)+"</span></div>",m.hasNotes&&(c+='<div class="trash-folder-children collapsed" data-folder-id="'+m.id+'" data-depth="'+p+'"></div>')}for(var g=t.notes||[],u=0;u<g.length;u++){var f=g[u],h=f.is_todo?f.todo_completed?"☑":"☐":"📝";c+='<div class="tree-item note trash-note" style="padding-left:34px" data-id="'+f.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+h+'</span><span class="label">'+escapeHtml(f.title)+"</span></div>"}c||(c='<div class="tag-empty">—</div>'),r.innerHTML=c}}else if("smartFolderNotes"===t.name){var y=document.querySelector('.smart-children[data-smart-id="'+t.smartId+'"]');if(y){for(var x="",L=0;L<t.notes.length;L++){var I=t.notes[L],E=I.is_todo?I.todo_completed?"☑":"☐":"📝";x+='<div class="tree-item note smart-note" style="padding-left:44px" data-id="'+I.id+'" data-type="note" data-todo="'+(I.is_todo?1:0)+'"><span class="icon note-icon">'+E+'</span><span class="label">'+escapeHtml(I.title)+"</span></div>"}t.notes.length||(x='<div class="tag-empty">—</div>'),y.innerHTML=x}}else if("notePreview"===t.name)showPreview(t);else if("trashFolderNotes"===t.name){var b=document.querySelector('.trash-folder-children[data-folder-id="'+t.folderId+'"]');if(b){b.dataset.loaded="1";for(var S=34+16*(parseInt(b.dataset.depth||"0",10)+1),w="",M=0;M<t.notes.length;M++){var N=t.notes[M],_=N.is_todo?N.todo_completed?"☑":"☐":"📝";w+='<div class="tree-item note trash-note" style="padding-left:'+S+'px" data-id="'+N.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+_+'</span><span class="label">'+escapeHtml(N.title)+"</span></div>"}t.notes.length||(w='<div class="tag-empty" style="padding-left:'+S+'px">—</div>'),b.innerHTML=w}}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&&(expandAncestorsLocal(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 q=document.getElementById("search-input");q&&(q.value=""),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var C=document.getElementById("search-input");C&&(C.value=""),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){var e=document.querySelector('.tree-item.folder[data-id="'+t.folderId+'"]');e&&(expandAncestorsLocal(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 B=document.createElement("textarea");B.value=t.text,document.body.appendChild(B),B.select(),document.execCommand("copy"),B.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var D=document.querySelector('.tree-item.note[data-id="'+t.id+'"]');D&&(D.classList.add("selected"),D.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 d=e.querySelector(".note-icon");d&&(d.textContent=t.icon),e.querySelectorAll(".todo-pie, .shared-badge").forEach(function(e){e.remove()}),t.badges&&e.insertAdjacentHTML("beforeend",t.badges)})}}),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)if(t.closest(".trash-children")||t.closest(".smart-section-body")||t.classList.contains("tag-folder"))e.preventDefault();else{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")}}});var _dragScrollDir=0,_dragScrollRaf=null;function dragScrollStep(){var e=document.getElementById("tree-container");e&&_dragScrollDir?(e.scrollTop+=_dragScrollDir,_dragScrollRaf=requestAnimationFrame(dragScrollStep)):_dragScrollRaf=null}function updateDragScroll(e){var t=document.getElementById("tree-container");if(t){var a=t.getBoundingClientRect(),n=a.bottom,d=document.getElementById("drop-zone-empty");if(d&&t.classList.contains("dragging-active")){var s=d.getBoundingClientRect();s.height>0&&s.top>a.top&&(n=s.top)}var o=0;e<a.top+40?o=-Math.ceil((a.top+40-e)/4):e>n?o=0:e>n-40&&(o=Math.ceil((e-(n-40))/4)),_dragScrollDir=o,o&&!_dragScrollRaf&&(_dragScrollRaf=requestAnimationFrame(dragScrollStep))}else _dragScrollDir=0}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(){_dragScrollDir=0,clearDropIndicators();var e=document.getElementById("tree-container");e&&e.classList.remove("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){document.querySelector(".tree-item.dragging")&&updateDragScroll(e.clientY);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{var d=t.closest(".tag-folder");if(d)document.querySelector(".tree-item.note.dragging")&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),d.classList.add("drop-target"));else if(!(t.closest(".tags-section-body")||t.closest(".tags-section-header")||t.closest(".trash-children")||t.closest(".trash-section-header")||t.closest(".smart-section-body")||t.closest(".smart-section-header"))&&a){var s=document.querySelector(".tree-item.dragging");if(!s||!s.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var o=a.dataset.type,i=a.getBoundingClientRect(),r=e.clientY-i.top,c=i.height;"folder"===o?r<.25*c?a.classList.add("drop-above"):r>.75*c?a.classList.add("drop-below"):a.classList.add("drop-target"):"manual"===currentSortMode()?r<.5*c?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 d=a.id,s=a.type,o=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!o)return postMsg({name:"dragToEmpty",dragId:d,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!o)return"note"===s?postMsg({name:"contextMenu",action:"pinNote",id:d,itemType:"note"}):"folder"===s&&postMsg({name:"contextMenu",action:"pinFolder",id:d,itemType:"folder"}),void endDrag();if(t&&t.closest(".pinned-section-body")&&o){var i=n&&n.classList.contains("pinned-item")?n:null;if(i&&i.dataset.id!==d){var r=i.getBoundingClientRect(),c=e.clientY-r.top<.5*r.height?"before":"after";postMsg({name:"reorderPinned",dragId:d,dragType:s,targetId:i.dataset.id,position:c})}endDrag()}else{var l=t?t.closest(".tag-folder"):null;if(l)return"note"===s&&postMsg({name:"tagNoteAdd",tagId:l.dataset.tagId,noteId:d}),void endDrag();if(t&&(t.closest(".tags-section-body")||t.closest(".tags-section-header")||t.closest(".trash-children")||t.closest(".trash-section-header")||t.closest(".smart-section-body")||t.closest(".smart-section-header")))endDrag();else if(o)endDrag();else if(n){var v=n.dataset.id,m=n.dataset.type;if(d!==v){var p=n.getBoundingClientRect(),g=e.clientY-p.top,u=p.height;postMsg("folder"===m?g>=.25*u&&g<=.75*u?{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:"into"}:{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:g<.25*u?"above":"below"}:"note"===s?{name:"dragDrop",dragId:d,dragType:s,targetId:v,position:g<.5*u?"above":"below"}:{name:"dragDrop",dragId:d,dragType:s,targetId:v,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 d=document.getElementById("search-results");if(d){showSearchContainer(!0);var s=e.length+t.length+a.length;if(0!==s){var o='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){o+=g("📁",T("searchSectionFolders"),a.length,"folders"),o+='<div class="search-section-body" id="search-section-folders">';for(var i=0;i<a.length;i++){var r=a[i],c=r.iconEmoji||"📁";o+='<div class="search-result-item search-folder-item" data-folder-id="'+r.id+'">',o+='<span class="icon">'+c+"</span>",o+='<div class="search-result-content">',o+='<div class="search-result-title">'+highlightText(r.title,n)+"</div>",o+="</div></div>"}o+="</div>"}if(e.length>0){o+=g("📝",T("searchSectionNotes"),e.length,"notes"),o+='<div class="search-section-body" id="search-section-notes">';for(var l=0;l<e.length;l++)o+=renderNoteItem(e[l],n);o+="</div>"}if(t.length>0){o+=g("🏷️",T("searchSectionTags"),t.length,"tags"),o+='<div class="search-section-body" id="search-section-tags">';for(var v=0;v<t.length;v++){var m=t[v],p=T("searchTagNoteCount").replace("{count}",m.noteCount);o+='<div class="search-result-item search-tag-item" data-tag-id="'+m.id+'">',o+='<span class="icon">🏷️</span>',o+='<div class="search-result-content">',o+='<div class="search-result-title">'+highlightText(m.title,n)+"</div>",o+='<div class="search-result-folder">'+p+"</div>",o+="</div>",o+='<span class="tag-expand-arrow">▶</span>',o+="</div>",o+='<div class="tag-notes-container" id="tag-notes-'+m.id+'"></div>'}o+="</div>"}d.innerHTML=o,_searchMode=!0}else d.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function g(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 d="",s=0;s<t.length;s++)d+=renderNoteItem(t[s],"");0===t.length&&(d='<div class="search-status" style="padding-left:30px;">'+T("searchNoResult")+"</div>"),a.innerHTML=d,(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())}});
|