mirror of https://github.com/Requarks/wiki.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.1 KiB
94 lines
3.1 KiB
<template lang="pug">
|
|
transition(:duration="400")
|
|
.modal(v-show='isShown', v-cloak)
|
|
transition(name='modal-background')
|
|
.modal-background(v-show='isShown')
|
|
.modal-container
|
|
transition(name='modal-content')
|
|
.modal-content(v-show='isShown')
|
|
header.is-green
|
|
span {{ $t('editor.videotitle') }}
|
|
section
|
|
label.label
|
|
p.control.is-fullwidth
|
|
input.input(type='text', placeholder='https://www.youtube.com/watch?v=xxxxxxxxxxx', v-model='link', ref='editorVideoInput', @keyup.enter='insertVideo', @keyup.esc='cancel')
|
|
span.help.is-red(v-show='isInvalid') {{ $t('editor.videonotsupported') }}
|
|
.note {{ $t('editor.videosupportedtitle') }}
|
|
ul
|
|
li
|
|
i.icon-youtube-play
|
|
span Youtube
|
|
li
|
|
i.icon-vimeo
|
|
span Vimeo
|
|
li
|
|
i.nc-icon-outline.media-1_play-69
|
|
span Dailymotion
|
|
li
|
|
i.icon-video
|
|
span {{ $t('editor.videoanymp4file') }}
|
|
footer
|
|
a.button.is-grey.is-outlined(v-on:click='cancel') {{ $t('editor.discard') }}
|
|
a.button.is-green(v-on:click='insertVideo') {{ $t('editor.videoinsert') }}
|
|
</template>
|
|
|
|
<script>
|
|
const videoRules = {
|
|
'youtube': new RegExp('/(?:(?:youtu\\.be\\/|v\\/|vi\\/|u\\/\\w\\/|embed\\/)|(?:(?:watch)?\\?v(?:i)?=|&v(?:i)?=))([^#&?]*).*/', 'i'),
|
|
'vimeo': new RegExp('/vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)/', 'i'),
|
|
'dailymotion': new RegExp('/(?:dailymotion\\.com(?:\\/embed)?(?:\\/video|\\/hub)|dai\\.ly)\\/([0-9a-z]+)(?:[-_0-9a-zA-Z]+(?:#video=)?([a-z0-9]+)?)?/', 'i')
|
|
}
|
|
|
|
export default {
|
|
name: 'editor-video',
|
|
data () {
|
|
return {
|
|
link: '',
|
|
isInvalid: false
|
|
}
|
|
},
|
|
computed: {
|
|
isShown () {
|
|
return this.$store.state.editorVideo.shown
|
|
}
|
|
},
|
|
methods: {
|
|
init () {
|
|
let self = this
|
|
self.isInvalid = false
|
|
self._.delay(() => {
|
|
self.$refs.editorVideoInput.focus()
|
|
}, 100)
|
|
},
|
|
cancel () {
|
|
this.$store.dispatch('editorVideo/close')
|
|
},
|
|
insertVideo () {
|
|
let self = this
|
|
|
|
if (this._.isEmpty(self.link) || self.link.length < 5) {
|
|
this.isInvalid = true
|
|
return
|
|
}
|
|
|
|
let videoType = this._.findKey(videoRules, (vr) => {
|
|
return vr.test(self.link)
|
|
})
|
|
if (this._.isNil(videoType)) {
|
|
videoType = 'video'
|
|
}
|
|
let videoText = '[video](' + this.link + '){.' + videoType + '}\n'
|
|
this.$store.dispatch('editor/insert', videoText)
|
|
this.$store.dispatch('alert', {
|
|
style: 'blue',
|
|
icon: 'media-1_action-74',
|
|
msg: self.$t('editor.videosuccess')
|
|
})
|
|
this.cancel()
|
|
}
|
|
},
|
|
mounted () {
|
|
this.$root.$on('editorVideo/init', this.init)
|
|
}
|
|
}
|
|
</script>
|