Vanessa 2022-07-13 11:43:58 +08:00
parent 7bd3be0d36
commit 35eff0a3a2
9 changed files with 9 additions and 403 deletions

View file

@ -10,8 +10,6 @@
"snapshotMemoTip": "Please enter the snapshot memo", "snapshotMemoTip": "Please enter the snapshot memo",
"tagSnapshot": "Tag Snapshot", "tagSnapshot": "Tag Snapshot",
"tagSnapshotTip": "Do not include symbols \\ / : * ? " ' < > |", "tagSnapshotTip": "Do not include symbols \\ / : * ? " ' < > |",
"syncDataRepo": "⚗️ Use data repo sync mechanism",
"syncDataRepoTip": "The data repo sync mechanism can better handle data conflicts, and the sync performance is also better",
"dataRepo": "Data repo", "dataRepo": "Data repo",
"newSubDoc": "Create sub doc", "newSubDoc": "Create sub doc",
"newDocBelow": "Create doc below", "newDocBelow": "Create doc below",
@ -87,9 +85,6 @@
"exportPDF3": "Page Scale", "exportPDF3": "Page Scale",
"exportPDF4": "Remove assets directory", "exportPDF4": "Remove assets directory",
"upload": "Upload", "upload": "Upload",
"defaultPasswordTip": "After using the auto-generated password, other devices must also use the auto-generated password",
"customPassword": "Custom password",
"defaultPassword": "Automatically generate password",
"reminderTip": "The reminder time cannot be less than the current time", "reminderTip": "The reminder time cannot be less than the current time",
"wechatTip": "The content block will be sent to the cloud in clear text, and pushed through the WeChat MP template message when it expires", "wechatTip": "The content block will be sent to the cloud in clear text, and pushed through the WeChat MP template message when it expires",
"notEmpty": "The reminder time cannot be empty", "notEmpty": "The reminder time cannot be empty",
@ -228,13 +223,6 @@
"hollow": "Hollow", "hollow": "Hollow",
"attrValue1": "Leave the attribute value blank will automatically delete the attribute", "attrValue1": "Leave the attribute value blank will automatically delete the attribute",
"specifyPath": "Specify path", "specifyPath": "Specify path",
"changeE2EEPasswdTip": "The current workspace is using a custom password, and the same custom password must be used on other devices to decrypt data. If you forget the password, the cloud data will be permanently lost, so be sure to keep this in mind password",
"builtinE2EEPasswdTip": "The current workspace is using an auto-generated password, and other devices must also use the auto-generated password to decrypt the data",
"changeE2EEPasswd": "Set the end-to-end encryption password",
"setPasswd": "Set it",
"e2eePasswd": "End-to-end encryption password",
"passwdSet": "Password has been set (If you need to reset the password, please refer to the help document FAQ)",
"e2eePasswdTip": "The same password must be set on all devices, once set, it does not support modification and viewing",
"addAttr": "Add", "addAttr": "Add",
"addTag": "Add Tag", "addTag": "Add Tag",
"width": "Width", "width": "Width",
@ -244,12 +232,7 @@
"default": "Default", "default": "Default",
"titleBg": "Cover", "titleBg": "Cover",
"random": "Random", "random": "Random",
"downloadRecover1": "Download the cloud backup and overwrite the local backup, and then recover from the local backup",
"deleteCloudBackup": "Delete cloud backup completely",
"backupUpload1": "Generate an encrypted local backup and upload the backup to the cloud",
"noOpenFile": "No file is open", "noOpenFile": "No file is open",
"backupUpload": "Backup and upload",
"downloadRecover": "Download and recover",
"cloudBackup": "Cloud backup", "cloudBackup": "Cloud backup",
"total": "Total", "total": "Total",
"cdn": "Assets", "cdn": "Assets",
@ -497,9 +480,6 @@
"refreshUser": "User information refreshed", "refreshUser": "User information refreshed",
"insertBottom": "Open Below the Tab", "insertBottom": "Open Below the Tab",
"insertRight": "Open Right the Tab", "insertRight": "Open Right the Tab",
"downloadCloud": "Download",
"downloadCloudTip": "After downloading, the cloud backup will be used to overwrite the local backup. Do you want to download?",
"account3Tip": "Local backup will overwrite cloud backup. Do you want to upload?",
"account1": "Click to pay", "account1": "Click to pay",
"account2": "<div>End-to-end encrypted data synchronization</div><div>End-to-end encrypted data backup</div><div>Cloud assets serving</div>", "account2": "<div>End-to-end encrypted data synchronization</div><div>End-to-end encrypted data backup</div><div>Cloud assets serving</div>",
"account3": "Trial Subscription", "account3": "Trial Subscription",
@ -784,7 +764,6 @@
"8": "Check update failed", "8": "Check update failed",
"9": "A new version is available, please browse the release announcement %s", "9": "A new version is available, please browse the release announcement %s",
"10": "Is the latest version", "10": "Is the latest version",
"11": "Please configure [Settings - Cloud - End-to-End Encryption Password] first",
"12": "Query asset failed [%s]", "12": "Query asset failed [%s]",
"13": "Cannot create a file starting with .", "13": "Cannot create a file starting with .",
"14": "Export failed: %s", "14": "Export failed: %s",

View file

