Skip to content

Commit 3460f5d

Browse files
committed
修改云端同步目录列表结构
1 parent 54c9ee7 commit 3460f5d

1 file changed

Lines changed: 35 additions & 31 deletions

File tree

app/src/sync/syncGuide.ts

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {App} from "../index";
1212
import {Constants} from "../constants";
1313
import {getCloudURL} from "../config/util/about";
1414

15-
export const addCloudName = (cloudPanelElement: Element) => {
15+
export const addCloudName = (cloudListElement: Element) => {
1616
const dialog = new Dialog({
1717
title: window.siyuan.languages.cloudSyncDir,
1818
content: `<div class="b3-dialog__content">
@@ -37,38 +37,38 @@ export const addCloudName = (cloudPanelElement: Element) => {
3737
dialog.destroy();
3838
});
3939
btnsElement[1].addEventListener("click", () => {
40-
cloudPanelElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
40+
cloudListElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
4141
fetchPost("/api/sync/createCloudSyncDir", {name: inputElement.value}, () => {
4242
dialog.destroy();
43-
getSyncCloudList(cloudPanelElement, true);
43+
renderSyncCloudList(cloudListElement, true);
4444
});
4545
});
4646
};
4747

48-
export const bindSyncCloudListEvent = (cloudPanelElement: Element, cb?: () => void) => {
49-
cloudPanelElement.addEventListener("click", (event) => {
48+
export const bindSyncCloudListEvent = (cloudListElement: Element, cb?: () => void) => {
49+
cloudListElement.addEventListener("click", (event) => {
5050
let target = event.target as HTMLElement;
51-
while (target && !target.isEqualNode(cloudPanelElement)) {
51+
while (target && !target.isEqualNode(cloudListElement)) {
5252
const type = target.getAttribute("data-type");
5353
if (type) {
5454
switch (type) {
5555
case "addCloud":
56-
addCloudName(cloudPanelElement);
56+
addCloudName(cloudListElement);
5757
break;
5858
case "removeCloud":
5959
confirmDialog(window.siyuan.languages.deleteOpConfirm, `${window.siyuan.languages.confirmDeleteCloudDir} <i>${target.parentElement.getAttribute("data-name")}</i>`, () => {
60-
cloudPanelElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
60+
cloudListElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
6161
fetchPost("/api/sync/removeCloudSyncDir", {name: target.parentElement.getAttribute("data-name")}, (response) => {
6262
window.siyuan.config.sync.cloudName = response.data;
63-
getSyncCloudList(cloudPanelElement, true, cb);
63+
renderSyncCloudList(cloudListElement, true, cb);
6464
});
6565
}, undefined, true);
6666
break;
6767
case "selectCloud":
68-
cloudPanelElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
68+
cloudListElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
6969
fetchPost("/api/sync/setCloudSyncDir", {name: target.getAttribute("data-name")}, () => {
7070
window.siyuan.config.sync.cloudName = target.getAttribute("data-name");
71-
getSyncCloudList(cloudPanelElement, true, cb);
71+
renderSyncCloudList(cloudListElement, true, cb);
7272
});
7373
break;
7474
}
@@ -81,12 +81,13 @@ export const bindSyncCloudListEvent = (cloudPanelElement: Element, cb?: () => vo
8181
});
8282
};
8383

84-
export const getSyncCloudList = (cloudPanelElement: Element, reload = false, cb?: () => void) => {
85-
if (!reload && cloudPanelElement.firstElementChild.tagName !== "IMG") {
84+
export const renderSyncCloudList = (cloudListElement: Element, reload = false, cb?: () => void) => {
85+
if (!reload && cloudListElement.firstElementChild.tagName !== "IMG") {
8686
return;
8787
}
88+
cloudListElement.innerHTML = '<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">';
8889
fetchPost("/api/sync/listCloudSyncDir", {}, (response) => {
89-
let syncListHTML = `<ul><li style="padding: 0 16px" class="b3-list--empty">${window.siyuan.languages.emptyCloudSyncList}</li></ul>`;
90+
let syncListHTML: string;
9091
if (response.code === 1) {
9192
syncListHTML = `<ul>
9293
<li class="b3-list--empty ft__error">
@@ -96,11 +97,11 @@ export const getSyncCloudList = (cloudPanelElement: Element, reload = false, cb?
9697
${window.siyuan.languages.cloudConfigTip}
9798
</li>
9899
</ul>`;
99-
} else if (response.code !== 1) {
100-
syncListHTML = '<ul class="b3-list b3-list--background fn__flex-1" style="overflow: auto;">';
100+
} else {
101+
const syncListParts: string[] = ['<div class="fn__hr"></div><ul class="b3-list b3-list--background" style="overflow: auto;">'];
101102
response.data.syncDirs.forEach((item: { hSize: string, cloudName: string, updated: string }) => {
102103
/// #if MOBILE
103-
syncListHTML += `<li data-type="selectCloud" data-name="${item.cloudName}" class="b3-list-item b3-list-item--two">
104+
syncListParts.push(`<li data-type="selectCloud" data-name="${item.cloudName}" class="b3-list-item b3-list-item--two">
104105
<div class="b3-list-item__first" data-name="${item.cloudName}">
105106
<input type="radio" name="cloudName"${item.cloudName === response.data.checkedSyncDir ? " checked" : ""}/>
106107
<span class="fn__space"></span>
@@ -111,13 +112,16 @@ export const getSyncCloudList = (cloudPanelElement: Element, reload = false, cb?
111112
</span>
112113
</div>
113114
<div class="b3-list-item__meta fn__flex">
115+
<span class="fn__space"></span>
116+
<span class="fn__space"></span>
117+
<span class="fn__space"></span>
114118
<span>${item.hSize}</span>
115-
<span class="fn__flex-1 fn__space"></span>
119+
<span class="fn__space"></span>
116120
<span>${item.updated}</span>
117121
</div>
118-
</li>`;
122+
</li>`);
119123
/// #else
120-
syncListHTML += `<li data-type="selectCloud" data-name="${item.cloudName}" class="b3-list-item b3-list-item--narrow b3-list-item--hide-action">
124+
syncListParts.push(`<li data-type="selectCloud" data-name="${item.cloudName}" class="b3-list-item b3-list-item--narrow b3-list-item--hide-action">
121125
<input type="radio" name="cloudName"${item.cloudName === response.data.checkedSyncDir ? " checked" : ""}/>
122126
<span class="fn__space"></span>
123127
<span>${item.cloudName}</span>
@@ -127,20 +131,21 @@ export const getSyncCloudList = (cloudPanelElement: Element, reload = false, cb?
127131
<span class="fn__flex-1 fn__space"></span>
128132
<span data-type="removeCloud" class="b3-tooltips b3-tooltips__w b3-list-item__action${(window.siyuan.config.sync.provider === 2 || window.siyuan.config.sync.provider === 3) ? " fn__none":""}" aria-label="${window.siyuan.languages.delete}">
129133
<svg><use xlink:href="#iconTrashcan"></use></svg>
130-
</span></li>`;
134+
</span></li>`);
131135
/// #endif
132136
});
133-
syncListHTML += `</ul>
134-
<div class="fn__hr"></div>
137+
syncListParts.push("</ul>");
138+
if (![2, 3].includes(window.siyuan.config.sync.provider)) {
139+
syncListParts.push(`<div class="fn__hr"></div>
135140
<div class="fn__flex">
141+
<button class="b3-button b3-button--outline" data-type="addCloud"><svg><use xlink:href="#iconAdd"></use></svg>${window.siyuan.languages.addAttr}</button>
136142
<div class="fn__flex-1"></div>
137-
<button class="b3-button b3-button--outline${(window.siyuan.config.sync.provider === 2 || window.siyuan.config.sync.provider === 3) ? " fn__none":""}" data-type="addCloud"><svg><use xlink:href="#iconAdd"></use></svg>${window.siyuan.languages.addAttr}</button>
138-
</div>`;
139-
}
140-
cloudPanelElement.innerHTML = syncListHTML;
141-
if (cb) {
142-
cb();
143+
</div>`);
144+
}
145+
syncListHTML = syncListParts.join("");
143146
}
147+
cloudListElement.innerHTML = syncListHTML;
148+
cb?.();
144149
});
145150
};
146151

@@ -244,7 +249,6 @@ const setSync = (key?: string, dialog?: Dialog) => {
244249
if (!window.siyuan.config.sync.enabled) {
245250
const listHTML = `<div class="b3-dialog__content">
246251
<div class="ft__on-surface">${window.siyuan.languages.syncConfGuide3}</div>
247-
<div class="fn__hr--b"></div>
248252
<div style="display: flex;flex-direction: column;height: 40vh;">
249253
<img style="margin: 0 auto;display: block;width: 64px;height: 100%" src="/stage/loading-pure.svg">
250254
</div>
@@ -272,7 +276,7 @@ const setSync = (key?: string, dialog?: Dialog) => {
272276
btnElement.setAttribute("disabled", "disabled");
273277
}
274278
});
275-
getSyncCloudList(contentElement, false, () => {
279+
renderSyncCloudList(contentElement, false, () => {
276280
if (contentElement.querySelector("input[checked]")) {
277281
btnElement.removeAttribute("disabled");
278282
} else {

0 commit comments

Comments
 (0)