fix: UI fixes + search crash (#1086)
This commit is contained in:
parent
57f79c19b2
commit
d69dde1df5
@ -104,7 +104,7 @@
|
|||||||
v-list-item(to='/dev-flags')
|
v-list-item(to='/dev-flags')
|
||||||
v-list-item-title {{ $t('admin:dev.flags.title') }}
|
v-list-item-title {{ $t('admin:dev.flags.title') }}
|
||||||
v-list-item(href='/graphql')
|
v-list-item(href='/graphql')
|
||||||
v-list-item-title {{ $t('admin:dev.graphiql.title') }}
|
v-list-item-title GraphQL
|
||||||
//- v-list-item(to='/dev-graphiql')
|
//- v-list-item(to='/dev-graphiql')
|
||||||
//- v-list-item-title {{ $t('admin:dev.graphiql.title') }}
|
//- v-list-item-title {{ $t('admin:dev.graphiql.title') }}
|
||||||
//- v-list-item(to='/dev-voyager')
|
//- v-list-item(to='/dev-voyager')
|
||||||
|
@ -148,16 +148,6 @@
|
|||||||
persistent-hint
|
persistent-hint
|
||||||
inset
|
inset
|
||||||
)
|
)
|
||||||
v-switch.ml-3(
|
|
||||||
v-if='strategy.key === `local`'
|
|
||||||
:disabled='!strategy.selfRegistration || true'
|
|
||||||
v-model='strategy.recaptcha'
|
|
||||||
label='Use reCAPTCHA by Google'
|
|
||||||
color='primary'
|
|
||||||
hint='Protects against spam robots and malicious registrations.'
|
|
||||||
persistent-hint
|
|
||||||
inset
|
|
||||||
)
|
|
||||||
v-combobox.ml-3.mt-3(
|
v-combobox.ml-3.mt-3(
|
||||||
:label='$t(`admin:auth.domainsWhitelist`)'
|
:label='$t(`admin:auth.domainsWhitelist`)'
|
||||||
v-model='strategy.domainWhitelist'
|
v-model='strategy.domainWhitelist'
|
||||||
@ -191,7 +181,19 @@
|
|||||||
)
|
)
|
||||||
template(v-if='strategy.useForm')
|
template(v-if='strategy.useForm')
|
||||||
v-divider.mt-3
|
v-divider.mt-3
|
||||||
.overline.my-5 {{$t('admin:auth.security')}}
|
.d-flex.my-5.align-center
|
||||||
|
.overline {{$t('admin:auth.security')}}
|
||||||
|
v-chip.ml-3.grey--text(outlined, small, label) Coming soon
|
||||||
|
v-switch.ml-3(
|
||||||
|
v-if='strategy.key === `local`'
|
||||||
|
:disabled='!strategy.selfRegistration || true'
|
||||||
|
v-model='strategy.recaptcha'
|
||||||
|
label='Use reCAPTCHA by Google'
|
||||||
|
color='primary'
|
||||||
|
hint='Protects against spam robots and malicious registrations.'
|
||||||
|
persistent-hint
|
||||||
|
inset
|
||||||
|
)
|
||||||
v-switch.ml-3(
|
v-switch.ml-3(
|
||||||
v-model='strategy.recaptcha'
|
v-model='strategy.recaptcha'
|
||||||
:disabled='true'
|
:disabled='true'
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
v-icon(left) mdi-check
|
v-icon(left) mdi-check
|
||||||
span {{$t('common:actions.apply')}}
|
span {{$t('common:actions.apply')}}
|
||||||
|
|
||||||
v-card.mt-3.white.grey--text.text--darken-3
|
v-card.mt-3(:class='$vuetify.theme.dark ? `grey darken-3-d5` : `white grey--text text--darken-3`')
|
||||||
v-alert(color='red', :value='true', icon='mdi-alert', dark, prominent)
|
v-alert(color='red', :value='true', icon='mdi-alert', dark, prominent)
|
||||||
span Do NOT enable these flags unless you know what you're doing!
|
span Do NOT enable these flags unless you know what you're doing!
|
||||||
.caption Doing so may result in data loss or broken installation!
|
.caption Doing so may result in data loss or broken installation!
|
||||||
|
@ -72,6 +72,7 @@
|
|||||||
chips
|
chips
|
||||||
deletable-chips
|
deletable-chips
|
||||||
small-chips
|
small-chips
|
||||||
|
height='48px'
|
||||||
style='flex: 0 1 440px;'
|
style='flex: 0 1 440px;'
|
||||||
:menu-props='{ "maxHeight": 500 }'
|
:menu-props='{ "maxHeight": 500 }'
|
||||||
clearable
|
clearable
|
||||||
@ -99,6 +100,7 @@
|
|||||||
v-model='rule.match'
|
v-model='rule.match'
|
||||||
placeholder='Match...'
|
placeholder='Match...'
|
||||||
hide-details
|
hide-details
|
||||||
|
height='48px'
|
||||||
style='flex: 0 1 250px;'
|
style='flex: 0 1 250px;'
|
||||||
dense
|
dense
|
||||||
)
|
)
|
||||||
@ -118,6 +120,7 @@
|
|||||||
placeholder='Any Locale'
|
placeholder='Any Locale'
|
||||||
multiple
|
multiple
|
||||||
hide-details
|
hide-details
|
||||||
|
height='48px'
|
||||||
dense
|
dense
|
||||||
:menu-props='{ "minWidth": 250 }'
|
:menu-props='{ "minWidth": 250 }'
|
||||||
style='flex: 0 1 150px;'
|
style='flex: 0 1 150px;'
|
||||||
@ -161,7 +164,7 @@
|
|||||||
:color='$vuetify.theme.dark ? `grey` : `blue-grey`'
|
:color='$vuetify.theme.dark ? `grey` : `blue-grey`'
|
||||||
)
|
)
|
||||||
|
|
||||||
v-btn.ml-2.mt-1(icon, @click='removeRule(rule.id)', small)
|
v-btn.ml-2(icon, @click='removeRule(rule.id)', small)
|
||||||
v-icon(:color='$vuetify.theme.dark ? `grey` : `blue-grey`') mdi-close
|
v-icon(:color='$vuetify.theme.dark ? `grey` : `blue-grey`') mdi-close
|
||||||
|
|
||||||
v-divider.mt-3
|
v-divider.mt-3
|
||||||
@ -277,6 +280,7 @@ export default {
|
|||||||
background-color: mc('blue-grey', '100');
|
background-color: mc('blue-grey', '100');
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: .5rem;
|
padding: .5rem;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
&-enter-active, &-leave-active {
|
&-enter-active, &-leave-active {
|
||||||
transition: all .5s ease;
|
transition: all .5s ease;
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title Unassign
|
v-list-item-title Unassign
|
||||||
template(slot='no-data')
|
template(slot='no-data')
|
||||||
v-alert.ma-3(icon='warning', outlined) No users to display.
|
v-alert.ma-3(icon='mdi-alert', outlined) No users to display.
|
||||||
.text-center.py-2(v-if='group.users.length > 15')
|
.text-center.py-2(v-if='group.users.length > 15')
|
||||||
v-pagination(v-model='pagination', :length='pageCount')
|
v-pagination(v-model='pagination', :length='pageCount')
|
||||||
|
|
||||||
|
@ -58,17 +58,17 @@
|
|||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Title
|
v-list-item-title: .overline.grey--text Title
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.title }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.title }}
|
||||||
v-divider
|
v-divider
|
||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Description
|
v-list-item-title: .overline.grey--text Description
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.description || '-' }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.description || '-' }}
|
||||||
v-divider
|
v-divider
|
||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Locale
|
v-list-item-title: .overline.grey--text Locale
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.locale }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.locale }}
|
||||||
v-list-item-action
|
v-list-item-action
|
||||||
v-btn(icon, x-small)
|
v-btn(icon, x-small)
|
||||||
v-icon(color='grey') mdi-pencil
|
v-icon(color='grey') mdi-pencil
|
||||||
@ -76,7 +76,7 @@
|
|||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Path
|
v-list-item-title: .overline.grey--text Path
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.path }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.path }}
|
||||||
v-list-item-action
|
v-list-item-action
|
||||||
v-btn(icon, x-small)
|
v-btn(icon, x-small)
|
||||||
v-icon(color='grey') mdi-pencil
|
v-icon(color='grey') mdi-pencil
|
||||||
@ -84,14 +84,14 @@
|
|||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Editor
|
v-list-item-title: .overline.grey--text Editor
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.editor || '?' }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.editor || '?' }}
|
||||||
v-divider
|
v-divider
|
||||||
v-list-item
|
v-list-item
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Content Type
|
v-list-item-title: .overline.grey--text Content Type
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.contentType || '?' }}
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.contentType || '?' }}
|
||||||
|
|
||||||
v-toolbar.elevation-2.mt-3.animated.fadeInUp.wait-p4s(color='white', dense)
|
v-toolbar.elevation-2.mt-3.animated.fadeInUp.wait-p4s(:color='$vuetify.theme.dark ? `grey darken-3-d5` : `white`', dense)
|
||||||
v-spacer
|
v-spacer
|
||||||
v-btn(color='primary', text, :href='`/` + page.locale + `/` + page.path')
|
v-btn(color='primary', text, :href='`/` + page.locale + `/` + page.path')
|
||||||
v-icon(left) mdi-text-subject
|
v-icon(left) mdi-text-subject
|
||||||
@ -124,7 +124,7 @@
|
|||||||
v-icon(color='grey') mdi-account
|
v-icon(color='grey') mdi-account
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Creator
|
v-list-item-title: .overline.grey--text Creator
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.creatorName }} #[em.caption ({{ page.creatorEmail }})]
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.creatorName }} #[em.caption ({{ page.creatorEmail }})]
|
||||||
v-list-item-action
|
v-list-item-action
|
||||||
v-list-item-action-text {{ page.createdAt | moment('calendar') }}
|
v-list-item-action-text {{ page.createdAt | moment('calendar') }}
|
||||||
v-divider
|
v-divider
|
||||||
@ -134,7 +134,7 @@
|
|||||||
v-icon(color='grey') mdi-account
|
v-icon(color='grey') mdi-account
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title: .overline.grey--text Last Editor
|
v-list-item-title: .overline.grey--text Last Editor
|
||||||
v-list-item-subtitle.body-2.grey--text.text--darken-3 {{ page.authorName }} #[em.caption ({{ page.authorEmail }})]
|
v-list-item-subtitle.body-2(:class='$vuetify.theme.dark ? `grey--text text--lighten-2` : `grey--text text--darken-3`') {{ page.authorName }} #[em.caption ({{ page.authorEmail }})]
|
||||||
v-list-item-action
|
v-list-item-action
|
||||||
v-list-item-action-text {{ page.updatedAt | moment('calendar') }}
|
v-list-item-action-text {{ page.updatedAt | moment('calendar') }}
|
||||||
v-card.mt-3.animated.fadeInUp.wait-p4s
|
v-card.mt-3.animated.fadeInUp.wait-p4s
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.search-results(v-if='searchIsFocused || search.length > 1')
|
.search-results(v-if='searchIsFocused || (search && search.length > 1)')
|
||||||
.search-results-container
|
.search-results-container
|
||||||
.search-results-help(v-if='search.length < 2')
|
.search-results-help(v-if='search && search.length < 2')
|
||||||
img(src='/svg/icon-search-alt.svg')
|
img(src='/svg/icon-search-alt.svg')
|
||||||
.mt-4 {{$t('common:header.searchHint')}}
|
.mt-4 {{$t('common:header.searchHint')}}
|
||||||
.search-results-loader(v-else-if='searchIsLoading && results.length < 1')
|
.search-results-loader(v-else-if='searchIsLoading && (!results || results.length < 1)')
|
||||||
orbit-spinner(
|
orbit-spinner(
|
||||||
:animation-duration='1000'
|
:animation-duration='1000'
|
||||||
:size='100'
|
:size='100'
|
||||||
color='#FFF'
|
color='#FFF'
|
||||||
)
|
)
|
||||||
.headline.mt-5 {{$t('common:header.searchLoading')}}
|
.headline.mt-5 {{$t('common:header.searchLoading')}}
|
||||||
.search-results-none(v-else-if='!searchIsLoading && results.length < 1')
|
.search-results-none(v-else-if='!searchIsLoading && (!results || results.length < 1)')
|
||||||
img(src='/svg/icon-no-results.svg', alt='No Results')
|
img(src='/svg/icon-no-results.svg', alt='No Results')
|
||||||
.subheading {{$t('common:header.searchNoResult')}}
|
.subheading {{$t('common:header.searchNoResult')}}
|
||||||
template(v-if='results.length > 0')
|
template(v-if='results && results.length > 0')
|
||||||
v-subheader.white--text {{$t('common:header.searchResultsCount', { total: response.totalHits })}}
|
v-subheader.white--text {{$t('common:header.searchResultsCount', { total: response.totalHits })}}
|
||||||
v-list.search-results-items.radius-7.py-0(two-line)
|
v-list.search-results-items.radius-7.py-0(two-line)
|
||||||
template(v-for='(item, idx) of results')
|
template(v-for='(item, idx) of results')
|
||||||
@ -34,7 +34,7 @@
|
|||||||
v-model='pagination'
|
v-model='pagination'
|
||||||
:length='paginationLength'
|
:length='paginationLength'
|
||||||
)
|
)
|
||||||
template(v-if='suggestions.length > 0')
|
template(v-if='suggestions && suggestions.length > 0')
|
||||||
v-subheader.white--text.mt-3 {{$t('common:header.searchDidYouMean')}}
|
v-subheader.white--text.mt-3 {{$t('common:header.searchDidYouMean')}}
|
||||||
v-list.search-results-suggestions.radius-7(dense, dark)
|
v-list.search-results-suggestions.radius-7(dense, dark)
|
||||||
template(v-for='(term, idx) of suggestions')
|
template(v-for='(term, idx) of suggestions')
|
||||||
@ -44,7 +44,7 @@
|
|||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title(v-html='term')
|
v-list-item-title(v-html='term')
|
||||||
v-divider(v-if='idx < suggestions.length - 1')
|
v-divider(v-if='idx < suggestions.length - 1')
|
||||||
.text-xs-center.pt-5(v-if='search.length > 1')
|
.text-xs-center.pt-5(v-if='search && search.length > 1')
|
||||||
//- v-btn.mx-2(outlined, color='orange', @click='search = ``', v-if='results.length > 0')
|
//- v-btn.mx-2(outlined, color='orange', @click='search = ``', v-if='results.length > 0')
|
||||||
//- v-icon(left) mdi-content-save
|
//- v-icon(left) mdi-content-save
|
||||||
//- span {{$t('common:header.searchCopyLink')}}
|
//- span {{$t('common:header.searchCopyLink')}}
|
||||||
@ -97,7 +97,7 @@ export default {
|
|||||||
watch: {
|
watch: {
|
||||||
search(newValue, oldValue) {
|
search(newValue, oldValue) {
|
||||||
this.cursor = 0
|
this.cursor = 0
|
||||||
if (newValue.length < 2) {
|
if (newValue && newValue.length < 2) {
|
||||||
this.response.results = []
|
this.response.results = []
|
||||||
this.response.suggestions = []
|
this.response.suggestions = []
|
||||||
} else {
|
} else {
|
||||||
@ -107,6 +107,7 @@ export default {
|
|||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$root.$on('searchMove', (dir) => {
|
this.$root.$on('searchMove', (dir) => {
|
||||||
|
console.info()
|
||||||
this.cursor += ((dir === 'up') ? -1 : 1)
|
this.cursor += ((dir === 'up') ? -1 : 1)
|
||||||
if (this.cursor < -1) {
|
if (this.cursor < -1) {
|
||||||
this.cursor = -1
|
this.cursor = -1
|
||||||
@ -115,6 +116,10 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.$root.$on('searchEnter', () => {
|
this.$root.$on('searchEnter', () => {
|
||||||
|
if (!this.results) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (this.cursor >= 0 && this.cursor < this.results.length) {
|
if (this.cursor >= 0 && this.cursor < this.results.length) {
|
||||||
this.goToPage(_.nth(this.results, this.cursor))
|
this.goToPage(_.nth(this.results, this.cursor))
|
||||||
} else if (this.cursor >= 0) {
|
} else if (this.cursor >= 0) {
|
||||||
|
@ -73,21 +73,21 @@
|
|||||||
v-card.mb-5(v-if='tags.length > 0')
|
v-card.mb-5(v-if='tags.length > 0')
|
||||||
.pa-5
|
.pa-5
|
||||||
.overline.teal--text.pb-2(:class='$vuetify.theme.dark ? `text--lighten-3` : ``') Tags
|
.overline.teal--text.pb-2(:class='$vuetify.theme.dark ? `text--lighten-3` : ``') Tags
|
||||||
v-chip.mr-1(
|
v-chip.mr-1.mb-1(
|
||||||
label
|
label
|
||||||
color='teal lighten-5'
|
:color='$vuetify.theme.dark ? `teal darken-1` : `teal lighten-5`'
|
||||||
v-for='(tag, idx) in tags'
|
v-for='(tag, idx) in tags'
|
||||||
:href='`/t/` + tag.tag'
|
:href='`/t/` + tag.tag'
|
||||||
:key='`tag-` + tag.tag'
|
:key='`tag-` + tag.tag'
|
||||||
)
|
)
|
||||||
v-icon(color='teal', left, small) mdi-tag
|
v-icon(:color='$vuetify.theme.dark ? `teal lighten-3` : `teal`', left, small) mdi-tag
|
||||||
span.teal--text.text--darken-2 {{tag.title}}
|
span(:class='$vuetify.theme.dark ? `teal--text text--lighten-5` : `teal--text text--darken-2`') {{tag.title}}
|
||||||
v-chip.mr-1(
|
v-chip.mr-1(
|
||||||
label
|
label
|
||||||
color='teal lighten-5'
|
:color='$vuetify.theme.dark ? `teal darken-1` : `teal lighten-5`'
|
||||||
:href='`/t/` + tags.map(t => t.tag).join(`/`)'
|
:href='`/t/` + tags.map(t => t.tag).join(`/`)'
|
||||||
)
|
)
|
||||||
v-icon(color='teal', size='20') mdi-tag-multiple
|
v-icon(:color='$vuetify.theme.dark ? `teal lighten-3` : `teal`', size='20') mdi-tag-multiple
|
||||||
|
|
||||||
v-card.mb-5
|
v-card.mb-5
|
||||||
.pa-5
|
.pa-5
|
||||||
|
@ -32,22 +32,12 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
// TODO: Add user permissions filtering
|
// TODO: Add user permissions filtering
|
||||||
builder.andWhere(builderSub => {
|
builder.andWhere(builderSub => {
|
||||||
switch (WIKI.config.db.type) {
|
if (WIKI.config.db.type === 'postgres') {
|
||||||
case 'postgres':
|
|
||||||
builderSub.where('title', 'ILIKE', `%${q}%`)
|
builderSub.where('title', 'ILIKE', `%${q}%`)
|
||||||
builderSub.orWhere('description', 'ILIKE', `%${q}%`)
|
builderSub.orWhere('description', 'ILIKE', `%${q}%`)
|
||||||
break
|
} else {
|
||||||
case 'mysql':
|
|
||||||
case 'mariadb':
|
|
||||||
builderSub.whereRaw(`title LIKE '%?%' COLLATE utf8_general_ci`, [q])
|
|
||||||
builderSub.orWhereRaw(`description LIKE '%?%' COLLATE utf8_general_ci`, [q])
|
|
||||||
break
|
|
||||||
|
|
||||||
// TODO: MSSQL handling
|
|
||||||
default:
|
|
||||||
builderSub.where('title', 'LIKE', `%${q}%`)
|
builderSub.where('title', 'LIKE', `%${q}%`)
|
||||||
builderSub.orWhere('description', 'LIKE', `%${q}%`)
|
builderSub.orWhere('description', 'LIKE', `%${q}%`)
|
||||||
break
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user