@ -10,8 +10,6 @@
"snapshotMemoTip": "Ingrese la nota instantánea", "snapshotMemoTip": "Ingrese la nota instantánea",
"tagSnapshot": "Instantánea de la etiqueta", "tagSnapshot": "Instantánea de la etiqueta",
"tagSnapshotTip": "No incluir símbolos \\ / : * ? &quot; &#039; &lt; &gt; |", "tagSnapshotTip": "No incluir símbolos \\ / : * ? &quot; &#039; &lt; &gt; |",
"syncDataRepo": "⚗️ Usar mecanismo de sincronización de repositorio de datos",
"syncDataRepoTip": "El mecanismo de sincronización del repositorio de datos puede manejar mejor los conflictos de datos y el rendimiento de la sincronización también es mejor",
"dataRepo": "Repositorio de datos", "dataRepo": "Repositorio de datos",
"newSubDoc": "Crear subdocumento", "newSubDoc": "Crear subdocumento",
"newDocBelow": "Crear documento a continuación", "newDocBelow": "Crear documento a continuación",
@ -87,9 +85,6 @@
"exportPDF3": "Escala de la página", "exportPDF3": "Escala de la página",
"exportPDF4": "Eliminar directorio de activos", "exportPDF4": "Eliminar directorio de activos",
"upload": "Subir", "upload": "Subir",
"defaultPasswordTip": "Después de usar la contraseña autogenerada, otros dispositivos también deben usar la contraseña autogenerada",
"customPassword": "Contraseña personalizada",
"defaultPassword": "Generar automáticamente la contraseña",
"reminderTip": "La hora del recordatorio no puede ser inferior a la hora actual", "reminderTip": "La hora del recordatorio no puede ser inferior a la hora actual",
"wechatTip": "El bloque de contenido se enviará a la nube en texto claro, y se empujará a través del mensaje de plantilla de WeChat MP cuando caduque", "wechatTip": "El bloque de contenido se enviará a la nube en texto claro, y se empujará a través del mensaje de plantilla de WeChat MP cuando caduque",
"notEmpty": "La hora del recordatorio no puede estar vacía", "notEmpty": "La hora del recordatorio no puede estar vacía",
@ -228,13 +223,6 @@
"hollow": "Hueco", "hollow": "Hueco",
"attrValue1": "Dejar el valor del atributo en blanco eliminará automáticamente el atributo", "attrValue1": "Dejar el valor del atributo en blanco eliminará automáticamente el atributo",
"specifyPath": "Especificar ruta", "specifyPath": "Especificar ruta",
"changeE2EEPasswdTip": "El espacio de trabajo actual está utilizando una contraseña personalizada, y la misma contraseña personalizada debe utilizarse en otros dispositivos para descifrar los datos. Si olvida la contraseña, los datos de la nube se perderán permanentemente, así que asegúrese de tener esto en cuenta",
"builtinE2EEPasswdTip": "El espacio de trabajo actual está utilizando una contraseña autogenerada, y otros dispositivos también deben utilizar la contraseña autogenerada para descifrar los datos",
"changeE2EEPasswd": "Establecer la contraseña de cifrado de extremo a extremo",
"setPasswd": "Establecerla",
"e2eePasswd": "Contraseña de cifrado de extremo a extremo",
"passwdSet": "Se ha establecido la contraseña (Si necesita restablecer la contraseña, consulte el documento de ayuda FAQ)",
"e2eePasswdTip": "Se debe establecer la misma contraseña en todos los dispositivos, una vez establecida, no admite modificación ni visualización",
"addAttr": "Añadir", "addAttr": "Añadir",
"addTag": "Añadir etiqueta", "addTag": "Añadir etiqueta",
"width": "Ancho", "width": "Ancho",
@ -244,12 +232,7 @@
"default": "Por defecto", "default": "Por defecto",
"titleBg": "Cobertura", "titleBg": "Cobertura",
"random": "Aleatorio", "random": "Aleatorio",
"downloadRecover1": "Descargar la copia de seguridad en la nube y sobrescribir la copia de seguridad local, y luego recuperar desde la copia de seguridad local",
"deleteCloudBackup": "Eliminar la copia de seguridad en la nube por completo",
"backupUpload1": "Generar una copia de seguridad local cifrada y subir la copia de seguridad a la nube",
"noOpenFile": "No hay ningún archivo abierto", "noOpenFile": "No hay ningún archivo abierto",
"backupUpload": "Hacer una copia de seguridad y subirla",
"downloadRecover": "Descargar y recuperar",
"cloudBackup": "Copia de seguridad en la nube", "cloudBackup": "Copia de seguridad en la nube",
"total": "Total", "total": "Total",
"cdn": "Activos", "cdn": "Activos",
@ -497,9 +480,6 @@
"refreshUser": "Información del usuario actualizada", "refreshUser": "Información del usuario actualizada",
"insertBottom": "Abrir debajo de la pestaña", "insertBottom": "Abrir debajo de la pestaña",
"insertRight": "Abrir a la derecha la pestaña", "insertRight": "Abrir a la derecha la pestaña",
"downloadCloud": "Descargar",
"downloadCloudTip": "Después de la descarga, la copia de seguridad en la nube se utilizará para sobrescribir la copia de seguridad local. ¿Desea descargarla?",
"account3Tip": "La copia de seguridad local sobrescribirá la copia de seguridad en la nube. ¿Quieres subirla?",
"account1": "Haga clic para pagar", "account1": "Haga clic para pagar",
"account2": "<div>Sincronización de datos cifrada de extremo a extremo</div><div>Copia de seguridad de datos cifrada de extremo a extremo</div><div>Activos en la nube que sirven</div>", "account2": "<div>Sincronización de datos cifrada de extremo a extremo</div><div>Copia de seguridad de datos cifrada de extremo a extremo</div><div>Activos en la nube que sirven</div>",
"account3": "Suscripción de prueba", "account3": "Suscripción de prueba",
@ -784,7 +764,6 @@
"8": "Comprobar la actualización falló", "8": "Comprobar la actualización falló",
"9": "Una nueva versión está disponible, por favor, busque el anuncio de lanzamiento %s", "9": "Una nueva versión está disponible, por favor, busque el anuncio de lanzamiento %s",
"10": "Es la última versión", "10": "Es la última versión",
"11": "Por favor, configure primero [Configuración - Nube - Contraseña de encriptación de extremo a extremo].",
"12": "Fallo en la consulta de activos [%s]", "12": "Fallo en la consulta de activos [%s]",
"13": "No se puede crear un archivo que empiece por .", "13": "No se puede crear un archivo que empiece por .",
"14": "Exportación fallida: %s", "14": "Exportación fallida: %s",

View file

