Browse Source

feat: admin translations

pull/880/head
Nick 5 years ago
parent
commit
eb66ae6088
7 changed files with 76 additions and 70 deletions
  1. 4
      client/components/admin/admin-auth.vue
  2. 4
      client/components/admin/admin-contribute.vue
  3. 18
      client/components/admin/admin-dashboard.vue
  4. 37
      client/components/admin/admin-general.vue
  5. 5
      client/components/admin/admin-locale.vue
  6. 22
      client/components/admin/admin-search.vue
  7. 56
      client/components/admin/admin-storage.vue

4
client/components/admin/admin-auth.vue

@ -247,7 +247,7 @@ export default {
async refresh() { async refresh() {
await this.$apollo.queries.strategies.refetch() await this.$apollo.queries.strategies.refetch()
this.$store.commit('showNotification', { this.$store.commit('showNotification', {
message: 'List of strategies has been refreshed.',
message: this.$t('admin:auth.refreshSuccess'),
style: 'success', style: 'success',
icon: 'cached' icon: 'cached'
}) })
@ -274,7 +274,7 @@ export default {
} }
}) })
this.$store.commit('showNotification', { this.$store.commit('showNotification', {
message: 'Authentication configuration saved successfully.',
message: this.$t('admin:auth.saveSuccess'),
style: 'success', style: 'success',
icon: 'check' icon: 'check'
}) })

4
client/components/admin/admin-contribute.vue

@ -73,11 +73,11 @@
.body-1.pl-3 .body-1.pl-3
ul ul
i18next(path='admin:contribute.submitAnIdea', tag='li') i18next(path='admin:contribute.submitAnIdea', tag='li')
a(href='https://requests.requarks.io/wiki', target='_blank') {{ $t('admin:contribute.submitAnIdeaLink') }}
a(href='https://wiki.js.org/feedback', target='_blank') {{ $t('admin:contribute.submitAnIdeaLink') }}
i18next(path='admin:contribute.foundABug', tag='li') i18next(path='admin:contribute.foundABug', tag='li')
a(href='https://github.com/Requarks/wiki/issues', target='_blank') Github a(href='https://github.com/Requarks/wiki/issues', target='_blank') Github
i18next(path='admin:contribute.helpTranslate', tag='li') i18next(path='admin:contribute.helpTranslate', tag='li')
a(href='https://gitter.im/Requarks/wiki', target='_blank') Gitter
a(href='https://wiki.requarks.io/slack', target='_blank') Slack
v-divider.mt-3 v-divider.mt-3
v-subheader {{ $t('admin:contribute.spreadTheWord') }} v-subheader {{ $t('admin:contribute.spreadTheWord') }}
.body-1.pl-3 .body-1.pl-3

18
client/components/admin/admin-dashboard.vue

