balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

media-audiovideo.js (27603B)


      1 /******/ (function(modules) { // webpackBootstrap
      2 /******/ 	// The module cache
      3 /******/ 	var installedModules = {};
      4 /******/
      5 /******/ 	// The require function
      6 /******/ 	function __webpack_require__(moduleId) {
      7 /******/
      8 /******/ 		// Check if module is in cache
      9 /******/ 		if(installedModules[moduleId]) {
     10 /******/ 			return installedModules[moduleId].exports;
     11 /******/ 		}
     12 /******/ 		// Create a new module (and put it into the cache)
     13 /******/ 		var module = installedModules[moduleId] = {
     14 /******/ 			i: moduleId,
     15 /******/ 			l: false,
     16 /******/ 			exports: {}
     17 /******/ 		};
     18 /******/
     19 /******/ 		// Execute the module function
     20 /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
     21 /******/
     22 /******/ 		// Flag the module as loaded
     23 /******/ 		module.l = true;
     24 /******/
     25 /******/ 		// Return the exports of the module
     26 /******/ 		return module.exports;
     27 /******/ 	}
     28 /******/
     29 /******/
     30 /******/ 	// expose the modules object (__webpack_modules__)
     31 /******/ 	__webpack_require__.m = modules;
     32 /******/
     33 /******/ 	// expose the module cache
     34 /******/ 	__webpack_require__.c = installedModules;
     35 /******/
     36 /******/ 	// define getter function for harmony exports
     37 /******/ 	__webpack_require__.d = function(exports, name, getter) {
     38 /******/ 		if(!__webpack_require__.o(exports, name)) {
     39 /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
     40 /******/ 		}
     41 /******/ 	};
     42 /******/
     43 /******/ 	// define __esModule on exports
     44 /******/ 	__webpack_require__.r = function(exports) {
     45 /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
     46 /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
     47 /******/ 		}
     48 /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
     49 /******/ 	};
     50 /******/
     51 /******/ 	// create a fake namespace object
     52 /******/ 	// mode & 1: value is a module id, require it
     53 /******/ 	// mode & 2: merge all properties of value into the ns
     54 /******/ 	// mode & 4: return value when already ns object
     55 /******/ 	// mode & 8|1: behave like require
     56 /******/ 	__webpack_require__.t = function(value, mode) {
     57 /******/ 		if(mode & 1) value = __webpack_require__(value);
     58 /******/ 		if(mode & 8) return value;
     59 /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
     60 /******/ 		var ns = Object.create(null);
     61 /******/ 		__webpack_require__.r(ns);
     62 /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
     63 /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
     64 /******/ 		return ns;
     65 /******/ 	};
     66 /******/
     67 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
     68 /******/ 	__webpack_require__.n = function(module) {
     69 /******/ 		var getter = module && module.__esModule ?
     70 /******/ 			function getDefault() { return module['default']; } :
     71 /******/ 			function getModuleExports() { return module; };
     72 /******/ 		__webpack_require__.d(getter, 'a', getter);
     73 /******/ 		return getter;
     74 /******/ 	};
     75 /******/
     76 /******/ 	// Object.prototype.hasOwnProperty.call
     77 /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
     78 /******/
     79 /******/ 	// __webpack_public_path__
     80 /******/ 	__webpack_require__.p = "";
     81 /******/
     82 /******/
     83 /******/ 	// Load entry module and return exports
     84 /******/ 	return __webpack_require__(__webpack_require__.s = 0);
     85 /******/ })
     86 /************************************************************************/
     87 /******/ ({
     88 
     89 /***/ "+RYg":
     90 /***/ (function(module, exports) {
     91 
     92 /**
     93  * wp.media.model.PostMedia
     94  *
     95  * Shared model class for audio and video. Updates the model after
     96  *   "Add Audio|Video Source" and "Replace Audio|Video" states return
     97  *
     98  * @memberOf wp.media.model
     99  *
    100  * @class
    101  * @augments Backbone.Model
    102  */
    103 var PostMedia = Backbone.Model.extend(/** @lends wp.media.model.PostMedia.prototype */{
    104 	initialize: function() {
    105 		this.attachment = false;
    106 	},
    107 
    108 	setSource: function( attachment ) {
    109 		this.attachment = attachment;
    110 		this.extension = attachment.get( 'filename' ).split('.').pop();
    111 
    112 		if ( this.get( 'src' ) && this.extension === this.get( 'src' ).split('.').pop() ) {
    113 			this.unset( 'src' );
    114 		}
    115 
    116 		if ( _.contains( wp.media.view.settings.embedExts, this.extension ) ) {
    117 			this.set( this.extension, this.attachment.get( 'url' ) );
    118 		} else {
    119 			this.unset( this.extension );
    120 		}
    121 	},
    122 
    123 	changeAttachment: function( attachment ) {
    124 		this.setSource( attachment );
    125 
    126 		this.unset( 'src' );
    127 		_.each( _.without( wp.media.view.settings.embedExts, this.extension ), function( ext ) {
    128 			this.unset( ext );
    129 		}, this );
    130 	}
    131 });
    132 
    133 module.exports = PostMedia;
    134 
    135 
    136 /***/ }),
    137 
    138 /***/ "/4UI":
    139 /***/ (function(module, exports) {
    140 
    141 /* global MediaElementPlayer */
    142 var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
    143 	$ = jQuery,
    144 	MediaDetails;
    145 
    146 /**
    147  * wp.media.view.MediaDetails
    148  *
    149  * @memberOf wp.media.view
    150  *
    151  * @class
    152  * @augments wp.media.view.Settings.AttachmentDisplay
    153  * @augments wp.media.view.Settings
    154  * @augments wp.media.View
    155  * @augments wp.Backbone.View
    156  * @augments Backbone.View
    157  */
    158 MediaDetails = AttachmentDisplay.extend(/** @lends wp.media.view.MediaDetails.prototype */{
    159 	initialize: function() {
    160 		_.bindAll(this, 'success');
    161 		this.players = [];
    162 		this.listenTo( this.controller.states, 'close', wp.media.mixin.unsetPlayers );
    163 		this.on( 'ready', this.setPlayer );
    164 		this.on( 'media:setting:remove', wp.media.mixin.unsetPlayers, this );
    165 		this.on( 'media:setting:remove', this.render );
    166 		this.on( 'media:setting:remove', this.setPlayer );
    167 
    168 		AttachmentDisplay.prototype.initialize.apply( this, arguments );
    169 	},
    170 
    171 	events: function(){
    172 		return _.extend( {
    173 			'click .remove-setting' : 'removeSetting',
    174 			'change .content-track' : 'setTracks',
    175 			'click .remove-track' : 'setTracks',
    176 			'click .add-media-source' : 'addSource'
    177 		}, AttachmentDisplay.prototype.events );
    178 	},
    179 
    180 	prepare: function() {
    181 		return _.defaults({
    182 			model: this.model.toJSON()
    183 		}, this.options );
    184 	},
    185 
    186 	/**
    187 	 * Remove a setting's UI when the model unsets it
    188 	 *
    189 	 * @fires wp.media.view.MediaDetails#media:setting:remove
    190 	 *
    191 	 * @param {Event} e
    192 	 */
    193 	removeSetting : function(e) {
    194 		var wrap = $( e.currentTarget ).parent(), setting;
    195 		setting = wrap.find( 'input' ).data( 'setting' );
    196 
    197 		if ( setting ) {
    198 			this.model.unset( setting );
    199 			this.trigger( 'media:setting:remove', this );
    200 		}
    201 
    202 		wrap.remove();
    203 	},
    204 
    205 	/**
    206 	 *
    207 	 * @fires wp.media.view.MediaDetails#media:setting:remove
    208 	 */
    209 	setTracks : function() {
    210 		var tracks = '';
    211 
    212 		_.each( this.$('.content-track'), function(track) {
    213 			tracks += $( track ).val();
    214 		} );
    215 
    216 		this.model.set( 'content', tracks );
    217 		this.trigger( 'media:setting:remove', this );
    218 	},
    219 
    220 	addSource : function( e ) {
    221 		this.controller.lastMime = $( e.currentTarget ).data( 'mime' );
    222 		this.controller.setState( 'add-' + this.controller.defaults.id + '-source' );
    223 	},
    224 
    225 	loadPlayer: function () {
    226 		this.players.push( new MediaElementPlayer( this.media, this.settings ) );
    227 		this.scriptXhr = false;
    228 	},
    229 
    230 	setPlayer : function() {
    231 		var src;
    232 
    233 		if ( this.players.length || ! this.media || this.scriptXhr ) {
    234 			return;
    235 		}
    236 
    237 		src = this.model.get( 'src' );
    238 
    239 		if ( src && src.indexOf( 'vimeo' ) > -1 && ! ( 'Vimeo' in window ) ) {
    240 			this.scriptXhr = $.getScript( 'https://player.vimeo.com/api/player.js', _.bind( this.loadPlayer, this ) );
    241 		} else {
    242 			this.loadPlayer();
    243 		}
    244 	},
    245 
    246 	/**
    247 	 * @abstract
    248 	 */
    249 	setMedia : function() {
    250 		return this;
    251 	},
    252 
    253 	success : function(mejs) {
    254 		var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay;
    255 
    256 		if ( 'flash' === mejs.pluginType && autoplay ) {
    257 			mejs.addEventListener( 'canplay', function() {
    258 				mejs.play();
    259 			}, false );
    260 		}
    261 
    262 		this.mejs = mejs;
    263 	},
    264 
    265 	/**
    266 	 * @return {media.view.MediaDetails} Returns itself to allow chaining.
    267 	 */
    268 	render: function() {
    269 		AttachmentDisplay.prototype.render.apply( this, arguments );
    270 
    271 		setTimeout( _.bind( function() {
    272 			this.scrollToTop();
    273 		}, this ), 10 );
    274 
    275 		this.settings = _.defaults( {
    276 			success : this.success
    277 		}, wp.media.mixin.mejsSettings );
    278 
    279 		return this.setMedia();
    280 	},
    281 
    282 	scrollToTop: function() {
    283 		this.$( '.embed-media-settings' ).scrollTop( 0 );
    284 	}
    285 },/** @lends wp.media.view.MediaDetails */{
    286 	instances : 0,
    287 	/**
    288 	 * When multiple players in the DOM contain the same src, things get weird.
    289 	 *
    290 	 * @param {HTMLElement} elem
    291 	 * @return {HTMLElement}
    292 	 */
    293 	prepareSrc : function( elem ) {
    294 		var i = MediaDetails.instances++;
    295 		_.each( $( elem ).find( 'source' ), function( source ) {
    296 			source.src = [
    297 				source.src,
    298 				source.src.indexOf('?') > -1 ? '&' : '?',
    299 				'_=',
    300 				i
    301 			].join('');
    302 		} );
    303 
    304 		return elem;
    305 	}
    306 });
    307 
    308 module.exports = MediaDetails;
    309 
    310 
    311 /***/ }),
    312 
    313 /***/ 0:
    314 /***/ (function(module, exports, __webpack_require__) {
    315 
    316 module.exports = __webpack_require__("pMD9");
    317 
    318 
    319 /***/ }),
    320 
    321 /***/ "6pp6":
    322 /***/ (function(module, exports) {
    323 
    324 var State = wp.media.controller.State,
    325 	l10n = wp.media.view.l10n,
    326 	AudioDetails;
    327 
    328 /**
    329  * wp.media.controller.AudioDetails
    330  *
    331  * The controller for the Audio Details state
    332  *
    333  * @memberOf wp.media.controller
    334  *
    335  * @class
    336  * @augments wp.media.controller.State
    337  * @augments Backbone.Model
    338  */
    339 AudioDetails = State.extend(/** @lends wp.media.controller.AudioDetails.prototype */{
    340 	defaults: {
    341 		id: 'audio-details',
    342 		toolbar: 'audio-details',
    343 		title: l10n.audioDetailsTitle,
    344 		content: 'audio-details',
    345 		menu: 'audio-details',
    346 		router: false,
    347 		priority: 60
    348 	},
    349 
    350 	initialize: function( options ) {
    351 		this.media = options.media;
    352 		State.prototype.initialize.apply( this, arguments );
    353 	}
    354 });
    355 
    356 module.exports = AudioDetails;
    357 
    358 
    359 /***/ }),
    360 
    361 /***/ "Bdio":
    362 /***/ (function(module, exports) {
    363 
    364 var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
    365 	MediaLibrary = wp.media.controller.MediaLibrary,
    366 
    367 	l10n = wp.media.view.l10n,
    368 	AudioDetails;
    369 
    370 /**
    371  * wp.media.view.MediaFrame.AudioDetails
    372  *
    373  * @memberOf wp.media.view.MediaFrame
    374  *
    375  * @class
    376  * @augments wp.media.view.MediaFrame.MediaDetails
    377  * @augments wp.media.view.MediaFrame.Select
    378  * @augments wp.media.view.MediaFrame
    379  * @augments wp.media.view.Frame
    380  * @augments wp.media.View
    381  * @augments wp.Backbone.View
    382  * @augments Backbone.View
    383  * @mixes wp.media.controller.StateMachine
    384  */
    385 AudioDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.AudioDetails.prototype */{
    386 	defaults: {
    387 		id:      'audio',
    388 		url:     '',
    389 		menu:    'audio-details',
    390 		content: 'audio-details',
    391 		toolbar: 'audio-details',
    392 		type:    'link',
    393 		title:    l10n.audioDetailsTitle,
    394 		priority: 120
    395 	},
    396 
    397 	initialize: function( options ) {
    398 		options.DetailsView = wp.media.view.AudioDetails;
    399 		options.cancelText = l10n.audioDetailsCancel;
    400 		options.addText = l10n.audioAddSourceTitle;
    401 
    402 		MediaDetails.prototype.initialize.call( this, options );
    403 	},
    404 
    405 	bindHandlers: function() {
    406 		MediaDetails.prototype.bindHandlers.apply( this, arguments );
    407 
    408 		this.on( 'toolbar:render:replace-audio', this.renderReplaceToolbar, this );
    409 		this.on( 'toolbar:render:add-audio-source', this.renderAddSourceToolbar, this );
    410 	},
    411 
    412 	createStates: function() {
    413 		this.states.add([
    414 			new wp.media.controller.AudioDetails( {
    415 				media: this.media
    416 			} ),
    417 
    418 			new MediaLibrary( {
    419 				type: 'audio',
    420 				id: 'replace-audio',
    421 				title: l10n.audioReplaceTitle,
    422 				toolbar: 'replace-audio',
    423 				media: this.media,
    424 				menu: 'audio-details'
    425 			} ),
    426 
    427 			new MediaLibrary( {
    428 				type: 'audio',
    429 				id: 'add-audio-source',
    430 				title: l10n.audioAddSourceTitle,
    431 				toolbar: 'add-audio-source',
    432 				media: this.media,
    433 				menu: false
    434 			} )
    435 		]);
    436 	}
    437 });
    438 
    439 module.exports = AudioDetails;
    440 
    441 
    442 /***/ }),
    443 
    444 /***/ "LX3m":
    445 /***/ (function(module, exports) {
    446 
    447 var MediaDetails = wp.media.view.MediaDetails,
    448 	AudioDetails;
    449 
    450 /**
    451  * wp.media.view.AudioDetails
    452  *
    453  * @memberOf wp.media.view
    454  *
    455  * @class
    456  * @augments wp.media.view.MediaDetails
    457  * @augments wp.media.view.Settings.AttachmentDisplay
    458  * @augments wp.media.view.Settings
    459  * @augments wp.media.View
    460  * @augments wp.Backbone.View
    461  * @augments Backbone.View
    462  */
    463 AudioDetails = MediaDetails.extend(/** @lends wp.media.view.AudioDetails.prototype */{
    464 	className: 'audio-details',
    465 	template:  wp.template('audio-details'),
    466 
    467 	setMedia: function() {
    468 		var audio = this.$('.wp-audio-shortcode');
    469 
    470 		if ( audio.find( 'source' ).length ) {
    471 			if ( audio.is(':hidden') ) {
    472 				audio.show();
    473 			}
    474 			this.media = MediaDetails.prepareSrc( audio.get(0) );
    475 		} else {
    476 			audio.hide();
    477 			this.media = false;
    478 		}
    479 
    480 		return this;
    481 	}
    482 });
    483 
    484 module.exports = AudioDetails;
    485 
    486 
    487 /***/ }),
    488 
    489 /***/ "MT9K":
    490 /***/ (function(module, exports) {
    491 
    492 var MediaDetails = wp.media.view.MediaDetails,
    493 	VideoDetails;
    494 
    495 /**
    496  * wp.media.view.VideoDetails
    497  *
    498  * @memberOf wp.media.view
    499  *
    500  * @class
    501  * @augments wp.media.view.MediaDetails
    502  * @augments wp.media.view.Settings.AttachmentDisplay
    503  * @augments wp.media.view.Settings
    504  * @augments wp.media.View
    505  * @augments wp.Backbone.View
    506  * @augments Backbone.View
    507  */
    508 VideoDetails = MediaDetails.extend(/** @lends wp.media.view.VideoDetails.prototype */{
    509 	className: 'video-details',
    510 	template:  wp.template('video-details'),
    511 
    512 	setMedia: function() {
    513 		var video = this.$('.wp-video-shortcode');
    514 
    515 		if ( video.find( 'source' ).length ) {
    516 			if ( video.is(':hidden') ) {
    517 				video.show();
    518 			}
    519 
    520 			if ( ! video.hasClass( 'youtube-video' ) && ! video.hasClass( 'vimeo-video' ) ) {
    521 				this.media = MediaDetails.prepareSrc( video.get(0) );
    522 			} else {
    523 				this.media = video.get(0);
    524 			}
    525 		} else {
    526 			video.hide();
    527 			this.media = false;
    528 		}
    529 
    530 		return this;
    531 	}
    532 });
    533 
    534 module.exports = VideoDetails;
    535 
    536 
    537 /***/ }),
    538 
    539 /***/ "RQe2":
    540 /***/ (function(module, exports) {
    541 
    542 var Select = wp.media.view.MediaFrame.Select,
    543 	l10n = wp.media.view.l10n,
    544 	MediaDetails;
    545 
    546 /**
    547  * wp.media.view.MediaFrame.MediaDetails
    548  *
    549  * @memberOf wp.media.view.MediaFrame
    550  *
    551  * @class
    552  * @augments wp.media.view.MediaFrame.Select
    553  * @augments wp.media.view.MediaFrame
    554  * @augments wp.media.view.Frame
    555  * @augments wp.media.View
    556  * @augments wp.Backbone.View
    557  * @augments Backbone.View
    558  * @mixes wp.media.controller.StateMachine
    559  */
    560 MediaDetails = Select.extend(/** @lends wp.media.view.MediaFrame.MediaDetails.prototype */{
    561 	defaults: {
    562 		id:      'media',
    563 		url:     '',
    564 		menu:    'media-details',
    565 		content: 'media-details',
    566 		toolbar: 'media-details',
    567 		type:    'link',
    568 		priority: 120
    569 	},
    570 
    571 	initialize: function( options ) {
    572 		this.DetailsView = options.DetailsView;
    573 		this.cancelText = options.cancelText;
    574 		this.addText = options.addText;
    575 
    576 		this.media = new wp.media.model.PostMedia( options.metadata );
    577 		this.options.selection = new wp.media.model.Selection( this.media.attachment, { multiple: false } );
    578 		Select.prototype.initialize.apply( this, arguments );
    579 	},
    580 
    581 	bindHandlers: function() {
    582 		var menu = this.defaults.menu;
    583 
    584 		Select.prototype.bindHandlers.apply( this, arguments );
    585 
    586 		this.on( 'menu:create:' + menu, this.createMenu, this );
    587 		this.on( 'content:render:' + menu, this.renderDetailsContent, this );
    588 		this.on( 'menu:render:' + menu, this.renderMenu, this );
    589 		this.on( 'toolbar:render:' + menu, this.renderDetailsToolbar, this );
    590 	},
    591 
    592 	renderDetailsContent: function() {
    593 		var view = new this.DetailsView({
    594 			controller: this,
    595 			model: this.state().media,
    596 			attachment: this.state().media.attachment
    597 		}).render();
    598 
    599 		this.content.set( view );
    600 	},
    601 
    602 	renderMenu: function( view ) {
    603 		var lastState = this.lastState(),
    604 			previous = lastState && lastState.id,
    605 			frame = this;
    606 
    607 		view.set({
    608 			cancel: {
    609 				text:     this.cancelText,
    610 				priority: 20,
    611 				click:    function() {
    612 					if ( previous ) {
    613 						frame.setState( previous );
    614 					} else {
    615 						frame.close();
    616 					}
    617 				}
    618 			},
    619 			separateCancel: new wp.media.View({
    620 				className: 'separator',
    621 				priority: 40
    622 			})
    623 		});
    624 
    625 	},
    626 
    627 	setPrimaryButton: function(text, handler) {
    628 		this.toolbar.set( new wp.media.view.Toolbar({
    629 			controller: this,
    630 			items: {
    631 				button: {
    632 					style:    'primary',
    633 					text:     text,
    634 					priority: 80,
    635 					click:    function() {
    636 						var controller = this.controller;
    637 						handler.call( this, controller, controller.state() );
    638 						// Restore and reset the default state.
    639 						controller.setState( controller.options.state );
    640 						controller.reset();
    641 					}
    642 				}
    643 			}
    644 		}) );
    645 	},
    646 
    647 	renderDetailsToolbar: function() {
    648 		this.setPrimaryButton( l10n.update, function( controller, state ) {
    649 			controller.close();
    650 			state.trigger( 'update', controller.media.toJSON() );
    651 		} );
    652 	},
    653 
    654 	renderReplaceToolbar: function() {
    655 		this.setPrimaryButton( l10n.replace, function( controller, state ) {
    656 			var attachment = state.get( 'selection' ).single();
    657 			controller.media.changeAttachment( attachment );
    658 			state.trigger( 'replace', controller.media.toJSON() );
    659 		} );
    660 	},
    661 
    662 	renderAddSourceToolbar: function() {
    663 		this.setPrimaryButton( this.addText, function( controller, state ) {
    664 			var attachment = state.get( 'selection' ).single();
    665 			controller.media.setSource( attachment );
    666 			state.trigger( 'add-source', controller.media.toJSON() );
    667 		} );
    668 	}
    669 });
    670 
    671 module.exports = MediaDetails;
    672 
    673 
    674 /***/ }),
    675 
    676 /***/ "Xcj4":
    677 /***/ (function(module, exports) {
    678 
    679 /**
    680  * wp.media.controller.VideoDetails
    681  *
    682  * The controller for the Video Details state
    683  *
    684  * @memberOf wp.media.controller
    685  *
    686  * @class
    687  * @augments wp.media.controller.State
    688  * @augments Backbone.Model
    689  */
    690 var State = wp.media.controller.State,
    691 	l10n = wp.media.view.l10n,
    692 	VideoDetails;
    693 
    694 VideoDetails = State.extend(/** @lends wp.media.controller.VideoDetails.prototype */{
    695 	defaults: {
    696 		id: 'video-details',
    697 		toolbar: 'video-details',
    698 		title: l10n.videoDetailsTitle,
    699 		content: 'video-details',
    700 		menu: 'video-details',
    701 		router: false,
    702 		priority: 60
    703 	},
    704 
    705 	initialize: function( options ) {
    706 		this.media = options.media;
    707 		State.prototype.initialize.apply( this, arguments );
    708 	}
    709 });
    710 
    711 module.exports = VideoDetails;
    712 
    713 
    714 /***/ }),
    715 
    716 /***/ "m85o":
    717 /***/ (function(module, exports) {
    718 
    719 var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
    720 	MediaLibrary = wp.media.controller.MediaLibrary,
    721 	l10n = wp.media.view.l10n,
    722 	VideoDetails;
    723 
    724 /**
    725  * wp.media.view.MediaFrame.VideoDetails
    726  *
    727  * @memberOf wp.media.view.MediaFrame
    728  *
    729  * @class
    730  * @augments wp.media.view.MediaFrame.MediaDetails
    731  * @augments wp.media.view.MediaFrame.Select
    732  * @augments wp.media.view.MediaFrame
    733  * @augments wp.media.view.Frame
    734  * @augments wp.media.View
    735  * @augments wp.Backbone.View
    736  * @augments Backbone.View
    737  * @mixes wp.media.controller.StateMachine
    738  */
    739 VideoDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.VideoDetails.prototype */{
    740 	defaults: {
    741 		id:      'video',
    742 		url:     '',
    743 		menu:    'video-details',
    744 		content: 'video-details',
    745 		toolbar: 'video-details',
    746 		type:    'link',
    747 		title:    l10n.videoDetailsTitle,
    748 		priority: 120
    749 	},
    750 
    751 	initialize: function( options ) {
    752 		options.DetailsView = wp.media.view.VideoDetails;
    753 		options.cancelText = l10n.videoDetailsCancel;
    754 		options.addText = l10n.videoAddSourceTitle;
    755 
    756 		MediaDetails.prototype.initialize.call( this, options );
    757 	},
    758 
    759 	bindHandlers: function() {
    760 		MediaDetails.prototype.bindHandlers.apply( this, arguments );
    761 
    762 		this.on( 'toolbar:render:replace-video', this.renderReplaceToolbar, this );
    763 		this.on( 'toolbar:render:add-video-source', this.renderAddSourceToolbar, this );
    764 		this.on( 'toolbar:render:select-poster-image', this.renderSelectPosterImageToolbar, this );
    765 		this.on( 'toolbar:render:add-track', this.renderAddTrackToolbar, this );
    766 	},
    767 
    768 	createStates: function() {
    769 		this.states.add([
    770 			new wp.media.controller.VideoDetails({
    771 				media: this.media
    772 			}),
    773 
    774 			new MediaLibrary( {
    775 				type: 'video',
    776 				id: 'replace-video',
    777 				title: l10n.videoReplaceTitle,
    778 				toolbar: 'replace-video',
    779 				media: this.media,
    780 				menu: 'video-details'
    781 			} ),
    782 
    783 			new MediaLibrary( {
    784 				type: 'video',
    785 				id: 'add-video-source',
    786 				title: l10n.videoAddSourceTitle,
    787 				toolbar: 'add-video-source',
    788 				media: this.media,
    789 				menu: false
    790 			} ),
    791 
    792 			new MediaLibrary( {
    793 				type: 'image',
    794 				id: 'select-poster-image',
    795 				title: l10n.videoSelectPosterImageTitle,
    796 				toolbar: 'select-poster-image',
    797 				media: this.media,
    798 				menu: 'video-details'
    799 			} ),
    800 
    801 			new MediaLibrary( {
    802 				type: 'text',
    803 				id: 'add-track',
    804 				title: l10n.videoAddTrackTitle,
    805 				toolbar: 'add-track',
    806 				media: this.media,
    807 				menu: 'video-details'
    808 			} )
    809 		]);
    810 	},
    811 
    812 	renderSelectPosterImageToolbar: function() {
    813 		this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) {
    814 			var urls = [], attachment = state.get( 'selection' ).single();
    815 
    816 			controller.media.set( 'poster', attachment.get( 'url' ) );
    817 			state.trigger( 'set-poster-image', controller.media.toJSON() );
    818 
    819 			_.each( wp.media.view.settings.embedExts, function (ext) {
    820 				if ( controller.media.get( ext ) ) {
    821 					urls.push( controller.media.get( ext ) );
    822 				}
    823 			} );
    824 
    825 			wp.ajax.send( 'set-attachment-thumbnail', {
    826 				data : {
    827 					urls: urls,
    828 					thumbnail_id: attachment.get( 'id' )
    829 				}
    830 			} );
    831 		} );
    832 	},
    833 
    834 	renderAddTrackToolbar: function() {
    835 		this.setPrimaryButton( l10n.videoAddTrackTitle, function( controller, state ) {
    836 			var attachment = state.get( 'selection' ).single(),
    837 				content = controller.media.get( 'content' );
    838 
    839 			if ( -1 === content.indexOf( attachment.get( 'url' ) ) ) {
    840 				content += [
    841 					'<track srclang="en" label="English" kind="subtitles" src="',
    842 					attachment.get( 'url' ),
    843 					'" />'
    844 				].join('');
    845 
    846 				controller.media.set( 'content', content );
    847 			}
    848 			state.trigger( 'add-track', controller.media.toJSON() );
    849 		} );
    850 	}
    851 });
    852 
    853 module.exports = VideoDetails;
    854 
    855 
    856 /***/ }),
    857 
    858 /***/ "pMD9":
    859 /***/ (function(module, exports, __webpack_require__) {
    860 
    861 /**
    862  * @output wp-includes/js/media-audiovideo.js
    863  */
    864 
    865 var media = wp.media,
    866 	baseSettings = window._wpmejsSettings || {},
    867 	l10n = window._wpMediaViewsL10n || {};
    868 
    869 /**
    870  *
    871  * Defines the wp.media.mixin object.
    872  *
    873  * @mixin
    874  *
    875  * @since 4.2.0
    876  */
    877 wp.media.mixin = {
    878 	mejsSettings: baseSettings,
    879 
    880 	/**
    881 	 * Pauses and removes all players.
    882 	 *
    883 	 * @since 4.2.0
    884 	 *
    885 	 * @return {void}
    886 	 */
    887 	removeAllPlayers: function() {
    888 		var p;
    889 
    890 		if ( window.mejs && window.mejs.players ) {
    891 			for ( p in window.mejs.players ) {
    892 				window.mejs.players[p].pause();
    893 				this.removePlayer( window.mejs.players[p] );
    894 			}
    895 		}
    896 	},
    897 
    898 	/**
    899 	 * Removes the player.
    900 	 *
    901 	 * Override the MediaElement method for removing a player.
    902 	 * MediaElement tries to pull the audio/video tag out of
    903 	 * its container and re-add it to the DOM.
    904 	 *
    905 	 * @since 4.2.0
    906 	 *
    907 	 * @return {void}
    908 	 */
    909 	removePlayer: function(t) {
    910 		var featureIndex, feature;
    911 
    912 		if ( ! t.options ) {
    913 			return;
    914 		}
    915 
    916 		// Invoke features cleanup.
    917 		for ( featureIndex in t.options.features ) {
    918 			feature = t.options.features[featureIndex];
    919 			if ( t['clean' + feature] ) {
    920 				try {
    921 					t['clean' + feature](t);
    922 				} catch (e) {}
    923 			}
    924 		}
    925 
    926 		if ( ! t.isDynamic ) {
    927 			t.node.remove();
    928 		}
    929 
    930 		if ( 'html5' !== t.media.rendererName ) {
    931 			t.media.remove();
    932 		}
    933 
    934 		delete window.mejs.players[t.id];
    935 
    936 		t.container.remove();
    937 		t.globalUnbind('resize', t.globalResizeCallback);
    938 		t.globalUnbind('keydown', t.globalKeydownCallback);
    939 		t.globalUnbind('click', t.globalClickCallback);
    940 		delete t.media.player;
    941 	},
    942 
    943 	/**
    944 	 *
    945 	 * Removes and resets all players.
    946 	 *
    947 	 * Allows any class that has set 'player' to a MediaElementPlayer
    948 	 * instance to remove the player when listening to events.
    949 	 *
    950 	 * Examples: modal closes, shortcode properties are removed, etc.
    951 	 *
    952 	 * @since 4.2.0
    953 	 */
    954 	unsetPlayers : function() {
    955 		if ( this.players && this.players.length ) {
    956 			_.each( this.players, function (player) {
    957 				player.pause();
    958 				wp.media.mixin.removePlayer( player );
    959 			} );
    960 			this.players = [];
    961 		}
    962 	}
    963 };
    964 
    965 /**
    966  * Shortcode modeling for playlists.
    967  *
    968  * @since 4.2.0
    969  */
    970 wp.media.playlist = new wp.media.collection({
    971 	tag: 'playlist',
    972 	editTitle : l10n.editPlaylistTitle,
    973 	defaults : {
    974 		id: wp.media.view.settings.post.id,
    975 		style: 'light',
    976 		tracklist: true,
    977 		tracknumbers: true,
    978 		images: true,
    979 		artists: true,
    980 		type: 'audio'
    981 	}
    982 });
    983 
    984 /**
    985  * Shortcode modeling for audio.
    986  *
    987  * `edit()` prepares the shortcode for the media modal.
    988  * `shortcode()` builds the new shortcode after an update.
    989  *
    990  * @namespace
    991  *
    992  * @since 4.2.0
    993  */
    994 wp.media.audio = {
    995 	coerce : wp.media.coerce,
    996 
    997 	defaults : {
    998 		id : wp.media.view.settings.post.id,
    999 		src : '',
   1000 		loop : false,
   1001 		autoplay : false,
   1002 		preload : 'none',
   1003 		width : 400
   1004 	},
   1005 
   1006 	/**
   1007 	 * Instantiates a new media object with the next matching shortcode.
   1008 	 *
   1009 	 * @since 4.2.0
   1010 	 *
   1011 	 * @param {string} data The text to apply the shortcode on.
   1012 	 * @return {wp.media} The media object.
   1013 	 */
   1014 	edit : function( data ) {
   1015 		var frame, shortcode = wp.shortcode.next( 'audio', data ).shortcode;
   1016 
   1017 		frame = wp.media({
   1018 			frame: 'audio',
   1019 			state: 'audio-details',
   1020 			metadata: _.defaults( shortcode.attrs.named, this.defaults )
   1021 		});
   1022 
   1023 		return frame;
   1024 	},
   1025 
   1026 	/**
   1027 	 * Generates an audio shortcode.
   1028 	 *
   1029 	 * @since 4.2.0
   1030 	 *
   1031 	 * @param {Array} model Array with attributes for the shortcode.
   1032 	 * @return {wp.shortcode} The audio shortcode object.
   1033 	 */
   1034 	shortcode : function( model ) {
   1035 		var content;
   1036 
   1037 		_.each( this.defaults, function( value, key ) {
   1038 			model[ key ] = this.coerce( model, key );
   1039 
   1040 			if ( value === model[ key ] ) {
   1041 				delete model[ key ];
   1042 			}
   1043 		}, this );
   1044 
   1045 		content = model.content;
   1046 		delete model.content;
   1047 
   1048 		return new wp.shortcode({
   1049 			tag: 'audio',
   1050 			attrs: model,
   1051 			content: content
   1052 		});
   1053 	}
   1054 };
   1055 
   1056 /**
   1057  * Shortcode modeling for video.
   1058  *
   1059  *  `edit()` prepares the shortcode for the media modal.
   1060  *  `shortcode()` builds the new shortcode after update.
   1061  *
   1062  * @since 4.2.0
   1063  *
   1064  * @namespace
   1065  */
   1066 wp.media.video = {
   1067 	coerce : wp.media.coerce,
   1068 
   1069 	defaults : {
   1070 		id : wp.media.view.settings.post.id,
   1071 		src : '',
   1072 		poster : '',
   1073 		loop : false,
   1074 		autoplay : false,
   1075 		preload : 'metadata',
   1076 		content : '',
   1077 		width : 640,
   1078 		height : 360
   1079 	},
   1080 
   1081 	/**
   1082 	 * Instantiates a new media object with the next matching shortcode.
   1083 	 *
   1084 	 * @since 4.2.0
   1085 	 *
   1086 	 * @param {string} data The text to apply the shortcode on.
   1087 	 * @return {wp.media} The media object.
   1088 	 */
   1089 	edit : function( data ) {
   1090 		var frame,
   1091 			shortcode = wp.shortcode.next( 'video', data ).shortcode,
   1092 			attrs;
   1093 
   1094 		attrs = shortcode.attrs.named;
   1095 		attrs.content = shortcode.content;
   1096 
   1097 		frame = wp.media({
   1098 			frame: 'video',
   1099 			state: 'video-details',
   1100 			metadata: _.defaults( attrs, this.defaults )
   1101 		});
   1102 
   1103 		return frame;
   1104 	},
   1105 
   1106 	/**
   1107 	 * Generates an video shortcode.
   1108 	 *
   1109 	 * @since 4.2.0
   1110 	 *
   1111 	 * @param {Array} model Array with attributes for the shortcode.
   1112 	 * @return {wp.shortcode} The video shortcode object.
   1113 	 */
   1114 	shortcode : function( model ) {
   1115 		var content;
   1116 
   1117 		_.each( this.defaults, function( value, key ) {
   1118 			model[ key ] = this.coerce( model, key );
   1119 
   1120 			if ( value === model[ key ] ) {
   1121 				delete model[ key ];
   1122 			}
   1123 		}, this );
   1124 
   1125 		content = model.content;
   1126 		delete model.content;
   1127 
   1128 		return new wp.shortcode({
   1129 			tag: 'video',
   1130 			attrs: model,
   1131 			content: content
   1132 		});
   1133 	}
   1134 };
   1135 
   1136 media.model.PostMedia = __webpack_require__( "+RYg" );
   1137 media.controller.AudioDetails = __webpack_require__( "6pp6" );
   1138 media.controller.VideoDetails = __webpack_require__( "Xcj4" );
   1139 media.view.MediaFrame.MediaDetails = __webpack_require__( "RQe2" );
   1140 media.view.MediaFrame.AudioDetails = __webpack_require__( "Bdio" );
   1141 media.view.MediaFrame.VideoDetails = __webpack_require__( "m85o" );
   1142 media.view.MediaDetails = __webpack_require__( "/4UI" );
   1143 media.view.AudioDetails = __webpack_require__( "LX3m" );
   1144 media.view.VideoDetails = __webpack_require__( "MT9K" );
   1145 
   1146 
   1147 /***/ })
   1148 
   1149 /******/ });