@ -10,8 +10,6 @@
"snapshotMemoTip": "Veuillez entrer le mémo instantané", "snapshotMemoTip": "Veuillez entrer le mémo instantané",
"tagSnapshot": "Instantané de balise", "tagSnapshot": "Instantané de balise",
"tagSnapshotTip": "Ne pas inclure les symboles \\ / : * ? &quot; &#039; &lt; &gt; |", "tagSnapshotTip": "Ne pas inclure les symboles \\ / : * ? &quot; &#039; &lt; &gt; |",
"syncDataRepo": "⚗️ Utiliser le mécanisme de synchronisation du référentiel de données",
"syncDataRepoTip": "Le mécanisme de synchronisation du référentiel de données peut mieux gérer les conflits de données, et les performances de synchronisation sont également meilleures",
"dataRepo": "Dépôt de données", "dataRepo": "Dépôt de données",
"newSubDoc": "Créer un sous-doc", "newSubDoc": "Créer un sous-doc",
"newDocBelow": "Créer un document ci-dessous", "newDocBelow": "Créer un document ci-dessous",
@ -87,9 +85,6 @@
"exportPDF3": "Échelle de page", "exportPDF3": "Échelle de page",
"exportPDF4": "Supprimer le répertoire des actifs", "exportPDF4": "Supprimer le répertoire des actifs",
"upload": "Télécharger", "upload": "Télécharger",
"defaultPasswordTip": "Après avoir utilisé le mot de passe généré automatiquement, les autres appareils doivent également utiliser le mot de passe généré automatiquement",
"customPassword": "mot de passe personnalisé",
"defaultPassword": "Générer automatiquement un mot de passe",
"reminderTip": "The reminder time cannot be less than the current time", "reminderTip": "The reminder time cannot be less than the current time",
"wechatTip": "Le bloc de contenu sera envoyé au cloud en texte clair et transmis au message du modèle de compte officiel WeChat à son expiration.", "wechatTip": "Le bloc de contenu sera envoyé au cloud en texte clair et transmis au message du modèle de compte officiel WeChat à son expiration.",
"notEmpty": "L'heure de rappel ne peut pas être vide", "notEmpty": "L'heure de rappel ne peut pas être vide",
@ -228,13 +223,6 @@
"hollow": "Hollow", "hollow": "Hollow",
"attrValue1": "Si vous laissez la valeur de l'attribut vide, l'attribut sera automatiquement supprimé", "attrValue1": "Si vous laissez la valeur de l'attribut vide, l'attribut sera automatiquement supprimé",
"specifyPath": "Spécifier le chemin", "specifyPath": "Spécifier le chemin",
"changeE2EEPasswdTip": "L'espace de travail actuel utilise un mot de passe personnalisé, et le même mot de passe personnalisé doit être utilisé sur d'autres appareils pour déchiffrer les données. Si vous oubliez le mot de passe, les données du cloud seront définitivement perdues, alors assurez-vous de le conserver dans attention au mot de passe",
"builtinE2EEPasswdTip": "L'espace de travail actuel utilise un mot de passe généré automatiquement, et les autres appareils doivent également utiliser le mot de passe généré automatiquement pour déchiffrer les données",
"changeE2EEPasswd": "Définir le mot de passe de cryptage de bout en bout",
"setPasswd": "Définir le mot de passe",
"e2eePasswd": "Mot de passe de cryptage de bout en bout",
"passwdSet": "Le mot de passe a été défini (Si vous avez besoin de réinitialiser votre mot de passe, veuillez vous référer à la FAQ du document d'aide)",
"e2eePasswdTip": "Le même mot de passe doit être défini sur tous les appareils, une fois défini, il ne prend pas en charge la modification et la visualisation",
"addAttr": "Ajouter", "addAttr": "Ajouter",
"addTag": "Ajouter Tag", "addTag": "Ajouter Tag",
"width": "Largeur", "width": "Largeur",
@ -244,12 +232,7 @@
"default": "Default", "default": "Default",
"titleBg": "Couverture", "titleBg": "Couverture",
"random": "Random", "random": "Random",
"downloadRecover1": "Téléchargez la sauvegarde sur le nuage et remplacez la sauvegarde locale, puis restaurez à partir de la sauvegarde locale.",
"deleteCloudBackup": "Supprimer complètement la sauvegarde dans le cloud",
"backupUpload1": "Générez une sauvegarde locale chiffrée, puis téléchargez cette sauvegarde sur le cloud.",
"noOpenFile": "Aucun fichier n'est ouvert", "noOpenFile": "Aucun fichier n'est ouvert",
"backupUpload": "Sauvegarde et transfert",
"downloadRecover": "Télécharger et récupérer",
"cloudBackup": "Sauvegarde en Cloud", "cloudBackup": "Sauvegarde en Cloud",
"total": "Total", "total": "Total",
"cdn": "Assets", "cdn": "Assets",
@ -497,9 +480,6 @@
"refreshUser": "Les informations sur l'utilisateur ont été actualisées", "refreshUser": "Les informations sur l'utilisateur ont été actualisées",
"insertBottom": "Ouvrir en bas de l'onglet", "insertBottom": "Ouvrir en bas de l'onglet",
"insertRight": "Ouvrir en droit de l'onglet", "insertRight": "Ouvrir en droit de l'onglet",
"downloadCloud": "Télécharger",
"downloadCloudTip": "Après le téléchargement, la sauvegarde dans le Cloud sera utilisée pour écraser la sauvegarde locale. Voulez-vous télécharger ?",
"account3Tip": "Va-t-il écraser la sauvegarde cloud avec la sauvegarde locale, télécharger ?",
"account1": "Cliquez pour payer", "account1": "Cliquez pour payer",
"account2": "<div>Synchronisation des données chiffrées de bout en bout</div><div>Sauvegarde des données chiffrées de bout en bout</div><div>Servant les ressources cloud</div>", "account2": "<div>Synchronisation des données chiffrées de bout en bout</div><div>Sauvegarde des données chiffrées de bout en bout</div><div>Servant les ressources cloud</div>",
"account3": "Abonnement d'essai", "account3": "Abonnement d'essai",
@ -784,7 +764,6 @@
"8": "La vérification de la mise à jour a échoué", "8": "La vérification de la mise à jour a échoué",
"9": "Une nouvelle version est disponible, veuillez consulter l'annonce de la version %s", "9": "Une nouvelle version est disponible, veuillez consulter l'annonce de la version %s",
"10": "C'est la dernière version", "10": "C'est la dernière version",
"11": "Veuillez d'abord configurer [Paramètres - Cloud - Mot de passe de chiffrement de bout en bout]",
"12": "Échec de la requête asset [%s]", "12": "Échec de la requête asset [%s]",
"13": "Impossible de créer un fichier commençant par .", "13": "Impossible de créer un fichier commençant par .",
"14": "L'exportation a échoué : %s", "14": "L'exportation a échoué : %s",

View file