@ -11,7 +11,7 @@
v-card.primary.dashboard-card.animated.fadeInUp(dark) v-card.primary.dashboard-card.animated.fadeInUp(dark)
v-card-text v-card-text
v-icon.dashboard-icon insert_drive_file v-icon.dashboard-icon insert_drive_file
.subheading Pages
.subheading {{$t('admin:dashboard.pages')}}
animated-number.display-1( animated-number.display-1(
:value='info.pagesTotal' :value='info.pagesTotal'
:duration='2000' :duration='2000'
@ -22,7 +22,7 @@
v-card.indigo.lighten-1.dashboard-card.animated.fadeInUp.wait-p2s(dark) v-card.indigo.lighten-1.dashboard-card.animated.fadeInUp.wait-p2s(dark)
v-card-text v-card-text
v-icon.dashboard-icon person v-icon.dashboard-icon person
.subheading Users
.subheading {{$t('admin:dashboard.users')}}
animated-number.display-1( animated-number.display-1(
:value='info.usersTotal' :value='info.usersTotal'
:duration='2000' :duration='2000'
@ -33,7 +33,7 @@
v-card.indigo.lighten-2.dashboard-card.animated.fadeInUp.wait-p4s(dark) v-card.indigo.lighten-2.dashboard-card.animated.fadeInUp.wait-p4s(dark)
v-card-text v-card-text
v-icon.dashboard-icon people v-icon.dashboard-icon people
.subheading Groups
.subheading {{$t('admin:dashboard.groups')}}
animated-number.display-1( animated-number.display-1(
:value='info.groupsTotal' :value='info.groupsTotal'
:duration='2000' :duration='2000'
@ -50,8 +50,8 @@
v-card-text v-card-text
v-icon.dashboard-icon blur_on v-icon.dashboard-icon blur_on
.subheading Wiki.js {{info.currentVersion}} .subheading Wiki.js {{info.currentVersion}}
.body-2(v-if='isLatestVersion') You are running the latest version.
.body-2(v-else) A new version is available: {{info.latestVersion}}
.body-2(v-if='isLatestVersion') {{$t('admin:dashboard.versionLatest')}}
.body-2(v-else) {{$t('admin:dashboard.versionNew', { version: info.latestVersion })}}
v-flex(xs12) v-flex(xs12)
v-card.radius-7 v-card.radius-7
v-card-title.subheading(:class='$vuetify.dark ? `grey darken-2` : `grey lighten-5`') Recent Pages v-card-title.subheading(:class='$vuetify.dark ? `grey darken-2` : `grey lighten-5`') Recent Pages
@ -92,10 +92,10 @@
v-card-text v-card-text
img(src='/svg/icon-heart-health.svg', alt='Contribute', style='height: 80px;') img(src='/svg/icon-heart-health.svg', alt='Contribute', style='height: 80px;')
.pl-3 .pl-3
.subheading Contribute
.body-2.pt-2 Wiki.js is a free and open source project. There are several ways you can contribute to the project.
.body-1 We need your help!
v-btn.mx-0.mt-2(:color='$vuetify.dark ? `indigo lighten-3` : `indigo`', outline, small, to='/contribute') Learn More
.subheading {{$t('admin:contribute.title')}}
.body-2.pt-2 {{$t('admin:dashboard.contributeSubtitle')}}
.body-1 {{$t('admin:dashboard.contributeHelp')}}
v-btn.mx-0.mt-2(:color='$vuetify.dark ? `indigo lighten-3` : `indigo`', outline, small, to='/contribute') {{$t('admin:dashboard.contributeLearnMore')}}
</template> </template>

37
client/components/admin/admin-general.vue

@ -19,75 +19,75 @@
v-toolbar(color='primary', dark, dense, flat) v-toolbar(color='primary', dark, dense, flat)
v-toolbar-title v-toolbar-title
.subheading {{ $t('admin:general.siteInfo') }} .subheading {{ $t('admin:general.siteInfo') }}
v-subheader General
v-subheader {{$t('admin:general.general')}}
.px-3.pb-3 .px-3.pb-3
v-text-field( v-text-field(
outline outline
label='Site URL'
:label='$t(`admin:general.siteUrl`)'
required required
:counter='255' :counter='255'
v-model='config.host' v-model='config.host'
prepend-icon='label_important' prepend-icon='label_important'
hint='Full URL to your wiki, without the trailing slash. (e.g. https://wiki.example.com)'
:hint='$t(`admin:general.siteUrlHint`)'
persistent-hint persistent-hint
) )
v-text-field.mt-2( v-text-field.mt-2(
outline outline
label='Site Title'
:label='$t(`admin:general.siteTitle`)'
required required
:counter='50' :counter='50'
v-model='config.title' v-model='config.title'
prepend-icon='public' prepend-icon='public'
hint='Displayed in the top bar and appended to all pages meta title.'
:hint='$t(`admin:general.siteTitleHint`)'
persistent-hint persistent-hint
) )
v-divider v-divider
v-subheader Logo #[v-chip.ml-2(label, color='grey', small, outline) coming soon]
v-subheader {{$t('admin:general.logo')}} #[v-chip.ml-2(label, color='grey', small, outline) coming soon]
v-card-text.pb-4.pl-5 v-card-text.pb-4.pl-5
v-layout.px-3(row, align-center) v-layout.px-3(row, align-center)
v-avatar(size='100', :color='$vuetify.dark ? `grey darken-2` : `grey lighten-3`', :tile='config.logoIsSquare') v-avatar(size='100', :color='$vuetify.dark ? `grey darken-2` : `grey lighten-3`', :tile='config.logoIsSquare')
.ml-4 .ml-4
v-btn.mx-0(color='teal', depressed, disabled) v-btn.mx-0(color='teal', depressed, disabled)
v-icon(left) cloud_upload v-icon(left) cloud_upload
span Upload Logo
span {{$t('admin:general.uploadLogo')}}
v-btn(color='teal', depressed, disabled) v-btn(color='teal', depressed, disabled)
v-icon(left) clear 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.
span {{$t('admin:general.uploadClear')}}
.caption.grey--text {{$t('admin:general.uploadSizeHint', { size: '120x120' })}}
.caption.grey--text {{$t('admin:general.uploadTypesHint', { typeList: 'SVG, PNG', lastType: 'JPG' })}}.
v-divider v-divider
v-subheader Footer Copyright
v-subheader {{$t('admin:general.footerCopyright')}}
.px-3.pb-3 .px-3.pb-3
v-text-field( v-text-field(
outline outline
label='Company / Organization Name'
:label='$t(`admin:general.companyName`)'
v-model='config.company' v-model='config.company'
:counter='255' :counter='255'
prepend-icon='business' prepend-icon='business'
persistent-hint persistent-hint
hint='Name to use when displaying copyright notice in the footer. Leave empty to hide.'
:hint='$t(`admin:general.companyNameHint`)'
) )
v-divider v-divider
v-subheader SEO v-subheader SEO
.px-3.pb-3 .px-3.pb-3
v-text-field( v-text-field(
outline outline
label='Site Description'
:label='$t(`admin:general.siteDescription`)'
:counter='255' :counter='255'
v-model='config.description' v-model='config.description'
prepend-icon='explore' prepend-icon='explore'
hint='Default description when none is provided for a page.'
:hint='$t(`admin:general.siteDescriptionHint`)'
persistent-hint persistent-hint
) )
v-select.mt-2( v-select.mt-2(
outline outline
label='Meta Robots'
:label='$t(`admin:general.metaRobots`)'
multiple multiple
:items='metaRobots' :items='metaRobots'
v-model='config.robots' v-model='config.robots'
prepend-icon='explore' prepend-icon='explore'
:return-object='false' :return-object='false'
hint='Default: Index, Follow. Can also be set on a per-page basis.'
:hint='$t(`admin:general.metaRobotsHint`)'
persistent-hint persistent-hint
) )
@ -155,6 +155,7 @@
v-model='config.featurePageRatings' v-model='config.featurePageRatings'
persistent-hint persistent-hint
hint='Allow users to rate pages.' hint='Allow users to rate pages.'
disabled
) )
v-divider.mt-3 v-divider.mt-3
@ -164,6 +165,7 @@
v-model='config.featurePageComments' v-model='config.featurePageComments'
persistent-hint persistent-hint
hint='Allow users to leave comments on pages.' hint='Allow users to leave comments on pages.'
disabled
) )
v-divider.mt-3 v-divider.mt-3
@ -173,6 +175,7 @@
v-model='config.featurePersonalWikis' v-model='config.featurePersonalWikis'
persistent-hint persistent-hint
hint='Allow users to have their own personal wiki.' hint='Allow users to have their own personal wiki.'
disabled
) )
</template> </template>

