| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | <template lang='pug'>  v-container(fluid, grid-list-lg)    v-layout(row wrap)      v-flex(xs12)        .admin-header          img.animated.fadeInUp(src='/svg/icon-paint-palette.svg', alt='Theme', style='width: 80px;')          .admin-header-title            .headline.primary--text.animated.fadeInLeft Theme            .subheading.grey--text.animated.fadeInLeft.wait-p2s Modify the look & feel of your wiki          v-spacer          v-btn.animated.fadeInRight(color='success', depressed, @click='save', large, :loading='loading')            v-icon(left) check            span {{$t('common:actions.apply')}}        v-form.pt-3          v-layout(row wrap)            v-flex(lg6 xs12)              v-card.wiki-form.animated.fadeInUp                v-toolbar(color='primary', dark, dense, flat)                  v-toolbar-title                    .subheading Theme                v-card-text                  v-select(                    :items='themes'                    outline                    background-color='grey lighten-2'                    prepend-icon='palette'                    v-model='config.theme'                    label='Site Theme'                    persistent-hint                    hint='Themes affect how content pages are displayed. Other site sections (such as the editor or admin area) are not affected.'                    )                    template(slot='item', slot-scope='data')                      v-list-tile-avatar                        v-icon.blue--text(dark) filter_frames                      v-list-tile-content                        v-list-tile-title(v-html='data.item.text')                        v-list-tile-sub-title(v-html='data.item.author')                  v-divider.mt-3                  v-switch(                    v-model='darkMode'                    label='Dark Mode'                    color='primary'                    persistent-hint                    hint='Not recommended for accessibility. May not be supported by all themes.'                    )              v-card.wiki-form.mt-3.animated.fadeInUp.wait-p2s                v-toolbar(color='primary', dark, dense, flat)                  v-toolbar-title                    .subheading Code Injection                v-card-text                  v-textarea(                    v-model='config.injectCSS'                    label='CSS Override'                    outline                    background-color='grey lighten-1'                    color='primary'                    persistent-hint                    hint='CSS code to inject after system default CSS. Consider using custom themes if you have a large amount of css code. Injecting too much CSS code will result in poor page load performance! CSS will automatically be minified.'                    auto-grow                    )                  v-textarea.mt-2(                    v-model='config.injectHead'                    label='Head HTML Injection'                    outline                    background-color='grey lighten-1'                    color='primary'                    persistent-hint                    hint='HTML code to be injected just before the closing head tag. Usually for script tags.'                    auto-grow                    )                  v-textarea.mt-2(                    v-model='config.injectBody'                    label='Body HTML Injection'                    outline                    background-color='grey lighten-1'                    color='primary'                    persistent-hint                    hint='HTML code to be injected just before the closing body tag.'                    auto-grow                    )            v-flex(lg6 xs12)              v-card.animated.fadeInUp.wait-p2s                v-toolbar(color='teal', dark, dense, flat)                  v-toolbar-title                    .subheading Download Themes                  v-spacer                  v-chip(label, color='white', small).teal--text coming soon                v-card-text.caption -- Coming soon --</template><script>import _ from 'lodash'import { sync } from 'vuex-pathify'import themeConfigQuery from 'gql/admin/theme/theme-query-config.gql'import themeSaveMutation from 'gql/admin/theme/theme-mutation-save.gql'export default {  data() {    return {      loading: false,      themes: [        { text: 'Default', author: 'requarks.io', value: 'default' }      ],      config: {        theme: 'default',        darkMode: false,        injectCSS: '',        injectHead: '',        injectBody: ''      },      darkModeInitial: false    }  },  computed: {    darkMode: sync('site/dark')  },  mounted() {    this.darkModeInitial = this.darkMode  },  beforeDestroy() {    this.darkMode = this.darkModeInitial  },  methods: {    async save () {      this.loading = true      this.$store.commit(`loadingStart`, 'admin-theme-save')      try {        const respRaw = await this.$apollo.mutate({          mutation: themeSaveMutation,          variables: {            theme: this.config.theme,            darkMode: this.darkMode,            injectCSS: this.config.injectCSS,            injectHead: this.config.injectHead,            injectBody: this.config.injectBody          }        })        const resp = _.get(respRaw, 'data.theming.setConfig.responseResult', {})        if (resp.succeeded) {          this.darkModeInitial = this.darkMode          this.$store.commit('showNotification', {            message: 'Theme settings updated successfully.',            style: 'success',            icon: 'check'          })        } else {          throw new Error(resp.message)        }      } catch (err) {        this.$store.commit('pushGraphError', err)      }      this.$store.commit(`loadingStop`, 'admin-theme-save')      this.loading = false    }  },  apollo: {    config: {      query: themeConfigQuery,      fetchPolicy: 'network-only',      update: (data) => data.theming.config,      watchLoading (isLoading) {        this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-theme-refresh')      }    }  }}</script><style lang='scss'></style>
 |