fix: admin rendering UI + dark mode

pull/1004/head
Nick 5 years ago
parent 0f9ddf1e5d
commit c4629419d3

@ -196,7 +196,10 @@ let bootstrap = () => {
store, store,
i18n, i18n,
vuetify: new Vuetify({ vuetify: new Vuetify({
rtl: siteConfig.rtl rtl: siteConfig.rtl,
theme: {
dark: siteConfig.darkMode
}
}) })
}) })

@ -1,5 +1,5 @@
<template lang='pug'> <template lang='pug'>
v-app(:dark='darkMode').admin v-app.admin
nav-header(hide-search) nav-header(hide-search)
template(slot='mid') template(slot='mid')
v-spacer v-spacer

@ -29,11 +29,11 @@
v-list-item-content v-list-item-content
v-list-item-title.body-2(:class='!str.isAvailable ? `grey--text` : (selectedStrategy === str.key ? `primary--text` : ``)') {{ str.title }} v-list-item-title.body-2(:class='!str.isAvailable ? `grey--text` : (selectedStrategy === str.key ? `primary--text` : ``)') {{ str.title }}
v-list-item-subtitle: .caption(:class='!str.isAvailable ? `grey--text text--lighten-1` : (selectedStrategy === str.key ? `blue--text ` : ``)') {{ str.description }} v-list-item-subtitle: .caption(:class='!str.isAvailable ? `grey--text text--lighten-1` : (selectedStrategy === str.key ? `blue--text ` : ``)') {{ str.description }}
v-list-item-avatar(v-if='selectedStrategy === str.key') v-list-item-avatar(v-if='selectedStrategy === str.key', size='24')
v-icon.animated.fadeInLeft(color='primary', large) mdi-chevron-right v-icon.animated.fadeInLeft(color='primary', large) mdi-chevron-right
v-divider(v-if='idx < strategies.length - 1') v-divider(v-if='idx < strategies.length - 1')
v-card.wiki-form.mt-3.animated.fadeInUp.wait-p2s v-card.mt-3.animated.fadeInUp.wait-p2s
v-toolbar(flat, color='primary', dark, dense) v-toolbar(flat, color='primary', dark, dense)
.subtitle-1 {{$t('admin:auth.globalAdvSettings')}} .subtitle-1 {{$t('admin:auth.globalAdvSettings')}}
v-card-text v-card-text
@ -64,7 +64,7 @@
v-flex(xs12, lg9) v-flex(xs12, lg9)
v-card.wiki-form.animated.fadeInUp.wait-p2s v-card.animated.fadeInUp.wait-p2s
v-toolbar(color='primary', dense, flat, dark) v-toolbar(color='primary', dense, flat, dark)
.subtitle-1 {{strategy.title}} .subtitle-1 {{strategy.title}}
v-card-text v-card-text
@ -194,7 +194,7 @@
.subtitle-1 {{$t('admin:auth.configReference')}} .subtitle-1 {{$t('admin:auth.configReference')}}
v-card-text v-card-text
.body-2 {{$t('admin:auth.configReferenceSubtitle')}} .body-2 {{$t('admin:auth.configReferenceSubtitle')}}
v-alert.mt-3.radius-7(v-if='host.length < 8', color='red', outline, :value='true', icon='warning') v-alert.mt-3.radius-7(v-if='host.length < 8', color='red', outlined, :value='true', icon='mdi-alert')
i18next(path='admin:auth.siteUrlNotSetup', tag='span') i18next(path='admin:auth.siteUrlNotSetup', tag='span')
strong(place='siteUrl') {{$t('admin:general.siteUrl')}} strong(place='siteUrl') {{$t('admin:general.siteUrl')}}
strong(place='general') {{$t('admin:general.title')}} strong(place='general') {{$t('admin:general.title')}}

@ -54,7 +54,7 @@
.body-2(v-else) {{$t('admin:dashboard.versionNew', { version: info.latestVersion })}} .body-2(v-else) {{$t('admin:dashboard.versionNew', { version: info.latestVersion })}}
v-flex(xs12, xl6) v-flex(xs12, xl6)
v-card.radius-7.animated.fadeInUp.wait-p2s v-card.radius-7.animated.fadeInUp.wait-p2s
v-card-title.subtitle-1(:class='$vuetify.dark ? `grey darken-2` : `grey lighten-5`') Recent Pages v-card-title.subtitle-1(:class='$vuetify.theme.dark ? `grey darken-2` : `grey lighten-5`') Recent Pages
v-data-table.pb-2( v-data-table.pb-2(
:items='recentPages' :items='recentPages'
hide-default-footer hide-default-footer
@ -71,7 +71,7 @@
.caption Created {{ props.item.createdAt | moment('calendar') }} .caption Created {{ props.item.createdAt | moment('calendar') }}
v-flex(xs12, xl6) v-flex(xs12, xl6)
v-card.radius-7.animated.fadeInUp.wait-p4s v-card.radius-7.animated.fadeInUp.wait-p4s
v-card-title.subtitle-1(:class='$vuetify.dark ? `grey darken-2` : `grey lighten-5`') Most Popular Pages v-card-title.subtitle-1(:class='$vuetify.theme.dark ? `grey darken-2` : `grey lighten-5`') Most Popular Pages
v-data-table.pb-2( v-data-table.pb-2(
:items='popularPages' :items='popularPages'
hide-default-footer hide-default-footer

@ -8,10 +8,10 @@
.headline.primary--text.animated.fadeInLeft Rendering .headline.primary--text.animated.fadeInLeft Rendering
.subtitle-1.grey--text.animated.fadeInLeft.wait-p4s Configure how content is rendered #[v-chip(label, color='primary', small).white--text coming soon] .subtitle-1.grey--text.animated.fadeInLeft.wait-p4s Configure how content is rendered #[v-chip(label, color='primary', small).white--text coming soon]
v-spacer v-spacer
v-btn.animated.fadeInDown.wait-p2s(outline, color='grey', @click='refresh', large) v-btn.mx-3.animated.fadeInDown.wait-p2s(outlined, color='grey', @click='refresh', large)
v-icon refresh v-icon mdi-refresh
v-btn.animated.fadeInDown(color='success', @click='save', depressed, large) v-btn.animated.fadeInDown(color='success', @click='save', depressed, large)
v-icon(left) check v-icon(left) mdi-check
span {{$t('common:actions.apply')}} span {{$t('common:actions.apply')}}
v-flex.animated.fadeInUp(lg3, xs12) v-flex.animated.fadeInUp(lg3, xs12)
@ -21,16 +21,22 @@
flat flat
dark dark
) )
v-icon.mr-2 line_weight v-icon.mr-2 mdi-creation
.subtitle-1 Pipeline .subtitle-1 Pipeline
v-expansion-panel.adm-rendering-pipeline(v-model='selectedCore') v-expansion-panels.adm-rendering-pipeline(
v-expansion-panel-content( v-model='selectedCore'
hide-actions accordion
mandatory
)
v-expansion-panel(
v-for='core in renderers' v-for='core in renderers'
:key='core.key' :key='core.key'
)
v-expansion-panel-header(
hide-actions
ripple
) )
v-toolbar( v-toolbar(
slot='header'
color='blue' color='blue'
dense dense
dark dark
@ -38,23 +44,23 @@
) )
v-spacer v-spacer
.body-2 {{core.input}} .body-2 {{core.input}}
v-icon.mx-2 arrow_forward v-icon.mx-2 mdi-arrow-right-bold-hexagon-outline
.caption {{core.output}} .caption {{core.output}}
v-spacer v-spacer
v-expansion-panel-content
v-list.py-0(two-line, dense) v-list.py-0(two-line, dense)
template(v-for='(rdr, n) in core.children') template(v-for='(rdr, n) in core.children')
v-list-item( v-list-item(
avatar
:key='rdr.key' :key='rdr.key'
@click='selectRenderer(rdr.key)' @click='selectRenderer(rdr.key)'
:class='currentRenderer.key === rdr.key ? (darkMode ? `grey darken-4-l4` : `blue lighten-5`) : ``' :class='currentRenderer.key === rdr.key ? (darkMode ? `grey darken-4-l4` : `blue lighten-5`) : ``'
) )
v-list-item-avatar v-list-item-avatar(size='24')
v-icon(:color='currentRenderer.key === rdr.key ? "primary" : "grey"') {{rdr.icon}} v-icon(:color='currentRenderer.key === rdr.key ? "primary" : "grey"') {{rdr.icon}}
v-list-item-content v-list-item-content
v-list-item-title {{rdr.title}} v-list-item-title {{rdr.title}}
v-list-item-sub-title {{rdr.description}} v-list-item-subtitle: .caption {{rdr.description}}
v-list-item-avatar v-list-item-avatar(size='24')
status-indicator(v-if='rdr.isEnabled', positive, pulse) status-indicator(v-if='rdr.isEnabled', positive, pulse)
status-indicator(v-else, negative, pulse) status-indicator(v-else, negative, pulse)
v-divider.my-0(v-if='n < core.children.length - 1') v-divider.my-0(v-if='n < core.children.length - 1')
@ -70,20 +76,20 @@
v-icon.mr-2 {{currentRenderer.icon}} v-icon.mr-2 {{currentRenderer.icon}}
.subtitle-1 {{currentRenderer.title}} .subtitle-1 {{currentRenderer.title}}
v-spacer v-spacer
.pt-3.mt-1
v-switch( v-switch(
dark dark
color='white' color='white'
label='Enabled' label='Enabled'
v-model='currentRenderer.isEnabled' v-model='currentRenderer.isEnabled'
hide-details
) )
v-card-text.pb-4.pt-2.pl-4 v-card-text.pb-4.pt-2.pl-4
v-subheader.pl-0 Rendering Module Configuration .overline.my-5 Rendering Module Configuration
.body-1.ml-3(v-if='!currentRenderer.config || currentRenderer.config.length < 1') This rendering module has no configuration options you can modify. .body-2.ml-3(v-if='!currentRenderer.config || currentRenderer.config.length < 1'): em This rendering module has no configuration options you can modify.
template(v-else, v-for='(cfg, idx) in currentRenderer.config') template(v-else, v-for='(cfg, idx) in currentRenderer.config')
v-select( v-select(
v-if='cfg.value.type === "string" && cfg.value.enum' v-if='cfg.value.type === "string" && cfg.value.enum'
outline outlined
:items='cfg.value.enum' :items='cfg.value.enum'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
@ -103,7 +109,7 @@
) )
v-text-field( v-text-field(
v-else v-else
outline outlined
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
@ -111,7 +117,7 @@
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
) )
v-divider.my-3(v-if='idx < currentRenderer.config.length - 1') v-divider.my-5(v-if='idx < currentRenderer.config.length - 1')
v-card-chin v-card-chin
v-spacer v-spacer
.caption.pr-3.grey--text Module: {{ currentRenderer.key }} .caption.pr-3.grey--text Module: {{ currentRenderer.key }}
@ -211,10 +217,17 @@ export default {
<style lang='scss'> <style lang='scss'>
.adm-rendering-pipeline { .adm-rendering-pipeline {
border-top: 1px solid #FFF; .v-expansion-panel--active .v-expansion-panel-header {
min-height: 0;
}
.v-expansion-panel-header {
padding: 0;
margin-top: 1px;
}
.v-expansion-panel__header { .v-expansion-panel-content__wrap {
padding: 0 0; padding: 0;
} }
} }
</style> </style>

@ -8,13 +8,13 @@
.headline.primary--text.animated.fadeInLeft {{$t('admin:search.title')}} .headline.primary--text.animated.fadeInLeft {{$t('admin:search.title')}}
.subtitle-1.grey--text.animated.fadeInLeft.wait-p2s {{$t('admin:search.subtitle')}} .subtitle-1.grey--text.animated.fadeInLeft.wait-p2s {{$t('admin:search.subtitle')}}
v-spacer v-spacer
v-btn.animated.fadeInDown.wait-p2s(outline, color='grey', @click='refresh', large) v-btn.mx-1.animated.fadeInDown.wait-p2s(outlined, color='grey', @click='refresh', large)
v-icon refresh v-icon mdi-refresh
v-btn.animated.fadeInDown.wait-p1s(color='black', dark, large, depressed, @click='rebuild') v-btn.mx-2.animated.fadeInDown.wait-p1s(color='black', dark, large, depressed, @click='rebuild')
v-icon(left) cached v-icon(left) mdi-cached
span {{$t('admin:search.rebuildIndex')}} span {{$t('admin:search.rebuildIndex')}}
v-btn.animated.fadeInDown(color='success', @click='save', depressed, large) v-btn.ml-1.animated.fadeInDown(color='success', @click='save', depressed, large)
v-icon(left) check v-icon(left) mdi-check
span {{$t('common:actions.apply')}} span {{$t('common:actions.apply')}}
v-flex(lg3, xs12) v-flex(lg3, xs12)
@ -24,19 +24,19 @@
v-list.py-0(two-line, dense) v-list.py-0(two-line, dense)
template(v-for='(eng, idx) in engines') template(v-for='(eng, idx) in engines')
v-list-item(:key='eng.key', @click='selectedEngine = eng.key', :disabled='!eng.isAvailable') v-list-item(:key='eng.key', @click='selectedEngine = eng.key', :disabled='!eng.isAvailable')
v-list-item-avatar v-list-item-avatar(size='24')
v-icon(color='grey', v-if='!eng.isAvailable') cancel v-icon(color='grey', v-if='!eng.isAvailable') mdi-minus-box-outline
v-icon(color='primary', v-else-if='eng.key === selectedEngine') radio_button_checked v-icon(color='primary', v-else-if='eng.key === selectedEngine') mdi-checkbox-marked-outline
v-icon(color='grey', v-else) radio_button_unchecked v-icon(color='grey', v-else) mdi-checkbox-blank-outline
v-list-item-content v-list-item-content
v-list-item-title.body-2(:class='!eng.isAvailable ? `grey--text` : (selectedEngine === eng.key ? `primary--text` : ``)') {{ eng.title }} v-list-item-title.body-2(:class='!eng.isAvailable ? `grey--text` : (selectedEngine === eng.key ? `primary--text` : ``)') {{ eng.title }}
v-list-item-sub-title.caption(:class='!eng.isAvailable ? `grey--text text--lighten-1` : (selectedEngine === eng.key ? `blue--text ` : ``)') {{ eng.description }} v-list-item-subtitle: .caption(:class='!eng.isAvailable ? `grey--text text--lighten-1` : (selectedEngine === eng.key ? `blue--text ` : ``)') {{ eng.description }}
v-list-item-avatar(v-if='selectedEngine === eng.key') v-list-item-avatar(v-if='selectedEngine === eng.key', size='24')
v-icon.animated.fadeInLeft(color='primary') arrow_forward_ios v-icon.animated.fadeInLeft(color='primary', large) mdi-chevron-right
v-divider(v-if='idx < engines.length - 1') v-divider(v-if='idx < engines.length - 1')
v-flex(lg9, xs12) v-flex(lg9, xs12)
v-card.wiki-form.animated.fadeInUp.wait-p2s v-card.animated.fadeInUp.wait-p2s
v-toolbar(color='primary', dense, flat, dark) v-toolbar(color='primary', dense, flat, dark)
.subtitle-1 {{engine.title}} .subtitle-1 {{engine.title}}
v-card-text v-card-text
@ -45,18 +45,17 @@
.caption.pt-3 {{engine.description}} .caption.pt-3 {{engine.description}}
.caption.pb-3: a(:href='engine.website') {{engine.website}} .caption.pb-3: a(:href='engine.website') {{engine.website}}
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 {{$t('admin:search.engineConfig')}} .overline.my-5 {{$t('admin:search.engineConfig')}}
.body-1.ml-3(v-if='!engine.config || engine.config.length < 1') {{$t('admin:search.engineNoConfig')}} .body-2.ml-3(v-if='!engine.config || engine.config.length < 1'): em {{$t('admin:search.engineNoConfig')}}
template(v-else, v-for='cfg in engine.config') template(v-else, v-for='cfg in engine.config')
v-select( v-select(
v-if='cfg.value.type === "string" && cfg.value.enum' v-if='cfg.value.type === "string" && cfg.value.enum'
outline outlined
background-color='grey lighten-2'
:items='cfg.value.enum' :items='cfg.value.enum'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
@ -67,30 +66,28 @@
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
color='primary' color='primary'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
) )
v-textarea( v-textarea(
v-else-if='cfg.value.type === "string" && cfg.value.multiline' v-else-if='cfg.value.type === "string" && cfg.value.multiline'
outline outlined
background-color='grey lighten-2'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
) )
v-text-field( v-text-field(
v-else v-else
outline outlined
background-color='grey lighten-2'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'

@ -8,10 +8,10 @@
.headline.primary--text.animated.fadeInLeft {{$t('admin:storage.title')}} .headline.primary--text.animated.fadeInLeft {{$t('admin:storage.title')}}
.subtitle-1.grey--text.animated.fadeInLeft.wait-p4s {{$t('admin:storage.subtitle')}} .subtitle-1.grey--text.animated.fadeInLeft.wait-p4s {{$t('admin:storage.subtitle')}}
v-spacer v-spacer
v-btn.animated.fadeInDown.wait-p2s(outline, color='grey', @click='refresh', large) v-btn.mx-3.animated.fadeInDown.wait-p2s(outlined, color='grey', @click='refresh', large)
v-icon refresh v-icon mdi-refresh
v-btn.animated.fadeInDown(color='success', @click='save', depressed, large) v-btn.animated.fadeInDown(color='success', @click='save', depressed, large)
v-icon(left) check v-icon(left) mdi-check
span {{$t('common:actions.apply')}} span {{$t('common:actions.apply')}}
v-flex(lg3, xs12) v-flex(lg3, xs12)
@ -21,15 +21,15 @@
v-list(two-line, dense).py-0 v-list(two-line, dense).py-0
template(v-for='(tgt, idx) in targets') template(v-for='(tgt, idx) in targets')
v-list-item(:key='tgt.key', @click='selectedTarget = tgt.key', :disabled='!tgt.isAvailable') v-list-item(:key='tgt.key', @click='selectedTarget = tgt.key', :disabled='!tgt.isAvailable')
v-list-item-avatar v-list-item-avatar(size='24')
v-icon(color='grey', v-if='!tgt.isAvailable') indeterminate_check_box v-icon(color='grey', v-if='!tgt.isAvailable') mdi-minus-box-outline
v-icon(color='primary', v-else-if='tgt.isEnabled', v-ripple, @click='tgt.key !== `local` && (tgt.isEnabled = false)') check_box v-icon(color='primary', v-else-if='tgt.isEnabled', v-ripple, @click='tgt.key !== `local` && (tgt.isEnabled = false)') mdi-checkbox-marked-outline
v-icon(color='grey', v-else, v-ripple, @click='tgt.isEnabled = true') check_box_outline_blank v-icon(color='grey', v-else, v-ripple, @click='tgt.isEnabled = true') mdi-checkbox-blank-outline
v-list-item-content v-list-item-content
v-list-item-title.body-2(:class='!tgt.isAvailable ? `grey--text` : (selectedTarget === tgt.key ? `primary--text` : ``)') {{ tgt.title }} v-list-item-title.body-2(:class='!tgt.isAvailable ? `grey--text` : (selectedTarget === tgt.key ? `primary--text` : ``)') {{ tgt.title }}
v-list-item-sub-title.caption(:class='!tgt.isAvailable ? `grey--text text--lighten-1` : (selectedTarget === tgt.key ? `blue--text ` : ``)') {{ tgt.description }} v-list-item-subtitle: .caption(:class='!tgt.isAvailable ? `grey--text text--lighten-1` : (selectedTarget === tgt.key ? `blue--text ` : ``)') {{ tgt.description }}
v-list-item-avatar(v-if='selectedTarget === tgt.key') v-list-item-avatar(v-if='selectedTarget === tgt.key', size='24')
v-icon.animated.fadeInLeft(color='primary') arrow_forward_ios v-icon.animated.fadeInLeft(color='primary', large) mdi-chevron-right
v-divider(v-if='idx < targets.length - 1') v-divider(v-if='idx < targets.length - 1')
v-card.mt-3.animated.fadeInUp.wait-p2s v-card.mt-3.animated.fadeInUp.wait-p2s
@ -84,22 +84,20 @@
v-form v-form
.targetlogo .targetlogo
img(:src='target.logo', :alt='target.title') img(:src='target.logo', :alt='target.title')
v-subheader.pl-0 {{target.title}} .body-2.pt-3 {{target.description}}
.caption {{target.description}} .body-2.pt-3.pb-5: a(:href='target.website') {{target.website}}
.caption: a(:href='target.website') {{target.website}}
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 {{$t('admin:storage.targetConfig')}} .overline.my-5 {{$t('admin:storage.targetConfig')}}
.body-1.ml-3(v-if='!target.config || target.config.length < 1') {{$t('admin:storage.noConfigOption')}} .body-2.ml-3(v-if='!target.config || target.config.length < 1'): em {{$t('admin:storage.noConfigOption')}}
template(v-else, v-for='cfg in target.config') template(v-else, v-for='cfg in target.config')
v-select( v-select(
v-if='cfg.value.type === "string" && cfg.value.enum' v-if='cfg.value.type === "string" && cfg.value.enum'
outline outlined
background-color='grey lighten-2'
:items='cfg.value.enum' :items='cfg.value.enum'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
@ -110,37 +108,35 @@
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
color='primary' color='primary'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
) )
v-textarea( v-textarea(
v-else-if='cfg.value.type === "string" && cfg.value.multiline' v-else-if='cfg.value.type === "string" && cfg.value.multiline'
outline outlined
background-color='grey lighten-2'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
) )
v-text-field( v-text-field(
v-else v-else
outline outlined
background-color='grey lighten-2'
:key='cfg.key' :key='cfg.key'
:label='cfg.value.title' :label='cfg.value.title'
v-model='cfg.value.value' v-model='cfg.value.value'
prepend-icon='settings_applications' prepend-icon='mdi-settings-box'
:hint='cfg.value.hint ? cfg.value.hint : ""' :hint='cfg.value.hint ? cfg.value.hint : ""'
persistent-hint persistent-hint
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
) )
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 {{$t('admin:storage.syncDirection')}} .overline.my-5 {{$t('admin:storage.syncDirection')}}
.body-1.ml-3 {{$t('admin:storage.syncDirectionSubtitle')}} .body-2.ml-3 {{$t('admin:storage.syncDirectionSubtitle')}}
.pr-3.pt-3 .pr-3.pt-3
v-radio-group.ml-3.py-0(v-model='target.mode') v-radio-group.ml-3.py-0(v-model='target.mode')
v-radio( v-radio(
@ -161,7 +157,7 @@
value='pull' value='pull'
:disabled='target.supportedModes.indexOf(`pull`) < 0' :disabled='target.supportedModes.indexOf(`pull`) < 0'
) )
.body-1.ml-3 .body-2.ml-3
strong {{$t('admin:storage.syncDirBi')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`sync`) < 0') {{$t('admin:storage.unsupported')}}] strong {{$t('admin:storage.syncDirBi')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`sync`) < 0') {{$t('admin:storage.unsupported')}}]
.pb-3 {{$t('admin:storage.syncDirBiHint')}} .pb-3 {{$t('admin:storage.syncDirBiHint')}}
strong {{$t('admin:storage.syncDirPush')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`push`) < 0') {{$t('admin:storage.unsupported')}}] strong {{$t('admin:storage.syncDirPush')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`push`) < 0') {{$t('admin:storage.unsupported')}}]
@ -171,8 +167,8 @@
template(v-if='target.hasSchedule') template(v-if='target.hasSchedule')
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 {{$t('admin:storage.syncSchedule')}} .overline.my-5 {{$t('admin:storage.syncSchedule')}}
.body-1.ml-3 {{$t('admin:storage.syncScheduleHint')}} .body-2.ml-3 {{$t('admin:storage.syncScheduleHint')}}
.pa-3 .pa-3
duration-picker(v-model='target.syncInterval') duration-picker(v-model='target.syncInterval')
i18next.caption.mt-3(path='admin:storage.syncScheduleCurrent', tag='div') i18next.caption.mt-3(path='admin:storage.syncScheduleCurrent', tag='div')
@ -182,17 +178,17 @@
template(v-if='target.actions && target.actions.length > 0') template(v-if='target.actions && target.actions.length > 0')
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 {{$t('admin:storage.actions')}} .overline.my-5 {{$t('admin:storage.actions')}}
v-container.pt-0(grid-list-xl, fluid) v-container.pt-0(grid-list-xl, fluid)
v-layout(row, wrap, fill-height) v-layout(row, wrap, fill-height)
v-flex(xs12, lg6, xl4, v-for='act of target.actions', :key='act.handler') v-flex(xs12, lg6, xl4, v-for='act of target.actions', :key='act.handler')
v-card.radius-7.grey(flat, :class='$vuetify.dark ? `darken-3-d5` : `lighten-3`', height='100%') v-card.radius-7.grey(flat, :class='$vuetify.dark ? `darken-3-d5` : `lighten-3`', height='100%')
v-card-text v-card-text
.subtitle-1(v-html='act.label') .subtitle-1(v-html='act.label')
.body-1.mt-2(v-html='act.hint') .body-2.mt-4(v-html='act.hint')
v-btn.mx-0.mt-3( v-btn.mx-0.mt-5(
@click='executeAction(target.key, act.handler)' @click='executeAction(target.key, act.handler)'
outline outlined
:color='$vuetify.dark ? `blue` : `primary`' :color='$vuetify.dark ? `blue` : `primary`'
:disabled='runningAction' :disabled='runningAction'
:loading='runningActionHandler === act.handler' :loading='runningActionHandler === act.handler'

@ -167,11 +167,17 @@ export default {
] ]
} }
}, },
watch: {
'darkMode' (newValue, oldValue) {
this.$vuetify.theme.dark = newValue
}
},
mounted() { mounted() {
this.darkModeInitial = this.darkMode this.darkModeInitial = this.darkMode
}, },
beforeDestroy() { beforeDestroy() {
this.darkMode = this.darkModeInitial this.darkMode = this.darkModeInitial
this.$vuetify.theme.dark = this.darkModeInitial
}, },
methods: { methods: {
async save () { async save () {

@ -6,7 +6,7 @@
.subtitle-1.pb-3.pl-0.primary--text Migrate all pages to target locale .subtitle-1.pb-3.pl-0.primary--text Migrate all pages to target locale
.body-2 If you created content before selecting a different locale and activating the namespacing capabilities, you may want to transfer all content to the base locale. .body-2 If you created content before selecting a different locale and activating the namespacing capabilities, you may want to transfer all content to the base locale.
.body-2.red--text: strong This operation is destructive and cannot be reversed! Make sure you have proper backups! .body-2.red--text: strong This operation is destructive and cannot be reversed! Make sure you have proper backups!
v-toolbar.mt-5(flat, color='grey lighten-4', height='80') v-toolbar.radius-7.mt-5(flat, :color='$vuetify.theme.dark ? `grey darken-3-d5` : `grey lighten-4`', height='80')
v-select( v-select(
label='Source Locale' label='Source Locale'
outlined outlined

@ -8,7 +8,7 @@
<script> <script>
export default { export default {
computed: { computed: {
dark() { return this.$vuetify.dark } dark() { return this.$vuetify.theme.dark }
} }
} }
</script> </script>

@ -19,24 +19,24 @@ html {
} }
} }
.application--wrap { .v-application--wrap {
transition: all 1.2s ease; transition: all 1.2s ease;
transform-origin: 50% 50%; transform-origin: 50% 50%;
background-color: #FFF; // background-color: #FFF;
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: mc('grey', '900'); background-color: mc('grey', '900');
} }
} }
.v-application {
@for $i from 0 through 25 { @for $i from 0 through 25 {
.radius-#{$i} { .radius-#{$i} {
border-radius: #{$i}px; border-radius: #{$i}px;
} }
} }
@for $i from 1 through 5 { @for $i from 1 through 5 {
.grey.darken-2-d#{$i} { .grey.darken-2-d#{$i} {
background-color: darken(mc('grey', '700'), percentage($i/100)) !important; background-color: darken(mc('grey', '700'), percentage($i/100)) !important;
border-color: darken(mc('grey', '700'), percentage($i/100)) !important; border-color: darken(mc('grey', '700'), percentage($i/100)) !important;
@ -61,17 +61,18 @@ html {
background-color: lighten(mc('grey', '900'), percentage($i/100)) !important; background-color: lighten(mc('grey', '900'), percentage($i/100)) !important;
border-color: lighten(mc('grey', '900'), percentage($i/100)) !important; border-color: lighten(mc('grey', '900'), percentage($i/100)) !important;
} }
} }
.grey.darken-5 { .grey.darken-5 {
background-color: #0C0C0C !important; background-color: #0C0C0C !important;
border-color: #0C0C0C !important; border-color: #0C0C0C !important;
} }
.blue.darken-5 { .blue.darken-5 {
background-color: darken(mc('blue', '900'), 20%) !important; background-color: darken(mc('blue', '900'), 20%) !important;
border-color: darken(mc('blue', '900'), 20%) !important; border-color: darken(mc('blue', '900'), 20%) !important;
} }
.indigo.darken-5 { .indigo.darken-5 {
background-color: darken(mc('indigo', '900'), 10%) !important; background-color: darken(mc('indigo', '900'), 10%) !important;
border-color: darken(mc('indigo', '900'), 10%) !important; border-color: darken(mc('indigo', '900'), 10%) !important;
}
} }