@ -10,8 +10,6 @@
"snapshotMemoTip": "請輸入快照備註", "snapshotMemoTip": "請輸入快照備註",
"tagSnapshot": "標記快照", "tagSnapshot": "標記快照",
"tagSnapshotTip": "請勿包含符號 \\ / : * ? &quot; &#039; &lt; &gt; |", "tagSnapshotTip": "請勿包含符號 \\ / : * ? &quot; &#039; &lt; &gt; |",
"syncDataRepo": "⚗️ 使用數據倉庫同步機制",
"syncDataRepoTip": "數據倉庫同步機制能夠更好地處理數據衝突,同步性能也更好",
"dataRepo": "數據倉庫", "dataRepo": "數據倉庫",
"newSubDoc": "新建子文檔", "newSubDoc": "新建子文檔",
"newDocBelow": "在下方新建文檔", "newDocBelow": "在下方新建文檔",
@ -87,9 +85,6 @@
"exportPDF3": "頁面縮放", "exportPDF3": "頁面縮放",
"exportPDF4": "移除 assets 目錄", "exportPDF4": "移除 assets 目錄",
"upload": "上傳", "upload": "上傳",
"defaultPasswordTip": "使用自動生成密碼後其他設備也都必須使用自動生成密碼",
"customPassword": "自定義密碼",
"defaultPassword": "自動生成密碼",
"reminderTip": "提醒時間不能小於當前時間", "reminderTip": "提醒時間不能小於當前時間",
"wechatTip": "該內容塊將以明文形式發送到雲端,到期時通過微信公眾號模板消息進行推送", "wechatTip": "該內容塊將以明文形式發送到雲端,到期時通過微信公眾號模板消息進行推送",
"notEmpty": "提醒時間不能為空", "notEmpty": "提醒時間不能為空",
@ -228,13 +223,6 @@
"hollow": "鏤空", "hollow": "鏤空",
"attrValue1": "屬性值留空則會自動刪除該屬性", "attrValue1": "屬性值留空則會自動刪除該屬性",
"specifyPath": "指定路徑", "specifyPath": "指定路徑",
"changeE2EEPasswdTip": "當前工作空間使用的是自定義密碼,其他其他設備上也必須使用相同的自定義密碼才能解密數據。如果你忘記了密碼,雲端數據將永久丟失,所以請務必牢記該密碼",
"builtinE2EEPasswdTip": "當前工作空間使用的是自動生成密碼,其他設備上也必須使用自動生成密碼才能解密數據",
"changeE2EEPasswd": "設置端到端加密密碼",
"setPasswd": "設置密碼",
"e2eePasswd": "端到端加密密碼",
"passwdSet": "密碼已經設置(如果需要重置密碼,請參考幫助文檔常見問題)",
"e2eePasswdTip": "所有設備上必須設置相同的密碼,一旦設置就不支援修改和查看",
"addAttr": "新增", "addAttr": "新增",
"addTag": "新增標籤", "addTag": "新增標籤",
"width": "寬度", "width": "寬度",
@ -244,12 +232,7 @@
"default": "預設", "default": "預設",
"titleBg": "封面圖", "titleBg": "封面圖",
"random": "隨機", "random": "隨機",
"downloadRecover1": "將雲端備份下載並覆蓋本地備份,然後從本地備份進行恢復",
"deleteCloudBackup": "徹底刪除雲端備份",
"backupUpload1": "生成加密過的本地備份,然後將該備份上傳到雲端",
"noOpenFile": "沒有打開的文檔", "noOpenFile": "沒有打開的文檔",
"backupUpload": "備份並上傳",
"downloadRecover": "下載並恢復",
"cloudBackup": "雲端備份", "cloudBackup": "雲端備份",
"total": "總計", "total": "總計",
"cdn": "圖庫", "cdn": "圖庫",
@ -497,9 +480,6 @@
"refreshUser": "使用者資訊更新完畢", "refreshUser": "使用者資訊更新完畢",
"insertBottom": "在分頁下側打開", "insertBottom": "在分頁下側打開",
"insertRight": "在分頁右側打開", "insertRight": "在分頁右側打開",
"downloadCloud": "從雲端下載",
"downloadCloudTip": "下載後將使用雲端備份覆蓋本地備份,是否下載?",
"account3Tip": "將使用本地備份覆蓋雲端備份,是否上傳?",
"account1": "點擊前往支付", "account1": "點擊前往支付",
"account2": "<div>端到端加密數據同步</div><div>端到端加密數據備份</div><div>資源文件圖床</div><div>定時微信提醒</div><div>收集箱</div>", "account2": "<div>端到端加密數據同步</div><div>端到端加密數據備份</div><div>資源文件圖床</div><div>定時微信提醒</div><div>收集箱</div>",
"account3": "試用訂閱", "account3": "試用訂閱",
@ -784,7 +764,6 @@
"8": "檢查更新失敗", "8": "檢查更新失敗",
"9": "有新版本可用,請瀏覽發佈公告 %s", "9": "有新版本可用,請瀏覽發佈公告 %s",
"10": "已是最新版", "10": "已是最新版",
"11": "請先配置 [設置 - 雲端 - 端到端加密密碼]",
"12": "查詢資料檔失敗 [%s]", "12": "查詢資料檔失敗 [%s]",
"13": "無法創建 . 開頭的文件", "13": "無法創建 . 開頭的文件",
"14": "匯出失敗:%s", "14": "匯出失敗:%s",

View file

