diff --git a/CHANGELOG.md b/CHANGELOG.md index b2b0b1dda4..732475db37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,24 @@ npm i -g ts-node npm run migrate ``` +11.25.0 (2019/07/08) +-------------------- +### ✨Improvements +* パスワード無しログイン機能 +* MisskeyPagesにイベント送信ボタンを追加 +* MisskeyPagesでボタンを目立たせることができるように +* ページをピン留めできるように +* デッキのカラム内でページを見れるように +* 既定のアップロード先フォルダを設定できるように +* ファイルをペーストしてアップロードするときのファイル名をカスタマイズできるように +* 公開以外へのリプライ時元の公開範囲で指定したユーザー情報を引き継ぐように +* デスクトップ版を使うかモバイル版を使うか手動で設定できるように +* フォルダーを削除できないときダイアログボックスで知らせるように + +### 🐛Fixes +* postgres redis cache の option が適用されない問題を修正 +* 一部MFMテキストが折り返されず突き抜ける問題を修正 + 11.24.2 (2019/07/05) -------------------- ### 🐛Fixes @@ -36,7 +54,10 @@ npm run migrate 11.24.0 (2019/07/05) -------------------- -注意: このアップデート後に、`node built/tools/accept-migration Init 1000000000000`してください。 +### 注意 +- このアップデート後に、`node built/tools/accept-migration Init 1000000000000`してください。 +- プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください + ### ✨Improvements * WebAuthnサポート diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 894122b04f..ea427b2c01 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -220,8 +220,7 @@ const user = await Users.findOne(userId).then(ensure); ### Migration作成方法 ``` -npm i -g ts-node -ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前 +npx ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前 ``` 作成されたスクリプトは不必要な変更を含むため除去してください。 diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index ac30e9512f..0013291717 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -101,7 +101,8 @@ common: submit: "Odeslat" reply: "Odpovědět" renote: "Renotovat" - attach-media-from-local: "Uplodovat soubor z vašeho zařízení" + posting: "Posílání" + attach-media-from-local: "Nahrát soubor z vašeho zařízení" insert-a-kao: "v('ω')v" create-poll: "Vytvořit anketu" text-remain: "zbývá ještě {} znaků" @@ -537,6 +538,8 @@ common/views/components/emoji-picker.vue: objects: "Objekty" symbols: "Symboly" flags: "Vlajky" +common/views/components/settings/app-type.vue: + info: "Pro aktivování změn musíte znovu načíst stránky." common/views/components/signin.vue: username: "Přezdívka" password: "Heslo" @@ -764,7 +767,7 @@ desktop/views/components/drive.file.vue: rename: "Přejmenovat" copy-url: "Kopírovat URL" download: "Stáhnout" - else-files: "Více..." + else-files: "Ostatní" set-as-avatar: "Nastavit jako avatar" set-as-banner: "Nastavit jako baner" open-in-app: "Otevřít v aplikaci" @@ -782,6 +785,7 @@ desktop/views/components/drive.folder.vue: rename: "Přejmenovat" rename-folder: "Přejmenovat složku" input-new-folder-name: "Zadejte nové jméno" + else-folders: "Ostatní" desktop/views/components/drive.vue: empty-drive-description: "Klikněte pravým tlačítkem myši pro otevření menu, nebo sem přetáhněte soubor pro nahrání." empty-folder: "Tato složka je prázdná" @@ -1265,6 +1269,8 @@ deck/deck.user-column.vue: dev/views/new-app.vue: app-name-desc: "Jméno vaší aplikace" pages: + pin-this-page: "Připnout" + unpin-this-page: "Odepnout" like: "Lajk" title: "Titulek" blocks: diff --git a/locales/da-DK.yml b/locales/da-DK.yml index f1f3751c05..6141c5563f 100644 --- a/locales/da-DK.yml +++ b/locales/da-DK.yml @@ -568,6 +568,8 @@ common/views/components/emoji-picker.vue: objects: "Objekt" symbols: "Symboler" flags: "Flag" +common/views/components/settings/app-type.vue: + info: "Du er nødt til at genindlæse siden, før ændringerne slår igennem." common/views/components/signin.vue: username: "Brugernavn" password: "Adgangskode" @@ -847,7 +849,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "Fjern markering som 'følsom'" copy-url: "Kopier webadresse" download: "Download" - else-files: "Andre" + else-files: "Avanceret" set-as-avatar: "Vælg som avatar" set-as-banner: "Vælg som banner" open-in-app: "Åbn i app" @@ -866,6 +868,7 @@ desktop/views/components/drive.folder.vue: rename: "Omdøb" rename-folder: "Omdøb mappe" input-new-folder-name: "Angiv nyt navn" + else-folders: "Avanceret" desktop/views/components/drive.vue: search: "Søg" empty-draghover: "Smid det her! Fordi du ved, at jeg er meget sød, ikke?" @@ -995,6 +998,7 @@ common/views/components/drive-settings.vue: max: "Kapacitet" in-use: "I brug" stats: "Statistik" + default-upload-folder-name: "Mappe(r)" common/views/components/mute-and-block.vue: mute-and-block: "Annuller / Bloker" mute: "Annuller" @@ -1664,6 +1668,8 @@ dev/views/new-app.vue: app-name: "Navn på app" app-name-placeholder: "F.eks. Misskey for iOS" pages: + pin-this-page: "Tilknyt til din profil" + unpin-this-page: "Fjern tilknytning til din profil" like: "Synes om" title: "Titel" blocks: diff --git a/locales/de-DE.yml b/locales/de-DE.yml index e6ba5fa9d7..564c52298f 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -632,7 +632,6 @@ desktop/views/components/drive.file.vue: rename: "Umbenennen" copy-url: "URL kopieren" download: "Download" - else-files: "Anderes…" set-as-avatar: "Als Avatar festlegen" set-as-banner: "Setze als Banner" open-in-app: "In der App öffnen" @@ -911,6 +910,8 @@ dev/views/new-app.vue: authority-desc: "Nur die hier eingetragenen Berechtigungen, werden per API zur Verfügung stehen." authority-warning: "Dies kann auch nach dem erstellen der Anwendung geändert werden, allerdings werden dann alle bisher generierten Token ungültig." pages: + pin-this-page: "An die Profilseite pinnen" + unpin-this-page: "Lösen" like: "Gefällt mir" blocks: post: "\"Neuer Beitrag\"-Formular" diff --git a/locales/en-US.yml b/locales/en-US.yml index d4311d09a0..0be3c1b293 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -35,6 +35,7 @@ common: signout: "Logout" reload-to-apply-the-setting: "You'll need to reload the page to reflect this setting. Do you want to reload it now?" fetching-as-ap-object: "Inquiring to union" + unfollow-confirm: "Do you want to unfollow {name}?" got-it: "Got it!" customization-tips: title: "Customization tips" @@ -122,6 +123,7 @@ common: add-visible-user: "Add a user" cw-placeholder: "Comments for the post (optional)" username-prompt: "Please enter username" + enter-file-name: "Edit file name" weekday-short: sunday: "S" monday: "M" @@ -188,6 +190,8 @@ common: remember-note-visibility: "Remember post visibility" web-search-engine: "Web search engine" web-search-engine-desc: "Example: https://www.google.com/?#q={{query}}" + paste: "Paste" + paste-dialog: "Edit the pasted file name" keep-cw: "Preserve content warning" keep-cw-desc: "When replying to a post, the same content warning is set by default to the reply, as has been set by the original post." i-like-sushi: "I prefer sushi rather than pudding" @@ -592,6 +596,14 @@ common/views/components/emoji-picker.vue: objects: "Objects" symbols: "Symbols" flags: "Flags" +common/views/components/settings/app-type.vue: + title: "Mode" + intro: "You can specify whether you want to use the desktop, or the mobile layout." + choices: + auto: "Choose layout automatically" + desktop: "Always use the desktop layout" + mobile: "Always use the mobile layout" + info: "You need to reload the page for the changes to take effect." common/views/components/signin.vue: username: "Username" password: "Password" @@ -876,7 +888,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "Unmark as 'sensitive'" copy-url: "Copy URL" download: "Download" - else-files: "Others" + else-files: "Other" set-as-avatar: "Set as an avatar" set-as-banner: "Set as a banner" open-in-app: "Open in app" @@ -886,15 +898,20 @@ desktop/views/components/drive.file.vue: copied: "Copied" copied-url-to-clipboard: "URL has been copied to clipboard" desktop/views/components/drive.folder.vue: + upload-folder: "Default Upload location" unable-to-process: "The operation could not be completed." circular-reference-detected: "The destination folder is a subfolder of the folder you wish to move." unhandled-error: "Unknown error" + unable-to-delete: "Unable to delete" + has-child-files-or-folders: "Since this folder is not empty, it can not be deleted." contextmenu: move-to-this-folder: "Move to this folder" show-in-new-window: "Open in new window" rename: "Rename" rename-folder: "Rename folder" input-new-folder-name: "Enter new name" + else-folders: "Other" + set-as-upload-folder: "Set as default upload folder" desktop/views/components/drive.vue: search: "Search" empty-draghover: "Drop it here! Yep, cuz you know I'm cute, right?" @@ -987,7 +1004,7 @@ desktop/views/components/settings.2fa.vue: url: "https://www.google.com/landing/2step/" caution: "If you lose access to your registered device, you won't be able to connect to Misskey anymore!" register: "Register a device" - already-registered: "Your account is currently registered to an authenticator application" + already-registered: "This device is already registered" unregister: "Unregister" unregistered: "Two-factor authentication has been disabled." enter-password: "Enter the password" @@ -1009,6 +1026,7 @@ desktop/views/components/settings.2fa.vue: register-security-key: "Complete Key registration" something-went-wrong: "Wow! There was a problem registering the Key:" key-unregistered: "The Key has been deleted" + use-password-less-login: "Use Password-less login" common/views/components/media-image.vue: sensitive: "NSFW" click-to-show: "Click to show" @@ -1033,6 +1051,9 @@ common/views/components/drive-settings.vue: max: "Max" in-use: "In use" stats: "Statistics" + default-upload-folder: "Default upload folder location" + default-upload-folder-name: "Folder(s)" + change-default-upload-folder: "Change folder" common/views/components/mute-and-block.vue: mute-and-block: "Mute / Block" mute: "Mute" @@ -1715,6 +1736,7 @@ deck/deck.user-column.vue: activity: "Activity" timeline: "Timeline" pinned-notes: "Pinned posts" + pinned-page: "Pinned page" docs: edit-this-page-on-github: "Found an error, or do you want to contribute to the documentation?" edit-this-page-on-github-link: "Edit this page at GitHub!" @@ -1749,6 +1771,8 @@ pages: are-you-sure-delete: "Do you want to delete this page?" page-deleted: "The page has been deleted" edit-this-page: "Edit this page" + pin-this-page: "Pin to your profile" + unpin-this-page: "Unpin" view-source: "View Source" view-page: "View page" like: "Like" @@ -1767,6 +1791,7 @@ pages: url: "Page URL" summary: "Summary of page" align-center: "Center align" + hide-title-when-pinned: "Hide page title when pinned to profile" font: "Font" fontSerif: "Serif" fontSansSerif: "Sans Serif" @@ -1820,12 +1845,19 @@ pages: inc: "Increase number" _button: text: "Title" + colored: "Color" action: "Operation when the button pressed" _action: dialog: "Show a dialog" _dialog: content: "Content" resetRandom: "Reset a random number" + pushEvent: "Send an event" + _pushEvent: + event: "Name of the event" + message: "Message to display when pressed" + variable: "Variable to send" + no-variable: "None" script: categories: flow: "Control" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 991377fcc0..2828d59d24 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -458,6 +458,8 @@ common/views/components/emoji-picker.vue: objects: "Objetos" symbols: "Símbolos" flags: "Países" +common/views/components/settings/app-type.vue: + info: "Necesitas recargar la página para que los cambios tengan efecto." common/views/components/signin.vue: username: "Usuario" password: "Contraseña" @@ -725,6 +727,7 @@ desktop/views/components/drive.folder.vue: rename: "Renombrar" rename-folder: "Renombrar carpeta" input-new-folder-name: "Escribe el nombre nuevo" + else-folders: "Otros" desktop/views/components/drive.vue: search: "Buscar" empty-draghover: "¡Saluda!" @@ -1091,6 +1094,7 @@ deck: deck/deck.user-column.vue: activity: "Actividad" pages: + pin-this-page: "Fijar en el perfil" like: "Me gusta" blocks: post: "Formulario" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index d0e06544d7..0187dd9d91 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -34,6 +34,7 @@ common: signup: "S'enregistrer" signout: "Se déconnecter" reload-to-apply-the-setting: "Le rechargement de la page est nécessaire pour appliquer ces paramètres. Désirez-vous la recharger maintenant ?" + unfollow-confirm: "Désirez-vous vous désabonner de {name} ?" got-it: "J’ai compris !" customization-tips: title: "Conseils de personnalisation" @@ -532,8 +533,10 @@ common/views/components/user-menu.vue: report-abuse-reported: "Transmit à l’administrateur. Merci de votre collaboration." silence: "Mettre en sourdine" unsilence: "Enlever la sourdine" + silence-confirm: "Êtes-vous surs de vouloir mettre cet·te utilisateur·rice en sourdine ?" suspend: "Suspendre" unsuspend: "Ne plus suspendre" + suspend-confirm: "Êtes-vous surs de vouloir suspendre cet·te utilisateur·rice ?" common/views/components/poll.vue: vote-to: "Voter pour '{}'" vote-count: "{} votes" @@ -577,6 +580,8 @@ common/views/components/emoji-picker.vue: objects: "Objets" symbols: "Symboles" flags: "Drapeaux" +common/views/components/settings/app-type.vue: + info: "Le rechargement de la page est requis afin d'appliquer les modifications." common/views/components/signin.vue: username: "Nom d'utilisateur·rice" password: "Mot de passe" @@ -587,6 +592,8 @@ common/views/components/signin.vue: signin-with-github: "Se connecter avec GitHub" signin-with-discord: "Se connecter avec Discord" login-failed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur et mot de passe sont corrects." + tap-key: "Cliquez sur la clé de sécurité pour vous connecter" + enter-2fa-code: "Entrez votre code de vérification" common/views/components/signup.vue: invitation-code: "Code d’invitation" invitation-info: "Si vous n’avez pas de code d’invitation, contactez un administrateur." @@ -723,6 +730,7 @@ common/views/components/user-group-editor.vue: rename: "Renommer le groupe" delete: "Supprimer le groupe" transfer: "Transférer de groupe" + transfer-are-you-sure: "Êtes vous surs de vouloir ajouter @$2 au groupe $1 ?" transferred: "Groupe transféré" remove-user: "Enlever un utilisateur de ce groupe" delete-are-you-sure: "Désirez-vous vraiment supprimer le groupe $1 ?" @@ -857,7 +865,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "Ne pas marquer comme sensible" copy-url: "Copier l’URL" download: "Télécharger" - else-files: "Autres..." + else-files: "Avancé" set-as-avatar: "Utiliser en tant qu'avatar" set-as-banner: "Utiliser en tant que bannière" open-in-app: "Ouvrir dans l'application" @@ -876,6 +884,7 @@ desktop/views/components/drive.folder.vue: rename: "Renommer" rename-folder: "Renommer le dossier" input-new-folder-name: "Entrer un nouveau nom" + else-folders: "Avancé" desktop/views/components/drive.vue: search: "Rechercher" empty-draghover: "Drop Welcome!" @@ -981,6 +990,12 @@ desktop/views/components/settings.2fa.vue: success: "Sauvegarde des paramètres avec succès !" failed: "L’opération a échoué. Veuillez vous assurer que le jeton a été saisi correctement." info: "À partir de maintenant, à chaque fois que vous vous connectez entrez votre mot de passe ainsi que le jeton généré sur votre appareil." + security-key-header: "Clé de sécurité" + last-used: "Dernière utilisation :" + activate-key: "Cliquez pour activer la clé de sécurité" + security-key-name: "Nom de la clé" + key-unregistered: "La clé a été supprimée" + use-password-less-login: "Utiliser une connexion sans mot de passe" common/views/components/media-image.vue: sensitive: "Contenu sensible" click-to-show: "Cliquer pour afficher" @@ -1005,6 +1020,7 @@ common/views/components/drive-settings.vue: max: "Maximale" in-use: "utilisé" stats: "Statistiques" + default-upload-folder-name: "Dossier·s" common/views/components/mute-and-block.vue: mute-and-block: "Silencés / Bloqués" mute: "Mettre en sourdine" @@ -1294,6 +1310,7 @@ admin/views/users.vue: update-remote-user: "Mettre à jour les informations de l’utilisateur·rice distant·e" remote-user-updated: "Les informations de l’utilisateur·rice distant·e ont étés mis à jour" delete-all-files: "Supprimer tous les fichiers" + delete-all-files-confirm: "Êtes vous surs de vouloir supprimer tous les fichiers ?" users: title: "Utilisateur·rice·s" sort: @@ -1692,6 +1709,8 @@ pages: are-you-sure-delete: "Confirmez-vous la suppression de cette page ?" page-deleted: "La page a bien été supprimée." edit-this-page: "Éditer cette page" + pin-this-page: "Épingler sur votre profil" + unpin-this-page: "Désépingler" view-source: "Afficher la source" view-page: "Afficher la page" like: "Bien" @@ -1705,6 +1724,7 @@ pages: url: "URL de page" summary: "Résumé de page" align-center: "Centrée" + hide-title-when-pinned: "Masquer le titre de la page lorsque celle-ci est épinglée au profil" font: "Police de caractères" fontSerif: "Serif" fontSansSerif: "Sans Serif" @@ -1757,12 +1777,19 @@ pages: inc: "Augmenter le chiffre" _button: text: "Titre" + colored: "Couleur" action: "L'opération lorsque le bouton sera pressé" _action: dialog: "Afficher une fenêtre de dialogue" _dialog: content: "Contenu" resetRandom: "Réinitialiser le nombre aléatoire" + pushEvent: "Envoyer un évènement" + _pushEvent: + event: "Nom de l'évènement" + message: "Message à afficher lorsque appuyé" + variable: "Variable à envoyer" + no-variable: "Aucune" script: categories: flow: "Contrôle" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 15cb30997b..d2776c45b1 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -129,6 +129,7 @@ common: add-visible-user: "ユーザーを追加" cw-placeholder: "内容への注釈 (オプション)" username-prompt: "ユーザー名を入力してください" + enter-file-name: "ファイル名を編集" weekday-short: sunday: "日" @@ -201,6 +202,11 @@ common: remember-note-visibility: "投稿の公開範囲を記憶する" web-search-engine: "ウェブ検索エンジン" web-search-engine-desc: "例: https://www.google.com/?#q={{query}}" + paste: "ペースト" + pasted-file-name: "ペーストされたファイル名のテンプレート" + pasted-file-name-desc: "例: \"yyyy-MM-dd HH-mm-ss [{{number}}]\" → \"2018-03-20 21-30-24 1\"" + paste-dialog: "ペースト時にファイル名を編集" + paste-dialog-desc: "ペースト時にファイル名を編集するダイアログを表示するようにします。" keep-cw: "CW保持" keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。" i-like-sushi: "私は(プリンよりむしろ)寿司が好き" @@ -637,6 +643,15 @@ common/views/components/emoji-picker.vue: symbols: "記号" flags: "旗" +common/views/components/settings/app-type.vue: + title: "モード" + intro: "デスクトップ版とモバイル版のどちらを使うかを指定できます。" + choices: + auto: "自動で選択" + desktop: "デスクトップ版に固定" + mobile: "モバイル版に固定" + info: "変更はページの再度読み込み後に反映されます。" + common/views/components/signin.vue: username: "ユーザー名" password: "パスワード" @@ -958,7 +973,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "閲覧注意を解除" copy-url: "URLをコピー" download: "ダウンロード" - else-files: "その他..." + else-files: "その他" set-as-avatar: "アイコンに設定" set-as-banner: "バナーに設定" open-in-app: "アプリで開く" @@ -969,15 +984,20 @@ desktop/views/components/drive.file.vue: copied-url-to-clipboard: "URLをクリップボードにコピーしました" desktop/views/components/drive.folder.vue: + upload-folder: "既定アップロード先" unable-to-process: "操作を完了できません" circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。" unhandled-error: "不明なエラー" + unable-to-delete: "削除できません" + has-child-files-or-folders: "このフォルダは空でないため、削除できません。" contextmenu: move-to-this-folder: "このフォルダへ移動" show-in-new-window: "新しいウィンドウで表示" rename: "名前を変更" rename-folder: "フォルダ名の変更" input-new-folder-name: "新しいフォルダ名を入力してください" + else-folders: "その他" + set-as-upload-folder: "既定アップロード先に設定" desktop/views/components/drive.vue: search: "検索" @@ -1112,6 +1132,7 @@ desktop/views/components/settings.2fa.vue: register-security-key: "キーの登録を完了" something-went-wrong: "わー! キーを登録する際に問題が発生しました:" key-unregistered: "キーが削除されました" + use-password-less-login: "パスワードなしのログインを使用" common/views/components/media-image.vue: sensitive: "閲覧注意" @@ -1140,6 +1161,9 @@ common/views/components/drive-settings.vue: max: "容量" in-use: "使用中" stats: "統計" + default-upload-folder: "既定のアップロード先フォルダ" + default-upload-folder-name: "フォルダ" + change-default-upload-folder: "フォルダを変更" common/views/components/mute-and-block.vue: mute-and-block: "ミュートとブロック" @@ -1906,6 +1930,7 @@ deck/deck.user-column.vue: activity: "アクティビティ" timeline: "タイムライン" pinned-notes: "ピン留めされた投稿" + pinned-page: "ピン留めされたページ" docs: edit-this-page-on-github: "間違いや改善点を見つけましたか?" @@ -1945,6 +1970,8 @@ pages: are-you-sure-delete: "このページを削除しますか?" page-deleted: "ページを削除しました" edit-this-page: "このページを編集" + pin-this-page: "ピン留め" + unpin-this-page: "ピン留め解除" view-source: "ソースを表示" view-page: "ページを見る" like: "いいね" @@ -1963,6 +1990,7 @@ pages: url: "ページURL" summary: "ページの要約" align-center: "中央寄せ" + hide-title-when-pinned: "ピン留めされているときにタイトルを非表示" font: "フォント" fontSerif: "セリフ" fontSansSerif: "サンセリフ" @@ -2024,12 +2052,19 @@ pages: _button: text: "タイトル" + colored: "色付き" action: "ボタンを押したときの動作" _action: dialog: "ダイアログを表示する" _dialog: content: "内容" resetRandom: "乱数をリセット" + pushEvent: "イベントを送信させる" + _pushEvent: + event: "イベント名" + message: "押したときに表示するメッセージ" + variable: "送信する変数" + no-variable: "なし" script: categories: diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 85ad415d71..56b4fe5e46 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -363,6 +363,8 @@ common/views/components/emoji-picker.vue: objects: "物" symbols: "記号" flags: "旗" +common/views/components/settings/app-type.vue: + info: "ページもっぺん読み込んだら反映したるで。" common/views/components/signin.vue: username: "ユーザー名" password: "パスワード" @@ -601,7 +603,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "やっぱ見せたるわ" copy-url: "URLをコピー" download: "ダウンロード" - else-files: "まだあんで..." + else-files: "その他" set-as-avatar: "アイコンにする" set-as-banner: "バナーにする" open-in-app: "アプリで開く" @@ -620,6 +622,7 @@ desktop/views/components/drive.folder.vue: rename: "名前を変えるで" rename-folder: "フォルダ名を変えるで" input-new-folder-name: "新しいフォルダ名を入力してや" + else-folders: "その他" desktop/views/components/drive.vue: search: "検索" empty-draghover: "ドロップするにゃ!お魚以外なら何でもいいにゃ!" @@ -747,6 +750,7 @@ common/views/components/drive-settings.vue: max: "容量" in-use: "使うとる" stats: "統計" + default-upload-folder-name: "フォルダ" common/views/components/mute-and-block.vue: mute-and-block: "ミュートとブロック" mute: "ミュート" @@ -1234,6 +1238,8 @@ dev/views/new-app.vue: authority-desc: "ここにチェックした機能しかAPIからアクセスできひんから気ぃつけてな" authority-warning: "アプリ作った後でも変えれるけど、新しいやつ追加したらそん時関連付いてるユーザーキーは全部ほかされるで。" pages: + pin-this-page: "ピン留め" + unpin-this-page: "ピン留めやめる" like: "ええやん" blocks: image: "画像" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 2938dd6e67..a24ee94200 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -290,7 +290,7 @@ common: is-remote-user: "이 사용자 정보는 정확하지 않을 수 있습니다." is-remote-post: "이 글 정보는 복사본입니다." view-on-remote: "정확한 정보 보기" - renoted-by: "{user}님이 리노트" + renoted-by: "{user} 님이 리노트" no-notes: "글이 없습니다" turn-on-darkmode: "어둠에 삼켜져라" turn-off-darkmode: "빛이 있으라" @@ -593,6 +593,14 @@ common/views/components/emoji-picker.vue: objects: "사물" symbols: "기호" flags: "깃발" +common/views/components/settings/app-type.vue: + title: "모드" + intro: "데스크톱과 모바일 중 어떤 레이아웃을 사용할 지 지정할 수 있습니다." + choices: + auto: "자동으로 선택" + desktop: "데스크톱 레이아웃으로 고정" + mobile: "모바일 레이아웃으로 고정" + info: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다." common/views/components/signin.vue: username: "사용자명" password: "비밀번호" @@ -877,7 +885,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "열람주의 해제" copy-url: "URL 복사" download: "다운로드" - else-files: "기타..." + else-files: "기타" set-as-avatar: "아이콘으로 설정" set-as-banner: "배너로 설정" open-in-app: "앱에서 열기" @@ -887,15 +895,20 @@ desktop/views/components/drive.file.vue: copied: "복사 완료" copied-url-to-clipboard: "URL을 클립보드에 복사하였습니다" desktop/views/components/drive.folder.vue: + upload-folder: "기본 업로드 위치" unable-to-process: "작업을 완료할 수 없습니다" circular-reference-detected: "대상 폴더가 이동할 폴더의 하위 폴더입니다." unhandled-error: "알 수 없는 오류" + unable-to-delete: "삭제할 수 없습니다" + has-child-files-or-folders: "이 폴더는 비어있지 않기 때문에 삭제할 수 없습니다." contextmenu: move-to-this-folder: "이 폴더로 이동" show-in-new-window: "새 창으로 보기" rename: "이름 변경" rename-folder: "폴더 이름 변경" input-new-folder-name: "새 폴더 이름을 입력하여 주십시오" + else-folders: "기타" + set-as-upload-folder: "기본 업로드 위치로 설정" desktop/views/components/drive.vue: search: "검색" empty-draghover: "끌어놓으신 거 맞나요? 괜찮아요, 저는 귀여우니까요" @@ -1010,6 +1023,7 @@ desktop/views/components/settings.2fa.vue: register-security-key: "키 등록 완료" something-went-wrong: "으악! 키를 등록하는 도중 문제가 발생하였습니다:" key-unregistered: "키가 등록되어 있지 않습니다" + use-password-less-login: "비밀번호 없는 로그인 사용" common/views/components/media-image.vue: sensitive: "열람주의" click-to-show: "클릭하여 보기" @@ -1034,6 +1048,9 @@ common/views/components/drive-settings.vue: max: "최대 용량" in-use: "사용중" stats: "통계" + default-upload-folder: "기본 업로드 폴더 위치" + default-upload-folder-name: "폴더" + change-default-upload-folder: "폴더 변경" common/views/components/mute-and-block.vue: mute-and-block: "뮤트 및 차단" mute: "뮤트" @@ -1716,6 +1733,7 @@ deck/deck.user-column.vue: activity: "활동" timeline: "타임라인" pinned-notes: "고정해놓은 글" + pinned-page: "고정해놓은 페이지" docs: edit-this-page-on-github: "틀린 점이나 개선할 점을 찾으셨나요?" edit-this-page-on-github-link: "이 페이지를 GitHub에서 편집" @@ -1750,6 +1768,8 @@ pages: are-you-sure-delete: "이 페이지를 삭제하시겠습니까?" page-deleted: "페이지가 삭제되었습니다" edit-this-page: "이 페이지를 편집" + pin-this-page: "프로필에 고정" + unpin-this-page: "프로필에서 고정 해제" view-source: "소스 보기" view-page: "페이지 보기" like: "좋아요" @@ -1768,6 +1788,7 @@ pages: url: "페이지 URL" summary: "페이지 요약" align-center: "가운데 정렬" + hide-title-when-pinned: "프로필에 고정해놓은 경우 타이틀을 표시하지 않음" font: "글꼴" fontSerif: "세리프" fontSansSerif: "산 세리프" @@ -1821,12 +1842,19 @@ pages: inc: "증가치" _button: text: "제목" + colored: "색상" action: "버튼을 눌렀을 때의 동작" _action: dialog: "대화상자를 표시" _dialog: content: "내용" resetRandom: "난수를 초기화" + pushEvent: "이벤트 보내기" + _pushEvent: + event: "이벤트 이름" + message: "눌렀을 때 표시할 메시지" + variable: "보낼 변수" + no-variable: "없음" script: categories: flow: "흐름 제어" diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index 355b3cb682..eb2e5ded1c 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -260,7 +260,6 @@ desktop/views/components/drive.file.vue: rename: "Naam wijzigen" copy-url: "URL kopiëren" download: "Downloaden" - else-files: "Overig" set-as-avatar: "Instellen als gebruikersafbeelding" set-as-banner: "Instellen als omslagfoto" open-in-app: "Openen in app" @@ -377,6 +376,7 @@ common/views/components/api-settings.vue: common/views/components/drive-settings.vue: in-use: "gebruikt" stats: "Statistieken" + default-upload-folder-name: "Map(pen)" desktop/views/components/sub-note-content.vue: private: "(dit bericht is privé)" poll: "Peilingen" @@ -606,6 +606,7 @@ docs: edit-this-page-on-github: "Heb je een fout ontdekt of wil je bijdragen aan de documentatie? " edit-this-page-on-github-link: "Bewerk deze pagina op GitHub!" pages: + pin-this-page: "Vastmaken aan profielpagina" like: "Leuk" blocks: image: "Afbeeldingen" diff --git a/locales/no-NO.yml b/locales/no-NO.yml index 296c0cccab..7935b38cd6 100644 --- a/locales/no-NO.yml +++ b/locales/no-NO.yml @@ -286,6 +286,7 @@ common/views/components/api-settings.vue: common/views/components/drive-settings.vue: in-use: "brukt" stats: "Statistikk" + default-upload-folder-name: "Mappe(r)" common/views/components/mute-and-block.vue: save: "Lagre" desktop/views/components/settings.tags.vue: @@ -484,6 +485,7 @@ deck/deck.user-column.vue: followers: "Følgere" images: "Bilder" pages: + pin-this-page: "Fest til profilen din" like: "Lik" blocks: image: "Bilder" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index 891dd07274..e86ad9b112 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -414,6 +414,8 @@ common/views/components/emoji-picker.vue: objects: "Rzeczy" symbols: "Symbole" flags: "Flagi" +common/views/components/settings/app-type.vue: + info: "Musisz odświeżyć stronę, aby zmiany zostały uwzględnione." common/views/components/signin.vue: username: "Nazwa użytkownika" password: "Hasło" @@ -666,6 +668,7 @@ desktop/views/components/drive.folder.vue: rename: "Zmień nazwę" rename-folder: "Zmień nazwę katalogu" input-new-folder-name: "Wprowadź nową nazwę" + else-folders: "Inne" desktop/views/components/drive.vue: search: "Szukaj" empty-draghover: "Przeciągnij tutaj!" @@ -785,6 +788,7 @@ common/views/components/drive-settings.vue: max: "Max" in-use: "użyto" stats: "Statystyki" + default-upload-folder-name: "Katalog(i)" common/views/components/mute-and-block.vue: mute-and-block: "Wycisz / Zablokuj" mute: "Wycisz" @@ -1189,6 +1193,8 @@ dev/views/new-app.vue: app-name: "Nazwa Aplikacji" authority: "Uprawnienia" pages: + pin-this-page: "Przypnij do profilu" + unpin-this-page: "Odepnij" like: "Lubię" title: "Tytuł" blocks: diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 01450b956b..d7756f5ae8 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -28,6 +28,7 @@ common: enter-password: "Пожалуйста, введите ваш пароль" 2fa: "Двухфакторная аутентификация" customize-home: "Настройка домашней страницы" + featured-notes: "Рекомендуемые" dark-mode: "Тёмная тема" signin: "Войти" signup: "Регистрация" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index b8c073200e..ae09729487 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -591,6 +591,8 @@ common/views/components/emoji-picker.vue: objects: "物品" symbols: "符号" flags: "旗帜" +common/views/components/settings/app-type.vue: + info: "更改将在刷新页面后生效。" common/views/components/signin.vue: username: "用户名" password: "密码" @@ -873,7 +875,7 @@ desktop/views/components/drive.file.vue: unmark-as-sensitive: "取消标记为“敏感”" copy-url: "复制链接" download: "下载" - else-files: "其他..." + else-files: "其他" set-as-avatar: "设置为头像" set-as-banner: "设置为背景" open-in-app: "在应用程序中打开" @@ -892,6 +894,7 @@ desktop/views/components/drive.folder.vue: rename: "重命名" rename-folder: "重命名文件夹" input-new-folder-name: "请输入新文件名" + else-folders: "其他" desktop/views/components/drive.vue: search: "搜索" empty-draghover: "放在这里!因为你知道我很可爱,对吗?" @@ -1021,6 +1024,7 @@ common/views/components/drive-settings.vue: max: "容量" in-use: "已使用" stats: "统计" + default-upload-folder-name: "文件夹" common/views/components/mute-and-block.vue: mute-and-block: "屏蔽/拉黑" mute: "屏蔽" @@ -1734,6 +1738,8 @@ pages: are-you-sure-delete: "是否删除此页面?" page-deleted: "该页面已被删除。" edit-this-page: "编辑此页面" + pin-this-page: "置顶" + unpin-this-page: "取消置顶" view-source: "查看源代码" view-page: "查看页面" like: "赞" diff --git a/migration/1562422242907-PasswordLessLogin.ts b/migration/1562422242907-PasswordLessLogin.ts new file mode 100644 index 0000000000..e789a34334 --- /dev/null +++ b/migration/1562422242907-PasswordLessLogin.ts @@ -0,0 +1,13 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class PasswordLessLogin1562422242907 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "usePasswordLessLogin" boolean DEFAULT false NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "usePasswordLessLogin"`); + } + +} diff --git a/migration/1562444565093-PinnedPage.ts b/migration/1562444565093-PinnedPage.ts new file mode 100644 index 0000000000..4bdee22748 --- /dev/null +++ b/migration/1562444565093-PinnedPage.ts @@ -0,0 +1,17 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class PinnedPage1562444565093 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "pinnedPageId" character varying(32)`); + await queryRunner.query(`ALTER TABLE "user_profile" ADD CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27" UNIQUE ("pinnedPageId")`); + await queryRunner.query(`ALTER TABLE "user_profile" ADD CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27" FOREIGN KEY ("pinnedPageId") REFERENCES "page"("id") ON DELETE SET NULL ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP CONSTRAINT "FK_6dc44f1ceb65b1e72bacef2ca27"`); + await queryRunner.query(`ALTER TABLE "user_profile" DROP CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27"`); + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "pinnedPageId"`); + } + +} diff --git a/migration/1562448332510-PageTitleHideOption.ts b/migration/1562448332510-PageTitleHideOption.ts new file mode 100644 index 0000000000..acc9b7e26f --- /dev/null +++ b/migration/1562448332510-PageTitleHideOption.ts @@ -0,0 +1,13 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class PageTitleHideOption1562448332510 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "page" ADD "hideTitleWhenPinned" boolean NOT NULL DEFAULT false`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "hideTitleWhenPinned"`); + } + +} diff --git a/package.json b/package.json index b113b8f7c3..3a0a73990f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "11.24.2", + "version": "11.25.0", "codename": "daybreak", "repository": { "type": "git", diff --git a/src/client/app/boot.js b/src/client/app/boot.js index 6cb1488e40..583cc4fc8b 100644 --- a/src/client/app/boot.js +++ b/src/client/app/boot.js @@ -84,7 +84,14 @@ // Detect the user agent const ua = navigator.userAgent.toLowerCase(); - const isMobile = /mobile|iphone|ipad|android/.test(ua); + let isMobile = /mobile|iphone|ipad|android/.test(ua) || window.innerWidth < 576; + if (settings && settings.device.appTypeForce) { + if (settings.device.appTypeForce === 'mobile') { + isMobile = true; + } else if (settings.device.appTypeForce === 'desktop') { + isMobile = false; + } + } // Get the element const head = document.getElementsByTagName('head')[0]; diff --git a/src/client/app/common/scripts/post-form.ts b/src/client/app/common/scripts/post-form.ts index 85a578484f..7cf26f65bf 100644 --- a/src/client/app/common/scripts/post-form.ts +++ b/src/client/app/common/scripts/post-form.ts @@ -8,6 +8,7 @@ import { host, url } from '../../config'; import i18n from '../../i18n'; import { erase, unique } from '../../../../prelude/array'; import extractMentions from '../../../../misc/extract-mentions'; +import { formatTimeString } from '../../../../misc/format-time-string'; export default (opts) => ({ i18n: i18n(), @@ -151,9 +152,16 @@ export default (opts) => ({ // 公開以外へのリプライ時は元の公開範囲を引き継ぐ if (this.reply && ['home', 'followers', 'specified'].includes(this.reply.visibility)) { this.visibility = this.reply.visibility; + if (this.reply.visibility === 'specified') { + this.$root.api('users/show', { + userIds: this.reply.visibleUserIds.filter(uid => uid !== this.$store.state.i.id && uid !== this.reply.userId) + }).then(users => { + this.visibleUsers.push(...users); + }); + } } - if (this.reply) { + if (this.reply && this.reply.userId !== this.$store.state.i.id) { this.$root.api('users/show', { userId: this.reply.userId }).then(user => { this.visibleUsers.push(user); }); @@ -237,8 +245,8 @@ export default (opts) => ({ for (const x of Array.from((this.$refs.file as any).files)) this.upload(x); }, - upload(file) { - (this.$refs.uploader as any).upload(file); + upload(file: File, name?: string) { + (this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder, name); }, onChangeUploadings(uploads) { @@ -327,10 +335,23 @@ export default (opts) => ({ if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey) && this.canPost) this.post(); }, - async onPaste(e) { - for (const item of Array.from(e.clipboardData.items)) { + async onPaste(e: ClipboardEvent) { + for (const { item, i } of Array.from(e.clipboardData.items).map((item, i) => ({item, i}))) { if (item.kind == 'file') { - this.upload(item.getAsFile()); + const file = item.getAsFile(); + const lio = file.name.lastIndexOf('.'); + const ext = lio >= 0 ? file.name.slice(lio) : ''; + const formatted = `${formatTimeString(new Date(file.lastModified), this.$store.state.settings.pastedFileName).replace(/{{number}}/g, `${i + 1}`)}${ext}`; + const name = this.$store.state.settings.pasteDialog + ? await this.$root.dialog({ + title: this.$t('@.post-form.enter-file-name'), + input: { + default: formatted + }, + allowEmpty: false + }).then(({ canceled, result }) => canceled ? false : result) + : formatted; + if (name) this.upload(file, name); } } diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue index 3f481e8eb5..a7c918aa71 100644 --- a/src/client/app/common/views/components/games/reversi/reversi.game.vue +++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue @@ -5,17 +5,17 @@

- +

- +

{{ $t('@.reversi.opponent-turn') }}

{{ $t('@.reversi.my-turn') }}

diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue index 1dfb0589e4..bd63bab2c1 100644 --- a/src/client/app/common/views/components/messaging-room.form.vue +++ b/src/client/app/common/views/components/messaging-room.form.vue @@ -30,6 +30,7 @@ import Vue from 'vue'; import i18n from '../../../i18n'; import * as autosize from 'autosize'; +import { formatTimeString } from '../../../../../misc/format-time-string'; export default Vue.extend({ i18n: i18n('common/views/components/messaging-room.form.vue'), @@ -84,13 +85,26 @@ export default Vue.extend({ } }, methods: { - onPaste(e) { + async onPaste(e: ClipboardEvent) { const data = e.clipboardData; const items = data.items; if (items.length == 1) { if (items[0].kind == 'file') { - this.upload(items[0].getAsFile()); + const file = items[0].getAsFile(); + const lio = file.name.lastIndexOf('.'); + const ext = lio >= 0 ? file.name.slice(lio) : ''; + const formatted = `${formatTimeString(new Date(file.lastModified), this.$store.state.settings.pastedFileName).replace(/{{number}}/g, '1')}${ext}`; + const name = this.$store.state.settings.pasteDialog + ? await this.$root.dialog({ + title: this.$t('@.post-form.enter-file-name'), + input: { + default: formatted + }, + allowEmpty: false + }).then(({ canceled, result }) => canceled ? false : result) + : formatted; + if (name) this.upload(file, name); } } else { if (items[0].kind == 'file') { @@ -157,8 +171,8 @@ export default Vue.extend({ this.upload((this.$refs.file as any).files[0]); }, - upload(file) { - (this.$refs.uploader as any).upload(file); + upload(file: File, name?: string) { + (this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder, name); }, onUploaded(file) { diff --git a/src/client/app/common/views/components/mfm.ts b/src/client/app/common/views/components/mfm.ts index fa798504c7..561c3d8e30 100644 --- a/src/client/app/common/views/components/mfm.ts +++ b/src/client/app/common/views/components/mfm.ts @@ -22,11 +22,11 @@ export default Vue.component('misskey-flavored-markdown', { type: String, required: true }, - shouldBreak: { + plain: { type: Boolean, - default: true + default: false }, - plainText: { + nowrap: { type: Boolean, default: false }, @@ -50,7 +50,7 @@ export default Vue.component('misskey-flavored-markdown', { render(createElement) { if (this.text == null || this.text == '') return; - const ast = (this.plainText ? parsePlain : parse)(this.text); + const ast = (this.plain ? parsePlain : parse)(this.text); let bigCount = 0; let motionCount = 0; @@ -60,7 +60,7 @@ export default Vue.component('misskey-flavored-markdown', { case 'text': { const text = token.node.props.text.replace(/(\r\n|\n|\r)/g, '\n'); - if (this.shouldBreak) { + if (!this.plain) { const x = text.split('\n') .map(t => t == '' ? [createElement('br')] : [createElement('span', t), createElement('br')]); x[x.length - 1].pop(); @@ -270,7 +270,7 @@ export default Vue.component('misskey-flavored-markdown', { }, props: { customEmojis: this.customEmojis || customEmojis, - normal: this.plainText + normal: this.plain } })]; } diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.vue b/src/client/app/common/views/components/misskey-flavored-markdown.vue index a0ecbecbb2..64496f9c84 100644 --- a/src/client/app/common/views/components/misskey-flavored-markdown.vue +++ b/src/client/app/common/views/components/misskey-flavored-markdown.vue @@ -1,5 +1,5 @@ diff --git a/src/client/app/common/views/components/settings/drive.vue b/src/client/app/common/views/components/settings/drive.vue index 7bdc806ae7..da028e85ef 100644 --- a/src/client/app/common/views/components/settings/drive.vue +++ b/src/client/app/common/views/components/settings/drive.vue @@ -11,6 +11,12 @@

{{ $t('stats') }}
+ +
+
{{ $t('default-upload-folder') }}
+ {{ $t('default-upload-folder-name') }} + {{ $t('change-default-upload-folder') }} +
@@ -26,7 +32,8 @@ export default Vue.extend({ return { fetching: true, usage: null, - capacity: null + capacity: null, + uploadFolderName: null }; }, @@ -40,10 +47,25 @@ export default Vue.extend({ l: 0.5 }) }; - } + }, + + uploadFolder: { + get() { return this.$store.state.settings.uploadFolder; }, + set(value) { this.$store.dispatch('settings/set', { key: 'uploadFolder', value }); } + }, }, mounted() { + if (this.uploadFolder == null) { + this.uploadFolderName = this.$t('@._settings.root'); + } else { + this.$root.api('drive/folders/show', { + folderId: this.uploadFolder + }).then(folder => { + this.uploadFolderName = folder.name; + }); + } + this.$root.api('drive').then(info => { this.capacity = info.capacity; this.usage = info.usage; @@ -89,6 +111,9 @@ export default Vue.extend({ height: 150, zoom: { enabled: false + }, + toolbar: { + show: false } }, plotOptions: { @@ -152,6 +177,13 @@ export default Vue.extend({ chart.render(); }); + }, + + chooseUploadFolder() { + this.$chooseDriveFolder().then(folder => { + this.uploadFolder = folder ? folder.id : null; + this.uploadFolderName = folder ? folder.name : this.$t('@._settings.root'); + }) } } }); diff --git a/src/client/app/common/views/components/settings/settings.vue b/src/client/app/common/views/components/settings/settings.vue index 1254eb5e5e..281524979e 100644 --- a/src/client/app/common/views/components/settings/settings.vue +++ b/src/client/app/common/views/components/settings/settings.vue @@ -140,7 +140,19 @@
{{ $t('@._settings.web-search-engine') }}
- {{ $t('@._settings.web-search-engine') }} + {{ $t('@._settings.web-search-engine') }} + + +
+ +
+
{{ $t('@._settings.paste') }}
+ {{ $t('@._settings.pasted-file-name') }} + + + {{ $t('@._settings.paste-dialog') }} + +
@@ -163,6 +175,7 @@ + @@ -91,7 +91,7 @@

- +
@@ -105,7 +105,7 @@

- + @@ -118,7 +118,7 @@

- + diff --git a/src/client/app/desktop/views/home/home.vue b/src/client/app/desktop/views/home/home.vue index 3d05bee48d..527c2d52ef 100644 --- a/src/client/app/desktop/views/home/home.vue +++ b/src/client/app/desktop/views/home/home.vue @@ -62,7 +62,7 @@