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

View File

@@ -1,215 +1,215 @@
:focus {outline:none;} // :focus {outline:none;}
::-moz-focus-inner {border:0;} // ::-moz-focus-inner {border:0;}
blockquote { // blockquote {
border-left: 3px solid grey; // border-left: 3px solid grey;
font-style: italic; // font-style: italic;
color: #666; // color: #666;
padding-left: 1em; // 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;
// } // }
// @media only screen and (max-width: 768px) { // code {
// .el-card { // font-family: sans-serif;
// padding: 0px !important; // display: inline-block;
// border-radius: 0px; // 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'; // #footer {
@import './editor.less'; // 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"> <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}`') nuxt-link(:to='`/announcement/${announcement.id}`')
.title <i class='el-icon-info'/> {{announcement.title}} .title <i class='el-icon-info'/> {{announcement.title}}
@@ -23,23 +34,23 @@ export default {
} }
</script> </script>
<style lang='less'> <style lang='less'>
.announcement { // .announcement {
padding: 2%; // padding: 2%;
background-color: #511; // background-color: #511;
margin: 1rem 0; // margin: 1rem 0;
border-radius: 5px; // border-radius: 5px;
a:hover { // a:hover {
text-decoration: none; // text-decoration: none;
} // }
.title { // .title {
font-size: 1.2em; // font-size: 1.2em;
color: white; // color: white;
transition: color .2s; // transition: color .2s;
&:hover { // &:hover {
color: #fbd6b5; // color: #fbd6b5;
} // }
} // }
border: 2px solid #ff4500ba; // border: 2px solid #ff4500ba;
// box-shadow: inset 0px 0px 10px 0px orangered; // // box-shadow: inset 0px 0px 10px 0px orangered;
} // }
</style> </style>

View File

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

View File

@@ -1,26 +1,57 @@
<template lang="pug"> <template lang="pug">
.card.event.h-event.mt-1.text-white v-card.h-event.mt-1
nuxt-link(:to='`/event/${event.id}`') nuxt-link(:to='`/event/${event.id}`')
el-image(v-if='showImage && event.image_path' v-img(:src="`/media/thumb/${event.image_path}`" height="250" position="top top" class="white--text align-end")
lazy :src='`/media/thumb/${event.image_path}`') v-list-item
.float-right v-list-item-content
i.text-danger.el-icon-refresh(v-if='event.parentId') v-list-item-title.headline {{ event.title }}
.badge.text-info(v-if='settings.enable_resources && event.resources && event.resources.length') {{event.resources.length}} v-list-item-subtitle
//- title time(:datetime='event.start_datetime|unixFormat("YYYY-MM-DD HH:mm")') <v-icon>mdi-date</v-icon> {{ event|when }}
.p-name.p-summary.title {{event.title}} v-list-item-subtitle
span <v-icon>md-location-outline</v-icon> {{event.place.name}}
.card-body //- v-card-text
//- 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 v-card-actions
//- .p-description.description.mt-3(v-html='description') 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') //- <!-- //- v-card.event.h-event.mt-1(max-width="400")
el-button.ml-1(type='text' plain round size='mini' v-for='tag in event.tags' :key='tag' @click='addTag(tag)') {{tag}} //- 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> </template>
<script> <script>
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
@@ -66,3 +97,65 @@ export default {
} }
} }
</script> </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"> <template lang="pug">
section#home v-container#home(fluid)
Announcement(v-for='announcement in announcements' :key='`a_${announcement.id}`' :announcement='announcement') Announcement(v-for='announcement in announcements' :key='`a_${announcement.id}`' :announcement='announcement')
#calbar.row.mt-2.mb-2 #calbar.row.mt-2.mb-2
.col-xl-7.col-lg-7.col-sm-6.col-xs-12 .col-xl-7.col-lg-7.col-sm-6.col-xs-12
@@ -10,7 +10,6 @@
Search(past-filter recurrent-filter) Search(past-filter recurrent-filter)
#events #events
//- Announcement(v-for='announcement in announcements' :key='`a_${announcement.id}`' :announcement='announcement')
Event(v-for='event in events' :key='event.id' :event='event') Event(v-for='event in events' :key='event.id' :event='event')
</template> </template>
@@ -27,6 +26,7 @@ export default {
components: { Calendar, Event, Search, Announcement }, components: { Calendar, Event, Search, Announcement },
computed: { computed: {
events () { events () {
console.error('dentro computed di events in HOME!')
return this.in_past ? this.filteredEventsWithPast : this.filteredEvents return this.in_past ? this.filteredEventsWithPast : this.filteredEvents
}, },
...mapGetters(['filteredEvents', 'filteredEventsWithPast']), ...mapGetters(['filteredEvents', 'filteredEventsWithPast']),
@@ -51,10 +51,14 @@ export default {
} }
</script> </script>
<style lang='less'> <style lang='less'>
#calbar { // #calbar {
max-width: 1000px; // max-width: 1000px;
// margin: 0 auto; // // margin: 0 auto;
} // }
// #home {
// max-width: 1600px;
// }
#events { #events {
max-width: 1600px; max-width: 1600px;
margin: 0 auto; margin: 0 auto;

View File

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

View File

@@ -1,17 +1,17 @@
<template lang="pug"> <template lang="pug">
el-main#search v-container
el-switch.mt-1.mb-2.ml-2.d-block( v-switch.mt-0(
v-if='recurrentFilter && settings.allow_recurrent_event' v-if='recurrentFilter && settings.allow_recurrent_event'
:active-text="$t('event.show_recurrent')" inset color='primary'
:label="$t('event.show_recurrent')"
v-model='showRecurrent') v-model='showRecurrent')
el-switch.mt-1.mb-2.ml-2.d-block( v-switch.mt-0(
v-if='pastFilter' v-if='pastFilter' inset color='primary'
:active-text="$t('event.show_past')" :label="$t('event.show_past')"
v-model='showPast') v-model='showPast')
el-autocomplete.mb-1#searchInput.inline-input(:placeholder='$t("common.filter")' prefix-icon='el-icon-search' v-autocomplete#searchInput.mt-0(:placeholder='$t("common.filter")'
highlight-first-item
v-model='search' :debounce='200' v-model='search' :debounce='200'
:fetch-suggestions='querySearch' clearable :fetch-suggestions='querySearch' clearable
@select='addFilter') @select='addFilter')
@@ -20,9 +20,9 @@
i.float-right.el-icon-place(v-if='item.type==="place"') i.float-right.el-icon-place(v-if='item.type==="place"')
i.float-right.el-icon-collection-tag(v-if='item.type==="tag"') i.float-right.el-icon-collection-tag(v-if='item.type==="tag"')
#filters #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}} :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}} :key='p.id' @click='removePlace(p.id)') {{p.name}}
</template> </template>
@@ -91,36 +91,36 @@ export default {
} }
</script> </script>
<style lang='less'> <style lang='less'>
#search { // #search {
#searchInput { // #searchInput {
border: none; // border: none;
border-radius: 0px; // border-radius: 0px;
border-bottom: 2px solid lightgray; // border-bottom: 2px solid lightgray;
color: white; // color: white;
background-color: #111; // background-color: #111;
} // }
.el-switch__label { // .el-switch__label {
color: #aaa; // color: #aaa;
} // }
.el-switch__label.is-active { // .el-switch__label.is-active {
color: lightgreen; // color: lightgreen;
} // }
.el-switch__core { // .el-switch__core {
background-color: #555; // background-color: #555;
border-color: #777; // border-color: #777;
} // }
.is-checked .el-switch__core { // .is-checked .el-switch__core {
background-color: lightgreen; // background-color: lightgreen;
} // }
#filters { // #filters {
line-height: 2rem; // line-height: 2rem;
} // }
} // }
</style> </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'> <template lang='pug'>
div v-container
p(v-html="$t('admin.announcement_description')") v-subheader(v-html="$t('admin.announcement_description')")
br v-text-field(v-model='announcement.title' :placeholder='$t("common.title")')
el-input(v-model='announcement.title' :placeholder='$t("common.title")')
Editor.mt-2(v-model='announcement.announcement' border no-save style='max-height: 400px;') 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) v-data-table(:items='announcements')
el-table-column(:label="$t('common.title')" width='250')
template(slot-scope='data')
span(slot='reference') {{data.row.title}}
el-table-column(:label="$t('common.actions')") //- el-table-column(:label="$t('common.actions')")
template(slot-scope='data') //- template(slot-scope='data')
el-button-group //- el-button-group
el-button(size='mini' type='primary' //- el-button(size='mini' type='primary'
@click='edit(data.row)') {{$t('common.edit')}} //- @click='edit(data.row)') {{$t('common.edit')}}
el-button(size='mini' //- el-button(size='mini'
:type='data.row.visible?"warning":"success"' //- :type='data.row.visible?"warning":"success"'
@click='toggle(data.row)') {{data.row.visible?$t('common.deactivate'):$t('common.activate')}} //- @click='toggle(data.row)') {{data.row.visible?$t('common.deactivate'):$t('common.activate')}}
el-button(size='mini' type='danger' //- el-button(size='mini' type='danger'
@click='remove(data.row)') {{$t('common.delete')}} //- @click='remove(data.row)') {{$t('common.delete')}}
</template> </template>
<script> <script>