@ -10,8 +10,6 @@
"snapshotMemoTip": "请输入快照备注", "snapshotMemoTip": "请输入快照备注",
"tagSnapshot": "标记快照", "tagSnapshot": "标记快照",
"tagSnapshotTip": "请勿包含符号 \\ / : * ? &quot; &#039; &lt; &gt; |", "tagSnapshotTip": "请勿包含符号 \\ / : * ? &quot; &#039; &lt; &gt; |",
"syncDataRepo": "⚗️ 使用数据仓库同步机制(该特性正处于公测阶段)",
"syncDataRepoTip": "数据仓库同步机制能够更好地处理数据冲突,同步性能也更好",
"dataRepo": "数据仓库", "dataRepo": "数据仓库",
"newSubDoc": "新建子文档", "newSubDoc": "新建子文档",
"newDocBelow": "在下方新建文档", "newDocBelow": "在下方新建文档",
@ -87,9 +85,6 @@
"exportPDF3": "页面缩放", "exportPDF3": "页面缩放",
"exportPDF4": "移除 assets 目录", "exportPDF4": "移除 assets 目录",
"upload": "上传", "upload": "上传",
"defaultPasswordTip": "使用自动生成密码后其他设备也都必须使用自动生成密码",
"customPassword": "自定义密码",
"defaultPassword": "自动生成密码",
"reminderTip": "提醒时间不能小于当前时间", "reminderTip": "提醒时间不能小于当前时间",
"wechatTip": "该内容块将以明文形式发送到云端,到期时通过微信公众号模板消息进行推送", "wechatTip": "该内容块将以明文形式发送到云端,到期时通过微信公众号模板消息进行推送",
"notEmpty": "提醒时间不能为空", "notEmpty": "提醒时间不能为空",
@ -228,13 +223,6 @@
"hollow": "镂空", "hollow": "镂空",
"attrValue1": "属性值留空则会自动删除该属性", "attrValue1": "属性值留空则会自动删除该属性",
"specifyPath": "指定路径", "specifyPath": "指定路径",
"changeE2EEPasswdTip": "当前工作空间使用的是自定义密码,其他其他设备上也必须使用相同的自定义密码才能解密数据。如果你忘记了密码,云端数据将永久丢失,所以请务必牢记该密码",
"builtinE2EEPasswdTip": "当前工作空间使用的是自动生成密码,其他设备上也必须使用自动生成密码才能解密数据",
"changeE2EEPasswd": "设置端到端加密密码",
"setPasswd": "设置密码",
"e2eePasswd": "端到端加密密码",
"passwdSet": "密码已经设置(如果需要重置密码,请参考帮助文档常见问题)",
"e2eePasswdTip": "所有设备上必须设置相同的密码,一旦设置就不支持修改和查看",
"addAttr": "添加", "addAttr": "添加",
"addTag": "添加标签", "addTag": "添加标签",
"width": "宽度", "width": "宽度",
@ -244,12 +232,7 @@
"default": "默认", "default": "默认",
"titleBg": "题头图", "titleBg": "题头图",
"random": "随机", "random": "随机",
"downloadRecover1": "将云端备份下载并覆盖本地备份,然后从本地备份进行恢复",
"deleteCloudBackup": "彻底删除云端备份",
"backupUpload1": "生成加密过的本地备份,然后将该备份上传到云端",
"noOpenFile": "没有打开的文档", "noOpenFile": "没有打开的文档",
"backupUpload": "备份并上传",
"downloadRecover": "下载并恢复",
"cloudBackup": "云端备份", "cloudBackup": "云端备份",
"total": "总计", "total": "总计",
"cdn": "图床", "cdn": "图床",
@ -497,9 +480,6 @@
"refreshUser": "用户信息刷新完毕", "refreshUser": "用户信息刷新完毕",
"insertBottom": "在页签下侧打开", "insertBottom": "在页签下侧打开",
"insertRight": "在页签右侧打开", "insertRight": "在页签右侧打开",
"downloadCloud": "从云端下载",
"downloadCloudTip": "下载后将使用云端备份覆盖本地备份,是否下载?",
"account3Tip": "将使用本地备份覆盖云端备份,是否上传?",
"account1": "点击前往支付", "account1": "点击前往支付",
"account2": "<div>端到端加密数据同步</div><div>端到端加密数据备份</div><div>资源文件图床</div><div>定时微信提醒</div><div>收集箱</div>", "account2": "<div>端到端加密数据同步</div><div>端到端加密数据备份</div><div>资源文件图床</div><div>定时微信提醒</div><div>收集箱</div>",
"account3": "试用订阅", "account3": "试用订阅",
@ -785,7 +765,6 @@
"8": "检查更新失败", "8": "检查更新失败",
"9": "有新版本可用,请浏览发布公告 %s", "9": "有新版本可用,请浏览发布公告 %s",
"10": "已是最新版", "10": "已是最新版",
"11": "请先配置 [设置 - 云端 - 端到端加密密码]",
"12": "查询资源文件失败 [%s]", "12": "查询资源文件失败 [%s]",
"13": "无法创建 . 开头的文件", "13": "无法创建 . 开头的文件",
"14": "导出失败:%s", "14": "导出失败:%s",

View file

