Use native addEventListener instead of jquery's .on (#2612)
This commit is contained in:
		
							parent
							
								
									facbbf6acf
								
							
						
					
					
						commit
						c1a78d878e
					
				| 
						 | 
				
			
			@ -9,7 +9,6 @@ import FtPrompt from './components/ft-prompt/ft-prompt.vue'
 | 
			
		|||
import FtButton from './components/ft-button/ft-button.vue'
 | 
			
		||||
import FtToast from './components/ft-toast/ft-toast.vue'
 | 
			
		||||
import FtProgressBar from './components/ft-progress-bar/ft-progress-bar.vue'
 | 
			
		||||
import $ from 'jquery'
 | 
			
		||||
import { marked } from 'marked'
 | 
			
		||||
import Parser from 'rss-parser'
 | 
			
		||||
import { IpcChannels } from '../constants'
 | 
			
		||||
| 
						 | 
				
			
			@ -288,31 +287,33 @@ export default Vue.extend({
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    activateKeyboardShortcuts: function () {
 | 
			
		||||
      $(document).on('keydown', this.handleKeyboardShortcuts)
 | 
			
		||||
      $(document).on('mousedown', () => {
 | 
			
		||||
      document.addEventListener('keydown', this.handleKeyboardShortcuts)
 | 
			
		||||
      document.addEventListener('mousedown', () => {
 | 
			
		||||
        this.hideOutlines = true
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleKeyboardShortcuts: function (event) {
 | 
			
		||||
      if (event.altKey) {
 | 
			
		||||
        switch (event.code) {
 | 
			
		||||
        switch (event.key) {
 | 
			
		||||
          case 'ArrowRight':
 | 
			
		||||
            this.$refs.topNav.historyForward()
 | 
			
		||||
            break
 | 
			
		||||
          case 'ArrowLeft':
 | 
			
		||||
            this.$refs.topNav.historyBack()
 | 
			
		||||
            break
 | 
			
		||||
          case 'KeyD':
 | 
			
		||||
          case 'D':
 | 
			
		||||
          case 'd':
 | 
			
		||||
            this.$refs.topNav.focusSearch()
 | 
			
		||||
            break
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      switch (event.code) {
 | 
			
		||||
      switch (event.key) {
 | 
			
		||||
        case 'Tab':
 | 
			
		||||
          this.hideOutlines = false
 | 
			
		||||
          break
 | 
			
		||||
        case 'KeyL':
 | 
			
		||||
        case 'L':
 | 
			
		||||
        case 'l':
 | 
			
		||||
          if ((process.platform !== 'darwin' && event.ctrlKey) ||
 | 
			
		||||
            (process.platform === 'darwin' && event.metaKey)) {
 | 
			
		||||
            this.$refs.topNav.focusSearch()
 | 
			
		||||
| 
						 | 
				
			
			@ -322,22 +323,26 @@ export default Vue.extend({
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    openAllLinksExternally: function () {
 | 
			
		||||
      $(document).on('click', 'a[href^="http"]', (event) => {
 | 
			
		||||
      const isExternalLink = (event) => event.target.tagName === 'A' && event.target.href.startsWith('http')
 | 
			
		||||
 | 
			
		||||
      document.addEventListener('click', (event) => {
 | 
			
		||||
        if (isExternalLink(event)) {
 | 
			
		||||
          this.handleLinkClick(event)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
      $(document).on('auxclick', 'a[href^="http"]', (event) => {
 | 
			
		||||
      document.addEventListener('auxclick', (event) => {
 | 
			
		||||
        // auxclick fires for all clicks not performed with the primary button
 | 
			
		||||
        // only handle the link click if it was the middle button,
 | 
			
		||||
        // otherwise the context menu breaks
 | 
			
		||||
        if (event.button === 1) {
 | 
			
		||||
        if (isExternalLink(event) && event.button === 1) {
 | 
			
		||||
          this.handleLinkClick(event)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    handleLinkClick: function (event) {
 | 
			
		||||
      const el = event.currentTarget
 | 
			
		||||
      const el = event.target
 | 
			
		||||
      event.preventDefault()
 | 
			
		||||
 | 
			
		||||
      // Check if it's a YouTube link
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ export default Vue.extend({
 | 
			
		|||
    'ft-card': FtCard
 | 
			
		||||
  },
 | 
			
		||||
  beforeRouteLeave: function () {
 | 
			
		||||
    document.removeEventListener('keydown', this.keyboardShortcutHandler)
 | 
			
		||||
    if (this.player !== null) {
 | 
			
		||||
      this.exitFullWindow()
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -433,7 +434,8 @@ export default Vue.extend({
 | 
			
		|||
          this.initializeSponsorBlock()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $(document).on('keydown', this.keyboardShortcutHandler)
 | 
			
		||||
        document.removeEventListener('keydown', this.keyboardShortcutHandler)
 | 
			
		||||
        document.addEventListener('keydown', this.keyboardShortcutHandler)
 | 
			
		||||
 | 
			
		||||
        this.player.on('mousemove', this.hideMouseTimeout)
 | 
			
		||||
        this.player.on('mouseleave', this.removeMouseTimeout)
 | 
			
		||||
| 
						 | 
				
			
			@ -1078,13 +1080,6 @@ export default Vue.extend({
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    changeDurationByPercentage: function (percentage) {
 | 
			
		||||
      const duration = this.player.duration()
 | 
			
		||||
      const newTime = duration * percentage
 | 
			
		||||
 | 
			
		||||
      this.player.currentTime(newTime)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    changePlayBackRate: function (rate) {
 | 
			
		||||
      const newPlaybackRate = (this.player.playbackRate() + rate).toFixed(2)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1746,102 +1741,90 @@ export default Vue.extend({
 | 
			
		|||
 | 
			
		||||
    // This function should always be at the bottom of this file
 | 
			
		||||
    keyboardShortcutHandler: function (event) {
 | 
			
		||||
      const activeInputs = $('.ft-input')
 | 
			
		||||
 | 
			
		||||
      for (let i = 0; i < activeInputs.length; i++) {
 | 
			
		||||
        if (activeInputs[i] === document.activeElement) {
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (event.ctrlKey) {
 | 
			
		||||
      if (event.ctrlKey || document.activeElement.classList.contains('ft-input')) {
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (this.player !== null) {
 | 
			
		||||
        switch (event.which) {
 | 
			
		||||
          case 32:
 | 
			
		||||
            // Space Bar
 | 
			
		||||
        switch (event.key) {
 | 
			
		||||
          case ' ':
 | 
			
		||||
          case 'Spacebar': // older browsers might return spacebar instead of a space character
 | 
			
		||||
            // Toggle Play/Pause
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.togglePlayPause()
 | 
			
		||||
            break
 | 
			
		||||
          case 74:
 | 
			
		||||
            // J Key
 | 
			
		||||
          case 'J':
 | 
			
		||||
          case 'j':
 | 
			
		||||
            // Rewind by 2x the time-skip interval (in seconds)
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationBySeconds(-this.defaultSkipInterval * this.player.playbackRate() * 2)
 | 
			
		||||
            break
 | 
			
		||||
          case 75:
 | 
			
		||||
            // K Key
 | 
			
		||||
          case 'K':
 | 
			
		||||
          case 'k':
 | 
			
		||||
            // Toggle Play/Pause
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.togglePlayPause()
 | 
			
		||||
            break
 | 
			
		||||
          case 76:
 | 
			
		||||
            // L Key
 | 
			
		||||
          case 'L':
 | 
			
		||||
          case 'l':
 | 
			
		||||
            // Fast-Forward by 2x the time-skip interval (in seconds)
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationBySeconds(this.defaultSkipInterval * this.player.playbackRate() * 2)
 | 
			
		||||
            break
 | 
			
		||||
          case 79:
 | 
			
		||||
            // O Key
 | 
			
		||||
          case 'O':
 | 
			
		||||
          case 'o':
 | 
			
		||||
            // Decrease playback rate by 0.25x
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changePlayBackRate(-this.videoPlaybackRateInterval)
 | 
			
		||||
            break
 | 
			
		||||
          case 80:
 | 
			
		||||
            // P Key
 | 
			
		||||
          case 'P':
 | 
			
		||||
          case 'p':
 | 
			
		||||
            // Increase playback rate by 0.25x
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changePlayBackRate(this.videoPlaybackRateInterval)
 | 
			
		||||
            break
 | 
			
		||||
          case 70:
 | 
			
		||||
            // F Key
 | 
			
		||||
          case 'F':
 | 
			
		||||
          case 'f':
 | 
			
		||||
            // Toggle Fullscreen Playback
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.toggleFullscreen()
 | 
			
		||||
            break
 | 
			
		||||
          case 77:
 | 
			
		||||
            // M Key
 | 
			
		||||
          case 'M':
 | 
			
		||||
          case 'm':
 | 
			
		||||
            // Toggle Mute
 | 
			
		||||
            if (!event.metaKey) {
 | 
			
		||||
              event.preventDefault()
 | 
			
		||||
              this.toggleMute()
 | 
			
		||||
            }
 | 
			
		||||
            break
 | 
			
		||||
          case 67:
 | 
			
		||||
            // C Key
 | 
			
		||||
          case 'C':
 | 
			
		||||
          case 'c':
 | 
			
		||||
            // Toggle Captions
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.toggleCaptions()
 | 
			
		||||
            break
 | 
			
		||||
          case 38:
 | 
			
		||||
            // Up Arrow Key
 | 
			
		||||
          case 'ArrowUp':
 | 
			
		||||
            // Increase volume
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeVolume(0.05)
 | 
			
		||||
            break
 | 
			
		||||
          case 40:
 | 
			
		||||
            // Down Arrow Key
 | 
			
		||||
          case 'ArrowDown':
 | 
			
		||||
            // Decrease Volume
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeVolume(-0.05)
 | 
			
		||||
            break
 | 
			
		||||
          case 37:
 | 
			
		||||
            // Left Arrow Key
 | 
			
		||||
          case 'ArrowLeft':
 | 
			
		||||
            // Rewind by the time-skip interval (in seconds)
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationBySeconds(-this.defaultSkipInterval * this.player.playbackRate())
 | 
			
		||||
            break
 | 
			
		||||
          case 39:
 | 
			
		||||
            // Right Arrow Key
 | 
			
		||||
          case 'ArrowRight':
 | 
			
		||||
            // Fast-Forward by the time-skip interval (in seconds)
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationBySeconds(this.defaultSkipInterval * this.player.playbackRate())
 | 
			
		||||
            break
 | 
			
		||||
          case 73:
 | 
			
		||||
            // I Key
 | 
			
		||||
          case 'I':
 | 
			
		||||
          case 'i':
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            // Toggle Picture in Picture Mode
 | 
			
		||||
            if (this.format !== 'audio' && !this.player.isInPictureInPicture()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1850,99 +1833,56 @@ export default Vue.extend({
 | 
			
		|||
              this.player.exitPictureInPicture()
 | 
			
		||||
            }
 | 
			
		||||
            break
 | 
			
		||||
          case 49:
 | 
			
		||||
            // 1 Key
 | 
			
		||||
            // Jump to 10% in the video
 | 
			
		||||
          case '0':
 | 
			
		||||
          case '1':
 | 
			
		||||
          case '2':
 | 
			
		||||
          case '3':
 | 
			
		||||
          case '4':
 | 
			
		||||
          case '5':
 | 
			
		||||
          case '6':
 | 
			
		||||
          case '7':
 | 
			
		||||
          case '8':
 | 
			
		||||
          case '9': {
 | 
			
		||||
            // Jump to percentage in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.1)
 | 
			
		||||
 | 
			
		||||
            const percentage = parseInt(event.key) / 10
 | 
			
		||||
            const duration = this.player.duration()
 | 
			
		||||
            const newTime = duration * percentage
 | 
			
		||||
 | 
			
		||||
            this.player.currentTime(newTime)
 | 
			
		||||
            break
 | 
			
		||||
          case 50:
 | 
			
		||||
            // 2 Key
 | 
			
		||||
            // Jump to 20% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.2)
 | 
			
		||||
            break
 | 
			
		||||
          case 51:
 | 
			
		||||
            // 3 Key
 | 
			
		||||
            // Jump to 30% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.3)
 | 
			
		||||
            break
 | 
			
		||||
          case 52:
 | 
			
		||||
            // 4 Key
 | 
			
		||||
            // Jump to 40% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.4)
 | 
			
		||||
            break
 | 
			
		||||
          case 53:
 | 
			
		||||
            // 5 Key
 | 
			
		||||
            // Jump to 50% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.5)
 | 
			
		||||
            break
 | 
			
		||||
          case 54:
 | 
			
		||||
            // 6 Key
 | 
			
		||||
            // Jump to 60% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.6)
 | 
			
		||||
            break
 | 
			
		||||
          case 55:
 | 
			
		||||
            // 7 Key
 | 
			
		||||
            // Jump to 70% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.7)
 | 
			
		||||
            break
 | 
			
		||||
          case 56:
 | 
			
		||||
            // 8 Key
 | 
			
		||||
            // Jump to 80% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.8)
 | 
			
		||||
            break
 | 
			
		||||
          case 57:
 | 
			
		||||
            // 9 Key
 | 
			
		||||
            // Jump to 90% in the video
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0.9)
 | 
			
		||||
            break
 | 
			
		||||
          case 48:
 | 
			
		||||
            // 0 Key
 | 
			
		||||
            // Jump to 0% in the video (The beginning)
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.changeDurationByPercentage(0)
 | 
			
		||||
            break
 | 
			
		||||
          case 188:
 | 
			
		||||
            // , Key
 | 
			
		||||
          }
 | 
			
		||||
          case ',':
 | 
			
		||||
            // Return to previous frame
 | 
			
		||||
            this.framebyframe(-1)
 | 
			
		||||
            break
 | 
			
		||||
          case 190:
 | 
			
		||||
            // . Key
 | 
			
		||||
          case '.':
 | 
			
		||||
            // Advance to next frame
 | 
			
		||||
            this.framebyframe(1)
 | 
			
		||||
            break
 | 
			
		||||
          case 68:
 | 
			
		||||
            // D Key
 | 
			
		||||
          case 'D':
 | 
			
		||||
          case 'd':
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.toggleShowStatsModal()
 | 
			
		||||
            break
 | 
			
		||||
          case 27:
 | 
			
		||||
            // esc Key
 | 
			
		||||
          case 'Escape':
 | 
			
		||||
            // Exit full window
 | 
			
		||||
            event.preventDefault()
 | 
			
		||||
            this.exitFullWindow()
 | 
			
		||||
            break
 | 
			
		||||
          case 83:
 | 
			
		||||
            // S Key
 | 
			
		||||
          case 'S':
 | 
			
		||||
          case 's':
 | 
			
		||||
            // Toggle Full Window Mode
 | 
			
		||||
            this.toggleFullWindow()
 | 
			
		||||
            break
 | 
			
		||||
          case 84:
 | 
			
		||||
            // T Key
 | 
			
		||||
          case 'T':
 | 
			
		||||
          case 't':
 | 
			
		||||
            // Toggle Theatre Mode
 | 
			
		||||
            this.toggleTheatreMode()
 | 
			
		||||
            break
 | 
			
		||||
          case 85:
 | 
			
		||||
            // U Key
 | 
			
		||||
          case 'U':
 | 
			
		||||
          case 'u':
 | 
			
		||||
            // Take screenshot
 | 
			
		||||
            this.takeScreenshot()
 | 
			
		||||
            break
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue