From 36c11e1f0f24f5fc451ad1a38fd054c2cfa4d508 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 25 Feb 2018 00:18:09 +0900
Subject: [PATCH] Refactor

---
 package.json                                  |  3 --
 src/web/app/app.vue                           |  2 +-
 src/web/app/auth/script.ts                    | 23 -------------
 src/web/app/common/mios.ts                    | 15 +++------
 src/web/app/common/views/components/index.ts  | 28 ----------------
 .../{components => }/widgets/access-log.vue   |  2 +-
 .../{components => }/widgets/broadcast.vue    |  4 +--
 .../{components => }/widgets/calendar.vue     |  2 +-
 .../{components => }/widgets/donation.vue     |  2 +-
 src/web/app/common/views/widgets/index.ts     | 25 +++++++++++++++
 .../views/{components => }/widgets/nav.vue    |  2 +-
 .../{components => }/widgets/photo-stream.vue |  2 +-
 .../views/{components => }/widgets/rss.vue    |  2 +-
 .../widgets/server.cpu-memory.vue             |  0
 .../{components => }/widgets/server.cpu.vue   |  0
 .../{components => }/widgets/server.disk.vue  |  0
 .../{components => }/widgets/server.info.vue  |  0
 .../widgets/server.memory.vue                 |  0
 .../{components => }/widgets/server.pie.vue   |  0
 .../widgets/server.uptimes.vue                |  0
 .../views/{components => }/widgets/server.vue |  2 +-
 .../{components => }/widgets/slideshow.vue    |  2 +-
 .../views/{components => }/widgets/tips.vue   |  2 +-
 .../{components => }/widgets/version.vue      |  4 +--
 src/web/app/desktop/script.ts                 |  1 +
 src/web/app/desktop/views/components/index.ts | 26 ---------------
 .../{components => }/widgets/activity.vue     |  2 +-
 .../widgets/channel.channel.form.vue          |  0
 .../widgets/channel.channel.post.vue          |  0
 .../widgets/channel.channel.vue               |  2 +-
 .../{components => }/widgets/channel.vue      |  2 +-
 src/web/app/desktop/views/widgets/index.ts    | 23 +++++++++++++
 .../{components => }/widgets/messaging.vue    |  4 +--
 .../widgets/notifications.vue                 |  2 +-
 .../views/{components => }/widgets/polls.vue  |  2 +-
 .../{components => }/widgets/post-form.vue    |  2 +-
 .../{components => }/widgets/profile.vue      |  2 +-
 .../{components => }/widgets/timemachine.vue  |  2 +-
 .../views/{components => }/widgets/trends.vue |  2 +-
 .../views/{components => }/widgets/users.vue  |  2 +-
 src/web/app/init.ts                           | 32 +++++++++----------
 src/web/app/mobile/script.ts                  |  1 +
 src/web/app/mobile/views/components/index.ts  | 10 ------
 .../{components => }/widgets/activity.vue     |  2 +-
 src/web/app/mobile/views/widgets/index.ts     |  7 ++++
 .../{components => }/widgets/profile.vue      |  2 +-
 src/web/app/stats/script.ts                   | 23 -------------
 src/web/app/status/script.ts                  | 23 -------------
 48 files changed, 105 insertions(+), 191 deletions(-)
 delete mode 100644 src/web/app/auth/script.ts
 rename src/web/app/common/views/{components => }/widgets/access-log.vue (97%)
 rename src/web/app/common/views/{components => }/widgets/broadcast.vue (97%)
 rename src/web/app/common/views/{components => }/widgets/calendar.vue (98%)
 rename src/web/app/common/views/{components => }/widgets/donation.vue (95%)
 create mode 100644 src/web/app/common/views/widgets/index.ts
 rename src/web/app/common/views/{components => }/widgets/nav.vue (86%)
 rename src/web/app/common/views/{components => }/widgets/photo-stream.vue (97%)
 rename src/web/app/common/views/{components => }/widgets/rss.vue (96%)
 rename src/web/app/common/views/{components => }/widgets/server.cpu-memory.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.cpu.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.disk.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.info.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.memory.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.pie.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.uptimes.vue (100%)
 rename src/web/app/common/views/{components => }/widgets/server.vue (97%)
 rename src/web/app/common/views/{components => }/widgets/slideshow.vue (98%)
 rename src/web/app/common/views/{components => }/widgets/tips.vue (98%)
 rename src/web/app/common/views/{components => }/widgets/version.vue (75%)
 rename src/web/app/desktop/views/{components => }/widgets/activity.vue (89%)
 rename src/web/app/desktop/views/{components => }/widgets/channel.channel.form.vue (100%)
 rename src/web/app/desktop/views/{components => }/widgets/channel.channel.post.vue (100%)
 rename src/web/app/desktop/views/{components => }/widgets/channel.channel.vue (95%)
 rename src/web/app/desktop/views/{components => }/widgets/channel.vue (97%)
 create mode 100644 src/web/app/desktop/views/widgets/index.ts
 rename src/web/app/desktop/views/{components => }/widgets/messaging.vue (88%)
 rename src/web/app/desktop/views/{components => }/widgets/notifications.vue (95%)
 rename src/web/app/desktop/views/{components => }/widgets/polls.vue (97%)
 rename src/web/app/desktop/views/{components => }/widgets/post-form.vue (97%)
 rename src/web/app/desktop/views/{components => }/widgets/profile.vue (97%)
 rename src/web/app/desktop/views/{components => }/widgets/timemachine.vue (88%)
 rename src/web/app/desktop/views/{components => }/widgets/trends.vue (97%)
 rename src/web/app/desktop/views/{components => }/widgets/users.vue (98%)
 rename src/web/app/mobile/views/{components => }/widgets/activity.vue (90%)
 create mode 100644 src/web/app/mobile/views/widgets/index.ts
 rename src/web/app/mobile/views/{components => }/widgets/profile.vue (95%)
 delete mode 100644 src/web/app/stats/script.ts
 delete mode 100644 src/web/app/status/script.ts

