| 
		 Before Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 76 KiB  | 
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
 | 
			
		||||
	 y="0px" width="96px" height="96px" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve">
 | 
			
		||||
<polygon fill="#ea2412" points="0,45.255 45.254,0 84.854,0 0,84.854 "/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 441 B  | 
| 
						 | 
				
			
			@ -1,6 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
 | 
			
		||||
	 y="0px" width="96px" height="96px" viewBox="0 0 96 96" enable-background="new 0 0 96 96" xml:space="preserve">
 | 
			
		||||
<polygon fill="#0B8AEA" points="0,45.255 45.254,0 84.854,0 0,84.854 "/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 441 B  | 
| 
						 | 
				
			
			@ -1,28 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
	"short_name": "Misskey",
 | 
			
		||||
	"name": "Misskey",
 | 
			
		||||
	"start_url": "/",
 | 
			
		||||
	"display": "standalone",
 | 
			
		||||
	"background_color": "#313a42",
 | 
			
		||||
	"theme_color": "#86b300",
 | 
			
		||||
	"icons": [
 | 
			
		||||
		{
 | 
			
		||||
			"src": "/static-assets/icons/192.png",
 | 
			
		||||
			"sizes": "192x192",
 | 
			
		||||
			"type": "image/png"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"src": "/static-assets/icons/512.png",
 | 
			
		||||
			"sizes": "512x512",
 | 
			
		||||
			"type": "image/png"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"share_target": {
 | 
			
		||||
		"action": "/share/",
 | 
			
		||||
		"params": {
 | 
			
		||||
			"title": "title",
 | 
			
		||||
			"text": "text",
 | 
			
		||||
			"url": "url"
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 9.2 KiB  | 
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
	<head>
 | 
			
		||||
		<title>Misskey API</title>
 | 
			
		||||
		<!-- needed for adaptive design -->
 | 
			
		||||
		<meta charset="utf-8"/>
 | 
			
		||||
		<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
		<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
		<!--
 | 
			
		||||
		ReDoc doesn't change outer page styles
 | 
			
		||||
		-->
 | 
			
		||||
		<style>
 | 
			
		||||
			body {
 | 
			
		||||
				margin: 0;
 | 
			
		||||
				padding: 0;
 | 
			
		||||
			}
 | 
			
		||||
		</style>
 | 
			
		||||
	</head>
 | 
			
		||||
	<body>
 | 
			
		||||
		<redoc spec-url="/api.json" expand-responses="200" expand-single-schema-field="true"></redoc>
 | 
			
		||||
		<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"> </script>
 | 
			
		||||
	</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 424 B  | 
| 
						 | 
				
			
			@ -1,7 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
 | 
			
		||||
	 y="0px" width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 | 
			
		||||
<circle fill="#3AA2DC" cx="16.5" cy="16.5" r="6"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 536 B  | 
| 
						 | 
				
			
			@ -9,15 +9,15 @@
 | 
			
		|||
	:title="title"
 | 
			
		||||
>
 | 
			
		||||
	<div class="label" v-if="$i.avatarId == file.id">
 | 
			
		||||
		<img src="/assets/label.svg"/>
 | 
			
		||||
		<img src="/static-assets/client/label.svg"/>
 | 
			
		||||
		<p>{{ $ts.avatar }}</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="label" v-if="$i.bannerId == file.id">
 | 
			
		||||
		<img src="/assets/label.svg"/>
 | 
			
		||||
		<img src="/static-assets/client/label.svg"/>
 | 
			
		||||
		<p>{{ $ts.banner }}</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="label red" v-if="file.isSensitive">
 | 
			
		||||
		<img src="/assets/label-red.svg"/>
 | 
			
		||||
		<img src="/static-assets/client/label-red.svg"/>
 | 
			
		||||
		<p>{{ $ts.nsfw }}</p>
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
		<div id="debug"></div>
 | 
			
		||||
		<section class="_formItem about">
 | 
			
		||||
			<div class="_formPanel panel" :class="{ playing: easterEggEngine != null }" ref="about">
 | 
			
		||||
				<img src="/assets/about-icon.png" alt="" class="icon" ref="icon" @load="iconLoaded" draggable="false"/>
 | 
			
		||||
				<img src="/static-assets/client/about-icon.png" alt="" class="icon" ref="icon" @load="iconLoaded" draggable="false"/>
 | 
			
		||||
				<div class="misskey">Misskey</div>
 | 
			
		||||
				<div class="version">v{{ version }}</div>
 | 
			
		||||
				<span class="emoji" v-for="emoji in easterEggEmojis" :key="emoji.id" :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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
		</template>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="_section">
 | 
			
		||||
		<div class="localfedi7 _panel _vMargin" v-if="tag == null" :style="{ backgroundImage: `url(/assets/fedi.jpg)` }">
 | 
			
		||||
		<div class="localfedi7 _panel _vMargin" v-if="tag == null" :style="{ backgroundImage: `url(/static-assets/client/fedi.jpg)` }">
 | 
			
		||||
			<header><span>{{ $ts.exploreFediverse }}</span></header>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -200,7 +200,7 @@ export default defineComponent({
 | 
			
		|||
 | 
			
		||||
			&:not(.isMe):not(.isRead) {
 | 
			
		||||
				> div {
 | 
			
		||||
					background-image: url("/assets/unread.svg");
 | 
			
		||||
					background-image: url("/static-assets/client/unread.svg");
 | 
			
		||||
					background-repeat: no-repeat;
 | 
			
		||||
					background-position: 0 center;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
	<div class="content">
 | 
			
		||||
		<div class="balloon" :class="{ noText: message.text == null }" >
 | 
			
		||||
			<button class="delete-button" v-if="isMe" :title="$ts.delete" @click="del">
 | 
			
		||||
				<img src="/assets/remove.png" alt="Delete"/>
 | 
			
		||||
				<img src="/static-assets/client/remove.png" alt="Delete"/>
 | 
			
		||||
			</button>
 | 
			
		||||
			<div class="content" v-if="!message.isDeleted">
 | 
			
		||||
				<Mfm class="text" v-if="message.text" ref="text" :text="message.text" :i="$i"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
		<XTimeline class="tl"/>
 | 
			
		||||
		<div class="shape1"></div>
 | 
			
		||||
		<div class="shape2"></div>
 | 
			
		||||
		<img src="/static-assets/misskey.svg" class="misskey"/>
 | 
			
		||||
		<img src="/static-assets/client/misskey.svg" class="misskey"/>
 | 
			
		||||
		<div class="emojis">
 | 
			
		||||
			<MkEmoji :normal="true" :no-style="true" emoji="👍"/>
 | 
			
		||||
			<MkEmoji :normal="true" :no-style="true" emoji="❤"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@
 | 
			
		|||
				</I18n>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<img src="/static-assets/misskey.svg" class="misskey"/>
 | 
			
		||||
		<img src="/static-assets/client/misskey.svg" class="misskey"/>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@
 | 
			
		|||
			<MkEmoji :normal="true" :no-style="true" emoji="🍮"/>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class="main">
 | 
			
		||||
			<img src="/static-assets/misskey.svg" class="misskey"/>
 | 
			
		||||
			<img src="/static-assets/client/misskey.svg" class="misskey"/>
 | 
			
		||||
			<div class="form _panel">
 | 
			
		||||
				<div class="bg">
 | 
			
		||||
					<div class="fade"></div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -340,7 +340,7 @@ export class Room {
 | 
			
		|||
	@autobind
 | 
			
		||||
	private loadRoom() {
 | 
			
		||||
		const type = this.roomInfo.roomType;
 | 
			
		||||
		new GLTFLoader().load(`/static-assets/room/rooms/${type}/${type}.glb`, gltf => {
 | 
			
		||||
		new GLTFLoader().load(`/static-assets/client/room/rooms/${type}/${type}.glb`, gltf => {
 | 
			
		||||
			gltf.scene.traverse(child => {
 | 
			
		||||
				if (!(child instanceof THREE.Mesh)) return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -375,7 +375,7 @@ export class Room {
 | 
			
		|||
		const def = furnitureDefs.find(d => d.id === furniture.type);
 | 
			
		||||
		return new Promise<GLTF>((res, rej) => {
 | 
			
		||||
			const loader = new GLTFLoader();
 | 
			
		||||
			loader.load(`/static-assets/room/furnitures/${furniture.type}/${furniture.type}.glb`, gltf => {
 | 
			
		||||
			loader.load(`/static-assets/client/room/furnitures/${furniture.type}/${furniture.type}.glb`, gltf => {
 | 
			
		||||
				const model = gltf.scene;
 | 
			
		||||
 | 
			
		||||
				// Load animation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ export function playFile(file: string, volume: number) {
 | 
			
		|||
	if (cache.has(file)) {
 | 
			
		||||
		audio = cache.get(file);
 | 
			
		||||
	} else {
 | 
			
		||||
		audio = new Audio(`/static-assets/sounds/${file}.mp3`);
 | 
			
		||||
		audio = new Audio(`/static-assets/client/sounds/${file}.mp3`);
 | 
			
		||||
		cache.set(file, audio);
 | 
			
		||||
	}
 | 
			
		||||
	audio.volume = masterVolume - ((1 - volume) * masterVolume);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ router.get('/robots.txt', async ctx => {
 | 
			
		|||
// Docs
 | 
			
		||||
router.get('/api-doc', async ctx => {
 | 
			
		||||
	await send(ctx as any, '/redoc.html', {
 | 
			
		||||
		root: assets
 | 
			
		||||
		root: staticAssets
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
import * as Koa from 'koa';
 | 
			
		||||
import * as manifest from '../../../src/client/assets/manifest.json';
 | 
			
		||||
import * as manifest from '../../../assets/client/manifest.json';
 | 
			
		||||
import { fetchMeta } from '../../misc/fetch-meta';
 | 
			
		||||
 | 
			
		||||
module.exports = async (ctx: Koa.Context) => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||