@@ -12,7 +12,7 @@ import {App} from "../index";
1212import { Constants } from "../constants" ;
1313import { 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