diff --git a/package.json b/package.json
index e097960395..274962c368 100644
--- a/package.json
+++ b/package.json
@@ -68,7 +68,6 @@
 		"@types/redis": "2.8.5",
 		"@types/request": "2.47.0",
 		"@types/rimraf": "2.0.2",
-		"@types/riot": "3.6.1",
 		"@types/seedrandom": "2.4.27",
 		"@types/serve-favicon": "2.2.30",
 		"@types/speakeasy": "2.0.2",
@@ -148,8 +147,6 @@
 		"redis": "2.8.0",
 		"request": "2.83.0",
 		"rimraf": "2.6.2",
-		"riot": "3.8.1",
-		"riot-tag-loader": "2.0.2",
 		"rndstr": "1.0.0",
 		"s-age": "1.1.2",
 		"seedrandom": "2.4.3",
diff --git a/src/web/app/app.vue b/src/web/app/app.vue
index 321e003930..7a46e7dea0 100644
--- a/src/web/app/app.vue
+++ b/src/web/app/app.vue
@@ -1,3 +1,3 @@
 <template>
-	<router-view id="app"></router-view>
+<router-view id="app"></router-view>
 </template>
diff --git a/src/web/app/auth/script.ts b/src/web/app/auth/script.ts
deleted file mode 100644
index dd598d1ed6..0000000000
--- a/src/web/app/auth/script.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Authorize Form
- */
-
-// Style
-import './style.styl';
-
-import * as riot from 'riot';
-require('./tags');
-import init from '../init';
-
-document.title = 'Misskey | アプリの連携';
-
-/**
- * init
- */
-init(() => {
-	mount(document.createElement('mk-index'));
-});
-
-function mount(content) {
-	riot.mount(document.getElementById('app').appendChild(content));
-}
diff --git a/src/web/app/common/mios.ts b/src/web/app/common/mios.ts
index e20f4bfe4e..6c95e5b9b5 100644
--- a/src/web/app/common/mios.ts
+++ b/src/web/app/common/mios.ts
@@ -1,5 +1,7 @@
 import Vue from 'vue';
 import { EventEmitter } from 'eventemitter3';
+
+import { apiUrl, swPublickey, version, lang } from '../config';
 import api from './scripts/api';
 import signout from './scripts/signout';
 import Progress from './scripts/loading';
@@ -11,13 +13,6 @@ import MessagingIndexStreamManager from './scripts/streaming/messaging-index-str
 
 import Err from '../common/views/components/connect-failed.vue';
 