@ -2,12 +2,8 @@ import {confirmDialog} from "../dialog/confirmDialog";
import {needSubscribe} from "../util/needSubscribe"; import {needSubscribe} from "../util/needSubscribe";
import {fetchPost} from "../util/fetch"; import {fetchPost} from "../util/fetch";
import {isMobile} from "../util/functions"; import {isMobile} from "../util/functions";
/// #if !MOBILE
import {exportLayout} from "../layout/util";
/// #endif
import {Dialog} from "../dialog"; import {Dialog} from "../dialog";
import {showMessage} from "../dialog/message"; import {showMessage} from "../dialog/message";
import {exitSiYuan} from "../dialog/processSystem";
const getCloudList = (reload = false) => { const getCloudList = (reload = false) => {
const listElement = repos.element.querySelector("#reposCloudSyncList"); const listElement = repos.element.querySelector("#reposCloudSyncList");
@ -71,57 +67,6 @@ const renderCloudBackup = () => {
</div> </div>
</div>`; </div>`;
} }
let actionHTML = `<div class="fn__flex">
<div class="fn__flex-center">${window.siyuan.languages.cloudBackup}</div>
<span class="b3-list-item__meta fn__flex-center">${response.data.backup?.updated}</span>
<div class="fn__flex-1"></div>
<button class="b3-button b3-button--outline fn__flex-center fn__size200" data-type="more">
<svg><use xlink:href="#iconMore"></use></svg>${window.siyuan.languages.more}
</button>
</div>
<div class="fn__none">
<div class="fn__hr"></div>
<div style="margin-left: 16px">
<div class="fn__flex${response.data.backup.size === 0 ? " fn__none" : ""}">
<span class="fn__flex-center">${window.siyuan.languages.downloadRecover1}</span><span class="fn__space fn__flex-1"></span>
<button class="b3-button b3-button--outline fn__flex-center fn__size200 fn__flex-shrink" data-type="cloudDownloadRecover"><svg><use xlink:href="#iconUndo"></use></svg>${window.siyuan.languages.downloadRecover}</button>
</div><div class="fn__hr${response.data.backup.size === 0 ? " fn__none" : ""}"></div>
<div class="fn__flex">
<span class="fn__flex-center">${window.siyuan.languages.backupUpload1}</span><span class="fn__space fn__flex-1"></span>
<button class="b3-button b3-button--outline fn__flex-center fn__size200" data-type="localBackupUpload"><svg><use xlink:href="#iconUpload"></use></svg>${window.siyuan.languages.backupUpload}</button>
</div><div class="fn__hr"></div>
<div class="fn__flex${response.data.backup.size === 0 ? " fn__none" : ""}">
<span class="fn__flex-center">${window.siyuan.languages.deleteCloudBackup}</span><span class="fn__space fn__flex-1"></span>
<button class="b3-button b3-button--outline fn__flex-center fn__size200" data-type="cloudRemove"><svg><use xlink:href="#iconTrashcan"></use></svg>${window.siyuan.languages.remove}</button>
</div>
</div>
</div>`;
if (isMobile()) {
actionHTML = `<div class="fn__flex">
<div class="fn__flex-center">${window.siyuan.languages.cloudBackup}</div>
<span class="b3-list-item__meta fn__flex-center">${response.data.backup?.updated}</span>
<div class="fn__flex-1"></div>
<button class="b3-button b3-button--outline fn__flex-center" data-type="more">
<svg><use xlink:href="#iconMore"></use></svg>${window.siyuan.languages.more}
</button>
</div>
<div class="fn__none">
<div class="fn__hr"></div>
<div class="${response.data.backup.size === 0 ? " fn__none" : ""}">
<button class="b3-button b3-button--outline fn__block" data-type="cloudDownloadRecover"><svg><use xlink:href="#iconUndo"></use></svg>${window.siyuan.languages.downloadRecover}</button>
<div class="b3-label__text">${window.siyuan.languages.downloadRecover1}</div>
</div>
<div class="fn__hr--b${response.data.backup.size === 0 ? " fn__none" : ""}"></div>
<button class="b3-button b3-button--outline fn__block" data-type="localBackupUpload"><svg><use xlink:href="#iconUpload"></use></svg>${window.siyuan.languages.backupUpload}</button>
<div class="b3-label__text">${window.siyuan.languages.backupUpload1}</div>
<div class="fn__hr--b"></div>
<div class="${response.data.backup.size === 0 ? " fn__none" : ""}">
<button class="b3-button b3-button--outline fn__block" data-type="cloudRemove"><svg><use xlink:href="#iconTrashcan"></use></svg>${window.siyuan.languages.remove}</button>
<div class="b3-label__text">${window.siyuan.languages.deleteCloudBackup}</div>
</div>
</div>`;
}
repos.element.querySelector("#reposBackup").innerHTML = actionHTML;
}); });
}; };
@ -156,115 +101,6 @@ const addCloudName = () => {
}); });
}; };
const setE2eePassword = () => {
const dialog = new Dialog({
title: window.siyuan.languages.changeE2EEPasswd,
content: `<div class="b3-dialog__content">
<ul class="b3-list b3-list--background">
<li class="b3-list-item b3-list-item--hide-action" data-type="default">
<input type="radio" name="mode" class="fn__flex-center">
<div class="fn__space"></div>
<span class="b3-list-item__text">${window.siyuan.languages.defaultPassword}</span>
<span class="b3-list-item__action"><svg class="svg fn__flex-center ft__on-surface"><use xlink:href="#iconRight"></use></svg></span>
</li>
<li class="b3-list-item b3-list-item--hide-action" data-type="custom">
<input type="radio" name="mode" class="fn__flex-center">
<div class="fn__space"></div>
<span class="b3-list-item__text">${window.siyuan.languages.customPassword}</span>
<span class="b3-list-item__action"><svg class="svg fn__flex-center ft__on-surface"><use xlink:href="#iconRight"></use></svg></span>
</li>
</ul>
<div class="fn__none ft__error" data-type="default">
<button class="b3-button b3-button--outline"><svg><use xlink:href="#iconLeft"></use></svg>${window.siyuan.languages.back}</button>
<div class="fn__hr"></div>
${window.siyuan.languages.defaultPasswordTip}
</div>
<div class="fn__none" data-type="custom">
<button class="b3-button b3-button--outline"><svg><use xlink:href="#iconLeft"></use></svg>${window.siyuan.languages.back}</button>
<div class="fn__hr"></div>
<input class="b3-text-field fn__block" placeholder="${window.siyuan.languages.customPassword}">
<div class="fn__hr"></div>
<div class="b3-label__text ft__error">${window.siyuan.languages.changeE2EEPasswdTip}</div>
</div>
</div>
<div class="b3-dialog__action">
<button class="b3-button b3-button--cancel">${window.siyuan.languages.cancel}</button><div class="fn__space"></div>
<button class="b3-button b3-button--text">${window.siyuan.languages.confirm}</button>
</div>`,
width: isMobile() ? "80vw" : "520px",
});
dialog.element.querySelector(".b3-dialog__content").addEventListener("click", (event) => {
let target = event.target as HTMLElement;
while (target && !target.classList.contains("b3-dialog__content")) {
if (target.classList.contains("b3-list-item")) {
target.parentElement.classList.add("fn__none");
if (target.getAttribute("data-type") === "default") {
target.parentElement.nextElementSibling.classList.remove("fn__none");
} else {
target.parentElement.nextElementSibling.nextElementSibling.classList.remove("fn__none");
}
break;
} else if (target.classList.contains("b3-button--outline")) {
target.parentElement.classList.add("fn__none");
dialog.element.querySelector(".b3-list").classList.remove("fn__none");
break;
}
target = target.parentElement;
}
});
const btnsElement = dialog.element.querySelectorAll(".b3-dialog__action .b3-button");
const inputElement = dialog.element.querySelector(".b3-text-field") as HTMLInputElement;
inputElement.addEventListener("keydown", (event) => {
if (event.isComposing) {
event.preventDefault();
return;
}
if (event.key === "Enter") {
(btnsElement[1] as HTMLButtonElement).click();
event.preventDefault();
event.stopPropagation();
} else if (event.key === "Escape") {
dialog.destroy();
event.stopPropagation();
event.preventDefault();
}
});
btnsElement[0].addEventListener("click", () => {
dialog.destroy();
});
btnsElement[1].addEventListener("click", () => {
if (!dialog.element.querySelector(".b3-list").classList.contains("fn__none")) {
showMessage(window.siyuan.languages.plsChoose);
return;
}
const mode = dialog.element.querySelector('div[data-type="default"]').classList.contains("fn__none") ? 1 : 0;
fetchPost("/api/system/setE2EEPasswd", {
e2eePasswd: inputElement.value,
mode //0内置密码; 1自定义密码
}, () => {
window.siyuan.config.e2eePasswdMode = mode;
dialog.destroy();
const updateElement = repos.element.querySelector("#updatePassword").parentElement;
updateElement.classList.add("fn__none");
if (0 === window.siyuan.config.e2eePasswdMode) {
updateElement.nextElementSibling.lastElementChild.innerHTML = window.siyuan.languages.builtinE2EEPasswdTip;
} else {
updateElement.nextElementSibling.lastElementChild.innerHTML = window.siyuan.languages.changeE2EEPasswdTip;
}
updateElement.nextElementSibling.classList.remove("fn__none");
window.siyuan.config.e2eePasswd = "******";
});
});
};
const needPassword = () => {
if (window.siyuan.config.e2eePasswd === "" && !window.siyuan.config.sync.useDataRepo) {
confirmDialog(window.siyuan.languages.config, window.siyuan.languages._kernel[11]);
return true;
}
return false;
};
export const repos = { export const repos = {
element: undefined as Element, element: undefined as Element,
genHTML: () => { genHTML: () => {
@ -292,39 +128,6 @@ export const repos = {
<li>${window.siyuan.languages.cloudIntro11}</li> <li>${window.siyuan.languages.cloudIntro11}</li>
</ul> </ul>
</div> </div>
</div>`;
}
let passwordHTML = `<div class="b3-label fn__flex${(window.siyuan.config.e2eePasswd !== "" || window.siyuan.config.sync.useDataRepo) ? " fn__none" : ""}">
<div class="fn__flex-1 fn__flex-center">
${window.siyuan.languages.e2eePasswd}
<div class="b3-label__text ft__error">${window.siyuan.languages.e2eePasswdTip}</div>
</div>
<div class="fn__space"></div>
<button id="updatePassword" class="b3-button b3-button--outline fn__size200 fn__flex-center">
<svg><use xlink:href="#iconLock"></use></svg>
${window.siyuan.languages.setPasswd}
</button>
</div>
<div class="b3-label${(window.siyuan.config.e2eePasswd === "" || window.siyuan.config.sync.useDataRepo) ? " fn__none" : ""}">
${window.siyuan.languages.e2eePasswd}
<div class="b3-label__text"><i>${window.siyuan.languages.passwdSet}</i></div>
<div class="b3-label__text ft__error">${0 === window.siyuan.config.e2eePasswdMode ? window.siyuan.languages.builtinE2EEPasswdTip : window.siyuan.languages.changeE2EEPasswdTip}</div>
</div>`;
if (isMobile()) {
passwordHTML = `<div class="b3-label${(window.siyuan.config.e2eePasswd !== "" || window.siyuan.config.sync.useDataRepo) ? " fn__none" : ""}">
${window.siyuan.languages.e2eePasswd}
<div class="fn__hr"></div>
<button id="updatePassword" class="b3-button b3-button--outline fn__block">
<svg><use xlink:href="#iconLock"></use></svg>
${window.siyuan.languages.setPasswd}
</button>
<div class="b3-label__text ft__error">${window.siyuan.languages.e2eePasswdTip}</div>
</div>
<div class="b3-label${(window.siyuan.config.e2eePasswd === "" || window.siyuan.config.sync.useDataRepo) ? " fn__none" : ""}">
${window.siyuan.languages.e2eePasswd}
<div class="fn__hr"></div>
<div class="b3-label__text"><i>${window.siyuan.languages.passwdSet}</i></div>
<div class="b3-label__text ft__error">${0 === window.siyuan.config.e2eePasswdMode ? window.siyuan.languages.builtinE2EEPasswdTip : window.siyuan.languages.changeE2EEPasswdTip}</div>
</div>`; </div>`;
} }
return `<div><div style="position: fixed;width: 800px;height: 434px;box-sizing: border-box;text-align: center;display: flex;align-items: center;justify-content: center;z-index: 1;" id="reposLoading"> return `<div><div style="position: fixed;width: 800px;height: 434px;box-sizing: border-box;text-align: center;display: flex;align-items: center;justify-content: center;z-index: 1;" id="reposLoading">
@ -340,7 +143,6 @@ export const repos = {
</div> </div>
</div> </div>
</div> </div>
${passwordHTML}
<label class="fn__flex b3-label"> <label class="fn__flex b3-label">
<div class="fn__flex-1"> <div class="fn__flex-1">
${window.siyuan.languages.openSyncTip1} ${window.siyuan.languages.openSyncTip1}
@ -360,14 +162,6 @@ ${passwordHTML}
<option value="2" ${window.siyuan.config.sync.mode === 2 ? "selected" : ""}>${window.siyuan.languages.syncMode2}</option> <option value="2" ${window.siyuan.config.sync.mode === 2 ? "selected" : ""}>${window.siyuan.languages.syncMode2}</option>
</select> </select>
</label> </label>
<label class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.syncDataRepo}
<div class="b3-label__text">${window.siyuan.languages.syncDataRepoTip}</div>
</div>
<span class="fn__space"></span>
<input type="checkbox" id="useDataRepo"${window.siyuan.config.sync.useDataRepo ? " checked='checked'" : ""} class="b3-switch fn__flex-center">
</label>
<div class="b3-label"> <div class="b3-label">
<div class="fn__flex"> <div class="fn__flex">
<div class="fn__flex-center">${window.siyuan.languages.cloudSync}</div> <div class="fn__flex-center">${window.siyuan.languages.cloudSync}</div>
@ -378,8 +172,7 @@ ${passwordHTML}
</div> </div>
<div id="reposCloudSyncList" class="fn__none config-repos__sync"><img style="margin: 0 auto;display: block;" src="/stage/loading-pure.svg"></div> <div id="reposCloudSyncList" class="fn__none config-repos__sync"><img style="margin: 0 auto;display: block;" src="/stage/loading-pure.svg"></div>
</div> </div>
<div id="reposBackup" class="b3-label${window.siyuan.config.sync.useDataRepo ? " fn__none" : ""}">${window.siyuan.languages.cloudBackup}</div> <div class="b3-label fn__flex">
<div class="b3-label fn__flex${window.siyuan.config.sync.useDataRepo ? "" : " fn__none"}">
<div class="fn__flex-center">${window.siyuan.languages.cloudBackup}</div> <div class="fn__flex-center">${window.siyuan.languages.cloudBackup}</div>
<div class="b3-list-item__meta fn__flex-center">${window.siyuan.languages.cloudBackupTip}</div> <div class="b3-list-item__meta fn__flex-center">${window.siyuan.languages.cloudBackupTip}</div>
</div> </div>
@ -390,9 +183,6 @@ ${passwordHTML}
return; return;
} }
renderCloudBackup(); renderCloudBackup();
repos.element.querySelector("#updatePassword").addEventListener("click", () => {
setE2eePassword();
});
const switchElement = repos.element.querySelector("#reposCloudSyncSwitch") as HTMLInputElement; const switchElement = repos.element.querySelector("#reposCloudSyncSwitch") as HTMLInputElement;
switchElement.addEventListener("change", () => { switchElement.addEventListener("change", () => {
if (switchElement.checked && window.siyuan.config.sync.cloudName === "") { if (switchElement.checked && window.siyuan.config.sync.cloudName === "") {
@ -420,36 +210,6 @@ ${passwordHTML}
} }
}); });
}); });
const useDataRepoElement = repos.element.querySelector("#useDataRepo") as HTMLInputElement;
useDataRepoElement.addEventListener("change", () => {
fetchPost("/api/sync/setSyncUseDataRepo", {enabled: useDataRepoElement.checked}, (response) => {
if (response.code === 1) {
showMessage(response.msg);
useDataRepoElement.checked = false;
} else {
window.siyuan.config.sync.useDataRepo = useDataRepoElement.checked;
const reposBackupElement = repos.element.querySelector("#reposBackup") as HTMLElement;
const reposPasswordElement = repos.element.querySelector("#updatePassword").parentElement as HTMLElement;
if (useDataRepoElement.checked) {
reposBackupElement.classList.add("fn__none");
reposBackupElement.nextElementSibling.classList.remove("fn__none");
if (window.siyuan.config.e2eePasswd === "") {
reposPasswordElement.classList.add("fn__none");
} else {
reposPasswordElement.nextElementSibling.classList.add("fn__none");
}
} else {
reposBackupElement.classList.remove("fn__none");
reposBackupElement.nextElementSibling.classList.add("fn__none");
if (window.siyuan.config.e2eePasswd === "") {
reposPasswordElement.classList.remove("fn__none");
} else {
reposPasswordElement.nextElementSibling.classList.remove("fn__none");
}
}
}
});
});
const loadingElement = repos.element.querySelector("#reposLoading") as HTMLElement; const loadingElement = repos.element.querySelector("#reposLoading") as HTMLElement;
loadingElement.style.width = repos.element.clientWidth + "px"; loadingElement.style.width = repos.element.clientWidth + "px";
loadingElement.style.height = repos.element.clientHeight + "px"; loadingElement.style.height = repos.element.clientHeight + "px";
@ -460,57 +220,12 @@ ${passwordHTML}
const type = target.getAttribute("data-type"); const type = target.getAttribute("data-type");
if (type) { if (type) {
switch (type) { switch (type) {
case "more":
repos.element.querySelector("#reposBackup").lastElementChild.classList.toggle("fn__none");
break;
case "config": case "config":
if (!needPassword()) { if (syncConfigElement.classList.contains("fn__none")) {
if (syncConfigElement.classList.contains("fn__none")) { getCloudList();
getCloudList(); syncConfigElement.classList.remove("fn__none");
syncConfigElement.classList.remove("fn__none"); } else {
} else { syncConfigElement.classList.add("fn__none");
syncConfigElement.classList.add("fn__none");
}
}
break;
case "cloudDownloadRecover":
if (!needPassword()) {
confirmDialog(window.siyuan.languages.downloadCloud, window.siyuan.languages.downloadCloudTip, () => {
fetchPost("/api/backup/downloadCloudBackup", {}, () => {
fetchPost("/api/backup/recoverLocalBackup", {}, () => {
setTimeout(() => {
/// #if !MOBILE
exportLayout(false, () => {
exitSiYuan();
});
/// #else
window.location.reload();
/// #endif
}, 7000);
return;
});
});
});
}
break;
case "cloudRemove":
if (!needPassword()) {
confirmDialog(window.siyuan.languages.confirm, window.siyuan.languages.confirmDelete + "?", () => {
fetchPost("/api/backup/removeCloudBackup", {}, () => {
renderCloudBackup();
});
});
}
break;
case "localBackupUpload":
if (!needPassword()) {
confirmDialog(window.siyuan.languages.backupUpload, window.siyuan.languages.account3Tip, () => {
fetchPost("/api/backup/createLocalBackup", {}, () => {
fetchPost("/api/backup/uploadLocalBackup", {}, () => {
renderCloudBackup();
});
});
});
} }
break; break;
case "addCloud": case "addCloud":

View file

@ -53,9 +53,8 @@ export const initConfigSearch = (element: HTMLElement) => {
.concat(Object.keys(Constants.SIYUAN_KEYMAP.editor.table))), .concat(Object.keys(Constants.SIYUAN_KEYMAP.editor.table))),
// 云端 // 云端
getLang(["sync", "cloudSpace", "backup", "cdn", "total", "cloudBackup", "downloadRecover", "backupUpload", getLang(["sync", "cloudSpace", "backup", "cdn", "total", "cloudBackup", "updatePath", "cloudSync",
"downloadCloud", "downloadCloudTip", "account3Tip", "updatePath", "cloudSync", "syncTip", "reposTip", "openSyncTip1", "openSyncTip2", "cloudSyncDir"]),
"changeE2EEPasswd", "e2eePasswdTip", "changeE2EEPasswdTip", "e2eePasswd", "setPasswd", "syncTip", "reposTip", "openSyncTip1", "openSyncTip2", "downloadRecover1", "backupUpload1", "deleteCloudBackup", "cloudSyncDir"]),
// 账号 // 账号
getLang(["accountTip", "accountName", "password", "captcha", "forgetPassword", "login", "register", "twoFactorCaptcha", getLang(["accountTip", "accountName", "password", "captcha", "forgetPassword", "login", "register", "twoFactorCaptcha",

View file

@ -410,7 +410,7 @@ export const resizeTabs = () => {
if (item.editor && item.editor.protyle && item.element.parentElement) { if (item.editor && item.editor.protyle && item.element.parentElement) {
hideElements(["gutter"], item.editor.protyle); hideElements(["gutter"], item.editor.protyle);
setTimeout(() => { setTimeout(() => {
// .layout .fn__flex-shrink {transition: width .3s ease;} 时需要再次计算 padding // .layout .fn__flex-shrink {width .15s cubic-bezier(0, 0, .2, 1) 0ms} 时需要再次计算 padding
setPadding(item.editor.protyle); setPadding(item.editor.protyle);
if (typeof echarts !== "undefined") { if (typeof echarts !== "undefined") {
item.editor.protyle.wysiwyg.element.querySelectorAll('[data-subtype="echarts"], [data-subtype="mindmap"]').forEach((chartItem: HTMLElement) => { item.editor.protyle.wysiwyg.element.querySelectorAll('[data-subtype="echarts"], [data-subtype="mindmap"]').forEach((chartItem: HTMLElement) => {

View file

@ -261,8 +261,6 @@ declare interface IConfig {
repo: { repo: {
key: string key: string
}, },
e2eePasswd: string
e2eePasswdMode: number
sync: { sync: {
enabled: boolean enabled: boolean
mode: number mode: number
@ -270,7 +268,6 @@ declare interface IConfig {
stat: string stat: string
interval: number interval: number
cloudName: string cloudName: string
useDataRepo: boolean
}, },
lang: string lang: string
api: { api: {