diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue index 0c3cceb1b3..cf3e5c8ac1 100644 --- a/src/client/app/common/views/components/signin.vue +++ b/src/client/app/common/views/components/signin.vue @@ -12,13 +12,13 @@ </ui-input> <ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required/> <ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button> - <p style="margin: 8px 0;" v-if="twitterIntegration">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p> + <p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p> </form> </template> <script lang="ts"> import Vue from 'vue'; -import { apiUrl, host, twitterIntegration } from '../../../config'; +import { apiUrl, host } from '../../../config'; export default Vue.extend({ props: { diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue index 1d33702159..810b850831 100644 --- a/src/client/app/common/views/components/signup.vue +++ b/src/client/app/common/views/components/signup.vue @@ -34,7 +34,7 @@ <p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p> </div> </ui-input> - <div v-if="recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="recaptchaSitekey" style="margin: 16px 0;"></div> + <div v-if="meta && meta.recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="meta.recaptchaSitekey" style="margin: 16px 0;"></div> <ui-button type="submit">%i18n:@create%</ui-button> </form> </template> @@ -42,7 +42,7 @@ <script lang="ts"> import Vue from 'vue'; const getPasswordStrength = require('syuilo-password-strength'); -import { host, url, recaptchaSitekey } from '../../../config'; +import { host, url } from '../../../config'; export default Vue.extend({ data() { @@ -53,7 +53,6 @@ export default Vue.extend({ retypedPassword: '', invitationCode: '', url, - recaptchaSitekey, usernameState: null, passwordStrength: '', passwordRetypeState: null, @@ -73,6 +72,12 @@ export default Vue.extend({ this.meta = meta; }); }, + mounted() { + const head = document.getElementsByTagName('head')[0]; + const script = document.createElement('script'); + script.setAttribute('src', 'https://www.google.com/recaptcha/api.js'); + head.appendChild(script); + }, methods: { onChangeUsername() { if (this.username == '') { @@ -123,7 +128,7 @@ export default Vue.extend({ username: this.username, password: this.password, invitationCode: this.invitationCode, - 'g-recaptcha-response': recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null + 'g-recaptcha-response': this.meta.recaptchaSitekey != null ? (window as any).grecaptcha.getResponse() : null }).then(() => { (this as any).api('signin', { username: this.username, @@ -134,19 +139,11 @@ export default Vue.extend({ }).catch(() => { alert('%i18n:@some-error%'); - if (recaptchaSitekey != null) { + if (this.meta.recaptchaSitekey != null) { (window as any).grecaptcha.reset(); } }); } - }, - mounted() { - if (recaptchaSitekey != null) { - const head = document.getElementsByTagName('head')[0]; - const script = document.createElement('script'); - script.setAttribute('src', 'https://www.google.com/recaptcha/api.js'); - head.appendChild(script); - } } }); </script> diff --git a/src/client/app/config.ts b/src/client/app/config.ts index 04486ea230..76cd536a49 100644 --- a/src/client/app/config.ts +++ b/src/client/app/config.ts @@ -1,51 +1,22 @@ -declare const _HOST_: string; -declare const _HOSTNAME_: string; -declare const _URL_: string; -declare const _NAME_: string; -declare const _DESCRIPTION_: string; -declare const _API_URL_: string; -declare const _WS_URL_: string; -declare const _DOCS_URL_: string; -declare const _STATS_URL_: string; -declare const _STATUS_URL_: string; -declare const _DEV_URL_: string; -declare const _REPOSITORY_URL_: string; -declare const _FEEDBACK_URL_: string; declare const _LANG_: string; declare const _LANGS_: string; -declare const _RECAPTCHA_SITEKEY_: string; -declare const _SW_PUBLICKEY_: string; declare const _THEME_COLOR_: string; declare const _COPYRIGHT_: string; declare const _VERSION_: string; declare const _CODENAME_: string; declare const _LICENSE_: string; -declare const _GOOGLE_MAPS_API_KEY_: string; -declare const _WELCOME_BG_URL_: string; -declare const _TWITTER_INTEGRATION_: boolean; -export const host = _HOST_; -export const hostname = _HOSTNAME_; -export const url = _URL_; -export const name = _NAME_; -export const description = _DESCRIPTION_; -export const apiUrl = _API_URL_; -export const wsUrl = _WS_URL_; -export const docsUrl = _DOCS_URL_; -export const statsUrl = _STATS_URL_; -export const statusUrl = _STATUS_URL_; -export const devUrl = _DEV_URL_; -export const repositoryUrl = _REPOSITORY_URL_; -export const feedbackUrl = _FEEDBACK_URL_; +const address = new URL(location.href); + +export const host = address.host; +export const hostname = address.hostname; +export const url = address.origin; +export const apiUrl = url + '/api'; +export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://'); export const lang = _LANG_; export const langs = _LANGS_; -export const recaptchaSitekey = _RECAPTCHA_SITEKEY_; -export const swPublickey = _SW_PUBLICKEY_; export const themeColor = _THEME_COLOR_; export const copyright = _COPYRIGHT_; export const version = _VERSION_; export const codename = _CODENAME_; export const license = _LICENSE_; -export const googleMapsApiKey = _GOOGLE_MAPS_API_KEY_; -export const welcomeBgUrl = _WELCOME_BG_URL_; -export const twitterIntegration = _TWITTER_INTEGRATION_; diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue index efb9db70fa..a1c1207a7b 100644 --- a/src/client/app/desktop/views/components/notes.vue +++ b/src/client/app/desktop/views/components/notes.vue @@ -193,7 +193,7 @@ export default Vue.extend({ clearNotification() { this.unreadCount = 0; - document.title = config.name; + document.title = (this as any).os.instanceName; }, onVisibilitychange() { diff --git a/src/client/app/desktop/views/pages/home-customize.vue b/src/client/app/desktop/views/pages/home-customize.vue index 4318e89821..174fbf45ed 100644 --- a/src/client/app/desktop/views/pages/home-customize.vue +++ b/src/client/app/desktop/views/pages/home-customize.vue @@ -4,11 +4,10 @@ <script lang="ts"> import Vue from 'vue'; -import * as config from '../../../config'; export default Vue.extend({ mounted() { - document.title = `${config.name} - %i18n:@title%`; + document.title = `${(this as any).os.instanceName} - %i18n:@title%`; } }); </script> diff --git a/src/client/app/desktop/views/pages/home.vue b/src/client/app/desktop/views/pages/home.vue index 3d3c24bfa4..c7ff0904e0 100644 --- a/src/client/app/desktop/views/pages/home.vue +++ b/src/client/app/desktop/views/pages/home.vue @@ -7,7 +7,6 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; -import * as config from '../../../config'; export default Vue.extend({ props: { @@ -17,7 +16,7 @@ export default Vue.extend({ } }, mounted() { - document.title = config.name; + document.title = (this as any).os.instanceName; Progress.start(); }, diff --git a/src/client/app/desktop/views/pages/share.vue b/src/client/app/desktop/views/pages/share.vue index 4a7bdb14cd..4dd6080690 100644 --- a/src/client/app/desktop/views/pages/share.vue +++ b/src/client/app/desktop/views/pages/share.vue @@ -12,12 +12,11 @@ <script lang="ts"> import Vue from 'vue'; -import * as config from '../../../config'; export default Vue.extend({ data() { return { - name: config.name, + name: (this as any).os.instanceName, posted: false, text: new URLSearchParams(location.search).get('text') }; diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue index 585a23de2d..ac2f921a21 100644 --- a/src/client/app/desktop/views/pages/welcome.vue +++ b/src/client/app/desktop/views/pages/welcome.vue @@ -5,7 +5,7 @@ <template v-if="$store.state.device.darkmode">%fa:moon%</template> <template v-else>%fa:R moon%</template> </button> - <div class="body" :style="{ backgroundImage: `url('${ welcomeBgUrl }')` }"> + <div class="body"> <div class="container"> <div class="info"> <span><b>{{ host }}</b></span> @@ -46,22 +46,26 @@ <script lang="ts"> import Vue from 'vue'; -import { host, name, description, copyright, welcomeBgUrl } from '../../../config'; +import { host, copyright } from '../../../config'; export default Vue.extend({ data() { return { stats: null, copyright, - welcomeBgUrl, host, - name, - description, + name: 'Misskey', + description: '', pointerInterval: null, tags: [] }; }, created() { + (this as any).os.getMeta().then(meta => { + this.name = meta.name; + this.description = meta.description; + }); + (this as any).api('stats').then(stats => { this.stats = stats; }); diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts index 565c8bf1f5..664848b5e7 100644 --- a/src/client/app/mios.ts +++ b/src/client/app/mios.ts @@ -70,6 +70,10 @@ export default class MiOS extends EventEmitter { chachedAt: Date; }; + public get instanceName() { + return this.meta ? this.meta.data.name : 'Misskey'; + } + private isMetaFetching = false; public app: Vue; diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue index cce81d1b78..714e521c0f 100644 --- a/src/client/app/mobile/views/components/notes.vue +++ b/src/client/app/mobile/views/components/notes.vue @@ -38,7 +38,6 @@ <script lang="ts"> import Vue from 'vue'; import getNoteSummary from '../../../../../misc/get-note-summary'; -import * as config from '../../../config'; const displayLimit = 30; @@ -190,7 +189,7 @@ export default Vue.extend({ clearNotification() { this.unreadCount = 0; - document.title = config.name; + document.title = (this as any).os.instanceName; }, onVisibilitychange() { diff --git a/src/client/app/mobile/views/components/ui.header.vue b/src/client/app/mobile/views/components/ui.header.vue index b87c6f1eb7..a616586c56 100644 --- a/src/client/app/mobile/views/components/ui.header.vue +++ b/src/client/app/mobile/views/components/ui.header.vue @@ -8,7 +8,7 @@ <button class="nav" @click="$parent.isDrawerOpening = true">%fa:bars%</button> <template v-if="hasUnreadNotification || hasUnreadMessagingMessage || hasGameInvitation">%fa:circle%</template> <h1> - <slot>config.name</slot> + <slot>{{ os.instanceName }}</slot> </h1> <slot name="func"></slot> </div> @@ -20,13 +20,11 @@ <script lang="ts"> import Vue from 'vue'; import * as anime from 'animejs'; -import * as config from '../../../config'; export default Vue.extend({ props: ['func'], data() { return { - config, hasGameInvitation: false, connection: null, connectionId: null diff --git a/src/client/app/mobile/views/pages/drive.vue b/src/client/app/mobile/views/pages/drive.vue index 72427a4780..c7cbe0f72e 100644 --- a/src/client/app/mobile/views/pages/drive.vue +++ b/src/client/app/mobile/views/pages/drive.vue @@ -25,7 +25,6 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -44,7 +43,7 @@ export default Vue.extend({ window.addEventListener('popstate', this.onPopState); }, mounted() { - document.title = `${config.name} Drive`; + document.title = `${(this as any).os.instanceName} Drive`; document.documentElement.style.background = '#fff'; }, beforeDestroy() { @@ -64,7 +63,7 @@ export default Vue.extend({ (this.$refs as any).browser.openContextMenu(); }, onMoveRoot(silent) { - const title = `${config.name} Drive`; + const title = `${(this as any).os.instanceName} Drive`; if (!silent) { // Rewrite URL @@ -77,7 +76,7 @@ export default Vue.extend({ this.folder = null; }, onOpenFolder(folder, silent) { - const title = `${folder.name} | ${config.name} Drive`; + const title = `${folder.name} | ${(this as any).os.instanceName} Drive`; if (!silent) { // Rewrite URL @@ -90,7 +89,7 @@ export default Vue.extend({ this.folder = folder; }, onOpenFile(file, silent) { - const title = `${file.name} | ${config.name} Drive`; + const title = `${file.name} | ${(this as any).os.instanceName} Drive`; if (!silent) { // Rewrite URL diff --git a/src/client/app/mobile/views/pages/favorites.vue b/src/client/app/mobile/views/pages/favorites.vue index 491890bb0e..6b9aec6a0c 100644 --- a/src/client/app/mobile/views/pages/favorites.vue +++ b/src/client/app/mobile/views/pages/favorites.vue @@ -14,7 +14,6 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -29,7 +28,7 @@ export default Vue.extend({ this.fetch(); }, mounted() { - document.title = `${config.name} | %i18n:@notifications%`; + document.title = `${(this as any).os.instanceName} | %i18n:@notifications%`; }, methods: { fetch() { diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue index 5bba534ba0..421c150856 100644 --- a/src/client/app/mobile/views/pages/followers.vue +++ b/src/client/app/mobile/views/pages/followers.vue @@ -21,7 +21,6 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import parseAcct from '../../../../../misc/acct/parse'; import getUserName from '../../../../../misc/get-user-name'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -50,7 +49,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue index cdc009b768..ff201ff2bd 100644 --- a/src/client/app/mobile/views/pages/following.vue +++ b/src/client/app/mobile/views/pages/following.vue @@ -20,7 +20,6 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import parseAcct from '../../../../../misc/acct/parse'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -49,7 +48,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + config.name; + document.title = '%i18n:@followers-of%'.replace('{}', this.name) + ' | ' + (this as any).os.instanceName; }); }, onLoaded() { diff --git a/src/client/app/mobile/views/pages/games/reversi.vue b/src/client/app/mobile/views/pages/games/reversi.vue index 448c9b8d77..d6849a1c11 100644 --- a/src/client/app/mobile/views/pages/games/reversi.vue +++ b/src/client/app/mobile/views/pages/games/reversi.vue @@ -7,11 +7,10 @@ <script lang="ts"> import Vue from 'vue'; -import * as config from '../../../../config'; export default Vue.extend({ mounted() { - document.title = `${config.name} %i18n:@reversi%`; + document.title = `${(this as any).os.instanceName} %i18n:@reversi%`; document.documentElement.style.background = '#fff'; }, methods: { diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue index c1ed97ac13..706c9cd28b 100644 --- a/src/client/app/mobile/views/pages/home.vue +++ b/src/client/app/mobile/views/pages/home.vue @@ -49,7 +49,6 @@ import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; import XTl from './home.timeline.vue'; -import * as config from '../../../config'; export default Vue.extend({ components: { @@ -97,7 +96,7 @@ export default Vue.extend({ }, mounted() { - document.title = config.name; + document.title = (this as any).os.instanceName; Progress.start(); diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue index e2016fc82a..401397d856 100644 --- a/src/client/app/mobile/views/pages/messaging-room.vue +++ b/src/client/app/mobile/views/pages/messaging-room.vue @@ -11,7 +11,6 @@ <script lang="ts"> import Vue from 'vue'; import parseAcct from '../../../../../misc/acct/parse'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -48,7 +47,7 @@ export default Vue.extend({ this.user = user; this.fetching = false; - document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | ${config.name}`; + document.title = `%i18n:@messaging%: ${Vue.filter('userName')(this.user)} | ${(this as any).os.instanceName}`; }); } } diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue index 9f2beb860c..3883505281 100644 --- a/src/client/app/mobile/views/pages/messaging.vue +++ b/src/client/app/mobile/views/pages/messaging.vue @@ -8,11 +8,10 @@ <script lang="ts"> import Vue from 'vue'; import getAcct from '../../../../../misc/acct/render'; -import * as config from '../../../config'; export default Vue.extend({ mounted() { - document.title = `${config.name} %i18n:@messaging%`; + document.title = `${(this as any).os.instanceName} %i18n:@messaging%`; }, methods: { navigate(user) { diff --git a/src/client/app/mobile/views/pages/note.vue b/src/client/app/mobile/views/pages/note.vue index 8b1095c509..fee60b350e 100644 --- a/src/client/app/mobile/views/pages/note.vue +++ b/src/client/app/mobile/views/pages/note.vue @@ -16,7 +16,6 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; -import * as config from '../../../config'; export default Vue.extend({ data() { @@ -32,7 +31,7 @@ export default Vue.extend({ this.fetch(); }, mounted() { - document.title = config.name; + document.title = (this as any).os.instanceName; }, methods: { fetch() { diff --git a/src/client/app/mobile/views/pages/search.vue b/src/client/app/mobile/views/pages/search.vue index 0b37a3c7bd..6e8118ff94 100644 --- a/src/client/app/mobile/views/pages/search.vue +++ b/src/client/app/mobile/views/pages/search.vue @@ -12,7 +12,6 @@ <script lang="ts"> import Vue from 'vue'; import Progress from '../../../common/scripts/loading'; -import * as config from '../../../config'; const limit = 20; @@ -35,7 +34,7 @@ export default Vue.extend({ } }, mounted() { - document.title = `%i18n:@search%: ${this.q} | ${config.name}`; + document.title = `%i18n:@search%: ${this.q} | ${(this as any).os.instanceName}`; this.fetch(); }, diff --git a/src/client/app/mobile/views/pages/share.vue b/src/client/app/mobile/views/pages/share.vue index dcb55e6702..588b0941e6 100644 --- a/src/client/app/mobile/views/pages/share.vue +++ b/src/client/app/mobile/views/pages/share.vue @@ -12,12 +12,11 @@ <script lang="ts"> import Vue from 'vue'; -import * as config from '../../../config'; export default Vue.extend({ data() { return { - name: config.name, + name: (this as any).os.instanceName, posted: false, text: new URLSearchParams(location.search).get('text') }; diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue index 11ca1caebf..5ecd0b6950 100644 --- a/src/client/app/mobile/views/pages/user.vue +++ b/src/client/app/mobile/views/pages/user.vue @@ -67,7 +67,6 @@ import * as age from 's-age'; import parseAcct from '../../../../../misc/acct/parse'; import Progress from '../../../common/scripts/loading'; import XHome from './user/home.vue'; -import * as config from '../../../config'; export default Vue.extend({ components: { @@ -107,7 +106,7 @@ export default Vue.extend({ this.fetching = false; Progress.done(); - document.title = Vue.filter('userName')(this.user) + ' | ' + config.name; + document.title = Vue.filter('userName')(this.user) + ' | ' + (this as any).os.instanceName; }); } } diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue index f8a7ff1c80..49227790ff 100644 --- a/src/client/app/mobile/views/pages/welcome.vue +++ b/src/client/app/mobile/views/pages/welcome.vue @@ -30,7 +30,7 @@ <script lang="ts"> import Vue from 'vue'; -import { apiUrl, copyright, host, name, description } from '../../../config'; +import { apiUrl, copyright, host } from '../../../config'; export default Vue.extend({ data() { @@ -39,12 +39,17 @@ export default Vue.extend({ copyright, stats: null, host, - name, - description, + name: 'Misskey', + description: '', tags: [] }; }, created() { + (this as any).os.getMeta().then(meta => { + this.name = meta.name; + this.description = meta.description; + }); + (this as any).api('stats').then(stats => { this.stats = stats; }); diff --git a/src/client/app/mobile/views/pages/widgets.vue b/src/client/app/mobile/views/pages/widgets.vue index b90d710c67..a83103632e 100644 --- a/src/client/app/mobile/views/pages/widgets.vue +++ b/src/client/app/mobile/views/pages/widgets.vue @@ -53,7 +53,6 @@ import Vue from 'vue'; import * as XDraggable from 'vuedraggable'; import * as uuid from 'uuid'; -import * as config from '../../../config'; export default Vue.extend({ components: { @@ -103,7 +102,7 @@ export default Vue.extend({ }, mounted() { - document.title = config.name; + document.title = (this as any).os.instanceName; }, methods: { diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 000a56024d..2b39f26b8e 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -20,6 +20,9 @@ export default () => new Promise(async (res, rej) => { version: pkg.version, clientVersion: client.version, + name: config.name || 'Misskey', + description: config.description, + secure: config.https != null, machine: os.hostname(), os: os.platform(), @@ -29,6 +32,8 @@ export default () => new Promise(async (res, rej) => { cores: os.cpus().length }, broadcasts: meta.broadcasts, - disableRegistration: meta.disableRegistration + disableRegistration: meta.disableRegistration, + recaptchaSitekey: config.recaptcha ? config.recaptcha.site_key : null, + swPublickey: config.sw ? config.sw.public_key : null }); }); diff --git a/webpack.config.ts b/webpack.config.ts index 8dca4c0ee3..4c6da768da 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -16,7 +16,6 @@ import I18nReplacer from './src/misc/i18n'; import { pattern as i18nPattern, replacement as i18nReplacement } from './webpack/i18n'; import { pattern as faPattern, replacement as faReplacement } from './src/misc/fa'; const constants = require('./src/const.json'); -import config from './src/config'; import { licenseHtml } from './src/misc/license'; const locales = require('./locales'); @@ -58,8 +57,6 @@ const isProduction = process.env.NODE_ENV == 'production'; const entry = { desktop: './src/client/app/desktop/script.ts', mobile: './src/client/app/mobile/script.ts', - //stats: './src/client/app/stats/script.ts', - //status: './src/client/app/status/script.ts', dev: './src/client/app/dev/script.ts', auth: './src/client/app/auth/script.ts', sw: './src/client/app/sw.js' @@ -72,31 +69,13 @@ const output = { //#region Define consts const consts = { - _RECAPTCHA_SITEKEY_: config.recaptcha ? config.recaptcha.site_key : null, - _SW_PUBLICKEY_: config.sw ? config.sw.public_key : null, _THEME_COLOR_: constants.themeColor, _COPYRIGHT_: constants.copyright, _VERSION_: version, _CODENAME_: codename, - _STATUS_URL_: config.status_url, - _STATS_URL_: config.stats_url, - _DOCS_URL_: config.docs_url, - _API_URL_: config.api_url, - _WS_URL_: config.ws_url, - _DEV_URL_: config.dev_url, - _REPOSITORY_URL_: config.maintainer.repository_url, - _FEEDBACK_URL_: config.maintainer.feedback_url, _LANG_: '%lang%', _LANGS_: Object.keys(locales).map(l => [l, locales[l].meta.lang]), - _NAME_: config.name, - _DESCRIPTION_: config.description, - _HOST_: config.host, - _HOSTNAME_: config.hostname, - _URL_: config.url, - _LICENSE_: licenseHtml, - _GOOGLE_MAPS_API_KEY_: config.google_maps_api_key, - _WELCOME_BG_URL_: config.welcome_bg_url, - _TWITTER_INTEGRATION_: config.twitter != null + _LICENSE_: licenseHtml }; const _consts: { [ key: string ]: any } = {};