summaryrefslogtreecommitdiffstats
path: root/wp-admin/js/widgets/media-audio-widget.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-admin/js/widgets/media-audio-widget.js
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-admin/js/widgets/media-audio-widget.js')
-rw-r--r--wp-admin/js/widgets/media-audio-widget.js154
1 files changed, 154 insertions, 0 deletions
diff --git a/wp-admin/js/widgets/media-audio-widget.js b/wp-admin/js/widgets/media-audio-widget.js
new file mode 100644
index 0000000..a579253
--- /dev/null
+++ b/wp-admin/js/widgets/media-audio-widget.js
@@ -0,0 +1,154 @@
+/**
+ * @output wp-admin/js/widgets/media-audio-widget.js
+ */
+
+/* eslint consistent-this: [ "error", "control" ] */
+(function( component ) {
+ 'use strict';
+
+ var AudioWidgetModel, AudioWidgetControl, AudioDetailsMediaFrame;
+
+ /**
+ * Custom audio details frame that removes the replace-audio state.
+ *
+ * @class wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame
+ * @augments wp.media.view.MediaFrame.AudioDetails
+ */
+ AudioDetailsMediaFrame = wp.media.view.MediaFrame.AudioDetails.extend(/** @lends wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame.prototype */{
+
+ /**
+ * Create the default states.
+ *
+ * @return {void}
+ */
+ createStates: function createStates() {
+ this.states.add([
+ new wp.media.controller.AudioDetails({
+ media: this.media
+ }),
+
+ new wp.media.controller.MediaLibrary({
+ type: 'audio',
+ id: 'add-audio-source',
+ title: wp.media.view.l10n.audioAddSourceTitle,
+ toolbar: 'add-audio-source',
+ media: this.media,
+ menu: false
+ })
+ ]);
+ }
+ });
+
+ /**
+ * Audio widget model.
+ *
+ * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports.
+ *
+ * @class wp.mediaWidgets.modelConstructors.media_audio
+ * @augments wp.mediaWidgets.MediaWidgetModel
+ */
+ AudioWidgetModel = component.MediaWidgetModel.extend({});
+
+ /**
+ * Audio widget control.
+ *
+ * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports.
+ *
+ * @class wp.mediaWidgets.controlConstructors.media_audio
+ * @augments wp.mediaWidgets.MediaWidgetControl
+ */
+ AudioWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_audio.prototype */{
+
+ /**
+ * Show display settings.
+ *
+ * @type {boolean}
+ */
+ showDisplaySettings: false,
+
+ /**
+ * Map model props to media frame props.
+ *
+ * @param {Object} modelProps - Model props.
+ * @return {Object} Media frame props.
+ */
+ mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) {
+ var control = this, mediaFrameProps;
+ mediaFrameProps = component.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call( control, modelProps );
+ mediaFrameProps.link = 'embed';
+ return mediaFrameProps;
+ },
+
+ /**
+ * Render preview.
+ *
+ * @return {void}
+ */
+ renderPreview: function renderPreview() {
+ var control = this, previewContainer, previewTemplate, attachmentId, attachmentUrl;
+ attachmentId = control.model.get( 'attachment_id' );
+ attachmentUrl = control.model.get( 'url' );
+
+ if ( ! attachmentId && ! attachmentUrl ) {
+ return;
+ }
+
+ previewContainer = control.$el.find( '.media-widget-preview' );
+ previewTemplate = wp.template( 'wp-media-widget-audio-preview' );
+
+ previewContainer.html( previewTemplate({
+ model: {
+ attachment_id: control.model.get( 'attachment_id' ),
+ src: attachmentUrl
+ },
+ error: control.model.get( 'error' )
+ }));
+ wp.mediaelement.initialize();
+ },
+
+ /**
+ * Open the media audio-edit frame to modify the selected item.
+ *
+ * @return {void}
+ */
+ editMedia: function editMedia() {
+ var control = this, mediaFrame, metadata, updateCallback;
+
+ metadata = control.mapModelToMediaFrameProps( control.model.toJSON() );
+
+ // Set up the media frame.
+ mediaFrame = new AudioDetailsMediaFrame({
+ frame: 'audio',
+ state: 'audio-details',
+ metadata: metadata
+ });
+ wp.media.frame = mediaFrame;
+ mediaFrame.$el.addClass( 'media-widget' );
+
+ updateCallback = function( mediaFrameProps ) {
+
+ // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview.
+ control.selectedAttachment.set( mediaFrameProps );
+
+ control.model.set( _.extend(
+ control.model.defaults(),
+ control.mapMediaToModelProps( mediaFrameProps ),
+ { error: false }
+ ) );
+ };
+
+ mediaFrame.state( 'audio-details' ).on( 'update', updateCallback );
+ mediaFrame.state( 'replace-audio' ).on( 'replace', updateCallback );
+ mediaFrame.on( 'close', function() {
+ mediaFrame.detach();
+ });
+
+ mediaFrame.open();
+ }
+ });
+
+ // Exports.
+ component.controlConstructors.media_audio = AudioWidgetControl;
+ component.modelConstructors.media_audio = AudioWidgetModel;
+
+})( wp.mediaWidgets );