diff options
| author | Albin Larsson <mail@albinlarsson.com> | 2018-05-27 05:08:18 +0200 | 
|---|---|---|
| committer | Albin Larsson <mail@albinlarsson.com> | 2018-05-28 05:44:54 +0200 | 
| commit | 7aad747c25b07fedf4a4fc75095c560ea3c9899c (patch) | |
| tree | 26e05dde93ce7fb04355250111cfde98913d7e3d /src/js | |
| parent | e9684c20217300c15fc92a71c4c4a640c4784083 (diff) | |
| download | plyr-7aad747c25b07fedf4a4fc75095c560ea3c9899c.tar.lz plyr-7aad747c25b07fedf4a4fc75095c560ea3c9899c.tar.xz plyr-7aad747c25b07fedf4a4fc75095c560ea3c9899c.zip | |
Optimize captions code reused and ensure captionsenabled/captionsdisabled
will be sent on initial setup
Diffstat (limited to 'src/js')
| -rw-r--r-- | src/js/captions.js | 64 | ||||
| -rw-r--r-- | src/js/plyr.js | 21 | ||||
| -rw-r--r-- | src/js/ui.js | 6 | 
3 files changed, 32 insertions, 59 deletions
| diff --git a/src/js/captions.js b/src/js/captions.js index df717351..296888b2 100644 --- a/src/js/captions.js +++ b/src/js/captions.js @@ -27,17 +27,6 @@ const captions = {              this.captions.language = this.config.captions.language.toLowerCase();          } -        // Set captions enabled state if not set -        if (!utils.is.boolean(this.captions.active)) { -            const active = this.storage.get('captions'); - -            if (utils.is.boolean(active)) { -                this.captions.active = active; -            } else { -                this.captions.active = this.config.captions.active; -            } -        } -          // Only Vimeo and HTML5 video supported at this point          if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {              // Clear menu and hide @@ -55,17 +44,6 @@ const captions = {              utils.insertAfter(this.elements.captions, this.elements.wrapper);          } -        // Set the class hook -        utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); - -        // Get tracks -        const tracks = captions.getTracks.call(this); - -        // If no caption file exists, hide container for caption text -        if (utils.is.empty(tracks)) { -            return; -        } -          // Get browser info          const browser = utils.getBrowser(); @@ -94,14 +72,30 @@ const captions = {              });          } +        // Try to load the value from storage +        let active = this.storage.get('captions'); + +        // Otherwise fall back to the default config +        if (!utils.is.boolean(active)) { +            ({ active } = this.config.captions); +        } + +        // Set toggled state +        this.toggleCaptions(active); + +        // Update available languages in list +        captions.update.call(this); +    }, + +    update() {          // Set language          captions.setLanguage.call(this); -        // Enable UI -        captions.show.call(this); +        // Toggle the class hooks +        utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); -        // Set available languages in list -        if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) { +        // Update available languages in list +        if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {              controls.setCaptionsMenu.call(this);          }      }, @@ -247,24 +241,6 @@ const captions = {              this.debug.warn('No captions element to render to');          }      }, - -    // Display captions container and button (for initialization) -    show() { -        // Try to load the value from storage -        let active = this.storage.get('captions'); - -        // Otherwise fall back to the default config -        if (!utils.is.boolean(active)) { -            ({ active } = this.config.captions); -        } else { -            this.captions.active = active; -        } - -        if (active) { -            utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true); -            utils.toggleState(this.elements.buttons.captions, true); -        } -    },  };  export default captions; diff --git a/src/js/plyr.js b/src/js/plyr.js index 34b618bd..061225f8 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -838,24 +838,19 @@ class Plyr {          }          // If the method is called without parameter, toggle based on current value -        const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active); - -        // Nothing to change... -        if (this.captions.active === show) { -            return; -        } - -        // Set global -        this.captions.active = show; +        const active = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);          // Toggle state -        utils.toggleState(this.elements.buttons.captions, this.captions.active); +        utils.toggleState(this.elements.buttons.captions, active);          // Add class hook -        utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active); +        utils.toggleClass(this.elements.container, this.config.classNames.captions.active, active); -        // Trigger an event -        utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); +        // Update state and trigger event +        if (active !== this.captions.active) { +            this.captions.active = active; +            utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled'); +        }      }      /** diff --git a/src/js/ui.js b/src/js/ui.js index 3a8f2d05..0d8e532f 100644 --- a/src/js/ui.js +++ b/src/js/ui.js @@ -55,8 +55,10 @@ const ui = {          // Remove native controls          ui.toggleNativeControls.call(this); -        // Captions -        captions.setup.call(this); +        // Setup captions for html5 +        if (this.isHTML5) { +            captions.setup.call(this); +        }          // Reset volume          this.volume = null; | 
