Skip to content
Snippets Groups Projects
about-misskey.vue 6.16 KiB
Newer Older
syuilo's avatar
syuilo committed
<div style="overflow: clip;">
syuilo's avatar
syuilo committed
	<MkSpacer :content-max="600" :margin-min="20">
		<div class="_formRoot znqjceqz">
			<div id="debug"></div>
			<div ref="about" v-panel class="_formBlock about" :class="{ playing: easterEggEngine != null }">
syuilo's avatar
syuilo committed
				<img src="/client-assets/about-icon.png" alt="" class="icon" draggable="false" @load="iconLoaded" @click="gravity"/>
syuilo's avatar
syuilo committed
				<div class="misskey">Misskey</div>
				<div class="version">v{{ version }}</div>
syuilo's avatar
syuilo committed
				<span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"><MkEmoji class="emoji" :emoji="emoji.emoji" :custom-emojis="$instance.emojis" :is-reaction="false" :normal="true" :no-style="true"/></span>
syuilo's avatar
syuilo committed
			</div>
syuilo's avatar
syuilo committed
			<div class="_formBlock" style="text-align: center;">
				{{ $ts._aboutMisskey.about }}<br><a href="https://misskey-hub.net/docs/misskey.html" target="_blank" class="_link">{{ $ts.learnMore }}</a>
			</div>
			<FormSection>
				<div class="_formLinks">
					<FormLink to="https://github.com/misskey-dev/misskey" external>
						<template #icon><i class="fas fa-code"></i></template>
						{{ $ts._aboutMisskey.source }}
						<template #suffix>GitHub</template>
					</FormLink>
					<FormLink to="https://crowdin.com/project/misskey" external>
						<template #icon><i class="fas fa-language"></i></template>
						{{ $ts._aboutMisskey.translation }}
						<template #suffix>Crowdin</template>
					</FormLink>
					<FormLink to="https://www.patreon.com/syuilo" external>
						<template #icon><i class="fas fa-hand-holding-medical"></i></template>
						{{ $ts._aboutMisskey.donate }}
						<template #suffix>Patreon</template>
					</FormLink>
				</div>
			</FormSection>
			<FormSection>
				<template #label>{{ $ts._aboutMisskey.contributors }}</template>
				<div class="_formLinks">
					<FormLink to="https://github.com/syuilo" external>@syuilo</FormLink>
					<FormLink to="https://github.com/AyaMorisawa" external>@AyaMorisawa</FormLink>
					<FormLink to="https://github.com/mei23" external>@mei23</FormLink>
					<FormLink to="https://github.com/acid-chicken" external>@acid-chicken</FormLink>
					<FormLink to="https://github.com/tamaina" external>@tamaina</FormLink>
					<FormLink to="https://github.com/rinsuki" external>@rinsuki</FormLink>
					<FormLink to="https://github.com/Xeltica" external>@Xeltica</FormLink>
					<FormLink to="https://github.com/u1-liquid" external>@u1-liquid</FormLink>
					<FormLink to="https://github.com/marihachi" external>@marihachi</FormLink>
				</div>
				<template #caption><MkLink url="https://github.com/misskey-dev/misskey/graphs/contributors">{{ $ts._aboutMisskey.allContributors }}</MkLink></template>
			</FormSection>
			<FormSection>
				<template #label><Mfm text="$[jelly ❤]"/> {{ $ts._aboutMisskey.patrons }}</template>
				<div v-for="patron in patrons" :key="patron">{{ patron }}</div>
				<template #caption>{{ $ts._aboutMisskey.morePatrons }}</template>
			</FormSection>
		</div>
	</MkSpacer>