@ -2,7 +2,7 @@
v-app(v-scroll='upBtnScroll', :dark='darkMode') v-app(v-scroll='upBtnScroll', :dark='darkMode')
nav-header nav-header
v-navigation-drawer( v-navigation-drawer(
:class='darkMode ? `grey darken-5` : `primary`' :class='darkMode ? `grey darken-4-d4` : `primary`'
dark dark
app app
clipped clipped
@ -12,7 +12,7 @@
:right='$vuetify.rtl' :right='$vuetify.rtl'
) )
vue-scroll(:ops='scrollStyle') vue-scroll(:ops='scrollStyle')
nav-sidebar(:color='darkMode ? `grey darken-5` : `primary`', :items='sidebar') nav-sidebar(:color='darkMode ? `grey darken-4-d4` : `primary`', :items='sidebar')
v-fab-transition v-fab-transition
v-btn( v-btn(
@ -57,7 +57,7 @@
v-layout(row) v-layout(row)
v-flex.page-col-sd(lg3, xl2, fill-height, v-if='$vuetify.breakpoint.lgAndUp', style='margin-top: -90px;') v-flex.page-col-sd(lg3, xl2, fill-height, v-if='$vuetify.breakpoint.lgAndUp', style='margin-top: -90px;')
v-card(v-if='toc.length') v-card(v-if='toc.length')
.overline.pa-5.pb-0(:class='darkMode ? `indigo--text text--lighten-3` : `primary--text`') {{$t('common:page.toc')}} .overline.pa-5.pb-0(:class='darkMode ? `blue--text text--lighten-2` : `primary--text`') {{$t('common:page.toc')}}
v-list.pb-3(dense, nav, :class='darkMode ? `darken-3-d3` : ``') v-list.pb-3(dense, nav, :class='darkMode ? `darken-3-d3` : ``')
template(v-for='(tocItem, tocIdx) in toc') template(v-for='(tocItem, tocIdx) in toc')
v-list-item(@click='$vuetify.goTo(tocItem.anchor, scrollOpts)') v-list-item(@click='$vuetify.goTo(tocItem.anchor, scrollOpts)')
@ -67,12 +67,12 @@
template(v-for='tocSubItem in tocItem.children') template(v-for='tocSubItem in tocItem.children')
v-list-item(@click='$vuetify.goTo(tocSubItem.anchor, scrollOpts)') v-list-item(@click='$vuetify.goTo(tocSubItem.anchor, scrollOpts)')
v-icon.pl-3(color='grey lighten-1', small) mdi-chevron-right v-icon.pl-3(color='grey lighten-1', small) mdi-chevron-right
v-list-item-title.pl-3.caption.grey--text.text--darken-1 {{tocSubItem.title}} v-list-item-title.pl-3.caption.grey--text(:class='darkMode ? `text--lighten-1` : `text--darken-1`') {{tocSubItem.title}}
//- v-divider(inset, v-if='tocIdx < toc.length - 1') //- v-divider(inset, v-if='tocIdx < toc.length - 1')
v-card.mt-5 v-card.mt-5
.pa-5.pt-3 .pa-5.pt-3
.overline.indigo--text.d-flex.align-center .overline.indigo--text.d-flex.align-center(:class='$vuetify.theme.dark ? `text--lighten-3` : ``')
span {{$t('common:page.lastEditedBy')}} span {{$t('common:page.lastEditedBy')}}
v-spacer v-spacer
v-tooltip(top, v-if='isAuthenticated') v-tooltip(top, v-if='isAuthenticated')
@ -85,7 +85,7 @@
v-card.mt-5(v-if='tags.length > 0 || true') v-card.mt-5(v-if='tags.length > 0 || true')
.pa-5 .pa-5
.overline.teal--text.pb-2 Tags .overline.teal--text.pb-2(:class='$vuetify.theme.dark ? `text--lighten-3` : ``') Tags
v-chip.mr-1( v-chip.mr-1(
label label
color='teal lighten-5' color='teal lighten-5'
@ -98,7 +98,7 @@
v-card.mt-5 v-card.mt-5
.pa-5 .pa-5
.overline.pb-2.yellow--text.text--darken-4 Rating .overline.pb-2.yellow--text(:class='$vuetify.theme.dark ? `text--darken-3` : `text--darken-4`') Rating
.text-center .text-center
v-rating( v-rating(
v-model='rating' v-model='rating'

@ -10,11 +10,11 @@
} }
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: darken(mc('grey', '900'), 4%); // background-color: darken(mc('grey', '900'), 4%);
color: mc('grey', '300'); color: mc('grey', '300');
a { a {
color: mc('indigo', '200'); color: mc('blue', '100');
} }
} }
@ -57,7 +57,7 @@
position: relative; position: relative;
@at-root .theme--dark & { @at-root .theme--dark & {
color: mc('teal', '100'); color: mc('grey', '300');
} }
&::after { &::after {
@ -71,7 +71,7 @@
border-radius: 3px; border-radius: 3px;
@at-root .theme--dark & { @at-root .theme--dark & {
background: linear-gradient(to right, mc('teal', '300') 0%, mc('teal', '500') 10%, rgba(mc('teal', '900'), 0) 100%); background: linear-gradient(to right, mc('blue', '300') 0%, mc('blue', '500') 10%, rgba(mc('blue', '900'), 0) 100%);
} }
@at-root .application--is-rtl & { @at-root .application--is-rtl & {
@ -227,7 +227,7 @@
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: mc('grey', '900'); background-color: mc('grey', '900');
background-image: radial-gradient(ellipse at top, mc('blue', '900'), rgba(darken(mc('blue', '900'), 5%), .2)); background-image: radial-gradient(ellipse at top, rgba(mc('blue', '900'), .25), rgba(darken(mc('blue', '900'), 5%), .2));
border-color: mc('blue', '500'); border-color: mc('blue', '500');
box-shadow: 0 0 2px 0 mc('grey', '900'); box-shadow: 0 0 2px 0 mc('grey', '900');
} }
@ -245,7 +245,7 @@
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: mc('grey', '900'); background-color: mc('grey', '900');
background-image: radial-gradient(ellipse at top, mc('orange', '900'), rgba(darken(mc('orange', '900'), 5%), .2)); background-image: radial-gradient(ellipse at top, rgba(mc('orange', '900'), .25), rgba(darken(mc('orange', '900'), 5%), .2));
border-color: mc('orange', '500'); border-color: mc('orange', '500');
box-shadow: 0 0 2px 0 mc('grey', '900'); box-shadow: 0 0 2px 0 mc('grey', '900');
} }
@ -263,7 +263,7 @@
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: mc('grey', '900'); background-color: mc('grey', '900');
background-image: radial-gradient(ellipse at top, mc('red', '900'), rgba(darken(mc('red', '900'), 5%), .2)); background-image: radial-gradient(ellipse at top, rgba(mc('red', '900'), .1), rgba(darken(mc('red', '900'), 5%), .2));
border-color: mc('red', '500'); border-color: mc('red', '500');
box-shadow: 0 0 2px 0 mc('grey', '900'); box-shadow: 0 0 2px 0 mc('grey', '900');
} }
@ -281,7 +281,7 @@
@at-root .theme--dark & { @at-root .theme--dark & {
background-color: mc('grey', '900'); background-color: mc('grey', '900');
background-image: radial-gradient(ellipse at top, mc('green', '900'), rgba(darken(mc('green', '900'), 5%), .2)); background-image: radial-gradient(ellipse at top, rgba(mc('green', '900'), .4), rgba(darken(mc('green', '900'), 5%), .2));
border-color: mc('green', '500'); border-color: mc('green', '500');
box-shadow: 0 0 2px 0 mc('grey', '900'); box-shadow: 0 0 2px 0 mc('grey', '900');
} }

