diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2023-01-25 14:22:26 +0000 |
|---|---|---|
| committer | tamaina <tamaina@hotmail.co.jp> | 2023-01-25 14:22:26 +0000 |
| commit | 605b0f27e4cfe95dfa5201b0dbf07a5dbcc8e806 (patch) | |
| tree | 5e79388ef2a7b7a76be56d897b3590ce2d1a88dd /packages/frontend | |
| parent | fix (diff) | |
| parent | :art: (diff) | |
| download | misskey-605b0f27e4cfe95dfa5201b0dbf07a5dbcc8e806.tar.gz misskey-605b0f27e4cfe95dfa5201b0dbf07a5dbcc8e806.tar.bz2 misskey-605b0f27e4cfe95dfa5201b0dbf07a5dbcc8e806.zip | |
Merge branch 'develop' into emoji-re
Diffstat (limited to 'packages/frontend')
18 files changed, 102 insertions, 35 deletions
diff --git a/packages/frontend/package.json b/packages/frontend/package.json index cdfa96ea82..da568a9eac 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -12,7 +12,7 @@ "@rollup/plugin-json": "6.0.0", "@rollup/pluginutils": "5.0.2", "@syuilo/aiscript": "0.12.2", - "@tabler/icons": "^1.118.0", + "@tabler/icons-webfont": "^2.0.0", "@vitejs/plugin-vue": "4.0.0", "@vue/compiler-sfc": "3.2.45", "autobind-decorator": "2.4.0", @@ -82,15 +82,15 @@ "@types/uuid": "9.0.0", "@types/websocket": "1.0.5", "@types/ws": "8.5.4", - "@typescript-eslint/eslint-plugin": "5.48.2", - "@typescript-eslint/parser": "5.48.2", + "@typescript-eslint/eslint-plugin": "5.49.0", + "@typescript-eslint/parser": "5.49.0", "@vue/runtime-core": "3.2.45", "cross-env": "7.0.3", "cypress": "12.3.0", "eslint": "8.32.0", "eslint-plugin-import": "2.27.5", "eslint-plugin-vue": "9.9.0", - "start-server-and-test": "1.15.2", + "start-server-and-test": "1.15.3", "vue-eslint-parser": "^9.1.0", "vue-tsc": "^1.0.24" } diff --git a/packages/frontend/src/components/MkAchievements.vue b/packages/frontend/src/components/MkAchievements.vue index 64fea96354..19d04721d8 100644 --- a/packages/frontend/src/components/MkAchievements.vue +++ b/packages/frontend/src/components/MkAchievements.vue @@ -16,8 +16,8 @@ <time v-tooltip="new Date(achievement.unlockedAt).toLocaleString()">{{ new Date(achievement.unlockedAt).getFullYear() }}/{{ new Date(achievement.unlockedAt).getMonth() + 1 }}/{{ new Date(achievement.unlockedAt).getDate() }}</time> </span> </div> - <div :class="$style.description">{{ i18n.ts._achievements._types['_' + achievement.name].description }}</div> - <div v-if="i18n.ts._achievements._types['_' + achievement.name].flavor" :class="$style.flavor">{{ i18n.ts._achievements._types['_' + achievement.name].flavor }}</div> + <div :class="$style.description">{{ withDescription ? i18n.ts._achievements._types['_' + achievement.name].description : '???' }}</div> + <div v-if="i18n.ts._achievements._types['_' + achievement.name].flavor && withDescription" :class="$style.flavor">{{ i18n.ts._achievements._types['_' + achievement.name].flavor }}</div> </div> </div> <template v-if="withLocked"> @@ -49,8 +49,10 @@ import { ACHIEVEMENT_TYPES, ACHIEVEMENT_BADGES, claimAchievement } from '@/scrip const props = withDefaults(defineProps<{ user: misskey.entities.User; withLocked: boolean; + withDescription: boolean; }>(), { withLocked: true, + withDescription: true, }); let achievements = $ref(); diff --git a/packages/frontend/src/components/MkMenu.vue b/packages/frontend/src/components/MkMenu.vue index 94dabcac90..eee77a9475 100644 --- a/packages/frontend/src/components/MkMenu.vue +++ b/packages/frontend/src/components/MkMenu.vue @@ -335,8 +335,7 @@ onBeforeUnmount(() => { } .icon { - margin-right: 5px; - width: 20px; + margin-right: 8px; } .caret { diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue index e992495a78..a8b8fec346 100644 --- a/packages/frontend/src/components/MkNotification.vue +++ b/packages/frontend/src/components/MkNotification.vue @@ -15,7 +15,7 @@ <i v-else-if="notification.type === 'mention'" class="ti ti-at"></i> <i v-else-if="notification.type === 'quote'" class="ti ti-quote"></i> <i v-else-if="notification.type === 'pollEnded'" class="ti ti-chart-arrows"></i> - <i v-else-if="notification.type === 'achievementEarned'" class="ti ti-military-award"></i> + <i v-else-if="notification.type === 'achievementEarned'" class="ti ti-medal"></i> <!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 --> <MkReactionIcon v-else-if="notification.type === 'reaction'" @@ -249,7 +249,7 @@ useTooltip(reactionRef, (showing) => { .t_achievementEarned { padding: 3px; - background: #88a6b7; + background: #cb9a11; pointer-events: none; } diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index ec4042d18c..eed6b46594 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -21,6 +21,7 @@ import { useTooltip } from '@/scripts/use-tooltip'; import { $i } from '@/account'; import MkReactionEffect from '@/components/MkReactionEffect.vue'; import { claimAchievement } from '@/scripts/achievements'; +import { defaultStore } from '@/store'; const props = defineProps<{ reaction: string; @@ -61,6 +62,7 @@ const toggleReaction = () => { const anime = () => { if (document.hidden) return; + if (!defaultStore.state.animation) return; const rect = buttonEl.value.getBoundingClientRect(); const x = rect.left + 16; diff --git a/packages/frontend/src/components/MkSuperMenu.vue b/packages/frontend/src/components/MkSuperMenu.vue index bb2a789b3f..5d33ad0ad3 100644 --- a/packages/frontend/src/components/MkSuperMenu.vue +++ b/packages/frontend/src/components/MkSuperMenu.vue @@ -6,15 +6,15 @@ <div class="items"> <template v-for="(item, i) in group.items"> <a v-if="item.type === 'a'" :href="item.href" :target="item.target" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> - <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> + <span v-if="item.icon" class="icon"><i :class="item.icon" class="ti-fw"></i></span> <span class="text">{{ item.text }}</span> </a> <button v-else-if="item.type === 'button'" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="ev => item.action(ev)"> - <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> + <span v-if="item.icon" class="icon"><i :class="item.icon" class="ti-fw"></i></span> <span class="text">{{ item.text }}</span> </button> <MkA v-else :to="item.to" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }"> - <i v-if="item.icon" class="icon ti-fw" :class="item.icon"></i> + <span v-if="item.icon" class="icon"><i :class="item.icon" class="ti-fw"></i></span> <span class="text">{{ item.text }}</span> </MkA> </template> diff --git a/packages/frontend/src/components/global/MkEmoji.vue b/packages/frontend/src/components/global/MkEmoji.vue index c489ab5fa1..b554d5e47c 100644 --- a/packages/frontend/src/components/global/MkEmoji.vue +++ b/packages/frontend/src/components/global/MkEmoji.vue @@ -33,7 +33,7 @@ const url = computed(() => { return char2path(char.value); } else if (props.host == null && !customEmojiName.value.includes('@')) { const found = customEmojis.value.find(x => x.name === customEmojiName.value); - return found ? found.url : null; + return found ? defaultStore.state.disableShowingAnimatedImages ? getStaticImageUrl(found.url) : found.url : null; } else { const rawUrl = props.host ? `/emoji/${customEmojiName.value}@${props.host}.webp` : `/emoji/${customEmojiName.value}.webp`; return defaultStore.state.disableShowingAnimatedImages diff --git a/packages/frontend/src/components/mfm.ts b/packages/frontend/src/components/mfm.ts index 91875de9cf..b9ed9002ac 100644 --- a/packages/frontend/src/components/mfm.ts +++ b/packages/frontend/src/components/mfm.ts @@ -190,19 +190,19 @@ export default defineComponent({ return h(MkSparkle, {}, genEl(token.children)); } case 'rotate': { - const degrees = parseInt(token.props.args.deg) ?? '90'; + const degrees = parseFloat(token.props.args.deg) ?? '90'; style = `transform: rotate(${degrees}deg); transform-origin: center center;`; break; } case 'position': { - const x = parseInt(token.props.args.x ?? '0'); - const y = parseInt(token.props.args.y ?? '0'); + const x = parseFloat(token.props.args.x ?? '0'); + const y = parseFloat(token.props.args.y ?? '0'); style = `transform: translateX(${x}em) translateY(${y}em);`; break; } case 'scale': { - const x = Math.min(parseInt(token.props.args.x ?? '1'), 5); - const y = Math.min(parseInt(token.props.args.y ?? '1'), 5); + const x = Math.min(parseFloat(token.props.args.x ?? '1'), 5); + const y = Math.min(parseFloat(token.props.args.y ?? '1'), 5); style = `transform: scale(${x}, ${y});`; break; } diff --git a/packages/frontend/src/navbar.ts b/packages/frontend/src/navbar.ts index 3d16a52e62..4f809d888e 100644 --- a/packages/frontend/src/navbar.ts +++ b/packages/frontend/src/navbar.ts @@ -105,7 +105,7 @@ export const navbarItemDef = reactive({ }, achievements: { title: i18n.ts.achievements, - icon: 'ti ti-military-award', + icon: 'ti ti-medal', show: computed(() => $i != null), to: '/my/achievements', }, diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue index 82f4e30a45..bc63d7159a 100644 --- a/packages/frontend/src/pages/about-misskey.vue +++ b/packages/frontend/src/pages/about-misskey.vue @@ -40,11 +40,31 @@ </FormSection> <FormSection> <template #label>{{ i18n.ts._aboutMisskey.contributors }}</template> - <div class="_formLinksGrid"> - <FormLink to="https://github.com/syuilo" external>@syuilo</FormLink> - <FormLink to="https://github.com/tamaina" external>@tamaina</FormLink> - <FormLink to="https://github.com/acid-chicken" external>@acid-chicken</FormLink> - <FormLink to="https://github.com/rinsuki" external>@rinsuki</FormLink> + <div :class="$style.contributors"> + <a href="https://github.com/syuilo" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/4439005?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@syuilo</span> + </a> + <a href="https://github.com/tamaina" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/7973572?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@tamaina</span> + </a> + <a href="https://github.com/acid-chicken" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/20679825?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@acid-chicken</span> + </a> + <a href="https://github.com/rinsuki" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/6533808?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@rinsuki</span> + </a> + <a href="https://github.com/mei23" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/30769358?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@mei23</span> + </a> + <a href="https://github.com/robflop" target="_blank" :class="$style.contributor"> + <img src="https://avatars.githubusercontent.com/u/8159402?v=4" :class="$style.contributorAvatar"> + <span :class="$style.contributorUsername">@robflop</span> + </a> </div> <template #caption><MkLink url="https://github.com/misskey-dev/misskey/graphs/contributors">{{ i18n.ts._aboutMisskey.allContributors }}</MkLink></template> </FormSection> @@ -295,3 +315,38 @@ definePageMetadata({ } } </style> + +<style lang="scss" module> +.contributors { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + grid-gap: 12px; +} + +.contributor { + display: flex; + align-items: center; + padding: 12px; + background: var(--buttonBg); + border-radius: 6px; + + &:hover { + text-decoration: none; + background: var(--buttonHoverBg); + } + + &.active { + color: var(--accent); + background: var(--buttonHoverBg); + } +} + +.contributorAvatar { + width: 30px; + border-radius: 100%; +} + +.contributorUsername { + margin-left: 12px; +} +</style> diff --git a/packages/frontend/src/pages/achievements.vue b/packages/frontend/src/pages/achievements.vue index 14b8520696..effa2fcaf4 100644 --- a/packages/frontend/src/pages/achievements.vue +++ b/packages/frontend/src/pages/achievements.vue @@ -45,7 +45,7 @@ onDeactivated(() => { definePageMetadata({ title: i18n.ts.achievements, - icon: 'ti ti-military-award', + icon: 'ti ti-medal', }); </script> diff --git a/packages/frontend/src/pages/admin/object-storage.vue b/packages/frontend/src/pages/admin/object-storage.vue index 54d7e09532..6a6af637ed 100644 --- a/packages/frontend/src/pages/admin/object-storage.vue +++ b/packages/frontend/src/pages/admin/object-storage.vue @@ -38,7 +38,7 @@ <template #label>Access key</template> </MkInput> - <MkInput v-model="objectStorageSecretKey"> + <MkInput v-model="objectStorageSecretKey" type="password"> <template #prefix><i class="ti ti-key"></i></template> <template #label>Secret key</template> </MkInput> diff --git a/packages/frontend/src/pages/emojis.emoji.vue b/packages/frontend/src/pages/emojis.emoji.vue index fb3bce570c..0edc290801 100644 --- a/packages/frontend/src/pages/emojis.emoji.vue +++ b/packages/frontend/src/pages/emojis.emoji.vue @@ -1,6 +1,6 @@ <template> <button class="zuvgdzyu _button" @click="menu"> - <img :src="`/emoji/${emoji.name}.webp`" class="img" loading="lazy"/> + <img :src="emoji.url" class="img" loading="lazy"/> <div class="body"> <div class="name _monospace">{{ emoji.name }}</div> <div class="info">{{ emoji.aliases.join(' ') }}</div> @@ -15,7 +15,12 @@ import copyToClipboard from '@/scripts/copy-to-clipboard'; import { i18n } from '@/i18n'; const props = defineProps<{ - emoji: Record<string, unknown>; // TODO + emoji: { + name: string; + aliases: string[]; + category: string; + url: string; + }; }>(); function menu(ev) { diff --git a/packages/frontend/src/pages/user/achievements.vue b/packages/frontend/src/pages/user/achievements.vue index eaea26db4a..615613b7fc 100644 --- a/packages/frontend/src/pages/user/achievements.vue +++ b/packages/frontend/src/pages/user/achievements.vue @@ -1,6 +1,6 @@ <template> <MkSpacer :content-max="1200"> - <MkAchievements :user="user" :with-locked="false"/> + <MkAchievements :user="user" :with-locked="false" :with-description="$i != null && (props.user.id === $i.id)"/> </MkSpacer> </template> diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue index d63aa3a3a5..120f67d8a5 100644 --- a/packages/frontend/src/pages/user/index.vue +++ b/packages/frontend/src/pages/user/index.vue @@ -81,7 +81,7 @@ const headerTabs = $computed(() => user ? [{ }, ...(user.host == null ? [{ key: 'achievements', title: i18n.ts.achievements, - icon: 'ti ti-military-award', + icon: 'ti ti-medal', }] : []), ...($i && ($i.id === user.id)) || user.publicReactions ? [{ key: 'reactions', title: i18n.ts.reaction, diff --git a/packages/frontend/src/scripts/aiscript/ui.ts b/packages/frontend/src/scripts/aiscript/ui.ts index b1895a5f33..fb73c0b4b7 100644 --- a/packages/frontend/src/scripts/aiscript/ui.ts +++ b/packages/frontend/src/scripts/aiscript/ui.ts @@ -303,7 +303,7 @@ function getButtonOptions(def: values.Value | undefined, call: (fn: values.VFn, if (primary) utils.assertBoolean(primary); const rounded = def.value.get('rounded'); if (rounded) utils.assertBoolean(rounded); - const disabled = button.value.get('disabled'); + const disabled = def.value.get('disabled'); if (disabled) utils.assertBoolean(disabled); return { diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss index 4c6b764357..aa4efe3052 100644 --- a/packages/frontend/src/style.scss +++ b/packages/frontend/src/style.scss @@ -127,11 +127,13 @@ hr { } .ti { - vertical-align: -10%; - line-height: 0.9em; + vertical-align: -40%; + line-height: 1em; &:before { - font-size: 130%; + display: inline-block; + font-size: 165%; + width: 0.74em; } } diff --git a/packages/frontend/vite.config.ts b/packages/frontend/vite.config.ts index 0bf35ec1b4..89b6dbde25 100644 --- a/packages/frontend/vite.config.ts +++ b/packages/frontend/vite.config.ts @@ -54,6 +54,8 @@ export default defineConfig(({ command, mode }) => { '@/': __dirname + '/src/', '/client-assets/': __dirname + '/assets/', '/static-assets/': __dirname + '/../backend/assets/', + '/fluent-emojis/': __dirname + '/../../fluent-emojis/dist/', + '/fluent-emoji/': __dirname + '/../../fluent-emojis/dist/', }, }, |