joplin-plugin-explorer 1.7.0 → 1.8.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 +1 -0
- 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/panel.css +22 -0
- package/publish/webview/panel.js +1 -1
- package/publish/webview/smart-dialog.css +105 -0
- package/publish/webview/smart-dialog.js +1 -0
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.8.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
|
|
@@ -701,6 +701,28 @@ html, body {
|
|
|
701
701
|
border-bottom: 1px solid var(--joplin-divider-color, #eee);
|
|
702
702
|
}
|
|
703
703
|
|
|
704
|
+
/* Count on the left, "Save as smart folder" on the right (#43). */
|
|
705
|
+
.search-status-row {
|
|
706
|
+
display: flex;
|
|
707
|
+
align-items: center;
|
|
708
|
+
justify-content: space-between;
|
|
709
|
+
gap: 8px;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.search-save-smart {
|
|
713
|
+
flex: none;
|
|
714
|
+
border: 1px solid var(--joplin-divider-color, #ccc);
|
|
715
|
+
background: transparent;
|
|
716
|
+
color: var(--joplin-color, inherit);
|
|
717
|
+
font-size: 11px;
|
|
718
|
+
padding: 2px 8px;
|
|
719
|
+
border-radius: 10px;
|
|
720
|
+
cursor: pointer;
|
|
721
|
+
white-space: nowrap;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
.search-save-smart:hover { background: var(--joplin-background-color-hover3, rgba(127, 127, 127, 0.15)); }
|
|
725
|
+
|
|
704
726
|
.search-result-item {
|
|
705
727
|
display: flex;
|
|
706
728
|
align-items: flex-start;
|
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.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()}});
|
|
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(),restoreSearchAfterRefresh()}});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 s=document.createElement("div");s.id="inline-input-overlay",s.className="inline-input-overlay",s.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(s);var o=s.querySelector(".inline-input-field");function d(){var e=o.value;s.remove(),a(e)}function r(){s.remove(),a(null)}o.focus(),o.select(),s.querySelector(".inline-input-ok").addEventListener("click",d),s.querySelector(".inline-input-cancel").addEventListener("click",r),o.addEventListener("keydown",function(e){"Enter"===e.key&&d(),"Escape"===e.key&&r()}),s.addEventListener("click",function(e){e.target===s&&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 s=e.querySelector(".toggle");s&&(s.textContent=a?"▶":"▼",s.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 s=document.getElementById(t[n][0]),o=document.getElementById(t[n][1]);if(s){a=!0,s.classList.toggle("collapsed",e),o&&o.classList.toggle("collapsed",e);var d=s.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}),s=0;s<a.length;s++){for(var o=0,d=0;d<s;d++)o+=n[d];for(var r=0,i=s+1;i<a.length;i++)r+=n[i];a[s].style.top=o+"px",a[s].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+'"]'),s=n&&n.querySelector(".tree-item.folder"),o=e.querySelector(".toggle");s?(e.classList.remove("collapsed"),n&&n.classList.remove("collapsed"),o&&(o.textContent="▼",o.classList.add("expanded"))):(e.classList.add("collapsed"),n&&n.classList.add("collapsed"),o&&(o.textContent="▶",o.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=[],s=document.getElementById("main-tree");return s?(s.querySelectorAll(".tree-item.folder").forEach(function(e){var a=e.dataset.id,s=document.querySelector('.children[data-folder-id="'+a+'"]'),o=e.querySelector(".toggle"),d=!!t[a];e.classList.toggle("collapsed",d),s&&s.classList.toggle("collapsed",d),o&&(o.textContent=d?"▶":"▼",o.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 s=n.querySelector(".toggle");s&&(s.textContent="▼",s.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 s=document.createElement("div");s.className="note-preview-title",s.textContent=e.title,n.appendChild(s);var o=document.createElement("div");o.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],o.appendChild(i)}n.appendChild(o);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(),m=n.getBoundingClientRect(),p=c.bottom+4;p+m.height>window.innerHeight-8&&(p=Math.max(8,c.top-m.height-4)),n.style.top=p+"px",n.style.left=Math.max(8,Math.min(c.left+20,window.innerWidth-m.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.smartOpen){var a=document.getElementById("ctx-menu");return a&&a.remove(),void runSearch(t.dataset.query||"","1"===t.dataset.custom&&t.dataset.title||"")}if(t.dataset.msg){postMsg({name:t.dataset.msg});var n=document.getElementById("ctx-menu");return void(n&&n.remove())}if(t.classList.contains("ctx-drill")){var s=document.getElementById("ctx-menu"),o=t.nextElementSibling&&t.nextElementSibling.classList.contains("ctx-export-template")?t.nextElementSibling:s?s.querySelector(".ctx-export-template"):null;return void(s&&o&&(window._ctxMainHtml=s.innerHTML,s.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 d=document.getElementById("ctx-menu");return void(d&&window._ctxMainHtml&&(d.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 r=document.getElementById("ctx-menu");r&&r.remove()}else{var i=document.getElementById("ctx-menu");i&&i.remove();var l=e.target.closest(".shared-badge");if(l){var c=l.closest(".tree-item");c&&c.dataset.id&&postMsg({name:"contextMenu",action:"publishNote",id:c.dataset.id,itemType:"note"})}else{var m=e.target.closest(".search-tag-item");if(m)m.dataset.tagId&&postMsg({name:"loadTagNotes",tagId:m.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 g=e.target.closest(".pinned-section-header");if(g){var v=g.classList.toggle("collapsed"),u=document.getElementById("pinned-body");u&&u.classList.toggle("collapsed",v),v||(animateExpand(u),Ie(g));var f=g.querySelector(".toggle");return f&&(f.textContent=v?"▶":"▼"),void postMsg({name:"togglePinnedCollapse"})}var h=e.target.closest(".tags-section-header");if(h){var y=h.classList.toggle("collapsed"),x=document.getElementById("tags-body");x&&x.classList.toggle("collapsed",y),y||(animateExpand(x),Ie(h));var S=h.querySelector(".toggle");return S&&(S.textContent=y?"▶":"▼"),void postMsg({name:"toggleTagsSection"})}var E=e.target.closest(".tree-section-header");if(E){var L=E.classList.toggle("collapsed"),I=document.getElementById("main-tree");I&&I.classList.toggle("collapsed",L),L||(animateExpand(I),Ie(E));var b=E.querySelector(".toggle");return b&&(b.textContent=L?"▶":"▼"),void postMsg({name:"toggleTreeSection"})}var w=e.target.closest(".smart-section-header");if(w){var M=w.classList.toggle("collapsed"),C=document.getElementById("smart-body");C&&C.classList.toggle("collapsed",M),M||(animateExpand(C),Ie(w));var _=w.querySelector(".toggle");return _&&(_.textContent=M?"▶":"▼"),void postMsg({name:"toggleSmartSection"})}var N=e.target.closest(".smart-folder");if(N){var B=N.dataset.smartId,q=document.querySelector('.smart-children[data-smart-id="'+B+'"]');if(!q)return;var D=q.classList.toggle("collapsed");N.classList.toggle("collapsed",D),D||animateExpand(q);var A=N.querySelector(".toggle");return A&&(A.textContent=D?"▶":"▼"),void(D||postMsg({name:"smartFolderNotes",smartId:B,query:N.dataset.query}))}var F=e.target.closest(".trash-section-header");if(F){var H=F.classList.toggle("collapsed"),k=document.getElementById("trash-children");k&&k.classList.toggle("collapsed",H),H||(animateExpand(k),Ie(F));var R=F.querySelector(".toggle");return R&&(R.textContent=H?"▶":"▼"),postMsg({name:"toggleTrashSection"}),void(H||!k||k.dataset.loaded||postMsg({name:"trashNotes"}))}var P=e.target.closest(".tag-folder");if(P){var O=P.dataset.tagId,j=P.dataset.tagPath,Y=j?document.querySelector('.tag-children[data-tag-path="'+cssEscapeAttr(j)+'"]'):document.querySelector('.tag-children[data-tag-id="'+O+'"]');if(!Y)return;var J=Y.classList.toggle("collapsed");P.classList.toggle("collapsed",J),J||animateExpand(Y);var Q=P.querySelector(".toggle");return Q&&(Q.textContent=J?"▶":"▼"),void(J||!O||Y.dataset.loaded||postMsg({name:"tagFolderNotes",tagId:O}))}var W=e.target.closest(".search-section-header");if(W){var X=document.getElementById("search-section-"+W.dataset.section);if(X){var V=W.querySelector(".section-toggle");X.classList.contains("collapsed")?(X.classList.remove("collapsed"),V&&(V.textContent="▼")):(X.classList.add("collapsed"),V&&(V.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+'"]'),Z=z.nextElementSibling;Z;){if(Z.classList.contains("trash-folder-children")){var ee=Number(Z.dataset.depth||0);if(Z===K)Z.classList.toggle("collapsed",G);else{if(!(ee>$))break;Z.classList.add("collapsed")}}else{if(!Z.classList.contains("tree-item")||"1"!==Z.dataset.trash||"folder"!==Z.dataset.type)break;var te=Number(Z.dataset.depth||0);if(te<=$)break;G?Z.classList.add("trash-hidden"):Z.classList.toggle("trash-hidden",te!==$+1);var ae=Z.querySelector(".toggle");ae&&ae.textContent&&(ae.textContent="▶")}Z=Z.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 ne=z.dataset.type,se=z.dataset.id,oe=z.classList.contains("pinned-item");if("note"===ne)document.querySelectorAll(".tree-item.note.selected").forEach(function(e){e.classList.remove("selected")}),z.classList.add("selected"),postMsg({name:"openNote",id:se});else if("folder"===ne)if(oe)postMsg({name:"locatePinnedFolder",folderId:se});else if(toggleFolderLocal(z,se),postMsg({name:"toggleFolder",id:se}),!z.classList.contains("collapsed")){var de=document.getElementById("btn-collapse-all");de&&"expand"===de.dataset.mode&&(de.dataset.mode="collapse",de.textContent="▲",de.title=T("collapseAll"))}}else{var re=e.target.closest("button");if(re)switch(re.id){case"btn-new":var ie=document.getElementById("ctx-menu");if(ie){ie.remove();break}var le=document.getElementById("btn-new");if(!le)break;var ce=le.getBoundingClientRect();document.body.insertAdjacentHTML("beforeend",'<div id="ctx-menu" class="context-menu" style="left:'+ce.left+"px;top:"+(ce.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 me=document.getElementById("btn-collapse-all"),pe=document.getElementById("notes-in-list-root"),ge=pe&&pe.dataset.expandMode||"restore",ve="allSections"===collapseScope();if("collapseOnly"===ge){collapseAllLocal(),postMsg({name:"collapseAll",sections:!!ve&&setSectionsCollapsed(!0)}),me&&(me.dataset.mode="collapse",me.textContent="▲",me.title=T("collapseAll"));break}if(me&&"expand"===me.dataset.mode){var ue,fe=document.getElementById("notes-in-list-root"),he=fe&&fe.dataset.expandMode||"restore";if("all"===he)ue=applyCollapsedSet([]);else if("restore"===he){var ye=_collapseSnapshot;if(!ye&&fe)try{ye=JSON.parse(fe.dataset.collapseSnapshot||"null")}catch(e){ye=null}ue=Array.isArray(ye)?applyCollapsedSet(ye):expandAllLocal()}else ue=expandAllLocal();var xe=document.querySelectorAll("#main-tree .tree-item.folder").length;"skeleton"!==he&&xe>0&&ue.length>=xe&&(ue=applyCollapsedSet([])),postMsg({name:"expandAll",collapsedIds:ue,sections:!!ve&&setSectionsCollapsed(!1)}),me.dataset.mode="collapse",me.textContent="▲",me.title=T("collapseAll")}else{var Se=[],Te=0;document.querySelectorAll("#main-tree .tree-item.folder").forEach(function(e){e.dataset.id&&(Te++,e.classList.contains("collapsed")&&Se.push(e.dataset.id))}),collapseAllLocal();var Ee=!!ve&&setSectionsCollapsed(!0);Se.length>=Te&&Te>0?postMsg({name:"collapseAll",sections:Ee}):(_collapseSnapshot=Se,postMsg({name:"collapseAll",prevCollapsed:Se,sections:Ee})),me&&(me.dataset.mode="expand",me.textContent="▼",me.title=T("expandAll"))}break;case"btn-reveal":if(_searchMode){var Le=document.getElementById("search-input");Le&&(Le.value=""),exitSearchMode()}else revealSelectedNote();break;case"btn-refresh":postMsg({name:"refreshView"});break;case"btn-sync":re.classList.contains("syncing")?(re.disabled=!0,re.textContent=T("syncCancelling"),postMsg({name:"syncCancel"})):re.disabled||(re.classList.add("syncing"),re.textContent="✕ "+T("syncCancel"),postMsg({name:"sync"}))}}}}}}}function Ie(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 s=e.getBoundingClientRect().top-t.getBoundingClientRect().top+t.scrollTop;e.style.position=n;var o=s-a,d=t.scrollHeight-t.clientHeight;o>d&&(o=d),o<0&&(o=0);var r=t.scrollTop,i=o-r;if(!(Math.abs(i)<2)){var l=performance.now();requestAnimationFrame(function e(a){var n=Math.min(1,(a-l)/260),s=n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2,o=r+i*s;t.scrollTop=o,_savedScrollTop=o,n<1&&requestAnimationFrame(e)})}}}}),document.addEventListener("contextmenu",function(e){hidePreview();var t=document.getElementById("ctx-menu");if(t&&t.remove(),e.target.closest(".smart-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" data-msg="manageSmartFolders">'+T("smartManage")+"</div></div>");if(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,s=a.dataset.id;if("smart"===n){var o='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;"><div class="ctx-item" data-smart-open="1" data-query="'+escapeHtml(a.dataset.query||"")+'" data-title="'+escapeHtml(a.dataset.title||"")+'" data-custom="'+(a.dataset.custom||"0")+'">'+T("ctxSmartOpenSearch")+"</div>";if("1"===a.dataset.custom){var d=a.dataset.smartId;o+='<div class="ctx-sep"></div><div class="ctx-item" data-action="smartEditQuery" data-id="'+d+'" data-type="smart">'+T("ctxSmartEditQuery")+'</div><div class="ctx-item" data-action="smartRename" data-id="'+d+'" data-type="smart">'+T("ctxSmartRename")+'</div><div class="ctx-sep"></div><div class="ctx-item ctx-danger" data-action="smartDelete" data-id="'+d+'" data-type="smart">'+T("ctxSmartDelete")+"</div>"}o+='<div class="ctx-sep"></div><div class="ctx-item" data-msg="manageSmartFolders">'+T("smartManage")+"</div>",o+="</div>",document.body.insertAdjacentHTML("beforeend",o);var r=document.getElementById("ctx-menu"),i=r.getBoundingClientRect();return i.right>window.innerWidth&&(r.style.left=window.innerWidth-i.width-4+"px"),void(i.bottom>window.innerHeight&&(r.style.top=window.innerHeight-i.height-4+"px"))}var l="",c=a.querySelector(".label");c&&(l=c.textContent);var m='<div id="ctx-menu" class="context-menu" style="left:'+e.pageX+"px;top:"+e.pageY+'px;">';if("1"===a.dataset.trash){var p="folder"===n?"trashFolder":"trashNote";m+='<div class="ctx-item" data-action="restoreItem" data-id="'+s+'" data-type="'+p+'">'+T("ctxRestoreNote")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item ctx-danger" data-action="permanentDeleteItem" data-id="'+s+'" data-type="'+p+'">'+T("ctxPermanentDelete")+"</div>"}else if("folder"===n){var g=isPinned(s);m+='<div class="ctx-item" data-action="'+(g?"unpinFolder":"pinFolder")+'" data-id="'+s+'" data-type="folder">'+T(g?"ctxUnpin":"ctxPin")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="newNote" data-id="'+s+'" data-type="folder">'+T("ctxNewNoteHere")+"</div>",m+='<div class="ctx-item" data-action="newTodo" data-id="'+s+'" data-type="folder">'+T("ctxNewTodoHere")+"</div>",m+='<div class="ctx-item" data-action="newSubNotebook" data-id="'+s+'" data-type="folder">'+T("ctxNewSubNotebook")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="renameFolder" data-id="'+s+'" data-type="folder" data-title="'+l.replace(/"/g,""")+'">'+T("ctxRenameFolder")+"</div>",m+='<div class="ctx-item" data-action="copyFolderId" data-id="'+s+'" data-type="folder">'+T("ctxCopyFolderId")+"</div>",m+='<div class="ctx-item ctx-drill">'+T("ctxExportFolder")+'<span class="ctx-sub-arrow">▶</span></div>',m+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExportFolder")+'"><div class="ctx-item" data-action="exportFolder" data-format="jex" data-id="'+s+'" data-type="folder">JEX</div><div class="ctx-item" data-action="exportFolder" data-format="md" data-id="'+s+'" data-type="folder">Markdown</div><div class="ctx-item" data-action="exportFolder" data-format="md_frontmatter" data-id="'+s+'" data-type="folder">Markdown + Front Matter</div><div class="ctx-item" data-action="exportFolder" data-format="html" data-id="'+s+'" data-type="folder">HTML</div></div>',m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item ctx-danger" data-action="deleteFolder" data-id="'+s+'" data-type="folder">'+T("ctxDeleteFolder")+"</div>"}else if("note"===n){var v=isPinned(s);m+='<div class="ctx-item" data-action="'+(v?"unpinNote":"pinNote")+'" data-id="'+s+'" data-type="note">'+T(v?"ctxUnpin":"ctxPin")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="openNote" data-id="'+s+'" data-type="note">'+T("ctxOpenNote")+"</div>",m+='<div class="ctx-item" data-action="openInNewWindow" data-id="'+s+'" data-type="note">'+T("ctxOpenInNewWindow")+"</div>",m+='<div class="ctx-item" data-action="editExternally" data-id="'+s+'" data-type="note">'+T("ctxEditExternally")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="setTags" data-id="'+s+'" data-type="note">'+T("ctxSetTags")+"</div>",m+='<div class="ctx-item" data-action="switchNoteType" data-id="'+s+'" data-type="note">'+T("ctxSwitchNoteType")+"</div>","1"===a.dataset.todo&&(m+='<div class="ctx-item" data-action="toggleTodo" data-id="'+s+'" data-type="note">'+T("ctxToggleTodo")+"</div>"),m+='<div class="ctx-item" data-action="moveToFolderDialog" data-id="'+s+'" data-type="note">'+T("ctxMoveToFolder")+"</div>",m+='<div class="ctx-item" data-action="duplicateNote" data-id="'+s+'" data-type="note">'+T("ctxDuplicateNote")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="copyLink" data-id="'+s+'" data-type="note">'+T("ctxCopyLink")+"</div>",m+='<div class="ctx-item" data-action="copyExternalLink" data-id="'+s+'" data-type="note">'+T("ctxCopyExternalLink")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="publishNote" data-id="'+s+'" data-type="note">'+T("ctxPublishNote")+"</div>",m+='<div class="ctx-item ctx-drill">'+T("ctxExport")+'<span class="ctx-sub-arrow">▶</span></div>',m+='<div class="ctx-export-template" style="display:none" data-title="'+T("ctxExport")+'"><div class="ctx-item" data-action="exportPdf" data-id="'+s+'" data-type="note">PDF</div><div class="ctx-item" data-action="exportNote" data-format="md" data-id="'+s+'" data-type="note">Markdown</div><div class="ctx-item" data-action="exportNote" data-format="md_frontmatter" data-id="'+s+'" data-type="note">Markdown + Front Matter</div><div class="ctx-item" data-action="exportNote" data-format="jex" data-id="'+s+'" data-type="note">JEX</div><div class="ctx-item" data-action="exportNote" data-format="html" data-id="'+s+'" data-type="note">HTML</div></div>',m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="renameNote" data-id="'+s+'" data-type="note" data-title="'+l.replace(/"/g,""")+'">'+T("ctxRenameNote")+"</div>",m+='<div class="ctx-item" data-action="noteInfo" data-id="'+s+'" data-type="note">'+T("ctxNoteInfo")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item ctx-danger" data-action="deleteNote" data-id="'+s+'" data-type="note">'+T("ctxDeleteNote")+"</div>",a.dataset.tagId&&(m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item" data-action="untagNote" data-id="'+s+'" data-type="note" data-tag-id="'+a.dataset.tagId+'">'+T("ctxUntagNote")+"</div>")}else if("tag"===n){var u=a.dataset.tagId;u&&(m+='<div class="ctx-item" data-action="renameTag" data-id="'+u+'" data-type="tag">'+T("ctxRenameTag")+"</div>",m+='<div class="ctx-sep"></div>',m+='<div class="ctx-item ctx-danger" data-action="deleteTag" data-id="'+u+'" data-type="tag">'+T("ctxDeleteTag")+"</div>")}if(!((m+="</div>").indexOf("ctx-item")<0)){document.body.insertAdjacentHTML("beforeend",m);var f=document.getElementById("ctx-menu"),h=f.getBoundingClientRect();h.right>window.innerWidth&&(f.style.left=window.innerWidth-h.width-4+"px"),h.bottom>window.innerHeight&&(f.style.top=window.innerHeight-h.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 s=n.dataset.noteIndent,o=s?' style="padding-left:'+s+'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"'+o+' 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 m="",p=t.folders||[],g=0;g<p.length;g++){var v=p[g],u=v.depth||0;m+='<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&&(m+='<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?"☑":"☐":"📝";m+='<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>"}m||(m='<div class="tag-empty">—</div>'),c.innerHTML=m}}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="",_=0;_<t.notes.length;_++){var N=t.notes[_],B=N.is_todo?N.todo_completed?"☑":"☐":"📝";C+='<div class="tree-item note trash-note" style="padding-left:'+M+'px" data-id="'+N.id+'" data-type="note" data-trash="1"><span class="icon note-icon">'+B+'</span><span class="label">'+escapeHtml(N.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 q=document.getElementById("search-input");q&&(q.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"),H=F?F.querySelector('.tree-item.note[data-id="'+t.id+'"]'):null;if(H||(H=document.querySelector('.tree-item.note[data-id="'+t.id+'"]')),H){H.classList.add("selected"),F&&F.contains(H)&&ensureTreeSectionExpanded();var k=F&&F.contains(H)?expandAncestorsLocal(H):[];requestAnimationFrame(function(){var e=document.getElementById("tree-container");if(e){var t=e.getBoundingClientRect(),a=H.getBoundingClientRect();a.top<t.top||a.bottom>t.bottom?H.scrollIntoView({block:"center",behavior:"smooth"}):_savedScrollTop=e.scrollTop}else H.scrollIntoView({block:"nearest",behavior:"instant"})}),k.length&&postMsg({name:"revealNote",folderIds:k})}}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 s=e.querySelector(".note-icon");s&&(s.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,s=document.getElementById("drop-zone-empty");if(s&&t.classList.contains("dragging-active")){var o=s.getBoundingClientRect();o.height>0&&o.top>a.top&&(n=o.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 s=document.querySelector(".tree-item.dragging.pinned-item"),o=document.querySelector(".tree-item.dragging");if(s&&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(o&&!s&&(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 m=a.dataset.type,p=a.getBoundingClientRect(),g=e.clientY-p.top,v=p.height;"folder"===m?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 s=a.id,o=a.type,d=a.pinned;if(t&&t.closest("#drop-zone-empty")&&!d)return postMsg({name:"dragToEmpty",dragId:s,dragType:o}),void endDrag();if(t&&t.closest(".pinned-section-header")&&!d)return"note"===o?postMsg({name:"contextMenu",action:"pinNote",id:s,itemType:"note"}):"folder"===o&&postMsg({name:"contextMenu",action:"pinFolder",id:s,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!==s){var i=r.getBoundingClientRect(),l=e.clientY-i.top<.5*i.height?"before":"after";postMsg({name:"reorderPinned",dragId:s,dragType:o,targetId:r.dataset.id,position:l})}}else{var c={name:"pinItemAt",dragId:s,dragType:o};if(r&&r.dataset.id!==s){var m=r.getBoundingClientRect();c.targetId=r.dataset.id,c.position=e.clientY-m.top<.5*m.height?"before":"after"}postMsg(c)}endDrag()}else{var p=t?t.closest(".tag-folder"):null;if(p)return"note"===o&&p.dataset.tagId&&postMsg({name:"tagNoteAdd",tagId:p.dataset.tagId,noteId:s}),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(s!==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:s,dragType:o,targetId:g,position:"into"}:{name:"dragDrop",dragId:s,dragType:o,targetId:g,position:f<.25*h?"above":"below"}:"note"===o?{name:"dragDrop",dragId:s,dragType:o,targetId:g,position:f<.5*h?"above":"below"}:{name:"dragDrop",dragId:s,dragType:o,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 s=document.getElementById("search-results");if(s){showSearchContainer(!0);var o=e.length+t.length+a.length,d='<button class="search-save-smart" title="'+escapeHtml(T("smartSaveSearch"))+'">💾 '+escapeHtml(T("smartSaveSearch"))+"</button>";if(0!==o){var r='<div class="search-status search-status-row"><span>'+T("searchResultCount").replace("{count}",o)+"</span>"+d+"</div>";if(a.length>0){r+=u("📁",T("searchSectionFolders"),a.length,"folders"),r+='<div class="search-section-body" id="search-section-folders">';for(var i=0;i<a.length;i++){var l=a[i],c=l.iconEmoji||"📁";r+='<div class="search-result-item search-folder-item" data-folder-id="'+l.id+'">',r+='<span class="icon">'+c+"</span>",r+='<div class="search-result-content">',r+='<div class="search-result-title">'+highlightText(l.title,n)+"</div>",r+="</div></div>"}r+="</div>"}if(e.length>0){r+=u("📝",T("searchSectionNotes"),e.length,"notes"),r+='<div class="search-section-body" id="search-section-notes">';for(var m=0;m<e.length;m++)r+=renderNoteItem(e[m],n);r+="</div>"}if(t.length>0){r+=u("🏷️",T("searchSectionTags"),t.length,"tags"),r+='<div class="search-section-body" id="search-section-tags">';for(var p=0;p<t.length;p++){var g=t[p],v=T("searchTagNoteCount").replace("{count}",g.noteCount);r+='<div class="search-result-item search-tag-item" data-tag-id="'+g.id+'">',r+='<span class="icon">🏷️</span>',r+='<div class="search-result-content">',r+='<div class="search-result-title">'+highlightText(g.title,n)+"</div>",r+='<div class="search-result-folder">'+v+"</div>",r+="</div>",r+='<span class="tag-expand-arrow">▶</span>',r+="</div>",r+='<div class="tag-notes-container" id="tag-notes-'+g.id+'"></div>'}r+="</div>"}s.innerHTML=r,_searchMode=!0}else s.innerHTML='<div class="search-status search-status-row"><span>'+T("searchNoResult")+"</span>"+d+"</div>"}function u(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 s="",o=0;o<t.length;o++)s+=renderNoteItem(t[o],"");0===t.length&&(s='<div class="search-status" style="padding-left:30px;">'+T("searchNoResult")+"</div>"),a.innerHTML=s,(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 s=expandAncestorsLocal(a);s.length&&postMsg({name:"revealNote",folderIds:s}),requestAnimationFrame(function(){a.scrollIntoView({block:"center",behavior:"smooth"})})}}}var _lastQuery="",_searchFromSmart="";function runSearch(e,t){var a=document.getElementById("search-input");a&&(a.value=e,syncSearchClear(),_searchFromSmart=t||"",startSearch(e,0),a.focus())}function startSearch(e,t){_searchTimer&&clearTimeout(_searchTimer);var a=++_searchId;_lastQuery=e,_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:e,searchId:a})},t)}function restoreSearchAfterRefresh(){if(_searchMode&&_lastQuery){var e=document.getElementById("search-input");e&&!e.value&&(e.value=_lastQuery,syncSearchClear(),startSearch(_lastQuery,0))}}function exitSearchMode(){_searchMode=!1,_lastQuery="",_searchFromSmart="",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();if(!t)return _searchTimer&&clearTimeout(_searchTimer),_searchId++,void(_searchMode&&exitSearchMode());startSearch(t,400)}}),document.addEventListener("click",function(e){if(e.target.closest&&e.target.closest(".search-save-smart")){var t=document.getElementById("search-input"),a=t?t.value.trim():_lastQuery;a&&postMsg({name:"saveSmartFolder",query:a,defaultName:_searchFromSmart})}}),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()}});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* Smart folder manager dialog. Joplin's dialog webview exposes the theme as
|
|
2
|
+
--joplin-* variables; fallbacks keep it readable if one is missing. */
|
|
3
|
+
|
|
4
|
+
/* How a "fit to content" dialog gets its size: Joplin measures the
|
|
5
|
+
getBoundingClientRect() of its own #joplin-plugin-content and sizes the
|
|
6
|
+
iframe to that. That element is a block, so it is exactly as wide as the
|
|
7
|
+
iframe already is (about 300px to start with) and a wider child never
|
|
8
|
+
makes it grow - the list was squeezed into 300px and scrolled sideways.
|
|
9
|
+
Shrink-to-fit makes the measured width the dialog's real width. */
|
|
10
|
+
#joplin-plugin-content { width: max-content; }
|
|
11
|
+
|
|
12
|
+
#smart-dialog {
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
/* Fixed, and deliberately no max-width:100% - relative to the ~300px
|
|
15
|
+
starting iframe that is what collapsed the layout. */
|
|
16
|
+
width: 580px;
|
|
17
|
+
padding: 10px 12px 4px;
|
|
18
|
+
font-size: 13px;
|
|
19
|
+
color: var(--joplin-color, inherit);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
#smart-dialog .sd-title { font-size: 14px; font-weight: bold; margin-bottom: 4px; }
|
|
23
|
+
#smart-dialog .sd-hint { font-size: 11.5px; line-height: 1.5; opacity: 0.75; margin-bottom: 10px; }
|
|
24
|
+
#smart-dialog .sd-error {
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
line-height: 1.5;
|
|
27
|
+
margin-bottom: 8px;
|
|
28
|
+
padding: 6px 8px;
|
|
29
|
+
border-radius: 4px;
|
|
30
|
+
white-space: pre-wrap;
|
|
31
|
+
color: var(--joplin-color-error, #c0392b);
|
|
32
|
+
background: rgba(192, 57, 43, 0.1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#smart-dialog .sd-head,
|
|
36
|
+
#smart-dialog .sd-row {
|
|
37
|
+
display: grid;
|
|
38
|
+
/* minmax(0, ...) so a narrow frame shrinks the inputs instead of pushing
|
|
39
|
+
the row past the list edge (a 1fr track will not go below the input's
|
|
40
|
+
intrinsic width otherwise). */
|
|
41
|
+
grid-template-columns: minmax(0, 140px) minmax(0, 1fr) 44px 26px 26px 26px;
|
|
42
|
+
gap: 5px;
|
|
43
|
+
align-items: center;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#smart-dialog .sd-head { font-size: 11px; opacity: 0.6; margin-bottom: 3px; padding: 0 2px; }
|
|
47
|
+
#smart-dialog .sd-list { max-height: 50vh; overflow-y: auto; overflow-x: hidden; }
|
|
48
|
+
#smart-dialog .sd-row { margin-bottom: 5px; }
|
|
49
|
+
|
|
50
|
+
#smart-dialog input[type="text"] {
|
|
51
|
+
box-sizing: border-box;
|
|
52
|
+
width: 100%;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
padding: 5px 7px;
|
|
55
|
+
font-size: 12.5px;
|
|
56
|
+
border: 1px solid var(--joplin-divider-color, #ccc);
|
|
57
|
+
border-radius: 4px;
|
|
58
|
+
background: var(--joplin-background-color, #fff);
|
|
59
|
+
color: var(--joplin-color, inherit);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#smart-dialog .sd-query { font-family: var(--joplin-font-family-monospace, Consolas, monospace); }
|
|
63
|
+
#smart-dialog .sd-bad input { border-color: var(--joplin-color-error, #c0392b); }
|
|
64
|
+
|
|
65
|
+
#smart-dialog .sd-count {
|
|
66
|
+
text-align: center;
|
|
67
|
+
font-size: 11.5px;
|
|
68
|
+
font-variant-numeric: tabular-nums;
|
|
69
|
+
border-radius: 9px;
|
|
70
|
+
padding: 1px 0;
|
|
71
|
+
background: rgba(127, 127, 127, 0.15);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
#smart-dialog .sd-count:empty { background: none; }
|
|
75
|
+
#smart-dialog .sd-count.sd-dim { opacity: 0.5; }
|
|
76
|
+
|
|
77
|
+
#smart-dialog .sd-btn {
|
|
78
|
+
height: 26px;
|
|
79
|
+
padding: 0;
|
|
80
|
+
border: 1px solid var(--joplin-divider-color, #ccc);
|
|
81
|
+
border-radius: 4px;
|
|
82
|
+
background: transparent;
|
|
83
|
+
color: var(--joplin-color, inherit);
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
justify-content: center;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#smart-dialog .sd-btn:hover:not([disabled]) { background: rgba(127, 127, 127, 0.15); }
|
|
91
|
+
#smart-dialog .sd-btn[disabled] { opacity: 0.3; cursor: default; }
|
|
92
|
+
#smart-dialog .sd-del:hover { color: var(--joplin-color-error, #c0392b); }
|
|
93
|
+
|
|
94
|
+
#smart-dialog .sd-add {
|
|
95
|
+
margin-top: 4px;
|
|
96
|
+
padding: 4px 12px;
|
|
97
|
+
border: 1px dashed var(--joplin-divider-color, #bbb);
|
|
98
|
+
border-radius: 4px;
|
|
99
|
+
background: transparent;
|
|
100
|
+
color: var(--joplin-color, inherit);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
#smart-dialog .sd-add:hover { background: rgba(127, 127, 127, 0.12); }
|
|
105
|
+
#smart-dialog .sd-empty { font-size: 12px; opacity: 0.6; padding: 8px 2px; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(){"use strict";var t={},e=[],a=null,r={},n={};function s(e){return t[e]||e}function i(t){return String(null==t?"":t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function d(t){var e=(t.name||"").trim(),a=(t.query||"").trim();return e||a?!e||e.indexOf(":")>=0||e.indexOf(";")>=0?s("smartInvalidName"):!a||a.indexOf(";")>=0?s("smartInvalidQuery"):"":""}function o(){var t=document.getElementById("smart-rules-json");t&&(t.value=JSON.stringify(e))}function u(t,r){var n=a.querySelector(".sd-list");if(e.length){for(var u="",l=0;l<e.length;l++){var v=d(e[l]);u+='<div class="sd-row'+(v?" sd-bad":"")+'" data-i="'+l+'"><input class="sd-name" data-f="name" type="text" value="'+i(e[l].name)+'" placeholder="'+i(s("smartColName"))+'" /><input class="sd-query" data-f="query" type="text" value="'+i(e[l].query)+'" placeholder="'+i(s("smartColQuery"))+'" /><span class="sd-count" title="'+i(v||s("smartCountTip"))+'"></span><button type="button" class="sd-btn" data-act="up" title="'+i(s("smartMoveUp"))+'"'+(0===l?" disabled":"")+'><svg width="11" height="11" viewBox="0 0 12 12" aria-hidden="true"><path d="M6 2.5L2.5 7h7z" fill="currentColor"/></svg></button><button type="button" class="sd-btn" data-act="down" title="'+i(s("smartMoveDown"))+'"'+(l===e.length-1?" disabled":"")+'><svg width="11" height="11" viewBox="0 0 12 12" aria-hidden="true"><path d="M6 9.5L2.5 5h7z" fill="currentColor"/></svg></button><button type="button" class="sd-btn sd-del" data-act="del" title="'+i(s("smartRemove"))+'"><svg width="10" height="10" viewBox="0 0 12 12" aria-hidden="true"><path d="M2.5 2.5l7 7M9.5 2.5l-7 7" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg></button></div>'}n.innerHTML=u;for(var m=0;m<e.length;m++)c(m)}else n.innerHTML='<div class="sd-empty">'+i(s("smartEmptyList"))+"</div>";if(o(),void 0!==t){var f=n.querySelector('.sd-row[data-i="'+t+'"] .sd-'+(r||"name"));f&&f.focus()}}function l(t,e,r,n){var s=function(t){return a.querySelector('.sd-row[data-i="'+t+'"]')}(t);if(s){var i=s.querySelector(".sd-count");i.textContent=e,i.classList.toggle("sd-dim",!!r),n&&(i.title=n)}}function c(t){var a=e[t],i=(a.query||"").trim();i&&!d(a)?void 0===r[i]?(l(t,"…",!0),clearTimeout(n[t]),n[t]=setTimeout(function(){"undefined"!=typeof webviewApi&&webviewApi.postMessage&&webviewApi.postMessage({name:"smartCount",query:i}).then(function(a){var n;if(a){n=a.error?{text:"!",dim:!1,tip:a.error}:{text:a.count+(a.more?"+":""),dim:0===a.count,tip:s("smartCountTip")},r[i]=n;for(var o=0;o<e.length;o++)(e[o].query||"").trim()!==i||d(e[o])||l(o,n.text,n.dim,n.tip)}else l(t,"",!0)},function(){l(t,"",!0)})},450)):l(t,r[i].text,r[i].dim,r[i].tip):l(t,"",!0)}function v(t){var a=t.target,r=a.closest&&a.closest(".sd-row");if(r){var n=Number(r.dataset.i);e[n][a.dataset.f]=a.value;var i=d(e[n]);r.classList.toggle("sd-bad",!!i),r.querySelector(".sd-count").title=i||s("smartCountTip"),o(),"query"!==a.dataset.f&&""!==i||c(n)}}function m(t){var r=t.target.closest&&t.target.closest("button");if(r&&a.contains(r)){if(r.classList.contains("sd-add"))return e.push({name:"",query:""}),void u(e.length-1,"name");var n=r.closest(".sd-row");if(n){var s=Number(n.dataset.i),i=r.dataset.act;if("up"===i&&s>0){var d=e[s-1];e[s-1]=e[s],e[s]=d,u(s-1)}else if("down"===i&&s<e.length-1){var o=e[s+1];e[s+1]=e[s],e[s]=o,u(s+1)}else"del"===i&&(e.splice(s,1),u())}}}function f(){var n=document.getElementById("smart-dialog");if(n&&"1"!==n.dataset.ready){n.dataset.ready="1",a=n;try{t=JSON.parse(n.dataset.i18n||"{}")}catch(e){t={}}try{e=JSON.parse(n.dataset.rules||"[]")}catch(t){e=[]}r={},n.addEventListener("input",v),n.addEventListener("click",m);var s=n.closest("form");s&&s.addEventListener("submit",function(t){t.preventDefault()}),e.length?u():(e.push({name:"",query:""}),u(0,"name"))}}new MutationObserver(f).observe(document.documentElement,{childList:!0,subtree:!0}),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",f):f()}();
|