syuilo's avatar
syuilo committed
</div>
syuilo's avatar
syuilo committed
import { defineComponent } from 'vue';
syuilo's avatar
syuilo committed
import { version } from '@/config';
syuilo's avatar
syuilo committed
import FormLink from '@/components/form/link.vue';
import FormSection from '@/components/form/section.vue';
import MkKeyValue from '@/components/key-value.vue';
syuilo's avatar
syuilo committed
import MkLink from '@/components/link.vue';
import { physics } from '@/scripts/physics';
import * as symbols from '@/symbols';
syuilo's avatar
syuilo committed
const patrons = [
syuilo's avatar
syuilo committed
	'まっちゃとーにゅ',
syuilo's avatar
syuilo committed
	'mametsuko',
syuilo's avatar
syuilo committed
	'noellabo',
syuilo's avatar
syuilo committed
	'AureoleArk',
syuilo's avatar
syuilo committed
	'Gargron',
syuilo's avatar
syuilo committed
	'Nokotaro Takeda',
syuilo's avatar
syuilo committed
	'Suji Yan',
syuilo's avatar
syuilo committed
	'oi_yekssim',
	'regtan',
syuilo's avatar
syuilo committed
	'Hekovic',
syuilo's avatar
syuilo committed
	'nenohi',
syuilo's avatar
syuilo committed
	'Gitmo Life Services',
syuilo's avatar
syuilo committed
	'naga_rus',
	'Efertone',
syuilo's avatar
syuilo committed
	'Melilot',
syuilo's avatar
syuilo committed
	'motcha',
syuilo's avatar
syuilo committed
	'nanami kan',
	'sevvie Rose',
	'Hayato Ishikawa',
	'Puniko',
	'skehmatics',
syuilo's avatar
syuilo committed
	'Quinton Macejkovic',
syuilo's avatar
syuilo committed
	'YUKIMOCHI',
syuilo's avatar
syuilo committed
	'dansup',
syuilo's avatar
syuilo committed
	'mewl hayabusa',
syuilo's avatar
syuilo committed
	'Emilis',
	'Fristi',
syuilo's avatar
syuilo committed
	'makokunsan',
syuilo's avatar
syuilo committed
	'chidori ninokura',
syuilo's avatar
syuilo committed
	'Peter G.',
syuilo's avatar
syuilo committed
	'見当かなみ',
	'natalie',
syuilo's avatar
syuilo committed
	'Maronu',
	'Steffen K9',
syuilo's avatar
syuilo committed
	'takimura',
	'sikyosyounin',
syuilo's avatar
syuilo committed
	'Nesakko',
syuilo's avatar
syuilo committed
	'YuzuRyo61',
syuilo's avatar
syuilo committed
	'blackskye',
syuilo's avatar
syuilo committed
	'sheeta.s',
	'osapon',
syuilo's avatar
syuilo committed
	'public_yusuke',
syuilo's avatar
syuilo committed
	'CG',
syuilo's avatar
syuilo committed
	'吴浥',
	't_w',
	'Jerry',
syuilo's avatar
syuilo committed
	'nafuchoco',
	'Takumi Sugita',
syuilo's avatar
syuilo committed
	'GLaTAN',
	'mkatze',
syuilo's avatar
syuilo committed
	'kabo2468y',
syuilo's avatar
syuilo committed
	'mydarkstar',
syuilo's avatar
syuilo committed
	'Roujo',
syuilo's avatar
syuilo committed
	'DignifiedSilence',
syuilo's avatar
syuilo committed
	'uroco @99',
	'totokoro',
syuilo's avatar
syuilo committed
	'うし',
	'kiritan',
	'weepjp',
	'Liaizon Wakest',
	'Duponin',
	'Blue',
	'Naoki Hirayama',
syuilo's avatar
syuilo committed
	'wara',
syuilo's avatar
syuilo committed
	'Wataru Manji (manji0)',
	'みなしま',
	'kanoy',
	'xianon',
syuilo's avatar
syuilo committed
	'Denshi',
	'Osushimaru',
syuilo's avatar
syuilo committed
	'にょんへら',
	'おのだい',
	'Leni',
	'oss',
	'Weeble',
	'蝉暮せせせ',
syuilo's avatar
syuilo committed
export default defineComponent({
syuilo's avatar
syuilo committed
	components: {
syuilo's avatar
syuilo committed
		FormSection,
syuilo's avatar
syuilo committed
		FormLink,
syuilo's avatar
syuilo committed
		MkKeyValue,
syuilo's avatar
syuilo committed
		MkLink,
syuilo's avatar
syuilo committed
			[symbols.PAGE_INFO]: {
syuilo's avatar
syuilo committed
				title: this.$ts.aboutMisskey,
syuilo's avatar
syuilo committed
				icon: null
syuilo's avatar
syuilo committed
			},
syuilo's avatar
syuilo committed
			patrons,
syuilo's avatar
syuilo committed
			easterEggReady: false,
			easterEggEmojis: [],
			easterEggEngine: null,
syuilo's avatar
syuilo committed

syuilo's avatar
syuilo committed
	beforeUnmount() {
		if (this.easterEggEngine) {
			this.easterEggEngine.stop();
		}
	},

	methods: {
		iconLoaded() {
syuilo's avatar
syuilo committed
			const emojis = this.$store.state.reactions;
syuilo's avatar
syuilo committed
			const containerWidth = this.$refs.about.offsetWidth;
			for (let i = 0; i < 32; i++) {
				this.easterEggEmojis.push({
					id: i.toString(),
					top: -(128 + (Math.random() * 256)),
					left: (Math.random() * containerWidth),
					emoji: emojis[Math.floor(Math.random() * emojis.length)],
				});
			}

syuilo's avatar
syuilo committed
			this.$nextTick(() => {
				this.easterEggReady = true;
			});
		},

		gravity() {
			if (!this.easterEggReady) return;
			this.easterEggReady = false;
			this.easterEggEngine = physics(this.$refs.about);
		}
	}
syuilo's avatar
syuilo committed

<style lang="scss" scoped>
.znqjceqz {
syuilo's avatar
syuilo committed
	> .about {
syuilo's avatar
syuilo committed
		position: relative;
		text-align: center;
		padding: 16px;
		border-radius: var(--radius);

		&.playing {
			&, * {
				user-select: none;
syuilo's avatar
syuilo committed
			}

syuilo's avatar
syuilo committed
			* {
				will-change: transform;
syuilo's avatar
syuilo committed
			}

syuilo's avatar
syuilo committed
			> .emoji {
				visibility: visible;
syuilo's avatar
syuilo committed
			}
syuilo's avatar
syuilo committed
		}
syuilo's avatar
syuilo committed

syuilo's avatar
syuilo committed
		> .icon {
			display: block;
			width: 100px;
			margin: 0 auto;
			border-radius: 16px;
		}

		> .misskey {
			margin: 0.75em auto 0 auto;
			width: max-content;
		}

		> .version {
			margin: 0 auto;
			width: max-content;
			opacity: 0.5;
		}

		> .emoji {
			position: absolute;
			top: 0;
			left: 0;
			visibility: hidden;
syuilo's avatar
syuilo committed

			> .emoji {
syuilo's avatar
syuilo committed
				pointer-events: none;
				font-size: 24px;
				width: 24px;
syuilo's avatar
syuilo committed
			}
		}
	}
syuilo's avatar
syuilo committed
}
</style>