UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 5.41 kB
{ "version": 3, "sources": ["../../src/file/transforms.js"], "sourcesContent": ["import { createBlobURL } from '@wordpress/blob';\nimport { createBlock } from '@wordpress/blocks';\nimport { select } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { _x } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\n\n// Transforms bypass the default variation, so set the localized default here.\nconst downloadButtonText = _x( 'Download', 'button label' );\n\n// The File → audio/video/image transforms are identical apart from the target\n// block, its media MIME type, and the src attribute name (image uses `url`).\nconst toMediaTransform = ( blockName, mediaType, srcAttribute ) => ( {\n\ttype: 'block',\n\tblocks: [ blockName ],\n\tisMatch: ( { id } ) => {\n\t\tif ( ! id ) {\n\t\t\treturn false;\n\t\t}\n\t\tconst { getEntityRecord } = select( coreStore );\n\t\tconst media = getEntityRecord( 'postType', 'attachment', id, {\n\t\t\tcontext: 'view',\n\t\t} );\n\t\treturn !! media && media.mime_type.includes( mediaType );\n\t},\n\ttransform: ( attributes ) => {\n\t\treturn createBlock( blockName, {\n\t\t\t[ srcAttribute ]: attributes.href,\n\t\t\tcaption: attributes.fileName,\n\t\t\tid: attributes.id,\n\t\t\tanchor: attributes.anchor,\n\t\t} );\n\t},\n} );\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'files',\n\t\t\tisMatch( files ) {\n\t\t\t\treturn files.length > 0;\n\t\t\t},\n\t\t\t// We define a lower priority (higher number) than the default of 10. This\n\t\t\t// ensures that the File block is only created as a fallback.\n\t\t\tpriority: 15,\n\t\t\ttransform: ( files ) => {\n\t\t\t\tconst blocks = [];\n\n\t\t\t\tfiles.forEach( ( file ) => {\n\t\t\t\t\tconst blobURL = createBlobURL( file );\n\n\t\t\t\t\t// File will be uploaded in componentDidMount()\n\t\t\t\t\tif ( file.type.startsWith( 'video/' ) ) {\n\t\t\t\t\t\tblocks.push(\n\t\t\t\t\t\t\tcreateBlock( 'core/video', {\n\t\t\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( file.type.startsWith( 'image/' ) ) {\n\t\t\t\t\t\tblocks.push(\n\t\t\t\t\t\t\tcreateBlock( 'core/image', {\n\t\t\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( file.type.startsWith( 'audio/' ) ) {\n\t\t\t\t\t\tblocks.push(\n\t\t\t\t\t\t\tcreateBlock( 'core/audio', {\n\t\t\t\t\t\t\t\tblob: createBlobURL( file ),\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblocks.push(\n\t\t\t\t\t\t\tcreateBlock( 'core/file', {\n\t\t\t\t\t\t\t\tblob: blobURL,\n\t\t\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t\t\t\tdownloadButtonText,\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\n\t\t\t\treturn blocks;\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/audio', 'core/video', 'core/image' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\t// Audio/Video use `src`, Image uses `url`.\n\t\t\t\tconst href = attributes.src ?? attributes.url;\n\t\t\t\treturn createBlock( 'core/file', {\n\t\t\t\t\thref,\n\t\t\t\t\tfileName: attributes.caption || getFilename( href ),\n\t\t\t\t\ttextLinkHref: href,\n\t\t\t\t\tid: attributes.id,\n\t\t\t\t\tanchor: attributes.anchor,\n\t\t\t\t\tdownloadButtonText,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t],\n\tto: [\n\t\ttoMediaTransform( 'core/audio', 'audio', 'src' ),\n\t\ttoMediaTransform( 'core/video', 'video', 'src' ),\n\t\ttoMediaTransform( 'core/image', 'image', 'url' ),\n\t],\n};\n\nexport default transforms;\n"], "mappings": ";AAAA,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,SAAS,iBAAiB;AACnC,SAAS,UAAU;AACnB,SAAS,mBAAmB;AAG5B,IAAM,qBAAqB,GAAI,YAAY,cAAe;AAI1D,IAAM,mBAAmB,CAAE,WAAW,WAAW,kBAAoB;AAAA,EACpE,MAAM;AAAA,EACN,QAAQ,CAAE,SAAU;AAAA,EACpB,SAAS,CAAE,EAAE,GAAG,MAAO;AACtB,QAAK,CAAE,IAAK;AACX,aAAO;AAAA,IACR;AACA,UAAM,EAAE,gBAAgB,IAAI,OAAQ,SAAU;AAC9C,UAAM,QAAQ,gBAAiB,YAAY,cAAc,IAAI;AAAA,MAC5D,SAAS;AAAA,IACV,CAAE;AACF,WAAO,CAAC,CAAE,SAAS,MAAM,UAAU,SAAU,SAAU;AAAA,EACxD;AAAA,EACA,WAAW,CAAE,eAAgB;AAC5B,WAAO,YAAa,WAAW;AAAA,MAC9B,CAAE,YAAa,GAAG,WAAW;AAAA,MAC7B,SAAS,WAAW;AAAA,MACpB,IAAI,WAAW;AAAA,MACf,QAAQ,WAAW;AAAA,IACpB,CAAE;AAAA,EACH;AACD;AAEA,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,IACL;AAAA,MACC,MAAM;AAAA,MACN,QAAS,OAAQ;AAChB,eAAO,MAAM,SAAS;AAAA,MACvB;AAAA;AAAA;AAAA,MAGA,UAAU;AAAA,MACV,WAAW,CAAE,UAAW;AACvB,cAAM,SAAS,CAAC;AAEhB,cAAM,QAAS,CAAE,SAAU;AAC1B,gBAAM,UAAU,cAAe,IAAK;AAGpC,cAAK,KAAK,KAAK,WAAY,QAAS,GAAI;AACvC,mBAAO;AAAA,cACN,YAAa,cAAc;AAAA,gBAC1B,MAAM,cAAe,IAAK;AAAA,cAC3B,CAAE;AAAA,YACH;AAAA,UACD,WAAY,KAAK,KAAK,WAAY,QAAS,GAAI;AAC9C,mBAAO;AAAA,cACN,YAAa,cAAc;AAAA,gBAC1B,MAAM,cAAe,IAAK;AAAA,cAC3B,CAAE;AAAA,YACH;AAAA,UACD,WAAY,KAAK,KAAK,WAAY,QAAS,GAAI;AAC9C,mBAAO;AAAA,cACN,YAAa,cAAc;AAAA,gBAC1B,MAAM,cAAe,IAAK;AAAA,cAC3B,CAAE;AAAA,YACH;AAAA,UACD,OAAO;AACN,mBAAO;AAAA,cACN,YAAa,aAAa;AAAA,gBACzB,MAAM;AAAA,gBACN,UAAU,KAAK;AAAA,gBACf;AAAA,cACD,CAAE;AAAA,YACH;AAAA,UACD;AAAA,QACD,CAAE;AAEF,eAAO;AAAA,MACR;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,cAAc,cAAc,YAAa;AAAA,MACnD,WAAW,CAAE,eAAgB;AAE5B,cAAM,OAAO,WAAW,OAAO,WAAW;AAC1C,eAAO,YAAa,aAAa;AAAA,UAChC;AAAA,UACA,UAAU,WAAW,WAAW,YAAa,IAAK;AAAA,UAClD,cAAc;AAAA,UACd,IAAI,WAAW;AAAA,UACf,QAAQ,WAAW;AAAA,UACnB;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI;AAAA,IACH,iBAAkB,cAAc,SAAS,KAAM;AAAA,IAC/C,iBAAkB,cAAc,SAAS,KAAM;AAAA,IAC/C,iBAAkB,cAAc,SAAS,KAAM;AAAA,EAChD;AACD;AAEA,IAAO,qBAAQ;", "names": [] }