View File

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

View File

@@ -1,44 +1,33 @@
<template lang='pug'> <template lang='pug'>
div v-container
p(v-html="$t('admin.place_description')") v-subheader(v-html="$t('admin.place_description')")
el-form.mb-2(inline label-width='120px') v-form.mb-2
el-form-item(:label="$t('common.name')") //- el-form-item(:label="$t('common.name')")
el-input.mr-1(:placeholder='$t("common.name")' v-model='place.name') //- el-input.mr-1(:placeholder='$t("common.name")' v-model='place.name')
el-form-item(:label="$t('common.address')") v-text-field(
el-input.mr-1(:placeholder='$t("common.address")' v-model='place.address') :label="$t('common.name')"
el-button(variant='primary' @click='savePlace') {{$t('common.save')}} v-model='place.name'
:placeholder='$t("common.name")')
el-table(:data='paginatedPlaces' small) v-text-field(
el-table-column(:label="$t('common.name')" width='200') :label="$t('common.address')"
template(slot-scope='data') {{data.row.name}} v-model='place.address'
el-table-column(:label="$t('common.address')" width='400') :placeholder='$t("common.address")')
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')}}
client-only v-btn(@click='savePlace') {{$t('common.save')}}
el-pagination(v-if='places.length>perPage' :page-size='perPage' :currentPage.sync='placePage' :total='places.length')
v-data-table(
:items='places')
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
export default { export default {
data () { data () {
return { return {
perPage: 10,
placePage: 1,
place: { name: '', address: '', id: null } place: { name: '', address: '', id: null }
} }
}, },
computed: { computed: mapState(['places']),
...mapState(['places']),
paginatedPlaces () {
return this.places.slice((this.placePage - 1) * this.perPage,
this.placePage * this.perPage)
}
},
methods: { methods: {
placeSelected (items) { placeSelected (items) {
if (items.length === 0) { if (items.length === 0) {
@@ -51,7 +40,7 @@ export default {
this.place.id = item.id this.place.id = item.id
}, },
async savePlace () { 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"> <template lang="pug">
el-main v-container
//- select timezone //- select timezone
div {{$t('admin.select_instance_timezone')}} v-autocomplete(v-model='instance_timezone'
el-select(v-model='instance_timezone' filterable :label="$t('admin.select_instance_timezone')"
@input.native='queryTz=$event.target.value' @change='queryTz=""' :hint="$t('admin.instance_timezone_description')"
default-first-option placeholder='Timezone, type to search') :items="filteredTimezones"
el-option(v-for='timezone in filteredTimezones' :key='timezone.value' :value='timezone.value') persistent-hint
span.float-left {{timezone.value}} item-text='value'
small.float-right.text-danger {{timezone.offset}} item-value='value'
small.d-block.text-secondary {{$t('admin.instance_timezone_description')}} 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')}} v-select.mt-5(
el-select(v-model='instance_locale') v-model='instance_locale'
el-option(v-for='locale in Object.keys(locales)' :key='locale' :label='locales[locale]' :value='locale') :label="$t('admin.instance_locale')"
small.d-block.text-secondary {{$t('admin.instance_locale_description')}} :hint="$t('admin.instance_locale_description')"
persistent-hint
item-text='locale'
item-value='locale'
:items='locales'
)
div.mt-4 {{$t('common.title')}} v-text-field.mt-5(v-model='title'
el-input(v-model='title' @blur='save("title", title)') :label="$t('common.title')"
small.d-block.text-secondary {{$t('admin.title_description')}} :hint="$t('admin.title_description')"
@blur='save("title", title)'
persistent-hint
)
div.mt-4 {{$t('common.description')}} v-text-field.mt-5(v-model='description'
el-input(v-model='description' @blur='save("description", description)') :label="$t('common.description')"
small.d-block.text-secondary {{$t('admin.description_description')}} :hint="$t('admin.description_description')"
persistent-hint
@blur='save("description", description)')
div.mt-4 {{$t('admin.favicon')}} v-file-input.mt-5(ref='upload'
el-upload(ref='upload' :label="$t('admin.favicon')"
:action='`${settings.baseurl}/api/settings/logo`' :action='`${settings.baseurl}/api/settings/logo`'
:on-success="forceLogoReload" :on-success="forceLogoReload"
name='logo' name='logo'
:show-file-list="true" :show-file-list="true"
accept='image/png' accept='image/png'
:limit='1' :limit='1'
:multiple='false') :multiple='false')
el-button-group //- el-button-group
el-button(size='small' type='primary' plain) Select file el-button(size='small' type='primary' plain) Select file
el-button(size='small' type='success' plain @click='resetLogo') Reset el-button(size='small' type='success' plain @click='resetLogo') Reset
.el-upload__tip(slot='tip') png files with a size less than 500kb v-img(:src='`${settings.baseurl}/favicon.ico?${logoKey}`')
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')")
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-switch.mt-4(v-model='allow_anon_event'
v-model='recurrent_event_visible' :active-text="$t('admin.recurrent_event_visible')") 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> </template>
<script> <script>
@@ -57,7 +80,6 @@ export default {
name: 'Settings', name: 'Settings',
data ({ $store }) { data ({ $store }) {
return { return {
queryTz: '',
title: $store.state.settings.title, title: $store.state.settings.title,
description: $store.state.settings.description, description: $store.state.settings.description,
locales, locales,
@@ -92,10 +114,7 @@ export default {
}, },
filteredTimezones () { filteredTimezones () {
const current_timezone = moment.tz.guess() const current_timezone = moment.tz.guess()
const query = this.queryTz.toLowerCase()
const ret = _(moment.tz.names()) const ret = _(moment.tz.names())
.filter(tz => tz !== current_timezone && (!query || tz.toLowerCase().includes(query)))
.take(10)
.unshift(current_timezone) .unshift(current_timezone)
.map(tz => ({ value: tz, offset: moment().tz(tz).format('z Z') })) .map(tz => ({ value: tz, offset: moment().tz(tz).format('z Z') }))
.value() .value()

View File

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

View File

@@ -1,5 +1,14 @@
<template lang='pug'> <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') el-dialog(:visible.sync='showFollowMe')
h4(slot='title') {{$t('common.follow_me_title')}} h4(slot='title') {{$t('common.follow_me_title')}}
FollowMe FollowMe
@@ -10,34 +19,24 @@
nuxt nuxt
el-footer.mt-1#footer el-footer.mt-1#footer
#links #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> </template>
<script> <script>
import Nav from '~/components/Nav.vue' import Nav from '~/components/Nav.vue'
import { mapState } from 'vuex'
import FollowMe from '../components/FollowMe' import FollowMe from '../components/FollowMe'
import Snackbar from '../components/Snackbar'
import Footer from '../components/Footer'
export default { export default {
components: { Nav, FollowMe }, name: 'Default',
components: { Nav, FollowMe, Snackbar, Footer },
data () { data () {
return { showFollowMe: false } return { showFollowMe: false }
}, },
computed: mapState(['settings']) watch: {
} '$route.name' (name) {
</script> this.$vuetify.theme.dark = name !== 'NewEvent'
<style lang='less'> }
.el-backtop {
color: orangered;
}
#footer {
a {
font-size: 1.1em;
} }
} }
</style> </script>

View File

@@ -1,5 +1,5 @@
<template lang='pug'> <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-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}} h1(v-else) <i name='el-icon-warning'></i> An error occurred: {{error.message}}
nuxt-link(to='/') Back to home nuxt-link(to='/') Back to home

View File

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

View File

@@ -4,39 +4,15 @@
"description": "A shared agenda for local communities", "description": "A shared agenda for local communities",
"author": "lesion", "author": "lesion",
"scripts": { "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", "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 .", "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": "cd docs && bundle exec jekyll b",
"doc:dev": "cd docs && bundle exec jekyll s --drafts", "doc:dev": "cd docs && bundle exec jekyll s --drafts",
"migrate": "NODE_ENV=production sequelize db:migrate",
"migrate:dev": "sequelize db:migrate", "migrate:dev": "sequelize db:migrate",
"migrate": "NODE_ENV=production sequelize db:migrate" "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"
},
"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"
}, },
"files": [ "files": [
"server/", "server/",
@@ -50,12 +26,9 @@
"config/", "config/",
".nuxt/" ".nuxt/"
], ],
"resolutions": {
"prosemirror-model": "1.10.0"
},
"dependencies": { "dependencies": {
"@nuxtjs/auth": "^4.9.1", "@nuxtjs/auth": "^4.9.1",
"@nuxtjs/axios": "^5.11.0", "@nuxtjs/axios": "^5.12.0",
"accept-language": "^3.0.18", "accept-language": "^3.0.18",
"axios": "^0.19.2", "axios": "^0.19.2",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
@@ -66,19 +39,19 @@
"cookie-parser": "^1.4.5", "cookie-parser": "^1.4.5",
"cors": "^2.8.5", "cors": "^2.8.5",
"cross-env": "^7.0.2", "cross-env": "^7.0.2",
"date-fns": "^2.14.0", "date-fns": "^2.15.0",
"dayjs": "^1.8.29", "dayjs": "^1.8.30",
"dompurify": "^2.0.11", "dompurify": "^2.0.11",
"element-ui": "^2.13.2", "element-ui": "^2.13.2",
"email-templates": "^7.0.5", "email-templates": "^7.1.0",
"express": "^4.17.1", "express": "^4.17.1",
"express-oauth-server": "^2.0.0", "express-oauth-server": "^2.0.0",
"http-signature": "^1.3.4", "http-signature": "^1.3.4",
"ics": "^2.22.1", "ics": "^2.22.1",
"inquirer": "^7.3.0", "inquirer": "^7.3.3",
"jsdom": "^16.2.2", "jsdom": "^16.3.0",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"less": "^3.11.3", "less": "^3.12.2",
"linkifyjs": "^2.1.9", "linkifyjs": "^2.1.9",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
@@ -88,30 +61,30 @@
"nominatim-geocoder": "^0.1.4", "nominatim-geocoder": "^0.1.4",
"nuxt": "^2.13.3", "nuxt": "^2.13.3",
"nuxt-express-module": "^0.0.11", "nuxt-express-module": "^0.0.11",
"pg": "^8.2.2", "pg": "^8.3.0",
"sequelize": "^6.3.0", "sequelize": "^6.3.3",
"sequelize-cli": "^6.2.0", "sequelize-cli": "^6.2.0",
"sharp": "^0.25.4", "sharp": "^0.25.4",
"sqlite3": "^5.0.0", "sqlite3": "^5.0.0",
"tiptap": "^1.27.1", "tiptap": "^1.29.1",
"tiptap-extensions": "^1.29.1", "tiptap-extensions": "^1.31.1",
"to-ico": "^1.1.5", "to-ico": "^1.1.5",
"url": "^0.11.0", "url": "^0.11.0",
"v-calendar": "^1.0.8", "v-calendar": "^1.0.8",
"vue-awesome": "^4.0.0", "vue-awesome": "^4.1.0",
"vue-clipboard2": "^0.3.1", "vue-clipboard2": "^0.3.1",
"vue-i18n": "^8.18.2", "vue-i18n": "^8.18.2",
"yargs": "^15.4.0" "yargs": "^15.4.1"
}, },
"devDependencies": { "devDependencies": {
"@nuxtjs/eslint-config": "^3.0.0", "@nuxtjs/eslint-config": "^3.0.0",
"@nuxtjs/vuetify": "^1.11.2",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"eslint": "^7.4.0", "eslint": "^7.5.0",
"eslint-config-prettier": "^6.11.0", "eslint-config-prettier": "^6.11.0",
"eslint-config-standard": ">=14.1.1", "eslint-config-standard": ">=14.1.1",
"eslint-loader": "^4.0.2", "eslint-loader": "^4.0.2",
"eslint-plugin-import": "^2.22.0", "eslint-plugin-import": "^2.22.0",
"eslint-plugin-jest": "^23.17.1",
"eslint-plugin-node": ">=11.1.0", "eslint-plugin-node": ">=11.1.0",
"eslint-plugin-nuxt": "^1.0.0", "eslint-plugin-nuxt": "^1.0.0",
"eslint-plugin-prettier": "^3.1.4", "eslint-plugin-prettier": "^3.1.4",
@@ -122,6 +95,37 @@
"nodemon": "^2.0.4", "nodemon": "^2.0.4",
"prettier": "^2.0.5", "prettier": "^2.0.5",
"pug-plain-loader": "^1.0.0", "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" "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"> <template lang="pug">
el-main v-container
el-tabs(v-model='tab') v-tabs
//- SETTINGS //- SETTINGS
el-tab-pane.pt-1 v-tab {{$t('common.settings')}}
template(slot='label') v-tab-item
v-icon(name='cog')
span.hidden-xs-only {{$t('common.settings')}}
Settings Settings
//- USERS //- USERS
el-tab-pane.pt-1 v-tab
template(slot='label') v-badge(:value='unconfirmedUsers.length' :content='unconfirmedUsers.length') {{$t('common.users')}}
v-icon(name='users') v-tab-item
span.hidden-xs-only.ml-1 {{$t('common.users')}}
el-badge(v-show='unconfirmedUsers.length>0' :value='unconfirmedUsers.length')
Users(:users='users') Users(:users='users')
//- PLACES //- PLACES
el-tab-pane.pt-1 v-tab {{$t('common.places')}}
template(slot='label') v-tab-item
v-icon(name='map-marker-alt')
span.hidden-xs-only.ml-1 {{$t('common.places')}}
Places Places
//- EVENTS //- EVENTS
el-tab-pane.pt-1 v-tab
template(slot='label') v-badge(:content='events.length') {{$t('common.events')}}
v-icon(name='calendar') v-tab-item
span.hidden-xs-only.ml-1 {{$t('common.events')}}
el-badge(v-show='events.length>0' :value='events.length')
p {{$t('admin.event_confirm_description')}} p {{$t('admin.event_confirm_description')}}
el-table(:data='paginatedEvents' small primary-key='id' v-loading='loading') v-data-table(
el-table-column(:label='$t("common.name")' width='300') :items='events'
template(slot-scope='data') {{data.row.title}} :headers='eventHeaders'
el-table-column(:label='$t("common.where")' width='250') )
template(slot-scope='data') {{data.row.place.name}} //- el-table-column(:label='$t("common.name")' width='300')
el-table-column(:label='$t("common.confirm")' width='250') //- template(slot-scope='data') {{data.row.title}}
template(slot-scope='data') //- el-table-column(:label='$t("common.where")' width='250')
el-button-group //- template(slot-scope='data') {{data.row.place.name}}
el-button(type='primary' @click='confirm(data.row.id)' size='mini') {{$t('common.confirm')}} //- el-table-column(:label='$t("common.confirm")' width='250')
el-button(type='success' @click='preview(data.row.id)' size='mini') {{$t('common.preview')}} //- template(slot-scope='data')
client-only //- el-button-group
el-pagination(v-if='events.length>perPage' :page-size='perPage' :currentPage.sync='eventPage' :total='events.length') //- 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 //- ANNOUNCEMENTS
el-tab-pane.pt-1 v-tab {{$t('common.announcements')}}
template(slot='label') v-tab-item
v-icon(name='bullhorn')
span.hidden-xs-only.ml-1 {{$t('common.announcements')}}
Announcement Announcement
//- FEDERATION //- FEDERATION
el-tab-pane.pt-1 v-tab {{$t('common.federation')}}
template(slot='label') v-tab-item
v-icon(name='network-wired')
span.hidden-xs-only.ml-1 {{$t('common.federation')}}
Federation Federation
//- MODERATION //- MODERATION
el-tab-pane.pt-1(v-if='settings.enable_federation') v-tab(v-if='settings.enable_federation') {{$t('common.moderation')}}
template(slot='label') v-tab-item
v-icon(name='vector-square')
span.hidden-xs-only.ml-1 {{$t('common.moderation')}}
Moderation Moderation
</template> </template>
@@ -93,26 +82,14 @@ export default {
}, },
data () { data () {
return { return {
perPage: 10,
eventPage: 1,
description: '', description: '',
events: [], events: []
loading: false,
tab: '0',
open: true
} }
}, },
head () {
return { title: `${this.settings.title} - ${this.$t('common.admin')}` }
},
computed: { computed: {
...mapState(['settings']), ...mapState(['settings']),
unconfirmedUsers () { unconfirmedUsers () {
return this.users.filter(u => !u.is_active) return this.users.filter(u => !u.is_active)
},
paginatedEvents () {
return this.events.slice((this.eventPage - 1) * this.perPage,
this.eventPage * this.perPage)
} }
}, },
methods: { methods: {
@@ -133,6 +110,9 @@ export default {
} catch (e) { } catch (e) {
} }
} }
},
head () {
return { title: `${this.settings.title} - ${this.$t('common.admin')}` }
} }
} }
</script> </script>

View File

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

View File

@@ -1,20 +1,24 @@
<template lang='pug'> <template lang='pug'>
el-main v-row.mt-5(align='center' justify='center')
el-card v-col(cols='12' sm='10' md="6")
h4(slot='header').text-center <el-icon name='user'/> {{$t('common.register')}}
p(v-html="$t('register.description')")
div(v-loading='loading')
el-input.mb-2(ref='email' v-model='user.email' type='email' required v-card
:placeholder='$t("common.email")' autocomplete='email' v-card-title {{$t('common.register')}}
prefix-icon='el-icon-message' name='email')
el-input.mb-2(v-model='user.password' type="password" v-card-text
placeholder="Password" name='password' required prefix-icon='el-icon-lock')
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> </template>
<script> <script>

View File

@@ -1,9 +1,9 @@
<template lang="pug"> <template lang="pug">
el-main v-container
.edit(v-if='$auth.user && $auth.user.is_admin') .edit(v-if='$auth.user && $auth.user.is_admin')
Editor(v-if='$auth.user && $auth.user.is_admin' Editor(v-if='$auth.user && $auth.user.is_admin'
v-model='about') 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')}} @click='save') {{$t('common.save')}}
div(v-else v-html='about') div(v-else v-html='about')
</template> </template>

View File

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

View File

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

View File

@@ -1,23 +1,23 @@
<template lang='pug'> <template lang='pug'>
div div
el-divider {{$t('common.admin')}} v-divider {{$t('common.admin')}}
el-menu.menu v-menu.menu
el-menu-item 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-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')}} 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')}} v-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(v-if='!event.parentId' @click='remove(false)') <i class='el-icon-delete'/> {{$t('common.remove')}}
template(v-if='event.parentId') template(v-if='event.parentId')
el-divider {{$t('event.recurrent')}} v-divider {{$t('event.recurrent')}}
p.text-secondary p.text-secondary
i.el-icon-refresh i.el-icon-refresh
small {{event|recurrentDetail}}<br/> 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')}} v-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')}} v-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')}} v-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(@click='remove(true)') <i class='el-icon-delete'/> {{$t('common.remove')}}
</template> </template>
<script> <script>
import { MessageBox } from 'element-ui' import { MessageBox } from 'element-ui'

