diff --git a/client/components/admin/admin-general.vue b/client/components/admin/admin-general.vue
index 1ddcf341..79928ab0 100644
--- a/client/components/admin/admin-general.vue
+++ b/client/components/admin/admin-general.vue
@@ -61,36 +61,41 @@
persistent-hint
)
v-divider
- v-subheader Analytics
+ v-subheader Analytics #[v-chip.ml-2(label, color='grey', small, outline) coming soon]
.px-3.pb-3
- v-text-field(
+ v-select.mt-2(
outline
- label='Google Analytics ID'
+ label='Analytics Service Provider'
+ :items='analyticsServices'
+ v-model='config.analyticsService'
+ prepend-icon='timeline'
+ )
+ v-text-field.mt-2(
+ v-if='config.analyticsService !== ``'
+ outline
+ label='Property Tracking ID'
:counter='255'
- v-model='config.ga'
+ v-model='config.analyticsId'
prepend-icon='timeline'
persistent-hint
- hint='Property tracking ID for Google Analytics. Leave empty to disable.'
+ hint='A unique identifier provided by your analytics service provider.'
)
v-flex(lg6 xs12)
v-card.wiki-form
v-toolbar(color='primary', dark, dense, flat)
v-toolbar-title
.subheading {{ $t('admin:general.siteBranding') }}
- v-spacer
- v-chip(label, color='white', small).primary--text coming soon
- v-subheader Logo
+ v-subheader Logo #[v-chip.ml-2(label, color='grey', small, outline) coming soon]
v-card-text
v-layout.px-3(row, align-center)
v-avatar(size='120', :color='$vuetify.dark ? `grey darken-2` : `grey lighten-3`', :tile='config.logoIsSquare')
.ml-4
- v-layout(row, align-center)
- v-btn(color='teal', depressed, dark)
- v-icon(left) cloud_upload
- span Upload Logo
- v-btn(color='teal', depressed, disabled)
- v-icon(left) clear
- span Clear
+ v-btn.mx-0(color='teal', depressed, disabled)
+ v-icon(left) cloud_upload
+ span Upload Logo
+ v-btn(color='teal', depressed, disabled)
+ v-icon(left) clear
+ span Clear
.caption.grey--text An image of 120x120 pixels is recommended for best results.
.caption.grey--text SVG, PNG or JPG files only.
v-switch(
@@ -117,6 +122,8 @@
v-toolbar(color='primary', dark, dense, flat)
v-toolbar-title
.subheading Features
+ v-spacer
+ v-chip(label, color='white', small).primary--text coming soon
v-card-text
v-switch(
label='Page Ratings'
@@ -153,6 +160,11 @@ import siteUpdateConfigMutation from 'gql/admin/site/site-mutation-save-config.g
export default {
data() {
return {
+ analyticsServices: [
+ { text: 'None', value: '' },
+ { text: 'Google Analytics', value: 'ga' },
+ { text: 'Google Tag Manager', value: 'gtm' },
+ ],
metaRobots: [
{ text: 'Index', value: 'index' },
{ text: 'Follow', value: 'follow' },
@@ -164,7 +176,8 @@ export default {
title: '',
description: '',
robots: [],
- ga: '',
+ analyticsService: '',
+ analyticsId: '',
company: '',
hasLogo: false,
logoIsSquare: false,
@@ -189,7 +202,8 @@ export default {
title: this.config.title || '',
description: this.config.description || '',
robots: this.config.robots || [],
- ga: this.config.ga || '',
+ analyticsService: this.config.analyticsService || '',
+ analyticsId: this.config.analyticsId || '',
company: this.config.company || '',
hasLogo: this.config.hasLogo || false,
logoIsSquare: this.config.logoIsSquare || false,
diff --git a/client/components/admin/admin-groups.vue b/client/components/admin/admin-groups.vue
index 12009a15..0a43b695 100644
--- a/client/components/admin/admin-groups.vue
+++ b/client/components/admin/admin-groups.vue
@@ -54,7 +54,7 @@
span System Group
template(slot='no-data')
v-alert.ma-3(icon='warning', :value='true', outline) No groups to display.
- .text-xs-center.py-2(v-if='groups.length > 15')
+ .text-xs-center.py-2(v-if='this.pages > 0')
v-pagination(v-model='pagination.page', :length='pages')
diff --git a/client/components/admin/admin-pages.vue b/client/components/admin/admin-pages.vue
index 1b884364..dec02278 100644
--- a/client/components/admin/admin-pages.vue
+++ b/client/components/admin/admin-pages.vue
@@ -6,11 +6,11 @@
img(src='/svg/icon-file.svg', alt='Page', style='width: 80px;')
.admin-header-title
.headline.blue--text.text--darken-2 Pages
- .subheading.grey--text Manage pages
+ .subheading.grey--text Manage pages #[v-chip(label, color='primary', small).white--text coming soon]
v-spacer
- v-btn(color='grey', outline, @click='refresh', large)
+ v-btn(color='grey', outline, @click='refresh', large, disabled)
v-icon.grey--text refresh
- v-btn(color='primary', depressed, large, @click='newpage')
+ v-btn(color='primary', depressed, large, @click='newpage', disabled)
v-icon(left) add
span New Page
v-card.mt-3
@@ -31,7 +31,7 @@
td {{ props.item.updatedAt | moment('calendar') }}
template(slot='no-data')
v-alert.ma-3(icon='warning', :value='true', outline) No pages to display.
- .text-xs-center.py-2(v-if='groups.length > 15')
+ .text-xs-center.py-2(v-if='this.pages > 0')
v-pagination(v-model='pagination.page', :length='pages')
page-selector(v-model='pageSelectorShown', mode='new')
diff --git a/client/components/admin/admin-search.vue b/client/components/admin/admin-search.vue
index 07f1d241..06c2fce3 100644
--- a/client/components/admin/admin-search.vue
+++ b/client/components/admin/admin-search.vue
@@ -35,6 +35,7 @@
:value='engine.key'
color='primary'
hide-details
+ disabled
)
v-tab-item(v-for='(engine, n) in activeEngines', :key='engine.key', :transition='false', :reverse-transition='false')
diff --git a/client/components/admin/admin-users-authorize.vue b/client/components/admin/admin-users-authorize.vue
deleted file mode 100644
index 8fdd7775..00000000
--- a/client/components/admin/admin-users-authorize.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-
- v-dialog(v-model='isShown', max-width='550')
- v-card.wiki-form
- .dialog-header.is-short
- span Authorize Social User
- v-spacer
- v-chip(label, color='white', small).primary--text coming soon
- v-card-text
- v-alert.mb-4.deep-orange.lighten-5.radius-7(
- v-if='providers.length < 1'
- color='deep-orange'
- icon='warning'
- outline
- :value='true'
- ) You must enable at least 1 social strategy first.
- v-select.md2(
- :items='providers'
- item-text='title'
- item-value='key'
- outline
- prepend-icon='business'
- v-model='provider'
- label='Provider'
- )
- v-text-field.md2(
- outline
- prepend-icon='email'
- v-model='email'
- label='Email Address'
- ref='emailInput'
- )
- v-text-field.md2(
- outline
- prepend-icon='person'
- v-model='name'
- label='Name'
- )
- v-card-chin
- v-spacer
- v-btn(flat, @click='isShown = false') Cancel
- v-btn(color='primary', @click='authorizeUser', :disabled='providers.length < 1 || true') Authorize
-
-
-
diff --git a/client/components/admin/admin-users-create.vue b/client/components/admin/admin-users-create.vue
index c9842fd0..d813d9f7 100644
--- a/client/components/admin/admin-users-create.vue
+++ b/client/components/admin/admin-users-create.vue
@@ -1,8 +1,18 @@
v-dialog(v-model='isShown', max-width='550')
v-card.wiki-form
- .dialog-header.is-short New Local User
+ .dialog-header.is-short
+ span New User
v-card-text
+ v-select.md2(
+ :items='providers'
+ item-text='title'
+ item-value='key'
+ outline
+ prepend-icon='business'
+ v-model='provider'
+ label='Provider'
+ )
v-text-field.md2(
outline
prepend-icon='email'
@@ -11,12 +21,7 @@
ref='emailInput'
)
v-text-field.md2(
- outline
- prepend-icon='person'
- v-model='name'
- label='Name'
- )
- v-text-field.md2(
+ v-if='provider === `local`'
outline
prepend-icon='lock'
append-icon='casino'
@@ -25,15 +30,24 @@
counter='255'
@click:append='generatePwd'
)
+ v-text-field.md2(
+ outline
+ prepend-icon='person'
+ v-model='name'
+ label='Name'
+ )
v-card-chin
v-spacer
v-btn(flat, @click='isShown = false') Cancel
- v-btn(color='primary', @click='createUser') Create User
+ v-btn(color='primary', @click='newUser') Create
diff --git a/client/components/admin/admin-users.vue b/client/components/admin/admin-users.vue
index e2458a29..b637d8ea 100644
--- a/client/components/admin/admin-users.vue
+++ b/client/components/admin/admin-users.vue
@@ -10,12 +10,9 @@
v-spacer
v-btn(outline, color='grey', large, @click='refresh')
v-icon refresh
- v-btn(color='primary', large, outline, @click='authorizeUser')
- v-icon(left) lock_outline
- span Authorize Social User
v-btn(color='primary', large, depressed, @click='createUser')
v-icon(left) add
- span New Local User
+ span New User
v-card.mt-3
v-data-table(
v-model='selected'
@@ -54,24 +51,21 @@
template(slot='no-data')
.pa-3
v-alert(icon='warning', :value='true', outline) No users to display!
- v-card-chin
+ v-card-chin(v-if='this.pages > 0')
v-spacer
v-pagination(v-model='pagination.page', :length='pages')
v-spacer
- user-authorize(v-model='isAuthorizeDialogShown')
user-create(v-model='isCreateDialogShown')
+
+
diff --git a/client/components/editor/editor-modal-unsaved.vue b/client/components/editor/editor-modal-unsaved.vue
new file mode 100644
index 00000000..e5e583cb
--- /dev/null
+++ b/client/components/editor/editor-modal-unsaved.vue
@@ -0,0 +1,40 @@
+
+ v-dialog(v-model='isShown', max-width='550')
+ v-card.wiki-form
+ .dialog-header.is-short.is-red
+ v-icon.mr-2(color='white') warning
+ span Discard Unsaved Changes?
+ v-card-text
+ .body-2 You have unsaved changes. Are you sure you want to leave the editor and discard any modifications you made since the last save?
+ v-card-chin
+ v-spacer
+ v-btn(flat, @click='isShown = false') Cancel
+ v-btn(color='red', @click='discard', dark) Discard Changes
+
+
+
diff --git a/client/graph/admin/site/site-mutation-save-config.gql b/client/graph/admin/site/site-mutation-save-config.gql
index d018f159..6a0fc4e2 100644
--- a/client/graph/admin/site/site-mutation-save-config.gql
+++ b/client/graph/admin/site/site-mutation-save-config.gql
@@ -3,7 +3,8 @@ mutation (
$title: String!
$description: String!
$robots: [String]!
- $ga: String!
+ $analyticsService: String!
+ $analyticsId: String!
$company: String!
$hasLogo: Boolean!
$logoIsSquare: Boolean!
@@ -17,7 +18,8 @@ mutation (
title: $title,
description: $description,
robots: $robots,
- ga: $ga,
+ analyticsService: $analyticsService,
+ analyticsId: $analyticsId,
company: $company,
hasLogo: $hasLogo,
logoIsSquare: $logoIsSquare,
diff --git a/client/graph/admin/site/site-query-config.gql b/client/graph/admin/site/site-query-config.gql
index 1ef1f3ec..0a1295d7 100644
--- a/client/graph/admin/site/site-query-config.gql
+++ b/client/graph/admin/site/site-query-config.gql
@@ -5,7 +5,8 @@
title
description
robots
- ga
+ analyticsService
+ analyticsId
company
hasLogo
logoIsSquare
diff --git a/client/store/editor.js b/client/store/editor.js
index 5af3d0b7..8011f427 100644
--- a/client/store/editor.js
+++ b/client/store/editor.js
@@ -1,6 +1,7 @@
import { make } from 'vuex-pathify'
const state = {
+ editor: '',
content: '',
mode: 'create'
}
diff --git a/server/graph/resolvers/site.js b/server/graph/resolvers/site.js
index ee6356c1..0e1cf308 100644
--- a/server/graph/resolvers/site.js
+++ b/server/graph/resolvers/site.js
@@ -31,7 +31,8 @@ module.exports = {
WIKI.config.seo = {
description: args.description,
robots: args.robots,
- ga: args.ga
+ analyticsService: args.analyticsService,
+ analyticsId: args.analyticsId
}
WIKI.config.logo = {
hasLogo: args.hasLogo,
diff --git a/server/graph/schemas/site.graphql b/server/graph/schemas/site.graphql
index 64455ae5..ae23ca8d 100644
--- a/server/graph/schemas/site.graphql
+++ b/server/graph/schemas/site.graphql
@@ -28,7 +28,8 @@ type SiteMutation {
title: String!
description: String!
robots: [String]!
- ga: String!
+ analyticsService: String!
+ analyticsId: String!
company: String!
hasLogo: Boolean!
logoIsSquare: Boolean!
@@ -47,7 +48,8 @@ type SiteConfig {
title: String!
description: String!
robots: [String]!
- ga: String!
+ analyticsService: String!
+ analyticsId: String!
company: String!
hasLogo: Boolean!
logoIsSquare: Boolean!
diff --git a/server/setup.js b/server/setup.js
index 961429ad..b35cde35 100644
--- a/server/setup.js
+++ b/server/setup.js
@@ -140,7 +140,8 @@ module.exports = () => {
_.set(WIKI.config, 'seo', {
description: '',
robots: ['index', 'follow'],
- ga: ''
+ analyticsService: '',
+ analyticsId: ''
})
_.set(WIKI.config, 'sessionSecret', (await crypto.randomBytesAsync(32)).toString('hex'))
_.set(WIKI.config, 'telemetry', {