vitepress-plugin-filelist 0.7.0 → 0.7.2
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 +8 -5
- package/dist/client/browser/index.d.ts +10 -0
- package/dist/client/browser/index.js +284 -189
- package/dist/client/ssr/index.d.ts +10 -0
- package/dist/client/ssr/index.js +145 -36
- package/dist/client/style.css +90 -3
- package/package.json +1 -1
|
@@ -594,9 +594,9 @@ const _sfc_main$3 = /*@__PURE__*/ defineComponent({
|
|
|
594
594
|
onClose: onNativeClose,
|
|
595
595
|
onClick: onBackdrop
|
|
596
596
|
}, [__props.open ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
|
|
597
|
-
createElementVNode("
|
|
598
|
-
createElementVNode("
|
|
599
|
-
__props.tip ? (openBlock(), createElementBlock("
|
|
597
|
+
createElementVNode("div", _hoisted_3$2, toDisplayString(__props.title), 1),
|
|
598
|
+
createElementVNode("div", _hoisted_4$2, toDisplayString(__props.text), 1),
|
|
599
|
+
__props.tip ? (openBlock(), createElementBlock("div", _hoisted_5$2, toDisplayString(__props.tip), 1)) : createCommentVNode("v-if", true),
|
|
600
600
|
createElementVNode("div", _hoisted_6$2, [__props.confirmLabel ? (openBlock(), createElementBlock("button", {
|
|
601
601
|
key: 0,
|
|
602
602
|
class: "fl-btn",
|
|
@@ -916,8 +916,8 @@ const fileListLocales = {
|
|
|
916
916
|
forgetPassword: "忘记",
|
|
917
917
|
unlockFolder: "输入 {name} 的密码",
|
|
918
918
|
networkHint: "可能被跨域拦截:请检查 OpenList 的 cors.allow_origins,或 OpenList-Worker 的 ALLOW_URLS。",
|
|
919
|
-
deepHint: "
|
|
920
|
-
deepSearch: "
|
|
919
|
+
deepHint: "只筛选了已加载的内容,",
|
|
920
|
+
deepSearch: "尝试深度搜索",
|
|
921
921
|
deepRunning: "正在深度搜索 · 已查找 {count} 个文件夹",
|
|
922
922
|
deepStop: "停止",
|
|
923
923
|
deepDone: "已搜索全部 {count} 个文件夹",
|
|
@@ -925,6 +925,8 @@ const fileListLocales = {
|
|
|
925
925
|
deepContinue: "继续",
|
|
926
926
|
deepSkipped: "跳过 {count} 个加密文件夹",
|
|
927
927
|
deepFailed: "{count} 个文件夹读取失败",
|
|
928
|
+
deepLocked: "未搜索(需要密码)",
|
|
929
|
+
clearFilter: "清除筛选",
|
|
928
930
|
viewMode: "显示方式",
|
|
929
931
|
viewSource: "源码",
|
|
930
932
|
viewRendered: "渲染",
|
|
@@ -1010,8 +1012,8 @@ const fileListLocales = {
|
|
|
1010
1012
|
forgetPassword: "Forget",
|
|
1011
1013
|
unlockFolder: "Enter the password for {name}",
|
|
1012
1014
|
networkHint: "Possibly blocked by CORS: check cors.allow_origins in OpenList, or ALLOW_URLS in OpenList-Worker.",
|
|
1013
|
-
deepHint: "Only loaded folders are filtered",
|
|
1014
|
-
deepSearch: "
|
|
1015
|
+
deepHint: "Only loaded folders are filtered. ",
|
|
1016
|
+
deepSearch: "Try deep search",
|
|
1015
1017
|
deepRunning: "Searching · {count} folders checked",
|
|
1016
1018
|
deepStop: "Stop",
|
|
1017
1019
|
deepDone: "Searched all {count} folders",
|
|
@@ -1019,6 +1021,8 @@ const fileListLocales = {
|
|
|
1019
1021
|
deepContinue: "Continue",
|
|
1020
1022
|
deepSkipped: "{count} locked folders skipped",
|
|
1021
1023
|
deepFailed: "{count} folders could not be read",
|
|
1024
|
+
deepLocked: "Not searched (password needed)",
|
|
1025
|
+
clearFilter: "Clear filter",
|
|
1022
1026
|
viewMode: "View",
|
|
1023
1027
|
viewSource: "Source",
|
|
1024
1028
|
viewRendered: "Rendered",
|
|
@@ -1497,12 +1501,12 @@ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
|
|
|
1497
1501
|
}, null, 40, _hoisted_23$1)) : mode.value === "text" ? (openBlock(), createElementBlock("div", {
|
|
1498
1502
|
key: 4,
|
|
1499
1503
|
class: normalizeClass(["fl-preview-text", { "fl-preview-rendered": renderAs.value && view.value === "rendered" }])
|
|
1500
|
-
}, [truncated.value ? (openBlock(), createElementBlock("
|
|
1504
|
+
}, [truncated.value ? (openBlock(), createElementBlock("div", _hoisted_24$1, toDisplayString(t("textTruncated", { size: unref(formatSize)(__props.maxTextBytes) })), 1)) : createCommentVNode("v-if", true), renderAs.value === "markdown" && view.value === "rendered" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createCommentVNode(" sanitised by renderMarkdown (DOMPurify) "), renderedHtml.value ? (openBlock(), createElementBlock("div", {
|
|
1501
1505
|
key: 0,
|
|
1502
1506
|
class: "vp-doc fl-md",
|
|
1503
1507
|
innerHTML: renderedHtml.value
|
|
1504
1508
|
}, null, 8, _hoisted_25$1)) : (openBlock(), createElementBlock("div", _hoisted_26$1, toDisplayString(t("loading")), 1))], 64)) : renderAs.value === "html" && view.value === "rendered" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
1505
|
-
createElementVNode("
|
|
1509
|
+
createElementVNode("div", _hoisted_27$1, toDisplayString(t("htmlSandboxNote")), 1),
|
|
1506
1510
|
createCommentVNode(" empty sandbox: no scripts, no forms, no popups, an opaque origin "),
|
|
1507
1511
|
createElementVNode("iframe", {
|
|
1508
1512
|
class: "fl-preview-html",
|
|
@@ -1522,7 +1526,7 @@ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
|
|
|
1522
1526
|
"data-kind": unref(fileKind)(__props.file.name),
|
|
1523
1527
|
"aria-hidden": "true"
|
|
1524
1528
|
}, toDisplayString(unref(extOf)(__props.file.name) || "FILE"), 9, _hoisted_32$1),
|
|
1525
|
-
createElementVNode("
|
|
1529
|
+
createElementVNode("div", _hoisted_33$1, toDisplayString(infoMessage.value), 1),
|
|
1526
1530
|
!__props.demo ? (openBlock(), createElementBlock("button", {
|
|
1527
1531
|
key: 0,
|
|
1528
1532
|
class: "fl-btn fl-btn-primary",
|
|
@@ -1567,6 +1571,14 @@ function sortTree(nodes, key, ascending, locale) {
|
|
|
1567
1571
|
function descendantFiles(node) {
|
|
1568
1572
|
return node.is_dir ? node.children.flatMap(descendantFiles) : [node];
|
|
1569
1573
|
}
|
|
1574
|
+
/** Every loaded folder (expanded or not), e.g. what a deep search has read. */
|
|
1575
|
+
function loadedPathsOf(nodes, out = /* @__PURE__ */ new Set()) {
|
|
1576
|
+
for (const node of nodes) if (node.is_dir && node.loaded) {
|
|
1577
|
+
out.add(node.path);
|
|
1578
|
+
loadedPathsOf(node.children, out);
|
|
1579
|
+
}
|
|
1580
|
+
return out;
|
|
1581
|
+
}
|
|
1570
1582
|
function expandedPathsOf(nodes, out = /* @__PURE__ */ new Set()) {
|
|
1571
1583
|
for (const node of nodes) if (node.is_dir && node.expanded) {
|
|
1572
1584
|
out.add(node.path);
|
|
@@ -1769,104 +1781,105 @@ const _hoisted_13 = { class: "fl-clear-text" };
|
|
|
1769
1781
|
const _hoisted_14 = { class: "fl-tools" };
|
|
1770
1782
|
const _hoisted_15 = { class: "fl-search" };
|
|
1771
1783
|
const _hoisted_16 = ["placeholder", "aria-label"];
|
|
1772
|
-
const _hoisted_17 = [
|
|
1784
|
+
const _hoisted_17 = ["aria-label", "title"];
|
|
1785
|
+
const _hoisted_18 = [
|
|
1773
1786
|
"disabled",
|
|
1774
1787
|
"aria-label",
|
|
1775
1788
|
"title"
|
|
1776
1789
|
];
|
|
1777
|
-
const
|
|
1778
|
-
const
|
|
1790
|
+
const _hoisted_19 = { class: "fl-row fl-head" };
|
|
1791
|
+
const _hoisted_20 = {
|
|
1779
1792
|
key: 0,
|
|
1780
1793
|
class: "fl-progress",
|
|
1781
1794
|
"aria-hidden": "true"
|
|
1782
1795
|
};
|
|
1783
|
-
const
|
|
1784
|
-
const
|
|
1796
|
+
const _hoisted_21 = { class: "fl-cell fl-cell-check" };
|
|
1797
|
+
const _hoisted_22 = [
|
|
1785
1798
|
"aria-label",
|
|
1786
1799
|
"disabled",
|
|
1787
1800
|
"checked",
|
|
1788
1801
|
".indeterminate"
|
|
1789
1802
|
];
|
|
1790
|
-
const
|
|
1791
|
-
const
|
|
1803
|
+
const _hoisted_23 = ["aria-sort", "onClick"];
|
|
1804
|
+
const _hoisted_24 = {
|
|
1792
1805
|
class: "fl-sort",
|
|
1793
1806
|
"aria-hidden": "true"
|
|
1794
1807
|
};
|
|
1795
|
-
const
|
|
1796
|
-
const
|
|
1797
|
-
const
|
|
1808
|
+
const _hoisted_25 = { class: "fl-cell fl-cell-op" };
|
|
1809
|
+
const _hoisted_26 = { class: "fl-sort-select" };
|
|
1810
|
+
const _hoisted_27 = {
|
|
1798
1811
|
class: "fl-sort-current",
|
|
1799
1812
|
"aria-hidden": "true"
|
|
1800
1813
|
};
|
|
1801
|
-
const
|
|
1802
|
-
const
|
|
1803
|
-
const
|
|
1814
|
+
const _hoisted_28 = ["aria-label"];
|
|
1815
|
+
const _hoisted_29 = ["value"];
|
|
1816
|
+
const _hoisted_30 = {
|
|
1804
1817
|
key: 0,
|
|
1805
1818
|
class: "fl-status"
|
|
1806
1819
|
};
|
|
1807
|
-
const
|
|
1808
|
-
const
|
|
1809
|
-
const
|
|
1810
|
-
const
|
|
1820
|
+
const _hoisted_31 = ["for"];
|
|
1821
|
+
const _hoisted_32 = ["id"];
|
|
1822
|
+
const _hoisted_33 = { class: "fl-unlock" };
|
|
1823
|
+
const _hoisted_34 = [
|
|
1811
1824
|
"id",
|
|
1812
1825
|
"data-unlock",
|
|
1813
1826
|
"placeholder",
|
|
1814
1827
|
"aria-invalid",
|
|
1815
1828
|
"aria-describedby"
|
|
1816
1829
|
];
|
|
1817
|
-
const
|
|
1830
|
+
const _hoisted_35 = [
|
|
1818
1831
|
"aria-pressed",
|
|
1819
1832
|
"aria-label",
|
|
1820
1833
|
"title"
|
|
1821
1834
|
];
|
|
1822
|
-
const
|
|
1823
|
-
const
|
|
1835
|
+
const _hoisted_36 = ["disabled"];
|
|
1836
|
+
const _hoisted_37 = {
|
|
1824
1837
|
key: 2,
|
|
1825
1838
|
class: "fl-status fl-error"
|
|
1826
1839
|
};
|
|
1827
|
-
const
|
|
1840
|
+
const _hoisted_38 = {
|
|
1828
1841
|
key: 0,
|
|
1829
1842
|
class: "fl-hint"
|
|
1830
1843
|
};
|
|
1831
|
-
const
|
|
1844
|
+
const _hoisted_39 = {
|
|
1832
1845
|
key: 1,
|
|
1833
1846
|
class: "fl-hint"
|
|
1834
1847
|
};
|
|
1835
|
-
const
|
|
1848
|
+
const _hoisted_40 = {
|
|
1836
1849
|
key: 3,
|
|
1837
1850
|
class: "fl-status"
|
|
1838
1851
|
};
|
|
1839
|
-
const
|
|
1840
|
-
const
|
|
1841
|
-
const
|
|
1842
|
-
const
|
|
1843
|
-
const _hoisted_44 = ["onClick"];
|
|
1852
|
+
const _hoisted_41 = { class: "fl-cell fl-more-cell" };
|
|
1853
|
+
const _hoisted_42 = { class: "fl-more-count" };
|
|
1854
|
+
const _hoisted_43 = ["onClick"];
|
|
1855
|
+
const _hoisted_44 = { class: "fl-more-page" };
|
|
1844
1856
|
const _hoisted_45 = ["onClick"];
|
|
1845
|
-
const _hoisted_46 =
|
|
1846
|
-
const _hoisted_47 =
|
|
1857
|
+
const _hoisted_46 = ["onClick"];
|
|
1858
|
+
const _hoisted_47 = { class: "fl-cell fl-cell-check" };
|
|
1859
|
+
const _hoisted_48 = [
|
|
1847
1860
|
"disabled",
|
|
1848
1861
|
"aria-label",
|
|
1849
1862
|
"checked",
|
|
1850
1863
|
".indeterminate",
|
|
1851
1864
|
"onChange"
|
|
1852
1865
|
];
|
|
1853
|
-
const
|
|
1854
|
-
const
|
|
1866
|
+
const _hoisted_49 = ["title"];
|
|
1867
|
+
const _hoisted_50 = [
|
|
1855
1868
|
"aria-label",
|
|
1856
1869
|
"title",
|
|
1857
1870
|
"onClick"
|
|
1858
1871
|
];
|
|
1859
|
-
const
|
|
1872
|
+
const _hoisted_51 = [
|
|
1860
1873
|
"aria-label",
|
|
1861
1874
|
"aria-expanded",
|
|
1862
1875
|
"onClick"
|
|
1863
1876
|
];
|
|
1864
|
-
const
|
|
1877
|
+
const _hoisted_52 = {
|
|
1865
1878
|
key: 2,
|
|
1866
1879
|
class: "fl-arrow-placeholder",
|
|
1867
1880
|
"aria-hidden": "true"
|
|
1868
1881
|
};
|
|
1869
|
-
const
|
|
1882
|
+
const _hoisted_53 = {
|
|
1870
1883
|
key: 3,
|
|
1871
1884
|
class: "fl-folder-icon",
|
|
1872
1885
|
viewBox: "0 0 24 24",
|
|
@@ -1874,31 +1887,39 @@ const _hoisted_52 = {
|
|
|
1874
1887
|
height: "18",
|
|
1875
1888
|
"aria-hidden": "true"
|
|
1876
1889
|
};
|
|
1877
|
-
const
|
|
1878
|
-
const
|
|
1879
|
-
const
|
|
1880
|
-
const
|
|
1890
|
+
const _hoisted_54 = ["data-kind"];
|
|
1891
|
+
const _hoisted_55 = { class: "fl-label" };
|
|
1892
|
+
const _hoisted_56 = ["onClick"];
|
|
1893
|
+
const _hoisted_57 = {
|
|
1881
1894
|
key: 0,
|
|
1882
1895
|
class: "fl-hit"
|
|
1883
1896
|
};
|
|
1884
|
-
const
|
|
1885
|
-
const
|
|
1897
|
+
const _hoisted_58 = { class: "fl-meta" };
|
|
1898
|
+
const _hoisted_59 = {
|
|
1899
|
+
key: 2,
|
|
1900
|
+
class: "fl-locked-note"
|
|
1901
|
+
};
|
|
1902
|
+
const _hoisted_60 = {
|
|
1886
1903
|
key: 5,
|
|
1904
|
+
class: "fl-locked-note fl-locked-hint"
|
|
1905
|
+
};
|
|
1906
|
+
const _hoisted_61 = {
|
|
1907
|
+
key: 6,
|
|
1887
1908
|
class: "fl-count"
|
|
1888
1909
|
};
|
|
1889
|
-
const
|
|
1890
|
-
const
|
|
1910
|
+
const _hoisted_62 = ["id"];
|
|
1911
|
+
const _hoisted_63 = [
|
|
1891
1912
|
"aria-label",
|
|
1892
1913
|
"title",
|
|
1893
1914
|
"onClick"
|
|
1894
1915
|
];
|
|
1895
|
-
const
|
|
1896
|
-
key:
|
|
1916
|
+
const _hoisted_64 = {
|
|
1917
|
+
key: 9,
|
|
1897
1918
|
class: "fl-loading",
|
|
1898
1919
|
"aria-hidden": "true"
|
|
1899
1920
|
};
|
|
1900
|
-
const
|
|
1901
|
-
const
|
|
1921
|
+
const _hoisted_65 = ["onSubmit", "onKeydown"];
|
|
1922
|
+
const _hoisted_66 = [
|
|
1902
1923
|
"onUpdate:modelValue",
|
|
1903
1924
|
"data-unlock",
|
|
1904
1925
|
"placeholder",
|
|
@@ -1906,48 +1927,50 @@ const _hoisted_63 = [
|
|
|
1906
1927
|
"aria-invalid",
|
|
1907
1928
|
"aria-describedby"
|
|
1908
1929
|
];
|
|
1909
|
-
const
|
|
1930
|
+
const _hoisted_67 = [
|
|
1910
1931
|
"aria-pressed",
|
|
1911
1932
|
"aria-label",
|
|
1912
1933
|
"title",
|
|
1913
1934
|
"onClick"
|
|
1914
1935
|
];
|
|
1915
|
-
const
|
|
1916
|
-
const
|
|
1936
|
+
const _hoisted_68 = ["disabled"];
|
|
1937
|
+
const _hoisted_69 = [
|
|
1917
1938
|
"aria-label",
|
|
1918
1939
|
"title",
|
|
1919
1940
|
"onClick"
|
|
1920
1941
|
];
|
|
1921
|
-
const
|
|
1922
|
-
const
|
|
1923
|
-
const
|
|
1924
|
-
const
|
|
1925
|
-
const
|
|
1942
|
+
const _hoisted_70 = { class: "fl-cell fl-cell-size" };
|
|
1943
|
+
const _hoisted_71 = { class: "fl-cell fl-cell-date" };
|
|
1944
|
+
const _hoisted_72 = { class: "fl-cell fl-cell-op" };
|
|
1945
|
+
const _hoisted_73 = ["aria-label", "onClick"];
|
|
1946
|
+
const _hoisted_74 = [
|
|
1926
1947
|
"aria-label",
|
|
1927
1948
|
"aria-expanded",
|
|
1928
1949
|
"onClick"
|
|
1929
1950
|
];
|
|
1930
|
-
const
|
|
1951
|
+
const _hoisted_75 = [
|
|
1931
1952
|
"aria-label",
|
|
1932
1953
|
"title",
|
|
1933
1954
|
"onClick"
|
|
1934
1955
|
];
|
|
1935
|
-
const
|
|
1956
|
+
const _hoisted_76 = [
|
|
1936
1957
|
"aria-label",
|
|
1937
1958
|
"title",
|
|
1938
1959
|
"onClick"
|
|
1939
1960
|
];
|
|
1940
|
-
const
|
|
1961
|
+
const _hoisted_77 = {
|
|
1941
1962
|
key: 4,
|
|
1942
|
-
class: "fl-
|
|
1963
|
+
class: "fl-deep",
|
|
1943
1964
|
role: "status"
|
|
1944
1965
|
};
|
|
1945
|
-
const
|
|
1946
|
-
const
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1966
|
+
const _hoisted_78 = { class: "fl-deep-text" };
|
|
1967
|
+
const _hoisted_79 = {
|
|
1968
|
+
key: 0,
|
|
1969
|
+
class: "fl-deep-bar",
|
|
1970
|
+
"aria-hidden": "true"
|
|
1971
|
+
};
|
|
1972
|
+
const _hoisted_80 = { class: "fl-foot" };
|
|
1973
|
+
const _hoisted_81 = {
|
|
1951
1974
|
key: 5,
|
|
1952
1975
|
class: "fl-toast",
|
|
1953
1976
|
role: "status"
|
|
@@ -1973,6 +1996,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
1973
1996
|
},
|
|
1974
1997
|
pageSize: { default: 200 },
|
|
1975
1998
|
deepSearchLimit: { default: 500 },
|
|
1999
|
+
deepSearch: { default: "manual" },
|
|
1976
2000
|
zipWarnSize: {},
|
|
1977
2001
|
zipMaxSize: {},
|
|
1978
2002
|
locale: { default: "zh-CN" },
|
|
@@ -2205,6 +2229,21 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2205
2229
|
zipPath: [item.is_dir ? name : item.name || sourceName(path)]
|
|
2206
2230
|
};
|
|
2207
2231
|
}
|
|
2232
|
+
/** Run at most `size` tasks at once. */
|
|
2233
|
+
function concurrency(size) {
|
|
2234
|
+
let active = 0;
|
|
2235
|
+
const waiting = [];
|
|
2236
|
+
return async (task) => {
|
|
2237
|
+
if (active >= size) await new Promise((resolve) => waiting.push(resolve));
|
|
2238
|
+
active += 1;
|
|
2239
|
+
try {
|
|
2240
|
+
return await task();
|
|
2241
|
+
} finally {
|
|
2242
|
+
active -= 1;
|
|
2243
|
+
waiting.shift()?.();
|
|
2244
|
+
}
|
|
2245
|
+
};
|
|
2246
|
+
}
|
|
2208
2247
|
class RootLockedError extends Error {
|
|
2209
2248
|
rememberedAt;
|
|
2210
2249
|
constructor(rememberedAt) {
|
|
@@ -2216,7 +2255,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2216
2255
|
* Build a fresh tree. `expandedPaths` re-opens those folders (refresh keeps
|
|
2217
2256
|
* what was open); without it the configured `expanded` defaults apply.
|
|
2218
2257
|
*/
|
|
2219
|
-
async function buildTree(expandedPaths) {
|
|
2258
|
+
async function buildTree(expandedPaths, loadedPaths) {
|
|
2220
2259
|
let nodes;
|
|
2221
2260
|
if (props.sources.length) nodes = await Promise.all(props.sources.map((source) => loadSourceRoot(source, expandedPaths ? expandedPaths.has(source.path) : source.expanded ?? props.expanded)));
|
|
2222
2261
|
else {
|
|
@@ -2227,13 +2266,16 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2227
2266
|
throw isPasswordError(error) ? new RootLockedError(rememberedAt) : error;
|
|
2228
2267
|
}
|
|
2229
2268
|
}
|
|
2269
|
+
const limit = concurrency(4);
|
|
2230
2270
|
const open = async (list) => {
|
|
2231
|
-
|
|
2232
|
-
const wanted = node.expanded || expandedPaths?.has(node.path);
|
|
2233
|
-
|
|
2234
|
-
node.
|
|
2235
|
-
|
|
2236
|
-
|
|
2271
|
+
await Promise.all(list.map(async (node) => {
|
|
2272
|
+
const wanted = !!(node.expanded || expandedPaths?.has(node.path));
|
|
2273
|
+
const keep = !!loadedPaths?.has(node.path);
|
|
2274
|
+
if (!node.is_dir || node.lock || !(wanted || keep)) return;
|
|
2275
|
+
const ok = await limit(() => loadChildren(node, wanted ? "show" : false, !wanted));
|
|
2276
|
+
node.expanded = wanted && ok;
|
|
2277
|
+
if (ok && (expandedPaths || loadedPaths)) await open(node.children);
|
|
2278
|
+
}));
|
|
2237
2279
|
};
|
|
2238
2280
|
await open(nodes);
|
|
2239
2281
|
return nodes;
|
|
@@ -2277,7 +2319,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2277
2319
|
const seq = ++refreshSeq;
|
|
2278
2320
|
refreshing.value = true;
|
|
2279
2321
|
try {
|
|
2280
|
-
const fresh = await buildTree(expandedPathsOf(roots.value));
|
|
2322
|
+
const fresh = await buildTree(expandedPathsOf(roots.value), deepMode.value ? loadedPathsOf(roots.value) : void 0);
|
|
2281
2323
|
if (seq !== refreshSeq) return;
|
|
2282
2324
|
roots.value = fresh;
|
|
2283
2325
|
const existing = new Set(fresh.flatMap(descendantFiles).map((file) => file.path));
|
|
@@ -2350,7 +2392,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2350
2392
|
const rows = computed(() => {
|
|
2351
2393
|
const out = [];
|
|
2352
2394
|
const query = keyword.value.trim().toLowerCase();
|
|
2353
|
-
const matches = (node) => !query || node.name.toLowerCase().includes(query) || node.is_dir && node.children.some(matches);
|
|
2395
|
+
const matches = (node) => !query || node.name.toLowerCase().includes(query) || node.is_dir && (node.children.some(matches) || deepMode.value && !!node.lock);
|
|
2354
2396
|
const walk = (nodes, key, depth) => {
|
|
2355
2397
|
const list = nodes.filter(matches);
|
|
2356
2398
|
const limit = query ? list.length : Math.min(list.length, limitOf(key));
|
|
@@ -2404,11 +2446,16 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2404
2446
|
const deep = reactive({
|
|
2405
2447
|
running: false,
|
|
2406
2448
|
searched: 0,
|
|
2407
|
-
skipped: 0,
|
|
2408
2449
|
failed: 0,
|
|
2409
2450
|
capped: false,
|
|
2410
2451
|
done: false
|
|
2411
2452
|
});
|
|
2453
|
+
/**
|
|
2454
|
+
* Deep search mode: entered by “Try deep search” (or at once with
|
|
2455
|
+
* `deep-search="auto"`), left by clearing the filter. While on, new keywords,
|
|
2456
|
+
* refreshes and newly unlocked folders are searched without asking again.
|
|
2457
|
+
*/
|
|
2458
|
+
const deepMode = ref(false);
|
|
2412
2459
|
let deepSeq = 0;
|
|
2413
2460
|
/** Folders that are known but not loaded yet (locked ones excluded). */
|
|
2414
2461
|
function unloadedFolders() {
|
|
@@ -2428,19 +2475,19 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2428
2475
|
if (!keyword.value.trim()) return null;
|
|
2429
2476
|
if (deep.running) return "running";
|
|
2430
2477
|
if (deep.capped) return "capped";
|
|
2431
|
-
if (
|
|
2478
|
+
if (!deepMode.value) return hasUnloaded.value ? "idle" : null;
|
|
2432
2479
|
return deep.done ? "done" : null;
|
|
2433
2480
|
});
|
|
2481
|
+
/** “Try deep search”, “Continue”, and the automatic runs of deep search mode. */
|
|
2434
2482
|
async function deepSearch() {
|
|
2483
|
+
deepMode.value = true;
|
|
2435
2484
|
const seq = ++deepSeq;
|
|
2436
2485
|
const limit = Math.max(1, Math.floor(props.deepSearchLimit ?? 500));
|
|
2437
2486
|
const runStart = deep.searched;
|
|
2438
2487
|
Object.assign(deep, {
|
|
2439
2488
|
running: true,
|
|
2440
2489
|
capped: false,
|
|
2441
|
-
done: false
|
|
2442
|
-
skipped: 0,
|
|
2443
|
-
failed: 0
|
|
2490
|
+
done: false
|
|
2444
2491
|
});
|
|
2445
2492
|
let wave = unloadedFolders();
|
|
2446
2493
|
while (wave.length && seq === deepSeq) {
|
|
@@ -2451,8 +2498,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2451
2498
|
if (deep.searched - runStart >= limit) return;
|
|
2452
2499
|
deep.searched += 1;
|
|
2453
2500
|
if (!await loadChildren(node, false, true)) {
|
|
2454
|
-
if (node.lock) deep.
|
|
2455
|
-
else deep.failed += 1;
|
|
2501
|
+
if (!node.lock) deep.failed += 1;
|
|
2456
2502
|
continue;
|
|
2457
2503
|
}
|
|
2458
2504
|
for (const child of node.children) if (child.is_dir && !child.loaded && !child.lock) next.push(child);
|
|
@@ -2467,24 +2513,68 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2467
2513
|
deep.capped = hasUnloaded.value && deep.searched - runStart >= limit;
|
|
2468
2514
|
deep.done = !deep.capped;
|
|
2469
2515
|
}
|
|
2516
|
+
/** Pause a run (internal: refresh, reload). */
|
|
2470
2517
|
function stopDeepSearch() {
|
|
2471
2518
|
deepSeq += 1;
|
|
2472
2519
|
deep.running = false;
|
|
2473
2520
|
}
|
|
2521
|
+
/** The user's Stop: keep the mode, offer “Continue”, do not restart by itself. */
|
|
2522
|
+
function pauseDeepSearch() {
|
|
2523
|
+
const wasRunning = deep.running;
|
|
2524
|
+
stopDeepSearch();
|
|
2525
|
+
if (wasRunning && hasUnloaded.value) deep.capped = true;
|
|
2526
|
+
}
|
|
2527
|
+
function clearFilter() {
|
|
2528
|
+
keyword.value = "";
|
|
2529
|
+
}
|
|
2474
2530
|
watch(keyword, (value) => {
|
|
2475
|
-
if (value.trim())
|
|
2531
|
+
if (value.trim()) {
|
|
2532
|
+
if (props.deepSearch === "auto") deepMode.value = true;
|
|
2533
|
+
return;
|
|
2534
|
+
}
|
|
2476
2535
|
stopDeepSearch();
|
|
2536
|
+
deepMode.value = false;
|
|
2477
2537
|
Object.assign(deep, {
|
|
2478
2538
|
searched: 0,
|
|
2479
|
-
skipped: 0,
|
|
2480
2539
|
failed: 0,
|
|
2481
2540
|
capped: false,
|
|
2482
2541
|
done: false
|
|
2483
2542
|
});
|
|
2484
2543
|
});
|
|
2544
|
+
watch(() => deepMode.value && hasUnloaded.value && !deep.running && !deep.capped && !refreshing.value, (ready) => {
|
|
2545
|
+
if (ready) deepSearch();
|
|
2546
|
+
});
|
|
2547
|
+
/**
|
|
2548
|
+
* Counted from the tree, so a refresh that re-reads the same folders shows the
|
|
2549
|
+
* same numbers: folders read (or found locked), and the locked ones.
|
|
2550
|
+
*/
|
|
2551
|
+
const folderCounts = computed(() => {
|
|
2552
|
+
const counts = {
|
|
2553
|
+
checked: 0,
|
|
2554
|
+
locked: 0
|
|
2555
|
+
};
|
|
2556
|
+
const walk = (nodes) => {
|
|
2557
|
+
for (const node of nodes) {
|
|
2558
|
+
if (!node.is_dir) continue;
|
|
2559
|
+
if (node.lock) {
|
|
2560
|
+
counts.checked += 1;
|
|
2561
|
+
counts.locked += 1;
|
|
2562
|
+
} else if (node.loaded) {
|
|
2563
|
+
counts.checked += 1;
|
|
2564
|
+
walk(node.children);
|
|
2565
|
+
}
|
|
2566
|
+
}
|
|
2567
|
+
};
|
|
2568
|
+
walk(roots.value);
|
|
2569
|
+
return counts;
|
|
2570
|
+
});
|
|
2571
|
+
const lockedFolders = computed(() => folderCounts.value.locked);
|
|
2572
|
+
function lockedInSearch(node) {
|
|
2573
|
+
return deepMode.value && !!node.lock && !!keyword.value.trim();
|
|
2574
|
+
}
|
|
2485
2575
|
const deepSummary = computed(() => [
|
|
2486
|
-
deepRow.value === "capped" ?
|
|
2487
|
-
|
|
2576
|
+
t(deepRow.value === "capped" ? "deepCapped" : "deepDone", { count: folderCounts.value.checked }),
|
|
2577
|
+
lockedFolders.value ? t("deepSkipped", { count: lockedFolders.value }) : "",
|
|
2488
2578
|
deep.failed ? t("deepFailed", { count: deep.failed }) : ""
|
|
2489
2579
|
].filter(Boolean).join(" · "));
|
|
2490
2580
|
const stats = computed(() => folderStats(roots.value, selected.value));
|
|
@@ -2812,15 +2902,30 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2812
2902
|
name: "close",
|
|
2813
2903
|
size: 18
|
|
2814
2904
|
}), createElementVNode("span", _hoisted_13, toDisplayString(t("clear")), 1)], 8, _hoisted_12)) : createCommentVNode("v-if", true),
|
|
2815
|
-
createElementVNode("div", _hoisted_14, [createElementVNode("label", _hoisted_15, [
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2905
|
+
createElementVNode("div", _hoisted_14, [createElementVNode("label", _hoisted_15, [
|
|
2906
|
+
createVNode(_sfc_main$2, {
|
|
2907
|
+
name: "search",
|
|
2908
|
+
size: 15
|
|
2909
|
+
}),
|
|
2910
|
+
withDirectives(createElementVNode("input", {
|
|
2911
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => keyword.value = $event),
|
|
2912
|
+
type: "text",
|
|
2913
|
+
placeholder: t("filter"),
|
|
2914
|
+
"aria-label": t("filter"),
|
|
2915
|
+
onKeydown: _cache[1] || (_cache[1] = withKeys(($event) => keyword.value && ($event.preventDefault(), clearFilter()), ["esc"]))
|
|
2916
|
+
}, null, 40, _hoisted_16), [[vModelText, keyword.value]]),
|
|
2917
|
+
keyword.value ? (openBlock(), createElementBlock("button", {
|
|
2918
|
+
key: 0,
|
|
2919
|
+
class: "fl-search-clear",
|
|
2920
|
+
type: "button",
|
|
2921
|
+
"aria-label": t("clearFilter"),
|
|
2922
|
+
title: t("clearFilter"),
|
|
2923
|
+
onClick: clearFilter
|
|
2924
|
+
}, [createVNode(_sfc_main$2, {
|
|
2925
|
+
name: "close",
|
|
2926
|
+
size: 12
|
|
2927
|
+
})], 8, _hoisted_17)) : createCommentVNode("v-if", true)
|
|
2928
|
+
]), createElementVNode("button", {
|
|
2824
2929
|
class: normalizeClass(["fl-icon-btn fl-refresh", { "fl-spinning": refreshing.value }]),
|
|
2825
2930
|
type: "button",
|
|
2826
2931
|
disabled: refreshing.value || loadingRoot.value,
|
|
@@ -2830,7 +2935,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2830
2935
|
}, [createVNode(_sfc_main$2, {
|
|
2831
2936
|
name: "refresh",
|
|
2832
2937
|
size: 15
|
|
2833
|
-
})], 10,
|
|
2938
|
+
})], 10, _hoisted_18)]),
|
|
2834
2939
|
batchBusy.value ? (openBlock(), createElementBlock("button", {
|
|
2835
2940
|
key: 4,
|
|
2836
2941
|
class: "fl-btn fl-zip-cancel",
|
|
@@ -2846,16 +2951,16 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2846
2951
|
size: 15
|
|
2847
2952
|
}), createTextVNode(" " + toDisplayString(t("batch")), 1)])) : createCommentVNode("v-if", true)
|
|
2848
2953
|
]),
|
|
2849
|
-
createElementVNode("div",
|
|
2850
|
-
refreshing.value ? (openBlock(), createElementBlock("span",
|
|
2851
|
-
createElementVNode("label",
|
|
2954
|
+
createElementVNode("div", _hoisted_19, [
|
|
2955
|
+
refreshing.value ? (openBlock(), createElementBlock("span", _hoisted_20)) : createCommentVNode("v-if", true),
|
|
2956
|
+
createElementVNode("label", _hoisted_21, [createElementVNode("input", {
|
|
2852
2957
|
type: "checkbox",
|
|
2853
2958
|
"aria-label": t("selectAll"),
|
|
2854
2959
|
disabled: batchBusy.value,
|
|
2855
2960
|
checked: allChecked.value,
|
|
2856
2961
|
".indeterminate": someChecked.value,
|
|
2857
2962
|
onChange: toggleCheckAll
|
|
2858
|
-
}, null, 40,
|
|
2963
|
+
}, null, 40, _hoisted_22)]),
|
|
2859
2964
|
(openBlock(), createElementBlock(Fragment, null, renderList([
|
|
2860
2965
|
"name",
|
|
2861
2966
|
"size",
|
|
@@ -2869,23 +2974,23 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2869
2974
|
type: "button",
|
|
2870
2975
|
"aria-sort": sortKey.value === column ? sortAsc.value ? "ascending" : "descending" : void 0,
|
|
2871
2976
|
onClick: ($event) => setSort(column)
|
|
2872
|
-
}, [createTextVNode(toDisplayString(t(column === "name" ? "columnName" : column === "size" ? "columnSize" : "columnDate")), 1), createElementVNode("span",
|
|
2977
|
+
}, [createTextVNode(toDisplayString(t(column === "name" ? "columnName" : column === "size" ? "columnSize" : "columnDate")), 1), createElementVNode("span", _hoisted_24, toDisplayString(sortKey.value === column ? sortAsc.value ? "▲" : "▼" : ""), 1)], 8, _hoisted_23)], 2);
|
|
2873
2978
|
}), 64)),
|
|
2874
|
-
createElementVNode("span",
|
|
2979
|
+
createElementVNode("span", _hoisted_25, [createElementVNode("label", _hoisted_26, [
|
|
2875
2980
|
createElementVNode("span", null, toDisplayString(t("sortBy")), 1),
|
|
2876
|
-
createElementVNode("span",
|
|
2981
|
+
createElementVNode("span", _hoisted_27, toDisplayString(sortOptions.value.find((option) => option.value === sortValue.value)?.label), 1),
|
|
2877
2982
|
withDirectives(createElementVNode("select", {
|
|
2878
|
-
"onUpdate:modelValue": _cache[
|
|
2983
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => sortValue.value = $event),
|
|
2879
2984
|
"aria-label": t("sortBy")
|
|
2880
2985
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(sortOptions.value, (option) => {
|
|
2881
2986
|
return openBlock(), createElementBlock("option", {
|
|
2882
2987
|
key: option.value,
|
|
2883
2988
|
value: option.value
|
|
2884
|
-
}, toDisplayString(option.label), 9,
|
|
2885
|
-
}), 128))], 8,
|
|
2989
|
+
}, toDisplayString(option.label), 9, _hoisted_29);
|
|
2990
|
+
}), 128))], 8, _hoisted_28), [[vModelSelect, sortValue.value]])
|
|
2886
2991
|
])])
|
|
2887
2992
|
]),
|
|
2888
|
-
loadingRoot.value ? (openBlock(), createElementBlock("div",
|
|
2993
|
+
loadingRoot.value ? (openBlock(), createElementBlock("div", _hoisted_30, toDisplayString(t("loading")), 1)) : rootLock.value ? (openBlock(), createElementBlock("form", {
|
|
2889
2994
|
key: 1,
|
|
2890
2995
|
class: normalizeClass(["fl-unlock-root", { "fl-unlock-error": rootLock.value.error }]),
|
|
2891
2996
|
onSubmit: withModifiers(submitRootUnlock, ["prevent"])
|
|
@@ -2897,24 +3002,24 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2897
3002
|
createElementVNode("label", {
|
|
2898
3003
|
class: "fl-unlock-label",
|
|
2899
3004
|
for: `${unref(uid)}-root`
|
|
2900
|
-
}, toDisplayString(t("passwordPrompt")), 9,
|
|
3005
|
+
}, toDisplayString(t("passwordPrompt")), 9, _hoisted_31),
|
|
2901
3006
|
rootLock.value.error ? (openBlock(), createElementBlock("span", {
|
|
2902
3007
|
key: 0,
|
|
2903
3008
|
id: `${unref(uid)}-root-error`,
|
|
2904
3009
|
class: "fl-unlock-message",
|
|
2905
3010
|
role: "alert"
|
|
2906
|
-
}, toDisplayString(unlockErrorText(rootLock.value.error)), 9,
|
|
2907
|
-
createElementVNode("span",
|
|
3011
|
+
}, toDisplayString(unlockErrorText(rootLock.value.error)), 9, _hoisted_32)) : createCommentVNode("v-if", true),
|
|
3012
|
+
createElementVNode("span", _hoisted_33, [
|
|
2908
3013
|
withDirectives(createElementVNode("input", {
|
|
2909
3014
|
id: `${unref(uid)}-root`,
|
|
2910
|
-
"onUpdate:modelValue": _cache[
|
|
3015
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => rootLock.value.input = $event),
|
|
2911
3016
|
type: "password",
|
|
2912
3017
|
autocomplete: "off",
|
|
2913
3018
|
"data-unlock": __props.path,
|
|
2914
3019
|
placeholder: t("passwordPlaceholder"),
|
|
2915
3020
|
"aria-invalid": !!rootLock.value.error,
|
|
2916
3021
|
"aria-describedby": rootLock.value.error ? `${unref(uid)}-root-error` : void 0
|
|
2917
|
-
}, null, 8,
|
|
3022
|
+
}, null, 8, _hoisted_34), [[vModelText, rootLock.value.input]]),
|
|
2918
3023
|
canRemember.value ? (openBlock(), createElementBlock("button", {
|
|
2919
3024
|
key: 0,
|
|
2920
3025
|
class: "fl-unlock-remember",
|
|
@@ -2922,49 +3027,49 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2922
3027
|
"aria-pressed": rootLock.value.remember,
|
|
2923
3028
|
"aria-label": t("rememberPassword"),
|
|
2924
3029
|
title: t("rememberPassword"),
|
|
2925
|
-
onClick: _cache[
|
|
2926
|
-
}, [createVNode(_sfc_main$2, { name: "key" })], 8,
|
|
3030
|
+
onClick: _cache[4] || (_cache[4] = ($event) => rootLock.value.remember = !rootLock.value.remember)
|
|
3031
|
+
}, [createVNode(_sfc_main$2, { name: "key" })], 8, _hoisted_35)) : createCommentVNode("v-if", true),
|
|
2927
3032
|
createElementVNode("button", {
|
|
2928
3033
|
class: "fl-unlock-submit",
|
|
2929
3034
|
type: "submit",
|
|
2930
3035
|
disabled: rootLock.value.busy || !rootLock.value.input
|
|
2931
|
-
}, toDisplayString(t("open")), 9,
|
|
3036
|
+
}, toDisplayString(t("open")), 9, _hoisted_36)
|
|
2932
3037
|
])
|
|
2933
|
-
], 34)) : errorMsg.value ? (openBlock(), createElementBlock("div",
|
|
3038
|
+
], 34)) : errorMsg.value ? (openBlock(), createElementBlock("div", _hoisted_37, [
|
|
2934
3039
|
createTextVNode(toDisplayString(t("loadFailed", { message: errorMsg.value })) + " ", 1),
|
|
2935
|
-
/guest/i.test(errorMsg.value) ? (openBlock(), createElementBlock("
|
|
2936
|
-
unref(isNetworkError)(errorMsg.value) ? (openBlock(), createElementBlock("
|
|
3040
|
+
/guest/i.test(errorMsg.value) ? (openBlock(), createElementBlock("div", _hoisted_38, toDisplayString(t("guestHint")), 1)) : createCommentVNode("v-if", true),
|
|
3041
|
+
unref(isNetworkError)(errorMsg.value) ? (openBlock(), createElementBlock("div", _hoisted_39, toDisplayString(t("corsHint")), 1)) : createCommentVNode("v-if", true),
|
|
2937
3042
|
createElementVNode("button", {
|
|
2938
3043
|
class: "fl-btn",
|
|
2939
3044
|
type: "button",
|
|
2940
3045
|
onClick: loadRoot
|
|
2941
3046
|
}, toDisplayString(t("retry")), 1)
|
|
2942
|
-
])) : visible.value.length === 0 ? (openBlock(), createElementBlock("div",
|
|
3047
|
+
])) : visible.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_40, toDisplayString(t("empty")), 1)) : createCommentVNode("v-if", true),
|
|
2943
3048
|
(openBlock(true), createElementBlock(Fragment, null, renderList(rows.value, (node, index) => {
|
|
2944
3049
|
return openBlock(), createElementBlock(Fragment, { key: isMore(node) ? `more:${node.key}` : node.path }, [isMore(node) ? (openBlock(), createElementBlock("div", {
|
|
2945
3050
|
key: 0,
|
|
2946
3051
|
class: "fl-row fl-more",
|
|
2947
3052
|
style: normalizeStyle({ "--fl-depth": node.depth })
|
|
2948
|
-
}, [_cache[
|
|
2949
|
-
_cache[
|
|
3053
|
+
}, [_cache[10] || (_cache[10] = createElementVNode("span", { class: "fl-cell fl-cell-check" }, null, -1)), createElementVNode("span", _hoisted_41, [
|
|
3054
|
+
_cache[9] || (_cache[9] = createElementVNode("span", {
|
|
2950
3055
|
class: "fl-indent",
|
|
2951
3056
|
"aria-hidden": "true"
|
|
2952
3057
|
}, null, -1)),
|
|
2953
|
-
createElementVNode("span",
|
|
3058
|
+
createElementVNode("span", _hoisted_42, toDisplayString(t("moreRemaining", { count: node.remaining })), 1),
|
|
2954
3059
|
node.remaining > (__props.pageSize || 0) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("button", {
|
|
2955
3060
|
class: "fl-more-btn",
|
|
2956
3061
|
type: "button",
|
|
2957
3062
|
onClick: ($event) => showMore(node, false)
|
|
2958
|
-
}, [createTextVNode(toDisplayString(t("showMore")), 1), createElementVNode("span",
|
|
3063
|
+
}, [createTextVNode(toDisplayString(t("showMore")), 1), createElementVNode("span", _hoisted_44, toDisplayString(` ${t("folderItems", { count: __props.pageSize })}`), 1)], 8, _hoisted_43), createElementVNode("button", {
|
|
2959
3064
|
class: "fl-more-btn fl-more-all",
|
|
2960
3065
|
type: "button",
|
|
2961
3066
|
onClick: ($event) => showMore(node, true)
|
|
2962
|
-
}, toDisplayString(t("showAll")), 9,
|
|
3067
|
+
}, toDisplayString(t("showAll")), 9, _hoisted_45)], 64)) : (openBlock(), createElementBlock("button", {
|
|
2963
3068
|
key: 1,
|
|
2964
3069
|
class: "fl-more-btn",
|
|
2965
3070
|
type: "button",
|
|
2966
3071
|
onClick: ($event) => showMore(node, true)
|
|
2967
|
-
}, toDisplayString(t("showRest", { count: node.remaining })), 9,
|
|
3072
|
+
}, toDisplayString(t("showRest", { count: node.remaining })), 9, _hoisted_46))
|
|
2968
3073
|
])], 4)) : (openBlock(), createElementBlock("div", {
|
|
2969
3074
|
key: 1,
|
|
2970
3075
|
class: normalizeClass(["fl-row", {
|
|
@@ -2977,19 +3082,19 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
2977
3082
|
}]),
|
|
2978
3083
|
style: normalizeStyle({ "--fl-depth": node.depth })
|
|
2979
3084
|
}, [
|
|
2980
|
-
createElementVNode("label",
|
|
3085
|
+
createElementVNode("label", _hoisted_47, [createElementVNode("input", {
|
|
2981
3086
|
type: "checkbox",
|
|
2982
3087
|
disabled: !!node.lock || batchBusy.value,
|
|
2983
3088
|
"aria-label": t("selectItem", { name: node.name }),
|
|
2984
3089
|
checked: isChecked(node),
|
|
2985
3090
|
".indeterminate": isIndeterminate(node),
|
|
2986
3091
|
onChange: ($event) => toggleCheck(node, $event)
|
|
2987
|
-
}, null, 40,
|
|
3092
|
+
}, null, 40, _hoisted_48)]),
|
|
2988
3093
|
createElementVNode("span", {
|
|
2989
3094
|
class: "fl-cell fl-cell-name",
|
|
2990
3095
|
title: node.isRoot ? node.path : void 0
|
|
2991
3096
|
}, [
|
|
2992
|
-
_cache[
|
|
3097
|
+
_cache[12] || (_cache[12] = createElementVNode("span", {
|
|
2993
3098
|
class: "fl-indent",
|
|
2994
3099
|
"aria-hidden": "true"
|
|
2995
3100
|
}, null, -1)),
|
|
@@ -3003,7 +3108,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3003
3108
|
}, [createVNode(_sfc_main$2, {
|
|
3004
3109
|
name: "lock",
|
|
3005
3110
|
size: 14
|
|
3006
|
-
})], 8,
|
|
3111
|
+
})], 8, _hoisted_50)) : node.is_dir ? (openBlock(), createElementBlock("button", {
|
|
3007
3112
|
key: 1,
|
|
3008
3113
|
class: normalizeClass(["fl-arrow", { "fl-arrow-open": node.expanded }]),
|
|
3009
3114
|
type: "button",
|
|
@@ -3013,28 +3118,29 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3013
3118
|
}, [createVNode(_sfc_main$2, {
|
|
3014
3119
|
name: "next",
|
|
3015
3120
|
size: 14
|
|
3016
|
-
})], 10,
|
|
3017
|
-
node.is_dir ? (openBlock(), createElementBlock("svg",
|
|
3121
|
+
})], 10, _hoisted_51)) : (openBlock(), createElementBlock("span", _hoisted_52)),
|
|
3122
|
+
node.is_dir ? (openBlock(), createElementBlock("svg", _hoisted_53, [..._cache[11] || (_cache[11] = [createElementVNode("path", { d: "M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }, null, -1)])])) : (openBlock(), createElementBlock("span", {
|
|
3018
3123
|
key: 4,
|
|
3019
3124
|
class: "fl-type",
|
|
3020
3125
|
"data-kind": unref(fileKind)(node.name),
|
|
3021
3126
|
"aria-hidden": "true"
|
|
3022
|
-
}, toDisplayString(unref(extOf)(node.name) || "FILE"), 9,
|
|
3023
|
-
createElementVNode("span",
|
|
3127
|
+
}, toDisplayString(unref(extOf)(node.name) || "FILE"), 9, _hoisted_54)),
|
|
3128
|
+
createElementVNode("span", _hoisted_55, [createElementVNode("span", {
|
|
3024
3129
|
class: normalizeClass(["fl-name", { "fl-name-dir": node.is_dir }]),
|
|
3025
3130
|
onClick: ($event) => node.lock || node.is_dir ? toggleExpand(node) : download(node)
|
|
3026
3131
|
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(nameParts(node.name), (part, at) => {
|
|
3027
|
-
return openBlock(), createElementBlock(Fragment, { key: at }, [part.hit ? (openBlock(), createElementBlock("mark",
|
|
3028
|
-
}), 128))], 10,
|
|
3029
|
-
node
|
|
3132
|
+
return openBlock(), createElementBlock(Fragment, { key: at }, [part.hit ? (openBlock(), createElementBlock("mark", _hoisted_57, toDisplayString(part.text), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(part.text), 1)], 64))], 64);
|
|
3133
|
+
}), 128))], 10, _hoisted_56), createElementVNode("span", _hoisted_58, [!node.is_dir ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(unref(formatSize)(node.size)) + " · " + toDisplayString(unref(formatDate)(node.modified)), 1)], 64)) : node.loaded ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(t("folderItems", { count: statsOf(node).files })) + " · " + toDisplayString(unref(formatSize)(statsOf(node).bytes)), 1)], 64)) : lockedInSearch(node) ? (openBlock(), createElementBlock("span", _hoisted_59, toDisplayString(t("deepLocked")), 1)) : createCommentVNode("v-if", true)])]),
|
|
3134
|
+
lockedInSearch(node) && !node.lock?.prompting ? (openBlock(), createElementBlock("span", _hoisted_60, toDisplayString(t("deepLocked")), 1)) : createCommentVNode("v-if", true),
|
|
3135
|
+
node.is_dir && node.loaded ? (openBlock(), createElementBlock("span", _hoisted_61, toDisplayString(t("folderItems", { count: statsOf(node).files })), 1)) : createCommentVNode("v-if", true),
|
|
3030
3136
|
node.lock?.prompting && node.lock.error ? (openBlock(), createElementBlock("span", {
|
|
3031
|
-
key:
|
|
3137
|
+
key: 7,
|
|
3032
3138
|
id: `${unref(uid)}-error-${index}`,
|
|
3033
3139
|
class: "fl-unlock-message",
|
|
3034
3140
|
role: "alert"
|
|
3035
|
-
}, toDisplayString(unlockErrorText(node.lock.error)), 9,
|
|
3141
|
+
}, toDisplayString(unlockErrorText(node.lock.error)), 9, _hoisted_62)) : createCommentVNode("v-if", true),
|
|
3036
3142
|
!node.lock && unref(remembered).has(node.path) ? (openBlock(), createElementBlock("button", {
|
|
3037
|
-
key:
|
|
3143
|
+
key: 8,
|
|
3038
3144
|
class: "fl-remembered",
|
|
3039
3145
|
type: "button",
|
|
3040
3146
|
"aria-label": `${t("forgetPassword")} ${node.name}`,
|
|
@@ -3043,9 +3149,9 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3043
3149
|
}, [createVNode(_sfc_main$2, {
|
|
3044
3150
|
name: "key",
|
|
3045
3151
|
size: 11
|
|
3046
|
-
}), createTextVNode(" " + toDisplayString(t("remembered")) + " · " + toDisplayString(t("forgetPassword")), 1)], 8,
|
|
3047
|
-
node.loading ? (openBlock(), createElementBlock("span",
|
|
3048
|
-
], 8,
|
|
3152
|
+
}), createTextVNode(" " + toDisplayString(t("remembered")) + " · " + toDisplayString(t("forgetPassword")), 1)], 8, _hoisted_63)) : createCommentVNode("v-if", true),
|
|
3153
|
+
node.loading ? (openBlock(), createElementBlock("span", _hoisted_64, "…")) : createCommentVNode("v-if", true)
|
|
3154
|
+
], 8, _hoisted_49),
|
|
3049
3155
|
node.lock?.prompting ? (openBlock(), createElementBlock("form", {
|
|
3050
3156
|
key: 0,
|
|
3051
3157
|
class: "fl-unlock fl-unlock-row",
|
|
@@ -3066,7 +3172,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3066
3172
|
"aria-label": t("passwordFor", { name: node.name }),
|
|
3067
3173
|
"aria-invalid": !!node.lock.error,
|
|
3068
3174
|
"aria-describedby": node.lock.error ? `${unref(uid)}-error-${index}` : void 0
|
|
3069
|
-
}, null, 8,
|
|
3175
|
+
}, null, 8, _hoisted_66), [[vModelText, node.lock.input]]),
|
|
3070
3176
|
canRemember.value ? (openBlock(), createElementBlock("button", {
|
|
3071
3177
|
key: 0,
|
|
3072
3178
|
class: "fl-unlock-remember",
|
|
@@ -3075,12 +3181,12 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3075
3181
|
"aria-label": t("rememberPassword"),
|
|
3076
3182
|
title: t("rememberPassword"),
|
|
3077
3183
|
onClick: ($event) => node.lock.remember = !node.lock.remember
|
|
3078
|
-
}, [createVNode(_sfc_main$2, { name: "key" })], 8,
|
|
3184
|
+
}, [createVNode(_sfc_main$2, { name: "key" })], 8, _hoisted_67)) : createCommentVNode("v-if", true),
|
|
3079
3185
|
createElementVNode("button", {
|
|
3080
3186
|
class: "fl-unlock-submit",
|
|
3081
3187
|
type: "submit",
|
|
3082
3188
|
disabled: node.lock.busy || !node.lock.input
|
|
3083
|
-
}, toDisplayString(t("open")), 9,
|
|
3189
|
+
}, toDisplayString(t("open")), 9, _hoisted_68),
|
|
3084
3190
|
createElementVNode("button", {
|
|
3085
3191
|
class: "fl-unlock-cancel",
|
|
3086
3192
|
type: "button",
|
|
@@ -3090,11 +3196,11 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3090
3196
|
}, [createVNode(_sfc_main$2, {
|
|
3091
3197
|
name: "close",
|
|
3092
3198
|
size: 14
|
|
3093
|
-
})], 8,
|
|
3094
|
-
], 40,
|
|
3095
|
-
createElementVNode("span",
|
|
3096
|
-
createElementVNode("span",
|
|
3097
|
-
createElementVNode("span",
|
|
3199
|
+
})], 8, _hoisted_69)
|
|
3200
|
+
], 40, _hoisted_65)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
3201
|
+
createElementVNode("span", _hoisted_70, toDisplayString(node.is_dir ? "—" : unref(formatSize)(node.size)), 1),
|
|
3202
|
+
createElementVNode("span", _hoisted_71, toDisplayString(unref(formatDate)(node.modified)), 1),
|
|
3203
|
+
createElementVNode("span", _hoisted_72, [node.lock ? (openBlock(), createElementBlock("button", {
|
|
3098
3204
|
key: 0,
|
|
3099
3205
|
class: "fl-action fl-arrow-end fl-lock",
|
|
3100
3206
|
type: "button",
|
|
@@ -3103,7 +3209,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3103
3209
|
}, [createVNode(_sfc_main$2, {
|
|
3104
3210
|
name: "lock",
|
|
3105
3211
|
size: 18
|
|
3106
|
-
})], 8,
|
|
3212
|
+
})], 8, _hoisted_73)) : node.is_dir ? (openBlock(), createElementBlock("button", {
|
|
3107
3213
|
key: 1,
|
|
3108
3214
|
class: normalizeClass(["fl-action fl-arrow-end", { "fl-arrow-open": node.expanded }]),
|
|
3109
3215
|
type: "button",
|
|
@@ -3113,49 +3219,38 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3113
3219
|
}, [createVNode(_sfc_main$2, {
|
|
3114
3220
|
name: "next",
|
|
3115
3221
|
size: 18
|
|
3116
|
-
})], 10,
|
|
3222
|
+
})], 10, _hoisted_74)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [canPreview(node) ? (openBlock(), createElementBlock("button", {
|
|
3117
3223
|
key: 0,
|
|
3118
3224
|
class: "fl-action fl-preview-btn",
|
|
3119
3225
|
type: "button",
|
|
3120
3226
|
"aria-label": `${t("preview")} ${node.name}`,
|
|
3121
3227
|
title: t("preview"),
|
|
3122
3228
|
onClick: ($event) => preview(node)
|
|
3123
|
-
}, [createVNode(_sfc_main$2, { name: "eye" })], 8,
|
|
3229
|
+
}, [createVNode(_sfc_main$2, { name: "eye" })], 8, _hoisted_75)) : createCommentVNode("v-if", true), createElementVNode("button", {
|
|
3124
3230
|
class: "fl-action fl-download",
|
|
3125
3231
|
type: "button",
|
|
3126
3232
|
"aria-label": `${t("download")} ${node.name}`,
|
|
3127
3233
|
title: t("download"),
|
|
3128
3234
|
onClick: ($event) => download(node)
|
|
3129
|
-
}, [createVNode(_sfc_main$2, { name: "download" })], 8,
|
|
3235
|
+
}, [createVNode(_sfc_main$2, { name: "download" })], 8, _hoisted_76)], 64))])
|
|
3130
3236
|
], 64))
|
|
3131
3237
|
], 6))], 64);
|
|
3132
3238
|
}), 128)),
|
|
3133
|
-
deepRow.value ? (openBlock(), createElementBlock("div",
|
|
3134
|
-
class: "fl-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
class: "fl-more-btn fl-more-all",
|
|
3140
|
-
type: "button",
|
|
3141
|
-
onClick: stopDeepSearch
|
|
3142
|
-
}, toDisplayString(t("deepStop")), 1),
|
|
3143
|
-
_cache[12] || (_cache[12] = createElementVNode("span", {
|
|
3144
|
-
class: "fl-deep-bar",
|
|
3145
|
-
"aria-hidden": "true"
|
|
3146
|
-
}, null, -1))
|
|
3147
|
-
], 64)) : deepRow.value === "idle" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("span", _hoisted_77, toDisplayString(deep.searched ? deepSummary.value : t("deepHint")), 1), createElementVNode("button", {
|
|
3148
|
-
class: "fl-more-btn",
|
|
3239
|
+
deepRow.value ? (openBlock(), createElementBlock("div", _hoisted_77, [createElementVNode("div", _hoisted_78, [deepRow.value === "running" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(t("deepRunning", { count: folderCounts.value.checked })) + " · ", 1), createElementVNode("button", {
|
|
3240
|
+
class: "fl-deep-link",
|
|
3241
|
+
type: "button",
|
|
3242
|
+
onClick: pauseDeepSearch
|
|
3243
|
+
}, toDisplayString(t("deepStop")), 1)], 64)) : deepRow.value === "idle" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(t("deepHint")), 1), createElementVNode("button", {
|
|
3244
|
+
class: "fl-deep-link",
|
|
3149
3245
|
type: "button",
|
|
3150
3246
|
onClick: deepSearch
|
|
3151
|
-
}, toDisplayString(t("deepSearch")), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
3152
|
-
|
|
3153
|
-
class: "fl-more-btn",
|
|
3247
|
+
}, toDisplayString(t("deepSearch")), 1)], 64)) : deepRow.value === "capped" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(toDisplayString(deepSummary.value) + " · ", 1), createElementVNode("button", {
|
|
3248
|
+
class: "fl-deep-link",
|
|
3154
3249
|
type: "button",
|
|
3155
3250
|
onClick: deepSearch
|
|
3156
|
-
}, toDisplayString(t("deepContinue")), 1)) :
|
|
3157
|
-
createElementVNode("div",
|
|
3158
|
-
toast.value ? (openBlock(), createElementBlock("div",
|
|
3251
|
+
}, toDisplayString(t("deepContinue")), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [createTextVNode(toDisplayString(deepSummary.value), 1)], 64))]), deepRow.value === "running" ? (openBlock(), createElementBlock("span", _hoisted_79)) : createCommentVNode("v-if", true)])) : createCommentVNode("v-if", true),
|
|
3252
|
+
createElementVNode("div", _hoisted_80, [createElementVNode("span", null, toDisplayString(t("loaded", { count: allFiles.value.length })) + " · " + toDisplayString(t("totalSize", { size: unref(formatSize)(unref(totalSize)(allFiles.value)) })), 1)]),
|
|
3253
|
+
toast.value ? (openBlock(), createElementBlock("div", _hoisted_81, toDisplayString(toast.value), 1)) : createCommentVNode("v-if", true),
|
|
3159
3254
|
createVNode(_sfc_main$3, {
|
|
3160
3255
|
open: !!zipDialog.value,
|
|
3161
3256
|
title: zipDialog.value?.title ?? "",
|
|
@@ -3164,7 +3259,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3164
3259
|
"confirm-label": zipDialog.value?.confirm,
|
|
3165
3260
|
"cancel-label": zipDialog.value?.cancel ?? "",
|
|
3166
3261
|
onConfirm: confirmZip,
|
|
3167
|
-
onClose: _cache[
|
|
3262
|
+
onClose: _cache[5] || (_cache[5] = ($event) => zipNotice.value = null)
|
|
3168
3263
|
}, null, 8, [
|
|
3169
3264
|
"open",
|
|
3170
3265
|
"title",
|
|
@@ -3185,9 +3280,9 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
|
|
|
3185
3280
|
position: previewPosition.value,
|
|
3186
3281
|
total: previewPosition.value ? previewList.value.length : 0,
|
|
3187
3282
|
onClose: closePreview,
|
|
3188
|
-
onPrev: _cache[
|
|
3189
|
-
onNext: _cache[
|
|
3190
|
-
onDownload: _cache[
|
|
3283
|
+
onPrev: _cache[6] || (_cache[6] = ($event) => stepPreview(-1)),
|
|
3284
|
+
onNext: _cache[7] || (_cache[7] = ($event) => stepPreview(1)),
|
|
3285
|
+
onDownload: _cache[8] || (_cache[8] = ($event) => previewNode.value && download(previewNode.value))
|
|
3191
3286
|
}, null, 8, [
|
|
3192
3287
|
"open",
|
|
3193
3288
|
"file",
|