s/element/vuetify :D

This commit is contained in:
les
2020-07-25 21:41:22 +02:00
parent 59811e580c
commit 2758541df0
33 changed files with 1762 additions and 1340 deletions

View File

@@ -1,56 +1,56 @@
.event {
width: 320px;
max-width: 450px;
flex-grow: 1;
margin: .2em;
background-color: #202020;
overflow: hidden;
// .event {
// width: 320px;
// max-width: 450px;
// flex-grow: 1;
// margin: .2em;
// background-color: #202020;
// overflow: hidden;
a:hover {
text-decoration: none;
.title {
border-bottom: 1px solid #888;
color: white;
}
}
// a:hover {
// text-decoration: none;
// .title {
// border-bottom: 1px solid #888;
// color: white;
// }
// }
.title {
margin-left: 1rem;
margin-top: 1rem;
margin-right: 1rem;
border-bottom: 1px solid #333;
transition: border-color .5s;
font-size: 1.2em;
max-height: 3em;
overflow: hidden;
color: white;
font-weight: bold;
}
// .title {
// margin-left: 1rem;
// margin-top: 1rem;
// margin-right: 1rem;
// border-bottom: 1px solid #333;
// transition: border-color .5s;
// font-size: 1.2em;
// max-height: 3em;
// overflow: hidden;
// color: white;
// font-weight: bold;
// }
.card-footer {
max-height: 4.5em;
overflow: hidden;
padding: .25rem 0.5rem;
line-height: 1.8rem;
min-height: 2.2rem;
}
// .card-footer {
// max-height: 4.5em;
// overflow: hidden;
// padding: .25rem 0.5rem;
// line-height: 1.8rem;
// min-height: 2.2rem;
// }
.card-body {
overflow: hidden;
}
// .card-body {
// overflow: hidden;
// }
.description {
color: #999;
font-size: 0.8em;
overflow: hidden;
max-height: 100%;
}
// .description {
// color: #999;
// font-size: 0.8em;
// overflow: hidden;
// max-height: 100%;
// }
.el-image { width: 100% }
img {
width: 100%;
max-height: 250px;
object-fit: cover;
object-position: top;
}
}
// .el-image { width: 100% }
// img {
// width: 100%;
// max-height: 250px;
// object-fit: cover;
// object-position: top;
// }
// }

View File

@@ -1,215 +1,215 @@
:focus {outline:none;}
::-moz-focus-inner {border:0;}
// :focus {outline:none;}
// ::-moz-focus-inner {border:0;}
blockquote {
border-left: 3px solid grey;
font-style: italic;
color: #666;
padding-left: 1em;
}
code {
font-family: sans-serif;
display: inline-block;
padding: 0 .4rem;
border-radius: 5px;
font-size: .8rem;
font-weight: 700;
background: rgba(0,0,0,.1);
color: #888;
}
html, body {
font-family: sans-serif;
scroll-behavior: smooth;
text-rendering: optimizeSpeed;
background-color: #111;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #555 #111;
padding: 0 !important;
}
#__nuxt, #__layout {
min-height: 100vh;
display: flex;
flex-direction: column;
}
#main {
min-height: 200px;
overflow: hidden;
scrollbar-width: thin;
transition: background-color .5s, opacity .5s; //, color 1s;
background-color: white;
&.dark {
background-color: #111;
}
}
#content {
max-width: 1400px;
flex-grow: 1;
width: 100%;
margin: 0 auto;
}
#header, #footer {
color: white;
background-color: #222;
font-size: 18px;
padding: 0 15px;
}
#footer {
a {
color: orangered;
transition: color .4s;
&:hover {
text-decoration: none;
color: orange;
}
}
#links a {
margin-left: 15px;
}
min-height: 6em;
padding-top: 2em;
font-size: 1em;
}
#header .el-menu--horizontal {
background-color: #222;
color: white;
.el-menu-item, .el-submenu__title {
color: white;
}
.el-submenu .el-submenu__icon-arrow {
margin-left: 0px;
}
.el-submenu .el-submenu__title {
padding: 0 15px;
}
.el-menu-item:not(.is-disabled):focus,
.el-menu-item.is-active,
.el-menu-item:not(.is-disabled):hover,
.el-submenu:focus > .el-submenu__title,
.el-submenu:hover > .el-submenu__title,
.el-submenu.is-active > .el-submenu__title,
.el-submenu.is-opened {
color: white;
background-color: #111;
}
}
.page-enter-active {
transition: opacity .05s;
}
.page-enter, .page-leave-active {
transition: opacity .3s; //, transform .3s;
opacity: 0;
// transform: translateX(30px);
}
.el-card {
max-width: 700px;
margin: 0 auto;
}
.el-menu-item {
height: 40px;
line-height: 40px;
a {
color: #303133;
display: block;
text-decoration: none;
text-overflow: ellipsis;
overflow: hidden;
}
}
.el-message-box {
max-width: 90%;
}
//TODO: refactoring
.el-button.is-plain,
.el-button.is-plain:focus,
.el-button.is-plain {
border-color: #ff450075;
background-color: transparent;
color: orangered;
&:hover {
border-color: #ff450075;
background-color: transparent;
color: orange;
}
}
// TODO: this should be a link
.event .p-location {
transition: color .2s;
&:hover {
cursor: pointer;
color: orangered !important;
}
}
.el-button--text {
color: orangered !important;
&:hover {
color: orange !important;
}
}
.el-button--success.is-plain {
color: #2c8600;
border-color: #9de27b;
background-color: #f9fff6;
}
.el-button--mini, .el-button--mini.is-round {
padding: 6px 12px;
font-size: 0.8rem;
}
.bg-dark {
background-color: #292929 !important;
}
.el-dialog {
min-height: 300px;
max-width: 600px;
width: 100%;
.el-dialog__body {
word-break: normal !important;
}
}
.el-switch__label span {
position: absolute;
}
// .el-input {
// max-width: 350px;
// blockquote {
// border-left: 3px solid grey;
// font-style: italic;
// color: #666;
// padding-left: 1em;
// }
// @media only screen and (max-width: 768px) {
// .el-card {
// padding: 0px !important;
// border-radius: 0px;
// }
// code {
// font-family: sans-serif;
// display: inline-block;
// padding: 0 .4rem;
// border-radius: 5px;
// font-size: .8rem;
// font-weight: 700;
// background: rgba(0,0,0,.1);
// color: #888;
// }
// html, body {
// font-family: sans-serif;
// scroll-behavior: smooth;
// text-rendering: optimizeSpeed;
// background-color: #111;
// overflow-y: auto;
// scrollbar-width: thin;
// scrollbar-color: #555 #111;
// padding: 0 !important;
// }
// #__nuxt, #__layout {
// min-height: 100vh;
// display: flex;
// flex-direction: column;
// }
// #main {
// min-height: 200px;
// overflow: hidden;
// scrollbar-width: thin;
// transition: background-color .5s, opacity .5s; //, color 1s;
// background-color: white;
// &.dark {
// background-color: #111;
// }
// }
// #content {
// max-width: 1400px;
// flex-grow: 1;
// width: 100%;
// margin: 0 auto;
// }
// #header, #footer {
// color: white;
// background-color: #222;
// font-size: 18px;
// padding: 0 15px;
// }
@import './event.less';
@import './editor.less';
// #footer {
// a {
// color: orangered;
// transition: color .4s;
// &:hover {
// text-decoration: none;
// color: orange;
// }
// }
// #links a {
// margin-left: 15px;
// }
// min-height: 6em;
// padding-top: 2em;
// font-size: 1em;
// }
// #header .el-menu--horizontal {
// background-color: #222;
// color: white;
// .el-menu-item, .el-submenu__title {
// color: white;
// }
// .el-submenu .el-submenu__icon-arrow {
// margin-left: 0px;
// }
// .el-submenu .el-submenu__title {
// padding: 0 15px;
// }
// .el-menu-item:not(.is-disabled):focus,
// .el-menu-item.is-active,
// .el-menu-item:not(.is-disabled):hover,
// .el-submenu:focus > .el-submenu__title,
// .el-submenu:hover > .el-submenu__title,
// .el-submenu.is-active > .el-submenu__title,
// .el-submenu.is-opened {
// color: white;
// background-color: #111;
// }
// }
// .page-enter-active {
// transition: opacity .05s;
// }
// .page-enter, .page-leave-active {
// transition: opacity .3s; //, transform .3s;
// opacity: 0;
// // transform: translateX(30px);
// }
// .el-card {
// max-width: 700px;
// margin: 0 auto;
// }
// .el-menu-item {
// height: 40px;
// line-height: 40px;
// a {
// color: #303133;
// display: block;
// text-decoration: none;
// text-overflow: ellipsis;
// overflow: hidden;
// }
// }
// .el-message-box {
// max-width: 90%;
// }
// //TODO: refactoring
// .el-button.is-plain,
// .el-button.is-plain:focus,
// .el-button.is-plain {
// border-color: #ff450075;
// background-color: transparent;
// color: orangered;
// &:hover {
// border-color: #ff450075;
// background-color: transparent;
// color: orange;
// }
// }
// // TODO: this should be a link
// .event .p-location {
// transition: color .2s;
// &:hover {
// cursor: pointer;
// color: orangered !important;
// }
// }
// .el-button--text {
// color: orangered !important;
// &:hover {
// color: orange !important;
// }
// }
// .el-button--success.is-plain {
// color: #2c8600;
// border-color: #9de27b;
// background-color: #f9fff6;
// }
// .el-button--mini, .el-button--mini.is-round {
// padding: 6px 12px;
// font-size: 0.8rem;
// }
// .bg-dark {
// background-color: #292929 !important;
// }
// .el-dialog {
// min-height: 300px;
// max-width: 600px;
// width: 100%;
// .el-dialog__body {
// word-break: normal !important;
// }
// }
// .el-switch__label span {
// position: absolute;
// }
// // .el-input {
// // max-width: 350px;
// // }
// // @media only screen and (max-width: 768px) {
// // .el-card {
// // padding: 0px !important;
// // border-radius: 0px;
// // }
// // }
// @import './event.less';
// @import './editor.less';

View File

@@ -1,5 +1,16 @@
<template lang="pug">
.announcement.announcement.text-white(body-style='padding: 0px;')
v-alert(border='left' dismissible color="deep-orange accent-2" dark close-text='antani') {{announcement.title}}
//- v-list-item(link nuxt :to='`/announcement/${announcement.id}`')
//- v-list-item-icon
//- v-icon mdi-alert
//- v-list-item-content
//- v-list-item-title
//- h2 {{announcement.title}}
//- v-list-item-subtitle(v-html='announcement.announcement')
//- v-list-item
//- v-btn(nuxt :to='`/announcement/${announcement.id}`') {{announcement.title}}
//- .announcement.announcement.text-white(body-style='padding: 0px;')
nuxt-link(:to='`/announcement/${announcement.id}`')
.title <i class='el-icon-info'/> {{announcement.title}}
@@ -23,23 +34,23 @@ export default {
}
</script>
<style lang='less'>
.announcement {
padding: 2%;
background-color: #511;
margin: 1rem 0;
border-radius: 5px;
a:hover {
text-decoration: none;
}
.title {
font-size: 1.2em;
color: white;
transition: color .2s;
&:hover {
color: #fbd6b5;
}
}
border: 2px solid #ff4500ba;
// box-shadow: inset 0px 0px 10px 0px orangered;
}
// .announcement {
// padding: 2%;
// background-color: #511;
// margin: 1rem 0;
// border-radius: 5px;
// a:hover {
// text-decoration: none;
// }
// .title {
// font-size: 1.2em;
// color: white;
// transition: color .2s;
// &:hover {
// color: #fbd6b5;
// }
// }
// border: 2px solid #ff4500ba;
// // box-shadow: inset 0px 0px 10px 0px orangered;
// }
</style>

View File

