| 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.icon-film                    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: 'video',          msg: self.$t('editor.videosuccess')        })        this.cancel()      }    },    mounted () {      this.$root.$on('editorVideo/init', this.init)    }  }</script>
 |