video_attachment.js (1445B)
- const VideoAttachment = {
- props: ['attachment', 'controls'],
- data () {
- return {
- blocksSuspend: false,
- // Start from true because removing "loop" property seems buggy in Vue
- hasAudio: true
- }
- },
- computed: {
- loopVideo () {
- if (this.$store.getters.mergedConfig.loopVideoSilentOnly) {
- return !this.hasAudio
- }
- return this.$store.getters.mergedConfig.loopVideo
- }
- },
- methods: {
- onPlaying (e) {
- this.setHasAudio(e)
- if (this.loopVideo) {
- this.$emit('play', { looping: true })
- return
- }
- this.$emit('play')
- },
- onPaused (e) {
- this.$emit('pause')
- },
- setHasAudio (e) {
- const target = e.srcElement || e.target
- // If hasAudio is false, we've already marked this video to not have audio,
- // a video can't gain audio out of nowhere so don't bother checking again.
- if (!this.hasAudio) return
- if (typeof target.webkitAudioDecodedByteCount !== 'undefined') {
- // non-zero if video has audio track
- if (target.webkitAudioDecodedByteCount > 0) return
- }
- if (typeof target.mozHasAudio !== 'undefined') {
- // true if video has audio track
- if (target.mozHasAudio) return
- }
- if (typeof target.audioTracks !== 'undefined') {
- if (target.audioTracks.length > 0) return
- }
- this.hasAudio = false
- }
- }
- }
- export default VideoAttachment