remove vuetifycss and materialicon -> use threeshake
@nuxt/vuetify etc...
This commit is contained in:
142
assets/variables.scss
Normal file
142
assets/variables.scss
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
// assets/variables.scss
|
||||||
|
|
||||||
|
// Variables you want to modify
|
||||||
|
// $btn-border-radius: 0px;
|
||||||
|
|
||||||
|
// If you need to extend Vuetify SASS lists
|
||||||
|
// $material-light: ( cards: blue );
|
||||||
|
|
||||||
|
@import '~vuetify/src/styles/styles.sass';
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
overflow: auto !important;
|
||||||
|
scrollbar-color: #FF4511 #111;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-dialog .theme--dark.v-card {
|
||||||
|
background-color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-application .p-description.text-body-1 {
|
||||||
|
letter-spacing: normal !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home {
|
||||||
|
max-width: 1400px;
|
||||||
|
padding: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#events {
|
||||||
|
margin: 0 auto;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#calh {
|
||||||
|
height: 292px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-dialog {
|
||||||
|
width: 600px;
|
||||||
|
max-width: 800px;
|
||||||
|
&.v-dialog--fullscreen {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme--dark.v-list {
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.v-autocomplete__content.v-menu__content {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
scrollbar-color: #FF4511 #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
// EVENT
|
||||||
|
.event {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 330px;
|
||||||
|
max-width: 500px !important;
|
||||||
|
flex-grow: 1;
|
||||||
|
margin-top: .4em;
|
||||||
|
margin-right: .4em;
|
||||||
|
transition: all .5s;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: -webkit-box;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0.5rem 1rem 0.5rem 1rem;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
font-size: 1.1em !important;
|
||||||
|
line-height: 1.2em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
max-height: 250px;
|
||||||
|
min-height: 160px;
|
||||||
|
object-fit: cover;
|
||||||
|
object-position: top;
|
||||||
|
aspect-ratio: 1.7778;
|
||||||
|
}
|
||||||
|
|
||||||
|
.place {
|
||||||
|
max-width: 100%;
|
||||||
|
span {
|
||||||
|
display: block;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.vc-past {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#event {
|
||||||
|
max-width: 1200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags .v-chip .v-chip__content {
|
||||||
|
max-width: 120px;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.cursorPointer {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
white-space: break-spaces;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
nuxt-link(:to='`/announcement/${announcement.id}`')
|
nuxt-link(:to='`/announcement/${announcement.id}`')
|
||||||
v-alert.mb-1(border='left' type='info' color="primary" show-icon) {{announcement.title}}
|
v-alert.mb-1(border='left' type='info' color="primary" :icon='mdiInformation') {{announcement.title}}
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mdiInformation } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
data () {
|
||||||
|
return { mdiInformation }
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
announcement: { type: Object, default: () => ({}) }
|
announcement: { type: Object, default: () => ({}) }
|
||||||
},
|
}
|
||||||
computed: mapState(['announcements'])
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -7,56 +7,56 @@
|
|||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.bold() }"
|
:class="{ primary: isActive.bold() }"
|
||||||
@click="commands.bold")
|
@click="commands.bold")
|
||||||
v-icon mdi-format-bold
|
v-icon(v-text='mdiFormatBold')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.underline() }"
|
:class="{ primary: isActive.underline() }"
|
||||||
@click="commands.underline")
|
@click="commands.underline")
|
||||||
v-icon mdi-format-underline
|
v-icon(v-text='mdiFormatUnderline')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.strike() }"
|
:class="{ primary: isActive.strike() }"
|
||||||
@click="commands.strike")
|
@click="commands.strike")
|
||||||
v-icon mdi-format-strikethrough-variant
|
v-icon(v-text='mdiFormatStrikethroughVariant')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.italic() }"
|
:class="{ primary: isActive.italic() }"
|
||||||
@click="commands.italic")
|
@click="commands.italic")
|
||||||
v-icon mdi-format-italic
|
v-icon(v-text='mdiFormatItalic')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.heading({level: 1}) }"
|
:class="{ primary: isActive.heading({level: 1}) }"
|
||||||
@click="commands.heading({level: 1})")
|
@click="commands.heading({level: 1})")
|
||||||
v-icon mdi-format-header-1
|
v-icon(v-text='mdiFormatHeader1')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.heading({level: 2}) }"
|
:class="{ primary: isActive.heading({level: 2}) }"
|
||||||
@click="commands.heading({level: 2})")
|
@click="commands.heading({level: 2})")
|
||||||
v-icon mdi-format-header-2
|
v-icon(v-text='mdiFormatHeader2')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.heading({level: 3}) }"
|
:class="{ primary: isActive.heading({level: 3}) }"
|
||||||
@click="commands.heading({level: 3})")
|
@click="commands.heading({level: 3})")
|
||||||
v-icon mdi-format-header-3
|
v-icon(v-text='mdiFormatHeader3')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.code() }"
|
:class="{ primary: isActive.code() }"
|
||||||
@click="commands.code")
|
@click="commands.code")
|
||||||
v-icon mdi-code-tags
|
v-icon(v-text='mdiCodeTags')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.blockquote() }"
|
:class="{ primary: isActive.blockquote() }"
|
||||||
@click="commands.blockquote")
|
@click="commands.blockquote")
|
||||||
v-icon mdi-format-quote-open
|
v-icon(v-text='mdiFormatQuoteOpen')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1'
|
v-btn(icon text tabindex='-1'
|
||||||
:class="{ primary: isActive.bullet_list() }"
|
:class="{ primary: isActive.bullet_list() }"
|
||||||
@click="commands.bullet_list")
|
@click="commands.bullet_list")
|
||||||
v-icon mdi-format-list-bulleted
|
v-icon(v-text='mdiFormatListBulleted')
|
||||||
|
|
||||||
v-btn(icon text tabindex='-1' :class='{ primary: isActive.link() }'
|
v-btn(icon text tabindex='-1' :class='{ primary: isActive.link() }'
|
||||||
@click='commands.link({href: getMarkAttrs("link") && getMarkAttrs("link").href ? "" : "https://"}); $refs.link.focus();')
|
@click='commands.link({href: getMarkAttrs("link") && getMarkAttrs("link").href ? "" : "https://"}); $refs.link.focus();')
|
||||||
v-icon mdi-link
|
v-icon(v-text='mdiLink')
|
||||||
v-text-field.pt-0.ml-1(v-show='isActive.link()' ref='link' @focus='focus' @blur='blur' hide-details
|
v-text-field.pt-0.ml-1(v-show='isActive.link()' ref='link' @focus='focus' @blur='blur' hide-details
|
||||||
:value='isActive.link() && getMarkAttrs("link") && getMarkAttrs("link").href || ""'
|
:value='isActive.link() && getMarkAttrs("link") && getMarkAttrs("link").href || ""'
|
||||||
@keypress.enter='commands.link({ href: $event.target.value}); editor.focus()')
|
@keypress.enter='commands.link({ href: $event.target.value}); editor.focus()')
|
||||||
@@ -65,6 +65,9 @@
|
|||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import debounce from 'lodash/debounce'
|
import debounce from 'lodash/debounce'
|
||||||
|
import { mdiLink, mdiFormatListBulleted, mdiFormatQuoteOpen, mdiCodeTags,
|
||||||
|
mdiFormatHeader1, mdiFormatHeader2, mdiFormatHeader3, mdiFormatItalic,
|
||||||
|
mdiFormatStrikethroughVariant, mdiFormatBold, mdiFormatUnderline } from '@mdi/js'
|
||||||
import { Editor, EditorContent, EditorMenuBar, EditorMenuBubble } from 'tiptap'
|
import { Editor, EditorContent, EditorMenuBar, EditorMenuBubble } from 'tiptap'
|
||||||
import {
|
import {
|
||||||
Blockquote,
|
Blockquote,
|
||||||
@@ -97,6 +100,9 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiLink, mdiFormatListBulleted, mdiFormatQuoteOpen, mdiCodeTags,
|
||||||
|
mdiFormatHeader1, mdiFormatHeader2, mdiFormatHeader3, mdiFormatItalic,
|
||||||
|
mdiFormatStrikethroughVariant, mdiFormatBold, mdiFormatUnderline,
|
||||||
options: [],
|
options: [],
|
||||||
linkActive: false,
|
linkActive: false,
|
||||||
editor: null,
|
editor: null,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
v-card.h-event.event.d-flex(itemscope itemtype="https://schema.org/Event")
|
v-card.h-event.event.d-flex(itemscope itemtype="https://schema.org/Event")
|
||||||
nuxt-link(:to='`/event/${event.slug || event.id}`' itemprop="url")
|
nuxt-link(:to='`/event/${event.slug || event.id}`' itemprop="url")
|
||||||
img.img.u-featured(:src='thumbnail' :alt='alt' :loading='this.lazy?"lazy":"eager"' itemprop="image" :style="{ 'object-position': thumbnailPosition }")
|
img.img.u-featured(:src='thumbnail' :alt='alt' :loading='this.lazy?"lazy":"eager"' itemprop="image" :style="{ 'object-position': thumbnailPosition }")
|
||||||
v-icon.float-right.mr-1(v-if='event.parentId' color='success') mdi-repeat
|
v-icon.float-right.mr-1(v-if='event.parentId' color='success' v-text='mdiRepeat')
|
||||||
.title.p-name(itemprop="name") {{event.title}}
|
.title.p-name(itemprop="name") {{event.title}}
|
||||||
|
|
||||||
v-card-text.body.pt-0.pb-0
|
v-card-text.body.pt-0.pb-0
|
||||||
@@ -19,35 +19,39 @@
|
|||||||
v-menu(offset-y)
|
v-menu(offset-y)
|
||||||
template(v-slot:activator="{on}")
|
template(v-slot:activator="{on}")
|
||||||
v-btn.align-self-end(icon v-on='on' color='primary' alt='more')
|
v-btn.align-self-end(icon v-on='on' color='primary' alt='more')
|
||||||
v-icon mdi-dots-vertical
|
v-icon(v-text='mdiDotsVertical')
|
||||||
v-list(dense)
|
v-list(dense)
|
||||||
v-list-item-group
|
v-list-item-group
|
||||||
v-list-item(@click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)')
|
v-list-item(@click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-content-copy
|
v-icon(v-text='mdiContentCopy')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.copy_link')}}
|
v-list-item-title {{$t('common.copy_link')}}
|
||||||
v-list-item(:href='`/api/event/${event.slug || event.id}.ics`')
|
v-list-item(:href='`/api/event/${event.slug || event.id}.ics`')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-calendar-export
|
v-icon(v-text='mdiCalendarExport')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.add_to_calendar')}}
|
v-list-item-title {{$t('common.add_to_calendar')}}
|
||||||
v-list-item(v-if='is_mine' :to='`/add/${event.id}`')
|
v-list-item(v-if='is_mine' :to='`/add/${event.id}`')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-pencil
|
v-icon(v-text='mdiPencil')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.edit')}}
|
v-list-item-title {{$t('common.edit')}}
|
||||||
v-list-item(v-if='is_mine' @click='remove(false)')
|
v-list-item(v-if='is_mine' @click='remove(false)')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon(color='error') mdi-delete-forever
|
v-icon(color='error' v-text='mdiDeleteForever')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.remove')}}
|
v-list-item-title {{$t('common.remove')}}
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import clipboard from '../assets/clipboard'
|
import clipboard from '../assets/clipboard'
|
||||||
|
import { mdiRepeat, mdiPencil, mdiDotsVertical, mdiContentCopy, mdiCalendarExport, mdiDeleteForever } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
data () {
|
||||||
|
return { mdiRepeat, mdiPencil, mdiDotsVertical, mdiContentCopy, mdiCalendarExport, mdiDeleteForever }
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
event: { type: Object, default: () => ({}) },
|
event: { type: Object, default: () => ({}) },
|
||||||
lazy: Boolean
|
lazy: Boolean
|
||||||
|
|||||||
@@ -9,14 +9,18 @@ div#list
|
|||||||
v-for='event in computedEvents'
|
v-for='event in computedEvents'
|
||||||
:key='`${event.id}_${event.start_datetime}`' small)
|
:key='`${event.id}_${event.start_datetime}`' small)
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-subtitle <v-icon small color='success' v-if='event.parentId'>mdi-repeat</v-icon> {{event|when}}
|
v-list-item-subtitle <v-icon small color='success' v-if='event.parentId' v-text='mdiRepeat'></v-icon> {{event|when}}
|
||||||
span.primary--text.ml-1 @{{event.place.name}}
|
span.primary--text.ml-1 @{{event.place.name}}
|
||||||
v-list-item-title(v-text='event.title')
|
v-list-item-title(v-text='event.title')
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiRepeat } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'List',
|
name: 'List',
|
||||||
|
data () {
|
||||||
|
return { mdiRepeat }
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
|
|||||||
@@ -12,52 +12,57 @@
|
|||||||
|
|
||||||
v-spacer
|
v-spacer
|
||||||
v-btn(v-if='$auth.loggedIn || settings.allow_anon_event' icon nuxt to='/add' :aria-label='$t("common.add_event")')
|
v-btn(v-if='$auth.loggedIn || settings.allow_anon_event' icon nuxt to='/add' :aria-label='$t("common.add_event")')
|
||||||
v-icon(large color='primary') mdi-plus
|
v-icon(large color='primary' v-text='mdiPlus')
|
||||||
|
|
||||||
v-btn(icon nuxt to='/export' :aria-label='$t("common.share")')
|
v-btn(icon nuxt to='/export' :aria-label='$t("common.share")')
|
||||||
v-icon mdi-share-variant
|
v-icon(v-text='mdiShareVariant')
|
||||||
|
|
||||||
v-btn(v-if='!$auth.loggedIn' icon nuxt to='/login' :aria-label='$t("common.login")')
|
v-btn(v-if='!$auth.loggedIn' icon nuxt to='/login' :aria-label='$t("common.login")')
|
||||||
v-icon mdi-login
|
v-icon(v-text='mdiLogin')
|
||||||
|
|
||||||
client-only
|
client-only
|
||||||
v-menu(v-if='$auth.loggedIn' offset-y)
|
v-menu(v-if='$auth.loggedIn' offset-y)
|
||||||
template(v-slot:activator="{ on, attrs }")
|
template(v-slot:activator="{ on, attrs }")
|
||||||
v-btn(icon v-bind='attrs' v-on='on' aria-label='Menu')
|
v-btn(icon v-bind='attrs' v-on='on' aria-label='Menu')
|
||||||
v-icon mdi-dots-vertical
|
v-icon(v-text='mdiDotsVertical')
|
||||||
v-list
|
v-list
|
||||||
v-list-item(nuxt to='/settings')
|
v-list-item(nuxt to='/settings')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-cog
|
v-icon(v-text='mdiCog')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.settings')}}
|
v-list-item-title {{$t('common.settings')}}
|
||||||
|
|
||||||
v-list-item(v-if='$auth.user.is_admin' nuxt to='/admin')
|
v-list-item(v-if='$auth.user.is_admin' nuxt to='/admin')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-account
|
v-icon(v-text='mdiAccount')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.admin')}}
|
v-list-item-title {{$t('common.admin')}}
|
||||||
|
|
||||||
v-list-item(@click='logout')
|
v-list-item(@click='logout')
|
||||||
v-list-item-icon
|
v-list-item-icon
|
||||||
v-icon mdi-logout
|
v-icon(v-text='mdiLogout')
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title {{$t('common.logout')}}
|
v-list-item-title {{$t('common.logout')}}
|
||||||
template(#placeholder)
|
template(#placeholder)
|
||||||
v-btn(icon aria-label='Menu')
|
v-btn(v-if='$auth.loggedIn' icon aria-label='Menu')
|
||||||
v-icon mdi-dots-vertical
|
v-icon(v-text='mdiDotsVertical')
|
||||||
|
|
||||||
|
|
||||||
v-btn(icon @click='clipboard(feedLink, "common.feed_url_copied")' aria-label='RSS')
|
v-btn(icon @click='clipboard(feedLink, "common.feed_url_copied")' aria-label='RSS')
|
||||||
v-icon(color='orange') mdi-rss
|
v-icon(color='orange' v-text='mdiRss')
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import clipboard from '../assets/clipboard'
|
import clipboard from '../assets/clipboard'
|
||||||
|
import { mdiPlus, mdiShareVariant, mdiLogin, mdiDotsVertical, mdiLogout, mdiAccount, mdiCog, mdiRss } from '@mdi/js'
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Nav',
|
name: 'Nav',
|
||||||
|
data () {
|
||||||
|
return { mdiPlus, mdiShareVariant, mdiLogout, mdiLogin, mdiDotsVertical, mdiAccount, mdiCog, mdiRss }
|
||||||
|
},
|
||||||
mixins: [clipboard],
|
mixins: [clipboard],
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(['filters', 'settings']),
|
...mapState(['filters', 'settings']),
|
||||||
@@ -77,32 +82,11 @@ export default {
|
|||||||
|
|
||||||
return `${this.settings.baseurl}/feed/rss${query}`
|
return `${this.settings.baseurl}/feed/rss${query}`
|
||||||
},
|
},
|
||||||
could_add () {
|
|
||||||
return (this.$auth.loggedIn || this.settings.allow_anon_event)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
logout () {
|
logout () {
|
||||||
this.$root.$message('common.logout_ok')
|
this.$root.$message('common.logout_ok')
|
||||||
this.$auth.logout()
|
this.$auth.logout()
|
||||||
},
|
|
||||||
async createTrustedInstance () {
|
|
||||||
let url = this.instance_url
|
|
||||||
if (!url.match(/^https?:\/\//)) {
|
|
||||||
url = `https://${url}`
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const instance = await this.$axios.$get(`${url}/.well-known/nodeinfo/2.0`)
|
|
||||||
const trusted_instance = {
|
|
||||||
url,
|
|
||||||
name: instance.metadata.nodeName,
|
|
||||||
description: instance.metadata.nodeDescription,
|
|
||||||
place: instance.metadata.placeDescription
|
|
||||||
}
|
|
||||||
this.setSetting({ key: 'trusted_instances', value: this.settings.trusted_instances.concat(trusted_instance) })
|
|
||||||
} catch (e) {
|
|
||||||
this.$root.$message(e, { color: 'error' })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,17 +24,18 @@
|
|||||||
@click:close='remove(data.item)'
|
@click:close='remove(data.item)'
|
||||||
:input-value="data.selected")
|
:input-value="data.selected")
|
||||||
v-avatar(left)
|
v-avatar(left)
|
||||||
v-icon {{data.item.type === 'place' ? 'mdi-map-marker' : 'mdi-tag' }}
|
v-icon(v-text="data.item.type === 'place' ? mdiMapMarker : mdiTag")
|
||||||
span {{ data.item.label }}
|
span {{ data.item.label }}
|
||||||
template(v-slot:item='{ item }')
|
template(v-slot:item='{ item }')
|
||||||
v-list-item-avatar
|
v-list-item-avatar
|
||||||
v-icon {{item.type === 'place' ? 'mdi-map-marker' : 'mdi-tag' }}
|
v-icon(v-text="item.type === 'place' ? mdiMapMarker : mdiTag")
|
||||||
v-list-item-content
|
v-list-item-content
|
||||||
v-list-item-title(v-text='item.label')
|
v-list-item-title(v-text='item.label')
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
|
import { mdiMapMarker, mdiTag } from '@mdi/js'
|
||||||
export default {
|
export default {
|
||||||
name: 'Search',
|
name: 'Search',
|
||||||
props: {
|
props: {
|
||||||
@@ -43,6 +44,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiTag, mdiMapMarker,
|
||||||
tmpfilter: null,
|
tmpfilter: null,
|
||||||
search: ''
|
search: ''
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,17 +7,20 @@
|
|||||||
:left="left"
|
:left="left"
|
||||||
:right="right"
|
:right="right"
|
||||||
:timeout="timeout")
|
:timeout="timeout")
|
||||||
v-icon.mr-3(color="white") {{icon}}
|
v-icon.mr-3(color="white" v-text='icon')
|
||||||
span {{ message }}
|
span {{ message }}
|
||||||
template(v-slot:action="{ }")
|
template(v-slot:action="{ }")
|
||||||
v-icon(size="16" @click="active = false") mdi-close-circle
|
v-icon(size="16" @click="active = false" v-text='mdiCloseCircle')
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiAlert, mdiCloseCircle } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
icon: 'md-alert',
|
mdiAlert, mdiCloseCircle,
|
||||||
|
icon: mdiAlert,
|
||||||
color: 'secondary',
|
color: 'secondary',
|
||||||
bottom: true,
|
bottom: true,
|
||||||
top: false,
|
top: false,
|
||||||
@@ -33,7 +36,7 @@ export default {
|
|||||||
this.active = true
|
this.active = true
|
||||||
this.message = this.$t(message, opts)
|
this.message = this.$t(message, opts)
|
||||||
this.color = opts.color || 'secondary'
|
this.color = opts.color || 'secondary'
|
||||||
this.icon = opts.icon || 'md-alert'
|
this.icon = opts.icon || mdiAlert
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
v-btn(@click='dialog=false' color='error') {{$t('common.cancel')}}
|
v-btn(@click='dialog=false' color='error') {{$t('common.cancel')}}
|
||||||
v-btn(@click='save' color='primary' :disabled='!valid || loading' :loading='loading') {{$t(`common.${editing?'save':'send'}`)}}
|
v-btn(@click='save' color='primary' :disabled='!valid || loading' :loading='loading') {{$t(`common.${editing?'save':'send'}`)}}
|
||||||
|
|
||||||
v-btn(@click='openDialog' text color='primary') <v-icon>mdi-plus</v-icon> {{$t('common.add')}}
|
v-btn(@click='openDialog' text color='primary') <v-icon v-text='mdiPlus'></v-icon> {{$t('common.add')}}
|
||||||
v-card-text
|
v-card-text
|
||||||
v-data-table(
|
v-data-table(
|
||||||
v-if='announcements.length'
|
v-if='announcements.length'
|
||||||
@@ -36,11 +36,13 @@ import { mapActions } from 'vuex'
|
|||||||
import cloneDeep from 'lodash/cloneDeep'
|
import cloneDeep from 'lodash/cloneDeep'
|
||||||
import Editor from '../Editor'
|
import Editor from '../Editor'
|
||||||
import Announcement from '../Announcement'
|
import Announcement from '../Announcement'
|
||||||
|
import { mdiPlus } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { Editor, Announcement },
|
components: { Editor, Announcement },
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiPlus,
|
||||||
valid: false,
|
valid: false,
|
||||||
dialog: false,
|
dialog: false,
|
||||||
editing: false,
|
editing: false,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
v-btn(color='error' @click='dialogAddInstance=false') {{$t('common.cancel')}}
|
v-btn(color='error' @click='dialogAddInstance=false') {{$t('common.cancel')}}
|
||||||
v-btn(color='primary' :disabled='!valid || loading' :loading='loading' @click='createTrustedInstance') {{$t('common.ok')}}
|
v-btn(color='primary' :disabled='!valid || loading' :loading='loading' @click='createTrustedInstance') {{$t('common.ok')}}
|
||||||
|
|
||||||
v-btn.mt-4(@click='dialogAddInstance = true' color='primary' text) <v-icon>mdi-plus</v-icon> {{$t('admin.add_instance')}}
|
v-btn.mt-4(@click='dialogAddInstance = true' color='primary' text) <v-icon v-text='mdiPlus'></v-icon> {{$t('admin.add_instance')}}
|
||||||
v-data-table(
|
v-data-table(
|
||||||
v-if='settings.trusted_instances.length'
|
v-if='settings.trusted_instances.length'
|
||||||
:hide-default-footer='settings.trusted_instances.length<10'
|
:hide-default-footer='settings.trusted_instances.length<10'
|
||||||
@@ -64,17 +64,19 @@
|
|||||||
:items='settings.trusted_instances')
|
:items='settings.trusted_instances')
|
||||||
template(v-slot:item.actions="{item}")
|
template(v-slot:item.actions="{item}")
|
||||||
v-btn(icon @click='deleteInstance(item)' color='error')
|
v-btn(icon @click='deleteInstance(item)' color='error')
|
||||||
v-icon mdi-delete-forever
|
v-icon(v-text='mdiDeleteForever')
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapActions, mapState } from 'vuex'
|
import { mapActions, mapState } from 'vuex'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import { mdiDeleteForever, mdiPlus } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Federation',
|
name: 'Federation',
|
||||||
data ({ $store, $options }) {
|
data ({ $store, $options }) {
|
||||||
return {
|
return {
|
||||||
|
mdiDeleteForever, mdiPlus,
|
||||||
instance_url: '',
|
instance_url: '',
|
||||||
instance_name: $store.state.settings.instance_name,
|
instance_name: $store.state.settings.instance_name,
|
||||||
instance_place: $store.state.settings.instance_place,
|
instance_place: $store.state.settings.instance_place,
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
dense :headers='instancesHeader'
|
dense :headers='instancesHeader'
|
||||||
@click:row='instanceSelected')
|
@click:row='instanceSelected')
|
||||||
template(v-slot:item.blocked="{ item }")
|
template(v-slot:item.blocked="{ item }")
|
||||||
v-icon(@click='toggleBlock(item)') {{item.blocked ? 'mdi-checkbox-intermediate' : 'mdi-checkbox-blank-outline'}}
|
v-icon(@click='toggleBlock(item)' v-text='item.blocked ? mdiCheckboxIntermediate : mdiCheckboxBlankOutline')
|
||||||
|
|
||||||
v-col(:span='11')
|
v-col(:span='11')
|
||||||
span {{$t('common.users')}}
|
span {{$t('common.users')}}
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
:hide-default-footer='users.length<5'
|
:hide-default-footer='users.length<5'
|
||||||
dense :headers='usersHeader')
|
dense :headers='usersHeader')
|
||||||
template(v-slot:item.blocked="{ item }")
|
template(v-slot:item.blocked="{ item }")
|
||||||
v-icon(@click='toggleUserBlock(item)') {{item.blocked?'mdi-checkbox-intermediate':'mdi-checkbox-blank-outline'}}
|
v-icon(@click='toggleUserBlock(item)' v-text='item.blocked ? mdiCheckboxIntermediate : mdiCheckboxBlankOutline')
|
||||||
|
|
||||||
div
|
div
|
||||||
v-card-title {{$t('common.resources')}}
|
v-card-title {{$t('common.resources')}}
|
||||||
@@ -42,25 +42,27 @@
|
|||||||
v-menu(offset-y)
|
v-menu(offset-y)
|
||||||
template(v-slot:activator="{ on }")
|
template(v-slot:activator="{ on }")
|
||||||
v-btn.mr-2(v-on='on' color='primary' small icon)
|
v-btn.mr-2(v-on='on' color='primary' small icon)
|
||||||
v-icon mdi-dots-vertical
|
v-icon(v-text='mdiDotsVertical')
|
||||||
v-list
|
v-list
|
||||||
v-list-item(v-if='!item.hidden' @click='hideResource(item, true)')
|
v-list-item(v-if='!item.hidden' @click='hideResource(item, true)')
|
||||||
v-list-item-title <v-icon left>mdi-eye-off</v-icon> {{$t('admin.hide_resource')}}
|
v-list-item-title <v-icon left v-text='mdiEyeOff'></v-icon> {{$t('admin.hide_resource')}}
|
||||||
v-list-item(v-else @click='hideResource(item, false)')
|
v-list-item(v-else @click='hideResource(item, false)')
|
||||||
v-list-item-title <v-icon left>mdi-eye</v-icon> {{$t('admin.show_resource')}}
|
v-list-item-title <v-icon left v-text='mdiEye'></v-icon> {{$t('admin.show_resource')}}
|
||||||
v-list-item(@click='deleteResource(item)')
|
v-list-item(@click='deleteResource(item)')
|
||||||
v-list-item-title <v-icon left>mdi-delete</v-icon> {{$t('admin.delete_resource')}}
|
v-list-item-title <v-icon left v-text='mdiDelete'></v-icon> {{$t('admin.delete_resource')}}
|
||||||
//- v-list-item(@click='toggleUserBlock(item.ap_user)')
|
//- v-list-item(@click='toggleUserBlock(item.ap_user)')
|
||||||
//- v-list-item-title <v-icon left>mdi-lock</v-icon> {{$t('admin.block_user')}}
|
//- v-list-item-title <v-icon left>mdi-lock</v-icon> {{$t('admin.block_user')}}
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState, mapActions } from 'vuex'
|
import { mapState, mapActions } from 'vuex'
|
||||||
import get from 'lodash/get'
|
import get from 'lodash/get'
|
||||||
|
import { mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate, mdiCheckboxBlankOutline } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Moderation',
|
name: 'Moderation',
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate, mdiCheckboxBlankOutline,
|
||||||
instances: [],
|
instances: [],
|
||||||
resources: [],
|
resources: [],
|
||||||
users: [],
|
users: [],
|
||||||
|
|||||||
@@ -32,13 +32,16 @@
|
|||||||
:items='places')
|
:items='places')
|
||||||
template(v-slot:item.actions='{item}')
|
template(v-slot:item.actions='{item}')
|
||||||
v-btn(@click='editPlace(item)' color='primary' icon)
|
v-btn(@click='editPlace(item)' color='primary' icon)
|
||||||
v-icon mdi-pencil
|
v-icon(v-text='mdiPencil')
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState, mapActions } from 'vuex'
|
import { mapState, mapActions } from 'vuex'
|
||||||
|
import { mdiPencil } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiPencil,
|
||||||
loading: false,
|
loading: false,
|
||||||
dialog: false,
|
dialog: false,
|
||||||
valid: false,
|
valid: false,
|
||||||
|
|||||||
@@ -53,9 +53,9 @@
|
|||||||
|
|
||||||
v-card-actions
|
v-card-actions
|
||||||
v-btn(text @click='showSMTP=true')
|
v-btn(text @click='showSMTP=true')
|
||||||
<v-icon v-if='showSMTPAlert' color='error'>mdi-alert</v-icon> {{$t('admin.show_smtp_setup')}}
|
<v-icon v-if='showSMTPAlert' color='error' v-text='mdiAlert'></v-icon> {{$t('admin.show_smtp_setup')}}
|
||||||
v-btn(text @click='$emit("complete")' color='primary' v-if='setup') {{$t('common.next')}}
|
v-btn(text @click='$emit("complete")' color='primary' v-if='setup') {{$t('common.next')}}
|
||||||
v-icon mdi-arrow-right
|
v-icon(v-text='mdiArrowRight')
|
||||||
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
@@ -65,6 +65,7 @@ import { mapActions, mapState } from 'vuex'
|
|||||||
import moment from 'dayjs'
|
import moment from 'dayjs'
|
||||||
import tzNames from './tz.json'
|
import tzNames from './tz.json'
|
||||||
import locales from '../../locales/esm'
|
import locales from '../../locales/esm'
|
||||||
|
import { mdiAlert, mdiArrowRight } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
@@ -74,6 +75,7 @@ export default {
|
|||||||
name: 'Settings',
|
name: 'Settings',
|
||||||
data ({ $store }) {
|
data ({ $store }) {
|
||||||
return {
|
return {
|
||||||
|
mdiAlert, mdiArrowRight,
|
||||||
title: $store.state.settings.title,
|
title: $store.state.settings.title,
|
||||||
description: $store.state.settings.description,
|
description: $store.state.settings.description,
|
||||||
locales: Object.keys(locales).map(locale => ({ value: locale, text: locales[locale] })),
|
locales: Object.keys(locales).map(locale => ({ value: locale, text: locales[locale] })),
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
@change='uploadLogo'
|
@change='uploadLogo'
|
||||||
accept='image/*')
|
accept='image/*')
|
||||||
template(slot='append-outer')
|
template(slot='append-outer')
|
||||||
v-btn(color='warning' text @click='resetLogo') <v-icon>mdi-restore</v-icon> {{$t('common.reset')}}
|
v-btn(color='warning' text @click='resetLogo') <v-icon v-text='mdiRestore'></v-icon> {{$t('common.reset')}}
|
||||||
v-img(:src='`${settings.baseurl}/logo.png?${logoKey}`'
|
v-img(:src='`${settings.baseurl}/logo.png?${logoKey}`'
|
||||||
max-width="60px" max-height="60px" contain)
|
max-width="60px" max-height="60px" contain)
|
||||||
|
|
||||||
@@ -50,8 +50,8 @@
|
|||||||
|
|
||||||
v-card-title {{$t('admin.footer_links')}}
|
v-card-title {{$t('admin.footer_links')}}
|
||||||
v-card-text
|
v-card-text
|
||||||
v-btn(color='primary' text @click='openLinkModal') <v-icon>mdi-plus</v-icon> {{$t('admin.add_link')}}
|
v-btn(color='primary' text @click='openLinkModal') <v-icon v-text='mdiPlus'></v-icon> {{$t('admin.add_link')}}
|
||||||
v-btn(color='warning' text @click='reset') <v-icon>mdi-restore</v-icon> {{$t('common.reset')}}
|
v-btn(color='warning' text @click='reset') <v-icon v-text='mdiRestore'></v-icon> {{$t('common.reset')}}
|
||||||
v-card
|
v-card
|
||||||
v-list.mt-1(two-line subheader)
|
v-list.mt-1(two-line subheader)
|
||||||
v-list-item(v-for='link in settings.footerLinks'
|
v-list-item(v-for='link in settings.footerLinks'
|
||||||
@@ -61,16 +61,18 @@
|
|||||||
v-list-item-subtitle {{link.href}}
|
v-list-item-subtitle {{link.href}}
|
||||||
v-list-item-action
|
v-list-item-action
|
||||||
v-btn(icon color='error' @click.stop='removeFooterLink(link)')
|
v-btn(icon color='error' @click.stop='removeFooterLink(link)')
|
||||||
v-icon mdi-delete-forever
|
v-icon(v-text='mdiDeleteForever')
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapActions, mapState } from 'vuex'
|
import { mapActions, mapState } from 'vuex'
|
||||||
|
import { mdiDeleteForever, mdiRestore, mdiPlus } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Theme',
|
name: 'Theme',
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiDeleteForever, mdiRestore, mdiPlus,
|
||||||
valid: false,
|
valid: false,
|
||||||
logoKey: 0,
|
logoKey: 0,
|
||||||
link: { href: '', label: '' },
|
link: { href: '', label: '' },
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
v-card-title {{$t('common.users')}}
|
v-card-title {{$t('common.users')}}
|
||||||
v-spacer
|
v-spacer
|
||||||
v-text-field(v-model='search'
|
v-text-field(v-model='search'
|
||||||
append-icon='mdi-magnify' outlined rounded
|
:append-icon='mdiMagnify' outlined rounded
|
||||||
label='Search'
|
label='Search'
|
||||||
single-line hide-details)
|
single-line hide-details)
|
||||||
|
|
||||||
v-btn(color='primary' text @click='newUserDialog = true') <v-icon>mdi-plus</v-icon> {{$t('common.new_user')}}
|
v-btn(color='primary' text @click='newUserDialog = true') <v-icon v-text='mdiPlus'></v-icon> {{$t('common.new_user')}}
|
||||||
|
|
||||||
//- ADD NEW USER
|
//- ADD NEW USER
|
||||||
v-dialog(v-model='newUserDialog' :fullscreen='$vuetify.breakpoint.xsOnly')
|
v-dialog(v-model='newUserDialog' :fullscreen='$vuetify.breakpoint.xsOnly')
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
:label="$t('common.email')"
|
:label="$t('common.email')"
|
||||||
:rules="$validators.email")
|
:rules="$validators.email")
|
||||||
v-switch(v-model='new_user.is_admin' :label="$t('common.admin')" inset)
|
v-switch(v-model='new_user.is_admin' :label="$t('common.admin')" inset)
|
||||||
v-alert(type='info' :closable='false') {{$t('admin.user_add_help')}}
|
v-alert(type='info' :closable='false' :icon='mdiInformation') {{$t('admin.user_add_help')}}
|
||||||
v-card-actions
|
v-card-actions
|
||||||
v-spacer
|
v-spacer
|
||||||
v-btn(@click='newUserDialog=false' color='error') {{$t('common.cancel')}}
|
v-btn(@click='newUserDialog=false' color='error') {{$t('common.cancel')}}
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
:hide-default-footer='users.length<5'
|
:hide-default-footer='users.length<5'
|
||||||
:search='search')
|
:search='search')
|
||||||
template(v-slot:item.is_active='{item}')
|
template(v-slot:item.is_active='{item}')
|
||||||
v-icon(v-if='item.is_active' color='success') mdi-check
|
v-icon(v-if='item.is_active' color='success' v-text='mdiCheck')
|
||||||
v-icon(v-else color='warning') mdi-close
|
v-icon(v-else color='warning' v-text='mdiClose')
|
||||||
template(v-slot:item.actions='{item}')
|
template(v-slot:item.actions='{item}')
|
||||||
v-btn(v-if='item.recover_code' text small :to='`/user_confirm/${item.recover_code}`') {{$t('common.confirm')}}
|
v-btn(v-if='item.recover_code' text small :to='`/user_confirm/${item.recover_code}`') {{$t('common.confirm')}}
|
||||||
v-btn(text small @click='toggle(item)'
|
v-btn(text small @click='toggle(item)'
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import get from 'lodash/get'
|
import get from 'lodash/get'
|
||||||
|
import { mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Users',
|
name: 'Users',
|
||||||
@@ -57,6 +58,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation,
|
||||||
newUserDialog: false,
|
newUserDialog: false,
|
||||||
valid: false,
|
valid: false,
|
||||||
new_user: {
|
new_user: {
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
<template lang='pug'>
|
<template lang='pug'>
|
||||||
v-container.p-4.text-center
|
v-container.p-4.text-center
|
||||||
v-alert(v-if="error.statusCode === 404") ¯\_(ツ)_/¯ {{error.message}}
|
v-alert(v-if="error.statusCode === 404" type='error' :icon='mdiAlert') ¯\_(ツ)_/¯ {{error.message}}
|
||||||
v-alert(v-else type='error') <v-icon>mdi-warning</v-icon> An error occurred: {{error.message}}
|
v-alert(v-else type='error' :icon='mdiAlert') An error occurred: {{error.message}}
|
||||||
nuxt-link(to='/')
|
nuxt-link(to='/')
|
||||||
v-btn Back to home
|
v-btn Back to home
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
|
import { mdiAlert } from '@mdi/js'
|
||||||
export default {
|
export default {
|
||||||
props: { error: { type: Object, default: () => ({ }) } },
|
props: { error: { type: Object, default: () => ({ }) } },
|
||||||
|
data () {
|
||||||
|
return { mdiAlert }
|
||||||
|
},
|
||||||
head () {
|
head () {
|
||||||
return { title: `${this.settings.title} - Error` }
|
return { title: `${this.settings.title} - Error` }
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const config = require('./server/config.js')
|
const config = require('./server/config.js')
|
||||||
|
const minifyTheme = require('minify-css-string').default
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
telemetry: false,
|
telemetry: false,
|
||||||
@@ -27,14 +28,6 @@ module.exports = {
|
|||||||
** Customize the progress-bar component
|
** Customize the progress-bar component
|
||||||
*/
|
*/
|
||||||
loading: '~/components/Loading.vue',
|
loading: '~/components/Loading.vue',
|
||||||
/*
|
|
||||||
** Global CSS
|
|
||||||
*/
|
|
||||||
css: [
|
|
||||||
'vuetify/dist/vuetify.min.css',
|
|
||||||
'@mdi/font/css/materialdesignicons.css',
|
|
||||||
'@/assets/style.less'
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Plugins to load before mounting the App
|
** Plugins to load before mounting the App
|
||||||
@@ -42,7 +35,6 @@ module.exports = {
|
|||||||
plugins: [
|
plugins: [
|
||||||
'@/plugins/i18n.js',
|
'@/plugins/i18n.js',
|
||||||
'@/plugins/filters', // text filters, datetime filters, generic transformation helpers etc.
|
'@/plugins/filters', // text filters, datetime filters, generic transformation helpers etc.
|
||||||
'@/plugins/vuetify', // vuetify
|
|
||||||
'@/plugins/axios', // axios baseurl configuration
|
'@/plugins/axios', // axios baseurl configuration
|
||||||
'@/plugins/validators', // inject validators
|
'@/plugins/validators', // inject validators
|
||||||
'@/plugins/api', // api helpers
|
'@/plugins/api', // api helpers
|
||||||
@@ -94,6 +86,30 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
buildModules: ['@nuxtjs/vuetify'],
|
||||||
|
vuetify: {
|
||||||
|
customVariables: ['~/assets/variables.scss'],
|
||||||
|
treeShake: true,
|
||||||
|
theme: {
|
||||||
|
options: {
|
||||||
|
customProperties: false,
|
||||||
|
variations: false,
|
||||||
|
minifyTheme,
|
||||||
|
},
|
||||||
|
dark: true,
|
||||||
|
themes: {
|
||||||
|
dark: {
|
||||||
|
primary: '#FF6E40'
|
||||||
|
},
|
||||||
|
light: {
|
||||||
|
primary: '#FF4500'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
defaultAssets: {
|
||||||
|
icons: false
|
||||||
|
}
|
||||||
|
},
|
||||||
build: {
|
build: {
|
||||||
corejs: 3,
|
corejs: 3,
|
||||||
cache: true,
|
cache: true,
|
||||||
|
|||||||
@@ -41,13 +41,14 @@
|
|||||||
v-else
|
v-else
|
||||||
:label="$t('common.media')"
|
:label="$t('common.media')"
|
||||||
:hint="$t('event.media_description')"
|
:hint="$t('event.media_description')"
|
||||||
prepend-icon="mdi-camera"
|
:prepend-icon="mdiCamera"
|
||||||
:value='value.image'
|
:value='value.image'
|
||||||
@change="selectMedia"
|
@change="selectMedia"
|
||||||
persistent-hint
|
persistent-hint
|
||||||
accept='image/*')
|
accept='image/*')
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiCamera } from '@mdi/js'
|
||||||
export default {
|
export default {
|
||||||
name: 'MediaInput',
|
name: 'MediaInput',
|
||||||
props: {
|
props: {
|
||||||
@@ -56,6 +57,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiCamera,
|
||||||
openMediaDetails: false,
|
openMediaDetails: false,
|
||||||
name: this.value.name || '',
|
name: this.value.name || '',
|
||||||
focalpoint: this.value.focalpoint || [0, 0],
|
focalpoint: this.value.focalpoint || [0, 0],
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
:label="$t('common.where')"
|
:label="$t('common.where')"
|
||||||
:hint="$t('event.where_description')"
|
:hint="$t('event.where_description')"
|
||||||
:search-input.sync="placeName"
|
:search-input.sync="placeName"
|
||||||
prepend-icon='mdi-map-marker'
|
:prepend-icon='mdiMapMarker'
|
||||||
persistent-hint
|
persistent-hint
|
||||||
:value="value.name"
|
:value="value.name"
|
||||||
:items="filteredPlaces"
|
:items="filteredPlaces"
|
||||||
@@ -15,14 +15,14 @@
|
|||||||
@change='selectPlace')
|
@change='selectPlace')
|
||||||
template(v-slot:item="{ item }")
|
template(v-slot:item="{ item }")
|
||||||
v-list-item-content(two-line v-if='item.create')
|
v-list-item-content(two-line v-if='item.create')
|
||||||
v-list-item-title <v-icon color='primary'>mdi-plus</v-icon> {{item.name}}
|
v-list-item-title <v-icon color='primary' v-text='mdiPlus'></v-icon> {{item.name}}
|
||||||
v-list-item-content(two-line v-else)
|
v-list-item-content(two-line v-else)
|
||||||
v-list-item-title {{item.name}}
|
v-list-item-title {{item.name}}
|
||||||
v-list-item-subtitle {{item.address}}
|
v-list-item-subtitle {{item.address}}
|
||||||
|
|
||||||
v-col(cols=12 md=6)
|
v-col(cols=12 md=6)
|
||||||
v-text-field(ref='address'
|
v-text-field(ref='address'
|
||||||
prepend-icon='mdi-map'
|
:prepend-icon='mdiMap'
|
||||||
:disabled='disableAddress'
|
:disabled='disableAddress'
|
||||||
:rules="[ v => disableAddress ? true : $validators.required('common.address')(v)]"
|
:rules="[ v => disableAddress ? true : $validators.required('common.address')(v)]"
|
||||||
:label="$t('common.address')"
|
:label="$t('common.address')"
|
||||||
@@ -32,6 +32,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
|
import { mdiMap, mdiMapMarker, mdiPlus } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'WhereInput',
|
name: 'WhereInput',
|
||||||
@@ -40,6 +41,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiMap, mdiMapMarker, mdiPlus,
|
||||||
place: { },
|
place: { },
|
||||||
placeName: '',
|
placeName: '',
|
||||||
disableAddress: true
|
disableAddress: true
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
h4 {{edit?$t('common.edit_event'):$t('common.add_event')}}
|
h4 {{edit?$t('common.edit_event'):$t('common.add_event')}}
|
||||||
v-spacer
|
v-spacer
|
||||||
v-btn(link text color='primary' @click='openImportDialog=true')
|
v-btn(link text color='primary' @click='openImportDialog=true')
|
||||||
<v-icon>mdi-file-import</v-icon> {{$t('common.import')}}
|
<v-icon v-text='mdiFileImport'></v-icon> {{$t('common.import')}}
|
||||||
v-dialog(v-model='openImportDialog' :fullscreen='$vuetify.breakpoint.xsOnly')
|
v-dialog(v-model='openImportDialog' :fullscreen='$vuetify.breakpoint.xsOnly')
|
||||||
ImportDialog(@close='openImportDialog=false' @imported='eventImported')
|
ImportDialog(@close='openImportDialog=false' @imported='eventImported')
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
@change='v => event.title = v'
|
@change='v => event.title = v'
|
||||||
:value = 'event.title'
|
:value = 'event.title'
|
||||||
:rules="[$validators.required('common.title')]"
|
:rules="[$validators.required('common.title')]"
|
||||||
prepend-icon='mdi-format-title'
|
:prepend-icon='mdiFormatTitle'
|
||||||
:label="$t('common.title')"
|
:label="$t('common.title')"
|
||||||
autofocus
|
autofocus
|
||||||
ref='title')
|
ref='title')
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
//- tags
|
//- tags
|
||||||
v-col(cols=12 md=6)
|
v-col(cols=12 md=6)
|
||||||
v-combobox(v-model='event.tags'
|
v-combobox(v-model='event.tags'
|
||||||
prepend-icon="mdi-tag-multiple"
|
:prepend-icon="mdiTagMultiple"
|
||||||
chips small-chips multiple deletable-chips hide-no-data hide-selected persistent-hint
|
chips small-chips multiple deletable-chips hide-no-data hide-selected persistent-hint
|
||||||
:delimiters="[',', ' ']"
|
:delimiters="[',', ' ']"
|
||||||
:items="tags.map(t => t.tag)"
|
:items="tags.map(t => t.tag)"
|
||||||
@@ -64,12 +64,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapActions, mapState } from 'vuex'
|
import { mapActions, mapState } from 'vuex'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import Editor from '@/components/Editor'
|
|
||||||
import List from '@/components/List'
|
import { mdiFileImport, mdiFormatTitle, mdiTagMultiple } from '@mdi/js'
|
||||||
import ImportDialog from './ImportDialog'
|
|
||||||
import DateInput from './DateInput'
|
|
||||||
import WhereInput from './WhereInput'
|
|
||||||
import MediaInput from './MediaInput'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'NewEvent',
|
name: 'NewEvent',
|
||||||
@@ -114,6 +110,7 @@ export default {
|
|||||||
const month = dayjs().month() + 1
|
const month = dayjs().month() + 1
|
||||||
const year = dayjs().year()
|
const year = dayjs().year()
|
||||||
return {
|
return {
|
||||||
|
mdiFileImport, mdiFormatTitle, mdiTagMultiple,
|
||||||
valid: false,
|
valid: false,
|
||||||
openImportDialog: false,
|
openImportDialog: false,
|
||||||
event: {
|
event: {
|
||||||
|
|||||||
@@ -23,19 +23,19 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
v-col.col-12.col-lg-4
|
v-col.col-12.col-lg-4
|
||||||
v-card
|
v-card
|
||||||
v-card-text
|
v-card-text
|
||||||
v-icon.float-right(v-if='event.parentId' color='success') mdi-repeat
|
v-icon.float-right(v-if='event.parentId' color='success' v-text='mdiRepeat')
|
||||||
.title.text-h5
|
.title.text-h5
|
||||||
b.p-name(itemprop="name") {{event.title}}
|
b.p-name(itemprop="name") {{event.title}}
|
||||||
|
|
||||||
time.dt-start.text-h6(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")' itemprop="startDate" :content="event.start_datetime|unixFormat('YYYY-MM-DDTHH:mm')")
|
time.dt-start.text-h6(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")' itemprop="startDate" :content="event.start_datetime|unixFormat('YYYY-MM-DDTHH:mm')")
|
||||||
v-icon mdi-calendar
|
v-icon(v-text='mdiCalendar')
|
||||||
b.ml-2 {{event|when}}
|
b.ml-2 {{event|when}}
|
||||||
.d-none.dt-end(itemprop="endDate" :content="event.end_datetime|unixFormat('YYYY-MM-DDTHH:mm')") {{event.end_datetime|unixFormat('YYYY-MM-DD HH:mm')}}
|
.d-none.dt-end(itemprop="endDate" :content="event.end_datetime|unixFormat('YYYY-MM-DDTHH:mm')") {{event.end_datetime|unixFormat('YYYY-MM-DD HH:mm')}}
|
||||||
div.text-subtitle-1 {{event.start_datetime|from}}
|
div.text-subtitle-1 {{event.start_datetime|from}}
|
||||||
small(v-if='event.parentId') ({{event|recurrentDetail}})
|
small(v-if='event.parentId') ({{event|recurrentDetail}})
|
||||||
|
|
||||||
.text-h6.p-location(itemprop="location" itemscope itemtype="https://schema.org/Place")
|
.text-h6.p-location(itemprop="location" itemscope itemtype="https://schema.org/Place")
|
||||||
v-icon mdi-map-marker
|
v-icon(v-text='mdiMapMarker')
|
||||||
b.vcard.ml-2(itemprop="name") {{event.place && event.place.name}}
|
b.vcard.ml-2(itemprop="name") {{event.place && event.place.name}}
|
||||||
.text-subtitle-1.adr(itemprop='address') {{event.place && event.place.address}}
|
.text-subtitle-1.adr(itemprop='address') {{event.place && event.place.address}}
|
||||||
|
|
||||||
@@ -50,16 +50,16 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
v-tooltip(bottom) {{$t('common.copy_link')}}
|
v-tooltip(bottom) {{$t('common.copy_link')}}
|
||||||
template(v-slot:activator="{on, attrs} ")
|
template(v-slot:activator="{on, attrs} ")
|
||||||
v-btn.ml-2(large icon v-on='on' color='primary' @click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)')
|
v-btn.ml-2(large icon v-on='on' color='primary' @click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)')
|
||||||
v-icon mdi-content-copy
|
v-icon(v-text='mdiContentCopy')
|
||||||
v-tooltip(bottom) {{$t('common.embed')}}
|
v-tooltip(bottom) {{$t('common.embed')}}
|
||||||
template(v-slot:activator="{on, attrs} ")
|
template(v-slot:activator="{on, attrs} ")
|
||||||
v-btn.ml-2(large icon v-on='on' @click='showEmbed=true' color='primary')
|
v-btn.ml-2(large icon v-on='on' @click='showEmbed=true' color='primary')
|
||||||
v-icon mdi-code-tags
|
v-icon(v-text='mdiCodeTags')
|
||||||
v-tooltip(bottom) {{$t('common.add_to_calendar')}}
|
v-tooltip(bottom) {{$t('common.add_to_calendar')}}
|
||||||
template(v-slot:activator="{on, attrs} ")
|
template(v-slot:activator="{on, attrs} ")
|
||||||
v-btn.ml-2(large icon v-on='on' color='primary'
|
v-btn.ml-2(large icon v-on='on' color='primary'
|
||||||
:href='`/api/event/${event.slug || event.id}.ics`')
|
:href='`/api/event/${event.slug || event.id}.ics`')
|
||||||
v-icon mdi-calendar-export
|
v-icon(v-text='mdiCalendarExport')
|
||||||
|
|
||||||
.p-description.text-body-1.pa-3.rounded(v-if='hasMedia && event.description' itemprop='description' v-html='event.description')
|
.p-description.text-body-1.pa-3.rounded(v-if='hasMedia && event.description' itemprop='description' v-html='event.description')
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
transition='dialog-bottom-transition')
|
transition='dialog-bottom-transition')
|
||||||
v-card
|
v-card
|
||||||
v-btn.ma-2(icon dark @click='showResources = false')
|
v-btn.ma-2(icon dark @click='showResources = false')
|
||||||
v-icon mdi-close
|
v-icon(v-text='mdiClose')
|
||||||
v-carousel.pa-5(:interval='10000' ref='carousel' hide-delimiters v-model='currentAttachment'
|
v-carousel.pa-5(:interval='10000' ref='carousel' hide-delimiters v-model='currentAttachment'
|
||||||
height='100%' show-arrows-on-over)
|
height='100%' show-arrows-on-over)
|
||||||
v-carousel-item(v-for='attachment in selectedResource.data.attachment'
|
v-carousel-item(v-for='attachment in selectedResource.data.attachment'
|
||||||
@@ -92,16 +92,16 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
v-menu(v-if='$auth.user && $auth.user.is_admin' offset-y)
|
v-menu(v-if='$auth.user && $auth.user.is_admin' offset-y)
|
||||||
template(v-slot:activator="{ on }")
|
template(v-slot:activator="{ on }")
|
||||||
v-btn.mr-2(v-on='on' color='primary' small icon)
|
v-btn.mr-2(v-on='on' color='primary' small icon)
|
||||||
v-icon mdi-dots-vertical
|
v-icon(v-text='mdiDotsVertical')
|
||||||
v-list
|
v-list
|
||||||
v-list-item(v-if='!resource.hidden' @click='hideResource(resource, true)')
|
v-list-item(v-if='!resource.hidden' @click='hideResource(resource, true)')
|
||||||
v-list-item-title <v-icon left>mdi-eye-off</v-icon> {{$t('admin.hide_resource')}}
|
v-list-item-title <v-icon left v-text='mdiEyeOff'></v-icon> {{$t('admin.hide_resource')}}
|
||||||
v-list-item(v-else @click='hideResource(resource, false)')
|
v-list-item(v-else @click='hideResource(resource, false)')
|
||||||
v-list-item-title <v-icon left>mdi-eye</v-icon> {{$t('admin.show_resource')}}
|
v-list-item-title <v-icon left v-text='mdiEye'></v-icon> {{$t('admin.show_resource')}}
|
||||||
v-list-item(@click='deleteResource(resource)')
|
v-list-item(@click='deleteResource(resource)')
|
||||||
v-list-item-title <v-icon left>mdi-delete</v-icon> {{$t('admin.delete_resource')}}
|
v-list-item-title <v-icon left v-text='mdiDelete'></v-icon> {{$t('admin.delete_resource')}}
|
||||||
v-list-item(@click='blockUser(resource)')
|
v-list-item(@click='blockUser(resource)')
|
||||||
v-list-item-title <v-icon left>mdi-lock</v-icon> {{$t('admin.block_user')}}
|
v-list-item-title <v-icon left v-text='mdiLock'></v-icon> {{$t('admin.block_user')}}
|
||||||
|
|
||||||
a(:href='resource.data.url || resource.data.context')
|
a(:href='resource.data.url || resource.data.context')
|
||||||
small {{resource.data.published|dateFormat('ddd, D MMMM HH:mm')}}
|
small {{resource.data.published|dateFormat('ddd, D MMMM HH:mm')}}
|
||||||
@@ -121,10 +121,10 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
.text-center.mt-5.mb-5
|
.text-center.mt-5.mb-5
|
||||||
v-btn.mr-2(nuxt icon outlined color='primary'
|
v-btn.mr-2(nuxt icon outlined color='primary'
|
||||||
:to='`/event/${event.prev}`' :disabled='!event.prev')
|
:to='`/event/${event.prev}`' :disabled='!event.prev')
|
||||||
v-icon mdi-arrow-left
|
v-icon(v-text='mdiArrowLeft')
|
||||||
v-btn(nuxt bottom right outlined icon color='primary'
|
v-btn(nuxt bottom right outlined icon color='primary'
|
||||||
:to='`/event/${event.next}`' :disabled='!event.next')
|
:to='`/event/${event.next}`' :disabled='!event.next')
|
||||||
v-icon mdi-arrow-right
|
v-icon(v-text='mdiArrowRight')
|
||||||
|
|
||||||
v-dialog(v-model='showEmbed' width='700px' :fullscreen='$vuetify.breakpoint.xsOnly')
|
v-dialog(v-model='showEmbed' width='700px' :fullscreen='$vuetify.breakpoint.xsOnly')
|
||||||
EmbedEvent(:event='event' @close='showEmbed=false')
|
EmbedEvent(:event='event' @close='showEmbed=false')
|
||||||
@@ -133,13 +133,15 @@ v-container#event.pa-0.pa-sm-2
|
|||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import EventAdmin from './eventAdmin'
|
import EventAdmin from './eventAdmin'
|
||||||
import EmbedEvent from './embedEvent'
|
|
||||||
import get from 'lodash/get'
|
import get from 'lodash/get'
|
||||||
import moment from 'dayjs'
|
import moment from 'dayjs'
|
||||||
import clipboard from '../../assets/clipboard'
|
import clipboard from '../../assets/clipboard'
|
||||||
|
|
||||||
const htmlToText = require('html-to-text')
|
const htmlToText = require('html-to-text')
|
||||||
|
|
||||||
|
import { mdiArrowLeft, mdiArrowRight, mdiDotsVertical, mdiCodeTags, mdiClose,
|
||||||
|
mdiEye, mdiEyeOff, mdiDelete,
|
||||||
|
mdiCalendarExport, mdiCalendar, mdiContentCopy, mdiMapMarker } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Event',
|
name: 'Event',
|
||||||
mixins: [clipboard],
|
mixins: [clipboard],
|
||||||
@@ -154,6 +156,8 @@ export default {
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiArrowLeft, mdiArrowRight, mdiDotsVertical, mdiCodeTags, mdiCalendarExport, mdiCalendar,
|
||||||
|
mdiMapMarker, mdiContentCopy, mdiClose, mdiDelete, mdiEye, mdiEyeOff,
|
||||||
currentAttachment: 0,
|
currentAttachment: 0,
|
||||||
event: {},
|
event: {},
|
||||||
showEmbed: false,
|
showEmbed: false,
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
v-card
|
v-card
|
||||||
v-card-title(v-text="$t('common.embed_title')")
|
v-card-title(v-text="$t('common.embed_title')")
|
||||||
v-card-text
|
v-card-text
|
||||||
v-alert.mb-3.mt-1(type='info' show-icon) {{$t('common.embed_help')}}
|
v-alert.mb-3.mt-1(type='info' show-icon :icon='mdiInformation') {{$t('common.embed_help')}}
|
||||||
v-alert.pa-5.my-4.blue-grey.darken-4.text-body-1.lime--text.text--lighten-3 <pre>{{code}}</pre>
|
v-alert.pa-5.my-4.blue-grey.darken-4.text-body-1.lime--text.text--lighten-3 <pre>{{code}}</pre>
|
||||||
v-btn.float-end(text color='primary' @click='clipboard(code)') {{$t("common.copy")}}
|
v-btn.float-end(text color='primary' @click='clipboard(code)') {{$t("common.copy")}}
|
||||||
v-icon.ml-1 mdi-content-copy
|
v-icon.ml-1(v-text='mdiContentCopy')
|
||||||
p.mx-auto
|
p.mx-auto
|
||||||
.mx-auto
|
.mx-auto
|
||||||
gancio-event(:id='event.id' :baseurl='settings.baseurl')
|
gancio-event(:id='event.id' :baseurl='settings.baseurl')
|
||||||
@@ -17,9 +17,13 @@ v-card
|
|||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import clipboard from '../../assets/clipboard'
|
import clipboard from '../../assets/clipboard'
|
||||||
|
import { mdiContentCopy, mdiInformation } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'EmbedEvent',
|
name: 'EmbedEvent',
|
||||||
|
data() {
|
||||||
|
return { mdiContentCopy, mdiInformation }
|
||||||
|
},
|
||||||
mixins: [clipboard],
|
mixins: [clipboard],
|
||||||
props: {
|
props: {
|
||||||
event: { type: Object, default: () => ({}) }
|
event: { type: Object, default: () => ({}) }
|
||||||
|
|||||||
@@ -1,22 +1,25 @@
|
|||||||
<template lang='pug'>
|
<template lang='pug'>
|
||||||
div
|
div
|
||||||
v-btn(text color='primary' v-if='event.is_visible' @click='toggle(false)') {{$t(`common.${event.parentId?'skip':'hide'}`)}}
|
v-btn(text color='primary' v-if='event.is_visible' @click='toggle(false)') {{$t(`common.${event.parentId?'skip':'hide'}`)}}
|
||||||
v-btn(text color='success' v-else @click='toggle(false)') <v-icon color='yellow'>mdi-alert</v-icon> {{$t('common.confirm')}}
|
v-btn(text color='success' v-else @click='toggle(false)') <v-icon color='yellow' v-text='mdiAlert'></v-icon> {{$t('common.confirm')}}
|
||||||
v-btn(text color='primary' @click='$router.push(`/add/${event.id}`)') {{$t('common.edit')}}
|
v-btn(text color='primary' @click='$router.push(`/add/${event.id}`)') {{$t('common.edit')}}
|
||||||
v-btn(text color='primary' v-if='!event.parentId' @click='remove(false)') {{$t('common.remove')}}
|
v-btn(text color='primary' v-if='!event.parentId' @click='remove(false)') {{$t('common.remove')}}
|
||||||
|
|
||||||
template(v-if='event.parentId')
|
template(v-if='event.parentId')
|
||||||
v-divider
|
v-divider
|
||||||
span.mr-1 <v-icon>mdi-repeat</v-icon> {{$t('event.edit_recurrent')}}
|
span.mr-1 <v-icon v-text='mdiRepeat'></v-icon> {{$t('event.edit_recurrent')}}
|
||||||
v-btn(text color='primary' v-if='event.parent.is_visible' @click='toggle(true)') {{$t('common.pause')}}
|
v-btn(text color='primary' v-if='event.parent.is_visible' @click='toggle(true)') {{$t('common.pause')}}
|
||||||
v-btn(text color='primary' v-else @click='toggle(true)') {{$t('common.start')}}
|
v-btn(text color='primary' v-else @click='toggle(true)') {{$t('common.start')}}
|
||||||
v-btn(text color='primary' @click='$router.push(`/add/${event.parentId}`)') {{$t('common.edit')}}
|
v-btn(text color='primary' @click='$router.push(`/add/${event.parentId}`)') {{$t('common.edit')}}
|
||||||
v-btn(text color='primary' @click='remove(true)') {{$t('common.remove')}}
|
v-btn(text color='primary' @click='remove(true)') {{$t('common.remove')}}
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiAlert, mdiRepeat } from '@mdi/js'
|
||||||
export default {
|
export default {
|
||||||
name: 'EventAdmin',
|
name: 'EventAdmin',
|
||||||
|
data () {
|
||||||
|
return { mdiAlert, mdiRepeat }
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
event: {
|
event: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
p(v-html='$t(`export.feed_description`)')
|
p(v-html='$t(`export.feed_description`)')
|
||||||
v-text-field(v-model='link' readonly)
|
v-text-field(v-model='link' readonly)
|
||||||
v-btn(slot='prepend' text color='primary' @click='clipboard(link)') {{$t("common.copy")}}
|
v-btn(slot='prepend' text color='primary' @click='clipboard(link)') {{$t("common.copy")}}
|
||||||
v-icon.ml-1 mdi-content-copy
|
v-icon.ml-1(v-text='mdiContentCopy')
|
||||||
|
|
||||||
v-tab ics/ical
|
v-tab ics/ical
|
||||||
v-tab-item
|
v-tab-item
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
p(v-html='$t(`export.ical_description`)')
|
p(v-html='$t(`export.ical_description`)')
|
||||||
v-text-field(v-model='link')
|
v-text-field(v-model='link')
|
||||||
v-btn(slot='prepend' text color='primary' @click='clipboard(link)') {{$t("common.copy")}}
|
v-btn(slot='prepend' text color='primary' @click='clipboard(link)') {{$t("common.copy")}}
|
||||||
v-icon.ml-1 mdi-content-copy
|
v-icon.ml-1(v-text='mdiContentCopy')
|
||||||
|
|
||||||
v-tab List
|
v-tab List
|
||||||
v-tab-item
|
v-tab-item
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
:sidebar="list.sidebar")
|
:sidebar="list.sidebar")
|
||||||
v-alert.pa-5.my-4.blue-grey.darken-4.text-body-1.lime--text.text--lighten-3 <pre>{{code}}</pre>
|
v-alert.pa-5.my-4.blue-grey.darken-4.text-body-1.lime--text.text--lighten-3 <pre>{{code}}</pre>
|
||||||
v-btn.float-end(text color='primary' @click='clipboard(code)') {{$t("common.copy")}}
|
v-btn.float-end(text color='primary' @click='clipboard(code)') {{$t("common.copy")}}
|
||||||
v-icon.ml-1 mdi-content-copy
|
v-icon.ml-1(v-text='mdiContentCopy')
|
||||||
|
|
||||||
v-tab(v-if='settings.enable_federation') {{$t('common.fediverse')}}
|
v-tab(v-if='settings.enable_federation') {{$t('common.fediverse')}}
|
||||||
v-tab-item(v-if='settings.enable_federation')
|
v-tab-item(v-if='settings.enable_federation')
|
||||||
@@ -83,14 +83,17 @@
|
|||||||
<script>
|
<script>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import List from '@/components/List'
|
|
||||||
import FollowMe from '../components/FollowMe'
|
import FollowMe from '../components/FollowMe'
|
||||||
import Search from '@/components/Search'
|
import Search from '@/components/Search'
|
||||||
import clipboard from '../assets/clipboard'
|
import clipboard from '../assets/clipboard'
|
||||||
|
import { mdiContentCopy } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Exports',
|
name: 'Exports',
|
||||||
components: { List, FollowMe, Search },
|
components: {
|
||||||
|
FollowMe,
|
||||||
|
Search
|
||||||
|
},
|
||||||
mixins: [clipboard],
|
mixins: [clipboard],
|
||||||
async asyncData ({ $axios, params, store, $api }) {
|
async asyncData ({ $axios, params, store, $api }) {
|
||||||
const events = await $api.getEvents({
|
const events = await $api.getEvents({
|
||||||
@@ -101,6 +104,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data ({ $store }) {
|
data ({ $store }) {
|
||||||
return {
|
return {
|
||||||
|
mdiContentCopy,
|
||||||
type: 'rss',
|
type: 'rss',
|
||||||
notification: { email: '' },
|
notification: { email: '' },
|
||||||
list: {
|
list: {
|
||||||
|
|||||||
@@ -4,13 +4,15 @@
|
|||||||
v-card-text(v-html="$t('setup.completed_description', user)")
|
v-card-text(v-html="$t('setup.completed_description', user)")
|
||||||
v-card-actions
|
v-card-actions
|
||||||
v-btn(text @click='next' color='primary' :loading='loading' :disabled='loading') {{$t('setup.start')}}
|
v-btn(text @click='next' color='primary' :loading='loading' :disabled='loading') {{$t('setup.start')}}
|
||||||
v-icon mdi-arrow-right
|
v-icon(v-text='mdiArrowRight')
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiArrowRight } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiArrowRight,
|
||||||
loading: false,
|
loading: false,
|
||||||
user: {
|
user: {
|
||||||
email: 'admin',
|
email: 'admin',
|
||||||
|
|||||||
@@ -17,12 +17,15 @@
|
|||||||
|
|
||||||
v-card-actions
|
v-card-actions
|
||||||
v-btn(text @click='checkDb' color='primary' :loading='loading' :disabled='loading') {{$t('common.next')}}
|
v-btn(text @click='checkDb' color='primary' :loading='loading' :disabled='loading') {{$t('common.next')}}
|
||||||
v-icon mdi-arrow-right
|
v-icon(v-text='mdiArrowRight')
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { mdiArrowRight } from '@mdi/js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
mdiArrowRight,
|
||||||
db: {
|
db: {
|
||||||
dialect: 'sqlite',
|
dialect: 'sqlite',
|
||||||
storage: './gancio.sqlite',
|
storage: './gancio.sqlite',
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
import Vue from 'vue'
|
|
||||||
import Vuetify from 'vuetify'
|
|
||||||
|
|
||||||
// import it from 'vuetify/lib/locale/it.js'
|
|
||||||
// import en from 'vuetify/lib/locale/en.js'
|
|
||||||
// import es from 'vuetify/lib/locale/es'
|
|
||||||
// import no from 'vuetify/lib/locale/no'
|
|
||||||
// import fr from 'vuetify/lib/locale/fr'
|
|
||||||
// import ca from 'vuetify/lib/locale/ca'
|
|
||||||
|
|
||||||
|
|
||||||
export default ({ app }) => {
|
|
||||||
Vue.use(Vuetify)
|
|
||||||
app.vuetify = new Vuetify({
|
|
||||||
// lang: {
|
|
||||||
// locales: { en, it }, //, es, fr, no, ca },
|
|
||||||
// current: 'en'
|
|
||||||
// },
|
|
||||||
icons: {
|
|
||||||
iconfont: 'mdi'
|
|
||||||
},
|
|
||||||
theme: {
|
|
||||||
dark: true,
|
|
||||||
themes: {
|
|
||||||
dark: {
|
|
||||||
primary: '#FF6E40'
|
|
||||||
},
|
|
||||||
light: {
|
|
||||||
primary: '#FF4500'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user