[feat] embed events

This commit is contained in:
les
2019-10-30 15:01:34 +01:00
parent ec92ce84bb
commit b09001a793
3 changed files with 52 additions and 7 deletions

View File

@@ -57,7 +57,10 @@ export default {
set_password: 'Imposta password', set_password: 'Imposta password',
copy_link: 'Copia link', copy_link: 'Copia link',
send_via_mail: 'Invia mail', send_via_mail: 'Invia mail',
add_to_calendar: 'Aggiungi al tuo calendario' add_to_calendar: 'Aggiungi al tuo calendario',
instances: 'Istanze',
copied: 'Copiato',
embed: 'Incorpora'
}, },
login: { login: {
@@ -159,7 +162,9 @@ export default {
enable_federation: 'Abilita la federazione!', enable_federation: 'Abilita la federazione!',
select_instance_timezone: 'Seleziona la timezone', select_instance_timezone: 'Seleziona la timezone',
enable_comments: 'Abilita commenti', enable_comments: 'Abilita commenti',
disable_gamification: 'Disabilita gamification' disable_gamification: 'Disabilita gamification',
block_instance: 'Blocca',
unblock_instance: 'Sblocca'
}, },
auth: { auth: {

View File

@@ -27,16 +27,22 @@
size='mini' :key='tag') {{tag}} size='mini' :key='tag') {{tag}}
//- info & actions for desktop //- info & actions for desktop
el-dialog.embedDialog(:visible.sync='showEmbed' :title='`Embed ${event.title}`')
EmbedEvent(:event='event')
el-col.d-none.d-lg-block(:md='6') el-col.d-none.d-lg-block(:md='6')
el-menu.menu.mt-2 el-menu.menu.mt-2
p <b>{{event|when}}</b> - {{event|to}} p <b>{{event|when}}</b> - {{event|to}}
p <b>{{event.place.name}}</b> - {{event.place.address}} p <b>{{event.place.name}}</b> - {{event.place.address}}
el-divider {{$t('common.actions')}} el-divider {{$t('common.actions')}}
el-menu-item(v-clipboard:success='copyLink' el-menu-item(
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-embed'></i> {{$t('common.embed')}}
//- TODO (ics of recurrent events) //- TODO (ics of recurrent events)
el-menu-item(v-if='!event.recurrent') el-menu-item(v-if='!event.recurrent')
a.d-block(:href='`${settings.baseurl}/api/event/${event.id}.ics`') {{$t('common.add_to_calendar')}} a.d-block(:href='`${settings.baseurl}/api/event/${event.id}.ics`') <i class='el-icon-cal'></i> {{$t('common.add_to_calendar')}}
EventAdmin(v-if='is_mine' :event='event') EventAdmin(v-if='is_mine' :event='event')
hr hr
@@ -63,14 +69,18 @@
<script> <script>
import { mapState, mapGetters } from 'vuex' import { mapState, mapGetters } from 'vuex'
import EventAdmin from './eventAdmin' import EventAdmin from './eventAdmin'
import EmbedEvent from './embedEvent'
import { Message } from 'element-ui'
import moment from 'dayjs' import moment from 'dayjs'
export default { export default {
name: 'Event', name: 'Event',
transition: null, transition: null,
components: { EventAdmin }, components: { EventAdmin, EmbedEvent },
data () { data () {
return { return {
showEmbed: false,
copied: false copied: false
} }
}, },
@@ -170,8 +180,7 @@ export default {
}, },
methods: { methods: {
copyLink () { copyLink () {
this.copied = true Message({ message: this.$t('common.copied'), type: 'success' })
setTimeout(() => { this.copied = false }, 3000)
}, },
comment_filter (value) { comment_filter (value) {
return value.replace(/<a.*href="([^">]+).*>(?:.(?!<\/a>))*.<\/a>/, (orig, url) => { return value.replace(/<a.*href="([^">]+).*>(?:.(?!<\/a>))*.<\/a>/, (orig, url) => {
@@ -194,6 +203,14 @@ export default {
margin-bottom: 30px; margin-bottom: 30px;
padding-top: 0px; padding-top: 0px;
.embedDialog {
.el-dialog {
min-height: 500px;
max-width: 1000px;
width: 100%;
}
}
.head { .head {
z-index: 1; z-index: 1;
position: sticky; position: sticky;

View File

@@ -0,0 +1,23 @@
<template lang='pug'>
el-row
el-col(:span='12')
el-input(v-model='code')
el-col(:span='12' v-html='code')
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'embedEvent',
props: ['event'],
computed: {
...mapState(['settings']),
code () {
const style = "style='border: 0; width: 100%; height: 215px;'"
const src = `${this.settings.baseurl}/embed/${this.event.id}`
const code = `<iframe ${style} src="${src}"></iframe>`
return code
}
}
}
</script>