@ -2,7 +2,7 @@ key: htmlAsciinema
title: Asciinema title: Asciinema
description: Embed asciinema players from compatible links description: Embed asciinema players from compatible links
author: requarks.io author: requarks.io
icon: subtitles icon: mdi-theater
enabledDefault: false enabledDefault: false
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlBlockquotes
title: Blockquotes title: Blockquotes
description: Parse blockquotes box styling description: Parse blockquotes box styling
author: requarks.io author: requarks.io
icon: insert_comment icon: mdi-alpha-t-box-outline
enabledDefault: true enabledDefault: true
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlCodehighlighter
title: Code Highlighting Post-Processor title: Code Highlighting Post-Processor
description: Syntax detector for programming code description: Syntax detector for programming code
author: requarks.io author: requarks.io
icon: palette icon: mdi-code-braces
enabledDefault: true enabledDefault: true
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -4,5 +4,5 @@ description: Basic HTML Parser
author: requarks.io author: requarks.io
input: html input: html
output: html output: html
icon: crop_free icon: mdi-language-html5
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlMathjax
title: Mathjax Processor title: Mathjax Processor
description: TeX/MathML Math Equations Parser description: TeX/MathML Math Equations Parser
author: requarks.io author: requarks.io
icon: functions icon: mdi-function-variant
enabledDefault: false enabledDefault: false
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlMediaplayers
title: Media Players title: Media Players
description: Embed players such as Youtube, Vimeo, Soundcloud, etc. description: Embed players such as Youtube, Vimeo, Soundcloud, etc.
author: requarks.io author: requarks.io
icon: subscriptions icon: mdi-library-video
enabledDefault: true enabledDefault: true
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlMermaid
title: Mermaid title: Mermaid
description: Generate flowcharts from Mermaid syntax description: Generate flowcharts from Mermaid syntax
author: requarks.io author: requarks.io
icon: merge_type icon: mdi-arrow-decision-outline
enabledDefault: false enabledDefault: false
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlPlantuml
title: PlantUML title: PlantUML
description: Generate diagrams from PlantUML syntax description: Generate diagrams from PlantUML syntax
author: requarks.io author: requarks.io
icon: multiline_chart icon: mdi-sitemap
enabledDefault: false enabledDefault: false
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: htmlSecurity
title: Security title: Security
description: Filter and strips potentially dangerous content description: Filter and strips potentially dangerous content
author: requarks.io author: requarks.io
icon: whatshot icon: mdi-fire
enabledDefault: true enabledDefault: true
dependsOn: htmlCore dependsOn: htmlCore
props: props:

@ -2,7 +2,7 @@ key: htmlTwemoji
title: Twemoji title: Twemoji
description: Apply Twitter Emojis to all Unicode emojis description: Apply Twitter Emojis to all Unicode emojis
author: requarks.io author: requarks.io
icon: whatshot icon: mdi-emoticon-happy-outline
enabledDefault: true enabledDefault: true
dependsOn: htmlCore dependsOn: htmlCore
props: {} props: {}

@ -2,7 +2,7 @@ key: markdownAbbr
title: Abbreviations title: Abbreviations
description: Parse abbreviations into abbr tags description: Parse abbreviations into abbr tags
author: requarks.io author: requarks.io
icon: text_format icon: mdi-contain-start
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -4,7 +4,7 @@ description: Basic Markdown Parser
author: requarks.io author: requarks.io
input: markdown input: markdown
output: html output: html
icon: crop_free icon: mdi-markdown
props: props:
allowHTML: allowHTML:
type: Boolean type: Boolean

@ -2,7 +2,7 @@ key: markdownEmoji
title: Emoji title: Emoji
description: Convert tags to emojis description: Convert tags to emojis
author: requarks.io author: requarks.io
icon: tag_faces icon: mdi-sticker-emoji
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -2,7 +2,7 @@ key: markdownExpandtabs
title: Expand Tabs title: Expand Tabs
description: Replace tabs with spaces in code blocks description: Replace tabs with spaces in code blocks
author: requarks.io author: requarks.io
icon: space_bar icon: mdi-arrow-expand-horizontal
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: props:

