12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 'use strict'
- import $ from 'jquery'
- import Vue from 'vue'
- import _ from 'lodash'
- 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')
- }
- module.exports = (mde, mdeModalOpenState) => {
- // Vue Video instance
- let vueVideo = new Vue({
- el: '#modal-editor-video',
- data: {
- link: ''
- },
- methods: {
- open: (ev) => {
- $('#modal-editor-video').addClass('is-active')
- $('#modal-editor-video input').focus()
- },
- cancel: (ev) => {
- mdeModalOpenState = false // eslint-disable-line no-undef
- $('#modal-editor-video').removeClass('is-active')
- vueVideo.link = ''
- },
- insertVideo: (ev) => {
- if (mde.codemirror.doc.somethingSelected()) {
- mde.codemirror.execCommand('singleSelection')
- }
- // Guess video type
- let videoType = _.findKey(videoRules, (vr) => {
- return vr.test(vueVideo.link)
- })
- if (_.isNil(videoType)) {
- videoType = 'video'
- }
- // Insert video tag
- let videoText = '[video](' + vueVideo.link + '){.' + videoType + '}\n'
- mde.codemirror.doc.replaceSelection(videoText)
- vueVideo.cancel()
- }
- }
- })
- return vueVideo
- }
|