View File

@@ -1,11 +1,12 @@
<template lang="pug"> <template lang="pug">
el-main v-container
p {{$t('export.intro')}} p {{$t('export.intro')}}
//- Search //- Search
el-tabs.mt-2(v-model='type') v-tabs(v-model='type')
//- TOFIX //- 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`)') //- p(v-html='$t(`export.email_description`)')
//- el-form(@submit.native.prevent) //- el-form(@submit.native.prevent)
//- //- el-switch(v-model='notification.notify_on_add' :active-text="$t('notify_on_insert')") //- //- 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-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-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`)') span(v-html='$t(`export.feed_description`)')
el-input(v-model='link') v-text-field(v-model='link' readonly)
el-button(slot='append' plain v-btn(slot='append' plain text
v-clipboard:copy='link' v-clipboard:success='copyLink' v-clipboard:copy='link'
type="primary" icon='el-icon-document' ) {{$t("common.copy")}} 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 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`)') p(v-html='$t(`export.ical_description`)')
el-input(v-model='link') v-text-field(v-model='link')
el-button(slot='append' v-clipboard:copy='link' v-clipboard:success='copyLink' v-btn(slot='append' v-clipboard:copy='link' v-clipboard:success='copyLink') {{$t("common.copy")}}
plain type="primary" icon='el-icon-document') {{$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`)') p(v-html='$t(`export.list_description`)')
el-row v-row
el-col.mr-2(:span='11') v-col.mr-2(:span='11')
el-input(v-model='list.title') Title v-text-field(v-model='list.title') Title
el-col.float-right(:span='12') v-col.float-right(:span='12')
List( List(
:title='list.title' :title='list.title'
:events='filteredEvents') :events='filteredEvents')
el-input.mb-1(type='textarea' v-model='listScript' readonly ) v-text-field.mb-1(type='textarea' v-model='listScript' readonly )
el-button.float-right(plain v-clipboard:copy='listScript' v-clipboard:success='copyLink' v-btn(plain v-clipboard:copy='listScript' v-clipboard:success='copyLink') {{$t('common.copy')}}
type='primary' icon='el-icon-document') {{$t('common.copy')}}
//- TOFIX //- 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`)') //- p(v-html='$t(`export.calendar_description`)')
//- //- no-ssr //- //- no-ssr
//- Calendar.mb-1 //- 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 //- el-button.float-right(plain type="primary" icon='el-icon-document') Copy
</template> </template>
@@ -57,7 +61,6 @@
import { mapState, mapGetters } from 'vuex' import { mapState, mapGetters } from 'vuex'
import List from '@/components/List' import List from '@/components/List'
import FollowMe from '../components/FollowMe' import FollowMe from '../components/FollowMe'
import { Message } from 'element-ui'
export default { export default {
name: 'Exports', name: 'Exports',
@@ -120,16 +123,17 @@ export default {
}, },
methods: { methods: {
copyLink () { 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 () { add_notification () {
if (!this.notification.email) { 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() // return this.$refs.email.focus()
} }
// await api.addNotification({ ...this.notification, filters: this.filters}) // await api.addNotification({ ...this.notification, filters: this.filters})
// this.$refs.modal.hide() // 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) { imgPath (event) {
return event.image_path && event.image_path return event.image_path && event.image_path
@@ -142,9 +146,3 @@ export default {
} }
} }
</script> </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 }, where: { key },
defaults: { value, is_secret } defaults: { value, is_secret }
}) })
if (!created) { setting.update({ value, is_secret }) } if (!created) { setting.update({ value, is_secret }) }
settingsController[is_secret ? 'secretSettings' : 'settings'][key] = value settingsController[is_secret ? 'secretSettings' : 'settings'][key] = value
return true return true
} catch (e) { } catch (e) {
debug(e)
return false 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" "@babel/types" "^7.4.4"
esutils "^2.0.2" 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": "@babel/runtime@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99"
@@ -1377,7 +1369,18 @@
lodash "^4.17.15" lodash "^4.17.15"
nanoid "^2.1.11" 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" version "5.11.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.11.0.tgz#27d7297a69e11c39039b9cacac61e2e0d0e00f1f" resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.11.0.tgz#27d7297a69e11c39039b9cacac61e2e0d0e00f1f"
integrity sha512-6M87KUXWWlAjRIwqBTXoollTwsUDnf8bdOR3qY1cVggvUP4hYgb2Oby7/Jr0u7bWGyb+/GuagwBBtubGTLsoyA== integrity sha512-6M87KUXWWlAjRIwqBTXoollTwsUDnf8bdOR3qY1cVggvUP4hYgb2Oby7/Jr0u7bWGyb+/GuagwBBtubGTLsoyA==
@@ -1410,6 +1413,18 @@
consola "^2.11.3" consola "^2.11.3"
http-proxy-middleware "^1.0.4" 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": "@nuxtjs/youch@^4.2.3":
version "4.2.3" version "4.2.3"
resolved "https://registry.yarnpkg.com/@nuxtjs/youch/-/youch-4.2.3.tgz#36f8b22df5a0efaa81373109851e1d857aca6bed" 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" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.1.1, acorn@^7.2.0: acorn@^7.1.1, acorn@^7.3.1:
version "7.3.1" version "7.3.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
@@ -2925,6 +2940,21 @@ cheerio@^0.22.0:
lodash.reject "^4.4.0" lodash.reject "^4.4.0"
lodash.some "^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: chokidar@^2.1.8:
version "2.1.8" version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" 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" strip-ansi "^6.0.0"
wrap-ansi "^6.2.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: clone-response@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 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" browserslist "^4.8.5"
semver "7.0.0" 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: core-js@^2.4.0, core-js@^2.6.5:
version "2.6.11" version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== 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: core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 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" image-size "^0.7.3"
mimer "^1.0.0" 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" version "2.14.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba"
integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw== 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" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.28.tgz#37aa6201df483d089645cb6c8f6cef6f0c4dbc07"
integrity sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg== integrity sha512-ccnYgKC0/hPSGXxj7Ju6AV/BP4HUkXC2u15mikXT5mX9YorEaoi1bEKOmAqdkJHN4EEkmAf97SpH66Try5Mbeg==
dayjs@^1.8.29: dayjs@^1.8.30:
version "1.8.29" version "1.8.30"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.29.tgz#5d23e341de6bfbd206c01136d2fb0f01877820f5" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.30.tgz#d3b314d3ccdc179015d915fd3c6e14422c026378"
integrity sha512-Vm6teig8ZWK7rH/lxzVGxZJCljPdmUr6q/3f4fr5F0VWNGVkZEjZOQJsAN8hUHUqn+NK4XHNEpJZS1MwLyDcLw== integrity sha512-5s5IGuP5bVvIbOWkEDcfmXsUj24fZW1NMHVVSdSFF/kW8d+alZcI9SpBKC+baEyBe+z3fUp17y75ulstv5swUw==
de-indent@^1.0.2: de-indent@^1.0.2:
version "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" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 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: decimal.js@^10.2.0:
version "10.2.0" version "10.2.0"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" 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-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0" minimalistic-crypto-utils "^1.0.0"
email-templates@^7.0.5: email-templates@^7.1.0:
version "7.0.5" version "7.1.0"
resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.0.5.tgz#0b31918d97edca2b6ae6526ddf9eedfb7ff000c4" resolved "https://registry.yarnpkg.com/email-templates/-/email-templates-7.1.0.tgz#d10dad8ae673e06eaf1bdff2c179ae39dc31ae82"
integrity sha512-fkq/J7gW/+IU1PIl2R2udGaLYrTz7LKCpFkfCEYIzYRHP7e8LYfFYY1+kw/7YEPEvkizBEHEDIl+o3QJddBUug== integrity sha512-cO+6RgrFk1CPqm1y8UbSRyjZ4mrtk3FleT7IR7l82EbXfwnP2qSo94KDIeacklR4+oFktep2Z6ulkUp5Cf+UNw==
dependencies: dependencies:
"@ladjs/i18n" "^3.0.10" "@ladjs/i18n" "^3.0.10"
"@sindresorhus/is" "^2.1.1" "@sindresorhus/is" "^2.1.1"
@@ -4543,7 +4580,7 @@ eslint-plugin-import@^2.22.0:
resolve "^1.17.0" resolve "^1.17.0"
tsconfig-paths "^3.9.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" version "23.17.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.17.1.tgz#c0f39ba78e0f33b7ee1ce4ec92b773e39026ea3f" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.17.1.tgz#c0f39ba78e0f33b7ee1ce4ec92b773e39026ea3f"
integrity sha512-/o36fw67qNbJGWbSBIBMfseMsNP/d88WUHAGHCi1xFwsNB3XXZGdvxbOw49j3iQz6MCW/yw8OeOsuQhi6mM5ZA== integrity sha512-/o36fw67qNbJGWbSBIBMfseMsNP/d88WUHAGHCi1xFwsNB3XXZGdvxbOw49j3iQz6MCW/yw8OeOsuQhi6mM5ZA==
@@ -4640,22 +4677,22 @@ eslint-template-visitor@^1.1.0:
espree "^6.1.1" espree "^6.1.1"
multimap "^1.0.2" multimap "^1.0.2"
eslint-utils@^2.0.0: eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies: dependencies:
eslint-visitor-keys "^1.1.0" 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" version "1.3.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint@^7.4.0: eslint@^7.5.0:
version "7.4.0" version "7.5.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.5.0.tgz#9ecbfad62216d223b82ac9ffea7ef3444671d135"
integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g== integrity sha512-vlUP10xse9sWt9SGRtcr1LAC67BENcQMFeV+w5EvLEoFe3xJ8cF1Skd0msziRx/VMC+72B4DxreCE+OR12OA6Q==
dependencies: dependencies:
"@babel/code-frame" "^7.0.0" "@babel/code-frame" "^7.0.0"
ajv "^6.10.0" ajv "^6.10.0"
@@ -4665,9 +4702,9 @@ eslint@^7.4.0:
doctrine "^3.0.0" doctrine "^3.0.0"
enquirer "^2.3.5" enquirer "^2.3.5"
eslint-scope "^5.1.0" eslint-scope "^5.1.0"
eslint-utils "^2.0.0" eslint-utils "^2.1.0"
eslint-visitor-keys "^1.2.0" eslint-visitor-keys "^1.3.0"
espree "^7.1.0" espree "^7.2.0"
esquery "^1.2.0" esquery "^1.2.0"
esutils "^2.0.2" esutils "^2.0.2"
file-entry-cache "^5.0.1" file-entry-cache "^5.0.1"
@@ -4681,7 +4718,7 @@ eslint@^7.4.0:
js-yaml "^3.13.1" js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1" json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1" levn "^0.4.1"
lodash "^4.17.14" lodash "^4.17.19"
minimatch "^3.0.4" minimatch "^3.0.4"
natural-compare "^1.4.0" natural-compare "^1.4.0"
optionator "^0.9.1" optionator "^0.9.1"
@@ -4708,14 +4745,14 @@ espree@^6.1.1, espree@^6.2.1:
acorn-jsx "^5.2.0" acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
espree@^7.1.0: espree@^7.2.0:
version "7.1.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69"
integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw== integrity sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==
dependencies: dependencies:
acorn "^7.2.0" acorn "^7.3.1"
acorn-jsx "^5.2.0" 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: esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1" version "4.0.1"
@@ -5000,6 +5037,13 @@ fault@^1.0.0:
dependencies: dependencies:
format "^0.2.0" 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: figgy-pudding@^3.5.1:
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" 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: dependencies:
flat-cache "^2.0.1" flat-cache "^2.0.1"
file-loader@^4.3.0: file-loader@^4.0.0, file-loader@^4.3.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af"
integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== 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: dependencies:
is-glob "^4.0.1" 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" version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -6135,10 +6179,10 @@ inquirer@^7.2.0:
strip-ansi "^6.0.0" strip-ansi "^6.0.0"
through "^2.3.6" through "^2.3.6"
inquirer@^7.3.0: inquirer@^7.3.3:
version "7.3.0" version "7.3.3"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.0.tgz#aa3e7cb0c18a410c3c16cdd2bc9dcbe83c4d333e" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
integrity sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA== integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
dependencies: dependencies:
ansi-escapes "^4.2.1" ansi-escapes "^4.2.1"
chalk "^4.1.0" chalk "^4.1.0"
@@ -6146,7 +6190,7 @@ inquirer@^7.3.0:
cli-width "^3.0.0" cli-width "^3.0.0"
external-editor "^3.0.3" external-editor "^3.0.3"
figures "^3.0.0" figures "^3.0.0"
lodash "^4.17.15" lodash "^4.17.19"
mute-stream "0.0.8" mute-stream "0.0.8"
run-async "^2.4.0" run-async "^2.4.0"
rxjs "^6.6.0" rxjs "^6.6.0"
@@ -6154,7 +6198,7 @@ inquirer@^7.3.0:
strip-ansi "^6.0.0" strip-ansi "^6.0.0"
through "^2.3.6" through "^2.3.6"
interpret@^1.4.0: interpret@^1.0.0, interpret@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
@@ -6649,10 +6693,10 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdom@^16.2.2: jsdom@^16.3.0:
version "16.2.2" version "16.3.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.3.0.tgz#75690b7dac36c67be49c336dcd7219bbbed0810c"
integrity sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg== integrity sha512-zggeX5UuEknpdZzv15+MS1dPYG0J/TftiiNunOeNxSl3qr8Z6cIlQpN0IdJa44z9aFxZRIVqRncvEhQ7X5DtZg==
dependencies: dependencies:
abab "^2.0.3" abab "^2.0.3"
acorn "^7.1.1" acorn "^7.1.1"
@@ -6674,7 +6718,7 @@ jsdom@^16.2.2:
tough-cookie "^3.0.1" tough-cookie "^3.0.1"
w3c-hr-time "^1.0.2" w3c-hr-time "^1.0.2"
w3c-xmlserializer "^2.0.0" w3c-xmlserializer "^2.0.0"
webidl-conversions "^6.0.0" webidl-conversions "^6.1.0"
whatwg-encoding "^1.0.5" whatwg-encoding "^1.0.5"
whatwg-mimetype "^2.3.0" whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.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" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 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: last-call-webpack-plugin@^3.0.0:
version "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" 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" request "^2.83.0"
source-map "~0.6.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: leven@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 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" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== 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" version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== 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" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
nanoid@^2.1.11, nanoid@^2.1.6: nanoid@^2.1.11:
version "2.1.11" version "2.1.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== 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" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== 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: natural-compare@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 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: dependencies:
boolbase "~1.0.0" 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: num2fraction@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" 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" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pg-connection-string@^2.2.3: pg-connection-string@^2.3.0:
version "2.2.3" version "2.3.0"
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.2.3.tgz#48e1158ec37eaa82e98dbcb7307103ec303fe0e7" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6"
integrity sha512-I/KCSQGmOrZx6sMHXkOs2MjddrYcqpza3Dtsy0AjIgBr/bZiPJRK9WhABXN1Uy1UDazRbi9gZEzO2sAhL5EqiQ== integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w==
pg-int8@1.0.1: pg-int8@1.0.1:
version "1.0.1" version "1.0.1"
@@ -8732,14 +8809,14 @@ pg-types@^2.1.0:
postgres-date "~1.0.4" postgres-date "~1.0.4"
postgres-interval "^1.1.0" postgres-interval "^1.1.0"
pg@^8.2.2: pg@^8.3.0:
version "8.2.2" version "8.3.0"
resolved "https://registry.yarnpkg.com/pg/-/pg-8.2.2.tgz#a8c2bbe1f20e67b11333a672b3bc2135338fd7e4" resolved "https://registry.yarnpkg.com/pg/-/pg-8.3.0.tgz#941383300d38eef51ecb88a0188cec441ab64d81"
integrity sha512-Uni50U0W2CNPM68+zfC/1WWjSO3q/uBSF/Nl7D+1npZGsPSM4/EZt0xSMW2jox1Bn0EfDlnTWnTsM/TrSOtBEA== integrity sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ==
dependencies: dependencies:
buffer-writer "2.0.0" buffer-writer "2.0.0"
packet-reader "1.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-pool "^3.2.1"
pg-protocol "^1.2.5" pg-protocol "^1.2.5"
pg-types "^2.1.0" 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" prosemirror-state "^1.0.0"
w3c-keyname "^2.2.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: 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.9.1" version "1.10.0"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.9.1.tgz#8c08cf556f593c5f015548d2c1a6825661df087f" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.10.0.tgz#bb1101732bccacf336e23a36a8b045b865025fa2"
integrity sha512-Qblh8pm1c7Ll64sYLauwwzjimo/tFg1zW3Q3IWhKRhvfOEgRKqa6dC5pRrAa+XHOIjBFEYrqbi52J5bqA2dV8Q== integrity sha512-xTMbbO2q4abs5lJdeRvk/SrftNfZlMdvChKziTiK+OKtP8LkQI8uw39u4S5zqyflrmW3Or6+qnyFPf1p4v2u1g==
dependencies: dependencies:
orderedmap "^1.1.0" orderedmap "^1.1.0"
@@ -10173,6 +10250,13 @@ readdirp@~3.4.0:
dependencies: dependencies:
picomatch "^2.2.1" 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: regenerate-unicode-properties@^8.2.0:
version "8.2.0" version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" 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" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 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: sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 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" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 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" version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== 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" resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-6.0.0.tgz#2b2f6570fb633ecb38a338c4fc266c0e42ce2af7"
integrity sha512-D/VfOX2Z+6JTWqM73lhcqMXp1X4CeqRNVMlndvbOMtyjFAZ2kYzH7rGFGFrLO1r+RZQdc/h+3zQL4nd3cclNLg== integrity sha512-D/VfOX2Z+6JTWqM73lhcqMXp1X4CeqRNVMlndvbOMtyjFAZ2kYzH7rGFGFrLO1r+RZQdc/h+3zQL4nd3cclNLg==
sequelize@^6.3.0: sequelize@^6.3.3:
version "6.3.0" version "6.3.3"
resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.3.0.tgz#4b1353174a4702ab0be1d991f9d872021e1a6bff" resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.3.3.tgz#930ab26f9e928d9bf2fe1fe477b428a092fef063"
integrity sha512-aVZUvT0w1ebewlApFuaUJE/fJ7aTfIpMnwNM/Zgr29QnY0fT1t0EjXxl48Fwmfq3BHJogLMhfMTJRXJQaiaFVQ== integrity sha512-WO/b1ehjSFKlBCHzwZoaPhoW3WyXXy9x74yPrOP8NpE67wzbv0dIucDO4a+THLVyl3lnv3nFMZdJRdkUgb/ZAw==
dependencies: dependencies:
debug "^4.1.1" debug "^4.1.1"
dottie "^2.0.0" dottie "^2.0.0"
@@ -10762,6 +10875,13 @@ sha1@^1.1.1:
charenc ">= 0.0.1" charenc ">= 0.0.1"
crypt ">= 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: sharp@^0.25.4:
version "0.25.4" version "0.25.4"
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" 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" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 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: sigmund@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 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" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
tiptap-commands@^1.14.0: tiptap-commands@^1.14.1:
version "1.14.0" version "1.14.1"
resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.14.0.tgz#1c34709637d9f34a09afaa0eb8f049898ae531c8" resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.14.1.tgz#7c3c4d27e6d66701b2f308f79eee01ccde03e14a"
integrity sha512-qdNECIQVLItTaw8Rbr21qejAODTxUWdeJlk5Ym1RUcVhD7imZjn4XjHtfj99afibNz/xofsjW4xiwlgnBMTlDg== integrity sha512-8yUkcUgTvEZqzhCJdWN7sY4IB/7IAnDtk0gcfXODOXyf+i7fMj4E/k741jlPxYSUFgWWYZWGks29EG6KJ2IQvQ==
dependencies: dependencies:
prosemirror-commands "^1.1.4" prosemirror-commands "^1.1.4"
prosemirror-inputrules "^1.1.2" prosemirror-inputrules "^1.1.2"
@@ -11532,12 +11661,12 @@ tiptap-commands@^1.14.0:
prosemirror-state "^1.3.3" prosemirror-state "^1.3.3"
prosemirror-tables "^1.1.0" prosemirror-tables "^1.1.0"
prosemirror-utils "^0.9.6" prosemirror-utils "^0.9.6"
tiptap-utils "^1.10.0" tiptap-utils "^1.10.1"
tiptap-extensions@^1.29.1: tiptap-extensions@^1.31.1:
version "1.31.0" version "1.31.1"
resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.31.0.tgz#d1f42850e92599c3740ad3da822a667527b9e48f" resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.31.1.tgz#7b6cbd334f0484699d035533e11a2d02a26ffd8d"
integrity sha512-xE61fHBzBpEZ+JF90Z1bFopDMvw9XAIH4VIg56nXrBxm/bKznOXr7oZKqesRE/o3cmWnSTUnLXIZYEQlk37qjg== integrity sha512-fDaU+ghnK5/kTkS+HHn1TjljNv66y0ED1ppP1iszk7hmuBc1bo+XfFzhsViqcYi8QB9AeHzBEmvVF1fnKNar4A==
dependencies: dependencies:
lowlight "^1.14.0" lowlight "^1.14.0"
prosemirror-collab "^1.2.2" prosemirror-collab "^1.2.2"
@@ -11548,23 +11677,23 @@ tiptap-extensions@^1.29.1:
prosemirror-transform "^1.2.6" prosemirror-transform "^1.2.6"
prosemirror-utils "^0.9.6" prosemirror-utils "^0.9.6"
prosemirror-view "^1.15.0" prosemirror-view "^1.15.0"
tiptap "^1.29.0" tiptap "^1.29.1"
tiptap-commands "^1.14.0" tiptap-commands "^1.14.1"
tiptap-utils@^1.10.0: tiptap-utils@^1.10.1:
version "1.10.0" version "1.10.1"
resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.10.0.tgz#33858777369cd9e6a90b5468217b1b30cf3e7ac9" resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.10.1.tgz#bb958fda0a00928e610bee0e004809bdc8827ddd"
integrity sha512-5g3lKow8BP+4QerQu08c5nQcXhROD9gBvL108e76sMswJPNvyrCAiAje/F9C9Y9UWOqgTRcTLuXLOJqK9zZHoQ== integrity sha512-ET3khlkapIPDPuuNou5PhXsI9PE1O8khlqltoE1mcD2eMBQ+q/P/knJNasmBywkZYXJEqJlZSeVufRL0oEH2ZQ==
dependencies: dependencies:
prosemirror-model "^1.10.0" prosemirror-model "^1.10.0"
prosemirror-state "^1.3.3" prosemirror-state "^1.3.3"
prosemirror-tables "^1.1.0" prosemirror-tables "^1.1.0"
prosemirror-utils "^0.9.6" prosemirror-utils "^0.9.6"
tiptap@^1.27.1, tiptap@^1.29.0: tiptap@^1.29.1:
version "1.29.0" version "1.29.1"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.29.0.tgz#646cc013f5be1095e8ae1b63da40e4017e66955e" resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.29.1.tgz#9a8d8b360ce53491556f535b47a9a631e3a1808f"
integrity sha512-W6UwiQbD2ybtU3Ac8XggPspx0wg0KXWrH93+BFuod6eTnVpZmXVeeymqHef16/aXGMmf+/aJiiY7a1Tvi+e6cg== integrity sha512-clb92b4/Ej83/bGLCnV8V3vifFN99B1HOvlP9D0U3Ym0jKwnryvk285oWl7255D9bvjukSVwmx4vWnBIZmpGUA==
dependencies: dependencies:
prosemirror-commands "1.1.4" prosemirror-commands "1.1.4"
prosemirror-dropcursor "1.3.2" prosemirror-dropcursor "1.3.2"
@@ -11574,8 +11703,8 @@ tiptap@^1.27.1, tiptap@^1.29.0:
prosemirror-model "1.10.0" prosemirror-model "1.10.0"
prosemirror-state "1.3.3" prosemirror-state "1.3.3"
prosemirror-view "1.15.0" prosemirror-view "1.15.0"
tiptap-commands "^1.14.0" tiptap-commands "^1.14.1"
tiptap-utils "^1.10.0" tiptap-utils "^1.10.1"
titleize@^2.1.0: titleize@^2.1.0:
version "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" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
vue-awesome@^4.0.0: vue-awesome@^4.1.0:
version "4.0.2" version "4.1.0"
resolved "https://registry.yarnpkg.com/vue-awesome/-/vue-awesome-4.0.2.tgz#20b65f24486698e82599cf804d12d98300434000" resolved "https://registry.yarnpkg.com/vue-awesome/-/vue-awesome-4.1.0.tgz#1caf50eb1ed0193f3c5ba19cbde9bea356cbc78c"
integrity sha512-TE9hVwyVrGnBetO/MJwZ/7qLO6Vgr/WrDtIA7vwNryoLdA2jfRcKRw29KacpU5xj3wzZhHfYJ2xJLxfirhmH5Q== integrity sha512-4n+hg8KIMrwjXV6sRHcRZd18Somih5j4Yk2ZOv95pnvDpzbBkIYW4ktfivhqgNt50m0zDjmeEWiy1iVLtcccfw==
dependencies: 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: vue-client-only@^2.0.0:
version "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" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== 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: vuex@^3.5.1:
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" 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" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
webidl-conversions@^6.0.0: webidl-conversions@^6.1.0:
version "6.1.0" version "6.1.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
@@ -12706,13 +12857,6 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 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: xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 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" y18n "^4.0.0"
yargs-parser "^13.1.2" yargs-parser "^13.1.2"
yargs@^15.4.0: yargs@^15.4.1:
version "15.4.0" version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.0.tgz#53949fb768309bac1843de9b17b80051e9805ec2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw== integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
dependencies: dependencies:
cliui "^6.0.0" cliui "^6.0.0"
decamelize "^3.2.0" decamelize "^1.2.0"
find-up "^4.1.0" find-up "^4.1.0"
get-caller-file "^2.0.1" get-caller-file "^2.0.1"
require-directory "^2.1.1" require-directory "^2.1.1"