@ -2,7 +2,7 @@ key: markdownFootnotes
title: Footnotes title: Footnotes
description: Parse footnotes references description: Parse footnotes references
author: requarks.io author: requarks.io
icon: low_priority icon: mdi-page-layout-footer
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -2,7 +2,7 @@ key: markdownImsize
title: Image Size title: Image Size
description: Adds dimensions attributes to images description: Adds dimensions attributes to images
author: requarks.io author: requarks.io
icon: insert_photo icon: mdi-image-size-select-large
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -2,7 +2,7 @@ key: markdownMathjax
title: Mathjax Preprocessor title: Mathjax Preprocessor
description: Prepare TeX blocks for Mathjax description: Prepare TeX blocks for Mathjax
author: requarks.io author: requarks.io
icon: functions icon: mdi-function-variant
enabledDefault: false enabledDefault: false
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -2,7 +2,7 @@ key: markdownSupsub
title: Subscript/Superscript title: Subscript/Superscript
description: Parse subscript and superscript tags description: Parse subscript and superscript tags
author: requarks.io author: requarks.io
icon: format_size icon: mdi-format-superscript
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: props:

@ -2,7 +2,7 @@ key: markdownTasklists
title: Task Lists title: Task Lists
description: Parse task lists to checkboxes description: Parse task lists to checkboxes
author: requarks.io author: requarks.io
icon: list icon: mdi-format-list-checks
enabledDefault: true enabledDefault: true
dependsOn: markdownCore dependsOn: markdownCore
props: {} props: {}

@ -125,7 +125,11 @@ module.exports = () => {
}) })
_.set(WIKI.config, 'theming', { _.set(WIKI.config, 'theming', {
theme: 'default', theme: 'default',
darkMode: false darkMode: false,
iconset: 'mdi',
injectCSS: '',
injectHead: '',
injectBody: ''
}) })
_.set(WIKI.config, 'title', 'Wiki.js') _.set(WIKI.config, 'title', 'Wiki.js')

@ -66,6 +66,13 @@ html
script(
type='text/javascript'
src='/legacy.35e1a512a39dbf80760e.hot-update.js'
)
!= analyticsCode.head != analyticsCode.head
block head block head

@ -65,6 +65,13 @@ html
script(
type='text/javascript'
src='/app.35e1a512a39dbf80760e.hot-update.js'
)
!= analyticsCode.head != analyticsCode.head
block head block head

Loading…
Cancel
Save