5
client/components/admin/admin-locale.vue

@ -113,8 +113,9 @@
v-list-tile-sub-title(v-html='lc.nativeName') v-list-tile-sub-title(v-html='lc.nativeName')
v-list-tile-action(v-if='lc.isRTL') v-list-tile-action(v-if='lc.isRTL')
v-chip(label, small, :class='$vuetify.dark ? `text--lighten-5` : `text--darken-2`').caption.grey--text RTL v-chip(label, small, :class='$vuetify.dark ? `text--lighten-5` : `text--darken-2`').caption.grey--text RTL
v-list-tile-action(v-if='lc.isInstalled && lc.installDate < lc.updatedAt', @click='download(lc.code)')
v-icon.blue--text cached
v-list-tile-action(v-if='lc.isInstalled && lc.installDate < lc.updatedAt')
v-btn(icon, @click='download(lc)')
v-icon.blue--text cached
v-list-tile-action(v-else-if='lc.isInstalled') v-list-tile-action(v-else-if='lc.isInstalled')
v-icon.green--text check v-icon.green--text check
v-list-tile-action(v-else-if='lc.isDownloading') v-list-tile-action(v-else-if='lc.isDownloading')

22
client/components/admin/admin-search.vue

@ -5,14 +5,14 @@
.admin-header .admin-header
img.animated.fadeInUp(src='/svg/icon-search.svg', alt='Search Engine', style='width: 80px;') img.animated.fadeInUp(src='/svg/icon-search.svg', alt='Search Engine', style='width: 80px;')
.admin-header-title .admin-header-title
.headline.primary--text.animated.fadeInLeft Search Engine
.subheading.grey--text.animated.fadeInLeft.wait-p2s Configure the search capabilities of your wiki
.headline.primary--text.animated.fadeInLeft {{$t('admin:search.title')}}
.subheading.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.animated.fadeInDown.wait-p2s(outline, color='grey', @click='refresh', large)
v-icon refresh v-icon refresh
v-btn.animated.fadeInDown.wait-p1s(color='black', dark, large, depressed, @click='rebuild') v-btn.animated.fadeInDown.wait-p1s(color='black', dark, large, depressed, @click='rebuild')
v-icon(left) cached v-icon(left) cached
span Rebuild Index
span {{$t('admin:search.rebuildIndex')}}
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) check
span {{$t('common:actions.apply')}} span {{$t('common:actions.apply')}}
@ -20,7 +20,7 @@
v-flex(lg3, xs12) v-flex(lg3, xs12)
v-card.animated.fadeInUp v-card.animated.fadeInUp
v-toolbar(flat, color='primary', dark, dense) v-toolbar(flat, color='primary', dark, dense)
.subheading Search Engine
.subheading {{$t('admin:search.searchEngine')}}
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-tile(:key='eng.key', @click='selectedEngine = eng.key', :disabled='!eng.isAvailable') v-list-tile(:key='eng.key', @click='selectedEngine = eng.key', :disabled='!eng.isAvailable')
@ -45,8 +45,8 @@
.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 Engine Configuration
.body-1.ml-3(v-if='!engine.config || engine.config.length < 1') This engine has no configuration options you can modify.
v-subheader.pl-0 {{$t('admin:search.engineConfig')}}
.body-1.ml-3(v-if='!engine.config || engine.config.length < 1') {{$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'
@ -112,7 +112,7 @@ export default {
async refresh() { async refresh() {
await this.$apollo.queries.engines.refetch() await this.$apollo.queries.engines.refetch()
this.$store.commit('showNotification', { this.$store.commit('showNotification', {
message: 'List of search engines has been refreshed.',
message: this.$t('admin:search.listRefreshSuccess'),
style: 'success', style: 'success',
icon: 'cached' icon: 'cached'
}) })
@ -132,12 +132,12 @@ export default {
}) })
if (_.get(resp, 'data.search.updateSearchEngines.responseResult.succeeded', false)) { if (_.get(resp, 'data.search.updateSearchEngines.responseResult.succeeded', false)) {
this.$store.commit('showNotification', { this.$store.commit('showNotification', {
message: 'Search engine configuration saved successfully.',
message: this.$t('admin:search.configSaveSuccess'),
style: 'success', style: 'success',
icon: 'check' icon: 'check'
}) })
} else { } else {
throw new Error(_.get(resp, 'data.search.updateSearchEngines.responseResult.message', 'An unexpected error occured'))
throw new Error(_.get(resp, 'data.search.updateSearchEngines.responseResult.message', this.$t('common:error.unexpected')))
} }
} catch (err) { } catch (err) {
this.$store.commit('pushGraphError', err) this.$store.commit('pushGraphError', err)
@ -152,12 +152,12 @@ export default {
}) })
if (_.get(resp, 'data.search.rebuildIndex.responseResult.succeeded', false)) { if (_.get(resp, 'data.search.rebuildIndex.responseResult.succeeded', false)) {
this.$store.commit('showNotification', { this.$store.commit('showNotification', {
message: 'Index rebuilt successfully.',
message: this.$t('admin:search.indexRebuildSuccess'),
style: 'success', style: 'success',
icon: 'check' icon: 'check'
}) })
} else { } else {
throw new Error(_.get(resp, 'data.search.rebuildIndex.responseResult.message', 'An unexpected error occured'))
throw new Error(_.get(resp, 'data.search.rebuildIndex.responseResult.message', this.$t('common:error.unexpected')))
} }
} catch (err) { } catch (err) {
this.$store.commit('pushGraphError', err) this.$store.commit('pushGraphError', err)

56
client/components/admin/admin-storage.vue

@ -5,8 +5,8 @@
.admin-header .admin-header
img.animated.fadeInUp(src='/svg/icon-cloud-storage.svg', alt='Storage', style='width: 80px;') img.animated.fadeInUp(src='/svg/icon-cloud-storage.svg', alt='Storage', style='width: 80px;')
.admin-header-title .admin-header-title
.headline.primary--text.animated.fadeInLeft Storage
.subheading.grey--text.animated.fadeInLeft.wait-p4s Set backup and sync targets for your content
.headline.primary--text.animated.fadeInLeft {{$t('admin:storage.title')}}
.subheading.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.animated.fadeInDown.wait-p2s(outline, color='grey', @click='refresh', large)
v-icon refresh v-icon refresh
@ -17,7 +17,7 @@
v-flex(lg3, xs12) v-flex(lg3, xs12)
v-card.animated.fadeInUp v-card.animated.fadeInUp
v-toolbar(flat, color='primary', dark, dense) v-toolbar(flat, color='primary', dark, dense)
.subheading Targets
.subheading {{$t('admin:storage.targets')}}
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-tile(:key='tgt.key', @click='selectedTarget = tgt.key', :disabled='!tgt.isAvailable') v-list-tile(:key='tgt.key', @click='selectedTarget = tgt.key', :disabled='!tgt.isAvailable')
@ -34,7 +34,7 @@
v-card.mt-3.animated.fadeInUp.wait-p2s v-card.mt-3.animated.fadeInUp.wait-p2s
v-toolbar(flat, :color='$vuetify.dark ? `grey darken-3-l5` : `grey darken-3`', dark, dense) v-toolbar(flat, :color='$vuetify.dark ? `grey darken-3-l5` : `grey darken-3`', dark, dense)
.subheading Status
.subheading {{$t('admin:storage.status')}}
v-spacer v-spacer
looping-rhombuses-spinner( looping-rhombuses-spinner(
:animation-duration='5000' :animation-duration='5000'
@ -57,24 +57,24 @@
v-icon(color='white') check_circle v-icon(color='white') check_circle
v-list-tile-content v-list-tile-content
v-list-tile-title.body-2 {{tgt.title}} v-list-tile-title.body-2 {{tgt.title}}
v-list-tile-sub-title.green--text.caption Last synchronization {{tgt.lastAttempt | moment('from') }}
v-list-tile-sub-title.green--text.caption {{$t('admin:storage.lastSync', { time: $options.filters.moment(tgt.lastAttempt, 'from') })}}
template(v-else) template(v-else)
v-list-tile-avatar(color='red') v-list-tile-avatar(color='red')
v-icon(color='white') highlight_off v-icon(color='white') highlight_off
v-list-tile-content v-list-tile-content
v-list-tile-title.body-2 {{tgt.title}} v-list-tile-title.body-2 {{tgt.title}}
v-list-tile-sub-title.red--text.caption Last attempt was {{tgt.lastAttempt | moment('from') }}
v-list-tile-sub-title.red--text.caption {{$t('admin:storage.lastSyncAttempt', { time: $options.filters.moment(tgt.lastAttempt, 'from') })}}
v-list-tile-action v-list-tile-action
v-menu v-menu
v-btn(slot='activator', icon) v-btn(slot='activator', icon)
v-icon(color='red') info v-icon(color='red') info
v-card(width='450') v-card(width='450')
v-toolbar(flat, color='red', dark, dense) Error Message
v-toolbar(flat, color='red', dark, dense) {{$t('admin:storage.errorMsg')}}
v-card-text {{tgt.message}} v-card-text {{tgt.message}}
v-divider(v-if='n < status.length - 1') v-divider(v-if='n < status.length - 1')
v-list-tile(v-if='status.length < 1') v-list-tile(v-if='status.length < 1')
em You don't have any active storage target.
em {{$t('admin:storage.noTarget')}}
v-flex(xs12, lg9) v-flex(xs12, lg9)
v-card.wiki-form.animated.fadeInUp.wait-p2s v-card.wiki-form.animated.fadeInUp.wait-p2s
@ -88,8 +88,8 @@
.caption {{target.description}} .caption {{target.description}}
.caption: 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 Target Configuration
.body-1.ml-3(v-if='!target.config || target.config.length < 1') This storage target has no configuration options you can modify.
v-subheader.pl-0 {{$t('admin:storage.targetConfig')}}
.body-1.ml-3(v-if='!target.config || target.config.length < 1') {{$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'
@ -127,48 +127,50 @@
:class='cfg.value.hint ? "mb-2" : ""' :class='cfg.value.hint ? "mb-2" : ""'
) )
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 Sync Direction
.body-1.ml-3 Choose how content synchronization is handled for this storage target.
v-subheader.pl-0 {{$t('admin:storage.syncDirection')}}
.body-1.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(
label='Bi-directional'
:label='$t(`admin:storage.syncDirBi`)'
color='primary' color='primary'
value='sync' value='sync'
:disabled='target.supportedModes.indexOf(`sync`) < 0' :disabled='target.supportedModes.indexOf(`sync`) < 0'
) )
v-radio( v-radio(
label='Push to target'
:label='$t(`admin:storage.syncDirPush`)'
color='primary' color='primary'
value='push' value='push'
:disabled='target.supportedModes.indexOf(`push`) < 0' :disabled='target.supportedModes.indexOf(`push`) < 0'
) )
v-radio( v-radio(
label='Pull from target'
:label='$t(`admin:storage.syncDirPull`)'
color='primary' color='primary'
value='pull' value='pull'
:disabled='target.supportedModes.indexOf(`pull`) < 0' :disabled='target.supportedModes.indexOf(`pull`) < 0'
) )
.body-1.ml-3 .body-1.ml-3
strong Bi-directional #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`sync`) < 0') Unsupported]
.pb-3 In bi-directional mode, content is first pulled from the storage target. Any newer content overwrites local content. New content since last sync is then pushed to the storage target, overwriting any content on target if present.
strong Push to target #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`push`) < 0') Unsupported]
.pb-3 Content is always pushed to the storage target, overwriting any existing content. This is safest choice for backup scenarios.
strong Pull from target #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`pull`) < 0') Unsupported]
.pb-3 Content is always pulled from the storage target, overwriting any local content which already exists. This choice is usually reserved for single-use content import. Caution with this option as any local content will always be overwritten!
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')}}
strong {{$t('admin:storage.syncDirPush')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`push`) < 0') {{$t('admin:storage.unsupported')}}]
.pb-3 {{$t('admin:storage.syncDirPushHint')}}
strong {{$t('admin:storage.syncDirPull')}} #[em.red--text.text--lighten-2(v-if='target.supportedModes.indexOf(`pull`) < 0') {{$t('admin:storage.unsupported')}}]
.pb-3 {{$t('admin:storage.syncDirPullHint')}}
template(v-if='target.hasSchedule') template(v-if='target.hasSchedule')
v-divider.mt-3 v-divider.mt-3
v-subheader.pl-0 Sync Schedule
.body-1.ml-3 For performance reasons, this storage target synchronize changes on an interval-based schedule, instead of on every change. Define at which interval should the synchronization occur.
v-subheader.pl-0 {{$t('admin:storage.syncSchedule')}}
.body-1.ml-3 {{$t('admin:storage.syncScheduleHint')}}
.pa-3 .pa-3
duration-picker(v-model='target.syncInterval') duration-picker(v-model='target.syncInterval')
.caption.mt-3 Currently set to every #[strong {{getDefaultSchedule(target.syncInterval)}}].
.caption The default is every #[strong {{getDefaultSchedule(target.syncIntervalDefault)}}].
i18next.caption.mt-3(path='admin:storage.syncScheduleCurrent', tag='div')
strong(place='schedule') {{getDefaultSchedule(target.syncInterval)}}
i18next.caption(path='admin:storage.syncScheduleDefault', tag='div')
strong {{getDefaultSchedule(target.syncIntervalDefault)}}
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 Actions
v-subheader.pl-0 {{$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')
@ -182,7 +184,7 @@
:color='$vuetify.dark ? `blue` : `primary`' :color='$vuetify.dark ? `blue` : `primary`'
:disabled='runningAction' :disabled='runningAction'
:loading='runningActionHandler === act.handler' :loading='runningActionHandler === act.handler'
) Run
) {{$t('admin:storage.actionRun')}}
</template> </template>

Loading…
Cancel
Save