-//#region environment variables
-declare const _VERSION_: string;
-declare const _LANG_: string;
-declare const _API_URL_: string;
-declare const _SW_PUBLICKEY_: string;
-//#endregion
-
 export type API = {
 	chooseDriveFile: (opts: {
 		title?: string;
@@ -204,7 +199,7 @@ export default class MiOS extends EventEmitter {
 			}
 
 			// Fetch user
-			fetch(`${_API_URL_}/i`, {
+			fetch(`${apiUrl}/i`, {
 				method: 'POST',
 				body: JSON.stringify({
 					i: token
@@ -311,7 +306,7 @@ export default class MiOS extends EventEmitter {
 
 				// A public key your push server will use to send
 				// messages to client apps via a push server.
-				applicationServerKey: urlBase64ToUint8Array(_SW_PUBLICKEY_)
+				applicationServerKey: urlBase64ToUint8Array(swPublickey)
 			};
 
 			// Subscribe push notification
@@ -348,7 +343,7 @@ export default class MiOS extends EventEmitter {
 		});
 
 		// The path of service worker script
-		const sw = `/sw.${_VERSION_}.${_LANG_}.js`;
+		const sw = `/sw.${version}.${lang}.js`;
 
 		// Register service worker
 		navigator.serviceWorker.register(sw).then(registration => {
diff --git a/src/web/app/common/views/components/index.ts b/src/web/app/common/views/components/index.ts
index 5460d75779..ab0f1767d4 100644
--- a/src/web/app/common/views/components/index.ts
+++ b/src/web/app/common/views/components/index.ts
@@ -21,20 +21,6 @@ import urlPreview from './url-preview.vue';
 import twitterSetting from './twitter-setting.vue';
 import fileTypeIcon from './file-type-icon.vue';
 
-//#region widgets
-import wAccessLog from './widgets/access-log.vue';
-import wVersion from './widgets/version.vue';
-import wRss from './widgets/rss.vue';
-import wServer from './widgets/server.vue';
-import wBroadcast from './widgets/broadcast.vue';
-import wCalendar from './widgets/calendar.vue';
-import wPhotoStream from './widgets/photo-stream.vue';
-import wSlideshow from './widgets/slideshow.vue';
-import wTips from './widgets/tips.vue';
-import wDonation from './widgets/donation.vue';
-import wNav from './widgets/nav.vue';
-//#endregion
-
 Vue.component('mk-signin', signin);
 Vue.component('mk-signup', signup);
 Vue.component('mk-forkit', forkit);
@@ -55,17 +41,3 @@ Vue.component('mk-messaging-room', messagingRoom);
 Vue.component('mk-url-preview', urlPreview);
 Vue.component('mk-twitter-setting', twitterSetting);
 Vue.component('mk-file-type-icon', fileTypeIcon);
-
-//#region widgets
-Vue.component('mkw-nav', wNav);
-Vue.component('mkw-calendar', wCalendar);
-Vue.component('mkw-photo-stream', wPhotoStream);
-Vue.component('mkw-slideshow', wSlideshow);
-Vue.component('mkw-tips', wTips);
-Vue.component('mkw-donation', wDonation);
-Vue.component('mkw-broadcast', wBroadcast);
-Vue.component('mkw-server', wServer);
-Vue.component('mkw-rss', wRss);
-Vue.component('mkw-version', wVersion);
-Vue.component('mkw-access-log', wAccessLog);
-//#endregion
diff --git a/src/web/app/common/views/components/widgets/access-log.vue b/src/web/app/common/views/widgets/access-log.vue
similarity index 97%
rename from src/web/app/common/views/components/widgets/access-log.vue
rename to src/web/app/common/views/widgets/access-log.vue
index c810c2d157..f7bb17d833 100644
--- a/src/web/app/common/views/components/widgets/access-log.vue
+++ b/src/web/app/common/views/widgets/access-log.vue
@@ -15,7 +15,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 import * as seedrandom from 'seedrandom';
 
 export default define({
diff --git a/src/web/app/common/views/components/widgets/broadcast.vue b/src/web/app/common/views/widgets/broadcast.vue
similarity index 97%
rename from src/web/app/common/views/components/widgets/broadcast.vue
rename to src/web/app/common/views/widgets/broadcast.vue
index 0bb59caf43..bf41a5fc67 100644
--- a/src/web/app/common/views/components/widgets/broadcast.vue
+++ b/src/web/app/common/views/widgets/broadcast.vue
@@ -24,8 +24,8 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
-import { lang } from '../../../../config';
+import define from '../../../common/define-widget';
+import { lang } from '../../../config';
 
 export default define({
 	name: 'broadcast',
diff --git a/src/web/app/common/views/components/widgets/calendar.vue b/src/web/app/common/views/widgets/calendar.vue
similarity index 98%
rename from src/web/app/common/views/components/widgets/calendar.vue
rename to src/web/app/common/views/widgets/calendar.vue
index bfcbd7f68d..2bcdb07f9e 100644
--- a/src/web/app/common/views/components/widgets/calendar.vue
+++ b/src/web/app/common/views/widgets/calendar.vue
@@ -36,7 +36,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'calendar',
 	props: () => ({
diff --git a/src/web/app/common/views/components/widgets/donation.vue b/src/web/app/common/views/widgets/donation.vue
similarity index 95%
rename from src/web/app/common/views/components/widgets/donation.vue
rename to src/web/app/common/views/widgets/donation.vue
index 08aab8ecd1..e218df06e1 100644
--- a/src/web/app/common/views/components/widgets/donation.vue
+++ b/src/web/app/common/views/widgets/donation.vue
@@ -12,7 +12,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'donation'
 });
diff --git a/src/web/app/common/views/widgets/index.ts b/src/web/app/common/views/widgets/index.ts
new file mode 100644
index 0000000000..e41030e85a
--- /dev/null
+++ b/src/web/app/common/views/widgets/index.ts
@@ -0,0 +1,25 @@
+import Vue from 'vue';
+
+import wAccessLog from './access-log.vue';
+import wVersion from './version.vue';
+import wRss from './rss.vue';
+import wServer from './server.vue';
+import wBroadcast from './broadcast.vue';
+import wCalendar from './calendar.vue';
+import wPhotoStream from './photo-stream.vue';
+import wSlideshow from './slideshow.vue';
+import wTips from './tips.vue';
+import wDonation from './donation.vue';
+import wNav from './nav.vue';
+
+Vue.component('mkw-nav', wNav);
+Vue.component('mkw-calendar', wCalendar);
+Vue.component('mkw-photo-stream', wPhotoStream);
+Vue.component('mkw-slideshow', wSlideshow);
+Vue.component('mkw-tips', wTips);
+Vue.component('mkw-donation', wDonation);
+Vue.component('mkw-broadcast', wBroadcast);
+Vue.component('mkw-server', wServer);
+Vue.component('mkw-rss', wRss);
+Vue.component('mkw-version', wVersion);
+Vue.component('mkw-access-log', wAccessLog);
diff --git a/src/web/app/common/views/components/widgets/nav.vue b/src/web/app/common/views/widgets/nav.vue
similarity index 86%
rename from src/web/app/common/views/components/widgets/nav.vue
rename to src/web/app/common/views/widgets/nav.vue
index ce88e587a8..7bd5a7832f 100644
--- a/src/web/app/common/views/components/widgets/nav.vue
+++ b/src/web/app/common/views/widgets/nav.vue
@@ -9,7 +9,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'nav'
 });
diff --git a/src/web/app/common/views/components/widgets/photo-stream.vue b/src/web/app/common/views/widgets/photo-stream.vue
similarity index 97%
rename from src/web/app/common/views/components/widgets/photo-stream.vue
rename to src/web/app/common/views/widgets/photo-stream.vue
index dcaa6624dd..78864cc8bf 100644
--- a/src/web/app/common/views/components/widgets/photo-stream.vue
+++ b/src/web/app/common/views/widgets/photo-stream.vue
@@ -13,7 +13,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'photo-stream',
 	props: () => ({
diff --git a/src/web/app/common/views/components/widgets/rss.vue b/src/web/app/common/views/widgets/rss.vue
similarity index 96%
rename from src/web/app/common/views/components/widgets/rss.vue
rename to src/web/app/common/views/widgets/rss.vue
index 186d495d00..4d74b2f7a4 100644
--- a/src/web/app/common/views/components/widgets/rss.vue
+++ b/src/web/app/common/views/widgets/rss.vue
@@ -13,7 +13,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'rss',
 	props: () => ({
diff --git a/src/web/app/common/views/components/widgets/server.cpu-memory.vue b/src/web/app/common/views/widgets/server.cpu-memory.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.cpu-memory.vue
rename to src/web/app/common/views/widgets/server.cpu-memory.vue
diff --git a/src/web/app/common/views/components/widgets/server.cpu.vue b/src/web/app/common/views/widgets/server.cpu.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.cpu.vue
rename to src/web/app/common/views/widgets/server.cpu.vue
diff --git a/src/web/app/common/views/components/widgets/server.disk.vue b/src/web/app/common/views/widgets/server.disk.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.disk.vue
rename to src/web/app/common/views/widgets/server.disk.vue
diff --git a/src/web/app/common/views/components/widgets/server.info.vue b/src/web/app/common/views/widgets/server.info.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.info.vue
rename to src/web/app/common/views/widgets/server.info.vue
diff --git a/src/web/app/common/views/components/widgets/server.memory.vue b/src/web/app/common/views/widgets/server.memory.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.memory.vue
rename to src/web/app/common/views/widgets/server.memory.vue
diff --git a/src/web/app/common/views/components/widgets/server.pie.vue b/src/web/app/common/views/widgets/server.pie.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.pie.vue
rename to src/web/app/common/views/widgets/server.pie.vue
diff --git a/src/web/app/common/views/components/widgets/server.uptimes.vue b/src/web/app/common/views/widgets/server.uptimes.vue
similarity index 100%
rename from src/web/app/common/views/components/widgets/server.uptimes.vue
rename to src/web/app/common/views/widgets/server.uptimes.vue
diff --git a/src/web/app/common/views/components/widgets/server.vue b/src/web/app/common/views/widgets/server.vue
similarity index 97%
rename from src/web/app/common/views/components/widgets/server.vue
rename to src/web/app/common/views/widgets/server.vue
index 4ebc5767d6..3d5248998f 100644
--- a/src/web/app/common/views/components/widgets/server.vue
+++ b/src/web/app/common/views/widgets/server.vue
@@ -18,7 +18,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 import XCpuMemory from './server.cpu-memory.vue';
 import XCpu from './server.cpu.vue';
 import XMemory from './server.memory.vue';
diff --git a/src/web/app/common/views/components/widgets/slideshow.vue b/src/web/app/common/views/widgets/slideshow.vue
similarity index 98%
rename from src/web/app/common/views/components/widgets/slideshow.vue
rename to src/web/app/common/views/widgets/slideshow.vue
index c2f4eb70d3..56eb654c2b 100644
--- a/src/web/app/common/views/components/widgets/slideshow.vue
+++ b/src/web/app/common/views/widgets/slideshow.vue
@@ -12,7 +12,7 @@
 
 <script lang="ts">
 import * as anime from 'animejs';
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'slideshow',
 	props: () => ({
diff --git a/src/web/app/common/views/components/widgets/tips.vue b/src/web/app/common/views/widgets/tips.vue
similarity index 98%
rename from src/web/app/common/views/components/widgets/tips.vue
rename to src/web/app/common/views/widgets/tips.vue
index 2991fbc3b9..bdecc068e1 100644
--- a/src/web/app/common/views/components/widgets/tips.vue
+++ b/src/web/app/common/views/widgets/tips.vue
@@ -6,7 +6,7 @@
 
 <script lang="ts">
 import * as anime from 'animejs';
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 
 const tips = [
 	'<kbd>t</kbd>でタイムラインにフォーカスできます',
diff --git a/src/web/app/common/views/components/widgets/version.vue b/src/web/app/common/views/widgets/version.vue
similarity index 75%
rename from src/web/app/common/views/components/widgets/version.vue
rename to src/web/app/common/views/widgets/version.vue
index ad2b27bc40..5072d9b74a 100644
--- a/src/web/app/common/views/components/widgets/version.vue
+++ b/src/web/app/common/views/widgets/version.vue
@@ -3,8 +3,8 @@
 </template>
 
 <script lang="ts">
-import { version } from '../../../../config';
-import define from '../../../../common/define-widget';
+import { version } from '../../../config';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'version'
 }).extend({
diff --git a/src/web/app/desktop/script.ts b/src/web/app/desktop/script.ts
index bbd8e9598b..f0412805ef 100644
--- a/src/web/app/desktop/script.ts
+++ b/src/web/app/desktop/script.ts
@@ -37,6 +37,7 @@ init(async (launch) => {
 
 	// Register components
 	require('./views/components');
+	require('./views/widgets');
 
 	// Launch the app
 	const [app, os] = launch(os => ({
diff --git a/src/web/app/desktop/views/components/index.ts b/src/web/app/desktop/views/components/index.ts
index 5cb09e0319..52b9680baa 100644
--- a/src/web/app/desktop/views/components/index.ts
+++ b/src/web/app/desktop/views/components/index.ts
@@ -29,19 +29,6 @@ import following from './following.vue';
 import usersList from './users-list.vue';
 import widgetContainer from './widget-container.vue';
 
-//#region widgets
-import wNotifications from './widgets/notifications.vue';
-import wTimemachine from './widgets/timemachine.vue';
-import wActivity from './widgets/activity.vue';
-import wTrends from './widgets/trends.vue';
-import wUsers from './widgets/users.vue';
-import wPolls from './widgets/polls.vue';
-import wPostForm from './widgets/post-form.vue';
-import wMessaging from './widgets/messaging.vue';
-import wChannel from './widgets/channel.vue';
-import wProfile from './widgets/profile.vue';
-//#endregion
-
 Vue.component('mk-ui', ui);
 Vue.component('mk-ui-notification', uiNotification);
 Vue.component('mk-home', home);
@@ -70,16 +57,3 @@ Vue.component('mk-followers', followers);
 Vue.component('mk-following', following);
 Vue.component('mk-users-list', usersList);
 Vue.component('mk-widget-container', widgetContainer);
-
-//#region widgets
-Vue.component('mkw-notifications', wNotifications);
-Vue.component('mkw-timemachine', wTimemachine);
-Vue.component('mkw-activity', wActivity);
-Vue.component('mkw-trends', wTrends);
-Vue.component('mkw-users', wUsers);
-Vue.component('mkw-polls', wPolls);
-Vue.component('mkw-post-form', wPostForm);
-Vue.component('mkw-messaging', wMessaging);
-Vue.component('mkw-channel', wChannel);
-Vue.component('mkw-profile', wProfile);
-//#endregion
diff --git a/src/web/app/desktop/views/components/widgets/activity.vue b/src/web/app/desktop/views/widgets/activity.vue
similarity index 89%
rename from src/web/app/desktop/views/components/widgets/activity.vue
rename to src/web/app/desktop/views/widgets/activity.vue
index 2ff5fe4f03..0bdf4622af 100644
--- a/src/web/app/desktop/views/components/widgets/activity.vue
+++ b/src/web/app/desktop/views/widgets/activity.vue
@@ -7,7 +7,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'activity',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/channel.channel.form.vue b/src/web/app/desktop/views/widgets/channel.channel.form.vue
similarity index 100%
rename from src/web/app/desktop/views/components/widgets/channel.channel.form.vue
rename to src/web/app/desktop/views/widgets/channel.channel.form.vue
diff --git a/src/web/app/desktop/views/components/widgets/channel.channel.post.vue b/src/web/app/desktop/views/widgets/channel.channel.post.vue
similarity index 100%
rename from src/web/app/desktop/views/components/widgets/channel.channel.post.vue
rename to src/web/app/desktop/views/widgets/channel.channel.post.vue
diff --git a/src/web/app/desktop/views/components/widgets/channel.channel.vue b/src/web/app/desktop/views/widgets/channel.channel.vue
similarity index 95%
rename from src/web/app/desktop/views/components/widgets/channel.channel.vue
rename to src/web/app/desktop/views/widgets/channel.channel.vue
index 09154390c4..70dac316cf 100644
--- a/src/web/app/desktop/views/components/widgets/channel.channel.vue
+++ b/src/web/app/desktop/views/widgets/channel.channel.vue
@@ -11,7 +11,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import ChannelStream from '../../../../common/scripts/streaming/channel-stream';
+import ChannelStream from '../../../common/scripts/streaming/channel-stream';
 import XForm from './channel.channel.form.vue';
 import XPost from './channel.channel.post.vue';
 
diff --git a/src/web/app/desktop/views/components/widgets/channel.vue b/src/web/app/desktop/views/widgets/channel.vue
similarity index 97%
rename from src/web/app/desktop/views/components/widgets/channel.vue
rename to src/web/app/desktop/views/widgets/channel.vue
index 5c3afd9ecf..fc143bb1df 100644
--- a/src/web/app/desktop/views/components/widgets/channel.vue
+++ b/src/web/app/desktop/views/widgets/channel.vue
@@ -10,7 +10,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 import XChannel from './channel.channel.vue';
 
 export default define({
diff --git a/src/web/app/desktop/views/widgets/index.ts b/src/web/app/desktop/views/widgets/index.ts
new file mode 100644
index 0000000000..77d771d6b3
--- /dev/null
+++ b/src/web/app/desktop/views/widgets/index.ts
@@ -0,0 +1,23 @@
+import Vue from 'vue';
+
+import wNotifications from './notifications.vue';
+import wTimemachine from './timemachine.vue';
+import wActivity from './activity.vue';
+import wTrends from './trends.vue';
+import wUsers from './users.vue';
+import wPolls from './polls.vue';
+import wPostForm from './post-form.vue';
+import wMessaging from './messaging.vue';
+import wChannel from './channel.vue';
+import wProfile from './profile.vue';
+
+Vue.component('mkw-notifications', wNotifications);
+Vue.component('mkw-timemachine', wTimemachine);
+Vue.component('mkw-activity', wActivity);
+Vue.component('mkw-trends', wTrends);
+Vue.component('mkw-users', wUsers);
+Vue.component('mkw-polls', wPolls);
+Vue.component('mkw-post-form', wPostForm);
+Vue.component('mkw-messaging', wMessaging);
+Vue.component('mkw-channel', wChannel);
+Vue.component('mkw-profile', wProfile);
diff --git a/src/web/app/desktop/views/components/widgets/messaging.vue b/src/web/app/desktop/views/widgets/messaging.vue
similarity index 88%
rename from src/web/app/desktop/views/components/widgets/messaging.vue
rename to src/web/app/desktop/views/widgets/messaging.vue
index ae7d6934af..2c9f473bd1 100644
--- a/src/web/app/desktop/views/components/widgets/messaging.vue
+++ b/src/web/app/desktop/views/widgets/messaging.vue
@@ -6,8 +6,8 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
-import MkMessagingRoomWindow from '../messaging-room-window.vue';
+import define from '../../../common/define-widget';
+import MkMessagingRoomWindow from '../components/messaging-room-window.vue';
 
 export default define({
 	name: 'messaging',
diff --git a/src/web/app/desktop/views/components/widgets/notifications.vue b/src/web/app/desktop/views/widgets/notifications.vue
similarity index 95%
rename from src/web/app/desktop/views/components/widgets/notifications.vue
rename to src/web/app/desktop/views/widgets/notifications.vue
index 978cf5218e..1a2b3d3f89 100644
--- a/src/web/app/desktop/views/components/widgets/notifications.vue
+++ b/src/web/app/desktop/views/widgets/notifications.vue
@@ -9,7 +9,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'notifications',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/polls.vue b/src/web/app/desktop/views/widgets/polls.vue
similarity index 97%
rename from src/web/app/desktop/views/components/widgets/polls.vue
rename to src/web/app/desktop/views/widgets/polls.vue
index f1b34ceed0..fda4e17d87 100644
--- a/src/web/app/desktop/views/components/widgets/polls.vue
+++ b/src/web/app/desktop/views/widgets/polls.vue
@@ -15,7 +15,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'polls',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/post-form.vue b/src/web/app/desktop/views/widgets/post-form.vue
similarity index 97%
rename from src/web/app/desktop/views/components/widgets/post-form.vue
rename to src/web/app/desktop/views/widgets/post-form.vue
index ab87ba7217..e51b4f3577 100644
--- a/src/web/app/desktop/views/components/widgets/post-form.vue
+++ b/src/web/app/desktop/views/widgets/post-form.vue
@@ -9,7 +9,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'post-form',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/profile.vue b/src/web/app/desktop/views/widgets/profile.vue
similarity index 97%
rename from src/web/app/desktop/views/components/widgets/profile.vue
rename to src/web/app/desktop/views/widgets/profile.vue
index 68cf469788..e067a0eb24 100644
--- a/src/web/app/desktop/views/components/widgets/profile.vue
+++ b/src/web/app/desktop/views/widgets/profile.vue
@@ -21,7 +21,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'profile',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/timemachine.vue b/src/web/app/desktop/views/widgets/timemachine.vue
similarity index 88%
rename from src/web/app/desktop/views/components/widgets/timemachine.vue
rename to src/web/app/desktop/views/widgets/timemachine.vue
index 7420482168..6db3b14c62 100644
--- a/src/web/app/desktop/views/components/widgets/timemachine.vue
+++ b/src/web/app/desktop/views/widgets/timemachine.vue
@@ -5,7 +5,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'timemachine',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/trends.vue b/src/web/app/desktop/views/widgets/trends.vue
similarity index 97%
rename from src/web/app/desktop/views/components/widgets/trends.vue
rename to src/web/app/desktop/views/widgets/trends.vue
index 934351b8a5..09cad9ba4a 100644
--- a/src/web/app/desktop/views/components/widgets/trends.vue
+++ b/src/web/app/desktop/views/widgets/trends.vue
@@ -14,7 +14,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'trends',
 	props: () => ({
diff --git a/src/web/app/desktop/views/components/widgets/users.vue b/src/web/app/desktop/views/widgets/users.vue
similarity index 98%
rename from src/web/app/desktop/views/components/widgets/users.vue
rename to src/web/app/desktop/views/widgets/users.vue
index f3a1509cfd..f7af8205ec 100644
--- a/src/web/app/desktop/views/components/widgets/users.vue
+++ b/src/web/app/desktop/views/widgets/users.vue
@@ -22,7 +22,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 
 const limit = 3;
 
diff --git a/src/web/app/init.ts b/src/web/app/init.ts
index 6011871e48..4a8f34f8d1 100644
--- a/src/web/app/init.ts
+++ b/src/web/app/init.ts
@@ -2,11 +2,6 @@
  * App initializer
  */
 
-declare const _VERSION_: string;
-declare const _LANG_: string;
-declare const _HOST_: string;
-//declare const __CONSTS__: any;
-
 import Vue from 'vue';
 import VueRouter from 'vue-router';
 import VModal from 'vue-js-modal';
@@ -19,6 +14,7 @@ require('./common/views/directives');
 
 // Register global components
 require('./common/views/components');
+require('./common/views/widgets');
 
 // Register global filters
 require('./common/filters');
@@ -35,12 +31,13 @@ import App from './app.vue';
 
 import checkForUpdate from './common/scripts/check-for-update';
 import MiOS, { API } from './common/mios';
+import { version, host, lang } from './config';
 
 /**
  * APP ENTRY POINT!
  */
 
-console.info(`Misskey v${_VERSION_} (葵 aoi)`);
+console.info(`Misskey v${version} (葵 aoi)`);
 console.info(
 	'%cここにコードを入力したり張り付けたりしないでください。アカウントが不正利用される可能性があります。',
 	'color: red; background: yellow; font-size: 16px;');
@@ -49,13 +46,13 @@ console.info(
 window.clearTimeout((window as any).mkBootTimer);
 delete (window as any).mkBootTimer;
 
-if (_HOST_ != 'localhost') {
-	document.domain = _HOST_;
+if (host != 'localhost') {
+	document.domain = host;
 }
 
 //#region Set lang attr
 const html = document.documentElement;
-html.setAttribute('lang', _LANG_);
+html.setAttribute('lang', lang);
 //#endregion
 
 //#region Set description meta tag
@@ -66,9 +63,6 @@ meta.setAttribute('content', '%i18n:common.misskey%');
 head.appendChild(meta);
 //#endregion
 
-// Set global configuration
-//(riot as any).mixin(__CONSTS__);
-
 // iOSでプライベートモードだとlocalStorageが使えないので既存のメソッドを上書きする
 try {
 	localStorage.setItem('kyoppie', 'yuppie');
@@ -132,10 +126,14 @@ export default (callback: (launch: (api: (os: MiOS) => API) => [Vue, MiOS]) => v
 			panic(e);
 		}
 
-		// 更新チェック
-		setTimeout(() => {
-			checkForUpdate(os);
-		}, 3000);
+		//#region 更新チェック
+		const preventUpdate = localStorage.getItem('preventUpdate') == 'true';
+		if (!preventUpdate) {
+			setTimeout(() => {
+				checkForUpdate(os);
+			}, 3000);
+		}
+		//#endregion
 	});
 };
 
@@ -152,7 +150,7 @@ function panic(e) {
 			+ '<hr>'
 			+ `<p>エラーコード: ${e.toString()}</p>`
 			+ `<p>ブラウザ バージョン: ${navigator.userAgent}</p>`
-			+ `<p>クライアント バージョン: ${_VERSION_}</p>`
+			+ `<p>クライアント バージョン: ${version}</p>`
 			+ '<hr>'
 			+ '<p>問題が解決しない場合は、上記の情報をお書き添えの上 syuilotan@yahoo.co.jp までご連絡ください。</p>'
 			+ '<p>Thank you for using Misskey.</p>'
diff --git a/src/web/app/mobile/script.ts b/src/web/app/mobile/script.ts
index fe73155c7c..eeadfd92b0 100644
--- a/src/web/app/mobile/script.ts
+++ b/src/web/app/mobile/script.ts
@@ -38,6 +38,7 @@ init((launch) => {
 
 	// Register components
 	require('./views/components');
+	require('./views/widgets');
 
 	// http://qiita.com/junya/items/3ff380878f26ca447f85
 	document.body.setAttribute('ontouchstart', '');
diff --git a/src/web/app/mobile/views/components/index.ts b/src/web/app/mobile/views/components/index.ts
index ea2349802b..fe65aab207 100644
--- a/src/web/app/mobile/views/components/index.ts
+++ b/src/web/app/mobile/views/components/index.ts
@@ -21,11 +21,6 @@ import userTimeline from './user-timeline.vue';
 import activity from './activity.vue';
 import widgetContainer from './widget-container.vue';
 
-//#region widgets
-import wActivity from './widgets/activity.vue';
-import wProfile from './widgets/profile.vue';
-//#endregion
-
 Vue.component('mk-ui', ui);
 Vue.component('mk-timeline', timeline);
 Vue.component('mk-posts', posts);
@@ -46,8 +41,3 @@ Vue.component('mk-user-preview', userPreview);
 Vue.component('mk-user-timeline', userTimeline);
 Vue.component('mk-activity', activity);
 Vue.component('mk-widget-container', widgetContainer);
-
-//#region widgets
-Vue.component('mkw-activity', wActivity);
-Vue.component('mkw-profile', wProfile);
-//#endregion
diff --git a/src/web/app/mobile/views/components/widgets/activity.vue b/src/web/app/mobile/views/widgets/activity.vue
similarity index 90%
rename from src/web/app/mobile/views/components/widgets/activity.vue
rename to src/web/app/mobile/views/widgets/activity.vue
index c4d30b07af..48dcafb3ed 100644
--- a/src/web/app/mobile/views/components/widgets/activity.vue
+++ b/src/web/app/mobile/views/widgets/activity.vue
@@ -10,7 +10,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 
 export default define({
 	name: 'activity',
diff --git a/src/web/app/mobile/views/widgets/index.ts b/src/web/app/mobile/views/widgets/index.ts
new file mode 100644
index 0000000000..4de912b64c
--- /dev/null
+++ b/src/web/app/mobile/views/widgets/index.ts
@@ -0,0 +1,7 @@
+import Vue from 'vue';
+
+import wActivity from './activity.vue';
+import wProfile from './profile.vue';
+
+Vue.component('mkw-activity', wActivity);
+Vue.component('mkw-profile', wProfile);
diff --git a/src/web/app/mobile/views/components/widgets/profile.vue b/src/web/app/mobile/views/widgets/profile.vue
similarity index 95%
rename from src/web/app/mobile/views/components/widgets/profile.vue
rename to src/web/app/mobile/views/widgets/profile.vue
index 9336068e57..6bc7bfffc6 100644
--- a/src/web/app/mobile/views/components/widgets/profile.vue
+++ b/src/web/app/mobile/views/widgets/profile.vue
@@ -14,7 +14,7 @@
 </template>
 
 <script lang="ts">
-import define from '../../../../common/define-widget';
+import define from '../../../common/define-widget';
 export default define({
 	name: 'profile'
 });
diff --git a/src/web/app/stats/script.ts b/src/web/app/stats/script.ts
deleted file mode 100644
index 3bbd80c339..0000000000
--- a/src/web/app/stats/script.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Stats
- */
-
-// Style
-import './style.styl';
-
-import * as riot from 'riot';
-require('./tags');
-import init from '../init';
-
-document.title = 'Misskey Statistics';
-
-/**
- * init
- */
-init(() => {
-	mount(document.createElement('mk-index'));
-});
-
-function mount(content) {
-	riot.mount(document.getElementById('app').appendChild(content));
-}
diff --git a/src/web/app/status/script.ts b/src/web/app/status/script.ts
deleted file mode 100644
index 84483acab7..0000000000
--- a/src/web/app/status/script.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Status
- */
-
-// Style
-import './style.styl';
-
-import * as riot from 'riot';
-require('./tags');
-import init from '../init';
-
-document.title = 'Misskey System Status';
-
-/**
- * init
- */
-init(() => {
-	mount(document.createElement('mk-index'));
-});
-
-function mount(content) {
-	riot.mount(document.getElementById('app').appendChild(content));
-}