joplin-plugin-explorer 1.6.8 → 1.7.0
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 +80 -77
- package/package.json +25 -25
- package/publish/index.js +1 -1
- package/publish/manifest.json +46 -46
- package/publish/plugin.jpl +0 -0
- package/publish/webview/chrome.css +21 -0
- package/publish/webview/panel.css +23 -9
- package/publish/webview/panel.js +1 -1
package/publish/manifest.json
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"manifest_version": 1,
|
|
3
|
-
"id": "com.github.joplin-explorer",
|
|
4
|
-
"app_min_version": "2.6.0",
|
|
5
|
-
"version": "1.
|
|
6
|
-
"name": "Joplin Explorer",
|
|
7
|
-
"description": "A unified sidebar that displays notebooks and notes together in a single tree view",
|
|
8
|
-
"author": "lim0513",
|
|
9
|
-
"homepage_url": "https://github.com/lim0513/joplin-explorer",
|
|
10
|
-
"repository_url": "https://github.com/lim0513/joplin-explorer",
|
|
11
|
-
"keywords": [
|
|
12
|
-
"sidebar",
|
|
13
|
-
"explorer",
|
|
14
|
-
"tree-view",
|
|
15
|
-
"notebooks",
|
|
16
|
-
"notes"
|
|
17
|
-
],
|
|
18
|
-
"categories": [
|
|
19
|
-
"appearance",
|
|
20
|
-
"productivity"
|
|
21
|
-
],
|
|
22
|
-
"icons": {
|
|
23
|
-
"16": "assets/icons/icon16.png",
|
|
24
|
-
"32": "assets/icons/icon32.png",
|
|
25
|
-
"48": "assets/icons/icon48.png",
|
|
26
|
-
"128": "assets/icons/icon128.png"
|
|
27
|
-
},
|
|
28
|
-
"screenshots": [
|
|
29
|
-
{
|
|
30
|
-
"src": "assets/1.png",
|
|
31
|
-
"label": "Unified sidebar: notebooks, notes, tags, smart folders and trash in one tree"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"src": "assets/2.png",
|
|
35
|
-
"label": "Hover preview showing note metadata and a body snippet"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"src": "assets/3.png",
|
|
39
|
-
"label": "Rich right-click context menu"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"src": "assets/4.png",
|
|
43
|
-
"label": "Settings"
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 1,
|
|
3
|
+
"id": "com.github.joplin-explorer",
|
|
4
|
+
"app_min_version": "2.6.0",
|
|
5
|
+
"version": "1.7.0",
|
|
6
|
+
"name": "Joplin Explorer",
|
|
7
|
+
"description": "A unified sidebar that displays notebooks and notes together in a single tree view",
|
|
8
|
+
"author": "lim0513",
|
|
9
|
+
"homepage_url": "https://github.com/lim0513/joplin-explorer",
|
|
10
|
+
"repository_url": "https://github.com/lim0513/joplin-explorer",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"sidebar",
|
|
13
|
+
"explorer",
|
|
14
|
+
"tree-view",
|
|
15
|
+
"notebooks",
|
|
16
|
+
"notes"
|
|
17
|
+
],
|
|
18
|
+
"categories": [
|
|
19
|
+
"appearance",
|
|
20
|
+
"productivity"
|
|
21
|
+
],
|
|
22
|
+
"icons": {
|
|
23
|
+
"16": "assets/icons/icon16.png",
|
|
24
|
+
"32": "assets/icons/icon32.png",
|
|
25
|
+
"48": "assets/icons/icon48.png",
|
|
26
|
+
"128": "assets/icons/icon128.png"
|
|
27
|
+
},
|
|
28
|
+
"screenshots": [
|
|
29
|
+
{
|
|
30
|
+
"src": "assets/1.png",
|
|
31
|
+
"label": "Unified sidebar: notebooks, notes, tags, smart folders and trash in one tree"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"src": "assets/2.png",
|
|
35
|
+
"label": "Hover preview showing note metadata and a body snippet"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"src": "assets/3.png",
|
|
39
|
+
"label": "Rich right-click context menu"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"src": "assets/4.png",
|
|
43
|
+
"label": "Settings"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
package/publish/plugin.jpl
CHANGED
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* Chrome CSS: applies to Joplin's app UI (not the note viewer), loaded via
|
|
2
|
+
* joplin.window.loadChromeCssFile(). Currently one job - the toolbar button.
|
|
3
|
+
*
|
|
4
|
+
* The mark is the plugin's own logo silhouette (sidebar rail + list rows),
|
|
5
|
+
* painted as a MASK filled with currentColor rather than a coloured image.
|
|
6
|
+
* That way it inherits the toolbar's colour and its hover / active / disabled
|
|
7
|
+
* states exactly like Joplin's built-in icons; a full-colour tile would look
|
|
8
|
+
* pasted on and would fight both the light and dark themes.
|
|
9
|
+
*
|
|
10
|
+
* The command keeps "fas fa-sitemap" as the first two class tokens, so if this
|
|
11
|
+
* file ever fails to load the button still shows a real glyph instead of
|
|
12
|
+
* nothing. */
|
|
13
|
+
.toolbar-icon.jop-explorer-icon::before {
|
|
14
|
+
content: "";
|
|
15
|
+
display: block;
|
|
16
|
+
width: 1em;
|
|
17
|
+
height: 1em;
|
|
18
|
+
background-color: currentColor;
|
|
19
|
+
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='3' height='16' rx='1.5'/%3E%3Crect x='9.5' y='4' width='8' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='8.53' width='11.5' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='13.07' width='9.5' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='17.6' width='11.5' height='2.4' rx='1.2'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
20
|
+
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='3' y='4' width='3' height='16' rx='1.5'/%3E%3Crect x='9.5' y='4' width='8' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='8.53' width='11.5' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='13.07' width='9.5' height='2.4' rx='1.2'/%3E%3Crect x='9.5' y='17.6' width='11.5' height='2.4' rx='1.2'/%3E%3C/svg%3E") center / contain no-repeat;
|
|
21
|
+
}
|
|
@@ -7,7 +7,7 @@ html, body {
|
|
|
7
7
|
|
|
8
8
|
#notes-in-list-root {
|
|
9
9
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
10
|
-
font-size: 13px;
|
|
10
|
+
font-size: var(--row-font, 13px);
|
|
11
11
|
color: var(--joplin-color);
|
|
12
12
|
background-color: var(--joplin-background-color);
|
|
13
13
|
height: 100vh;
|
|
@@ -165,12 +165,12 @@ html, body {
|
|
|
165
165
|
.tree-item {
|
|
166
166
|
display: flex;
|
|
167
167
|
align-items: center;
|
|
168
|
-
padding:
|
|
168
|
+
padding: 0 8px;
|
|
169
169
|
cursor: pointer;
|
|
170
170
|
gap: 5px;
|
|
171
171
|
border-radius: 3px;
|
|
172
172
|
margin: 1px 4px;
|
|
173
|
-
min-height: 24px;
|
|
173
|
+
min-height: var(--row-h, 24px);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
.tree-item:hover {
|
|
@@ -194,15 +194,15 @@ html, body {
|
|
|
194
194
|
/* Icons */
|
|
195
195
|
.icon {
|
|
196
196
|
flex-shrink: 0;
|
|
197
|
-
font-size:
|
|
198
|
-
width:
|
|
197
|
+
font-size: 1.077em;
|
|
198
|
+
width: calc(1.385 * var(--row-font, 13px));
|
|
199
199
|
text-align: center;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
.custom-icon {
|
|
203
203
|
display: block;
|
|
204
|
-
width:
|
|
205
|
-
height:
|
|
204
|
+
width: calc(1.231 * var(--row-font, 13px));
|
|
205
|
+
height: calc(1.231 * var(--row-font, 13px));
|
|
206
206
|
object-fit: contain;
|
|
207
207
|
margin: 0 auto;
|
|
208
208
|
}
|
|
@@ -252,7 +252,7 @@ html, body {
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
.note .icon {
|
|
255
|
-
font-size:
|
|
255
|
+
font-size: 0.923em;
|
|
256
256
|
}
|
|
257
257
|
|
|
258
258
|
/* Bottom bar (sync) */
|
|
@@ -282,8 +282,21 @@ html, body {
|
|
|
282
282
|
opacity: 0.7;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
.bottom-bar button:disabled
|
|
285
|
+
.bottom-bar button:disabled {
|
|
286
|
+
opacity: 0.5;
|
|
287
|
+
cursor: not-allowed;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* .syncing is the CANCEL state, not a disabled one, so it must look
|
|
291
|
+
clickable. It used to share the :disabled rule above, which made the cancel
|
|
292
|
+
button read as greyed out and unusable. */
|
|
286
293
|
.bottom-bar button.syncing {
|
|
294
|
+
opacity: 1;
|
|
295
|
+
cursor: pointer;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Except right after the cancel is requested, when it really is disabled. */
|
|
299
|
+
.bottom-bar button.syncing:disabled {
|
|
287
300
|
opacity: 0.5;
|
|
288
301
|
cursor: not-allowed;
|
|
289
302
|
}
|
|
@@ -926,3 +939,4 @@ mark.search-highlight {
|
|
|
926
939
|
color: inherit;
|
|
927
940
|
background: rgba(127, 127, 127, 0.25);
|
|
928
941
|
}
|
|
942
|
+
|
package/publish/webview/panel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var _savedScrollTop=0,_isFirstRender=!0;function postMsg(e){webviewApi.postMessage(e)}function cssEscapeAttr(e){return String(null==e?"":e).replace(/(["\\])/g,"\\$1")}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;applyHeaderStacking()}});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 d(){var e=s.value;o.remove(),a(e)}function r(){o.remove(),a(null)}s.focus(),s.select(),o.querySelector(".inline-input-ok").addEventListener("click",d),o.querySelector(".inline-input-cancel").addEventListener("click",r),s.addEventListener("keydown",function(e){"Enter"===e.key&&d(),"Escape"===e.key&&r()}),o.addEventListener("click",function(e){e.target===o&&r()})}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 o=e.querySelector(".toggle");o&&(o.textContent=a?"▶":"▼",o.classList.toggle("expanded",!a))}function collapseAllLocal(){var e=document.getElementById("main-tree");e&&(e.querySelectorAll(".tree-item.folder").forEach(function(e){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 setSectionsCollapsed(e){for(var t=[["pinned-header","pinned-body"],["smart-header","smart-body"],["tree-header","main-tree"],["tags-header","tags-body"],["trash-header","trash-children"]],a=!1,n=0;n<t.length;n++){var o=document.getElementById(t[n][0]),s=document.getElementById(t[n][1]);if(o){a=!0,o.classList.toggle("collapsed",e),s&&s.classList.toggle("collapsed",e);var d=o.querySelector(".toggle");d&&(d.textContent=e?"▶":"▼")}}return a}function collapseScope(){var e=document.getElementById("notes-in-list-root");return e&&e.dataset.collapseScope||"notebooksOnly"}function applyHeaderStacking(){var e=document.getElementById("notes-in-list-root"),t=e&&"1"===e.dataset.stackHeaders,a=[];if(document.querySelectorAll(".pinned-section-header, .smart-section-header, .tree-section-header, .tags-section-header, .trash-section-header").forEach(function(e){a.push(e)}),t)for(var n=a.map(function(e){return e.offsetHeight}),o=0;o<a.length;o++){for(var s=0,d=0;d<o;d++)s+=n[d];for(var r=0,i=o+1;i<a.length;i++)r+=n[i];a[o].style.top=s+"px",a[o].style.bottom=r+"px"}else a.forEach(function(e){e.style.top="",e.style.bottom=""})}function expandAllLocal(){var e=document.getElementById("main-tree");if(!e)return[];var t=[];return e.querySelectorAll(".tree-item.folder").forEach(function(e){var a=e.dataset.id,n=document.querySelector('.children[data-folder-id="'+a+'"]'),o=n&&n.querySelector(".tree-item.folder"),s=e.querySelector(".toggle");o?(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=[],o=document.getElementById("main-tree");return o?(o.querySelectorAll(".tree-item.folder").forEach(function(e){var a=e.dataset.id,o=document.querySelector('.children[data-folder-id="'+a+'"]'),s=e.querySelector(".toggle"),d=!!t[a];e.classList.toggle("collapsed",d),o&&o.classList.toggle("collapsed",d),s&&(s.textContent=d?"▶":"▼",s.classList.toggle("expanded",!d)),d&&a&&n.push(a)}),n):n}_observer.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("click",function(e){e.target&&e.target.closest&&e.target.closest(".pinned-section-header, .smart-section-header, .tree-section-header, .tags-section-header, .trash-section-header")&&requestAnimationFrame(applyHeaderStacking)});var _collapseSnapshot=null;function expandAncestorsLocal(e){for(var t=[],a=e.closest(".children");a;){a.classList.contains("collapsed")&&(a.classList.remove("collapsed"),a.dataset.folderId&&t.push(a.dataset.folderId));var n=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+a.dataset.folderId+'"]');if(n){n.classList.remove("collapsed");var o=n.querySelector(".toggle");o&&(o.textContent="▼",o.classList.add("expanded"))}a=a.parentElement?a.parentElement.closest(".children"):null}return t}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 o=document.createElement("div");o.className="note-preview-title",o.textContent=e.title,n.appendChild(o);var s=document.createElement("div");s.className="note-preview-meta";for(var d=[T("pvType")+": "+(e.isTodo?T("pvTodo"):T("pvNote"))+" · "+T("pvSize")+": "+(e.size||0)+" "+T("pvChars"),T("pvCreated")+": "+g(e.created),T("pvUpdated")+": "+g(e.updated)],r=0;r<d.length;r++){var i=document.createElement("div");i.textContent=d[r],s.appendChild(i)}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(),p=n.getBoundingClientRect(),m=c.bottom+4;m+p.height>window.innerHeight-8&&(m=Math.max(8,c.top-p.height-4)),n.style.top=m+"px",n.style.left=Math.max(8,Math.min(c.left+20,window.innerWidth-p.width-8))+"px"}}function g(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"),o=t.nextElementSibling&&t.nextElementSibling.classList.contains("ctx-export-template")?t.nextElementSibling:n?n.querySelector(".ctx-export-template"):null;return void(n&&o&&(window._ctxMainHtml=n.innerHTML,n.innerHTML='<div class="ctx-item ctx-back">◂ '+(o.dataset.title||"")+'</div><div class="ctx-sep"></div>'+o.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 d=document.getElementById("ctx-menu");d&&d.remove()}else{var r=document.getElementById("ctx-menu");r&&r.remove();var i=e.target.closest(".shared-badge");if(i){var l=i.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 p=e.target.closest(".search-folder-item");if(p)p.dataset.folderId&&postMsg({name:"locateFolder",folderId:p.dataset.folderId});else{var m=e.target.closest(".pinned-section-header");if(m){var g=m.classList.toggle("collapsed"),v=document.getElementById("pinned-body");v&&v.classList.toggle("collapsed",g),g||(animateExpand(v),Le(m));var u=m.querySelector(".toggle");return u&&(u.textContent=g?"▶":"▼"),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),Le(f));var x=f.querySelector(".toggle");return x&&(x.textContent=h?"▶":"▼"),void postMsg({name:"toggleTagsSection"})}var S=e.target.closest(".tree-section-header");if(S){var E=S.classList.toggle("collapsed"),L=document.getElementById("main-tree");L&&L.classList.toggle("collapsed",E),E||(animateExpand(L),Le(S));var I=S.querySelector(".toggle");return I&&(I.textContent=E?"▶":"▼"),void postMsg({name:"toggleTreeSection"})}var b=e.target.closest(".smart-section-header");if(b){var w=b.classList.toggle("collapsed"),M=document.getElementById("smart-body");M&&M.classList.toggle("collapsed",w),w||(animateExpand(M),Le(b));var C=b.querySelector(".toggle");return C&&(C.textContent=w?"▶":"▼"),void postMsg({name:"toggleSmartSection"})}var N=e.target.closest(".smart-folder");if(N){var _=N.dataset.smartId,q=document.querySelector('.smart-children[data-smart-id="'+_+'"]');if(!q)return;var B=q.classList.toggle("collapsed");N.classList.toggle("collapsed",B),B||animateExpand(q);var D=N.querySelector(".toggle");return D&&(D.textContent=B?"▶":"▼"),void(B||postMsg({name:"smartFolderNotes",smartId:_,query:N.dataset.query}))}var A=e.target.closest(".trash-section-header");if(A){var F=A.classList.toggle("collapsed"),k=document.getElementById("trash-children");k&&k.classList.toggle("collapsed",F),F||(animateExpand(k),Le(A));var H=A.querySelector(".toggle");return H&&(H.textContent=F?"▶":"▼"),postMsg({name:"toggleTrashSection"}),void(F||!k||k.dataset.loaded||postMsg({name:"trashNotes"}))}var R=e.target.closest(".tag-folder");if(R){var P=R.dataset.tagId,O=R.dataset.tagPath,j=O?document.querySelector('.tag-children[data-tag-path="'+cssEscapeAttr(O)+'"]'):document.querySelector('.tag-children[data-tag-id="'+P+'"]');if(!j)return;var Y=j.classList.toggle("collapsed");R.classList.toggle("collapsed",Y),Y||animateExpand(j);var J=R.querySelector(".toggle");return J&&(J.textContent=Y?"▶":"▼"),void(Y||!P||j.dataset.loaded||postMsg({name:"tagFolderNotes",tagId:P}))}var W=e.target.closest(".search-section-header");if(W){var V=document.getElementById("search-section-"+W.dataset.section);if(V){var X=W.querySelector(".section-toggle");V.classList.contains("collapsed")?(V.classList.remove("collapsed"),X&&(X.textContent="▼")):(V.classList.add("collapsed"),X&&(X.textContent="▶"))}}else{var z=e.target.closest(".tree-item");if(z){if("1"===z.dataset.trash){if("folder"===z.dataset.type){var U=z.querySelector(".toggle");if(!U||!U.textContent)return;for(var $=Number(z.dataset.depth||0),G="▼"===U.textContent,K=document.querySelector('.trash-folder-children[data-folder-id="'+z.dataset.id+'"]'),Q=z.nextElementSibling;Q;){if(Q.classList.contains("trash-folder-children")){var Z=Number(Q.dataset.depth||0);if(Q===K)Q.classList.toggle("collapsed",G);else{if(!(Z>$))break;Q.classList.add("collapsed")}}else{if(!Q.classList.contains("tree-item")||"1"!==Q.dataset.trash||"folder"!==Q.dataset.type)break;var ee=Number(Q.dataset.depth||0);if(ee<=$)break;G?Q.classList.add("trash-hidden"):Q.classList.toggle("trash-hidden",ee!==$+1);var te=Q.querySelector(".toggle");te&&te.textContent&&(te.textContent="▶")}Q=Q.nextElementSibling}U.textContent=G?"▶":"▼",!G&&K&&(animateExpand(K),K.dataset.loaded||postMsg({name:"trashFolderNotes",folderId:z.dataset.id}))}else"note"===z.dataset.type&&postMsg({name:"openNote",id:z.dataset.id});return}var ae=z.dataset.type,ne=z.dataset.id,oe=z.classList.contains("pinned-item");if("note"===ae)document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),z.classList.add("selected"),postMsg({name:"openNote",id:ne});else if("folder"===ae)if(oe)postMsg({name:"locatePinnedFolder",folderId:ne});else if(toggleFolderLocal(z,ne),postMsg({name:"toggleFolder",id:ne}),!z.classList.contains("collapsed")){var se=document.getElementById("btn-collapse-all");se&&"expand"===se.dataset.mode&&(se.dataset.mode="collapse",se.textContent="▲",se.title=T("collapseAll"))}}else{var de=e.target.closest("button");if(de)switch(de.id){case"btn-new":var re=document.getElementById("ctx-menu");if(re){re.remove();break}var ie=document.getElementById("btn-new");if(!ie)break;var le=ie.getBoundingClientRect();document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+le.left+"px;top:"+(le.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 ce=document.getElementById("btn-collapse-all"),pe=document.getElementById("notes-in-list-root"),me=pe&&pe.dataset.expandMode||"restore",ge="allSections"===collapseScope();if("collapseOnly"===me){collapseAllLocal(),postMsg({name:"collapseAll",sections:!!ge&&setSectionsCollapsed(!0)}),ce&&(ce.dataset.mode="collapse",ce.textContent="▲",ce.title=T("collapseAll"));break}if(ce&&"expand"===ce.dataset.mode){var ve,ue=document.getElementById("notes-in-list-root"),fe=ue&&ue.dataset.expandMode||"restore";if("all"===fe)ve=applyCollapsedSet([]);else if("restore"===fe){var he=_collapseSnapshot;if(!he&&ue)try{he=JSON.parse(ue.dataset.collapseSnapshot||"null")}catch(e){he=null}ve=Array.isArray(he)?applyCollapsedSet(he):expandAllLocal()}else ve=expandAllLocal();var ye=document.querySelectorAll("#main-tree .tree-item.folder").length;"skeleton"!==fe&&ye>0&&ve.length>=ye&&(ve=applyCollapsedSet([])),postMsg({name:"expandAll",collapsedIds:ve,sections:!!ge&&setSectionsCollapsed(!1)}),ce.dataset.mode="collapse",ce.textContent="▲",ce.title=T("collapseAll")}else{var xe=[],Te=0;document.querySelectorAll("#main-tree .tree-item.folder").forEach(function(e){e.dataset.id&&(Te++,e.classList.contains("collapsed")&&xe.push(e.dataset.id))}),collapseAllLocal();var Se=!!ge&&setSectionsCollapsed(!0);xe.length>=Te&&Te>0?postMsg({name:"collapseAll",sections:Se}):(_collapseSnapshot=xe,postMsg({name:"collapseAll",prevCollapsed:xe,sections:Se})),ce&&(ce.dataset.mode="expand",ce.textContent="▼",ce.title=T("expandAll"))}break;case"btn-reveal":if(_searchMode){var Ee=document.getElementById("search-input");Ee&&(Ee.value=""),exitSearchMode()}else revealSelectedNote();break;case"btn-refresh":postMsg({name:"refreshView"});break;case"btn-sync":de.disabled||(de.disabled=!0,de.classList.add("syncing"),de.textContent="🔄 "+T("syncing"),postMsg({name:"sync"}))}}}}}}}function Le(e){var t=document.getElementById("tree-container");if(t&&e){var a=parseInt(e.style.top||"",10);(!isFinite(a)||a<0)&&(a=0);var n=e.style.position;e.style.position="static";var o=e.getBoundingClientRect().top-t.getBoundingClientRect().top+t.scrollTop;e.style.position=n;var s=o-a,d=t.scrollHeight-t.clientHeight;s>d&&(s=d),s<0&&(s=0);var r=t.scrollTop,i=s-r;if(!(Math.abs(i)<2)){var l=performance.now();requestAnimationFrame(function e(a){var n=Math.min(1,(a-l)/260),o=n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2,s=r+i*o;t.scrollTop=s,_savedScrollTop=s,n<1&&requestAnimationFrame(e)})}}}}),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,o=a.dataset.id;if("smart"!==n){var s="",d=a.querySelector(".label");d&&(s=d.textContent);var r='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("1"===a.dataset.trash){var i="folder"===n?"trashFolder":"trashNote";r+='<div class="ctx-item" data-action="restoreItem" data-id="'+o+'" data-type="'+i+'">'+T("ctxRestoreNote")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="permanentDeleteItem" data-id="'+o+'" data-type="'+i+'">'+T("ctxPermanentDelete")+"</div>"}else if("folder"===n){var l=isPinned(o);r+='<div class="ctx-item" data-action="'+(l?"unpinFolder":"pinFolder")+'" data-id="'+o+'" data-type="folder">'+T(l?"ctxUnpin":"ctxPin")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="newNote" data-id="'+o+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",r+='<div class="ctx-item" data-action="newTodo" data-id="'+o+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",r+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+o+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="renameFolder" data-id="'+o+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",r+='<div class="ctx-item" data-action="copyFolderId" data-id="'+o+'" data-type="folder">'+T("ctxCopyFolderId")+"</div>",r+='<div class="ctx-item ctx-drill">'+T("ctxExportFolder")+'<span class="ctx-sub-arrow">▶</span></div>',r+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExportFolder")+'"><div class="ctx-item" data-action="exportFolder" data-format="jex" data-id="'+o+'" data-type="folder">JEX</div><div class="ctx-item" data-action="exportFolder" data-format="md" data-id="'+o+'" data-type="folder">Markdown</div><div class="ctx-item" data-action="exportFolder" data-format="md_frontmatter" data-id="'+o+'" data-type="folder">Markdown + Front Matter</div><div class="ctx-item" data-action="exportFolder" data-format="html" data-id="'+o+'" data-type="folder">HTML</div></div>',r+='<div class="ctx-sep"></div>',r+='<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);r+='<div class="ctx-item" data-action="'+(c?"unpinNote":"pinNote")+'" data-id="'+o+'" data-type="note">'+T(c?"ctxUnpin":"ctxPin")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="openNote" data-id="'+o+'" data-type="note">'+T("ctxOpenNote")+"</div>",r+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+o+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",r+='<div class="ctx-item" data-action="editExternally" data-id="'+o+'" data-type="note">'+T("ctxEditExternally")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="setTags" data-id="'+o+'" data-type="note">'+T("ctxSetTags")+"</div>",r+='<div class="ctx-item" data-action="switchNoteType" data-id="'+o+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(r+='<div class="ctx-item" data-action="toggleTodo" data-id="'+o+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),r+='<div class="ctx-item" data-action="moveToFolderDialog" data-id="'+o+'" data-type="note">'+T("ctxMoveToFolder")+"</div>",r+='<div class="ctx-item" data-action="duplicateNote" data-id="'+o+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="copyLink" data-id="'+o+'" data-type="note">'+T("ctxCopyLink")+"</div>",r+='<div class="ctx-item" data-action="copyExternalLink" data-id="'+o+'" data-type="note">'+T("ctxCopyExternalLink")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="publishNote" data-id="'+o+'" data-type="note">'+T("ctxPublishNote")+"</div>",r+='<div class="ctx-item ctx-drill">'+T("ctxExport")+'<span class="ctx-sub-arrow">▶</span></div>',r+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExport")+'"><div class="ctx-item" data-action="exportPdf" data-id="'+o+'" data-type="note">PDF</div><div class="ctx-item" data-action="exportNote" data-format="md" data-id="'+o+'" data-type="note">Markdown</div><div class="ctx-item" data-action="exportNote" data-format="md_frontmatter" data-id="'+o+'" data-type="note">Markdown + Front Matter</div><div class="ctx-item" data-action="exportNote" data-format="jex" data-id="'+o+'" data-type="note">JEX</div><div class="ctx-item" data-action="exportNote" data-format="html" data-id="'+o+'" data-type="note">HTML</div></div>',r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="renameNote" data-id="'+o+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",r+='<div class="ctx-item" data-action="noteInfo" data-id="'+o+'" data-type="note">'+T("ctxNoteInfo")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+o+'" data-type="note">'+T("ctxDeleteNote")+"</div>",a.dataset.tagId&&(r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="untagNote" data-id="'+o+'" data-type="note" data-tag-id="'+a.dataset.tagId+'">'+T("ctxUntagNote")+"</div>")}else if("tag"===n){var p=a.dataset.tagId;p&&(r+='<div class="ctx-item" data-action="renameTag" data-id="'+p+'" data-type="tag">'+T("ctxRenameTag")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="deleteTag" data-id="'+p+'" data-type="tag">'+T("ctxDeleteTag")+"</div>")}if(!((r+="</div>").indexOf("ctx-item")<0)){document.body.insertAdjacentHTML("beforeend",r);var m=document.getElementById("ctx-menu"),g=m.getBoundingClientRect();g.right>window.innerWidth&&(m.style.left=window.innerWidth-g.width-4+"px"),g.bottom>window.innerHeight&&(m.style.top=window.innerHeight-g.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 o=n.dataset.noteIndent,s=o?' style="padding-left:'+o+'px"':"",d="",r=0;r<t.notes.length;r++){var i=t.notes[r],l=i.is_todo?i.todo_completed?"☑":"☐":"📝";d+='<div class="tree-item note tag-note"'+s+' data-id="'+i.id+'" data-type="note" data-tag-id="'+t.tagId+'" data-todo="'+(i.is_todo?1:0)+'"><span class="icon note-icon">'+l+'</span><span class="label">'+escapeHtml(i.title)+"</span></div>"}t.notes.length||n.children.length||(d='<div class="tag-empty">—</div>'),n.insertAdjacentHTML("beforeend",d)}}else if("trashNotes"===t.name){var c=document.getElementById("trash-children");if(c){c.dataset.loaded="1";for(var p="",m=t.folders||[],g=0;g<m.length;g++){var v=m[g],u=v.depth||0;p+='<div class="tree-item folder trash-note" style="padding-left:'+(34+16*u)+'px" data-id="'+v.id+'" data-type="folder" data-trash="1" data-depth="'+u+'"><span class="toggle">'+(v.hasNotes||v.hasSub?"▶":"")+'</span><span class="icon">📁</span><span class="label">'+escapeHtml(v.title)+"</span></div>",v.hasNotes&&(p+='<div class="trash-folder-children collapsed" data-folder-id="'+v.id+'" data-depth="'+u+'"></div>')}for(var f=t.notes||[],h=0;h<f.length;h++){var y=f[h],x=y.is_todo?y.todo_completed?"☑":"☐":"📝";p+='<div class="tree-item note trash-note" style="padding-left:34px" data-id="'+y.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+x+'</span><span class="label">'+escapeHtml(y.title)+"</span></div>"}p||(p='<div class="tag-empty">—</div>'),c.innerHTML=p}}else if("smartFolderNotes"===t.name){var S=document.querySelector('.smart-children[data-smart-id="'+t.smartId+'"]');if(S){for(var E="",L=0;L<t.notes.length;L++){var I=t.notes[L],b=I.is_todo?I.todo_completed?"☑":"☐":"📝";E+='<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">'+b+'</span><span class="label">'+escapeHtml(I.title)+"</span>"+(I.badges||"")+"</div>"}t.notes.length||(E='<div class="tag-empty">—</div>'),S.innerHTML=E}}else if("notePreview"===t.name)showPreview(t);else if("trashFolderNotes"===t.name){var w=document.querySelector('.trash-folder-children[data-folder-id="'+t.folderId+'"]');if(w){w.dataset.loaded="1";for(var M=34+16*(parseInt(w.dataset.depth||"0",10)+1),C="",N=0;N<t.notes.length;N++){var _=t.notes[N],q=_.is_todo?_.todo_completed?"☑":"☐":"📝";C+='<div class="tree-item note trash-note" style="padding-left:'+M+'px" data-id="'+_.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+q+'</span><span class="label">'+escapeHtml(_.title)+"</span></div>"}t.notes.length||(C='<div class="tag-empty" style="padding-left:'+M+'px">—</div>'),w.innerHTML=C}}else if("tagNotes"===t.name)expandTagNotes(t.tagId,t.notes);else if("scrollToFolder"===t.name)setTimeout(function(){locateFolderInTree(t.folderId)},80);else if("exitSearch"===t.name){var B=document.getElementById("search-input");B&&(B.value=""),syncSearchClear(),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var D=document.getElementById("search-input");D&&(D.value=""),syncSearchClear(),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){locateFolderInTree(t.folderId)},80)}else if("copyText"===t.name)if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t.text);else{var A=document.createElement("textarea");A.value=t.text,document.body.appendChild(A),A.select(),document.execCommand("copy"),A.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var F=document.getElementById("main-tree"),k=F?F.querySelector('.tree-item.note[data-id="'+t.id+'"]'):null;if(k||(k=document.querySelector('.tree-item.note[data-id="'+t.id+'"]')),k){k.classList.add("selected"),F&&F.contains(k)&&ensureTreeSectionExpanded();var H=F&&F.contains(k)?expandAncestorsLocal(k):[];requestAnimationFrame(function(){var e=document.getElementById("tree-container");if(e){var t=e.getBoundingClientRect(),a=k.getBoundingClientRect();a.top<t.top||a.bottom>t.bottom?k.scrollIntoView({block:"center",behavior:"smooth"}):_savedScrollTop=e.scrollTop}else k.scrollIntoView({block:"nearest",behavior:"instant"})}),H.length&&postMsg({name:"revealNote",folderIds:H})}}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),e.querySelectorAll(".todo-pie, .shared-badge").forEach(function(e){e.remove()}),t.badges&&e.insertAdjacentHTML("beforeend",t.badges)})}}),document.addEventListener("dblclick",function(e){var t=e.target;if(!t||!t.closest||!t.closest("#ctx-menu")&&!t.closest("#note-preview")){var a=t.closest?t.closest(".tree-item.note"):null;a&&"1"!==a.dataset.trash&&a.dataset.id&&postMsg({name:"contextMenu",action:"openInNewWindow",id:a.dataset.id,itemType:"note"})}}),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/x-je-item",JSON.stringify({id:t.dataset.id,type:t.dataset.type,pinned:a})),"note"===t.dataset.type?e.dataTransfer.setData("text/x-jop-note-ids",JSON.stringify([t.dataset.id])):"folder"===t.dataset.type&&e.dataTransfer.setData("text/x-jop-folder-ids",JSON.stringify([t.dataset.id])),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,o=document.getElementById("drop-zone-empty");if(o&&t.classList.contains("dragging-active")){var s=o.getBoundingClientRect();s.height>0&&s.top>a.top&&(n=s.top)}var d=0;e<a.top+40?d=-Math.ceil((a.top+40-e)/4):e>n?d=0:e>n-40&&(d=Math.ceil((e-(n-40))/4)),_dragScrollDir=d,d&&!_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,springCancel(),_dragHoverEl=null,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()});var SPRING_EXPAND_MS=2e3,_springEl=null,_springTimer=null,_dragHoverEl=null;function springCancel(){_springTimer&&clearTimeout(_springTimer),_springTimer=null,_springEl=null}function springSchedule(e,t){_springEl!==e&&(springCancel(),_springEl=e,_springTimer=setTimeout(function(){var a=document.querySelector(".tree-item.dragging")&&document.contains(e)&&_dragHoverEl&&e.contains(_dragHoverEl);springCancel(),a&&t()},SPRING_EXPAND_MS))}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){_dragHoverEl=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{var n=t.closest(".pinned-section-header");if(n)return e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),void(n.classList.contains("collapsed")&&springSchedule(n,function(){n.classList.remove("collapsed");var e=document.getElementById("pinned-body");e&&e.classList.remove("collapsed");var t=n.querySelector(".toggle");t&&(t.textContent="▼"),postMsg({name:"togglePinnedCollapse"})}));if(t.closest(".pinned-section-body")){var o=document.querySelector(".tree-item.dragging.pinned-item"),s=document.querySelector(".tree-item.dragging");if(o&&a&&a.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var d=a.getBoundingClientRect();e.clientY-d.top<.5*d.height?a.classList.add("drop-above"):a.classList.add("drop-below")}else if(s&&!o&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),a&&a.classList.contains("pinned-item"))){var r=a.getBoundingClientRect();e.clientY-r.top<.5*r.height?a.classList.add("drop-above"):a.classList.add("drop-below")}}else{var i=t.closest(".tag-folder");if(i)document.querySelector(".tree-item.note.dragging")&&i.dataset.tagId&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),i.classList.add("drop-target"));else{var l=t.closest(".tree-section-header, .tags-section-header");if(l&&l.classList.contains("collapsed"))springSchedule(l,function(){var e=l.classList.contains("tree-section-header"),t=document.getElementById(e?"main-tree":"tags-body");l.classList.remove("collapsed"),t&&t.classList.remove("collapsed");var a=l.querySelector(".toggle");a&&(a.textContent="▼"),postMsg({name:e?"toggleTreeSection":"toggleTagsSection"})});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 c=document.querySelector(".tree-item.dragging");if(!c||!c.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var p=a.dataset.type,m=a.getBoundingClientRect(),g=e.clientY-m.top,v=m.height;"folder"===p?g<.25*v?(a.classList.add("drop-above"),springCancel()):g>.75*v?(a.classList.add("drop-below"),springCancel()):(a.classList.add("drop-target"),a.classList.contains("collapsed")&&a!==c&&springSchedule(a,function(){toggleFolderLocal(a,a.dataset.id),postMsg({name:"toggleFolder",id:a.dataset.id})})):"manual"===currentSortMode()?g<.5*v?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/x-je-item"))}catch(e){return void endDrag()}if(a&&a.id){var o=a.id,s=a.type,d=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!d)return postMsg({name:"dragToEmpty",dragId:o,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!d)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")){var r=n&&n.classList.contains("pinned-item")?n:null;if(d){if(r&&r.dataset.id!==o){var i=r.getBoundingClientRect(),l=e.clientY-i.top<.5*i.height?"before":"after";postMsg({name:"reorderPinned",dragId:o,dragType:s,targetId:r.dataset.id,position:l})}}else{var c={name:"pinItemAt",dragId:o,dragType:s};if(r&&r.dataset.id!==o){var p=r.getBoundingClientRect();c.targetId=r.dataset.id,c.position=e.clientY-p.top<.5*p.height?"before":"after"}postMsg(c)}endDrag()}else{var m=t?t.closest(".tag-folder"):null;if(m)return"note"===s&&m.dataset.tagId&&postMsg({name:"tagNoteAdd",tagId:m.dataset.tagId,noteId:o}),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(d)endDrag();else if(n){var g=n.dataset.id,v=n.dataset.type;if(o!==g){var u=n.getBoundingClientRect(),f=e.clientY-u.top,h=u.height;postMsg("folder"===v?f>=.25*h&&f<=.75*h?{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:"into"}:{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:f<.25*h?"above":"below"}:"note"===s?{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:f<.5*h?"above":"below"}:{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:"into"}),endDrag()}else 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 d='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){d+=v("📁",T("searchSectionFolders"),a.length,"folders"),d+='<div class="search-section-body" id="search-section-folders">';for(var r=0;r<a.length;r++){var i=a[r],l=i.iconEmoji||"📁";d+='<div class="search-result-item search-folder-item" data-folder-id="'+i.id+'">',d+='<span class="icon">'+l+"</span>",d+='<div class="search-result-content">',d+='<div class="search-result-title">'+highlightText(i.title,n)+"</div>",d+="</div></div>"}d+="</div>"}if(e.length>0){d+=v("📝",T("searchSectionNotes"),e.length,"notes"),d+='<div class="search-section-body" id="search-section-notes">';for(var c=0;c<e.length;c++)d+=renderNoteItem(e[c],n);d+="</div>"}if(t.length>0){d+=v("🏷️",T("searchSectionTags"),t.length,"tags"),d+='<div class="search-section-body" id="search-section-tags">';for(var p=0;p<t.length;p++){var m=t[p],g=T("searchTagNoteCount").replace("{count}",m.noteCount);d+='<div class="search-result-item search-tag-item" data-tag-id="'+m.id+'">',d+='<span class="icon">🏷️</span>',d+='<div class="search-result-content">',d+='<div class="search-result-title">'+highlightText(m.title,n)+"</div>",d+='<div class="search-result-folder">'+g+"</div>",d+="</div>",d+='<span class="tag-expand-arrow">▶</span>',d+="</div>",d+='<div class="tag-notes-container" id="tag-notes-'+m.id+'"></div>'}d+="</div>"}o.innerHTML=d,_searchMode=!0}else o.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function v(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 locateFolderInTree(e){ensureTreeSectionExpanded();var t=document.getElementById("main-tree"),a=t?t.querySelector('.tree-item.folder[data-id="'+e+'"]'):null;a&&(expandAncestorsLocal(a),requestAnimationFrame(function(){a.scrollIntoView({block:"center",behavior:"smooth"}),a.classList.add("locate-flash"),setTimeout(function(){a.classList.remove("locate-flash")},1500)}))}function ensureTreeSectionExpanded(){var e=document.getElementById("main-tree");if(e&&e.classList.contains("collapsed")){e.classList.remove("collapsed");var t=document.getElementById("tree-header");if(t){t.classList.remove("collapsed");var a=t.querySelector(".toggle");a&&(a.textContent="▼")}postMsg({name:"toggleTreeSection"})}}function revealSelectedNote(){ensureTreeSectionExpanded();var e=document.getElementById("tree-container"),t=document.getElementById("main-tree");if(e&&t){var a=t.querySelector(".tree-item.note.selected");if(!a){var n=document.querySelector(".tree-item.note.selected");n&&n.dataset.id&&(a=t.querySelector('.tree-item.note[data-id="'+n.dataset.id+'"]'))&&a.classList.add("selected")}if(a){var o=expandAncestorsLocal(a);o.length&&postMsg({name:"revealNote",folderIds:o}),requestAnimationFrame(function(){a.scrollIntoView({block:"center",behavior:"smooth"})})}}}function exitSearchMode(){_searchMode=!1,showSearchContainer(!1),revealSelectedNote()}function syncSearchClear(){var e=document.querySelector(".search-bar"),t=document.getElementById("search-input");e&&t&&e.classList.toggle("has-text",!!t.value)}document.addEventListener("input",function(e){if("search-input"===e.target.id){syncSearchClear();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="",syncSearchClear(),_searchMode&&exitSearchMode())}}),document.addEventListener("click",function(e){if(e.target.closest&&e.target.closest("#search-clear")){var t=document.getElementById("search-input");t&&(t.value="",_searchMode&&exitSearchMode(),t.focus()),syncSearchClear()}});
|
|
1
|
+
var _savedScrollTop=0,_isFirstRender=!0;function postMsg(e){webviewApi.postMessage(e)}function cssEscapeAttr(e){return String(null==e?"":e).replace(/(["\\])/g,"\\$1")}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;applyHeaderStacking()}});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 d(){var e=s.value;o.remove(),a(e)}function r(){o.remove(),a(null)}s.focus(),s.select(),o.querySelector(".inline-input-ok").addEventListener("click",d),o.querySelector(".inline-input-cancel").addEventListener("click",r),s.addEventListener("keydown",function(e){"Enter"===e.key&&d(),"Escape"===e.key&&r()}),o.addEventListener("click",function(e){e.target===o&&r()})}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 o=e.querySelector(".toggle");o&&(o.textContent=a?"▶":"▼",o.classList.toggle("expanded",!a))}function collapseAllLocal(){var e=document.getElementById("main-tree");e&&(e.querySelectorAll(".tree-item.folder").forEach(function(e){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 setSectionsCollapsed(e){for(var t=[["pinned-header","pinned-body"],["smart-header","smart-body"],["tree-header","main-tree"],["tags-header","tags-body"],["trash-header","trash-children"]],a=!1,n=0;n<t.length;n++){var o=document.getElementById(t[n][0]),s=document.getElementById(t[n][1]);if(o){a=!0,o.classList.toggle("collapsed",e),s&&s.classList.toggle("collapsed",e);var d=o.querySelector(".toggle");d&&(d.textContent=e?"▶":"▼")}}return a}function collapseScope(){var e=document.getElementById("notes-in-list-root");return e&&e.dataset.collapseScope||"notebooksOnly"}function applyHeaderStacking(){var e=document.getElementById("notes-in-list-root"),t=e&&"1"===e.dataset.stackHeaders,a=[];if(document.querySelectorAll(".pinned-section-header, .smart-section-header, .tree-section-header, .tags-section-header, .trash-section-header").forEach(function(e){a.push(e)}),t)for(var n=a.map(function(e){return e.offsetHeight}),o=0;o<a.length;o++){for(var s=0,d=0;d<o;d++)s+=n[d];for(var r=0,i=o+1;i<a.length;i++)r+=n[i];a[o].style.top=s+"px",a[o].style.bottom=r+"px"}else a.forEach(function(e){e.style.top="",e.style.bottom=""})}function expandAllLocal(){var e=document.getElementById("main-tree");if(!e)return[];var t=[];return e.querySelectorAll(".tree-item.folder").forEach(function(e){var a=e.dataset.id,n=document.querySelector('.children[data-folder-id="'+a+'"]'),o=n&&n.querySelector(".tree-item.folder"),s=e.querySelector(".toggle");o?(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=[],o=document.getElementById("main-tree");return o?(o.querySelectorAll(".tree-item.folder").forEach(function(e){var a=e.dataset.id,o=document.querySelector('.children[data-folder-id="'+a+'"]'),s=e.querySelector(".toggle"),d=!!t[a];e.classList.toggle("collapsed",d),o&&o.classList.toggle("collapsed",d),s&&(s.textContent=d?"▶":"▼",s.classList.toggle("expanded",!d)),d&&a&&n.push(a)}),n):n}_observer.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("click",function(e){e.target&&e.target.closest&&e.target.closest(".pinned-section-header, .smart-section-header, .tree-section-header, .tags-section-header, .trash-section-header")&&requestAnimationFrame(applyHeaderStacking)});var _collapseSnapshot=null;function expandAncestorsLocal(e){for(var t=[],a=e.closest(".children");a;){a.classList.contains("collapsed")&&(a.classList.remove("collapsed"),a.dataset.folderId&&t.push(a.dataset.folderId));var n=document.querySelector('.tree-item.folder:not(.pinned-item)[data-id="'+a.dataset.folderId+'"]');if(n){n.classList.remove("collapsed");var o=n.querySelector(".toggle");o&&(o.textContent="▼",o.classList.add("expanded"))}a=a.parentElement?a.parentElement.closest(".children"):null}return t}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 o=document.createElement("div");o.className="note-preview-title",o.textContent=e.title,n.appendChild(o);var s=document.createElement("div");s.className="note-preview-meta";for(var d=[T("pvType")+": "+(e.isTodo?T("pvTodo"):T("pvNote"))+" · "+T("pvSize")+": "+(e.size||0)+" "+T("pvChars"),T("pvCreated")+": "+g(e.created),T("pvUpdated")+": "+g(e.updated)],r=0;r<d.length;r++){var i=document.createElement("div");i.textContent=d[r],s.appendChild(i)}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(),p=n.getBoundingClientRect(),m=c.bottom+4;m+p.height>window.innerHeight-8&&(m=Math.max(8,c.top-p.height-4)),n.style.top=m+"px",n.style.left=Math.max(8,Math.min(c.left+20,window.innerWidth-p.width-8))+"px"}}function g(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"),o=t.nextElementSibling&&t.nextElementSibling.classList.contains("ctx-export-template")?t.nextElementSibling:n?n.querySelector(".ctx-export-template"):null;return void(n&&o&&(window._ctxMainHtml=n.innerHTML,n.innerHTML='<div class="ctx-item ctx-back">◂ '+(o.dataset.title||"")+'</div><div class="ctx-sep"></div>'+o.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 d=document.getElementById("ctx-menu");d&&d.remove()}else{var r=document.getElementById("ctx-menu");r&&r.remove();var i=e.target.closest(".shared-badge");if(i){var l=i.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 p=e.target.closest(".search-folder-item");if(p)p.dataset.folderId&&postMsg({name:"locateFolder",folderId:p.dataset.folderId});else{var m=e.target.closest(".pinned-section-header");if(m){var g=m.classList.toggle("collapsed"),v=document.getElementById("pinned-body");v&&v.classList.toggle("collapsed",g),g||(animateExpand(v),Le(m));var u=m.querySelector(".toggle");return u&&(u.textContent=g?"▶":"▼"),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),Le(f));var x=f.querySelector(".toggle");return x&&(x.textContent=h?"▶":"▼"),void postMsg({name:"toggleTagsSection"})}var S=e.target.closest(".tree-section-header");if(S){var E=S.classList.toggle("collapsed"),L=document.getElementById("main-tree");L&&L.classList.toggle("collapsed",E),E||(animateExpand(L),Le(S));var I=S.querySelector(".toggle");return I&&(I.textContent=E?"▶":"▼"),void postMsg({name:"toggleTreeSection"})}var b=e.target.closest(".smart-section-header");if(b){var w=b.classList.toggle("collapsed"),M=document.getElementById("smart-body");M&&M.classList.toggle("collapsed",w),w||(animateExpand(M),Le(b));var C=b.querySelector(".toggle");return C&&(C.textContent=w?"▶":"▼"),void postMsg({name:"toggleSmartSection"})}var N=e.target.closest(".smart-folder");if(N){var _=N.dataset.smartId,q=document.querySelector('.smart-children[data-smart-id="'+_+'"]');if(!q)return;var B=q.classList.toggle("collapsed");N.classList.toggle("collapsed",B),B||animateExpand(q);var D=N.querySelector(".toggle");return D&&(D.textContent=B?"▶":"▼"),void(B||postMsg({name:"smartFolderNotes",smartId:_,query:N.dataset.query}))}var A=e.target.closest(".trash-section-header");if(A){var F=A.classList.toggle("collapsed"),k=document.getElementById("trash-children");k&&k.classList.toggle("collapsed",F),F||(animateExpand(k),Le(A));var H=A.querySelector(".toggle");return H&&(H.textContent=F?"▶":"▼"),postMsg({name:"toggleTrashSection"}),void(F||!k||k.dataset.loaded||postMsg({name:"trashNotes"}))}var R=e.target.closest(".tag-folder");if(R){var P=R.dataset.tagId,O=R.dataset.tagPath,j=O?document.querySelector('.tag-children[data-tag-path="'+cssEscapeAttr(O)+'"]'):document.querySelector('.tag-children[data-tag-id="'+P+'"]');if(!j)return;var Y=j.classList.toggle("collapsed");R.classList.toggle("collapsed",Y),Y||animateExpand(j);var J=R.querySelector(".toggle");return J&&(J.textContent=Y?"▶":"▼"),void(Y||!P||j.dataset.loaded||postMsg({name:"tagFolderNotes",tagId:P}))}var W=e.target.closest(".search-section-header");if(W){var V=document.getElementById("search-section-"+W.dataset.section);if(V){var X=W.querySelector(".section-toggle");V.classList.contains("collapsed")?(V.classList.remove("collapsed"),X&&(X.textContent="▼")):(V.classList.add("collapsed"),X&&(X.textContent="▶"))}}else{var z=e.target.closest(".tree-item");if(z){if("1"===z.dataset.trash){if("folder"===z.dataset.type){var U=z.querySelector(".toggle");if(!U||!U.textContent)return;for(var $=Number(z.dataset.depth||0),G="▼"===U.textContent,K=document.querySelector('.trash-folder-children[data-folder-id="'+z.dataset.id+'"]'),Q=z.nextElementSibling;Q;){if(Q.classList.contains("trash-folder-children")){var Z=Number(Q.dataset.depth||0);if(Q===K)Q.classList.toggle("collapsed",G);else{if(!(Z>$))break;Q.classList.add("collapsed")}}else{if(!Q.classList.contains("tree-item")||"1"!==Q.dataset.trash||"folder"!==Q.dataset.type)break;var ee=Number(Q.dataset.depth||0);if(ee<=$)break;G?Q.classList.add("trash-hidden"):Q.classList.toggle("trash-hidden",ee!==$+1);var te=Q.querySelector(".toggle");te&&te.textContent&&(te.textContent="▶")}Q=Q.nextElementSibling}U.textContent=G?"▶":"▼",!G&&K&&(animateExpand(K),K.dataset.loaded||postMsg({name:"trashFolderNotes",folderId:z.dataset.id}))}else"note"===z.dataset.type&&postMsg({name:"openNote",id:z.dataset.id});return}var ae=z.dataset.type,ne=z.dataset.id,oe=z.classList.contains("pinned-item");if("note"===ae)document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),z.classList.add("selected"),postMsg({name:"openNote",id:ne});else if("folder"===ae)if(oe)postMsg({name:"locatePinnedFolder",folderId:ne});else if(toggleFolderLocal(z,ne),postMsg({name:"toggleFolder",id:ne}),!z.classList.contains("collapsed")){var se=document.getElementById("btn-collapse-all");se&&"expand"===se.dataset.mode&&(se.dataset.mode="collapse",se.textContent="▲",se.title=T("collapseAll"))}}else{var de=e.target.closest("button");if(de)switch(de.id){case"btn-new":var re=document.getElementById("ctx-menu");if(re){re.remove();break}var ie=document.getElementById("btn-new");if(!ie)break;var le=ie.getBoundingClientRect();document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+le.left+"px;top:"+(le.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 ce=document.getElementById("btn-collapse-all"),pe=document.getElementById("notes-in-list-root"),me=pe&&pe.dataset.expandMode||"restore",ge="allSections"===collapseScope();if("collapseOnly"===me){collapseAllLocal(),postMsg({name:"collapseAll",sections:!!ge&&setSectionsCollapsed(!0)}),ce&&(ce.dataset.mode="collapse",ce.textContent="▲",ce.title=T("collapseAll"));break}if(ce&&"expand"===ce.dataset.mode){var ve,ue=document.getElementById("notes-in-list-root"),fe=ue&&ue.dataset.expandMode||"restore";if("all"===fe)ve=applyCollapsedSet([]);else if("restore"===fe){var he=_collapseSnapshot;if(!he&&ue)try{he=JSON.parse(ue.dataset.collapseSnapshot||"null")}catch(e){he=null}ve=Array.isArray(he)?applyCollapsedSet(he):expandAllLocal()}else ve=expandAllLocal();var ye=document.querySelectorAll("#main-tree .tree-item.folder").length;"skeleton"!==fe&&ye>0&&ve.length>=ye&&(ve=applyCollapsedSet([])),postMsg({name:"expandAll",collapsedIds:ve,sections:!!ge&&setSectionsCollapsed(!1)}),ce.dataset.mode="collapse",ce.textContent="▲",ce.title=T("collapseAll")}else{var xe=[],Te=0;document.querySelectorAll("#main-tree .tree-item.folder").forEach(function(e){e.dataset.id&&(Te++,e.classList.contains("collapsed")&&xe.push(e.dataset.id))}),collapseAllLocal();var Se=!!ge&&setSectionsCollapsed(!0);xe.length>=Te&&Te>0?postMsg({name:"collapseAll",sections:Se}):(_collapseSnapshot=xe,postMsg({name:"collapseAll",prevCollapsed:xe,sections:Se})),ce&&(ce.dataset.mode="expand",ce.textContent="▼",ce.title=T("expandAll"))}break;case"btn-reveal":if(_searchMode){var Ee=document.getElementById("search-input");Ee&&(Ee.value=""),exitSearchMode()}else revealSelectedNote();break;case"btn-refresh":postMsg({name:"refreshView"});break;case"btn-sync":de.classList.contains("syncing")?(de.disabled=!0,de.textContent=T("syncCancelling"),postMsg({name:"syncCancel"})):de.disabled||(de.classList.add("syncing"),de.textContent="✕ "+T("syncCancel"),postMsg({name:"sync"}))}}}}}}}function Le(e){var t=document.getElementById("tree-container");if(t&&e){var a=parseInt(e.style.top||"",10);(!isFinite(a)||a<0)&&(a=0);var n=e.style.position;e.style.position="static";var o=e.getBoundingClientRect().top-t.getBoundingClientRect().top+t.scrollTop;e.style.position=n;var s=o-a,d=t.scrollHeight-t.clientHeight;s>d&&(s=d),s<0&&(s=0);var r=t.scrollTop,i=s-r;if(!(Math.abs(i)<2)){var l=performance.now();requestAnimationFrame(function e(a){var n=Math.min(1,(a-l)/260),o=n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2,s=r+i*o;t.scrollTop=s,_savedScrollTop=s,n<1&&requestAnimationFrame(e)})}}}}),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,o=a.dataset.id;if("smart"!==n){var s="",d=a.querySelector(".label");d&&(s=d.textContent);var r='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("1"===a.dataset.trash){var i="folder"===n?"trashFolder":"trashNote";r+='<div class="ctx-item" data-action="restoreItem" data-id="'+o+'" data-type="'+i+'">'+T("ctxRestoreNote")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="permanentDeleteItem" data-id="'+o+'" data-type="'+i+'">'+T("ctxPermanentDelete")+"</div>"}else if("folder"===n){var l=isPinned(o);r+='<div class="ctx-item" data-action="'+(l?"unpinFolder":"pinFolder")+'" data-id="'+o+'" data-type="folder">'+T(l?"ctxUnpin":"ctxPin")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="newNote" data-id="'+o+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",r+='<div class="ctx-item" data-action="newTodo" data-id="'+o+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",r+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+o+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="renameFolder" data-id="'+o+'" data-type="folder" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",r+='<div class="ctx-item" data-action="copyFolderId" data-id="'+o+'" data-type="folder">'+T("ctxCopyFolderId")+"</div>",r+='<div class="ctx-item ctx-drill">'+T("ctxExportFolder")+'<span class="ctx-sub-arrow">▶</span></div>',r+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExportFolder")+'"><div class="ctx-item" data-action="exportFolder" data-format="jex" data-id="'+o+'" data-type="folder">JEX</div><div class="ctx-item" data-action="exportFolder" data-format="md" data-id="'+o+'" data-type="folder">Markdown</div><div class="ctx-item" data-action="exportFolder" data-format="md_frontmatter" data-id="'+o+'" data-type="folder">Markdown + Front Matter</div><div class="ctx-item" data-action="exportFolder" data-format="html" data-id="'+o+'" data-type="folder">HTML</div></div>',r+='<div class="ctx-sep"></div>',r+='<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);r+='<div class="ctx-item" data-action="'+(c?"unpinNote":"pinNote")+'" data-id="'+o+'" data-type="note">'+T(c?"ctxUnpin":"ctxPin")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="openNote" data-id="'+o+'" data-type="note">'+T("ctxOpenNote")+"</div>",r+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+o+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",r+='<div class="ctx-item" data-action="editExternally" data-id="'+o+'" data-type="note">'+T("ctxEditExternally")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="setTags" data-id="'+o+'" data-type="note">'+T("ctxSetTags")+"</div>",r+='<div class="ctx-item" data-action="switchNoteType" data-id="'+o+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(r+='<div class="ctx-item" data-action="toggleTodo" data-id="'+o+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),r+='<div class="ctx-item" data-action="moveToFolderDialog" data-id="'+o+'" data-type="note">'+T("ctxMoveToFolder")+"</div>",r+='<div class="ctx-item" data-action="duplicateNote" data-id="'+o+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="copyLink" data-id="'+o+'" data-type="note">'+T("ctxCopyLink")+"</div>",r+='<div class="ctx-item" data-action="copyExternalLink" data-id="'+o+'" data-type="note">'+T("ctxCopyExternalLink")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="publishNote" data-id="'+o+'" data-type="note">'+T("ctxPublishNote")+"</div>",r+='<div class="ctx-item ctx-drill">'+T("ctxExport")+'<span class="ctx-sub-arrow">▶</span></div>',r+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExport")+'"><div class="ctx-item" data-action="exportPdf" data-id="'+o+'" data-type="note">PDF</div><div class="ctx-item" data-action="exportNote" data-format="md" data-id="'+o+'" data-type="note">Markdown</div><div class="ctx-item" data-action="exportNote" data-format="md_frontmatter" data-id="'+o+'" data-type="note">Markdown + Front Matter</div><div class="ctx-item" data-action="exportNote" data-format="jex" data-id="'+o+'" data-type="note">JEX</div><div class="ctx-item" data-action="exportNote" data-format="html" data-id="'+o+'" data-type="note">HTML</div></div>',r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="renameNote" data-id="'+o+'" data-type="note" data-title="'+s.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",r+='<div class="ctx-item" data-action="noteInfo" data-id="'+o+'" data-type="note">'+T("ctxNoteInfo")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+o+'" data-type="note">'+T("ctxDeleteNote")+"</div>",a.dataset.tagId&&(r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item" data-action="untagNote" data-id="'+o+'" data-type="note" data-tag-id="'+a.dataset.tagId+'">'+T("ctxUntagNote")+"</div>")}else if("tag"===n){var p=a.dataset.tagId;p&&(r+='<div class="ctx-item" data-action="renameTag" data-id="'+p+'" data-type="tag">'+T("ctxRenameTag")+"</div>",r+='<div class="ctx-sep"></div>',r+='<div class="ctx-item ctx-danger" data-action="deleteTag" data-id="'+p+'" data-type="tag">'+T("ctxDeleteTag")+"</div>")}if(!((r+="</div>").indexOf("ctx-item")<0)){document.body.insertAdjacentHTML("beforeend",r);var m=document.getElementById("ctx-menu"),g=m.getBoundingClientRect();g.right>window.innerWidth&&(m.style.left=window.innerWidth-g.width-4+"px"),g.bottom>window.innerHeight&&(m.style.top=window.innerHeight-g.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=!1,a.classList.remove("sync-done","sync-error"),a.classList.add("syncing"),a.textContent="✕ "+T("syncCancel")):"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 o=n.dataset.noteIndent,s=o?' style="padding-left:'+o+'px"':"",d="",r=0;r<t.notes.length;r++){var i=t.notes[r],l=i.is_todo?i.todo_completed?"☑":"☐":"📝";d+='<div class="tree-item note tag-note"'+s+' data-id="'+i.id+'" data-type="note" data-tag-id="'+t.tagId+'" data-todo="'+(i.is_todo?1:0)+'"><span class="icon note-icon">'+l+'</span><span class="label">'+escapeHtml(i.title)+"</span></div>"}t.notes.length||n.children.length||(d='<div class="tag-empty">—</div>'),n.insertAdjacentHTML("beforeend",d)}}else if("trashNotes"===t.name){var c=document.getElementById("trash-children");if(c){c.dataset.loaded="1";for(var p="",m=t.folders||[],g=0;g<m.length;g++){var v=m[g],u=v.depth||0;p+='<div class="tree-item folder trash-note" style="padding-left:'+(34+16*u)+'px" data-id="'+v.id+'" data-type="folder" data-trash="1" data-depth="'+u+'"><span class="toggle">'+(v.hasNotes||v.hasSub?"▶":"")+'</span><span class="icon">📁</span><span class="label">'+escapeHtml(v.title)+"</span></div>",v.hasNotes&&(p+='<div class="trash-folder-children collapsed" data-folder-id="'+v.id+'" data-depth="'+u+'"></div>')}for(var f=t.notes||[],h=0;h<f.length;h++){var y=f[h],x=y.is_todo?y.todo_completed?"☑":"☐":"📝";p+='<div class="tree-item note trash-note" style="padding-left:34px" data-id="'+y.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+x+'</span><span class="label">'+escapeHtml(y.title)+"</span></div>"}p||(p='<div class="tag-empty">—</div>'),c.innerHTML=p}}else if("smartFolderNotes"===t.name){var S=document.querySelector('.smart-children[data-smart-id="'+t.smartId+'"]');if(S){for(var E="",L=0;L<t.notes.length;L++){var I=t.notes[L],b=I.is_todo?I.todo_completed?"☑":"☐":"📝";E+='<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">'+b+'</span><span class="label">'+escapeHtml(I.title)+"</span>"+(I.badges||"")+"</div>"}t.notes.length||(E='<div class="tag-empty">—</div>'),S.innerHTML=E}}else if("notePreview"===t.name)showPreview(t);else if("trashFolderNotes"===t.name){var w=document.querySelector('.trash-folder-children[data-folder-id="'+t.folderId+'"]');if(w){w.dataset.loaded="1";for(var M=34+16*(parseInt(w.dataset.depth||"0",10)+1),C="",N=0;N<t.notes.length;N++){var _=t.notes[N],q=_.is_todo?_.todo_completed?"☑":"☐":"📝";C+='<div class="tree-item note trash-note" style="padding-left:'+M+'px" data-id="'+_.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+q+'</span><span class="label">'+escapeHtml(_.title)+"</span></div>"}t.notes.length||(C='<div class="tag-empty" style="padding-left:'+M+'px">—</div>'),w.innerHTML=C}}else if("tagNotes"===t.name)expandTagNotes(t.tagId,t.notes);else if("scrollToFolder"===t.name)setTimeout(function(){locateFolderInTree(t.folderId)},80);else if("exitSearch"===t.name){var B=document.getElementById("search-input");B&&(B.value=""),syncSearchClear(),_searchMode&&exitSearchMode()}else if("exitSearchAndLocate"===t.name){var D=document.getElementById("search-input");D&&(D.value=""),syncSearchClear(),_searchMode=!1,showSearchContainer(!1),setTimeout(function(){locateFolderInTree(t.folderId)},80)}else if("copyText"===t.name)if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t.text);else{var A=document.createElement("textarea");A.value=t.text,document.body.appendChild(A),A.select(),document.execCommand("copy"),A.remove()}else if("selectNote"===t.name){document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")});var F=document.getElementById("main-tree"),k=F?F.querySelector('.tree-item.note[data-id="'+t.id+'"]'):null;if(k||(k=document.querySelector('.tree-item.note[data-id="'+t.id+'"]')),k){k.classList.add("selected"),F&&F.contains(k)&&ensureTreeSectionExpanded();var H=F&&F.contains(k)?expandAncestorsLocal(k):[];requestAnimationFrame(function(){var e=document.getElementById("tree-container");if(e){var t=e.getBoundingClientRect(),a=k.getBoundingClientRect();a.top<t.top||a.bottom>t.bottom?k.scrollIntoView({block:"center",behavior:"smooth"}):_savedScrollTop=e.scrollTop}else k.scrollIntoView({block:"nearest",behavior:"instant"})}),H.length&&postMsg({name:"revealNote",folderIds:H})}}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),e.querySelectorAll(".todo-pie, .shared-badge").forEach(function(e){e.remove()}),t.badges&&e.insertAdjacentHTML("beforeend",t.badges)})}}),document.addEventListener("dblclick",function(e){var t=e.target;if(!t||!t.closest||!t.closest("#ctx-menu")&&!t.closest("#note-preview")){var a=t.closest?t.closest(".tree-item.note"):null;a&&"1"!==a.dataset.trash&&a.dataset.id&&postMsg({name:"contextMenu",action:"openInNewWindow",id:a.dataset.id,itemType:"note"})}}),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/x-je-item",JSON.stringify({id:t.dataset.id,type:t.dataset.type,pinned:a})),"note"===t.dataset.type?e.dataTransfer.setData("text/x-jop-note-ids",JSON.stringify([t.dataset.id])):"folder"===t.dataset.type&&e.dataTransfer.setData("text/x-jop-folder-ids",JSON.stringify([t.dataset.id])),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,o=document.getElementById("drop-zone-empty");if(o&&t.classList.contains("dragging-active")){var s=o.getBoundingClientRect();s.height>0&&s.top>a.top&&(n=s.top)}var d=0;e<a.top+40?d=-Math.ceil((a.top+40-e)/4):e>n?d=0:e>n-40&&(d=Math.ceil((e-(n-40))/4)),_dragScrollDir=d,d&&!_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,springCancel(),_dragHoverEl=null,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()});var SPRING_EXPAND_MS=2e3,_springEl=null,_springTimer=null,_dragHoverEl=null;function springCancel(){_springTimer&&clearTimeout(_springTimer),_springTimer=null,_springEl=null}function springSchedule(e,t){_springEl!==e&&(springCancel(),_springEl=e,_springTimer=setTimeout(function(){var a=document.querySelector(".tree-item.dragging")&&document.contains(e)&&_dragHoverEl&&e.contains(_dragHoverEl);springCancel(),a&&t()},SPRING_EXPAND_MS))}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){_dragHoverEl=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{var n=t.closest(".pinned-section-header");if(n)return e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),void(n.classList.contains("collapsed")&&springSchedule(n,function(){n.classList.remove("collapsed");var e=document.getElementById("pinned-body");e&&e.classList.remove("collapsed");var t=n.querySelector(".toggle");t&&(t.textContent="▼"),postMsg({name:"togglePinnedCollapse"})}));if(t.closest(".pinned-section-body")){var o=document.querySelector(".tree-item.dragging.pinned-item"),s=document.querySelector(".tree-item.dragging");if(o&&a&&a.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var d=a.getBoundingClientRect();e.clientY-d.top<.5*d.height?a.classList.add("drop-above"):a.classList.add("drop-below")}else if(s&&!o&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),a&&a.classList.contains("pinned-item"))){var r=a.getBoundingClientRect();e.clientY-r.top<.5*r.height?a.classList.add("drop-above"):a.classList.add("drop-below")}}else{var i=t.closest(".tag-folder");if(i)document.querySelector(".tree-item.note.dragging")&&i.dataset.tagId&&(e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators(),i.classList.add("drop-target"));else{var l=t.closest(".tree-section-header, .tags-section-header");if(l&&l.classList.contains("collapsed"))springSchedule(l,function(){var e=l.classList.contains("tree-section-header"),t=document.getElementById(e?"main-tree":"tags-body");l.classList.remove("collapsed"),t&&t.classList.remove("collapsed");var a=l.querySelector(".toggle");a&&(a.textContent="▼"),postMsg({name:e?"toggleTreeSection":"toggleTagsSection"})});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 c=document.querySelector(".tree-item.dragging");if(!c||!c.classList.contains("pinned-item")){e.preventDefault(),e.dataTransfer.dropEffect="move",clearDropIndicators();var p=a.dataset.type,m=a.getBoundingClientRect(),g=e.clientY-m.top,v=m.height;"folder"===p?g<.25*v?(a.classList.add("drop-above"),springCancel()):g>.75*v?(a.classList.add("drop-below"),springCancel()):(a.classList.add("drop-target"),a.classList.contains("collapsed")&&a!==c&&springSchedule(a,function(){toggleFolderLocal(a,a.dataset.id),postMsg({name:"toggleFolder",id:a.dataset.id})})):"manual"===currentSortMode()?g<.5*v?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/x-je-item"))}catch(e){return void endDrag()}if(a&&a.id){var o=a.id,s=a.type,d=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!d)return postMsg({name:"dragToEmpty",dragId:o,dragType:s}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!d)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")){var r=n&&n.classList.contains("pinned-item")?n:null;if(d){if(r&&r.dataset.id!==o){var i=r.getBoundingClientRect(),l=e.clientY-i.top<.5*i.height?"before":"after";postMsg({name:"reorderPinned",dragId:o,dragType:s,targetId:r.dataset.id,position:l})}}else{var c={name:"pinItemAt",dragId:o,dragType:s};if(r&&r.dataset.id!==o){var p=r.getBoundingClientRect();c.targetId=r.dataset.id,c.position=e.clientY-p.top<.5*p.height?"before":"after"}postMsg(c)}endDrag()}else{var m=t?t.closest(".tag-folder"):null;if(m)return"note"===s&&m.dataset.tagId&&postMsg({name:"tagNoteAdd",tagId:m.dataset.tagId,noteId:o}),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(d)endDrag();else if(n){var g=n.dataset.id,v=n.dataset.type;if(o!==g){var u=n.getBoundingClientRect(),f=e.clientY-u.top,h=u.height;postMsg("folder"===v?f>=.25*h&&f<=.75*h?{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:"into"}:{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:f<.25*h?"above":"below"}:"note"===s?{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:f<.5*h?"above":"below"}:{name:"dragDrop",dragId:o,dragType:s,targetId:g,position:"into"}),endDrag()}else 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 d='<div class="search-status">'+T("searchResultCount").replace("{count}",s)+"</div>";if(a.length>0){d+=v("📁",T("searchSectionFolders"),a.length,"folders"),d+='<div class="search-section-body" id="search-section-folders">';for(var r=0;r<a.length;r++){var i=a[r],l=i.iconEmoji||"📁";d+='<div class="search-result-item search-folder-item" data-folder-id="'+i.id+'">',d+='<span class="icon">'+l+"</span>",d+='<div class="search-result-content">',d+='<div class="search-result-title">'+highlightText(i.title,n)+"</div>",d+="</div></div>"}d+="</div>"}if(e.length>0){d+=v("📝",T("searchSectionNotes"),e.length,"notes"),d+='<div class="search-section-body" id="search-section-notes">';for(var c=0;c<e.length;c++)d+=renderNoteItem(e[c],n);d+="</div>"}if(t.length>0){d+=v("🏷️",T("searchSectionTags"),t.length,"tags"),d+='<div class="search-section-body" id="search-section-tags">';for(var p=0;p<t.length;p++){var m=t[p],g=T("searchTagNoteCount").replace("{count}",m.noteCount);d+='<div class="search-result-item search-tag-item" data-tag-id="'+m.id+'">',d+='<span class="icon">🏷️</span>',d+='<div class="search-result-content">',d+='<div class="search-result-title">'+highlightText(m.title,n)+"</div>",d+='<div class="search-result-folder">'+g+"</div>",d+="</div>",d+='<span class="tag-expand-arrow">▶</span>',d+="</div>",d+='<div class="tag-notes-container" id="tag-notes-'+m.id+'"></div>'}d+="</div>"}o.innerHTML=d,_searchMode=!0}else o.innerHTML='<div class="search-status">'+T("searchNoResult")+"</div>"}function v(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 locateFolderInTree(e){ensureTreeSectionExpanded();var t=document.getElementById("main-tree"),a=t?t.querySelector('.tree-item.folder[data-id="'+e+'"]'):null;a&&(expandAncestorsLocal(a),requestAnimationFrame(function(){a.scrollIntoView({block:"center",behavior:"smooth"}),a.classList.add("locate-flash"),setTimeout(function(){a.classList.remove("locate-flash")},1500)}))}function ensureTreeSectionExpanded(){var e=document.getElementById("main-tree");if(e&&e.classList.contains("collapsed")){e.classList.remove("collapsed");var t=document.getElementById("tree-header");if(t){t.classList.remove("collapsed");var a=t.querySelector(".toggle");a&&(a.textContent="▼")}postMsg({name:"toggleTreeSection"})}}function revealSelectedNote(){ensureTreeSectionExpanded();var e=document.getElementById("tree-container"),t=document.getElementById("main-tree");if(e&&t){var a=t.querySelector(".tree-item.note.selected");if(!a){var n=document.querySelector(".tree-item.note.selected");n&&n.dataset.id&&(a=t.querySelector('.tree-item.note[data-id="'+n.dataset.id+'"]'))&&a.classList.add("selected")}if(a){var o=expandAncestorsLocal(a);o.length&&postMsg({name:"revealNote",folderIds:o}),requestAnimationFrame(function(){a.scrollIntoView({block:"center",behavior:"smooth"})})}}}function exitSearchMode(){_searchMode=!1,showSearchContainer(!1),revealSelectedNote()}function syncSearchClear(){var e=document.querySelector(".search-bar"),t=document.getElementById("search-input");e&&t&&e.classList.toggle("has-text",!!t.value)}document.addEventListener("input",function(e){if("search-input"===e.target.id){syncSearchClear();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="",syncSearchClear(),_searchMode&&exitSearchMode())}}),document.addEventListener("click",function(e){if(e.target.closest&&e.target.closest("#search-clear")){var t=document.getElementById("search-input");t&&(t.value="",_searchMode&&exitSearchMode(),t.focus()),syncSearchClear()}});
|