@@ -1,9 +1,9 @@
<template lang='pug'>
.editor(:class='{ "with-border": border }')
editor-menu-bubble(:editor='editor' :keep-in-bounds='true' v-slot='{ commands, isActive, getMarkAttrs, menu }')
el-button-group.menububble(:class="{ 'is-active': menu.isActive }" :style="`left: ${menu.left}px; bottom: ${menu.bottom}px;`")
el-popover(trigger='hover' placement='bottom-start')
el-button.float-left(slot='reference' size='mini') <v-icon name='question'/>
v-button-group.menububble(:class="{ 'is-active': menu.isActive }" :style="`left: ${menu.left}px; bottom: ${menu.bottom}px;`")
v-popover(trigger='hover' placement='bottom-start')
v-btn.float-left(slot='reference' size='mini') <v-icon name='question'/>
template
span This editor supports inline <code>markdown</code>
div <v-icon name='heading'/> Title Start a line with <code>#</code>
@@ -20,7 +20,7 @@
<v-icon name='bold' />
//- el-button(size='mini' :class='{ "is-active": isActive.italic() }' @click='commands.italic') <v-icon name='italic'/>
//- el-button(size='mini' :class='{ "is-active": isActive.underline() }' @click='commands.underline') <v-icon name='underline'/>
el-button(size='mini' :class='{ "is-active": isActive.link() }' @click='commands.link({href: ""}); $refs.link.focus(); linkActive=true') <v-icon name='link'/>
v-btn(size='mini' :class='{ "is-active": isActive.link() }' @click='commands.link({href: ""}); $refs.link.focus(); linkActive=true') <v-icon name='link'/>
input(:value='isActive.link() && getMarkAttrs("link") && getMarkAttrs("link").href || ""' ref='link' :class='{ "is-active": isActive.link() || linkActive }'
placeholder='https://' @keypress.enter='commands.link({ href: $event.target.value})')
//- el-button(size='mini' :class='{ "is-active": isActive.strike() }' @click='commands.strike') <v-icon name='strikethrough'/>
@@ -112,65 +112,65 @@ export default {
</script>
<style lang='less'>
.editor {
position: relative;
overflow-y: auto;
padding-top: 1.7em;
scrollbar-width: thin;
// .editor {
// position: relative;
// overflow-y: auto;
// padding-top: 1.7em;
// scrollbar-width: thin;
&.with-border {
border: 1px solid #ddd;
border-radius: 5px;
}
// &.with-border {
// border: 1px solid #ddd;
// border-radius: 5px;
// }
.content {
padding: 0px 5px 0px 5px;
flex: 1;
scrollbar-width: thin;
overflow-y: auto;
}
// .content {
// padding: 0px 5px 0px 5px;
// flex: 1;
// scrollbar-width: thin;
// overflow-y: auto;
// }
.menububble {
position: absolute;
display: flex;
overflow: hidden;
opacity: 0;
z-index: 1;
background: #dddddd;
transform: translateX(-50%);
border-radius: 3px;
padding: 0.07rem;
transition: opacity 0.2s, visibility 0.2s, left .2s, bottom .2s;
visibility: hidden;
// .menububble {
// position: absolute;
// display: flex;
// overflow: hidden;
// opacity: 0;
// z-index: 1;
// background: #dddddd;
// transform: translateX(-50%);
// border-radius: 3px;
// padding: 0.07rem;
// transition: opacity 0.2s, visibility 0.2s, left .2s, bottom .2s;
// visibility: hidden;
&.is-active {
opacity: 1;
visibility: visible;
}
input {
padding: 0;
margin: 1px;
display: block;
border: 0;
color: #444;
font-size: .8em;
border-radius: 3px;
line-height: 100%;
transition: width .2s;
padding-left: 5px;
flex-grow: 1;
}
// &.is-active {
// opacity: 1;
// visibility: visible;
// }
// input {
// padding: 0;
// margin: 1px;
// display: block;
// border: 0;
// color: #444;
// font-size: .8em;
// border-radius: 3px;
// line-height: 100%;
// transition: width .2s;
// padding-left: 5px;
// flex-grow: 1;
// }
.fa-icon {
width: auto;
font-size: 10px;
height: 1.4em; /* or any other relative font sizes */
/* You would have to include the following two lines to make this work in Safari */
// max-width: 100%;
max-height: 100%;
}
// .fa-icon {
// width: auto;
// font-size: 10px;
// height: 1.4em; /* or any other relative font sizes */
// /* You would have to include the following two lines to make this work in Safari */
// // max-width: 100%;
// max-height: 100%;
// }
}
}
// }
// }
</style>

View File

@@ -1,26 +1,57 @@
<template lang="pug">
.card.event.h-event.mt-1.text-white
v-card.h-event.mt-1
nuxt-link(:to='`/event/${event.id}`')
el-image(v-if='showImage && event.image_path'
lazy :src='`/media/thumb/${event.image_path}`')
.float-right
i.text-danger.el-icon-refresh(v-if='event.parentId')
.badge.text-info(v-if='settings.enable_resources && event.resources && event.resources.length') {{event.resources.length}}
//- title
.p-name.p-summary.title {{event.title}}
v-img(:src="`/media/thumb/${event.image_path}`" height="250" position="top top" class="white--text align-end")
v-list-item
v-list-item-content
v-list-item-title.headline {{ event.title }}
v-list-item-subtitle
time(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <v-icon>mdi-date</v-icon> {{ event|when }}
v-list-item-subtitle
span <v-icon>md-location-outline</v-icon> {{event.place.name}}
.card-body
//- div.d-flex.justify-content-between
//- when
time.d-block.dt-start.mt-0(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <i class='el-icon-date'/> {{event|when}}
//- place
.p-location.mt-1.text-warning(plain size='mini' round type='text' @click='addPlace') <i class='el-icon-location-outline'/> {{event.place.name}}
//- v-card-text
//- description
//- .p-description.description.mt-3(v-html='description')
v-card-actions
v-btn(text color='primary' nuxt :to='`/event/${event.id}`') {{$t('common.read')}}
v-spacer
v-btn(icon)
v-icon mdi-bookmark
v-btn(icon color='yellow')
v-icon mdi-share-variant
.card-footer(v-if='event.tags.length')
el-button.ml-1(type='text' plain round size='mini' v-for='tag in event.tags' :key='tag' @click='addTag(tag)') {{tag}}
//- <!-- //- v-card.event.h-event.mt-1(max-width="400")
//- p ciao
//- nuxt-link(:to='`/event/${event.id}`')
//- v-list-item
//- v-list-item-content
//- v-list-item-title(v-text='event.title')
//- v-list-item-subtitle
//- //- when
//- time.d-block.dt-start.mt-0(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <i class='el-icon-date'/> {{event|when}}
//- //- place
//- .p-location.mt-1.text-warning(plain size='mini' round type='text' @click='addPlace') <i class='el-icon-location-outline'/> {{event.place.name}}
//- v-img(v-if='showImage && event.image_path' height="194"
//- lazy :src='`/media/thumb/${event.image_path}`')
//- .float-right
//- i.text-danger.el-icon-refresh(v-if='event.parentId')
//- .badge.text-info(v-if='settings.enable_resources && event.resources && event.resources.length') {{event.resources.length}}
//- //- title
//- .p-name.p-summary.title {{event.title}}
//- .card-body
//- //- div.d-flex.justify-content-between
//- //- when
//- time.d-block.dt-start.mt-0(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <i class='el-icon-date'/> {{event|when}}
//- //- place
//- .p-location.mt-1.text-warning(plain size='mini' round type='text' @click='addPlace') <i class='el-icon-location-outline'/> {{event.place.name}}
//- //- description
//- //- .p-description.description.mt-3(v-html='description')
//- .card-footer(v-if='event.tags.length')
//- v-btn.ml-1(type='text' plain rounded size='mini' v-for='tag in event.tags' :key='tag' @click='addTag(tag)') {{tag}} -->
</template>
<script>
import { mapState, mapActions } from 'vuex'
@@ -66,3 +97,65 @@ export default {
}
}
</script>
<style lang="less" scoped>
.h-event {
width: 300px;
max-width: 450px;
flex-grow: 1;
margin: .2em;
background-color: #202020;
overflow: hidden;
}
// a:hover {
// text-decoration: none;
// .title {
// border-bottom: 1px solid #888;
// color: white;
// }
// }
// .title {
// margin-left: 1rem;
// margin-top: 1rem;
// margin-right: 1rem;
// border-bottom: 1px solid #333;
// transition: border-color .5s;
// font-size: 1.2em;
// max-height: 3em;
// overflow: hidden;
// color: white;
// font-weight: bold;
// }
// .card-footer {
// max-height: 4.5em;
// overflow: hidden;
// padding: .25rem 0.5rem;
// line-height: 1.8rem;
// min-height: 2.2rem;
// }
// .card-body {
// overflow: hidden;
// }
// .description {
// color: #999;
// font-size: 0.8em;
// overflow: hidden;
// max-height: 100%;
// }
// .el-image { width: 100% }
// .v-image {
// .v-image__image {
// height: 250px;
// }
// height: 250px;
// background-position: top;
// // width: 100%;
// // object-fit: cover;
// // object-position: top;
// }
// }
</style>

15
components/Footer.vue Normal file
View File

@@ -0,0 +1,15 @@
<template lang="pug">
v-footer(app absolute)
v-btn(text href='https://gancio.org') Gancio {{settings.version}}
v-btn(v-if='settings.enable_federation' text rel='me' @click.prevent='showFollowMe=true') follow me
v-btn(nuxt to='/about' text) about
v-btn(href='https://blog.gancio.org' text) blog
v-btn(href='https://framagit.org/les/gancio' text) source
</template>
<script>
import { mapState } from 'vuex'
export default {
computed: mapState(['settings'])
}
</script>

View File

@@ -1,5 +1,5 @@
<template lang="pug">
section#home
v-container#home(fluid)
Announcement(v-for='announcement in announcements' :key='`a_${announcement.id}`' :announcement='announcement')
#calbar.row.mt-2.mb-2
.col-xl-7.col-lg-7.col-sm-6.col-xs-12
@@ -10,7 +10,6 @@
Search(past-filter recurrent-filter)
#events
//- Announcement(v-for='announcement in announcements' :key='`a_${announcement.id}`' :announcement='announcement')
Event(v-for='event in events' :key='event.id' :event='event')
</template>
@@ -27,6 +26,7 @@ export default {
components: { Calendar, Event, Search, Announcement },
computed: {
events () {
console.error('dentro computed di events in HOME!')
return this.in_past ? this.filteredEventsWithPast : this.filteredEvents
},
...mapGetters(['filteredEvents', 'filteredEventsWithPast']),
@@ -51,10 +51,14 @@ export default {
}
</script>
<style lang='less'>
#calbar {
max-width: 1000px;
// margin: 0 auto;
}
// #calbar {
// max-width: 1000px;
// // margin: 0 auto;
// }
// #home {
// max-width: 1600px;
// }
#events {
max-width: 1600px;
margin: 0 auto;

View File

@@ -1,53 +1,123 @@
<template lang="pug">
el-header#header
nuxt-link#logo(:to='$route.name==="index"?"/about":"/"')
img(src='/favicon.ico')
span.ml-1.hidden-xs-only {{settings.title}}
small.hidden-sm-only {{settings.description}}
v-app-bar(app)
el-menu#menu(mode='horizontal' router )
el-menu-item(v-if='could_add' index='/add')
i.el-icon-plus
span.hidden-xs-only {{$t('common.add_event')}}
//- logo, title and description
v-list-item(:to='$route.name==="index"?"/about":"/"')
v-list-item-avatar(tile)
v-img(src='/logo.png')
v-list-item-content.d-none.d-sm-flex
v-list-item-title
h2 {{settings.title}}
v-list-item-subtitle {{settings.description}}
//- nuxt-link(to='/export')
el-menu-item(index='/export')
i.el-icon-share
span.hidden-xs-only {{$t('common.share')}}
v-spacer
el-submenu(v-if='settings.enable_trusted_instances && settings.trusted_instances && settings.trusted_instances.length' index=4)
template(slot='title')
i.el-icon-guide
span.hidden-xs-only {{$t('common.places')}}
el-menu-item(v-for='instance in settings.trusted_instances' :key='instance.name')
a(:href='instance.url' target='_link')
img.mr-1(:src='`${instance.url}/favicon.ico`' style='height: 25px;')
span.ml-1 {{instance.label || instance.name}}
v-tooltip(bottom) {{$t('common.add')}}
template(v-slot:activator='{ on }')
v-btn(v-if='could_add' icon nuxt to='/add' v-on='on')
v-icon mdi-calendar-plus
el-menu-item(v-if='!$auth.loggedIn' index='/login')
i.el-icon-user
span.hidden-xs-only {{$t('common.login')}}
v-tooltip(bottom) {{$t('common.share')}}
template(v-slot:activator='{ on }')
v-btn(icon nuxt to='/export' v-on='on')
v-icon mdi-share-variant
el-submenu(v-if='$auth.loggedIn' index=3)
template(slot='title')
i.el-icon-user
span.hidden-xs-only {{$t('common.user')}}
el-menu-item(divided index='/settings')
i.el-icon-s-tools
span {{$t('common.settings')}}
el-menu-item(v-if='$auth.user.is_admin' index='/admin')
i.el-icon-s-operation
span {{$t('common.admin')}}
el-menu-item(@click='logout')
i.el-icon-switch-button
span {{$t('common.logout')}}
v-menu(v-if='settings.enable_trusted_instances && settings.trusted_instances && settings.trusted_instances.length'
offset-y bottom open-on-hover transition="slide-y-transition")
template(v-slot:activator="{ on, attrs }")
v-btn(icon v-bind='attrs' v-on='on')
v-icon mdi-map-marker-path
v-list
v-list-item(v-for='instance in settings.trusted_instances'
:key='instance.name'
:href='instance.url'
two-line)
v-list-item-avatar
v-img(:src='`${instance.url}/favicon.ico`')
v-list-item-content
v-list-item-title {{instance.name}}
v-list-item-subtitle {{instance.label}}
el-menu-item(type='text' v-clipboard:copy='feedLink' v-clipboard:success='copyLink')
v-icon(color='orange' name='rss')
v-btn(v-if='!$auth.loggedIn' icon nuxt to='/login')
v-icon mdi-login
v-menu(v-else
offset-y bottom open-on-hover transition="slide-y-transition")
template(v-slot:activator="{ on, attrs }")
v-btn(icon v-bind='attrs' v-on='on')
v-icon mdi-dots-vertical
v-list
v-list-item(nuxt to='/settings')
v-list-item-icon
v-icon mdi-cog
v-list-item-content
v-list-item-title {{$t('common.settings')}}
v-list-item(v-if='$auth.user.is_admin' nuxt to='/admin')
v-list-item-icon
v-icon mdi-account
v-list-item-content
v-list-item-title {{$t('common.admin')}}
v-list-item(@click='logout')
v-list-item-icon
v-icon mdi-logout
v-list-item-content
v-list-item-title {{$t('common.logout')}}
v-btn(icon v-clipboard:copy='feedLink' v-clipboard:success='copyLink')
v-icon(color='orange') mdi-rss
//- el-menu-item(type='text' v-clipboard:copy='feedLink' v-clipboard:success='copyLink')
//- v-icon(color='orange' name='rss')
//- el-header#header
//- img(src='/favicon.ico')
//- span.ml-1.hidden-xs-only {{settings.title}}
//- small.hidden-sm-only {{settings.description}}
//- el-menu#menu(mode='horizontal' router )
//- el-menu-item(v-if='could_add' index='/add')
//- i.el-icon-plus
//- span.hidden-xs-only {{$t('common.add_event')}}
//- //- nuxt-link(to='/export')
//- el-menu-item(index='/export')
//- i.el-icon-share
//- span.hidden-xs-only {{$t('common.share')}}
//- el-submenu(v-if='settings.enable_trusted_instances && settings.trusted_instances && settings.trusted_instances.length' index=4)
//- template(slot='title')
//- i.el-icon-guide
//- span.hidden-xs-only {{$t('common.places')}}
//- el-menu-item(v-for='instance in settings.trusted_instances' :key='instance.name')
//- a(:href='instance.url' target='_link')
//- img.mr-1(:src='`${instance.url}/favicon.ico`' style='height: 25px;')
//- span.ml-1 {{instance.label || instance.name}}
//- el-menu-item(v-if='!$auth.loggedIn' index='/login')
//- i.el-icon-user
//- span.hidden-xs-only {{$t('common.login')}}
//- el-submenu(v-if='$auth.loggedIn' index=3)
//- template(slot='title')
//- i.el-icon-user
//- span.hidden-xs-only {{$t('common.user')}}
//- el-menu-item(divided index='/settings')
//- i.el-icon-s-tools
//- span {{$t('common.settings')}}
//- el-menu-item(v-if='$auth.user.is_admin' index='/admin')
//- i.el-icon-s-operation
//- span {{$t('common.admin')}}
//- el-menu-item(@click='logout')
//- i.el-icon-switch-button
//- span {{$t('common.logout')}}
//- el-menu-item(type='text' v-clipboard:copy='feedLink' v-clipboard:success='copyLink')
//- v-icon(color='orange' name='rss')
</template>
<script>
import { Message } from 'element-ui'
import { mapState } from 'vuex'
export default {
@@ -72,14 +142,18 @@ export default {
},
could_add () {
return (this.$auth.loggedIn || this.settings.allow_anon_event)
},
}
},
methods: {
copyLink () {
Message({ message: this.$t('common.feed_url_copied'), type: 'success', showClose: true })
this.$root.$emit('message', {
message: this.$t('common.feed_url_copied')
})
},
logout () {
Message({ showClose: true, message: this.$t('common.logout_ok'), type: 'success' })
this.$root.$emit('message', {
message: this.$t('common.logout_ok')
})
this.$auth.logout()
},
async createTrustedInstance () {
@@ -110,32 +184,32 @@ export default {
</script>
<style lang='less'>
#header {
display: inline;
#logo {
img {
max-height: 60px;
}
float: left;
line-height: 60px;
color: white;
font-size: 1.5em;
font-weight: 600;
text-decoration: none;
small {
font-size: 0.5em;
}
}
// #header {
// display: inline;
// #logo {
// img {
// max-height: 60px;
// }
// float: left;
// line-height: 60px;
// color: white;
// font-size: 1.5em;
// font-weight: 600;
// text-decoration: none;
// small {
// font-size: 0.5em;
// }
// }
#menu {
position: absolute;
right: 10px;
top: 0px;
border-bottom: none;
.el-menu-item {
padding: 0px 15px;
}
}
}
// #menu {
// position: absolute;
// right: 10px;
// top: 0px;
// border-bottom: none;
// .el-menu-item {
// padding: 0px 15px;
// }
// }
// }
</style>

View File

@@ -1,17 +1,17 @@
<template lang="pug">
el-main#search
el-switch.mt-1.mb-2.ml-2.d-block(
v-container
v-switch.mt-0(
v-if='recurrentFilter && settings.allow_recurrent_event'
:active-text="$t('event.show_recurrent')"
inset color='primary'
:label="$t('event.show_recurrent')"
v-model='showRecurrent')
el-switch.mt-1.mb-2.ml-2.d-block(
v-if='pastFilter'
:active-text="$t('event.show_past')"
v-switch.mt-0(
v-if='pastFilter' inset color='primary'
:label="$t('event.show_past')"
v-model='showPast')
el-autocomplete.mb-1#searchInput.inline-input(:placeholder='$t("common.filter")' prefix-icon='el-icon-search'
highlight-first-item
v-autocomplete#searchInput.mt-0(:placeholder='$t("common.filter")'
v-model='search' :debounce='200'
:fetch-suggestions='querySearch' clearable
@select='addFilter')
@@ -20,9 +20,9 @@
i.float-right.el-icon-place(v-if='item.type==="place"')
i.float-right.el-icon-collection-tag(v-if='item.type==="tag"')
#filters
el-button.mr-1.bg-dark(type='text' round plain v-for='t in filters.tags' size='mini'
v-vtn.mr-1.bg-dark(type='text' round plain v-for='t in filters.tags' size='mini'
:key='t' @click='removeTag(t)') {{t}}
el-button.mr-1.bg-dark.text-warning(type='text' round plain v-for='p in selectedPlaces' size='mini'
v-btn.mr-1.bg-dark.text-warning(type='text' round plain v-for='p in selectedPlaces' size='mini'
:key='p.id' @click='removePlace(p.id)') {{p.name}}
</template>
@@ -91,36 +91,36 @@ export default {
}
</script>
<style lang='less'>
#search {
#searchInput {
border: none;
border-radius: 0px;
border-bottom: 2px solid lightgray;
color: white;
background-color: #111;
}
// #search {
// #searchInput {
// border: none;
// border-radius: 0px;
// border-bottom: 2px solid lightgray;
// color: white;
// background-color: #111;
// }
.el-switch__label {
color: #aaa;
}
// .el-switch__label {
// color: #aaa;
// }
.el-switch__label.is-active {
color: lightgreen;
}
// .el-switch__label.is-active {
// color: lightgreen;
// }
.el-switch__core {
background-color: #555;
border-color: #777;
}
// .el-switch__core {
// background-color: #555;
// border-color: #777;
// }
.is-checked .el-switch__core {
background-color: lightgreen;
}
// .is-checked .el-switch__core {
// background-color: lightgreen;
// }
#filters {
line-height: 2rem;
}
}
// #filters {
// line-height: 2rem;
// }
// }
</style>

39
components/Snackbar.vue Normal file
View File

@@ -0,0 +1,39 @@
<template lang='pug'>
v-snackbar(
v-model="active"
:color="color"
:bottom="bottom"
:top="top"
:left="left"
:right="right"
:timeout="timeout")
v-icon.mr-3(color="white") {{icon}}
span {{ message }}
template(v-slot:action="{ }")
v-icon(size="16" @click="active = false") mdi-close-circle
</template>
<script>
export default {
data () {
return {
icon: 'md-alert',
color: 'primary',
bottom: true,
top: false,
left: false,
right: true,
active: false,
timeout: 5000,
message: ''
}
},
created () {
this.$root.$on('message', snackbar => {
this.active = true
this.message = snackbar.message
this.color = snackbar.color || 'primary'
})
}
}
</script>

View File

@@ -1,26 +1,22 @@
<template lang='pug'>
div
p(v-html="$t('admin.announcement_description')")
br
el-input(v-model='announcement.title' :placeholder='$t("common.title")')
v-container
v-subheader(v-html="$t('admin.announcement_description')")
v-text-field(v-model='announcement.title' :placeholder='$t("common.title")')
Editor.mt-2(v-model='announcement.announcement' border no-save style='max-height: 400px;')
el-button.mt-2.float-right(@click='save' type='success' plain) {{$t(`common.${editing?'save':'send'}`)}}
v-btn.mt-2(@click='save' type='success' plain) {{$t(`common.${editing?'save':'send'}`)}}
el-table(:data='announcements' small)
el-table-column(:label="$t('common.title')" width='250')
template(slot-scope='data')
span(slot='reference') {{data.row.title}}
v-data-table(:items='announcements')
el-table-column(:label="$t('common.actions')")
template(slot-scope='data')
el-button-group
el-button(size='mini' type='primary'
@click='edit(data.row)') {{$t('common.edit')}}
el-button(size='mini'
:type='data.row.visible?"warning":"success"'
@click='toggle(data.row)') {{data.row.visible?$t('common.deactivate'):$t('common.activate')}}
el-button(size='mini' type='danger'
@click='remove(data.row)') {{$t('common.delete')}}
//- el-table-column(:label="$t('common.actions')")
//- template(slot-scope='data')
//- el-button-group
//- el-button(size='mini' type='primary'
//- @click='edit(data.row)') {{$t('common.edit')}}
//- el-button(size='mini'
//- :type='data.row.visible?"warning":"success"'
//- @click='toggle(data.row)') {{data.row.visible?$t('common.deactivate'):$t('common.activate')}}
//- el-button(size='mini' type='danger'
//- @click='remove(data.row)') {{$t('common.delete')}}
</template>
<script>

View File

@@ -1,47 +1,72 @@
<template lang="pug">
el-main
el-switch.d-block(v-model='enable_federation' :active-text="$t('admin.enable_federation')")
small.text-secondary {{$t('admin.enable_federation_help')}}
v-container
v-switch(v-model='enable_federation'
:label="$t('admin.enable_federation')"
persistent-hint
inset
:hint="$t('admin.enable_federation_help')"
)
template(v-if='enable_federation')
el-switch.d-block.mt-4(v-model='enable_resources' :active-text="$t('admin.enable_resources')")
small.text-secondary {{$t('admin.enable_resources_help')}}
v-switch.mt-4(v-model='enable_resources'
:label="$t('admin.enable_resources')"
:hint="$t('admin.enable_resources_help')"
persistent-hint inset)
el-switch.d-block.mt-4(v-model='hide_boosts' :active-text="$t('admin.hide_boost_bookmark')")
small.text-secondary {{$t('admin.hide_boost_bookmark_help')}}
v-switch.mt-4(v-model='hide_boosts'
:label="$t('admin.hide_boost_bookmark')"
:hint="$t('admin.hide_boost_bookmark_help')"
persistent-hint inset)
div.mt-4 {{$t('admin.instance_name')}}
el-input(v-model='instance_name' placeholder='Instance name' @blur='save("instance_name", instance_name)')
small.d-block.text-secondary {{$t('admin.instance_name_help')}} (<u>@{{instance_name}}@{{settings.baseurl|url2host}}</u>)
//- div.mt-4 {{$t('admin.instance_name')}}
v-text-field.mt-5(v-model='instance_name'
:label="$t('admin.instance_name')"
:hint="`${$t('admin.instance_name_help')} (@${instance_name}@${settings.baseurl|url2host})`"
placeholder='Instance name' persistent-hint
@blur='save("instance_name", instance_name)')
el-switch.d-block.mt-4(v-model='enable_trusted_instances' :active-text="$t('admin.enable_trusted_instances')")
small.text-secondary {{$t('admin.trusted_instances_help')}}
v-switch.mt-4(v-model='enable_trusted_instances'
:label="$t('admin.enable_trusted_instances')"
persistent-hint inset
:hint="$t('admin.trusted_instances_help')")
template(v-if='enable_trusted_instances')
div.mt-4 {{$t('admin.instance_place')}}
el-input(v-model='instance_place' @blur='save("instance_place", instance_place)')
small.d-block.text-secondary {{$t('admin.instance_place_help')}}
v-text-field.mt-4(v-model='instance_place'
:label="$t('admin.instance_place')"
persistent-hint
:hint="$t('admin.instance_place_help')"
@blur='save("instance_place", instance_place)'
)
div.mt-4 {{$t('admin.add_trusted_instance')}}
el-input(v-model='instance_url' :placeholder="$t('common.url')")
el-button(slot='append' @click='createTrustedInstance') {{$t('common.send')}}
//- div.mt-4 {{$t('admin.add_trusted_instance')}}
v-text-field.mt-4(v-model='instance_url'
:full-width='false'
persistent-hint
:hint="$t('admin.add_trusted_instance')"
:label="$t('common.url')"
append-outer-icon="mdi-send"
@click:append-outer='createTrustedInstance'
)
el-table(:data='settings.trusted_instances')
el-table-column(:label="$t('common.name')")
template(slot-scope='data')
span {{data.row.name}}
el-table-column(:label="$t('common.url')")
template(slot-scope='data')
span {{data.row.url}}
el-table-column(:label="$t('common.place')")
template(slot-scope='data')
span {{data.row.label}}
el-table-column(:label="$t('common.actions')")
template(slot-scope='data')
el-button(size='mini'
type='danger'
@click='deleteInstance(data.row)') {{$t('admin.delete_user')}}
v-data-table.mt-4(
:headers='headers'
:items='settings.trusted_instances'
)
//- el-table-column(:label="$t('common.name')")
//- template(slot-scope='data')
//- span {{data.row.name}}
//- el-table-column(:label="$t('common.url')")
//- template(slot-scope='data')
//- span {{data.row.url}}
//- el-table-column(:label="$t('common.place')")
//- template(slot-scope='data')
//- span {{data.row.label}}
//- el-table-column(:label="$t('common.actions')")
//- template(slot-scope='data')
//- el-button(size='mini'
//- type='danger'
//- @click='deleteInstance(data.row)') {{$t('admin.delete_user')}}
</template>
<script>
@@ -51,11 +76,12 @@ import axios from 'axios'
export default {
name: 'Federation',
data ({ $store }) {
data ({ $store, $options }) {
return {
instance_url: '',
instance_name: $store.state.settings.instance_name,
instance_place: $store.state.settings.instance_place
instance_place: $store.state.settings.instance_place,
url2host: $options.filters.url2host
}
},
computed: {
@@ -77,6 +103,9 @@ export default {
set (value) { this.setSetting({ key: 'enable_trusted_instances', value }) }
}
},
mounted () {
console.error(this.$options.filters)
},
methods: {
...mapActions(['setSetting']),
async createTrustedInstance () {

View File

@@ -1,44 +1,33 @@
<template lang='pug'>
div
p(v-html="$t('admin.place_description')")
el-form.mb-2(inline label-width='120px')
el-form-item(:label="$t('common.name')")
el-input.mr-1(:placeholder='$t("common.name")' v-model='place.name')
el-form-item(:label="$t('common.address')")
el-input.mr-1(:placeholder='$t("common.address")' v-model='place.address')
el-button(variant='primary' @click='savePlace') {{$t('common.save')}}
v-container
v-subheader(v-html="$t('admin.place_description')")
v-form.mb-2
//- el-form-item(:label="$t('common.name')")
//- el-input.mr-1(:placeholder='$t("common.name")' v-model='place.name')
v-text-field(
:label="$t('common.name')"
v-model='place.name'
:placeholder='$t("common.name")')
el-table(:data='paginatedPlaces' small)
el-table-column(:label="$t('common.name')" width='200')
template(slot-scope='data') {{data.row.name}}
el-table-column(:label="$t('common.address')" width='400')
template(slot-scope='data') {{data.row.address}}
el-table-column(:label="$t('common.actions')" width='200')
template(slot-scope='data')
el-button(size='mini'
type='success'
@click='place = data.row') {{$t('common.edit')}}
v-text-field(
:label="$t('common.address')"
v-model='place.address'
:placeholder='$t("common.address")')
client-only
el-pagination(v-if='places.length>perPage' :page-size='perPage' :currentPage.sync='placePage' :total='places.length')
v-btn(@click='savePlace') {{$t('common.save')}}
v-data-table(
:items='places')
</template>
<script>
import { mapState } from 'vuex'
export default {
data () {
return {
perPage: 10,
placePage: 1,
place: { name: '', address: '', id: null }
}
},
computed: {
...mapState(['places']),
paginatedPlaces () {
return this.places.slice((this.placePage - 1) * this.perPage,
this.placePage * this.perPage)
}
},
computed: mapState(['places']),
methods: {
placeSelected (items) {
if (items.length === 0) {
@@ -51,7 +40,7 @@ export default {
this.place.id = item.id
},
async savePlace () {
const place = await this.$axios.$put('/place', this.place)
await this.$axios.$put('/place', this.place)
}
}
}

View File

@@ -1,50 +1,73 @@
<template lang="pug">
el-main
v-container
//- select timezone
div {{$t('admin.select_instance_timezone')}}
el-select(v-model='instance_timezone' filterable
@input.native='queryTz=$event.target.value' @change='queryTz=""'
default-first-option placeholder='Timezone, type to search')
el-option(v-for='timezone in filteredTimezones' :key='timezone.value' :value='timezone.value')
span.float-left {{timezone.value}}
small.float-right.text-danger {{timezone.offset}}
small.d-block.text-secondary {{$t('admin.instance_timezone_description')}}
v-autocomplete(v-model='instance_timezone'
:label="$t('admin.select_instance_timezone')"
:hint="$t('admin.instance_timezone_description')"
:items="filteredTimezones"
persistent-hint
item-text='value'
item-value='value'
placeholder='Timezone, type to search')
template(v-slot:item='{ item }')
v-list-item-content
v-list-item-title {{item.value}}
v-list-item-subtitle {{item.offset}}
div.mt-4 {{$t('admin.instance_locale')}}
el-select(v-model='instance_locale')
el-option(v-for='locale in Object.keys(locales)' :key='locale' :label='locales[locale]' :value='locale')
small.d-block.text-secondary {{$t('admin.instance_locale_description')}}
v-select.mt-5(
v-model='instance_locale'
:label="$t('admin.instance_locale')"
:hint="$t('admin.instance_locale_description')"
persistent-hint
item-text='locale'
item-value='locale'
:items='locales'
)
div.mt-4 {{$t('common.title')}}
el-input(v-model='title' @blur='save("title", title)')
small.d-block.text-secondary {{$t('admin.title_description')}}
v-text-field.mt-5(v-model='title'
:label="$t('common.title')"
:hint="$t('admin.title_description')"
@blur='save("title", title)'
persistent-hint
)
div.mt-4 {{$t('common.description')}}
el-input(v-model='description' @blur='save("description", description)')
small.d-block.text-secondary {{$t('admin.description_description')}}
v-text-field.mt-5(v-model='description'
:label="$t('common.description')"
:hint="$t('admin.description_description')"
persistent-hint
@blur='save("description", description)')
div.mt-4 {{$t('admin.favicon')}}
el-upload(ref='upload'
:action='`${settings.baseurl}/api/settings/logo`'
:on-success="forceLogoReload"
name='logo'
:show-file-list="true"
accept='image/png'
:limit='1'
:multiple='false')
el-button-group
el-button(size='small' type='primary' plain) Select file
el-button(size='small' type='success' plain @click='resetLogo') Reset
.el-upload__tip(slot='tip') png files with a size less than 500kb
el-image(:src='`${settings.baseurl}/favicon.ico?${logoKey}`')
el-switch.d-block.mt-4(v-model='allow_registration'
:active-text="$t('admin.allow_registration_description')")
el-switch.d-block.mt-4(v-model='allow_anon_event' :active-text="$t('admin.allow_anon_event')")
v-file-input.mt-5(ref='upload'
:label="$t('admin.favicon')"
:action='`${settings.baseurl}/api/settings/logo`'
:on-success="forceLogoReload"
name='logo'
:show-file-list="true"
accept='image/png'
:limit='1'
:multiple='false')
//- el-button-group
el-button(size='small' type='primary' plain) Select file
el-button(size='small' type='success' plain @click='resetLogo') Reset
v-img(:src='`${settings.baseurl}/favicon.ico?${logoKey}`')
el-switch.d-block.mt-4(v-model='allow_recurrent_event' :active-text="$t('admin.allow_recurrent_event')")
v-switch.mt-5(v-model='allow_registration'
inset
:label="$t('admin.allow_registration_description')")
el-switch.d-block.mt-4(v-if='allow_recurrent_event'
v-model='recurrent_event_visible' :active-text="$t('admin.recurrent_event_visible')")
v-switch.mt-4(v-model='allow_anon_event'
inset
:label="$t('admin.allow_anon_event')")
v-switch.mt-4(v-model='allow_recurrent_event'
inset
:label="$t('admin.allow_recurrent_event')")
v-switch.mt-4(v-if='allow_recurrent_event'
v-model='recurrent_event_visible'
inset
:label="$t('admin.recurrent_event_visible')")
</template>
<script>
@@ -57,7 +80,6 @@ export default {
name: 'Settings',
data ({ $store }) {
return {
queryTz: '',
title: $store.state.settings.title,
description: $store.state.settings.description,
locales,
@@ -92,10 +114,7 @@ export default {
},
filteredTimezones () {
const current_timezone = moment.tz.guess()
const query = this.queryTz.toLowerCase()
const ret = _(moment.tz.names())
.filter(tz => tz !== current_timezone && (!query || tz.toLowerCase().includes(query)))
.take(10)
.unshift(current_timezone)
.map(tz => ({ value: tz, offset: moment().tz(tz).format('z Z') }))
.value()

View File

@@ -1,41 +1,54 @@
<template lang="pug">
div
//- ADD NEW USER
el-collapse
el-collapse-item
template(slot='title')
el-button(type='text' mini size='mini') <v-icon name='plus'/> {{$t('common.new_user')}}
el-form(inline @submit.native.prevent='create_user')
el-form-item(:label="$t('common.email')")
el-input(v-model='new_user.email')
el-form-item(:label="$t('common.admin')")
el-switch(v-model='new_user.is_admin')
el-button.float-right(@click='create_user' type='success' plain) {{$t('common.send')}}
el-alert.mb-1(type='info' show-icon :closable='false') {{$t('admin.user_add_help')}}
v-container
//- USERS LIST
el-table(:data='paginatedUsers' small)
el-table-column(label='Email' width='220')
template(slot-scope='data')
el-popover(trigger='hover' :content='data.row.description' width='400')
span(slot='reference') {{data.row.email}}
el-table-column(:label="$t('common.actions')")
template(slot-scope='data')
div(v-if='data.row.id!==$auth.user.id')
el-button-group
el-button(size='mini'
:type='data.row.is_active?"warning":"success"'
@click='toggle(data.row)') {{data.row.is_active?$t('common.deactivate'):$t('common.activate')}}
el-button(size='mini'
:type='data.row.is_admin?"danger":"warning"'
@click='toggleAdmin(data.row)') {{data.row.is_admin?$t('admin.remove_admin'):$t('common.admin')}}
el-button(size='mini'
type='danger'
@click='delete_user(data.row)') {{$t('admin.delete_user')}}
div(v-else)
span {{$t('common.me')}}
client-only
el-pagination(:page-size='perPage' :currentPage.sync='userPage' v-if='perPage<users_.length' :total='users_.length')
//- ADD NEW USER
v-dialog(v-model='newUser' width='500')
template(v-slot:activator="{ on }")
v-btn(text v-on='on') <v-icon>mdi-plus</v-icon> {{$t('common.new_user')}}
v-card
v-card-title <v-icon name='plus'/> {{$t('common.new_user')}}
v-card-text
v-form(inline @submit.native.prevent='create_user')
v-text-field(v-model='new_user.email'
:label="$t('common.email')")
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-card-actions
v-btn(@click='create_user' color='success' plain) {{$t('common.send')}}
//- USERS LIST
v-data-table(
:headers='headers'
:items='users')
template(v-slot:item.actions='{item}')
v-btn(text small @click='toggle(item)'
:color='item.is_active?"warning":"success"') {{item.is_active?$t('common.deactivate'):$t('common.activate')}}
v-btn(text small @click='toggleAdmin(item)'
:color='item.is_admin?"warning":"error"') {{item.is_admin?$t('common.remove_admin'):$t('common.admin')}}
v-btn(text small @click='deleteUser(item)'
:color='danger') {{$t('admin.delete_user')}}
//- el-table-column(label='Email' width='220')
//- template(slot-scope='data')
//- el-popover(trigger='hover' :content='data.row.description' width='400')
//- span(slot='reference') {{data.row.email}}
//- el-table-column(:label="$t('common.actions')")
//- template(slot-scope='data')
//- div(v-if='data.row.id!==$auth.user.id')
//- el-button-group
//- el-button(size='mini'
//- :type='data.row.is_active?"warning":"success"'
//- @click='toggle(data.row)') {{data.row.is_active?$t('common.deactivate'):$t('common.activate')}}
//- el-button(size='mini'
//- :type='data.row.is_admin?"danger":"warning"'
//- @click='toggleAdmin(data.row)') {{data.row.is_admin?$t('admin.remove_admin'):$t('common.admin')}}
//- el-button(size='mini'
//- type='danger'
//- @click='delete_user(data.row)') {{$t('admin.delete_user')}}
//- div(v-else)
//- span {{$t('common.me')}}
//- v-pagination(:page-size='perPage' :currentPage.sync='userPage' v-if='perPage<users_.length' :total='users_.length')
</template>
<script>
@@ -44,27 +57,24 @@ import { mapState } from 'vuex'
export default {
name: 'Users',
props: ['users'],
props: {
users: { type: Array, default: () => [] }
},
data () {
return {
perPage: 10,
userPage: 1,
new_user: {
email: '',
is_admin: false
},
users_: this.users
}
},
computed: {
...mapState(['settings']),
paginatedUsers () {
return this.users_.slice((this.userPage - 1) * this.perPage,
this.userPage * this.perPage)
headers: [
{ value: 'email', text: 'Email' },
{ value: 'actions', text: 'Actions', align: 'right' }
]
}
},
computed: mapState(['settings']),
methods: {
delete_user (user) {
deleteUser (user) {
MessageBox.confirm(this.$t('admin.delete_user_confirm'),
this.$t('common.confirm'), {
confirmButtonText: this.$t('common.ok'),

View File

@@ -1,5 +1,14 @@
<template lang='pug'>
el-container#main(:class='{dark: $route.name==="index" || $route.name==="announcement-id"}')
v-app(app)
Snackbar
Nav
v-main(app)
v-scroll-x-transition(hide-on-leave)
nuxt
Footer
//- el-container#main(:class='{dark: $route.name==="index" || $route.name==="announcement-id"}')
el-dialog(:visible.sync='showFollowMe')
h4(slot='title') {{$t('common.follow_me_title')}}
FollowMe
@@ -10,34 +19,24 @@
nuxt
el-footer.mt-1#footer
#links
a(href='https://gancio.org') Gancio {{settings.version}}</a>
span
a(v-if='settings.enable_federation' rel='me' :href='settings.baseurl' @click.prevent='showFollowMe=true') follow me
nuxt-link(to='/about') about
a(href='https://blog.gancio.org') blog
a(href='https://framagit.org/les/gancio') source
</template>
<script>
import Nav from '~/components/Nav.vue'
import { mapState } from 'vuex'
import FollowMe from '../components/FollowMe'
import Snackbar from '../components/Snackbar'
import Footer from '../components/Footer'
export default {
components: { Nav, FollowMe },
name: 'Default',
components: { Nav, FollowMe, Snackbar, Footer },
data () {
return { showFollowMe: false }
},
computed: mapState(['settings'])
}
</script>
<style lang='less'>
.el-backtop {
color: orangered;
}
#footer {
a {
font-size: 1.1em;
watch: {
'$route.name' (name) {
this.$vuetify.theme.dark = name !== 'NewEvent'
}
}
}
</style>
</script>

View File

@@ -1,5 +1,5 @@
<template lang='pug'>
el-main.p-4.text-center#error
v-container.p-4.text-center#error
h1(v-if="error.statusCode === 404") <i class='el-icon-warning'></i> {{error.message}}
h1(v-else) <i name='el-icon-warning'></i> An error occurred: {{error.message}}
nuxt-link(to='/') Back to home

View File

@@ -24,21 +24,21 @@ module.exports = {
/*
** Global CSS
*/
css: [
'bootstrap/dist/css/bootstrap.min.css',
'element-ui/lib/theme-chalk/index.css',
'element-ui/lib/theme-chalk/display.css',
'@/assets/style.less'
],
// css: [
// 'bootstrap/dist/css/bootstrap.min.css',
// 'element-ui/lib/theme-chalk/index.css',
// 'element-ui/lib/theme-chalk/display.css',
// '@/assets/theme/index.css'
// '@/assets/style.less'
// ],
/*
** Plugins to load before mounting the App
*/
plugins: [
'@/plugins/i18n.js',
'@/plugins/element-ui', // UI library -> https://element.eleme.io/#/en-US/
'@/plugins/filters', // text filters, datetime, etc.
'@/plugins/vue-awesome', // icon
'@/plugins/filters', // text filters, datetime filters, generic transformation helpers etc.
'@/plugins/vue-clipboard', // vuetify
'@/plugins/axios', // axios baseurl configuration
{ src: '@/plugins/v-calendar', ssr: false } // calendar, fix ssr
],
@@ -94,6 +94,13 @@ module.exports = {
}
},
buildModules: [
'@nuxtjs/vuetify'
],
vuetify: {
optionsPath: './vuetify.options.js'
/* module options */
},
/*
** Build configuration
*/

View File

@@ -4,39 +4,15 @@
"description": "A shared agenda for local communities",
"author": "lesion",
"scripts": {
"dev:nuxt": "cross-env NODE_ENV=development nuxt dev",
"dev": "cross-env DEBUG=*,-babel*,-preview-email,-i18n:debug,-email-templates,-follow-redirects,-send,-body-parser:*,-express:*,-connect:*,-sequelize:* NODE_ENV=development node server/index.js",
"build": "nuxt build",
"start": "cross-env DEBUG=*,-babel*,-preview-email,-i18n:debug,-email-templates,-follow-redirects,-send,-body-parser:*,-express:*,-connect:*,-sequelize:* NODE_ENV=production node server/cli.js",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
"dev": "cross-env DEBUG=*,-babel*,-preview-email,-i18n:debug,-email-templates,-follow-redirects,-send,-body-parser:*,-express:*,-connect:*,-sequelize:* NODE_ENV=development node server/index.js",
"dev:nuxt": "cross-env NODE_ENV=development nuxt dev",
"doc": "cd docs && bundle exec jekyll b",
"doc:dev": "cd docs && bundle exec jekyll s --drafts",
"migrate": "NODE_ENV=production sequelize db:migrate",
"migrate:dev": "sequelize db:migrate",
"migrate": "NODE_ENV=production sequelize db:migrate"
},
"license": "AGPL-3.0",
"bugs": {
"email": "lesion@autistici.org",
"url": "https://framagit.org/les/gancio/issues"
},
"keywords": [
"AP",
"gancio",
"events",
"federation",
"activitypub",
"event",
"server",
"self-host",
"app"
],
"homepage": "https://gancio.org",
"repository": {
"type": "git",
"url": "https://framagit.org/les/gancio"
},
"bin": {
"gancio": "server/cli.js"
"start": "cross-env DEBUG=*,-babel*,-preview-email,-i18n:debug,-email-templates,-follow-redirects,-send,-body-parser:*,-express:*,-connect:*,-sequelize:* NODE_ENV=production node server/cli.js"
},
"files": [
"server/",
@@ -50,12 +26,9 @@
"config/",
".nuxt/"
],
"resolutions": {
"prosemirror-model": "1.10.0"
},
"dependencies": {
"@nuxtjs/auth": "^4.9.1",
"@nuxtjs/axios": "^5.11.0",
"@nuxtjs/axios": "^5.12.0",
"accept-language": "^3.0.18",
"axios": "^0.19.2",
"bcryptjs": "^2.4.3",
@@ -66,19 +39,19 @@
"cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"cross-env": "^7.0.2",
"date-fns": "^2.14.0",
"dayjs": "^1.8.29",
"date-fns": "^2.15.0",
"dayjs": "^1.8.30",
"dompurify": "^2.0.11",
"element-ui": "^2.13.2",
"email-templates": "^7.0.5",
"email-templates": "^7.1.0",
"express": "^4.17.1",
"express-oauth-server": "^2.0.0",
"http-signature": "^1.3.4",
"ics": "^2.22.1",
"inquirer": "^7.3.0",
"jsdom": "^16.2.2",
"inquirer": "^7.3.3",
"jsdom": "^16.3.0",
"jsonwebtoken": "^8.5.1",
"less": "^3.11.3",
"less": "^3.12.2",
"linkifyjs": "^2.1.9",
"lodash": "^4.17.19",
"mkdirp": "^1.0.4",
@@ -88,30 +61,30 @@
"nominatim-geocoder": "^0.1.4",
"nuxt": "^2.13.3",
"nuxt-express-module": "^0.0.11",
"pg": "^8.2.2",
"sequelize": "^6.3.0",
"pg": "^8.3.0",
"sequelize": "^6.3.3",
"sequelize-cli": "^6.2.0",
"sharp": "^0.25.4",
"sqlite3": "^5.0.0",
"tiptap": "^1.27.1",
"tiptap-extensions": "^1.29.1",
"tiptap": "^1.29.1",
"tiptap-extensions": "^1.31.1",
"to-ico": "^1.1.5",
"url": "^0.11.0",
"v-calendar": "^1.0.8",
"vue-awesome": "^4.0.0",
"vue-awesome": "^4.1.0",
"vue-clipboard2": "^0.3.1",
"vue-i18n": "^8.18.2",
"yargs": "^15.4.0"
"yargs": "^15.4.1"
},
"devDependencies": {
"@nuxtjs/eslint-config": "^3.0.0",
"@nuxtjs/vuetify": "^1.11.2",
"babel-eslint": "^10.1.0",
"eslint": "^7.4.0",
"eslint": "^7.5.0",
"eslint-config-prettier": "^6.11.0",
"eslint-config-standard": ">=14.1.1",
"eslint-loader": "^4.0.2",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-jest": "^23.17.1",
"eslint-plugin-node": ">=11.1.0",
"eslint-plugin-nuxt": "^1.0.0",
"eslint-plugin-prettier": "^3.1.4",
@@ -122,6 +95,37 @@
"nodemon": "^2.0.4",
"prettier": "^2.0.5",
"pug-plain-loader": "^1.0.0",
"sass": "^1.19.0",
"sass-loader": "^9.0.2",
"vue-cli-plugin-vuetify": "~2.0.7",
"vuetify-loader": "^1.3.0",
"webpack-cli": "^3.3.12"
},
"bin": {
"gancio": "server/cli.js"
},
"bugs": {
"email": "lesion@autistici.org",
"url": "https://framagit.org/les/gancio/issues"
},
"homepage": "https://gancio.org",
"keywords": [
"AP",
"gancio",
"events",
"federation",
"activitypub",
"event",
"server",
"self-host",
"app"
],
"license": "AGPL-3.0",
"repository": {
"type": "git",
"url": "https://framagit.org/les/gancio"
},
"resolutions": {
"prosemirror-model": "1.10.0"
}
}

View File

@@ -1,69 +1,58 @@
<template lang="pug">
el-main
v-container
el-tabs(v-model='tab')
v-tabs
//- SETTINGS
el-tab-pane.pt-1
template(slot='label')
v-icon(name='cog')
span.hidden-xs-only {{$t('common.settings')}}
v-tab {{$t('common.settings')}}
v-tab-item
Settings
//- USERS
el-tab-pane.pt-1
template(slot='label')
v-icon(name='users')
span.hidden-xs-only.ml-1 {{$t('common.users')}}
el-badge(v-show='unconfirmedUsers.length>0' :value='unconfirmedUsers.length')
v-tab
v-badge(:value='unconfirmedUsers.length' :content='unconfirmedUsers.length') {{$t('common.users')}}
v-tab-item
Users(:users='users')
//- PLACES
el-tab-pane.pt-1
template(slot='label')
v-icon(name='map-marker-alt')
span.hidden-xs-only.ml-1 {{$t('common.places')}}
v-tab {{$t('common.places')}}
v-tab-item
Places
//- EVENTS
el-tab-pane.pt-1
template(slot='label')
v-icon(name='calendar')
span.hidden-xs-only.ml-1 {{$t('common.events')}}
el-badge(v-show='events.length>0' :value='events.length')
v-tab
v-badge(:content='events.length') {{$t('common.events')}}
v-tab-item
p {{$t('admin.event_confirm_description')}}
el-table(:data='paginatedEvents' small primary-key='id' v-loading='loading')
el-table-column(:label='$t("common.name")' width='300')
template(slot-scope='data') {{data.row.title}}
el-table-column(:label='$t("common.where")' width='250')
template(slot-scope='data') {{data.row.place.name}}
el-table-column(:label='$t("common.confirm")' width='250')
template(slot-scope='data')
el-button-group
el-button(type='primary' @click='confirm(data.row.id)' size='mini') {{$t('common.confirm')}}
el-button(type='success' @click='preview(data.row.id)' size='mini') {{$t('common.preview')}}
client-only
el-pagination(v-if='events.length>perPage' :page-size='perPage' :currentPage.sync='eventPage' :total='events.length')
v-data-table(
:items='events'
:headers='eventHeaders'
)
//- el-table-column(:label='$t("common.name")' width='300')
//- template(slot-scope='data') {{data.row.title}}
//- el-table-column(:label='$t("common.where")' width='250')
//- template(slot-scope='data') {{data.row.place.name}}
//- el-table-column(:label='$t("common.confirm")' width='250')
//- template(slot-scope='data')
//- el-button-group
//- el-button(type='primary' @click='confirm(data.row.id)' size='mini') {{$t('common.confirm')}}
//- el-button(type='success' @click='preview(data.row.id)' size='mini') {{$t('common.preview')}}
//- client-only
//- el-pagination(v-if='events.length>perPage' :page-size='perPage' :currentPage.sync='eventPage' :total='events.length')
//- ANNOUNCEMENTS
el-tab-pane.pt-1
template(slot='label')
v-icon(name='bullhorn')
span.hidden-xs-only.ml-1 {{$t('common.announcements')}}
v-tab {{$t('common.announcements')}}
v-tab-item
Announcement
//- FEDERATION
el-tab-pane.pt-1
template(slot='label')
v-icon(name='network-wired')
span.hidden-xs-only.ml-1 {{$t('common.federation')}}
v-tab {{$t('common.federation')}}
v-tab-item
Federation
//- MODERATION
el-tab-pane.pt-1(v-if='settings.enable_federation')
template(slot='label')
v-icon(name='vector-square')
span.hidden-xs-only.ml-1 {{$t('common.moderation')}}
v-tab(v-if='settings.enable_federation') {{$t('common.moderation')}}
v-tab-item
Moderation
</template>
@@ -93,26 +82,14 @@ export default {
},
data () {
return {
perPage: 10,
eventPage: 1,
description: '',
events: [],
loading: false,
tab: '0',
open: true
events: []
}
},
head () {
return { title: `${this.settings.title} - ${this.$t('common.admin')}` }
},
computed: {
...mapState(['settings']),
unconfirmedUsers () {
return this.users.filter(u => !u.is_active)
},
paginatedEvents () {
return this.events.slice((this.eventPage - 1) * this.perPage,
this.eventPage * this.perPage)
}
},
methods: {
@@ -133,6 +110,9 @@ export default {
} catch (e) {
}
}
},
head () {
return { title: `${this.settings.title} - ${this.$t('common.admin')}` }
}
}
</script>

View File

@@ -1,24 +1,33 @@
<template lang='pug'>
el-main
el-card
h4(slot='header').text-center <el-icon name='user'/> {{$t('common.login')}}
p(v-html="$t('login.description')")
div(v-loading='loading')
v-row.mt-5(align='center' justify='center')
v-col(cols='12' md="6" lg="5" xl="4")
el-input.mb-2(v-model='email' type='email' title='email' prefix-icon='el-icon-user'
:placeholder='$t("common.email")' autocomplete='email' ref='email')
v-card
v-card-title {{$t('common.login')}}
v-card-subtitle(v-text="$t('login.description')")
el-input.mb-1(v-model='password' @keyup.enter.native="submit"
prefix-icon='el-icon-lock' name='password'
type='password' :placeholder='$t("common.password")')
v-card-text
div
el-button.text-right(type='text' @click='forgot') {{$t('login.forgot_password')}}
v-text-field(v-model='email' type='email'
:placeholder='$t("common.email")'
ref='email')
el-button.mt-5.mr-1(plain type="success"
:disabled='disabled' @click='submit') {{$t('common.login')}}
nuxt-link(to='/register' v-if='settings.allow_registration')
el-button(type='primary' plain) {{$t('login.not_registered')}}
v-text-field(v-model='password'
type='password'
:placeholder='$t("common.password")')
v-card-actions
v-btn(color='success'
text
:disabled='disabled'
@click='submit') {{$t('common.login')}}
v-btn(v-if='settings.allow_registration'
to='/register'
text
color='orange') {{$t('login.not_registered')}}
v-btn(text @click='forgot') {{$t('login.forgot_password')}}
</template>
<script>

View File

@@ -1,20 +1,24 @@
<template lang='pug'>
el-main
el-card
h4(slot='header').text-center <el-icon name='user'/> {{$t('common.register')}}
p(v-html="$t('register.description')")
div(v-loading='loading')
v-row.mt-5(align='center' justify='center')
v-col(cols='12' sm='10' md="6")
el-input.mb-2(ref='email' v-model='user.email' type='email' required
:placeholder='$t("common.email")' autocomplete='email'
prefix-icon='el-icon-message' name='email')
v-card
v-card-title {{$t('common.register')}}
el-input.mb-2(v-model='user.password' type="password"
placeholder="Password" name='password' required prefix-icon='el-icon-lock')
v-card-text
el-input.mb-2(v-model='user.description' type="textarea" rows='3' :placeholder="$t('common.description')")
p(v-html="$t('register.description')")
v-text-field(ref='email' v-model='user.email' type='email' required
:placeholder='$t("common.email")' autocomplete='email'
prefix-icon='el-icon-message')
el-button(plain type="success" :disabled='disabled' @click='register') {{$t('common.send')}} <v-icon name='chevron-right'/>
v-text-field(v-model='user.password' type="password"
placeholder="Password")
v-text-field(v-model='user.description' textarea rows='3' :placeholder="$t('common.description')")
v-card-actions
v-btn(plain type="success" :disabled='disabled' @click='register') {{$t('common.send')}} <v-icon name='chevron-right'/>
</template>
<script>

View File

@@ -1,9 +1,9 @@
<template lang="pug">
el-main
v-container
.edit(v-if='$auth.user && $auth.user.is_admin')
Editor(v-if='$auth.user && $auth.user.is_admin'
v-model='about')
el-button.float-right(type='success' plain icon='el-icon-check'
v-btn.float-right(type='success' plain icon='el-icon-check'
@click='save') {{$t('common.save')}}
div(v-else v-html='about')
</template>

View File

@@ -1,52 +1,57 @@
<template lang="pug">
el-main#edit_page
h5.text-center {{edit?$t('common.edit_event'):$t('common.add_event')}}
el-form(v-loading='loading')
v-container
h2.text-center {{edit?$t('common.edit_event'):$t('common.add_event')}}
v-form
//- NOT LOGGED EVENT
div(v-if='!$auth.loggedIn')
el-divider <v-icon name='user-secret'/> {{$t('event.anon')}}
v-divider <v-icon name='user-secret'/> {{$t('event.anon')}}
p(v-html="$t('event.anon_description')")
//- title
span {{$t('event.what_description')}}
el-input.mb-3(v-model='event.title' ref='title' autofocus)
v-text-field.mb-3(v-model='event.title'
:label="$t('event.what_description')"
ref='title')
//- description
span {{$t('event.description_description')}}
Editor.mb-3(v-model='event.description' border no-save style='max-height: 400px;')
//- span {{$t('event.description_description')}}
//- Editor.mb-3(v-model='event.description' border no-save style='max-height: 400px;')
//- tags
div {{$t('event.tag_description')}}
client-only
el-select.mb-3(v-model='event.tags' multiple filterable
@input.native='queryTags=$event.target.value' @change='queryTags=""'
allow-create default-first-option placeholder='Tag')
el-option(v-for='tag in filteredTags' :key='tag.tag' :label='tag.tag' :value='tag.tag')
//- div {{$t('event.tag_description')}}
//- client-only
//- v-select.m b-3(v-model='event.tags' multiple filterable
//- @input.native='queryTags=$event.target.value' @change='queryTags=""'
//- allow-create default-first-option placeholder='Tag')
//- v-option(v-for='tag in filteredTags' :key='tag.tag' :label='tag.tag' :value='tag.tag')
//- WHERE
el-divider
i.el-icon-location-outline
span {{$t('common.where')}}
p(v-html="$t('event.where_description')")
el-autocomplete(v-model='event.place.name' @blur='selectPlace($event.target.value)'
highlight-first-item :fetch-suggestions='filterPlaces' @select='selectPlace')
//- v-divider
//- i.el-icon-location-outline
//- span {{$t('common.where')}}
//- p(v-html="$t('event.where_description')")
v-autocomplete(v-model='event.place.name'
:label="$t('common.where')"
:items="places"
item-text="name"
item-value="id"
@change='selectPlace')
div {{$t("common.address")}}
el-input.mb-3(ref='address' v-model='event.place.address' :disabled='disableAddress')
//- div {{$t("common.address")}}
v-text-field(ref='address' :label="$t('common.address')" v-model='event.place.address' :disabled='disableAddress')
//- WHEN
el-divider <v-icon name='clock'/> {{$t('common.when')}}
//- v-divider <v-icon name='clock'/> {{$t('common.when')}}
.text-center
el-radio-group(v-model="event.type")
el-radio-button(label="normal") <v-icon name='calendar-day'/> {{$t('event.normal')}}
el-radio-button(label="multidate") <v-icon name='calendar-week'/> {{$t('event.multidate')}}
el-radio-button(v-if='settings.allow_recurrent_event' label="recurrent") <v-icon name='calendar-alt'/> {{$t('event.recurrent')}}
v-btn-toggle(v-model="event.type")
v-btn(value='normal' label="normal") <v-icon name='calendar-day'/> {{$t('event.normal')}}
v-btn(value='multidate' label="multidate") <v-icon name='calendar-week'/> {{$t('event.multidate')}}
v-btn(v-if='settings.allow_recurrent_event' value='recurrent' label="recurrent") <v-icon name='calendar-alt'/> {{$t('event.recurrent')}}
br
span {{$t(`event.${event.type}_description`)}}
el-select.ml-2(v-if='event.type==="recurrent"' v-model='event.recurrent.frequency' placeholder='Frequenza')
el-option(:label="$t('event.each_week')" value='1w' key='1w')
el-option(:label="$t('event.each_2w')" value='2w' key='2w')
v-select.ml-2(v-if='event.type==="recurrent"' v-model='event.recurrent.frequency' placeholder='Frequenza')
v-option(:label="$t('event.each_week')" value='1w' key='1w')
v-option(:label="$t('event.each_2w')" value='2w' key='2w')
//- el-option(:label="$t('event.each_month')" value='1m' key='1m')
client-only
@@ -57,43 +62,40 @@
v-model='date'
:locale='$i18n.locale'
:from-page.sync='page'
is-dark
is-inline
is-expanded
:min-date='event.type !== "recurrent" && new Date()')
div.text-center.mb-2(v-if='event.type === "recurrent"')
span(v-if='event.recurrent.frequency !== "1m" && event.recurrent.frequency !== "2m"') {{whenPatterns}}
el-radio-group(v-else v-model='event.recurrent.type')
el-radio-button(v-for='whenPattern in whenPatterns' :label='whenPattern.key' :key='whenPatterns.key')
v-radio-group(v-else v-model='event.recurrent.type')
v-radio-button(v-for='whenPattern in whenPatterns' :label='whenPattern.key' :key='whenPatterns.key')
span {{whenPattern.label}}
.text-center
el-form-item(:label="$t('event.from')" width='100')
el-time-select.mr-2(ref='time_start'
v-model="time.start"
:picker-options="{ start: '00:00', step: '00:30', end: '24:00'}")
el-form-item(:label="$t('event.due')")
el-time-select(v-model='time.end'
:picker-options="{start: '00:00', step: '00:30', end: '24:00'}")
v-time-picker.mr-2(
:label="$t('event.from')"
ref='time_start'
v-model="time.start")
v-time-picker(v-model='time.end'
:label="$t('event.due')")
List(v-if='event.type==="normal" && todayEvents.length' :events='todayEvents' :title='$t("event.same_day")')
//- MEDIA / FLYER / POSTER
el-divider <v-icon name='image'/> {{$t('common.media')}}
div.mb-2 {{$t('event.media_description')}}
el-upload.text-center(
action=''
:limit="1"
:auto-upload='false'
drag
accept='image/*'
:on-remove='cleanFile'
:on-change='uploadedFile'
:multiple='false')
i.el-icon-upload
//- el-input(v-model='mediaUrl')
el-button.mt-2.float-right(@click='done' :disabled='!couldProceed') {{edit?$t('common.edit'):$t('common.send')}}
p {{JSON.stringify(event.image)}}
v-file-input(
:label="$t('common.media')"
:hint="$t('event.media_description')"
filled
prepend-icon="mdi-camera"
v-model='event.image'
persistent-hint
accept='image/*')
v-btn.mt-2.float-right(@click='done' :disabled='!couldProceed') {{edit?$t('common.edit'):$t('common.send')}}
</template>
<script>
@@ -156,7 +158,7 @@ export default {
title: '',
description: '',
tags: [],
image: false,
image: {},
recurrent: { frequency: '1w', days: [], type: 'weekday' }
},
page: { month, year },
@@ -264,10 +266,11 @@ export default {
.value()
},
couldProceed () {
return (this.event.place.name.length > 0 &&
this.event.place.address.length > 0 &&
(this.date && this.time.start) &&
this.event.title.length > 0)
return true
// return (this.event.place.name.length > 0 &&
// this.event.place.address.length > 0 &&
// (this.date && this.time.start) &&
// this.event.title.length > 0)
}
},
mounted () {
@@ -286,7 +289,8 @@ export default {
cb(ret)
},
selectPlace (p) {
const place = this.places.find(p => p.name === this.event.place.name)
console.error('sono dentro selectPlace ', p)
const place = this.places.find(place => place.id === p)
if (place && place.address) {
this.event.place.address = place.address
this.disableAddress = true
@@ -303,16 +307,19 @@ export default {
// },
// },
cleanFile () {
this.event.image = null
this.event.image = {}
},
uploadedFile (file, fileList) {
if (file.size / 1024 / 1024 > 4) {
Message({ type: 'warning', showClose: true, message: this.$tc('event.image_too_big') })
this.fileList = []
return false
}
this.fileList = [{ name: file.name, url: file.url }]
this.event.image = file
uploadedFile (files) {
// const file = files[0]
console.error('dentro uploadedfile', arguments)
// if (file.size / 1024 / 1024 > 4) {
// Message({ type: 'warning', showClose: true, message: this.$tc('event.image_too_big') })
// this.fileList = []
// return false
// }
// this.fileList = [{ name: file.name, url: file.url }]
// this.event.image = file
},
async done () {
this.loading = true
@@ -351,7 +358,7 @@ export default {
}
if (this.event.image) {
formData.append('image', this.event.image.raw, this.event.image.name)
formData.append('image', this.event.image[0])
}
formData.append('title', this.event.title)
formData.append('place_name', this.event.place.name)
@@ -396,7 +403,7 @@ export default {
}
</script>
<style style='less'>
#edit_page
/* #edit_page
i {
font-size: 1.3em;
}
@@ -416,6 +423,6 @@ export default {
margin: 0 auto;
max-width: 80%;
font-size: 2em;
}
} */
</style>

View File

@@ -1,51 +1,97 @@
<template lang="pug">
el-container#eventDetail.h-event
el-header
v-card#eventDetail.h-event.d-inline-block-mx-auto
v-toolbar(prominent)
v-list-item(two-line)
v-list-item-content
h2(v-text='event.title')
v-list-item-subtitle
time.dt-start(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")')
v-icon mdi-date
b {{event|when}}
small ({{event.start_datetime|from}})
v-list-item-subtitle
i.el-icon-location-outline
b.p-location {{event.place.name}}
span - {{event.place.address}}
.title {{event.title}}
v-spacer
v-btn.mr-1(nuxt :to='`/event/${event.prev}`' color='primary' icon :disabled='!event.prev')
v-icon mdi-arrow-left
v-btn(nuxt :to='`/event/${event.next}`' color='primary' :disabled='!event.next' icon)
v-icon mdi-arrow-right
//- h2 {{event.title}}
//- v-toolbar-subtitle
#arrow
nuxt-link.mr-1(:to='`/event/${event.prev}`')
el-button(circle plain size='small' icon='el-icon-arrow-left' :disabled='!event.prev')
nuxt-link(:to='`/event/${event.next}`')
el-button(circle plain size='small' :disabled='!event.next' icon='el-icon-arrow-right')
//- v-toolbar(prominent)
//- v-list-item
//- h3 {{event.title}}
//- v-row(justify='space-between')
v-col(cols='auto')
v-list-item(two-line)
v-list-item-content
v-list-item-title.headline(v-text='event.title')
v-list-item-subtitle
time.dt-start(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")')
v-icon mdi-date
b {{event|when}}
small ({{event.start_datetime|from}})
v-list-item-subtitle
i.el-icon-location-outline
b.p-location {{event.place.name}}
span - {{event.place.address}}
v-col
v-btn.mr-1(nuxt :to='`/event/${event.prev}`' color='primary' icon :disabled='!event.prev')
v-icon mdi-arrow-left
v-btn(nuxt :to='`/event/${event.next}`' color='primary' :disabled='!event.next' icon)
v-icon mdi-arrow-right
el-main
el-dialog.embedDialog(:visible.sync='showEmbed')
template(slot='extension')
h2 {{event.title}}
//- v-list-item
//- i.el-icon-location-outline
//- b.p-location {{event.place.name}}
//- span - {{event.place.address}}
//- v-spacer
//- v-chip.p-category.ml-1(v-for='tag in event.tags' :key='tag' small color='secondary') {{tag}}
v-card-text
v-dialog.embedDialog(:visible.sync='showEmbed')
h4(slot='title') {{$t('common.embed_title')}}
EmbedEvent(:event='event')
el-row
el-col.p-2(:sm='18' :xs="24")
//- v-row
v-col(sm="10")
//- event image
el-image.main_image.mb-3(:src='imgPath' v-if='event.image_path' fit='contain')
div.loading(slot='placeholder')
el-icon(name='loading')
//- event image
v-img.main_image.mb-3(
lazy
:src='imgPath'
:lazy-src='thumbImgPath'
v-if='event.image_path')
pre.p-description(v-html='event.description')
el-button.p-category.ml-1(type='text' plain round size='mini' v-for='tag in event.tags' :key='tag') {{tag}}
p.p-description(v-html='event.description')
v-btn.p-category.ml-1(type='text' plain round size='mini' v-for='tag in event.tags' :key='tag') {{tag}}
//- info & actions
el-col.menu(:sm='6' :xs='24')
el-menu.menu(router)
//- v-col
v-list
time.dt-start(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <i class='el-icon-date'></i> <b>{{event|when}}</b> <br/><small>{{event.start_datetime|from}}</small>
p
i.el-icon-location-outline
b.p-location {{event.place.name}}
span - {{event.place.address}}
el-divider {{$t('common.actions')}}
el-menu-item(
v-divider {{$t('common.actions')}}
v-list-item(
v-clipboard:success='copyLink'
v-clipboard:copy='`${settings.baseurl}/event/${event.id}`') <i class='el-icon-paperclip'></i> {{$t('common.copy_link')}}
el-menu-item(@click='showEmbed=true') <i class='el-icon-copy-document'></i> {{$t('common.embed')}}
v-list-item(@click='showEmbed=true') <i class='el-icon-copy-document'></i> {{$t('common.embed')}}
el-menu-item
v-list-item
a(:href='`${settings.baseurl}/api/event/${event.id}.ics`') <i class='el-icon-date'></i> {{$t('common.add_to_calendar')}}
EventAdmin(v-if='is_mine' :event='event')
hr
//- hr
//- resources from fediverse
#resources.mt-1(v-if='settings.enable_federation')
@@ -54,22 +100,22 @@
small {{event.boost.length}}<br/>
p.p-2
el-button(type='text' @click='showFollowMe=true') {{$t('event.interact_with_me')}}
v-btn(type='text' @click='showFollowMe=true') {{$t('event.interact_with_me')}}
span(v-if='settings.enable_resources && event.resources.length') - {{$tc('common.n_resources', event.resources.length)}}
el-dialog(:visible.sync='showFollowMe' destroy-on-close)
v-dialog(:visible.sync='showFollowMe' destroy-on-close)
h4(slot='title') {{$t('common.follow_me_title')}}
FollowMe
el-dialog.showResource#resourceDialog(:visible.sync='showResources' fullscreen
v-dialog.showResource#resourceDialog(:visible.sync='showResources' fullscreen
width='95vw'
destroy-on-close
@keydown.native.right='$refs.carousel.next()'
@keydown.native.left='$refs.carousel.prev()')
el-carousel(:interval='10000' ref='carousel' arrow='always')
el-carousel-item(v-for='attachment in selectedResource.data.attachment' :key='attachment.url')
el-image(:src='attachment.url')
el-card.mb-1(v-if='settings.enable_resources' v-for='resource in event.resources' :key='resource.id' :class='{disabled: resource.hidden}')
v-carousel(:interval='10000' ref='carousel' arrow='always')
v-carousel-item(v-for='attachment in selectedResource.data.attachment' :key='attachment.url')
v-img(:src='attachment.url')
v-card.mb-1(v-if='settings.enable_resources' v-for='resource in event.resources' :key='resource.id' :class='{disabled: resource.hidden}')
span
el-dropdown.mr-2(v-if='$auth.user && $auth.user.is_admin')
el-button(circle icon='el-icon-more' size='mini')
@@ -297,163 +343,162 @@ export default {
}
</script>
<style lang='less'>
#eventDetail {
time {
margin: 0rem 0rem 0rem 1rem;
display: inline-block;
}
// #eventDetail {
// time {
// margin: 0rem 0rem 0rem 1rem;
// display: inline-block;
// }
#arrow {
position: absolute;
top: 1em;
right: 1em;
}
// #arrow {
// position: absolute;
// top: 1em;
// right: 1em;
// }
.el-header {
height: auto !important;
position: sticky;
padding-top: .4em;
top: 0px;
border-bottom: 1px solid lightgray;
z-index: 1;
overflow: hidden;
}
// .el-header {
// height: auto !important;
// position: sticky;
// padding-top: .4em;
// top: 0px;
// border-bottom: 1px solid lightgray;
// z-index: 1;
// overflow: hidden;
// }
.embedDialog {
.el-dialog {
min-height: 500px;
max-width: 1000px;
width: 100%;
}
}
// .embedDialog {
// .el-dialog {
// min-height: 500px;
// max-width: 1000px;
// width: 100%;
// }
// }
.followDialog {
.el-dialog {
min-height: 300px;
max-width: 600px;
width: 100%;
.el-dialog__body {
word-break: normal !important;
}
}
}
// .followDialog {
// .el-dialog {
// min-height: 300px;
// max-width: 600px;
// width: 100%;
// .el-dialog__body {
// word-break: normal !important;
// }
// }
// }
.head {
z-index: 1;
position: sticky;
top: 0px;
padding-top: 10px;
padding-bottom: 10px;
background-color: white;
border-bottom: 1px solid #e6e6e6;
}
// .head {
// z-index: 1;
// position: sticky;
// top: 0px;
// padding-top: 10px;
// padding-bottom: 10px;
// background-color: white;
// border-bottom: 1px solid #e6e6e6;
// }
.menu {
border-right: none;
background-color: transparent;
}
// .menu {
// border-right: none;
// background-color: transparent;
// }
div.menu {
border-left: 1px solid #e6e6e6;
p {
margin: 1rem 0rem 1rem 1rem;
}
}
// div.menu {
// border-left: 1px solid #e6e6e6;
// p {
// margin: 1rem 0rem 1rem 1rem;
// }
// }
.title {
display: table-cell;
padding-right: 70px;
height: 2.1em;
font-size: 1.6rem;
color: #404246;
line-height: 1;
vertical-align: middle;
}
// .title {
// display: table-cell;
// padding-right: 70px;
// height: 2.1em;
// font-size: 1.6rem;
// color: #404246;
// line-height: 1;
// vertical-align: middle;
// }
pre {
white-space: pre-line;
word-break: break-word;
color: #404246;
font-size: 1em;
font-family: inherit;
// pre {
// white-space: pre-line;
// word-break: break-word;
// font-size: 1em;
// font-family: inherit;
p:empty {
min-height: 1em;
}
// font-family: BlinkMacSystemFont, -apple-system, Segoe UI, Roboto, Oxygen,
// Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial,
// sans-serif !important;
}
// p:empty {
// min-height: 1em;
// }
// // font-family: BlinkMacSystemFont, -apple-system, Segoe UI, Roboto, Oxygen,
// // Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial,
// // sans-serif !important;
// }
.main_image {
width: 100%;
transition: height .100s;
height: auto;
// .main_image {
// width: 100%;
// transition: height .100s;
// height: auto;
img {
// object-fit: contain;
margin: 0 auto;
max-height: 88vh;
}
// img {
// // object-fit: contain;
// margin: 0 auto;
// max-height: 88vh;
// }
.loading {
display: flex;
justify-content: center;
align-items: center;
font-size: 30px;
margin: 0 auto;
height: 100px;
}
}
// .loading {
// display: flex;
// justify-content: center;
// align-items: center;
// font-size: 30px;
// margin: 0 auto;
// height: 100px;
// }
// }
#resources {
img {
max-width: 100%;
}
.card-header {
border-left: 3px solid transparent;
}
.card-header:hover {
border-left: 3px solid #888;
}
.invisible {
visibility: visible !important;
}
.disabled {
opacity: 0.5;
}
.previewImage {
display: flex;
flex-flow: wrap;
justify-content: space-evenly;
img {
margin-left: 5px;
margin-top: 5px;
object-fit: cover;
min-height: 100px;
max-width: 45%;
border-radius: 5px;
border: 1px solid #ccc;
}
}
}
.nextprev {
font-size: 10px;
margin-bottom: 5px;
}
}
// #resources {
// img {
// max-width: 100%;
// }
// .card-header {
// border-left: 3px solid transparent;
// }
// .card-header:hover {
// border-left: 3px solid #888;
// }
// .invisible {
// visibility: visible !important;
// }
// .disabled {
// opacity: 0.5;
// }
// .previewImage {
// display: flex;
// flex-flow: wrap;
// justify-content: space-evenly;
// img {
// margin-left: 5px;
// margin-top: 5px;
// object-fit: cover;
// min-height: 100px;
// max-width: 45%;
// border-radius: 5px;
// border: 1px solid #ccc;
// }
// }
// }
// .nextprev {
// font-size: 10px;
// margin-bottom: 5px;
// }
// }
@media only screen and (max-width: 768px) {
#eventDetail {
.menu {
border: 0px !important;
}
// @media only screen and (max-width: 768px) {
// #eventDetail {
// .menu {
// border: 0px !important;
// }
.title {
// font-size: 1.1em;
line-height: 1.4em;
color: black;
}
}
}
// .title {
// // font-size: 1.1em;
// line-height: 1.4em;
// color: black;
// }
// }
// }
</style>

View File

@@ -1,23 +1,23 @@
<template lang='pug'>
div
el-divider {{$t('common.admin')}}
v-divider {{$t('common.admin')}}
el-menu.menu
el-menu-item
v-menu.menu
v-menu-item
div(v-if='event.is_visible' @click='toggle(false)') <i class='el-icon-open'/> {{$t(`common.${event.parentId?'skip':'hide'}`)}}
div(v-else @click='toggle(false)') <i class='el-icon-turn-off'/> {{$t('common.confirm')}}
el-menu-item(@click='$router.push(`/add/${event.id}`)') <i class='el-icon-edit'/> {{$t('common.edit')}}
el-menu-item(v-if='!event.parentId' @click='remove(false)') <i class='el-icon-delete'/> {{$t('common.remove')}}
v-menu-item(@click='$router.push(`/add/${event.id}`)') <i class='el-icon-edit'/> {{$t('common.edit')}}
v-menu-item(v-if='!event.parentId' @click='remove(false)') <i class='el-icon-delete'/> {{$t('common.remove')}}
template(v-if='event.parentId')
el-divider {{$t('event.recurrent')}}
v-divider {{$t('event.recurrent')}}
p.text-secondary
i.el-icon-refresh
small {{event|recurrentDetail}}<br/>
el-menu-item(v-if='event.parent.is_visible' @click='toggle(true)') <i class='el-icon-video-pause'/> {{$t('common.pause')}}
el-menu-item(v-else @click='toggle(true)') <i class='el-icon-video-play'/> {{$t('common.start')}}
el-menu-item(@click='$router.push(`/add/${event.parentId}`)') <i class='el-icon-edit'/> {{$t('common.edit')}}
el-menu-item(@click='remove(true)') <i class='el-icon-delete'/> {{$t('common.remove')}}
v-menu-item(v-if='event.parent.is_visible' @click='toggle(true)') <i class='el-icon-video-pause'/> {{$t('common.pause')}}
v-menu-item(v-else @click='toggle(true)') <i class='el-icon-video-play'/> {{$t('common.start')}}
v-menu-item(@click='$router.push(`/add/${event.parentId}`)') <i class='el-icon-edit'/> {{$t('common.edit')}}
v-menu-item(@click='remove(true)') <i class='el-icon-delete'/> {{$t('common.remove')}}
</template>
<script>
import { MessageBox } from 'element-ui'

View File

@@ -1,11 +1,12 @@
<template lang="pug">
el-main
v-container
p {{$t('export.intro')}}
//- Search
el-tabs.mt-2(v-model='type')
v-tabs(v-model='type')
//- TOFIX
//- el-tab-pane.pt-1(label='email' name='email')
//- v-tab.pt-1(label='email' name='email')
//- v-tab-item
//- p(v-html='$t(`export.email_description`)')
//- el-form(@submit.native.prevent)
//- //- el-switch(v-model='notification.notify_on_add' :active-text="$t('notify_on_insert')")
@@ -14,42 +15,45 @@
//- el-input.mt-2(v-model='notification.email' :placeholder="$t('export.insert_your_address')" ref='email')
//- el-button.mt-2.float-right(native-type= 'submit' type='success' @click='add_notification') {{$t('common.send')}}
el-tab-pane.pt-1(label='Feed rss' name='rss')
v-tab {{$t('common.feed')}}
v-tab-item
span(v-html='$t(`export.feed_description`)')
el-input(v-model='link')
el-button(slot='append' plain
v-clipboard:copy='link' v-clipboard:success='copyLink'
type="primary" icon='el-icon-document' ) {{$t("common.copy")}}
v-text-field(v-model='link' readonly)
v-btn(slot='append' plain text
v-clipboard:copy='link'
v-clipboard:success='copyLink') {{$t("common.copy")}}
el-tab-pane.pt-1(v-if='settings.enable_federation' :label="$t('common.fediverse')" name='fediverse')
v-tab(v-if='settings.enable_federation') {{$t('common.fediverse')}}
v-tab-item
FollowMe
el-tab-pane.pt-1(label='ics/ical' name='ics')
v-tab ics/ical
v-tab-item
p(v-html='$t(`export.ical_description`)')
el-input(v-model='link')
el-button(slot='append' v-clipboard:copy='link' v-clipboard:success='copyLink'
plain type="primary" icon='el-icon-document') {{$t("common.copy")}}
v-text-field(v-model='link')
v-btn(slot='append' v-clipboard:copy='link' v-clipboard:success='copyLink') {{$t("common.copy")}}
el-tab-pane.pt-1(label='list' name='list')
v-tab List
v-tab-item
p(v-html='$t(`export.list_description`)')
el-row
el-col.mr-2(:span='11')
el-input(v-model='list.title') Title
el-col.float-right(:span='12')
v-row
v-col.mr-2(:span='11')
v-text-field(v-model='list.title') Title
v-col.float-right(:span='12')
List(
:title='list.title'
:events='filteredEvents')
el-input.mb-1(type='textarea' v-model='listScript' readonly )
el-button.float-right(plain v-clipboard:copy='listScript' v-clipboard:success='copyLink'
type='primary' icon='el-icon-document') {{$t('common.copy')}}
v-text-field.mb-1(type='textarea' v-model='listScript' readonly )
v-btn(plain v-clipboard:copy='listScript' v-clipboard:success='copyLink') {{$t('common.copy')}}
//- TOFIX
//- el-tab-pane.pt-1(label='calendar' name='calendar')
//- v-tab.pt-1(label='calendar' name='calendar')
//- v-tab-item
//- p(v-html='$t(`export.calendar_description`)')
//- //- no-ssr
//- Calendar.mb-1
//- el-input.mb-1(type='textarea' v-model='script')
//- v-text-field.mb-1(type='textarea' v-model='script')
//- el-button.float-right(plain type="primary" icon='el-icon-document') Copy
</template>
@@ -57,7 +61,6 @@
import { mapState, mapGetters } from 'vuex'
import List from '@/components/List'
import FollowMe from '../components/FollowMe'
import { Message } from 'element-ui'
export default {
name: 'Exports',
@@ -120,16 +123,17 @@ export default {
},
methods: {
copyLink () {
Message({ message: this.$t('common.copied'), type: 'success', showClose: true })
// Message({ message: this.$t('common.copied'), type: 'success', showClose: true })
this.$root.$emit('message', { message: this.$t('common.feed_url_copied') })
},
add_notification () {
if (!this.notification.email) {
Message({ message: 'Inserisci una mail', showClose: true, type: 'error' })
// Message({ message: 'Inserisci una mail', showClose: true, type: 'error' })
// return this.$refs.email.focus()
}
// await api.addNotification({ ...this.notification, filters: this.filters})
// this.$refs.modal.hide()
Message({ message: this.$t('email_notification_activated'), showClose: true, type: 'success' })
// Message({ message: this.$t('email_notification_activated'), showClose: true, type: 'success' })
},
imgPath (event) {
return event.image_path && event.image_path
@@ -142,9 +146,3 @@ export default {
}
}
</script>
<style>
#list {
max-height: 400px;
overflow-y: auto;
}
</style>

View File

@@ -1,68 +0,0 @@
import Vue from 'vue'
import {
Button, Select, Tag, Option, Table, FormItem, Card, Row, Col, Upload, Checkbox, RadioButton, RadioGroup,
Form, Tabs, TabPane, Switch, Input, Loading, TimeSelect, Badge, ButtonGroup, Divider, Step, Steps, Radio, Main,
TableColumn, ColorPicker, Pagination, Popover, Tooltip, Dialog, Image, Backtop, Collapse, CollapseItem, Link,
Dropdown, DropdownMenu, DropdownItem, Submenu, PageHeader, Header, Icon, Alert, Autocomplete,
Container, Footer, Timeline, TimelineItem, Menu, MenuItem, Carousel, CarouselItem
} from 'element-ui'
import locale from 'element-ui/lib/locale'
export default ({ app, store }) => {
locale.use(require(`element-ui/lib/locale/lang/${store.state.locale}`))
Vue.use(Button)
Vue.use(Carousel)
Vue.use(CarouselItem)
Vue.use(Autocomplete)
Vue.use(Alert)
Vue.use(Icon)
Vue.use(Dropdown)
Vue.use(Header)
Vue.use(PageHeader)
Vue.use(Submenu)
Vue.use(DropdownItem)
Vue.use(DropdownMenu)
Vue.use(Main)
Vue.use(Link)
Vue.use(RadioButton)
Vue.use(RadioGroup)
Vue.use(Radio)
Vue.use(Collapse)
Vue.use(CollapseItem)
Vue.use(Backtop)
Vue.use(Divider)
Vue.use(Image)
Vue.use(Step)
Vue.use(Steps)
Vue.use(Checkbox)
Vue.use(Upload)
Vue.use(ButtonGroup)
Vue.use(Row)
Vue.use(Col)
Vue.use(Badge)
Vue.use(Dialog)
Vue.use(Menu)
Vue.use(MenuItem)
Vue.use(Container)
Vue.use(Timeline)
Vue.use(TimelineItem)
Vue.use(Footer)
Vue.use(Tooltip)
Vue.use(Popover)
Vue.use(Card)
Vue.use(Select)
Vue.use(Tag)
Vue.use(Input)
Vue.use(Tabs)
Vue.use(TabPane)
Vue.use(Option)
Vue.use(Switch)
Vue.use(ColorPicker)
Vue.use(Table)
Vue.use(TableColumn)
Vue.use(Pagination)
Vue.use(FormItem)
Vue.use(Form)
Vue.use(TimeSelect)
Vue.use(Loading.directive)
}

View File

@@ -1,59 +0,0 @@
import Vue from 'vue'
// https://fontawesome.com/icons?d=gallery
//
import 'vue-awesome/icons/lock'
import 'vue-awesome/icons/user'
import 'vue-awesome/icons/plus'
import 'vue-awesome/icons/cog'
import 'vue-awesome/icons/tools'
import 'vue-awesome/icons/file-export'
import 'vue-awesome/icons/sign-out-alt'
import 'vue-awesome/icons/clock'
import 'vue-awesome/icons/map-marker-alt'
import 'vue-awesome/icons/file-alt'
import 'vue-awesome/icons/image'
import 'vue-awesome/icons/tag'
import 'vue-awesome/icons/users'
import 'vue-awesome/icons/calendar'
import 'vue-awesome/icons/edit'
import 'vue-awesome/icons/envelope-open-text'
import 'vue-awesome/icons/user-secret'
import 'vue-awesome/icons/question-circle'
import 'vue-awesome/icons/share'
import 'vue-awesome/icons/comment'
import 'vue-awesome/icons/comments'
import 'vue-awesome/icons/tags'
import 'vue-awesome/icons/chevron-right'
import 'vue-awesome/icons/chevron-left'
import 'vue-awesome/icons/search'
import 'vue-awesome/icons/times'
import 'vue-awesome/icons/envelope'
import 'vue-awesome/icons/calendar-day'
import 'vue-awesome/icons/calendar-week'
import 'vue-awesome/icons/calendar-alt'
import 'vue-awesome/icons/network-wired'
import 'vue-awesome/icons/rss'
import 'vue-awesome/icons/bold'
import 'vue-awesome/icons/italic'
import 'vue-awesome/icons/strikethrough'
import 'vue-awesome/icons/quote-right'
import 'vue-awesome/icons/underline'
import 'vue-awesome/icons/code'
import 'vue-awesome/icons/paragraph'
import 'vue-awesome/icons/list-ul'
import 'vue-awesome/icons/list-ol'
import 'vue-awesome/icons/heading'
import 'vue-awesome/icons/link'
import 'vue-awesome/icons/hands-helping'
import 'vue-awesome/icons/question'
import 'vue-awesome/icons/vector-square'
import 'vue-awesome/icons/bullhorn'
import Icon from 'vue-awesome/components/Icon'
import VueClipboard from 'vue-clipboard2'
export default () => {
Vue.component('v-icon', Icon)
Vue.use(VueClipboard)
}

59
plugins/vue-clipboard.js Normal file
View File

@@ -0,0 +1,59 @@
import Vue from 'vue'
// https://fontawesome.com/icons?d=gallery
// //
// import 'vue-awesome/icons/lock'
// import 'vue-awesome/icons/user'
// import 'vue-awesome/icons/plus'
// import 'vue-awesome/icons/cog'
// import 'vue-awesome/icons/tools'
// import 'vue-awesome/icons/file-export'
// import 'vue-awesome/icons/sign-out-alt'
// import 'vue-awesome/icons/clock'
// import 'vue-awesome/icons/map-marker-alt'
// import 'vue-awesome/icons/file-alt'
// import 'vue-awesome/icons/image'
// import 'vue-awesome/icons/tag'
// import 'vue-awesome/icons/users'
// import 'vue-awesome/icons/calendar'
// import 'vue-awesome/icons/edit'
// import 'vue-awesome/icons/envelope-open-text'
// import 'vue-awesome/icons/user-secret'
// import 'vue-awesome/icons/question-circle'
// import 'vue-awesome/icons/share'
// import 'vue-awesome/icons/comment'
// import 'vue-awesome/icons/comments'
// import 'vue-awesome/icons/tags'
// import 'vue-awesome/icons/chevron-right'
// import 'vue-awesome/icons/chevron-left'
// import 'vue-awesome/icons/search'
// import 'vue-awesome/icons/times'
// import 'vue-awesome/icons/envelope'
// import 'vue-awesome/icons/calendar-day'
// import 'vue-awesome/icons/calendar-week'
// import 'vue-awesome/icons/calendar-alt'
// import 'vue-awesome/icons/network-wired'
// import 'vue-awesome/icons/rss'
// import 'vue-awesome/icons/bold'
// import 'vue-awesome/icons/italic'
// import 'vue-awesome/icons/strikethrough'
// import 'vue-awesome/icons/quote-right'
// import 'vue-awesome/icons/underline'
// import 'vue-awesome/icons/code'
// import 'vue-awesome/icons/paragraph'
// import 'vue-awesome/icons/list-ul'
// import 'vue-awesome/icons/list-ol'
// import 'vue-awesome/icons/heading'
// import 'vue-awesome/icons/link'
// import 'vue-awesome/icons/hands-helping'
// import 'vue-awesome/icons/question'
// import 'vue-awesome/icons/vector-square'
// import 'vue-awesome/icons/bullhorn'
// import Icon from 'vue-awesome/components/Icon'
import VueClipboard from 'vue-clipboard2'
export default () => {
// Vue.component('v-icon', Icon)
Vue.use(VueClipboard)
}

View File

@@ -92,11 +92,11 @@ const settingsController = {
where: { key },
defaults: { value, is_secret }
})
if (!created) { setting.update({ value, is_secret }) }
settingsController[is_secret ? 'secretSettings' : 'settings'][key] = value
return true
} catch (e) {
debug(e)
return false
}
},

14
vuetify.options.js Normal file
View File

@@ -0,0 +1,14 @@
// vuetify.options.js
export default {
theme: {
dark: true,
themes: {
dark: {
primary: '#FF4500'
},
light: {
primary: '#FF4500'
}
}
}
}

384
yarn.lock
View File

@@ -892,14 +892,6 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
"@babel/runtime-corejs3@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.4.tgz#f29fc1990307c4c57b10dbd6ce667b27159d9e0d"
integrity sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw==
dependencies:
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99"
@@ -1377,7 +1369,18 @@
lodash "^4.17.15"
nanoid "^2.1.11"
"@nuxtjs/axios@^5.11.0", "@nuxtjs/axios@^5.9.5":
"@nuxtjs/axios@^5.12.0":
version "5.12.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.12.0.tgz#50692340e64ec838f167d292d59b1cc2a0e2dbef"
integrity sha512-VQI9Nnf12jWknldrgCNGzCQxnWO3/CvMwrkWKNUr3WtGYuOKryUOd1XXxDbaJmopfX4SGjKvDL1G6qTkWLiPew==
dependencies:
"@nuxtjs/proxy" "^2.0.0"
axios "^0.19.2"
axios-retry "^3.1.8"
consola "^2.14.0"
defu "^2.0.4"
"@nuxtjs/axios@^5.9.5":
version "5.11.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.11.0.tgz#27d7297a69e11c39039b9cacac61e2e0d0e00f1f"
integrity sha512-6M87KUXWWlAjRIwqBTXoollTwsUDnf8bdOR3qY1cVggvUP4hYgb2Oby7/Jr0u7bWGyb+/GuagwBBtubGTLsoyA==
@@ -1410,6 +1413,18 @@
consola "^2.11.3"
http-proxy-middleware "^1.0.4"
"@nuxtjs/vuetify@^1.11.2":
version "1.11.2"
resolved "https://registry.yarnpkg.com/@nuxtjs/vuetify/-/vuetify-1.11.2.tgz#fefa861d98c021e10dd579a5b91b34b3fb49dc99"
integrity sha512-8+k/PQG37OAoXvXgKE+BkBQXaoBCz9odK8oPYA4lwmxQ0ekHnh4PFrU/6Fr+OeVHbQbynbuMZnkF9aWxDsTqug==
dependencies:
deepmerge "^4.2.2"
fibers "^4.0.3"
sass "^1.26.5"
sass-loader "^8.0.2"
vuetify "^2"
vuetify-loader "^1.4.3"
"@nuxtjs/youch@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@nuxtjs/youch/-/youch-4.2.3.tgz#36f8b22df5a0efaa81373109851e1d857aca6bed"
@@ -1862,7 +1877,7 @@ acorn@^6.4.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.1.1, acorn@^7.2.0:
acorn@^7.1.1, acorn@^7.3.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
@@ -2925,6 +2940,21 @@ cheerio@^0.22.0:
lodash.reject "^4.4.0"
lodash.some "^4.4.0"
"chokidar@>=2.0.0 <4.0.0":
version "3.4.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1"
integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==
dependencies:
anymatch "~3.1.1"
braces "~3.0.2"
glob-parent "~5.1.0"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.4.0"
optionalDependencies:
fsevents "~2.1.2"
chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -3093,6 +3123,15 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
dependencies:
is-plain-object "^2.0.4"
kind-of "^6.0.2"
shallow-clone "^3.0.0"
clone-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
@@ -3398,16 +3437,16 @@ core-js-compat@^3.6.2:
browserslist "^4.8.5"
semver "7.0.0"
core-js-pure@^3.0.0:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
core-js@^2.4.0, core-js@^2.6.5:
version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
core-js@^3.4.4:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -3783,7 +3822,12 @@ datauri@^2.0.0:
image-size "^0.7.3"
mimer "^1.0.0"
date-fns@^2.14.0, date-fns@^2.6.0:
date-fns@^2.15.0:
version "2.15.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f"
integrity sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==
date-fns@^2.6.0:
version "2.14.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba"
integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==
@@ -3793,10 +3837,10 @@ dayjs@^1.8.16:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.28.tgz#37aa6201df483d089645cb6c8f6cef6f0c4dbc07"
integrity sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg==
dayjs@^1.8.29:
version "1.8.29"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.29.tgz#5d23e341de6bfbd206c01136d2fb0f01877820f5"
integrity sha512-Vm6teig8ZWK7rH/lxzVGxZJCljPdmUr6q/3f4fr5F0VWNGVkZEjZOQJsAN8hUHUqn+NK4XHNEpJZS1MwLyDcLw==
dayjs@^1.8.30:
version "1.8.30"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.30.tgz#d3b314d3ccdc179015d915fd3c6e14422c026378"
integrity sha512-5s5IGuP5bVvIbOWkEDcfmXsUj24fZW1NMHVVSdSFF/kW8d+alZcI9SpBKC+baEyBe+z3fUp17y75ulstv5swUw==
de-indent@^1.0.2:
version "1.0.2"
@@ -3836,13 +3880,6 @@ decamelize@^1.0.0, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decamelize@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851"
integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==
dependencies:
xregexp "^4.2.4"
decimal.js@^10.2.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231"
@@ -4251,10 +4288,10 @@ elliptic@^6.0.0, elliptic@^6.5.2:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
email-templates@^7.0.5:
version "7.0.5"
resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.0.5.tgz#0b31918d97edca2b6ae6526ddf9eedfb7ff000c4"
integrity sha512-fkq/J7gW/+IU1PIl2R2udGaLYrTz7LKCpFkfCEYIzYRHP7e8LYfFYY1+kw/7YEPEvkizBEHEDIl+o3QJddBUug==
email-templates@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.1.0.tgz#d10dad8ae673e06eaf1bdff2c179ae39dc31ae82"
integrity sha512-cO+6RgrFk1CPqm1y8UbSRyjZ4mrtk3FleT7IR7l82EbXfwnP2qSo94KDIeacklR4+oFktep2Z6ulkUp5Cf+UNw==
dependencies:
"@ladjs/i18n" "^3.0.10"
"@sindresorhus/is" "^2.1.1"
@@ -4543,7 +4580,7 @@ eslint-plugin-import@^2.22.0:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
eslint-plugin-jest@^23.10.0, eslint-plugin-jest@^23.17.1:
eslint-plugin-jest@^23.10.0:
version "23.17.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.17.1.tgz#c0f39ba78e0f33b7ee1ce4ec92b773e39026ea3f"
integrity sha512-/o36fw67qNbJGWbSBIBMfseMsNP/d88WUHAGHCi1xFwsNB3XXZGdvxbOw49j3iQz6MCW/yw8OeOsuQhi6mM5ZA==
@@ -4640,22 +4677,22 @@ eslint-template-visitor@^1.1.0:
espree "^6.1.1"
multimap "^1.0.2"
eslint-utils@^2.0.0:
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0:
eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint@^7.4.0:
version "7.4.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f"
integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g==
eslint@^7.5.0:
version "7.5.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.5.0.tgz#9ecbfad62216d223b82ac9ffea7ef3444671d135"
integrity sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
@@ -4665,9 +4702,9 @@ eslint@^7.4.0:
doctrine "^3.0.0"
enquirer "^2.3.5"
eslint-scope "^5.1.0"
eslint-utils "^2.0.0"
eslint-visitor-keys "^1.2.0"
espree "^7.1.0"
eslint-utils "^2.1.0"
eslint-visitor-keys "^1.3.0"
espree "^7.2.0"
esquery "^1.2.0"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
@@ -4681,7 +4718,7 @@ eslint@^7.4.0:
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash "^4.17.14"
lodash "^4.17.19"
minimatch "^3.0.4"
natural-compare "^1.4.0"
optionator "^0.9.1"
@@ -4708,14 +4745,14 @@ espree@^6.1.1, espree@^6.2.1:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
espree@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c"
integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==
espree@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==
dependencies:
acorn "^7.2.0"
acorn "^7.3.1"
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.2.0"
eslint-visitor-keys "^1.3.0"
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
@@ -5000,6 +5037,13 @@ fault@^1.0.0:
dependencies:
format "^0.2.0"
fibers@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fibers/-/fibers-4.0.3.tgz#dda5918280a48507f5d8a96dd9a525e8f4a532e2"
integrity sha512-MW5VrDtTOLpKK7lzw4qD7Z9tXaAhdOmOED5RHzg3+HjUk+ibkjVW0Py2ERtdqgTXaerLkVkBy2AEmJiT6RMyzg==
dependencies:
detect-libc "^1.0.3"
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -5019,7 +5063,7 @@ file-entry-cache@^5.0.1:
dependencies:
flat-cache "^2.0.1"
file-loader@^4.3.0:
file-loader@^4.0.0, file-loader@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af"
integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==
@@ -5439,7 +5483,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0:
dependencies:
is-glob "^4.0.1"
glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -6135,10 +6179,10 @@ inquirer@^7.2.0:
strip-ansi "^6.0.0"
through "^2.3.6"
inquirer@^7.3.0:
version "7.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.0.tgz#aa3e7cb0c18a410c3c16cdd2bc9dcbe83c4d333e"
integrity sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==
inquirer@^7.3.3:
version "7.3.3"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
dependencies:
ansi-escapes "^4.2.1"
chalk "^4.1.0"
@@ -6146,7 +6190,7 @@ inquirer@^7.3.0:
cli-width "^3.0.0"
external-editor "^3.0.3"
figures "^3.0.0"
lodash "^4.17.15"
lodash "^4.17.19"
mute-stream "0.0.8"
run-async "^2.4.0"
rxjs "^6.6.0"
@@ -6154,7 +6198,7 @@ inquirer@^7.3.0:
strip-ansi "^6.0.0"
through "^2.3.6"
interpret@^1.4.0:
interpret@^1.0.0, interpret@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
@@ -6649,10 +6693,10 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdom@^16.2.2:
version "16.2.2"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b"
integrity sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg==
jsdom@^16.3.0:
version "16.3.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c"
integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==
dependencies:
abab "^2.0.3"
acorn "^7.1.1"
@@ -6674,7 +6718,7 @@ jsdom@^16.2.2:
tough-cookie "^3.0.1"
w3c-hr-time "^1.0.2"
w3c-xmlserializer "^2.0.0"
webidl-conversions "^6.0.0"
webidl-conversions "^6.1.0"
whatwg-encoding "^1.0.5"
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
@@ -6846,6 +6890,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klona@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/klona/-/klona-1.1.2.tgz#a79e292518a5a5412ec8d097964bff1571a64db0"
integrity sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==
last-call-webpack-plugin@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
@@ -6908,6 +6957,21 @@ less@^3.11.3:
request "^2.83.0"
source-map "~0.6.0"
less@^3.12.2:
version "3.12.2"
resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4"
integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==
dependencies:
tslib "^1.10.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
native-request "^1.0.5"
source-map "~0.6.0"
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@@ -7002,7 +7066,7 @@ loader-runner@^2.3.1, loader-runner@^2.4.0:
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
@@ -7799,7 +7863,7 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
nanoid@^2.1.11, nanoid@^2.1.6:
nanoid@^2.1.11:
version "2.1.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==
@@ -7831,6 +7895,11 @@ napi-build-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
native-request@^1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.7.tgz#ff742dc555b4c8f2f1c14b548639ba174e573856"
integrity sha512-9nRjinI9bmz+S7dgNtf4A70+/vPhnd+2krGpy4SUlADuOuSa24IDkNaZ+R/QT1wQ6S8jBdi6wE7fLekFZNfUpQ==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -8158,6 +8227,14 @@ nth-check@^1.0.2, nth-check@~1.0.1:
dependencies:
boolbase "~1.0.0"
null-loader@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245"
integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==
dependencies:
loader-utils "^1.2.3"
schema-utils "^1.0.0"
num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
@@ -8701,10 +8778,10 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pg-connection-string@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.2.3.tgz#48e1158ec37eaa82e98dbcb7307103ec303fe0e7"
integrity sha512-I/KCSQGmOrZx6sMHXkOs2MjddrYcqpza3Dtsy0AjIgBr/bZiPJRK9WhABXN1Uy1UDazRbi9gZEzO2sAhL5EqiQ==
pg-connection-string@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6"
integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w==
pg-int8@1.0.1:
version "1.0.1"
@@ -8732,14 +8809,14 @@ pg-types@^2.1.0:
postgres-date "~1.0.4"
postgres-interval "^1.1.0"
pg@^8.2.2:
version "8.2.2"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.2.2.tgz#a8c2bbe1f20e67b11333a672b3bc2135338fd7e4"
integrity sha512-Uni50U0W2CNPM68+zfC/1WWjSO3q/uBSF/Nl7D+1npZGsPSM4/EZt0xSMW2jox1Bn0EfDlnTWnTsM/TrSOtBEA==
pg@^8.3.0:
version "8.3.0"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.3.0.tgz#941383300d38eef51ecb88a0188cec441ab64d81"
integrity sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ==
dependencies:
buffer-writer "2.0.0"
packet-reader "1.0.0"
pg-connection-string "^2.2.3"
pg-connection-string "^2.3.0"
pg-pool "^3.2.1"
pg-protocol "^1.2.5"
pg-types "^2.1.0"
@@ -9726,10 +9803,10 @@ prosemirror-keymap@1.1.4, prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2:
prosemirror-state "^1.0.0"
w3c-keyname "^2.2.0"
prosemirror-model@1.10.0, prosemirror-model@1.9.1, prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.10.0, prosemirror-model@^1.8.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.9.1.tgz#8c08cf556f593c5f015548d2c1a6825661df087f"
integrity sha512-Qblh8pm1c7Ll64sYLauwwzjimo/tFg1zW3Q3IWhKRhvfOEgRKqa6dC5pRrAa+XHOIjBFEYrqbi52J5bqA2dV8Q==
prosemirror-model@1.10.0, prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.10.0, prosemirror-model@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.10.0.tgz#bb1101732bccacf336e23a36a8b045b865025fa2"
integrity sha512-xTMbbO2q4abs5lJdeRvk/SrftNfZlMdvChKziTiK+OKtP8LkQI8uw39u4S5zqyflrmW3Or6+qnyFPf1p4v2u1g==
dependencies:
orderedmap "^1.1.0"
@@ -10173,6 +10250,13 @@ readdirp@~3.4.0:
dependencies:
picomatch "^2.2.1"
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
dependencies:
resolve "^1.1.6"
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -10552,6 +10636,35 @@ safe-regex@^2.1.1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass-loader@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d"
integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==
dependencies:
clone-deep "^4.0.1"
loader-utils "^1.2.3"
neo-async "^2.6.1"
schema-utils "^2.6.1"
semver "^6.3.0"
sass-loader@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-9.0.2.tgz#847c9b4c95328ddc8c7d35cf28c9d6e54e59a90b"
integrity sha512-nphcum3jNI442njnrZ5wJgSNX5lfEOHOKHCLf+PrTIaleploKqAMUuT9CVKjf+lyi6c2MCGPHh1vb9nGsjnZJA==
dependencies:
klona "^1.1.1"
loader-utils "^2.0.0"
neo-async "^2.6.1"
schema-utils "^2.7.0"
semver "^7.3.2"
sass@^1.19.0, sass@^1.26.5:
version "1.26.10"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760"
integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==
dependencies:
chokidar ">=2.0.0 <4.0.0"
sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -10614,7 +10727,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.1.3, semver@^7.2.1, semver@^7.3.2:
semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
@@ -10661,10 +10774,10 @@ sequelize-pool@^6.0.0:
resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-6.0.0.tgz#2b2f6570fb633ecb38a338c4fc266c0e42ce2af7"
integrity sha512-D/VfOX2Z+6JTWqM73lhcqMXp1X4CeqRNVMlndvbOMtyjFAZ2kYzH7rGFGFrLO1r+RZQdc/h+3zQL4nd3cclNLg==
sequelize@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.3.0.tgz#4b1353174a4702ab0be1d991f9d872021e1a6bff"
integrity sha512-aVZUvT0w1ebewlApFuaUJE/fJ7aTfIpMnwNM/Zgr29QnY0fT1t0EjXxl48Fwmfq3BHJogLMhfMTJRXJQaiaFVQ==
sequelize@^6.3.3:
version "6.3.3"
resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.3.3.tgz#930ab26f9e928d9bf2fe1fe477b428a092fef063"
integrity sha512-WO/b1ehjSFKlBCHzwZoaPhoW3WyXXy9x74yPrOP8NpE67wzbv0dIucDO4a+THLVyl3lnv3nFMZdJRdkUgb/ZAw==
dependencies:
debug "^4.1.1"
dottie "^2.0.0"
@@ -10762,6 +10875,13 @@ sha1@^1.1.1:
charenc ">= 0.0.1"
crypt ">= 0.0.1"
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
dependencies:
kind-of "^6.0.2"
sharp@^0.25.4:
version "0.25.4"
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363"
@@ -10806,6 +10926,15 @@ shell-quote@^1.6.1:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
shelljs@^0.8.3:
version "0.8.4"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"
integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==
dependencies:
glob "^7.0.0"
interpret "^1.0.0"
rechoir "^0.6.2"
sigmund@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
@@ -11520,10 +11649,10 @@ tinycolor2@^1.1.2:
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
tiptap-commands@^1.14.0:
version "1.14.0"
resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.14.0.tgz#1c34709637d9f34a09afaa0eb8f049898ae531c8"
integrity sha512-qdNECIQVLItTaw8Rbr21qejAODTxUWdeJlk5Ym1RUcVhD7imZjn4XjHtfj99afibNz/xofsjW4xiwlgnBMTlDg==
tiptap-commands@^1.14.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.14.1.tgz#7c3c4d27e6d66701b2f308f79eee01ccde03e14a"
integrity sha512-8yUkcUgTvEZqzhCJdWN7sY4IB/7IAnDtk0gcfXODOXyf+i7fMj4E/k741jlPxYSUFgWWYZWGks29EG6KJ2IQvQ==
dependencies:
prosemirror-commands "^1.1.4"
prosemirror-inputrules "^1.1.2"
@@ -11532,12 +11661,12 @@ tiptap-commands@^1.14.0:
prosemirror-state "^1.3.3"
prosemirror-tables "^1.1.0"
prosemirror-utils "^0.9.6"
tiptap-utils "^1.10.0"
tiptap-utils "^1.10.1"
tiptap-extensions@^1.29.1:
version "1.31.0"
resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.31.0.tgz#d1f42850e92599c3740ad3da822a667527b9e48f"
integrity sha512-xE61fHBzBpEZ+JF90Z1bFopDMvw9XAIH4VIg56nXrBxm/bKznOXr7oZKqesRE/o3cmWnSTUnLXIZYEQlk37qjg==
tiptap-extensions@^1.31.1:
version "1.31.1"
resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.31.1.tgz#7b6cbd334f0484699d035533e11a2d02a26ffd8d"
integrity sha512-fDaU+ghnK5/kTkS+HHn1TjljNv66y0ED1ppP1iszk7hmuBc1bo+XfFzhsViqcYi8QB9AeHzBEmvVF1fnKNar4A==
dependencies:
lowlight "^1.14.0"
prosemirror-collab "^1.2.2"
@@ -11548,23 +11677,23 @@ tiptap-extensions@^1.29.1:
prosemirror-transform "^1.2.6"
prosemirror-utils "^0.9.6"
prosemirror-view "^1.15.0"
tiptap "^1.29.0"
tiptap-commands "^1.14.0"
tiptap "^1.29.1"
tiptap-commands "^1.14.1"
tiptap-utils@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.10.0.tgz#33858777369cd9e6a90b5468217b1b30cf3e7ac9"
integrity sha512-5g3lKow8BP+4QerQu08c5nQcXhROD9gBvL108e76sMswJPNvyrCAiAje/F9C9Y9UWOqgTRcTLuXLOJqK9zZHoQ==
tiptap-utils@^1.10.1:
version "1.10.1"
resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.10.1.tgz#bb958fda0a00928e610bee0e004809bdc8827ddd"
integrity sha512-ET3khlkapIPDPuuNou5PhXsI9PE1O8khlqltoE1mcD2eMBQ+q/P/knJNasmBywkZYXJEqJlZSeVufRL0oEH2ZQ==
dependencies:
prosemirror-model "^1.10.0"
prosemirror-state "^1.3.3"
prosemirror-tables "^1.1.0"
prosemirror-utils "^0.9.6"
tiptap@^1.27.1, tiptap@^1.29.0:
version "1.29.0"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.29.0.tgz#646cc013f5be1095e8ae1b63da40e4017e66955e"
integrity sha512-W6UwiQbD2ybtU3Ac8XggPspx0wg0KXWrH93+BFuod6eTnVpZmXVeeymqHef16/aXGMmf+/aJiiY7a1Tvi+e6cg==
tiptap@^1.29.1:
version "1.29.1"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.29.1.tgz#9a8d8b360ce53491556f535b47a9a631e3a1808f"
integrity sha512-clb92b4/Ej83/bGLCnV8V3vifFN99B1HOvlP9D0U3Ym0jKwnryvk285oWl7255D9bvjukSVwmx4vWnBIZmpGUA==
dependencies:
prosemirror-commands "1.1.4"
prosemirror-dropcursor "1.3.2"
@@ -11574,8 +11703,8 @@ tiptap@^1.27.1, tiptap@^1.29.0:
prosemirror-model "1.10.0"
prosemirror-state "1.3.3"
prosemirror-view "1.15.0"
tiptap-commands "^1.14.0"
tiptap-utils "^1.10.0"
tiptap-commands "^1.14.1"
tiptap-utils "^1.10.1"
titleize@^2.1.0:
version "2.1.0"
@@ -12172,12 +12301,21 @@ void-elements@^2.0.1:
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
vue-awesome@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/vue-awesome/-/vue-awesome-4.0.2.tgz#20b65f24486698e82599cf804d12d98300434000"
integrity sha512-TE9hVwyVrGnBetO/MJwZ/7qLO6Vgr/WrDtIA7vwNryoLdA2jfRcKRw29KacpU5xj3wzZhHfYJ2xJLxfirhmH5Q==
vue-awesome@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/vue-awesome/-/vue-awesome-4.1.0.tgz#1caf50eb1ed0193f3c5ba19cbde9bea356cbc78c"
integrity sha512-4n+hg8KIMrwjXV6sRHcRZd18Somih5j4Yk2ZOv95pnvDpzbBkIYW4ktfivhqgNt50m0zDjmeEWiy1iVLtcccfw==
dependencies:
nanoid "^2.1.6"
core-js "^3.4.4"
vue-cli-plugin-vuetify@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.0.7.tgz#fcb4f1655e7c9199ee40dcbf6465e2355fd074d5"
integrity sha512-4riK5bzyvkZ4CxpQk/Vl6z8n8tmJUhuxh+k8xc/MZRdCt9RxAm3G4SxcEweroqKGXg+CRRfhqysaEQVtd4D40Q==
dependencies:
null-loader "^3.0.0"
semver "^7.1.2"
shelljs "^0.8.3"
vue-client-only@^2.0.0:
version "2.0.0"
@@ -12281,6 +12419,19 @@ vue@^2.6.11:
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
vuetify-loader@^1.3.0, vuetify-loader@^1.4.3:
version "1.6.0"
resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.6.0.tgz#05df0805b3ab2ff0de198109d34f9da3f69da667"
integrity sha512-1bx3YeZ712dT1+QMX+XSFlP0O5k5O5Ui9ysBBmUZ9bWkAEHWZJQI9soI+qG5qmeFxUC0L9QYMCIKP0hOL/pf3Q==
dependencies:
file-loader "^4.0.0"
loader-utils "^1.2.0"
vuetify@^2:
version "2.3.4"
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.3.4.tgz#fdb03b3281d40a8420b0295ea865843abdc69792"
integrity sha512-vMtCNqv5BhrjfTfIhH2Lptoxx7z/Nu1NfBiZ2oCvI2QbTagMlhF5GMXgbnnyTGIjooFf/ozKznuMxk6tuI5cxw==
vuex@^3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"
@@ -12343,7 +12494,7 @@ webidl-conversions@^5.0.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
webidl-conversions@^6.0.0:
webidl-conversions@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
@@ -12706,13 +12857,6 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xregexp@^4.2.4:
version "4.3.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"
integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==
dependencies:
"@babel/runtime-corejs3" "^7.8.3"
xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
@@ -12777,13 +12921,13 @@ yargs@^13.1.0, yargs@^13.3.2:
y18n "^4.0.0"
yargs-parser "^13.1.2"
yargs@^15.4.0:
version "15.4.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.0.tgz#53949fb768309bac1843de9b17b80051e9805ec2"
integrity sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw==
yargs@^15.4.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
dependencies:
cliui "^6.0.0"
decamelize "^3.2.0"
decamelize "^1.2.0"
find-up "^4.1.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"