X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/48ab98cb1779cf2088c1351ac3dd3d0da6fb31d3..f34e3c5e1f96e4214461c0b72b651ad48ccffe50:/wp-includes/js/media-audiovideo.js diff --git a/wp-includes/js/media-audiovideo.js b/wp-includes/js/media-audiovideo.js index 73f81a88..5c64097c 100644 --- a/wp-includes/js/media-audiovideo.js +++ b/wp-includes/js/media-audiovideo.js @@ -1,831 +1,916 @@ -/* global _wpMediaViewsL10n, _wpmejsSettings, MediaElementPlayer */ - -(function($, _, Backbone) { - var media = wp.media, - baseSettings = {}, - l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n; - - if ( ! _.isUndefined( window._wpmejsSettings ) ) { - baseSettings = _wpmejsSettings; - } +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o' + ].join(''); - renderAddSourceToolbar: function() { - this.setPrimaryButton( this.addText, function( controller, state ) { - var attachment = state.get( 'selection' ).single(); - controller.media.setSource( attachment ); - state.trigger( 'add-source', controller.media.toJSON() ); - } ); - } - }); + controller.media.set( 'content', content ); + } + state.trigger( 'add-track', controller.media.toJSON() ); + } ); + } +}); + +module.exports = VideoDetails; + +},{}],9:[function(require,module,exports){ +/* global MediaElementPlayer */ + +/** + * wp.media.view.MediaDetails + * + * @class + * @augments wp.media.view.Settings.AttachmentDisplay + * @augments wp.media.view.Settings + * @augments wp.media.View + * @augments wp.Backbone.View + * @augments Backbone.View + */ +var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay, + $ = jQuery, + MediaDetails; + +MediaDetails = AttachmentDisplay.extend({ + initialize: function() { + _.bindAll(this, 'success'); + this.players = []; + this.listenTo( this.controller, 'close', wp.media.mixin.unsetPlayers ); + this.on( 'ready', this.setPlayer ); + this.on( 'media:setting:remove', wp.media.mixin.unsetPlayers, this ); + this.on( 'media:setting:remove', this.render ); + this.on( 'media:setting:remove', this.setPlayer ); + this.events = _.extend( this.events, { + 'click .remove-setting' : 'removeSetting', + 'change .content-track' : 'setTracks', + 'click .remove-track' : 'setTracks', + 'click .add-media-source' : 'addSource' + } ); + + AttachmentDisplay.prototype.initialize.apply( this, arguments ); + }, + + prepare: function() { + return _.defaults({ + model: this.model.toJSON() + }, this.options ); + }, /** - * wp.media.view.MediaFrame.AudioDetails + * Remove a setting's UI when the model unsets it * - * @constructor - * @augments wp.media.view.MediaFrame.MediaDetails - * @augments wp.media.view.MediaFrame.Select - * @augments wp.media.view.MediaFrame - * @augments wp.media.view.Frame - * @augments wp.media.View - * @augments wp.Backbone.View - * @augments Backbone.View - * @mixes wp.media.controller.StateMachine - */ - media.view.MediaFrame.AudioDetails = media.view.MediaFrame.MediaDetails.extend({ - defaults: { - id: 'audio', - url: '', - menu: 'audio-details', - content: 'audio-details', - toolbar: 'audio-details', - type: 'link', - title: l10n.audioDetailsTitle, - priority: 120 - }, - - initialize: function( options ) { - options.DetailsView = media.view.AudioDetails; - options.cancelText = l10n.audioDetailsCancel; - options.addText = l10n.audioAddSourceTitle; - - media.view.MediaFrame.MediaDetails.prototype.initialize.call( this, options ); - }, - - bindHandlers: function() { - media.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply( this, arguments ); - - this.on( 'toolbar:render:replace-audio', this.renderReplaceToolbar, this ); - this.on( 'toolbar:render:add-audio-source', this.renderAddSourceToolbar, this ); - }, - - createStates: function() { - this.states.add([ - new media.controller.AudioDetails( { - media: this.media - } ), - - new media.controller.MediaLibrary( { - type: 'audio', - id: 'replace-audio', - title: l10n.audioReplaceTitle, - toolbar: 'replace-audio', - media: this.media, - menu: 'audio-details' - } ), - - new media.controller.MediaLibrary( { - type: 'audio', - id: 'add-audio-source', - title: l10n.audioAddSourceTitle, - toolbar: 'add-audio-source', - media: this.media, - menu: false - } ) - ]); - } - }); - - /** - * wp.media.view.MediaFrame.VideoDetails + * @fires wp.media.view.MediaDetails#media:setting:remove * - * @constructor - * @augments wp.media.view.MediaFrame.MediaDetails - * @augments wp.media.view.MediaFrame.Select - * @augments wp.media.view.MediaFrame - * @augments wp.media.view.Frame - * @augments wp.media.View - * @augments wp.Backbone.View - * @augments Backbone.View - * @mixes wp.media.controller.StateMachine + * @param {Event} e */ - media.view.MediaFrame.VideoDetails = media.view.MediaFrame.MediaDetails.extend({ - defaults: { - id: 'video', - url: '', - menu: 'video-details', - content: 'video-details', - toolbar: 'video-details', - type: 'link', - title: l10n.videoDetailsTitle, - priority: 120 - }, - - initialize: function( options ) { - options.DetailsView = media.view.VideoDetails; - options.cancelText = l10n.videoDetailsCancel; - options.addText = l10n.videoAddSourceTitle; - - media.view.MediaFrame.MediaDetails.prototype.initialize.call( this, options ); - }, - - bindHandlers: function() { - media.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply( this, arguments ); - - this.on( 'toolbar:render:replace-video', this.renderReplaceToolbar, this ); - this.on( 'toolbar:render:add-video-source', this.renderAddSourceToolbar, this ); - this.on( 'toolbar:render:select-poster-image', this.renderSelectPosterImageToolbar, this ); - this.on( 'toolbar:render:add-track', this.renderAddTrackToolbar, this ); - }, - - createStates: function() { - this.states.add([ - new media.controller.VideoDetails({ - media: this.media - }), - - new media.controller.MediaLibrary( { - type: 'video', - id: 'replace-video', - title: l10n.videoReplaceTitle, - toolbar: 'replace-video', - media: this.media, - menu: 'video-details' - } ), - - new media.controller.MediaLibrary( { - type: 'video', - id: 'add-video-source', - title: l10n.videoAddSourceTitle, - toolbar: 'add-video-source', - media: this.media, - menu: false - } ), - - new media.controller.MediaLibrary( { - type: 'image', - id: 'select-poster-image', - title: l10n.videoSelectPosterImageTitle, - toolbar: 'select-poster-image', - media: this.media, - menu: 'video-details' - } ), - - new media.controller.MediaLibrary( { - type: 'text', - id: 'add-track', - title: l10n.videoAddTrackTitle, - toolbar: 'add-track', - media: this.media, - menu: 'video-details' - } ) - ]); - }, - - renderSelectPosterImageToolbar: function() { - this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) { - var urls = [], attachment = state.get( 'selection' ).single(); - - controller.media.set( 'poster', attachment.get( 'url' ) ); - state.trigger( 'set-poster-image', controller.media.toJSON() ); - - _.each( wp.media.view.settings.embedExts, function (ext) { - if ( controller.media.get( ext ) ) { - urls.push( controller.media.get( ext ) ); - } - } ); - - wp.ajax.send( 'set-attachment-thumbnail', { - data : { - urls: urls, - thumbnail_id: attachment.get( 'id' ) - } - } ); - } ); - }, - - renderAddTrackToolbar: function() { - this.setPrimaryButton( l10n.videoAddTrackTitle, function( controller, state ) { - var attachment = state.get( 'selection' ).single(), - content = controller.media.get( 'content' ); - - if ( -1 === content.indexOf( attachment.get( 'url' ) ) ) { - content += [ - '' - ].join(''); + removeSetting : function(e) { + var wrap = $( e.currentTarget ).parent(), setting; + setting = wrap.find( 'input' ).data( 'setting' ); - controller.media.set( 'content', content ); - } - state.trigger( 'add-track', controller.media.toJSON() ); - } ); + if ( setting ) { + this.model.unset( setting ); + this.trigger( 'media:setting:remove', this ); } - }); + + wrap.remove(); + }, /** - * wp.media.view.MediaDetails * - * @constructor - * @augments wp.media.view.Settings.AttachmentDisplay - * @augments wp.media.view.Settings - * @augments wp.media.View - * @augments wp.Backbone.View - * @augments Backbone.View + * @fires wp.media.view.MediaDetails#media:setting:remove */ - media.view.MediaDetails = media.view.Settings.AttachmentDisplay.extend({ - initialize: function() { - _.bindAll(this, 'success'); - this.players = []; - this.listenTo( this.controller, 'close', media.mixin.unsetPlayers ); - this.on( 'ready', this.setPlayer ); - this.on( 'media:setting:remove', media.mixin.unsetPlayers, this ); - this.on( 'media:setting:remove', this.render ); - this.on( 'media:setting:remove', this.setPlayer ); - this.events = _.extend( this.events, { - 'click .remove-setting' : 'removeSetting', - 'change .content-track' : 'setTracks', - 'click .remove-track' : 'setTracks', - 'click .add-media-source' : 'addSource' - } ); - - media.view.Settings.AttachmentDisplay.prototype.initialize.apply( this, arguments ); - }, - - prepare: function() { - return _.defaults({ - model: this.model.toJSON() - }, this.options ); - }, - - /** - * Remove a setting's UI when the model unsets it - * - * @fires wp.media.view.MediaDetails#media:setting:remove - * - * @param {Event} e - */ - removeSetting : function(e) { - var wrap = $( e.currentTarget ).parent(), setting; - setting = wrap.find( 'input' ).data( 'setting' ); - - if ( setting ) { - this.model.unset( setting ); - this.trigger( 'media:setting:remove', this ); - } + setTracks : function() { + var tracks = ''; - wrap.remove(); - }, + _.each( this.$('.content-track'), function(track) { + tracks += $( track ).val(); + } ); - /** - * - * @fires wp.media.view.MediaDetails#media:setting:remove - */ - setTracks : function() { - var tracks = ''; + this.model.set( 'content', tracks ); + this.trigger( 'media:setting:remove', this ); + }, - _.each( this.$('.content-track'), function(track) { - tracks += $( track ).val(); - } ); + addSource : function( e ) { + this.controller.lastMime = $( e.currentTarget ).data( 'mime' ); + this.controller.setState( 'add-' + this.controller.defaults.id + '-source' ); + }, - this.model.set( 'content', tracks ); - this.trigger( 'media:setting:remove', this ); - }, - - addSource : function( e ) { - this.controller.lastMime = $( e.currentTarget ).data( 'mime' ); - this.controller.setState( 'add-' + this.controller.defaults.id + '-source' ); - }, - - /** - * @global MediaElementPlayer - */ - setPlayer : function() { - if ( ! this.players.length && this.media ) { - this.players.push( new MediaElementPlayer( this.media, this.settings ) ); - } - }, - - /** - * @abstract - */ - setMedia : function() { - return this; - }, - - success : function(mejs) { - var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; - - if ( 'flash' === mejs.pluginType && autoplay ) { - mejs.addEventListener( 'canplay', function() { - mejs.play(); - }, false ); - } + loadPlayer: function () { + this.players.push( new MediaElementPlayer( this.media, this.settings ) ); + this.scriptXhr = false; + }, - this.mejs = mejs; - }, + /** + * @global MediaElementPlayer + */ + setPlayer : function() { + var baseSettings; - /** - * @returns {media.view.MediaDetails} Returns itself to allow chaining - */ - render: function() { - var self = this; + if ( this.players.length || ! this.media || this.scriptXhr ) { + return; + } - media.view.Settings.AttachmentDisplay.prototype.render.apply( this, arguments ); - setTimeout( function() { self.resetFocus(); }, 10 ); + if ( this.model.get( 'src' ).indexOf( 'vimeo' ) > -1 && ! ( 'Froogaloop' in window ) ) { + baseSettings = wp.media.mixin.mejsSettings; + this.scriptXhr = $.getScript( baseSettings.pluginPath + 'froogaloop.min.js', _.bind( this.loadPlayer, this ) ); + } else { + this.loadPlayer(); + } + }, - this.settings = _.defaults( { - success : this.success - }, baseSettings ); + /** + * @abstract + */ + setMedia : function() { + return this; + }, - return this.setMedia(); - }, + success : function(mejs) { + var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; - resetFocus: function() { - this.$( '.embed-media-settings' ).scrollTop( 0 ); + if ( 'flash' === mejs.pluginType && autoplay ) { + mejs.addEventListener( 'canplay', function() { + mejs.play(); + }, false ); } - }, { - instances : 0, - - /** - * When multiple players in the DOM contain the same src, things get weird. - * - * @param {HTMLElement} elem - * @returns {HTMLElement} - */ - prepareSrc : function( elem ) { - var i = media.view.MediaDetails.instances++; - _.each( $( elem ).find( 'source' ), function( source ) { - source.src = [ - source.src, - source.src.indexOf('?') > -1 ? '&' : '?', - '_=', - i - ].join(''); - } ); - return elem; - } - }); + this.mejs = mejs; + }, /** - * wp.media.view.AudioDetails - * - * @constructor - * @augments wp.media.view.MediaDetails - * @augments wp.media.view.Settings.AttachmentDisplay - * @augments wp.media.view.Settings - * @augments wp.media.View - * @augments wp.Backbone.View - * @augments Backbone.View + * @returns {media.view.MediaDetails} Returns itself to allow chaining */ - media.view.AudioDetails = media.view.MediaDetails.extend({ - className: 'audio-details', - template: media.template('audio-details'), + render: function() { + AttachmentDisplay.prototype.render.apply( this, arguments ); - setMedia: function() { - var audio = this.$('.wp-audio-shortcode'); + setTimeout( _.bind( function() { + this.resetFocus(); + }, this ), 10 ); - if ( audio.find( 'source' ).length ) { - if ( audio.is(':hidden') ) { - audio.show(); - } - this.media = media.view.MediaDetails.prepareSrc( audio.get(0) ); - } else { - audio.hide(); - this.media = false; - } + this.settings = _.defaults( { + success : this.success + }, wp.media.mixin.mejsSettings ); - return this; - } - }); + return this.setMedia(); + }, + resetFocus: function() { + this.$( '.embed-media-settings' ).scrollTop( 0 ); + } +}, { + instances : 0, /** - * wp.media.view.VideoDetails + * When multiple players in the DOM contain the same src, things get weird. * - * @constructor - * @augments wp.media.view.MediaDetails - * @augments wp.media.view.Settings.AttachmentDisplay - * @augments wp.media.view.Settings - * @augments wp.media.View - * @augments wp.Backbone.View - * @augments Backbone.View + * @param {HTMLElement} elem + * @returns {HTMLElement} */ - media.view.VideoDetails = media.view.MediaDetails.extend({ - className: 'video-details', - template: media.template('video-details'), - - setMedia: function() { - var video = this.$('.wp-video-shortcode'); - - if ( video.find( 'source' ).length ) { - if ( video.is(':hidden') ) { - video.show(); - } + prepareSrc : function( elem ) { + var i = MediaDetails.instances++; + _.each( $( elem ).find( 'source' ), function( source ) { + source.src = [ + source.src, + source.src.indexOf('?') > -1 ? '&' : '?', + '_=', + i + ].join(''); + } ); + + return elem; + } +}); + +module.exports = MediaDetails; + +},{}],10:[function(require,module,exports){ +/** + * wp.media.view.VideoDetails + * + * @class + * @augments wp.media.view.MediaDetails + * @augments wp.media.view.Settings.AttachmentDisplay + * @augments wp.media.view.Settings + * @augments wp.media.View + * @augments wp.Backbone.View + * @augments Backbone.View + */ +var MediaDetails = wp.media.view.MediaDetails, + VideoDetails; + +VideoDetails = MediaDetails.extend({ + className: 'video-details', + template: wp.template('video-details'), + + setMedia: function() { + var video = this.$('.wp-video-shortcode'); + + if ( video.find( 'source' ).length ) { + if ( video.is(':hidden') ) { + video.show(); + } - if ( ! video.hasClass('youtube-video') ) { - this.media = media.view.MediaDetails.prepareSrc( video.get(0) ); - } else { - this.media = video.get(0); - } + if ( ! video.hasClass( 'youtube-video' ) && ! video.hasClass( 'vimeo-video' ) ) { + this.media = MediaDetails.prepareSrc( video.get(0) ); } else { - video.hide(); - this.media = false; + this.media = video.get(0); } - - return this; + } else { + video.hide(); + this.media = false; } - }); -}(jQuery, _, Backbone)); + return this; + } +}); + +module.exports = VideoDetails; + +},{}]},{},[1]);