From 6974811658fbb6686d58de1d3530f03675352764 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 13 Jul 2019 20:27:31 -0400 Subject: [PATCH] fix: editor locale redirect + welcome page localization --- client/components/editor.vue | 2 +- server/controllers/common.js | 4 ++- server/graph/schemas/analytics.graphql | 48 ++++++++++++++++++++++++-- server/jobs/fetch-graph-locale.js | 2 +- server/views/legacy/login.pug | 10 +++--- server/views/legacy/page.pug | 4 +-- server/views/welcome.pug | 2 +- 7 files changed, 58 insertions(+), 14 deletions(-) diff --git a/client/components/editor.vue b/client/components/editor.vue index a50d7251..124813dc 100644 --- a/client/components/editor.vue +++ b/client/components/editor.vue @@ -205,7 +205,7 @@ export default { }) this.$store.set('editor/id', _.get(resp, 'page.id')) this.$store.set('editor/mode', 'update') - window.location.assign(`/${this.$store.get('page/path')}`) + window.location.assign(`/${this.$store.get('page/locale')}/${this.$store.get('page/path')}`) } else { throw new Error(_.get(resp, 'responseResult.message')) } diff --git a/server/controllers/common.js b/server/controllers/common.js index 9465e76c..0bce891c 100644 --- a/server/controllers/common.js +++ b/server/controllers/common.js @@ -171,6 +171,8 @@ router.get('/*', async (req, res, next) => { return res.redirect(`/${pageArgs.locale}/${pageArgs.path}`) } + req.i18n.changeLanguage(pageArgs.locale) + if (!WIKI.auth.checkAccess(req.user, ['read:pages'], pageArgs)) { _.set(res.locals, 'pageMeta.title', 'Unauthorized') return res.status(403).render('unauthorized', { action: 'view' }) @@ -206,7 +208,7 @@ router.get('/*', async (req, res, next) => { } } else if (pageArgs.path === 'home') { _.set(res.locals, 'pageMeta.title', 'Welcome') - res.render('welcome') + res.render('welcome', { locale: pageArgs.locale }) } else { _.set(res.locals, 'pageMeta.title', 'Page Not Found') if (WIKI.auth.checkAccess(req.user, ['write:pages'], pageArgs)) { diff --git a/server/graph/schemas/analytics.graphql b/server/graph/schemas/analytics.graphql index 8783ca2d..437725a0 100644 --- a/server/graph/schemas/analytics.graphql +++ b/server/graph/schemas/analytics.graphql @@ -14,18 +14,32 @@ extend type Mutation { # QUERIES # ----------------------------------------------- +""" +Queries for Analytics +""" type AnalyticsQuery { + """ + Fetch list of Analytics providers and their configuration + """ providers( + "Return only active providers" isEnabled: Boolean - ): [AnalyticsProvider] + ): [AnalyticsProvider] @auth(requires: ["manage:system"]) } # ----------------------------------------------- # MUTATIONS # ----------------------------------------------- +""" +Mutations for Analytics +""" type AnalyticsMutation { + """ + Update a list of Analytics providers and their configuration + """ updateProviders( + "List of providers" providers: [AnalyticsProviderInput]! ): DefaultResponse @auth(requires: ["manage:system"]) } @@ -34,20 +48,48 @@ type AnalyticsMutation { # TYPES # ----------------------------------------------- +""" +Analytics Provider +""" type AnalyticsProvider { + "Is the provider active" isEnabled: Boolean! + + "Unique identifier for this provider" key: String! + + "List of configuration properties, formatted as stringified JSON objects" props: [String] + + "Name of the provider" title: String! + + "Short description of the provider" description: String + + "Is the provider available for use" isAvailable: Boolean + + "Path to the provider logo" logo: String + + "Website of the provider" website: String - icon: String - config: [KeyValuePair] @auth(requires: ["manage:system"]) + + "Configuration values for this provider" + config: [KeyValuePair] } + +""" +Analytics Configuration Input +""" input AnalyticsProviderInput { + "Is the provider active" isEnabled: Boolean! + + "Unique identifier of the provider" key: String! + + "Configuration values for this provider" config: [KeyValuePairInput] } diff --git a/server/jobs/fetch-graph-locale.js b/server/jobs/fetch-graph-locale.js index 21201faf..7a38cfe9 100644 --- a/server/jobs/fetch-graph-locale.js +++ b/server/jobs/fetch-graph-locale.js @@ -37,7 +37,7 @@ module.exports = async (localeCode) => { const locales = await WIKI.cache.get('locales') if (locales) { const currentLocale = _.find(locales, ['code', localeCode]) || {} - const existingLocale = await WIKI.models.locales.query().where('code', localeCode) + const existingLocale = await WIKI.models.locales.query().where('code', localeCode).first() if (existingLocale) { await WIKI.models.locales.query().patch({ strings: lcObj diff --git a/server/views/legacy/login.pug b/server/views/legacy/login.pug index 9952804e..cd519561 100644 --- a/server/views/legacy/login.pug +++ b/server/views/legacy/login.pug @@ -2,7 +2,7 @@ extends master.pug block body #root - .login-deprecated Your browser is outdated. Upgrade to a #[a(href='https://bestvpn.org/outdatedbrowser/en', rel='nofollow') modern browser]. + .login-deprecated!= t('outdatedBrowserWarning', { modernBrowser: '' + t('modernBrowser') + '', interpolation: { escapeValue: false } }) .login .login-dialog if err @@ -12,12 +12,12 @@ block body select(name='strategy') each str in formStrategies option(value=str.key, selected)= str.title - input(type='text', name='user', placeholder='Username / Email') - input(type='password', name='pass', placeholder='Password') - button(type='submit') Login + input(type='text', name='user', placeholder=t('auth:fields.emailUser')) + input(type='password', name='pass', placeholder=t('auth:fields.password')) + button(type='submit')= t('auth:actions.login') if socialStrategies.length .login-social - h2 or login using... + h2= t('auth:orLoginUsingStrategy') each str in socialStrategies a.login-social-icon(href='/login/' + str.key, class=str.color) != str.icon diff --git a/server/views/legacy/page.pug b/server/views/legacy/page.pug index f10a9b41..6dd02785 100644 --- a/server/views/legacy/page.pug +++ b/server/views/legacy/page.pug @@ -10,7 +10,7 @@ block body #root .header span.header-title= siteConfig.title - span.header-deprecated Your browser is outdated. Upgrade to a #[a(href='https://bestvpn.org/outdatedbrowser/en', rel='nofollow') modern browser]. + span.header-deprecated!= t('outdatedBrowserWarning', { modernBrowser: '' + t('modernBrowser') + '', interpolation: { escapeValue: false } }) span.header-login if !isAuthenticated a(href='/login', title='Login') @@ -43,7 +43,7 @@ block body div!= page.render if page.toc.length .toc - .toc-title Table of Contents + .toc-title= t('page.toc') each tocItem, tocIdx in page.toc a.toc-tile(href='#' + tocItem.anchor) i.material-icons arrow_right diff --git a/server/views/welcome.pug b/server/views/welcome.pug index 6f0ae921..30027788 100644 --- a/server/views/welcome.pug +++ b/server/views/welcome.pug @@ -8,6 +8,6 @@ block body img.animated.fadeIn(src='/svg/logo-wikijs.svg', alt='Wiki.js') .headline= t('welcome.title') .subheading.mt-3= t('welcome.subtitle') - v-btn.mt-5(color='primary', href='/e/home', large) + v-btn.mt-5(color='primary', href='/e/' + locale + '/home', large) v-icon(left) add span= t('welcome.createhome')