12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <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>
|