nl_tokens: Setup captions
pl_tokens: function setup ( ) { // Requires UI support if ( ! this . supported . ui ) { return ; } // Only Vimeo and HTML5 video supported at this point if ( ! this . isVideo || this . isYouTube || this . isHTML5 && ! support . textTracks ) { // Clear menu and hide if ( is$1 . array ( this . config . controls ) && this . config . controls . includes ( 'settings' ) && this . config . settings . includes ( 'captions' ) ) { controls . setCaptionsMenu . call ( this ) ; } return ; } // Inject the container if ( ! is$1 . element ( this . elements . captions ) ) { this . elements . captions = createElement ( 'div' , getAttributesFromSelector ( this . config . selectors . captions ) ) ; insertAfter ( this . elements . captions , this . elements . wrapper ) ; } // Fix IE captions if CORS is used // Fetch captions and inject as blobs instead (data URIs not supported!) if ( browser . isIE && window . URL ) { var elements = this . media . querySelectorAll ( 'track' ) ; Array . from ( elements ) . forEach ( function ( track ) { var src = track . getAttribute ( 'src' ) ; var url = parseUrl$2 ( src ) ; if ( url !== null && url . hostname !== window . <mask> . href . hostname && [ 'http:' , 'https:' ] . includes ( url . protocol ) ) { fetch ( src , 'blob' ) . then ( function ( blob ) { track . setAttribute ( 'src' , window . URL . createObjectURL ( blob ) ) ; } ) . catch ( function ( ) { removeElement ( track ) ; } ) ; } } ) ; } // Get and set initial data // The "preferred" options are not realized unless / until the wanted language has a match // * languages: Array of user's browser languages. // * language:  The language preferred by user settings or config // * active:    The state preferred by user settings or config // * toggled:   The real captions state var browserLanguages = navigator . languages || [ navigator . language || navigator . userLanguage || 'en' ] ; var languages = dedupe ( browserLanguages . map ( function ( language ) { return language . split ( '-' ) [ 0 ] ; } ) ) ; var language = ( this . storage . get ( 'language' ) || this . config . captions . language || 'auto' ) . toLowerCase ( ) ; // Use first browser language when language is 'auto' if ( language === 'auto' ) { var _languages = _slicedToArray ( languages , 1 ) ; language = _languages [ 0 ] ; } var active = this . storage . get ( 'captions' ) ; if ( ! is$1 . boolean ( active ) ) { active = this . config . captions . active ; } Object . assign ( this . captions , { toggled : false , active : active , language : language , languages : languages } ) ; // Watch changes to textTracks and update captions menu if ( this . isHTML5 ) { var trackEvents = this . config . captions . update ? 'addtrack removetrack' : 'removetrack' ; on . call ( this , this . media . textTracks , trackEvents , captions . update . bind ( this ) ) ; } // Update available languages in list next tick (the event must not be triggered before the listeners) setTimeout ( captions . update . bind ( this ) , 0 ) ; }