diff --git a/CHANGELOG.md b/CHANGELOG.md index 72eec9f95c..738a092791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ ChangeLog ========= +12.25.0 (2020/03/24) +------------------- + +### ✨Improvements +* テーマインポート機能を実装 + +### 🐛Fixes +* 誰もフォローしていないときにタイムラインの読み込みが遅い問題を修正 + + 12.24.2 (2020/03/22) ------------------- diff --git a/assets/apple-touch-icon.png b/assets/apple-touch-icon.png index 55f66ccd8e..21c34cede7 100644 Binary files a/assets/apple-touch-icon.png and b/assets/apple-touch-icon.png differ diff --git a/assets/favicon.png b/assets/favicon.png index ca75ac55a0..767004005d 100644 Binary files a/assets/favicon.png and b/assets/favicon.png differ diff --git a/assets/icon.afdesign b/assets/icon.afdesign deleted file mode 100644 index dc02abf733..0000000000 Binary files a/assets/icon.afdesign and /dev/null differ diff --git a/assets/icon.svg b/assets/icon.svg index 7ae5f19da2..ec1c262611 100644 --- a/assets/icon.svg +++ b/assets/icon.svg @@ -1,20 +1,27 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> - <path d="M416,199.998C416,177.908 398.092,160 376.002,160L312.038,160C301.419,160 291.235,164.218 283.727,171.727C276.218,179.235 272,189.419 272,200.038L272,228C272,234.627 277.373,240 284,240L376.002,240C398.092,240 416,222.092 416,200.002L416,199.998Z" style="fill:url(#_Linear1);"/> - <g transform="matrix(6.12323e-17,1,-1,6.12323e-17,512,-4.54747e-13)"> - <path d="M416,199.998C416,177.908 398.092,160 376.002,160L312.038,160C301.419,160 291.235,164.218 283.727,171.727C276.218,179.235 272,189.419 272,200.038L272,228C272,234.627 277.373,240 284,240L376.002,240C398.092,240 416,222.092 416,200.002L416,199.998Z" style="fill:url(#_Linear2);"/> +<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <g transform="matrix(0.413372,0,0,0.469741,64.564,40.5821)"> + <rect x="-156.189" y="-86.393" width="619.297" height="544.981" style="fill:rgb(27,30,31);"/> </g> - <g transform="matrix(-1,1.22465e-16,-1.22465e-16,-1,512,512)"> - <path d="M416,199.998C416,177.908 398.092,160 376.002,160L312.038,160C301.419,160 291.235,164.218 283.727,171.727C276.218,179.235 272,189.419 272,200.038L272,228C272,234.627 277.373,240 284,240L376.002,240C398.092,240 416,222.092 416,200.002L416,199.998Z" style="fill:url(#_Linear3);"/> + <g transform="matrix(0.898356,0,0,0.898356,-130.722,-120.968)"> + <g transform="matrix(0.5,0.866025,-0.866025,0.5,288,-166.277)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,-96,166.277)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:rgb(150,208,74);"/> + </g> + <g transform="matrix(0.5,-0.866025,0.866025,0.5,-96,498.831)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,-95.9902,55.4086)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:white;"/> + </g> + <g transform="matrix(0.5,-0.866025,0.866025,0.5,-2.64322e-11,554.256)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:white;"/> + </g> + <g transform="matrix(0.5,0.866025,-0.866025,0.5,192,-110.851)"> + <path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:white;"/> + </g> </g> - <g transform="matrix(6.12323e-17,-1,1,6.12323e-17,0,512)"> - <path d="M416,199.998C416,177.908 398.092,160 376.002,160L312.038,160C301.419,160 291.235,164.218 283.727,171.727C276.218,179.235 272,189.419 272,200.038L272,228C272,234.627 277.373,240 284,240L376.002,240C398.092,240 416,222.092 416,200.002L416,199.998Z" style="fill:url(#_Linear4);"/> - </g> - <defs> - <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(144,0,0,80,272,200)"><stop offset="0" style="stop-color:rgb(198,230,111);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(90,200,113);stop-opacity:1"/></linearGradient> - <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(144,0,0,80,272,200)"><stop offset="0" style="stop-color:rgb(97,232,195);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(90,200,113);stop-opacity:1"/></linearGradient> - <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(144,0,0,80,272,200)"><stop offset="0" style="stop-color:rgb(198,230,111);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(90,200,113);stop-opacity:1"/></linearGradient> - <linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(144,0,0,80,272,200)"><stop offset="0" style="stop-color:rgb(98,232,195);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(90,200,113);stop-opacity:1"/></linearGradient> - </defs> </svg> diff --git a/assets/icons/192.png b/assets/icons/192.png index 44353b6404..a100ae044f 100644 Binary files a/assets/icons/192.png and b/assets/icons/192.png differ diff --git a/assets/icons/512.png b/assets/icons/512.png index f7fcef7d60..b0feb8157a 100644 Binary files a/assets/icons/512.png and b/assets/icons/512.png differ diff --git a/locales/en-US.yml b/locales/en-US.yml index d5a751004b..4c2ea21beb 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -18,7 +18,7 @@ instance: "Instance" settings: "Settings" profile: "Profile" timeline: "Timeline" -noAccountDescription: "This user has not created their bio yet." +noAccountDescription: "This user has not written their bio yet." login: "Sign In" loggingIn: "Signing In" logout: "Sign Out" @@ -257,7 +257,7 @@ rename: "Rename" avatar: "Avatar" banner: "Banner" nsfw: "NSFW" -disconnectedFromServer: "Connection to the server was inturrupted" +disconnectedFromServer: "Connection to the server was interrupted." reload: "Refresh" doNothing: "Ignore" reloadConfirm: "Would you like to retry?" @@ -331,7 +331,7 @@ userList: "Lists" about: "About" aboutMisskey: "About Misskey" aboutMisskeyText: "Misskey is an open-source software developed by syuilo since 2014." -misskeyMembers: "It is currently developed an maintained by the members listed below:" +misskeyMembers: "It is currently developed and maintained by the members listed below:" misskeySource: "Source code is available here:" misskeyTranslation: "Help us with your contribution to translate Misskey:" misskeyDonate: "Help us to keep improving the software by donating here:" @@ -352,10 +352,10 @@ resetPassword: "Reset password" newPasswordIs: "The new password is \"{password}\"" post: "Post" posted: "Posted!" -autoReloadWhenDisconnected: "Auto reload when disconnected with server" +autoReloadWhenDisconnected: "Auto reload when disconnected from server" autoNoteWatch: "Watch note automatically" autoNoteWatchDescription: "Get notified about the notes which you reactioned or replied." -reduceUiAnimation: "Reduce animations of User Interface" +reduceUiAnimation: "Reduce UI animation" share: "Share" notFound: "Not found" notFoundDescription: "There was no page corresponding to the specified URL." @@ -411,11 +411,11 @@ or: "Or" uiLanguage: "UI display language" groupInvited: "Invited to group" aboutX: "About {x}" -useOsNativeEmojis: "Use the OS native Emojis" +useOsNativeEmojis: "Use OS native Emojis" youHaveNoGroups: "You have no groups" joinOrCreateGroup: "Get invited to join the groups or you can create your own group." noHistory: "No history items" -disableAnimatedMfm: "Disable MFM which has animations" +disableAnimatedMfm: "Disable MFM with animation" doing: "On my way" category: "Category" tags: "Tags" @@ -466,6 +466,16 @@ details: "Details" chooseEmoji: "Choose an emoji" unableToProcess: "The operation could not be completed." recentUsed: "Recently used" +install: "Install" +uninstall: "Uninstall" +_theme: + explore: "Explore Themes" + install: "Install theme" + manage: "Themes manager" + code: "Theme code" + installed: "{name} has been installed" + alreadyInstalled: "The theme is already installed" + invalid: "Theme format is invalid" _sfx: note: "New note" noteMy: "My note" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 7dcb73222b..d9d52e7f1c 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -466,6 +466,16 @@ details: "Detalles" chooseEmoji: "Elije un emoji" unableToProcess: "La operación no se puede llevar a cabo" recentUsed: "Usado recientemente" +install: "Instalación" +uninstall: "Desinstalar" +_theme: + explore: "Explorar temas" + install: "Instalar tema" + manage: "Gestor de temas" + code: "Código del tema" + installed: "{name} ha sido instalado" + alreadyInstalled: "Este tema ya está instalado" + invalid: "El formato del tema no es válido" _sfx: note: "Notas" noteMy: "Nota (a mí mismo)" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index b527cbd602..080026afca 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -466,6 +466,16 @@ details: "Détails" chooseEmoji: "Choisissez des emojis" unableToProcess: "L'opération n'a pas pu être complétée" recentUsed: "Récemment utilisé" +install: "Installation" +uninstall: "Désinstaller" +_theme: + explore: "Explorer les thèmes" + install: "Installer un thème" + manage: "Gestion des thèmes" + code: "Code du thème" + installed: "{name} a été installé" + alreadyInstalled: "Ce thème est déjà installé" + invalid: "Le format du thème n'est pas valide" _sfx: note: "Nouvelle note" noteMy: "Ma note" diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 185764c443..6a9a6d2f63 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -466,6 +466,16 @@ details: "자세히" chooseEmoji: "이모지 선택" unableToProcess: "작업을 완료할 수 없습니다" recentUsed: "최근 사용" +install: "설치" +uninstall: "삭제" +_theme: + explore: "테마 찾아보기" + install: "테마 설치" + manage: "테마 관리" + code: "테마 코드" + installed: "{name} 테마가 설치되었습니다" + alreadyInstalled: "이미 설치된 테마입니다" + invalid: "테마 형식이 올바르지 않습니다" _sfx: note: "새 노트" noteMy: "내 노트" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index a484a1c8a2..cd42bd7c8b 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -466,6 +466,16 @@ details: "详情" chooseEmoji: "选择表情符号" unableToProcess: "操作无法完成" recentUsed: "最近使用" +install: "安装" +uninstall: "卸载" +_theme: + explore: "寻找主题" + install: "安装主题" + manage: "主题管理" + code: "主题代码" + installed: "{name} 已安装" + alreadyInstalled: "此主题已经安装" + invalid: "主题格式错误" _sfx: note: "帖子" noteMy: "我的笔记" diff --git a/package.json b/package.json index 86d5ab202a..fb61e000f0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo <syuilotan@yahoo.co.jp>", - "version": "12.25.0", + "version": "12.26.0", "codename": "indigo", "repository": { "type": "git", diff --git a/src/client/app.vue b/src/client/app.vue index 650ebbd2b4..99268e42bf 100644 --- a/src/client/app.vue +++ b/src/client/app.vue @@ -895,24 +895,25 @@ export default Vue.extend({ color: var(--navActive); } - &:first-child { + &:first-child, &:last-child { position: sticky; z-index: 1; - top: 0; padding-top: 8px; padding-bottom: 8px; + background: var(--wboyroyc); + -webkit-backdrop-filter: blur(8px); + backdrop-filter: blur(8px); + } + + &:first-child { + top: 0; margin-bottom: 16px; - background: var(--navBg); border-bottom: solid 1px var(--divider); } &:last-child { - position: sticky; bottom: 0; - padding-top: 8px; - padding-bottom: 8px; margin-top: 16px; - background: var(--navBg); border-top: solid 1px var(--divider); } diff --git a/src/client/components/signup.vue b/src/client/components/signup.vue index 34765a7a26..9f3ae8db28 100644 --- a/src/client/components/signup.vue +++ b/src/client/components/signup.vue @@ -38,7 +38,7 @@ </mk-input> <mk-switch v-model="ToSAgreement" v-if="meta.tosUrl"> <i18n path="agreeTo"> - <a :href="meta.tosUrl" target="_blank">{{ $t('tos') }}</a> + <a :href="meta.tosUrl" class="_link" target="_blank">{{ $t('tos') }}</a> </i18n> </mk-switch> <div v-if="meta.enableRecaptcha" class="g-recaptcha" :data-sitekey="meta.recaptchaSiteKey" style="margin: 16px 0;"></div> diff --git a/src/client/init.ts b/src/client/init.ts index b9c6aedae4..1fcd97190d 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -145,6 +145,12 @@ os.init(async () => { } }, false) + os.store.watch(state => state.device.darkMode, darkMode => { + // TODO: このファイルでbuiltinThemesを参照するとcode splittingが効かず、初回読み込み時に全てのテーマコードを読み込むことになってしまい無駄なので何とかする + const themes = builtinThemes.concat(os.store.state.device.themes); + applyTheme(themes.find(x => x.id === (darkMode ? os.store.state.device.darkTheme : os.store.state.device.lightTheme))); + }); + //#region Sync dark mode if (os.store.state.device.syncDeviceDarkMode) { os.store.commit('device/set', { key: 'darkMode', value: isDeviceDarkmode() }); @@ -176,13 +182,6 @@ os.init(async () => { isMobile: isMobile }; }, - watch: { - '$store.state.device.darkMode'() { - // TODO: このファイルでbuiltinThemesを参照するとcode splittingが効かず、初回読み込み時に全てのテーマコードを読み込むことになってしまい無駄なので何とかする - const themes = builtinThemes.concat(this.$store.state.device.themes); - applyTheme(themes.find(x => x.id === (this.$store.state.device.darkMode ? this.$store.state.device.darkTheme : this.$store.state.device.lightTheme))); - } - }, methods: { api: os.api, signout: os.signout, diff --git a/src/client/pages/about-misskey.vue b/src/client/pages/about-misskey.vue index 6b853d9e4a..84cd5d5e9c 100644 --- a/src/client/pages/about-misskey.vue +++ b/src/client/pages/about-misskey.vue @@ -1,9 +1,14 @@ <template> <div class="znqjceqz"> - <portal to="title">🍀 {{ $t('aboutMisskey') }}</portal> + <portal to="title">{{ $t('aboutMisskey') }}</portal> <section class="_card"> - <div class="_title">🍀 {{ $t('aboutMisskey') }}</div> + <div class="_title">{{ $t('aboutMisskey') }}</div> + <div class="_content" style="text-align: center;"> + <img src="/assets/icons/512.png" alt="" style="display: block; width: 100px; margin: 0 auto; border-radius: 16px;"/> + <div style="margin-top: 0.75em;">Misskey</div> + <div style="opacity: 0.5;">v{{ version }}</div> + </div> <div class="_content"> <div style="margin-bottom: 1em;">{{ $t('aboutMisskeyText') }}</div> <div>🛠️ {{ $t('misskeyMembers') }}</div> @@ -44,6 +49,9 @@ <li>wara</li> <li>Takashi Shibuya</li> <li>Noizeman</li> + <li>mydarkstar</li> + <li>nenohi</li> + <li>Eduardo Quiros</li> </ul> <span>{{ $t('morePatrons') }}</span> </div> diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue index 2341c51988..db9e625e4c 100644 --- a/src/client/pages/instance/users.vue +++ b/src/client/pages/instance/users.vue @@ -64,6 +64,9 @@ export default Vue.extend({ pagination: { endpoint: 'admin/show-users', limit: 10, + params: () => ({ + sort: '+createdAt' + }), offsetMode: true }, target: '', diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5 index bc7c0efc09..b059d53be2 100644 --- a/src/client/themes/_dark.json5 +++ b/src/client/themes/_dark.json5 @@ -65,5 +65,6 @@ aupeazdm: 'rgba(0, 0, 0, 0.3)', jvhmlskx: 'rgba(255, 255, 255, 0.1)', yakfpmhl: 'rgba(255, 255, 255, 0.15)', + wboyroyc: ':alpha<0.5<@navBg', }, } diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5 index adb1280420..dea1b335c1 100644 --- a/src/client/themes/_light.json5 +++ b/src/client/themes/_light.json5 @@ -65,5 +65,6 @@ aupeazdm: 'rgba(0, 0, 0, 0.1)', jvhmlskx: 'rgba(0, 0, 0, 0.1)', yakfpmhl: 'rgba(0, 0, 0, 0.15)', + wboyroyc: ':alpha<0.5<@navBg', }, }