refactor(client): use setup syntax

This commit is contained in:
syuilo 2022-09-02 00:22:31 +09:00
parent d9ff2dd471
commit 25f4c8688a
3 changed files with 90 additions and 118 deletions

View file

@ -1,8 +1,9 @@
<template> <template>
<div class="vswabwbm" :style="{ zIndex, top: `${y - 64}px`, left: `${x - 64}px` }" :class="{ active }"> <div class="vswabwbm" :style="{ zIndex, top: `${y - 64}px`, left: `${x - 64}px` }">
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> <svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
<circle fill="none" cx="64" cy="64"> <circle fill="none" cx="64" cy="64">
<animate attributeName="r" <animate
attributeName="r"
begin="0s" dur="0.5s" begin="0s" dur="0.5s"
values="4; 32" values="4; 32"
calcMode="spline" calcMode="spline"
@ -10,7 +11,8 @@
keySplines="0.165, 0.84, 0.44, 1" keySplines="0.165, 0.84, 0.44, 1"
repeatCount="1" repeatCount="1"
/> />
<animate attributeName="stroke-width" <animate
attributeName="stroke-width"
begin="0s" dur="0.5s" begin="0s" dur="0.5s"
values="16; 0" values="16; 0"
calcMode="spline" calcMode="spline"
@ -21,7 +23,8 @@
</circle> </circle>
<g fill="none" fill-rule="evenodd"> <g fill="none" fill-rule="evenodd">
<circle v-for="(particle, i) in particles" :key="i" :fill="particle.color"> <circle v-for="(particle, i) in particles" :key="i" :fill="particle.color">
<animate attributeName="r" <animate
attributeName="r"
begin="0s" dur="0.8s" begin="0s" dur="0.8s"
:values="`${particle.size}; 0`" :values="`${particle.size}; 0`"
calcMode="spline" calcMode="spline"
@ -29,7 +32,8 @@
keySplines="0.165, 0.84, 0.44, 1" keySplines="0.165, 0.84, 0.44, 1"
repeatCount="1" repeatCount="1"
/> />
<animate attributeName="cx" <animate
attributeName="cx"
begin="0s" dur="0.8s" begin="0s" dur="0.8s"
:values="`${particle.xA}; ${particle.xB}`" :values="`${particle.xA}; ${particle.xB}`"
calcMode="spline" calcMode="spline"
@ -37,7 +41,8 @@
keySplines="0.3, 0.61, 0.355, 1" keySplines="0.3, 0.61, 0.355, 1"
repeatCount="1" repeatCount="1"
/> />
<animate attributeName="cy" <animate
attributeName="cy"
begin="0s" dur="0.8s" begin="0s" dur="0.8s"
:values="`${particle.yA}; ${particle.yB}`" :values="`${particle.yA}; ${particle.yB}`"
calcMode="spline" calcMode="spline"
@ -51,59 +56,47 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent, onMounted } from 'vue'; import { onMounted } from 'vue';
import * as os from '@/os'; import * as os from '@/os';
export default defineComponent({ const props = withDefaults(defineProps<{
props: { x: number;
x: { y: number;
type: Number, particle?: boolean;
required: true }>(), {
}, particle: true,
y: { });
type: Number,
required: true
},
particle: {
type: Boolean,
required: false,
default: true,
}
},
emits: ['end'],
setup(props, context) {
const particles = [];
const origin = 64;
const colors = ['#FF1493', '#00FFFF', '#FFE202'];
if (props.particle) { const emit = defineEmits<{
for (let i = 0; i < 12; i++) { (ev: 'end'): void;
const angle = Math.random() * (Math.PI * 2); }>();
const pos = Math.random() * 16;
const velocity = 16 + (Math.random() * 48);
particles.push({
size: 4 + (Math.random() * 8),
xA: origin + (Math.sin(angle) * pos),
yA: origin + (Math.cos(angle) * pos),
xB: origin + (Math.sin(angle) * (pos + velocity)),
yB: origin + (Math.cos(angle) * (pos + velocity)),
color: colors[Math.floor(Math.random() * colors.length)]
});
}
}
onMounted(() => { const particles = [];
window.setTimeout(() => { const origin = 64;
context.emit('end'); const colors = ['#FF1493', '#00FFFF', '#FFE202'];
}, 1100); const zIndex = os.claimZIndex('high');
if (props.particle) {
for (let i = 0; i < 12; i++) {
const angle = Math.random() * (Math.PI * 2);
const pos = Math.random() * 16;
const velocity = 16 + (Math.random() * 48);
particles.push({
size: 4 + (Math.random() * 8),
xA: origin + (Math.sin(angle) * pos),
yA: origin + (Math.cos(angle) * pos),
xB: origin + (Math.sin(angle) * (pos + velocity)),
yB: origin + (Math.cos(angle) * (pos + velocity)),
color: colors[Math.floor(Math.random() * colors.length)],
}); });
}
}
return { onMounted(() => {
particles, window.setTimeout(() => {
zIndex: os.claimZIndex('high'), emit('end');
}; }, 1100);
},
}); });
</script> </script>

View file

@ -3,63 +3,58 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
import { defineComponent } from 'vue'; import { } from 'vue';
import * as Acct from 'misskey-js/built/acct'; import * as Acct from 'misskey-js/built/acct';
import * as os from '@/os'; import * as os from '@/os';
import { mainRouter } from '@/router'; import { mainRouter } from '@/router';
import { i18n } from '@/i18n';
export default defineComponent({ async function follow(user): Promise<void> {
created() { const { canceled } = await os.confirm({
const acct = new URL(location.href).searchParams.get('acct'); type: 'question',
if (acct == null) return; text: i18n.t('followConfirm', { name: user.name || user.username }),
});
let promise; if (canceled) {
window.close();
return;
}
if (acct.startsWith('https://')) { os.apiWithDialog('following/create', {
promise = os.api('ap/show', { userId: user.id,
uri: acct, });
}); }
promise.then(res => {
if (res.type === 'User') { const acct = new URL(location.href).searchParams.get('acct');
this.follow(res.object); if (acct == null) return;
} else if (res.type === 'Note') {
mainRouter.push(`/notes/${res.object.id}`); let promise;
} else {
os.alert({ if (acct.startsWith('https://')) {
type: 'error', promise = os.api('ap/show', {
text: 'Not a user', uri: acct,
}).then(() => { });
window.close(); promise.then(res => {
}); if (res.type === 'User') {
} follow(res.object);
}); } else if (res.type === 'Note') {
mainRouter.push(`/notes/${res.object.id}`);
} else { } else {
promise = os.api('users/show', Acct.parse(acct)); os.alert({
promise.then(user => { type: 'error',
this.follow(user); text: 'Not a user',
}).then(() => {
window.close();
}); });
} }
});
} else {
promise = os.api('users/show', Acct.parse(acct));
promise.then(user => {
follow(user);
});
}
os.promiseDialog(promise, null, null, this.$ts.fetchingAsApObject); os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject);
},
methods: {
async follow(user) {
const { canceled } = await os.confirm({
type: 'question',
text: this.$t('followConfirm', { name: user.name || user.username }),
});
if (canceled) {
window.close();
return;
}
os.apiWithDialog('following/create', {
userId: user.id,
});
},
},
});
</script> </script>

View file

@ -102,22 +102,6 @@ const menu = [{
text: i18n.ts.timeline, text: i18n.ts.timeline,
action: setType, action: setType,
}]; }];
/*
export default defineComponent({
watch: {
mediaOnly() {
(this.$refs.timeline as any).reload();
}
},
methods: {
focus() {
(this.$refs.timeline as any).focus();
}
}
});
*/
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>