@wordpress/media-utils 4.2.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/build/components/media-upload/index.js +23 -15
- package/build/components/media-upload/index.js.map +1 -1
- package/build/utils/upload-media.js +35 -23
- package/build/utils/upload-media.js.map +1 -1
- package/build-module/components/media-upload/index.js +23 -14
- package/build-module/components/media-upload/index.js.map +1 -1
- package/build-module/utils/upload-media.js +35 -22
- package/build-module/utils/upload-media.js.map +1 -1
- package/package.json +6 -7
- package/src/components/media-upload/index.js +20 -21
- package/src/utils/upload-media.js +29 -35
package/CHANGELOG.md
CHANGED
|
@@ -5,16 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _lodash = require("lodash");
|
|
9
|
-
|
|
10
8
|
var _element = require("@wordpress/element");
|
|
11
9
|
|
|
12
10
|
var _i18n = require("@wordpress/i18n");
|
|
13
11
|
|
|
14
|
-
/**
|
|
15
|
-
* External dependencies
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
12
|
/**
|
|
19
13
|
* WordPress dependencies
|
|
20
14
|
*/
|
|
@@ -159,9 +153,10 @@ const getGalleryDetailsMediaFrame = () => {
|
|
|
159
153
|
filterable: 'uploaded',
|
|
160
154
|
multiple: 'add',
|
|
161
155
|
editable: false,
|
|
162
|
-
library: wp.media.query(
|
|
163
|
-
type: 'image'
|
|
164
|
-
|
|
156
|
+
library: wp.media.query({
|
|
157
|
+
type: 'image',
|
|
158
|
+
...this.options.library
|
|
159
|
+
})
|
|
165
160
|
}), new wp.media.controller.EditImage({
|
|
166
161
|
model: this.options.editImage
|
|
167
162
|
}), new wp.media.controller.GalleryEdit({
|
|
@@ -179,7 +174,13 @@ const getGalleryDetailsMediaFrame = () => {
|
|
|
179
174
|
|
|
180
175
|
const slimImageObject = img => {
|
|
181
176
|
const attrSet = ['sizes', 'mime', 'type', 'subtype', 'id', 'url', 'alt', 'link', 'caption'];
|
|
182
|
-
return (
|
|
177
|
+
return attrSet.reduce((result, key) => {
|
|
178
|
+
if (img !== null && img !== void 0 && img.hasOwnProperty(key)) {
|
|
179
|
+
result[key] = img[key];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return result;
|
|
183
|
+
}, {});
|
|
183
184
|
};
|
|
184
185
|
|
|
185
186
|
const getAttachmentsCollection = ids => {
|
|
@@ -355,12 +356,18 @@ class MediaUpload extends _element.Component {
|
|
|
355
356
|
}
|
|
356
357
|
|
|
357
358
|
onOpen() {
|
|
358
|
-
|
|
359
|
+
const {
|
|
360
|
+
value
|
|
361
|
+
} = this.props;
|
|
362
|
+
this.updateCollection(); //Handle active tab in media model on model open.
|
|
359
363
|
|
|
360
|
-
|
|
364
|
+
if (this.props.mode) {
|
|
365
|
+
this.frame.content.mode(this.props.mode);
|
|
366
|
+
} // Handle both this.props.value being either (number[]) multiple ids
|
|
361
367
|
// (for galleries) or a (number) singular id (e.g. image block).
|
|
362
368
|
|
|
363
|
-
|
|
369
|
+
|
|
370
|
+
const hasMedia = Array.isArray(value) ? !!(value !== null && value !== void 0 && value.length) : !!value;
|
|
364
371
|
|
|
365
372
|
if (!hasMedia) {
|
|
366
373
|
return;
|
|
@@ -368,15 +375,16 @@ class MediaUpload extends _element.Component {
|
|
|
368
375
|
|
|
369
376
|
const isGallery = this.props.gallery;
|
|
370
377
|
const selection = this.frame.state().get('selection');
|
|
378
|
+
const valueArray = Array.isArray(value) ? value : [value];
|
|
371
379
|
|
|
372
380
|
if (!isGallery) {
|
|
373
|
-
|
|
381
|
+
valueArray.forEach(id => {
|
|
374
382
|
selection.add(wp.media.attachment(id));
|
|
375
383
|
});
|
|
376
384
|
} // Load the images so they are available in the media modal.
|
|
377
385
|
|
|
378
386
|
|
|
379
|
-
const attachments = getAttachmentsCollection(
|
|
387
|
+
const attachments = getAttachmentsCollection(valueArray); // Once attachments are loaded, set the current selection.
|
|
380
388
|
|
|
381
389
|
attachments.more().done(function () {
|
|
382
390
|
var _attachments$models;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","Component","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","hasMedia","Array","isArray","isGallery","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { castArray, defaults, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query(\n\t\t\t\t\t\tdefaults(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.options.library\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn pick( img, attrSet );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tthis.updateCollection();\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( this.props.value )\n\t\t\t? !! this.props.value?.length\n\t\t\t: !! this.props.value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\n\t\tif ( ! isGallery ) {\n\t\t\tcastArray( this.props.value ).forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection(\n\t\t\tcastArray( this.props.value )\n\t\t);\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","reduce","result","key","hasOwnProperty","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","Component","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","mode","hasMedia","Array","isArray","isGallery","valueArray","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query( {\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t...this.options.library,\n\t\t\t\t\t} ),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn attrSet.reduce( ( result, key ) => {\n\t\tif ( img?.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = img[ key ];\n\t\t}\n\t\treturn result;\n\t}, {} );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tconst { value } = this.props;\n\t\tthis.updateCollection();\n\n\t\t//Handle active tab in media model on model open.\n\t\tif ( this.props.mode ) {\n\t\t\tthis.frame.content.mode( this.props.mode );\n\t\t}\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( value ) ? !! value?.length : !! value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\t\tconst valueArray = Array.isArray( value ) ? value : [ value ];\n\n\t\tif ( ! isGallery ) {\n\t\t\tvalueArray.forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection( valueArray );\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
|
|
@@ -8,18 +8,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.getMimeTypesArray = getMimeTypesArray;
|
|
9
9
|
exports.uploadMedia = uploadMedia;
|
|
10
10
|
|
|
11
|
-
var _lodash = require("lodash");
|
|
12
|
-
|
|
13
11
|
var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
|
|
14
12
|
|
|
15
13
|
var _blob = require("@wordpress/blob");
|
|
16
14
|
|
|
17
15
|
var _i18n = require("@wordpress/i18n");
|
|
18
16
|
|
|
19
|
-
/**
|
|
20
|
-
* External dependencies
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
17
|
/**
|
|
24
18
|
* WordPress dependencies
|
|
25
19
|
*/
|
|
@@ -44,11 +38,12 @@ function getMimeTypesArray(wpMimeTypesObject) {
|
|
|
44
38
|
return wpMimeTypesObject;
|
|
45
39
|
}
|
|
46
40
|
|
|
47
|
-
return
|
|
41
|
+
return Object.entries(wpMimeTypesObject).map(_ref => {
|
|
42
|
+
let [extensionsString, mime] = _ref;
|
|
48
43
|
const [type] = mime.split('/');
|
|
49
44
|
const extensions = extensionsString.split('|');
|
|
50
|
-
return [mime, ...
|
|
51
|
-
});
|
|
45
|
+
return [mime, ...extensions.map(extension => `${type}/${extension}`)];
|
|
46
|
+
}).flat();
|
|
52
47
|
}
|
|
53
48
|
/**
|
|
54
49
|
* Media Upload is used by audio, image, gallery, video, and file blocks to
|
|
@@ -67,7 +62,7 @@ function getMimeTypesArray(wpMimeTypesObject) {
|
|
|
67
62
|
*/
|
|
68
63
|
|
|
69
64
|
|
|
70
|
-
async function uploadMedia(
|
|
65
|
+
async function uploadMedia(_ref2) {
|
|
71
66
|
let {
|
|
72
67
|
allowedTypes,
|
|
73
68
|
additionalData = {},
|
|
@@ -76,15 +71,17 @@ async function uploadMedia(_ref) {
|
|
|
76
71
|
onError = noop,
|
|
77
72
|
onFileChange,
|
|
78
73
|
wpAllowedMimeTypes = null
|
|
79
|
-
} =
|
|
74
|
+
} = _ref2;
|
|
80
75
|
// Cast filesList to array.
|
|
81
76
|
const files = [...filesList];
|
|
82
77
|
const filesSet = [];
|
|
83
78
|
|
|
84
79
|
const setAndUpdateFiles = (idx, value) => {
|
|
85
|
-
|
|
80
|
+
var _filesSet$idx;
|
|
81
|
+
|
|
82
|
+
(0, _blob.revokeBlobURL)((_filesSet$idx = filesSet[idx]) === null || _filesSet$idx === void 0 ? void 0 : _filesSet$idx.url);
|
|
86
83
|
filesSet[idx] = value;
|
|
87
|
-
onFileChange(
|
|
84
|
+
onFileChange(filesSet.filter(Boolean));
|
|
88
85
|
}; // Allowed type specified by consumer.
|
|
89
86
|
|
|
90
87
|
|
|
@@ -93,14 +90,14 @@ async function uploadMedia(_ref) {
|
|
|
93
90
|
return true;
|
|
94
91
|
}
|
|
95
92
|
|
|
96
|
-
return
|
|
93
|
+
return allowedTypes.some(allowedType => {
|
|
97
94
|
// If a complete mimetype is specified verify if it matches exactly the mime type of the file.
|
|
98
|
-
if (
|
|
95
|
+
if (allowedType.includes('/')) {
|
|
99
96
|
return allowedType === fileType;
|
|
100
97
|
} // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
|
|
101
98
|
|
|
102
99
|
|
|
103
|
-
return
|
|
100
|
+
return fileType.startsWith(`${allowedType}/`);
|
|
104
101
|
});
|
|
105
102
|
}; // Allowed types for the current WP_User.
|
|
106
103
|
|
|
@@ -108,7 +105,7 @@ async function uploadMedia(_ref) {
|
|
|
108
105
|
const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
|
|
109
106
|
|
|
110
107
|
const isAllowedMimeTypeForUser = fileType => {
|
|
111
|
-
return
|
|
108
|
+
return allowedMimeTypesForUser.includes(fileType);
|
|
112
109
|
};
|
|
113
110
|
|
|
114
111
|
const validFiles = [];
|
|
@@ -173,10 +170,18 @@ async function uploadMedia(_ref) {
|
|
|
173
170
|
const mediaFile = validFiles[idx];
|
|
174
171
|
|
|
175
172
|
try {
|
|
176
|
-
|
|
177
|
-
|
|
173
|
+
var _savedMedia$caption$r, _savedMedia$caption;
|
|
174
|
+
|
|
175
|
+
const savedMedia = await createMediaFromFile(mediaFile, additionalData); // eslint-disable-next-line camelcase
|
|
176
|
+
|
|
177
|
+
const {
|
|
178
|
+
alt_text,
|
|
179
|
+
source_url,
|
|
180
|
+
...savedMediaProps
|
|
181
|
+
} = savedMedia;
|
|
182
|
+
const mediaObject = { ...savedMediaProps,
|
|
178
183
|
alt: savedMedia.alt_text,
|
|
179
|
-
caption: (
|
|
184
|
+
caption: (_savedMedia$caption$r = (_savedMedia$caption = savedMedia.caption) === null || _savedMedia$caption === void 0 ? void 0 : _savedMedia$caption.raw) !== null && _savedMedia$caption$r !== void 0 ? _savedMedia$caption$r : '',
|
|
180
185
|
title: savedMedia.title.raw,
|
|
181
186
|
url: savedMedia.source_url
|
|
182
187
|
};
|
|
@@ -186,8 +191,8 @@ async function uploadMedia(_ref) {
|
|
|
186
191
|
setAndUpdateFiles(idx, null);
|
|
187
192
|
let message;
|
|
188
193
|
|
|
189
|
-
if (
|
|
190
|
-
message =
|
|
194
|
+
if (error.message) {
|
|
195
|
+
message = error.message;
|
|
191
196
|
} else {
|
|
192
197
|
message = (0, _i18n.sprintf)( // translators: %s: file name
|
|
193
198
|
(0, _i18n.__)('Error while uploading file %s to the media library.'), mediaFile.name);
|
|
@@ -213,7 +218,14 @@ function createMediaFromFile(file, additionalData) {
|
|
|
213
218
|
// Create upload payload.
|
|
214
219
|
const data = new window.FormData();
|
|
215
220
|
data.append('file', file, file.name || file.type.replace('/', '.'));
|
|
216
|
-
|
|
221
|
+
|
|
222
|
+
if (additionalData) {
|
|
223
|
+
Object.entries(additionalData).forEach(_ref3 => {
|
|
224
|
+
let [key, value] = _ref3;
|
|
225
|
+
return data.append(key, value);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
217
229
|
return (0, _apiFetch.default)({
|
|
218
230
|
path: '/wp/v2/media',
|
|
219
231
|
body: data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["noop","getMimeTypesArray","wpMimeTypesObject","mime","extensionsString","type","split","extensions","extension","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","isAllowedType","fileType","allowedType","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","url","length","savedMedia","createMediaFromFile","mediaObject","alt","alt_text","caption","title","raw","source_url","error","data","window","FormData","append","replace","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcompact,\n\tflatMap,\n\tforEach,\n\tget,\n\thas,\n\tincludes,\n\tmap,\n\tomit,\n\tsome,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn flatMap( wpMimeTypesObject, ( mime, extensionsString ) => {\n\t\tconst [ type ] = mime.split( '/' );\n\t\tconst extensions = extensionsString.split( '|' );\n\t\treturn [\n\t\t\tmime,\n\t\t\t...map( extensions, ( extension ) => `${ type }/${ extension }` ),\n\t\t];\n\t} );\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( get( filesSet, [ idx, 'url' ] ) );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( compact( filesSet ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn some( allowedTypes, ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( includes( allowedType, '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn startsWith( fileType, `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn includes( allowedMimeTypesForUser, fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\tconst mediaObject = {\n\t\t\t\t...omit( savedMedia, [ 'alt_text', 'source_url' ] ),\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: get( savedMedia, [ 'caption', 'raw' ], '' ),\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( has( error, [ 'message' ] ) ) {\n\t\t\t\tmessage = get( error, [ 'message' ] );\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tforEach( additionalData, ( value, key ) => data.append( key, value ) );\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["noop","getMimeTypesArray","wpMimeTypesObject","Object","entries","map","extensionsString","mime","type","split","extensions","extension","flat","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","url","filter","Boolean","isAllowedType","fileType","some","allowedType","includes","startsWith","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","length","savedMedia","createMediaFromFile","alt_text","source_url","savedMediaProps","mediaObject","alt","caption","raw","title","error","data","window","FormData","append","replace","forEach","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn Object.entries( wpMimeTypesObject )\n\t\t.map( ( [ extensionsString, mime ] ) => {\n\t\t\tconst [ type ] = mime.split( '/' );\n\t\t\tconst extensions = extensionsString.split( '|' );\n\t\t\treturn [\n\t\t\t\tmime,\n\t\t\t\t...extensions.map(\n\t\t\t\t\t( extension ) => `${ type }/${ extension }`\n\t\t\t\t),\n\t\t\t];\n\t\t} )\n\t\t.flat();\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( filesSet[ idx ]?.url );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( filesSet.filter( Boolean ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn allowedTypes.some( ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( allowedType.includes( '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn fileType.startsWith( `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn allowedMimeTypesForUser.includes( fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tconst { alt_text, source_url, ...savedMediaProps } = savedMedia;\n\t\t\tconst mediaObject = {\n\t\t\t\t...savedMediaProps,\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: savedMedia.caption?.raw ?? '',\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( error.message ) {\n\t\t\t\tmessage = error.message;\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tif ( additionalData ) {\n\t\tObject.entries( additionalData ).forEach( ( [ key, value ] ) =>\n\t\t\tdata.append( key, value )\n\t\t);\n\t}\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { castArray, defaults, pick } from 'lodash';
|
|
5
1
|
/**
|
|
6
2
|
* WordPress dependencies
|
|
7
3
|
*/
|
|
8
|
-
|
|
9
4
|
import { Component } from '@wordpress/element';
|
|
10
5
|
import { __ } from '@wordpress/i18n';
|
|
11
6
|
const {
|
|
@@ -149,9 +144,10 @@ const getGalleryDetailsMediaFrame = () => {
|
|
|
149
144
|
filterable: 'uploaded',
|
|
150
145
|
multiple: 'add',
|
|
151
146
|
editable: false,
|
|
152
|
-
library: wp.media.query(
|
|
153
|
-
type: 'image'
|
|
154
|
-
|
|
147
|
+
library: wp.media.query({
|
|
148
|
+
type: 'image',
|
|
149
|
+
...this.options.library
|
|
150
|
+
})
|
|
155
151
|
}), new wp.media.controller.EditImage({
|
|
156
152
|
model: this.options.editImage
|
|
157
153
|
}), new wp.media.controller.GalleryEdit({
|
|
@@ -169,7 +165,13 @@ const getGalleryDetailsMediaFrame = () => {
|
|
|
169
165
|
|
|
170
166
|
const slimImageObject = img => {
|
|
171
167
|
const attrSet = ['sizes', 'mime', 'type', 'subtype', 'id', 'url', 'alt', 'link', 'caption'];
|
|
172
|
-
return
|
|
168
|
+
return attrSet.reduce((result, key) => {
|
|
169
|
+
if (img !== null && img !== void 0 && img.hasOwnProperty(key)) {
|
|
170
|
+
result[key] = img[key];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return result;
|
|
174
|
+
}, {});
|
|
173
175
|
};
|
|
174
176
|
|
|
175
177
|
const getAttachmentsCollection = ids => {
|
|
@@ -345,12 +347,18 @@ class MediaUpload extends Component {
|
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
onOpen() {
|
|
348
|
-
|
|
350
|
+
const {
|
|
351
|
+
value
|
|
352
|
+
} = this.props;
|
|
353
|
+
this.updateCollection(); //Handle active tab in media model on model open.
|
|
349
354
|
|
|
350
|
-
|
|
355
|
+
if (this.props.mode) {
|
|
356
|
+
this.frame.content.mode(this.props.mode);
|
|
357
|
+
} // Handle both this.props.value being either (number[]) multiple ids
|
|
351
358
|
// (for galleries) or a (number) singular id (e.g. image block).
|
|
352
359
|
|
|
353
|
-
|
|
360
|
+
|
|
361
|
+
const hasMedia = Array.isArray(value) ? !!(value !== null && value !== void 0 && value.length) : !!value;
|
|
354
362
|
|
|
355
363
|
if (!hasMedia) {
|
|
356
364
|
return;
|
|
@@ -358,15 +366,16 @@ class MediaUpload extends Component {
|
|
|
358
366
|
|
|
359
367
|
const isGallery = this.props.gallery;
|
|
360
368
|
const selection = this.frame.state().get('selection');
|
|
369
|
+
const valueArray = Array.isArray(value) ? value : [value];
|
|
361
370
|
|
|
362
371
|
if (!isGallery) {
|
|
363
|
-
|
|
372
|
+
valueArray.forEach(id => {
|
|
364
373
|
selection.add(wp.media.attachment(id));
|
|
365
374
|
});
|
|
366
375
|
} // Load the images so they are available in the media modal.
|
|
367
376
|
|
|
368
377
|
|
|
369
|
-
const attachments = getAttachmentsCollection(
|
|
378
|
+
const attachments = getAttachmentsCollection(valueArray); // Once attachments are loaded, set the current selection.
|
|
370
379
|
|
|
371
380
|
attachments.more().done(function () {
|
|
372
381
|
var _attachments$models;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["castArray","defaults","pick","Component","__","wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","hasMedia","Array","isArray","isGallery","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { castArray, defaults, pick } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query(\n\t\t\t\t\t\tdefaults(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.options.library\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn pick( img, attrSet );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tthis.updateCollection();\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( this.props.value )\n\t\t\t? !! this.props.value?.length\n\t\t\t: !! this.props.value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\n\t\tif ( ! isGallery ) {\n\t\t\tcastArray( this.props.value ).forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection(\n\t\t\tcastArray( this.props.value )\n\t\t);\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/media-utils/src/components/media-upload/index.js"],"names":["Component","__","wp","window","DEFAULT_EMPTY_GALLERY","getFeaturedImageMediaFrame","media","view","MediaFrame","Select","extend","featuredImageToolbar","toolbar","createSelectToolbar","text","l10n","setFeaturedImage","state","options","editState","selection","get","EditImage","model","single","controller","render","content","set","loadEditor","createStates","on","states","add","FeaturedImage","editImage","getGalleryDetailsMediaFrame","Post","galleryToolbar","editing","Toolbar","items","insert","style","updateGallery","insertGallery","priority","requires","library","click","close","trigger","setState","reset","Library","id","title","createGalleryTitle","filterable","multiple","editable","query","type","GalleryEdit","menu","displaySettings","GalleryAdd","slimImageObject","img","attrSet","reduce","result","key","hasOwnProperty","getAttachmentsCollection","ids","order","orderby","post__in","posts_per_page","MediaUpload","constructor","allowedTypes","gallery","unstableFeaturedImageFlow","modalClass","arguments","openModal","bind","onOpen","onSelect","onUpdate","onClose","buildAndSetGalleryFrame","frameConfig","frame","$el","addClass","buildAndSetFeatureImageFrame","initializeListeners","addToGallery","value","props","lastGalleryValue","remove","currentState","length","GalleryDetailsMediaFrame","attachments","Selection","models","toJSON","mimeType","featuredImageFrame","componentWillUnmount","selections","selectedImages","map","attachment","updateCollection","mode","hasMedia","Array","isArray","isGallery","valueArray","forEach","more","done","frameContent","collection","toArray","mirroring","_hasMore","open"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nconst { wp } = window;\n\nconst DEFAULT_EMPTY_GALLERY = [];\n\n/**\n * Prepares the Featured Image toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Select} The default media workflow.\n */\nconst getFeaturedImageMediaFrame = () => {\n\treturn wp.media.view.MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Enables the Set Featured Image Button.\n\t\t *\n\t\t * @param {Object} toolbar toolbar for featured image state\n\t\t * @return {void}\n\t\t */\n\t\tfeaturedImageToolbar( toolbar ) {\n\t\t\tthis.createSelectToolbar( toolbar, {\n\t\t\t\ttext: wp.media.view.l10n.setFeaturedImage,\n\t\t\t\tstate: this.options.state,\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'featured-image' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on(\n\t\t\t\t'toolbar:create:featured-image',\n\t\t\t\tthis.featuredImageToolbar,\n\t\t\t\tthis\n\t\t\t);\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.FeaturedImage(),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n/**\n * Prepares the Gallery toolbars and frames.\n *\n * @return {wp.media.view.MediaFrame.Post} The default media workflow.\n */\nconst getGalleryDetailsMediaFrame = () => {\n\t/**\n\t * Custom gallery details frame.\n\t *\n\t * @see https://github.com/xwp/wp-core-media-widgets/blob/905edbccfc2a623b73a93dac803c5335519d7837/wp-admin/js/widgets/media-gallery-widget.js\n\t * @class GalleryDetailsMediaFrame\n\t * @class\n\t */\n\treturn wp.media.view.MediaFrame.Post.extend( {\n\t\t/**\n\t\t * Set up gallery toolbar.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tgalleryToolbar() {\n\t\t\tconst editing = this.state().get( 'editing' );\n\t\t\tthis.toolbar.set(\n\t\t\t\tnew wp.media.view.Toolbar( {\n\t\t\t\t\tcontroller: this,\n\t\t\t\t\titems: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tstyle: 'primary',\n\t\t\t\t\t\t\ttext: editing\n\t\t\t\t\t\t\t\t? wp.media.view.l10n.updateGallery\n\t\t\t\t\t\t\t\t: wp.media.view.l10n.insertGallery,\n\t\t\t\t\t\t\tpriority: 80,\n\t\t\t\t\t\t\trequires: { library: true },\n\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @fires wp.media.controller.State#update\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tclick() {\n\t\t\t\t\t\t\t\tconst controller = this.controller,\n\t\t\t\t\t\t\t\t\tstate = controller.state();\n\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\tstate.trigger(\n\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\tstate.get( 'library' )\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t// Restore and reset the default state.\n\t\t\t\t\t\t\t\tcontroller.setState( controller.options.state );\n\t\t\t\t\t\t\t\tcontroller.reset();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Handle the edit state requirements of selected media item.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\teditState() {\n\t\t\tconst selection = this.state( 'gallery' ).get( 'selection' );\n\t\t\tconst view = new wp.media.view.EditImage( {\n\t\t\t\tmodel: selection.single(),\n\t\t\t\tcontroller: this,\n\t\t\t} ).render();\n\n\t\t\t// Set the view to the EditImage frame using the selected image.\n\t\t\tthis.content.set( view );\n\n\t\t\t// After bringing in the frame, load the actual editor via an ajax call.\n\t\t\tview.loadEditor();\n\t\t},\n\n\t\t/**\n\t\t * Create the default states.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tcreateStates: function createStates() {\n\t\t\tthis.on( 'toolbar:create:main-gallery', this.galleryToolbar, this );\n\t\t\tthis.on( 'content:render:edit-image', this.editState, this );\n\n\t\t\tthis.states.add( [\n\t\t\t\tnew wp.media.controller.Library( {\n\t\t\t\t\tid: 'gallery',\n\t\t\t\t\ttitle: wp.media.view.l10n.createGalleryTitle,\n\t\t\t\t\tpriority: 40,\n\t\t\t\t\ttoolbar: 'main-gallery',\n\t\t\t\t\tfilterable: 'uploaded',\n\t\t\t\t\tmultiple: 'add',\n\t\t\t\t\teditable: false,\n\n\t\t\t\t\tlibrary: wp.media.query( {\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t...this.options.library,\n\t\t\t\t\t} ),\n\t\t\t\t} ),\n\t\t\t\tnew wp.media.controller.EditImage( {\n\t\t\t\t\tmodel: this.options.editImage,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryEdit( {\n\t\t\t\t\tlibrary: this.options.selection,\n\t\t\t\t\tediting: this.options.editing,\n\t\t\t\t\tmenu: 'gallery',\n\t\t\t\t\tdisplaySettings: false,\n\t\t\t\t\tmultiple: true,\n\t\t\t\t} ),\n\n\t\t\t\tnew wp.media.controller.GalleryAdd(),\n\t\t\t] );\n\t\t},\n\t} );\n};\n\n// The media library image object contains numerous attributes\n// we only need this set to display the image in the library.\nconst slimImageObject = ( img ) => {\n\tconst attrSet = [\n\t\t'sizes',\n\t\t'mime',\n\t\t'type',\n\t\t'subtype',\n\t\t'id',\n\t\t'url',\n\t\t'alt',\n\t\t'link',\n\t\t'caption',\n\t];\n\treturn attrSet.reduce( ( result, key ) => {\n\t\tif ( img?.hasOwnProperty( key ) ) {\n\t\t\tresult[ key ] = img[ key ];\n\t\t}\n\t\treturn result;\n\t}, {} );\n};\n\nconst getAttachmentsCollection = ( ids ) => {\n\treturn wp.media.query( {\n\t\torder: 'ASC',\n\t\torderby: 'post__in',\n\t\tpost__in: ids,\n\t\tposts_per_page: -1,\n\t\tquery: true,\n\t\ttype: 'image',\n\t} );\n};\n\nclass MediaUpload extends Component {\n\tconstructor( {\n\t\tallowedTypes,\n\t\tgallery = false,\n\t\tunstableFeaturedImageFlow = false,\n\t\tmodalClass,\n\t\tmultiple = false,\n\t\ttitle = __( 'Select or Upload Media' ),\n\t} ) {\n\t\tsuper( ...arguments );\n\t\tthis.openModal = this.openModal.bind( this );\n\t\tthis.onOpen = this.onOpen.bind( this );\n\t\tthis.onSelect = this.onSelect.bind( this );\n\t\tthis.onUpdate = this.onUpdate.bind( this );\n\t\tthis.onClose = this.onClose.bind( this );\n\n\t\tif ( gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t} else {\n\t\t\tconst frameConfig = {\n\t\t\t\ttitle,\n\t\t\t\tmultiple,\n\t\t\t};\n\t\t\tif ( !! allowedTypes ) {\n\t\t\t\tframeConfig.library = { type: allowedTypes };\n\t\t\t}\n\n\t\t\tthis.frame = wp.media( frameConfig );\n\t\t}\n\n\t\tif ( modalClass ) {\n\t\t\tthis.frame.$el.addClass( modalClass );\n\t\t}\n\n\t\tif ( unstableFeaturedImageFlow ) {\n\t\t\tthis.buildAndSetFeatureImageFrame();\n\t\t}\n\t\tthis.initializeListeners();\n\t}\n\n\tinitializeListeners() {\n\t\t// When an image is selected in the media frame...\n\t\tthis.frame.on( 'select', this.onSelect );\n\t\tthis.frame.on( 'update', this.onUpdate );\n\t\tthis.frame.on( 'open', this.onOpen );\n\t\tthis.frame.on( 'close', this.onClose );\n\t}\n\n\t/**\n\t * Sets the Gallery frame and initializes listeners.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetGalleryFrame() {\n\t\tconst {\n\t\t\taddToGallery = false,\n\t\t\tallowedTypes,\n\t\t\tmultiple = false,\n\t\t\tvalue = DEFAULT_EMPTY_GALLERY,\n\t\t} = this.props;\n\n\t\t// If the value did not changed there is no need to rebuild the frame,\n\t\t// we can continue to use the existing one.\n\t\tif ( value === this.lastGalleryValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastGalleryValue = value;\n\n\t\t// If a frame already existed remove it.\n\t\tif ( this.frame ) {\n\t\t\tthis.frame.remove();\n\t\t}\n\t\tlet currentState;\n\t\tif ( addToGallery ) {\n\t\t\tcurrentState = 'gallery-library';\n\t\t} else {\n\t\t\tcurrentState = value && value.length ? 'gallery-edit' : 'gallery';\n\t\t}\n\t\tif ( ! this.GalleryDetailsMediaFrame ) {\n\t\t\tthis.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();\n\t\t}\n\t\tconst attachments = getAttachmentsCollection( value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t\tmultiple,\n\t\t} );\n\t\tthis.frame = new this.GalleryDetailsMediaFrame( {\n\t\t\tmimeType: allowedTypes,\n\t\t\tstate: currentState,\n\t\t\tmultiple,\n\t\t\tselection,\n\t\t\tediting: value && value.length ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t\tthis.initializeListeners();\n\t}\n\n\t/**\n\t * Initializes the Media Library requirements for the featured image flow.\n\t *\n\t * @return {void}\n\t */\n\tbuildAndSetFeatureImageFrame() {\n\t\tconst featuredImageFrame = getFeaturedImageMediaFrame();\n\t\tconst attachments = getAttachmentsCollection( this.props.value );\n\t\tconst selection = new wp.media.model.Selection( attachments.models, {\n\t\t\tprops: attachments.props.toJSON(),\n\t\t} );\n\t\tthis.frame = new featuredImageFrame( {\n\t\t\tmimeType: this.props.allowedTypes,\n\t\t\tstate: 'featured-image',\n\t\t\tmultiple: this.props.multiple,\n\t\t\tselection,\n\t\t\tediting: this.props.value ? true : false,\n\t\t} );\n\t\twp.media.frame = this.frame;\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.frame.remove();\n\t}\n\n\tonUpdate( selections ) {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\tconst state = this.frame.state();\n\t\tconst selectedImages = selections || state.get( 'selection' );\n\n\t\tif ( ! selectedImages || ! selectedImages.models.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( multiple ) {\n\t\t\tonSelect(\n\t\t\t\tselectedImages.models.map( ( model ) =>\n\t\t\t\t\tslimImageObject( model.toJSON() )\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tonSelect( slimImageObject( selectedImages.models[ 0 ].toJSON() ) );\n\t\t}\n\t}\n\n\tonSelect() {\n\t\tconst { onSelect, multiple = false } = this.props;\n\t\t// Get media attachment details from the frame state.\n\t\tconst attachment = this.frame.state().get( 'selection' ).toJSON();\n\t\tonSelect( multiple ? attachment : attachment[ 0 ] );\n\t}\n\n\tonOpen() {\n\t\tconst { value } = this.props;\n\t\tthis.updateCollection();\n\n\t\t//Handle active tab in media model on model open.\n\t\tif ( this.props.mode ) {\n\t\t\tthis.frame.content.mode( this.props.mode );\n\t\t}\n\n\t\t// Handle both this.props.value being either (number[]) multiple ids\n\t\t// (for galleries) or a (number) singular id (e.g. image block).\n\t\tconst hasMedia = Array.isArray( value ) ? !! value?.length : !! value;\n\n\t\tif ( ! hasMedia ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isGallery = this.props.gallery;\n\t\tconst selection = this.frame.state().get( 'selection' );\n\t\tconst valueArray = Array.isArray( value ) ? value : [ value ];\n\n\t\tif ( ! isGallery ) {\n\t\t\tvalueArray.forEach( ( id ) => {\n\t\t\t\tselection.add( wp.media.attachment( id ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Load the images so they are available in the media modal.\n\t\tconst attachments = getAttachmentsCollection( valueArray );\n\n\t\t// Once attachments are loaded, set the current selection.\n\t\tattachments.more().done( function () {\n\t\t\tif ( isGallery && attachments?.models?.length ) {\n\t\t\t\tselection.add( attachments.models );\n\t\t\t}\n\t\t} );\n\t}\n\n\tonClose() {\n\t\tconst { onClose } = this.props;\n\n\t\tif ( onClose ) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tupdateCollection() {\n\t\tconst frameContent = this.frame.content.get();\n\t\tif ( frameContent && frameContent.collection ) {\n\t\t\tconst collection = frameContent.collection;\n\n\t\t\t// Clean all attachments we have in memory.\n\t\t\tcollection\n\t\t\t\t.toArray()\n\t\t\t\t.forEach( ( model ) => model.trigger( 'destroy', model ) );\n\n\t\t\t// Reset has more flag, if library had small amount of items all items may have been loaded before.\n\t\t\tcollection.mirroring._hasMore = true;\n\n\t\t\t// Request items.\n\t\t\tcollection.more();\n\t\t}\n\t}\n\n\topenModal() {\n\t\tif ( this.props.gallery ) {\n\t\t\tthis.buildAndSetGalleryFrame();\n\t\t}\n\t\tthis.frame.open();\n\t}\n\n\trender() {\n\t\treturn this.props.render( { open: this.openModal } );\n\t}\n}\n\nexport default MediaUpload;\n"]}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { compact, flatMap, forEach, get, has, includes, map, omit, some, startsWith } from 'lodash';
|
|
5
1
|
/**
|
|
6
2
|
* WordPress dependencies
|
|
7
3
|
*/
|
|
8
|
-
|
|
9
4
|
import apiFetch from '@wordpress/api-fetch';
|
|
10
5
|
import { createBlobURL, revokeBlobURL } from '@wordpress/blob';
|
|
11
6
|
import { __, sprintf } from '@wordpress/i18n';
|
|
@@ -31,11 +26,12 @@ export function getMimeTypesArray(wpMimeTypesObject) {
|
|
|
31
26
|
return wpMimeTypesObject;
|
|
32
27
|
}
|
|
33
28
|
|
|
34
|
-
return
|
|
29
|
+
return Object.entries(wpMimeTypesObject).map(_ref => {
|
|
30
|
+
let [extensionsString, mime] = _ref;
|
|
35
31
|
const [type] = mime.split('/');
|
|
36
32
|
const extensions = extensionsString.split('|');
|
|
37
|
-
return [mime, ...map(
|
|
38
|
-
});
|
|
33
|
+
return [mime, ...extensions.map(extension => `${type}/${extension}`)];
|
|
34
|
+
}).flat();
|
|
39
35
|
}
|
|
40
36
|
/**
|
|
41
37
|
* Media Upload is used by audio, image, gallery, video, and file blocks to
|
|
@@ -53,7 +49,7 @@ export function getMimeTypesArray(wpMimeTypesObject) {
|
|
|
53
49
|
* @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.
|
|
54
50
|
*/
|
|
55
51
|
|
|
56
|
-
export async function uploadMedia(
|
|
52
|
+
export async function uploadMedia(_ref2) {
|
|
57
53
|
let {
|
|
58
54
|
allowedTypes,
|
|
59
55
|
additionalData = {},
|
|
@@ -62,15 +58,17 @@ export async function uploadMedia(_ref) {
|
|
|
62
58
|
onError = noop,
|
|
63
59
|
onFileChange,
|
|
64
60
|
wpAllowedMimeTypes = null
|
|
65
|
-
} =
|
|
61
|
+
} = _ref2;
|
|
66
62
|
// Cast filesList to array.
|
|
67
63
|
const files = [...filesList];
|
|
68
64
|
const filesSet = [];
|
|
69
65
|
|
|
70
66
|
const setAndUpdateFiles = (idx, value) => {
|
|
71
|
-
|
|
67
|
+
var _filesSet$idx;
|
|
68
|
+
|
|
69
|
+
revokeBlobURL((_filesSet$idx = filesSet[idx]) === null || _filesSet$idx === void 0 ? void 0 : _filesSet$idx.url);
|
|
72
70
|
filesSet[idx] = value;
|
|
73
|
-
onFileChange(
|
|
71
|
+
onFileChange(filesSet.filter(Boolean));
|
|
74
72
|
}; // Allowed type specified by consumer.
|
|
75
73
|
|
|
76
74
|
|
|
@@ -79,14 +77,14 @@ export async function uploadMedia(_ref) {
|
|
|
79
77
|
return true;
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
return some(
|
|
80
|
+
return allowedTypes.some(allowedType => {
|
|
83
81
|
// If a complete mimetype is specified verify if it matches exactly the mime type of the file.
|
|
84
|
-
if (includes(
|
|
82
|
+
if (allowedType.includes('/')) {
|
|
85
83
|
return allowedType === fileType;
|
|
86
84
|
} // Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
|
|
87
85
|
|
|
88
86
|
|
|
89
|
-
return startsWith(
|
|
87
|
+
return fileType.startsWith(`${allowedType}/`);
|
|
90
88
|
});
|
|
91
89
|
}; // Allowed types for the current WP_User.
|
|
92
90
|
|
|
@@ -94,7 +92,7 @@ export async function uploadMedia(_ref) {
|
|
|
94
92
|
const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
|
|
95
93
|
|
|
96
94
|
const isAllowedMimeTypeForUser = fileType => {
|
|
97
|
-
return includes(
|
|
95
|
+
return allowedMimeTypesForUser.includes(fileType);
|
|
98
96
|
};
|
|
99
97
|
|
|
100
98
|
const validFiles = [];
|
|
@@ -159,10 +157,18 @@ export async function uploadMedia(_ref) {
|
|
|
159
157
|
const mediaFile = validFiles[idx];
|
|
160
158
|
|
|
161
159
|
try {
|
|
162
|
-
|
|
163
|
-
|
|
160
|
+
var _savedMedia$caption$r, _savedMedia$caption;
|
|
161
|
+
|
|
162
|
+
const savedMedia = await createMediaFromFile(mediaFile, additionalData); // eslint-disable-next-line camelcase
|
|
163
|
+
|
|
164
|
+
const {
|
|
165
|
+
alt_text,
|
|
166
|
+
source_url,
|
|
167
|
+
...savedMediaProps
|
|
168
|
+
} = savedMedia;
|
|
169
|
+
const mediaObject = { ...savedMediaProps,
|
|
164
170
|
alt: savedMedia.alt_text,
|
|
165
|
-
caption:
|
|
171
|
+
caption: (_savedMedia$caption$r = (_savedMedia$caption = savedMedia.caption) === null || _savedMedia$caption === void 0 ? void 0 : _savedMedia$caption.raw) !== null && _savedMedia$caption$r !== void 0 ? _savedMedia$caption$r : '',
|
|
166
172
|
title: savedMedia.title.raw,
|
|
167
173
|
url: savedMedia.source_url
|
|
168
174
|
};
|
|
@@ -172,8 +178,8 @@ export async function uploadMedia(_ref) {
|
|
|
172
178
|
setAndUpdateFiles(idx, null);
|
|
173
179
|
let message;
|
|
174
180
|
|
|
175
|
-
if (
|
|
176
|
-
message =
|
|
181
|
+
if (error.message) {
|
|
182
|
+
message = error.message;
|
|
177
183
|
} else {
|
|
178
184
|
message = sprintf( // translators: %s: file name
|
|
179
185
|
__('Error while uploading file %s to the media library.'), mediaFile.name);
|
|
@@ -198,7 +204,14 @@ function createMediaFromFile(file, additionalData) {
|
|
|
198
204
|
// Create upload payload.
|
|
199
205
|
const data = new window.FormData();
|
|
200
206
|
data.append('file', file, file.name || file.type.replace('/', '.'));
|
|
201
|
-
|
|
207
|
+
|
|
208
|
+
if (additionalData) {
|
|
209
|
+
Object.entries(additionalData).forEach(_ref3 => {
|
|
210
|
+
let [key, value] = _ref3;
|
|
211
|
+
return data.append(key, value);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
202
215
|
return apiFetch({
|
|
203
216
|
path: '/wp/v2/media',
|
|
204
217
|
body: data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["compact","flatMap","forEach","get","has","includes","map","omit","some","startsWith","apiFetch","createBlobURL","revokeBlobURL","__","sprintf","noop","getMimeTypesArray","wpMimeTypesObject","mime","extensionsString","type","split","extensions","extension","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","isAllowedType","fileType","allowedType","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","url","length","savedMedia","createMediaFromFile","mediaObject","alt","alt_text","caption","title","raw","source_url","error","data","window","FormData","append","replace","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport {\n\tcompact,\n\tflatMap,\n\tforEach,\n\tget,\n\thas,\n\tincludes,\n\tmap,\n\tomit,\n\tsome,\n\tstartsWith,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn flatMap( wpMimeTypesObject, ( mime, extensionsString ) => {\n\t\tconst [ type ] = mime.split( '/' );\n\t\tconst extensions = extensionsString.split( '|' );\n\t\treturn [\n\t\t\tmime,\n\t\t\t...map( extensions, ( extension ) => `${ type }/${ extension }` ),\n\t\t];\n\t} );\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( get( filesSet, [ idx, 'url' ] ) );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( compact( filesSet ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn some( allowedTypes, ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( includes( allowedType, '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn startsWith( fileType, `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn includes( allowedMimeTypesForUser, fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\tconst mediaObject = {\n\t\t\t\t...omit( savedMedia, [ 'alt_text', 'source_url' ] ),\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: get( savedMedia, [ 'caption', 'raw' ], '' ),\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( has( error, [ 'message' ] ) ) {\n\t\t\t\tmessage = get( error, [ 'message' ] );\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tforEach( additionalData, ( value, key ) => data.append( key, value ) );\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/media-utils/src/utils/upload-media.js"],"names":["apiFetch","createBlobURL","revokeBlobURL","__","sprintf","noop","getMimeTypesArray","wpMimeTypesObject","Object","entries","map","extensionsString","mime","type","split","extensions","extension","flat","uploadMedia","allowedTypes","additionalData","filesList","maxUploadFileSize","onError","onFileChange","wpAllowedMimeTypes","files","filesSet","setAndUpdateFiles","idx","value","url","filter","Boolean","isAllowedType","fileType","some","allowedType","includes","startsWith","allowedMimeTypesForUser","isAllowedMimeTypeForUser","validFiles","mediaFile","code","message","name","file","size","push","length","savedMedia","createMediaFromFile","alt_text","source_url","savedMediaProps","mediaObject","alt","caption","raw","title","error","data","window","FormData","append","replace","forEach","key","path","body","method"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { createBlobURL, revokeBlobURL } from '@wordpress/blob';\nimport { __, sprintf } from '@wordpress/i18n';\n\nconst noop = () => {};\n\n/**\n * Browsers may use unexpected mime types, and they differ from browser to browser.\n * This function computes a flexible array of mime types from the mime type structured provided by the server.\n * Converts { jpg|jpeg|jpe: \"image/jpeg\" } into [ \"image/jpeg\", \"image/jpg\", \"image/jpeg\", \"image/jpe\" ]\n * The computation of this array instead of directly using the object,\n * solves the problem in chrome where mp3 files have audio/mp3 as mime type instead of audio/mpeg.\n * https://bugs.chromium.org/p/chromium/issues/detail?id=227004\n *\n * @param {?Object} wpMimeTypesObject Mime type object received from the server.\n * Extensions are keys separated by '|' and values are mime types associated with an extension.\n *\n * @return {?Array} An array of mime types or the parameter passed if it was \"falsy\".\n */\nexport function getMimeTypesArray( wpMimeTypesObject ) {\n\tif ( ! wpMimeTypesObject ) {\n\t\treturn wpMimeTypesObject;\n\t}\n\treturn Object.entries( wpMimeTypesObject )\n\t\t.map( ( [ extensionsString, mime ] ) => {\n\t\t\tconst [ type ] = mime.split( '/' );\n\t\t\tconst extensions = extensionsString.split( '|' );\n\t\t\treturn [\n\t\t\t\tmime,\n\t\t\t\t...extensions.map(\n\t\t\t\t\t( extension ) => `${ type }/${ extension }`\n\t\t\t\t),\n\t\t\t];\n\t\t} )\n\t\t.flat();\n}\n\n/**\n *\tMedia Upload is used by audio, image, gallery, video, and file blocks to\n *\thandle uploading a media file when a file upload button is activated.\n *\n *\tTODO: future enhancement to add an upload indicator.\n *\n * @param {Object} $0 Parameters object passed to the function.\n * @param {?Array} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.\n * @param {?Object} $0.additionalData Additional data to include in the request.\n * @param {Array} $0.filesList List of files.\n * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site.\n * @param {Function} $0.onError Function called when an error happens.\n * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available.\n * @param {?Object} $0.wpAllowedMimeTypes List of allowed mime types and file extensions.\n */\nexport async function uploadMedia( {\n\tallowedTypes,\n\tadditionalData = {},\n\tfilesList,\n\tmaxUploadFileSize,\n\tonError = noop,\n\tonFileChange,\n\twpAllowedMimeTypes = null,\n} ) {\n\t// Cast filesList to array.\n\tconst files = [ ...filesList ];\n\n\tconst filesSet = [];\n\tconst setAndUpdateFiles = ( idx, value ) => {\n\t\trevokeBlobURL( filesSet[ idx ]?.url );\n\t\tfilesSet[ idx ] = value;\n\t\tonFileChange( filesSet.filter( Boolean ) );\n\t};\n\n\t// Allowed type specified by consumer.\n\tconst isAllowedType = ( fileType ) => {\n\t\tif ( ! allowedTypes ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn allowedTypes.some( ( allowedType ) => {\n\t\t\t// If a complete mimetype is specified verify if it matches exactly the mime type of the file.\n\t\t\tif ( allowedType.includes( '/' ) ) {\n\t\t\t\treturn allowedType === fileType;\n\t\t\t}\n\t\t\t// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.\n\t\t\treturn fileType.startsWith( `${ allowedType }/` );\n\t\t} );\n\t};\n\n\t// Allowed types for the current WP_User.\n\tconst allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );\n\tconst isAllowedMimeTypeForUser = ( fileType ) => {\n\t\treturn allowedMimeTypesForUser.includes( fileType );\n\t};\n\n\tconst validFiles = [];\n\n\tfor ( const mediaFile of files ) {\n\t\t// Verify if user is allowed to upload this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif (\n\t\t\tallowedMimeTypesForUser &&\n\t\t\tmediaFile.type &&\n\t\t\t! isAllowedMimeTypeForUser( mediaFile.type )\n\t\t) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: Sorry, you are not allowed to upload this file type.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check if the block supports this mime type.\n\t\t// Defer to the server when type not detected.\n\t\tif ( mediaFile.type && ! isAllowedType( mediaFile.type ) ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'MIME_TYPE_NOT_SUPPORTED',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: Sorry, this file type is not supported here.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Verify if file is greater than the maximum file upload size allowed for the site.\n\t\tif ( maxUploadFileSize && mediaFile.size > maxUploadFileSize ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'SIZE_ABOVE_LIMIT',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__(\n\t\t\t\t\t\t'%s: This file exceeds the maximum upload size for this site.'\n\t\t\t\t\t),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Don't allow empty files to be uploaded.\n\t\tif ( mediaFile.size <= 0 ) {\n\t\t\tonError( {\n\t\t\t\tcode: 'EMPTY_FILE',\n\t\t\t\tmessage: sprintf(\n\t\t\t\t\t// translators: %s: file name.\n\t\t\t\t\t__( '%s: This file is empty.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t),\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidFiles.push( mediaFile );\n\n\t\t// Set temporary URL to create placeholder media file, this is replaced\n\t\t// with final file from media gallery when upload is `done` below.\n\t\tfilesSet.push( { url: createBlobURL( mediaFile ) } );\n\t\tonFileChange( filesSet );\n\t}\n\n\tfor ( let idx = 0; idx < validFiles.length; ++idx ) {\n\t\tconst mediaFile = validFiles[ idx ];\n\t\ttry {\n\t\t\tconst savedMedia = await createMediaFromFile(\n\t\t\t\tmediaFile,\n\t\t\t\tadditionalData\n\t\t\t);\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tconst { alt_text, source_url, ...savedMediaProps } = savedMedia;\n\t\t\tconst mediaObject = {\n\t\t\t\t...savedMediaProps,\n\t\t\t\talt: savedMedia.alt_text,\n\t\t\t\tcaption: savedMedia.caption?.raw ?? '',\n\t\t\t\ttitle: savedMedia.title.raw,\n\t\t\t\turl: savedMedia.source_url,\n\t\t\t};\n\t\t\tsetAndUpdateFiles( idx, mediaObject );\n\t\t} catch ( error ) {\n\t\t\t// Reset to empty on failure.\n\t\t\tsetAndUpdateFiles( idx, null );\n\t\t\tlet message;\n\t\t\tif ( error.message ) {\n\t\t\t\tmessage = error.message;\n\t\t\t} else {\n\t\t\t\tmessage = sprintf(\n\t\t\t\t\t// translators: %s: file name\n\t\t\t\t\t__( 'Error while uploading file %s to the media library.' ),\n\t\t\t\t\tmediaFile.name\n\t\t\t\t);\n\t\t\t}\n\t\t\tonError( {\n\t\t\t\tcode: 'GENERAL',\n\t\t\t\tmessage,\n\t\t\t\tfile: mediaFile,\n\t\t\t} );\n\t\t}\n\t}\n}\n\n/**\n * @param {File} file Media File to Save.\n * @param {?Object} additionalData Additional data to include in the request.\n *\n * @return {Promise} Media Object Promise.\n */\nfunction createMediaFromFile( file, additionalData ) {\n\t// Create upload payload.\n\tconst data = new window.FormData();\n\tdata.append( 'file', file, file.name || file.type.replace( '/', '.' ) );\n\tif ( additionalData ) {\n\t\tObject.entries( additionalData ).forEach( ( [ key, value ] ) =>\n\t\t\tdata.append( key, value )\n\t\t);\n\t}\n\treturn apiFetch( {\n\t\tpath: '/wp/v2/media',\n\t\tbody: data,\n\t\tmethod: 'POST',\n\t} );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/media-utils",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "WordPress Media Upload Utils.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -26,14 +26,13 @@
|
|
|
26
26
|
"module": "build-module/index.js",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@babel/runtime": "^7.16.0",
|
|
29
|
-
"@wordpress/api-fetch": "^6.
|
|
30
|
-
"@wordpress/blob": "^3.
|
|
31
|
-
"@wordpress/element": "^4.
|
|
32
|
-
"@wordpress/i18n": "^4.
|
|
33
|
-
"lodash": "^4.17.21"
|
|
29
|
+
"@wordpress/api-fetch": "^6.11.0",
|
|
30
|
+
"@wordpress/blob": "^3.14.0",
|
|
31
|
+
"@wordpress/element": "^4.12.0",
|
|
32
|
+
"@wordpress/i18n": "^4.14.0"
|
|
34
33
|
},
|
|
35
34
|
"publishConfig": {
|
|
36
35
|
"access": "public"
|
|
37
36
|
},
|
|
38
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "0315dbc240cb2aa146d7c1bafd251f004b88300e"
|
|
39
38
|
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { castArray, defaults, pick } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -169,14 +164,10 @@ const getGalleryDetailsMediaFrame = () => {
|
|
|
169
164
|
multiple: 'add',
|
|
170
165
|
editable: false,
|
|
171
166
|
|
|
172
|
-
library: wp.media.query(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
},
|
|
177
|
-
this.options.library
|
|
178
|
-
)
|
|
179
|
-
),
|
|
167
|
+
library: wp.media.query( {
|
|
168
|
+
type: 'image',
|
|
169
|
+
...this.options.library,
|
|
170
|
+
} ),
|
|
180
171
|
} ),
|
|
181
172
|
new wp.media.controller.EditImage( {
|
|
182
173
|
model: this.options.editImage,
|
|
@@ -210,7 +201,12 @@ const slimImageObject = ( img ) => {
|
|
|
210
201
|
'link',
|
|
211
202
|
'caption',
|
|
212
203
|
];
|
|
213
|
-
return
|
|
204
|
+
return attrSet.reduce( ( result, key ) => {
|
|
205
|
+
if ( img?.hasOwnProperty( key ) ) {
|
|
206
|
+
result[ key ] = img[ key ];
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}, {} );
|
|
214
210
|
};
|
|
215
211
|
|
|
216
212
|
const getAttachmentsCollection = ( ids ) => {
|
|
@@ -375,13 +371,17 @@ class MediaUpload extends Component {
|
|
|
375
371
|
}
|
|
376
372
|
|
|
377
373
|
onOpen() {
|
|
374
|
+
const { value } = this.props;
|
|
378
375
|
this.updateCollection();
|
|
379
376
|
|
|
377
|
+
//Handle active tab in media model on model open.
|
|
378
|
+
if ( this.props.mode ) {
|
|
379
|
+
this.frame.content.mode( this.props.mode );
|
|
380
|
+
}
|
|
381
|
+
|
|
380
382
|
// Handle both this.props.value being either (number[]) multiple ids
|
|
381
383
|
// (for galleries) or a (number) singular id (e.g. image block).
|
|
382
|
-
const hasMedia = Array.isArray(
|
|
383
|
-
? !! this.props.value?.length
|
|
384
|
-
: !! this.props.value;
|
|
384
|
+
const hasMedia = Array.isArray( value ) ? !! value?.length : !! value;
|
|
385
385
|
|
|
386
386
|
if ( ! hasMedia ) {
|
|
387
387
|
return;
|
|
@@ -389,17 +389,16 @@ class MediaUpload extends Component {
|
|
|
389
389
|
|
|
390
390
|
const isGallery = this.props.gallery;
|
|
391
391
|
const selection = this.frame.state().get( 'selection' );
|
|
392
|
+
const valueArray = Array.isArray( value ) ? value : [ value ];
|
|
392
393
|
|
|
393
394
|
if ( ! isGallery ) {
|
|
394
|
-
|
|
395
|
+
valueArray.forEach( ( id ) => {
|
|
395
396
|
selection.add( wp.media.attachment( id ) );
|
|
396
397
|
} );
|
|
397
398
|
}
|
|
398
399
|
|
|
399
400
|
// Load the images so they are available in the media modal.
|
|
400
|
-
const attachments = getAttachmentsCollection(
|
|
401
|
-
castArray( this.props.value )
|
|
402
|
-
);
|
|
401
|
+
const attachments = getAttachmentsCollection( valueArray );
|
|
403
402
|
|
|
404
403
|
// Once attachments are loaded, set the current selection.
|
|
405
404
|
attachments.more().done( function () {
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import {
|
|
5
|
-
compact,
|
|
6
|
-
flatMap,
|
|
7
|
-
forEach,
|
|
8
|
-
get,
|
|
9
|
-
has,
|
|
10
|
-
includes,
|
|
11
|
-
map,
|
|
12
|
-
omit,
|
|
13
|
-
some,
|
|
14
|
-
startsWith,
|
|
15
|
-
} from 'lodash';
|
|
16
|
-
|
|
17
1
|
/**
|
|
18
2
|
* WordPress dependencies
|
|
19
3
|
*/
|
|
@@ -40,14 +24,18 @@ export function getMimeTypesArray( wpMimeTypesObject ) {
|
|
|
40
24
|
if ( ! wpMimeTypesObject ) {
|
|
41
25
|
return wpMimeTypesObject;
|
|
42
26
|
}
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
27
|
+
return Object.entries( wpMimeTypesObject )
|
|
28
|
+
.map( ( [ extensionsString, mime ] ) => {
|
|
29
|
+
const [ type ] = mime.split( '/' );
|
|
30
|
+
const extensions = extensionsString.split( '|' );
|
|
31
|
+
return [
|
|
32
|
+
mime,
|
|
33
|
+
...extensions.map(
|
|
34
|
+
( extension ) => `${ type }/${ extension }`
|
|
35
|
+
),
|
|
36
|
+
];
|
|
37
|
+
} )
|
|
38
|
+
.flat();
|
|
51
39
|
}
|
|
52
40
|
|
|
53
41
|
/**
|
|
@@ -79,9 +67,9 @@ export async function uploadMedia( {
|
|
|
79
67
|
|
|
80
68
|
const filesSet = [];
|
|
81
69
|
const setAndUpdateFiles = ( idx, value ) => {
|
|
82
|
-
revokeBlobURL(
|
|
70
|
+
revokeBlobURL( filesSet[ idx ]?.url );
|
|
83
71
|
filesSet[ idx ] = value;
|
|
84
|
-
onFileChange(
|
|
72
|
+
onFileChange( filesSet.filter( Boolean ) );
|
|
85
73
|
};
|
|
86
74
|
|
|
87
75
|
// Allowed type specified by consumer.
|
|
@@ -89,20 +77,20 @@ export async function uploadMedia( {
|
|
|
89
77
|
if ( ! allowedTypes ) {
|
|
90
78
|
return true;
|
|
91
79
|
}
|
|
92
|
-
return some(
|
|
80
|
+
return allowedTypes.some( ( allowedType ) => {
|
|
93
81
|
// If a complete mimetype is specified verify if it matches exactly the mime type of the file.
|
|
94
|
-
if ( includes(
|
|
82
|
+
if ( allowedType.includes( '/' ) ) {
|
|
95
83
|
return allowedType === fileType;
|
|
96
84
|
}
|
|
97
85
|
// Otherwise a general mime type is used and we should verify if the file mimetype starts with it.
|
|
98
|
-
return startsWith(
|
|
86
|
+
return fileType.startsWith( `${ allowedType }/` );
|
|
99
87
|
} );
|
|
100
88
|
};
|
|
101
89
|
|
|
102
90
|
// Allowed types for the current WP_User.
|
|
103
91
|
const allowedMimeTypesForUser = getMimeTypesArray( wpAllowedMimeTypes );
|
|
104
92
|
const isAllowedMimeTypeForUser = ( fileType ) => {
|
|
105
|
-
return includes(
|
|
93
|
+
return allowedMimeTypesForUser.includes( fileType );
|
|
106
94
|
};
|
|
107
95
|
|
|
108
96
|
const validFiles = [];
|
|
@@ -189,10 +177,12 @@ export async function uploadMedia( {
|
|
|
189
177
|
mediaFile,
|
|
190
178
|
additionalData
|
|
191
179
|
);
|
|
180
|
+
// eslint-disable-next-line camelcase
|
|
181
|
+
const { alt_text, source_url, ...savedMediaProps } = savedMedia;
|
|
192
182
|
const mediaObject = {
|
|
193
|
-
...
|
|
183
|
+
...savedMediaProps,
|
|
194
184
|
alt: savedMedia.alt_text,
|
|
195
|
-
caption:
|
|
185
|
+
caption: savedMedia.caption?.raw ?? '',
|
|
196
186
|
title: savedMedia.title.raw,
|
|
197
187
|
url: savedMedia.source_url,
|
|
198
188
|
};
|
|
@@ -201,8 +191,8 @@ export async function uploadMedia( {
|
|
|
201
191
|
// Reset to empty on failure.
|
|
202
192
|
setAndUpdateFiles( idx, null );
|
|
203
193
|
let message;
|
|
204
|
-
if (
|
|
205
|
-
message =
|
|
194
|
+
if ( error.message ) {
|
|
195
|
+
message = error.message;
|
|
206
196
|
} else {
|
|
207
197
|
message = sprintf(
|
|
208
198
|
// translators: %s: file name
|
|
@@ -229,7 +219,11 @@ function createMediaFromFile( file, additionalData ) {
|
|
|
229
219
|
// Create upload payload.
|
|
230
220
|
const data = new window.FormData();
|
|
231
221
|
data.append( 'file', file, file.name || file.type.replace( '/', '.' ) );
|
|
232
|
-
|
|
222
|
+
if ( additionalData ) {
|
|
223
|
+
Object.entries( additionalData ).forEach( ( [ key, value ] ) =>
|
|
224
|
+
data.append( key, value )
|
|
225
|
+
);
|
|
226
|
+
}
|
|
233
227
|
return apiFetch( {
|
|
234
228
|
path: '/wp/v2/media',
|
|
235
229
|
body: data,
|