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,33 +56,28 @@
</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<{
(ev: 'end'): void;
}>();
const particles = [];
const origin = 64;
const colors = ['#FF1493', '#00FFFF', '#FFE202'];
const zIndex = os.claimZIndex('high');
if (props.particle) {
for (let i = 0; i < 12; i++) { for (let i = 0; i < 12; i++) {
const angle = Math.random() * (Math.PI * 2); const angle = Math.random() * (Math.PI * 2);
const pos = Math.random() * 16; const pos = Math.random() * 16;
@ -88,22 +88,15 @@ export default defineComponent({
yA: origin + (Math.cos(angle) * pos), yA: origin + (Math.cos(angle) * pos),
xB: origin + (Math.sin(angle) * (pos + velocity)), xB: origin + (Math.sin(angle) * (pos + velocity)),
yB: origin + (Math.cos(angle) * (pos + velocity)), yB: origin + (Math.cos(angle) * (pos + velocity)),
color: colors[Math.floor(Math.random() * colors.length)] color: colors[Math.floor(Math.random() * colors.length)],
}); });
} }
} }
onMounted(() => { onMounted(() => {
window.setTimeout(() => { window.setTimeout(() => {
context.emit('end'); emit('end');
}, 1100); }, 1100);
});
return {
particles,
zIndex: os.claimZIndex('high'),
};
},
}); });
</script> </script>

View file

@ -3,26 +3,41 @@
</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', {
userId: user.id,
});
}
const acct = new URL(location.href).searchParams.get('acct');
if (acct == null) return;
let promise;
if (acct.startsWith('https://')) {
promise = os.api('ap/show', { promise = os.api('ap/show', {
uri: acct, uri: acct,
}); });
promise.then(res => { promise.then(res => {
if (res.type === 'User') { if (res.type === 'User') {
this.follow(res.object); follow(res.object);
} else if (res.type === 'Note') { } else if (res.type === 'Note') {
mainRouter.push(`/notes/${res.object.id}`); mainRouter.push(`/notes/${res.object.id}`);
} else { } else {
@ -34,32 +49,12 @@ export default defineComponent({
}); });
} }
}); });
} else { } else {
promise = os.api('users/show', Acct.parse(acct)); promise = os.api('users/show', Acct.parse(acct));
promise.then(user => { promise.then(user => {
this.follow(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>