run:R W Run
15.41 KB
2026-03-11 16:18:51
R W Run
5.45 KB
2026-03-11 16:18:51
R W Run
4.18 KB
2026-03-11 16:18:51
R W Run
1.41 KB
2026-03-11 16:18:51
R W Run
10.11 KB
2026-03-11 16:18:51
R W Run
3.68 KB
2026-03-11 16:18:51
R W Run
5.34 KB
2026-03-11 16:18:51
R W Run
1.98 KB
2026-03-11 16:18:51
R W Run
6.86 KB
2026-03-11 16:18:51
R W Run
2.64 KB
2026-03-11 16:18:51
R W Run
41.86 KB
2026-03-11 16:18:51
R W Run
13.91 KB
2026-03-11 16:18:51
R W Run
17.63 KB
2026-03-11 16:18:51
R W Run
5.72 KB
2026-03-11 16:18:51
R W Run
error_log
📄media-audio-widget.js
1/**
2 * @output wp-admin/js/widgets/media-audio-widget.js
3 */
4
5/* eslint consistent-this: [ "error", "control" ] */
6(function( component ) {
7 'use strict';
8
9 var AudioWidgetModel, AudioWidgetControl, AudioDetailsMediaFrame;
10
11 /**
12 * Custom audio details frame that removes the replace-audio state.
13 *
14 * @class wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame
15 * @augments wp.media.view.MediaFrame.AudioDetails
16 */
17 AudioDetailsMediaFrame = wp.media.view.MediaFrame.AudioDetails.extend(/** @lends wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame.prototype */{
18
19 /**
20 * Create the default states.
21 *
22 * @return {void}
23 */
24 createStates: function createStates() {
25 this.states.add([
26 new wp.media.controller.AudioDetails({
27 media: this.media
28 }),
29
30 new wp.media.controller.MediaLibrary({
31 type: 'audio',
32 id: 'add-audio-source',
33 title: wp.media.view.l10n.audioAddSourceTitle,
34 toolbar: 'add-audio-source',
35 media: this.media,
36 menu: false
37 })
38 ]);
39 }
40 });
41
42 /**
43 * Audio widget model.
44 *
45 * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports.
46 *
47 * @class wp.mediaWidgets.modelConstructors.media_audio
48 * @augments wp.mediaWidgets.MediaWidgetModel
49 */
50 AudioWidgetModel = component.MediaWidgetModel.extend({});
51
52 /**
53 * Audio widget control.
54 *
55 * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports.
56 *
57 * @class wp.mediaWidgets.controlConstructors.media_audio
58 * @augments wp.mediaWidgets.MediaWidgetControl
59 */
60 AudioWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_audio.prototype */{
61
62 /**
63 * Show display settings.
64 *
65 * @type {boolean}
66 */
67 showDisplaySettings: false,
68
69 /**
70 * Map model props to media frame props.
71 *
72 * @param {Object} modelProps - Model props.
73 * @return {Object} Media frame props.
74 */
75 mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) {
76 var control = this, mediaFrameProps;
77 mediaFrameProps = component.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call( control, modelProps );
78 mediaFrameProps.link = 'embed';
79 return mediaFrameProps;
80 },
81
82 /**
83 * Render preview.
84 *
85 * @return {void}
86 */
87 renderPreview: function renderPreview() {
88 var control = this, previewContainer, previewTemplate, attachmentId, attachmentUrl;
89 attachmentId = control.model.get( 'attachment_id' );
90 attachmentUrl = control.model.get( 'url' );
91
92 if ( ! attachmentId && ! attachmentUrl ) {
93 return;
94 }
95
96 previewContainer = control.$el.find( '.media-widget-preview' );
97 previewTemplate = wp.template( 'wp-media-widget-audio-preview' );
98
99 previewContainer.html( previewTemplate({
100 model: {
101 attachment_id: control.model.get( 'attachment_id' ),
102 src: attachmentUrl
103 },
104 error: control.model.get( 'error' )
105 }));
106 wp.mediaelement.initialize();
107 },
108
109 /**
110 * Open the media audio-edit frame to modify the selected item.
111 *
112 * @return {void}
113 */
114 editMedia: function editMedia() {
115 var control = this, mediaFrame, metadata, updateCallback;
116
117 metadata = control.mapModelToMediaFrameProps( control.model.toJSON() );
118
119 // Set up the media frame.
120 mediaFrame = new AudioDetailsMediaFrame({
121 frame: 'audio',
122 state: 'audio-details',
123 metadata: metadata
124 });
125 wp.media.frame = mediaFrame;
126 mediaFrame.$el.addClass( 'media-widget' );
127
128 updateCallback = function( mediaFrameProps ) {
129
130 // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview.
131 control.selectedAttachment.set( mediaFrameProps );
132
133 control.model.set( _.extend(
134 control.model.defaults(),
135 control.mapMediaToModelProps( mediaFrameProps ),
136 { error: false }
137 ) );
138 };
139
140 mediaFrame.state( 'audio-details' ).on( 'update', updateCallback );
141 mediaFrame.state( 'replace-audio' ).on( 'replace', updateCallback );
142 mediaFrame.on( 'close', function() {
143 mediaFrame.detach();
144 });
145
146 mediaFrame.open();
147 }
148 });
149
150 // Exports.
151 component.controlConstructors.media_audio = AudioWidgetControl;
152 component.modelConstructors.media_audio = AudioWidgetModel;
153
154})( wp.mediaWidgets );
155