UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 8.66 kB
{ "version": 3, "sources": ["../../src/list/edit.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tBlockControls,\n\tuseBlockProps,\n\tuseInnerBlocksProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport { isRTL, __ } from '@wordpress/i18n';\nimport {\n\tformatListBullets,\n\tformatListBulletsRTL,\n\tformatListNumbered,\n\tformatListNumberedRTL,\n\tformatOutdent,\n\tformatOutdentRTL,\n} from '@wordpress/icons';\nimport { createBlock } from '@wordpress/blocks';\nimport { useCallback, useEffect, Platform } from '@wordpress/element';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport OrderedListSettings from './ordered-list-settings';\nimport { migrateToListV2 } from './utils';\nimport TagName from './tag-name';\n\nconst DEFAULT_BLOCK = {\n\tname: 'core/list-item',\n};\nconst TEMPLATE = [ [ 'core/list-item' ] ];\nconst NATIVE_MARGIN_SPACING = 8;\n\n/**\n * At the moment, deprecations don't handle create blocks from attributes\n * (like when using CPT templates). For this reason, this hook is necessary\n * to avoid breaking templates using the old list block format.\n *\n * @param {Object} attributes Block attributes.\n * @param {string} clientId Block client ID.\n */\nfunction useMigrateOnLoad( attributes, clientId ) {\n\tconst registry = useRegistry();\n\tconst { updateBlockAttributes, replaceInnerBlocks } =\n\t\tuseDispatch( blockEditorStore );\n\n\tuseEffect( () => {\n\t\t// As soon as the block is loaded, migrate it to the new version.\n\n\t\tif ( ! attributes.values ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [ newAttributes, newInnerBlocks ] = migrateToListV2( attributes );\n\n\t\tdeprecated( 'Value attribute on the list block', {\n\t\t\tsince: '6.0',\n\t\t\tversion: '6.5',\n\t\t\talternative: 'inner blocks',\n\t\t} );\n\n\t\tregistry.batch( () => {\n\t\t\tupdateBlockAttributes( clientId, newAttributes );\n\t\t\treplaceInnerBlocks( clientId, newInnerBlocks );\n\t\t} );\n\t}, [ attributes.values ] );\n}\n\nfunction useOutdentList( clientId ) {\n\tconst { replaceBlocks, selectionChange } = useDispatch( blockEditorStore );\n\tconst { getBlockRootClientId, getBlockAttributes, getBlock } =\n\t\tuseSelect( blockEditorStore );\n\n\treturn useCallback( () => {\n\t\tconst parentBlockId = getBlockRootClientId( clientId );\n\t\tconst parentBlockAttributes = getBlockAttributes( parentBlockId );\n\t\t// Create a new parent block without the inner blocks.\n\t\tconst newParentBlock = createBlock(\n\t\t\t'core/list-item',\n\t\t\tparentBlockAttributes\n\t\t);\n\t\tconst { innerBlocks } = getBlock( clientId );\n\t\t// Replace the parent block with a new parent block without inner blocks,\n\t\t// and make the inner blocks siblings of the parent.\n\t\treplaceBlocks( [ parentBlockId ], [ newParentBlock, ...innerBlocks ] );\n\t\t// Select the last child of the list being outdent.\n\t\tselectionChange( innerBlocks[ innerBlocks.length - 1 ].clientId );\n\t}, [ clientId ] );\n}\n\nfunction IndentUI( { clientId } ) {\n\tconst outdentList = useOutdentList( clientId );\n\tconst canOutdent = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn (\n\t\t\t\tgetBlockName( getBlockRootClientId( clientId ) ) ===\n\t\t\t\t'core/list-item'\n\t\t\t);\n\t\t},\n\t\t[ clientId ]\n\t);\n\treturn (\n\t\t<>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatOutdentRTL : formatOutdent }\n\t\t\t\ttitle={ __( 'Outdent' ) }\n\t\t\t\tdescription={ __( 'Outdent list item' ) }\n\t\t\t\tdisabled={ ! canOutdent }\n\t\t\t\tonClick={ outdentList }\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nexport default function Edit( { attributes, setAttributes, clientId, style } ) {\n\tconst { ordered, type, reversed, start } = attributes;\n\tconst blockProps = useBlockProps( {\n\t\tstyle: {\n\t\t\t...( Platform.isNative && style ),\n\t\t\tlistStyleType: ordered && type !== 'decimal' ? type : undefined,\n\t\t},\n\t} );\n\n\tconst innerBlocksProps = useInnerBlocksProps( blockProps, {\n\t\tdefaultBlock: DEFAULT_BLOCK,\n\t\tdirectInsert: true,\n\t\ttemplate: TEMPLATE,\n\t\ttemplateLock: false,\n\t\ttemplateInsertUpdatesSelection: true,\n\t\t...( Platform.isNative && {\n\t\t\tmarginVertical: NATIVE_MARGIN_SPACING,\n\t\t\tmarginHorizontal: NATIVE_MARGIN_SPACING,\n\t\t\trenderAppender: false,\n\t\t} ),\n\t\t__experimentalCaptureToolbars: true,\n\t} );\n\tuseMigrateOnLoad( attributes, clientId );\n\n\tconst controls = (\n\t\t<BlockControls group=\"block\">\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatListBulletsRTL : formatListBullets }\n\t\t\t\ttitle={ __( 'Unordered' ) }\n\t\t\t\tdescription={ __( 'Convert to unordered list' ) }\n\t\t\t\tisActive={ ordered === false }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetAttributes( { ordered: false } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<ToolbarButton\n\t\t\t\ticon={ isRTL() ? formatListNumberedRTL : formatListNumbered }\n\t\t\t\ttitle={ __( 'Ordered' ) }\n\t\t\t\tdescription={ __( 'Convert to ordered list' ) }\n\t\t\t\tisActive={ ordered === true }\n\t\t\t\tonClick={ () => {\n\t\t\t\t\tsetAttributes( { ordered: true } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t<IndentUI clientId={ clientId } />\n\t\t</BlockControls>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<TagName\n\t\t\t\tordered={ ordered }\n\t\t\t\treversed={ reversed }\n\t\t\t\tstart={ start }\n\t\t\t\t{ ...innerBlocksProps }\n\t\t\t/>\n\t\t\t{ controls }\n\t\t\t{ ordered && (\n\t\t\t\t<OrderedListSettings\n\t\t\t\t\t{ ...{\n\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\treversed,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAKO;AACP,wBAA8B;AAC9B,kBAAoD;AACpD,kBAA0B;AAC1B,mBAOO;AACP,oBAA4B;AAC5B,qBAAiD;AACjD,wBAAuB;AAKvB,mCAAgC;AAChC,mBAAgC;AAChC,sBAAoB;AA+ElB;AA7EF,IAAM,gBAAgB;AAAA,EACrB,MAAM;AACP;AACA,IAAM,WAAW,CAAE,CAAE,gBAAiB,CAAE;AACxC,IAAM,wBAAwB;AAU9B,SAAS,iBAAkB,YAAY,UAAW;AACjD,QAAM,eAAW,yBAAY;AAC7B,QAAM,EAAE,uBAAuB,mBAAmB,QACjD,yBAAa,oBAAAA,KAAiB;AAE/B,gCAAW,MAAM;AAGhB,QAAK,CAAE,WAAW,QAAS;AAC1B;AAAA,IACD;AAEA,UAAM,CAAE,eAAe,cAAe,QAAI,8BAAiB,UAAW;AAEtE,0BAAAC,SAAY,qCAAqC;AAAA,MAChD,OAAO;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,IACd,CAAE;AAEF,aAAS,MAAO,MAAM;AACrB,4BAAuB,UAAU,aAAc;AAC/C,yBAAoB,UAAU,cAAe;AAAA,IAC9C,CAAE;AAAA,EACH,GAAG,CAAE,WAAW,MAAO,CAAE;AAC1B;AAEA,SAAS,eAAgB,UAAW;AACnC,QAAM,EAAE,eAAe,gBAAgB,QAAI,yBAAa,oBAAAD,KAAiB;AACzE,QAAM,EAAE,sBAAsB,oBAAoB,SAAS,QAC1D,uBAAW,oBAAAA,KAAiB;AAE7B,aAAO,4BAAa,MAAM;AACzB,UAAM,gBAAgB,qBAAsB,QAAS;AACrD,UAAM,wBAAwB,mBAAoB,aAAc;AAEhE,UAAM,qBAAiB;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AACA,UAAM,EAAE,YAAY,IAAI,SAAU,QAAS;AAG3C,kBAAe,CAAE,aAAc,GAAG,CAAE,gBAAgB,GAAG,WAAY,CAAE;AAErE,oBAAiB,YAAa,YAAY,SAAS,CAAE,EAAE,QAAS;AAAA,EACjE,GAAG,CAAE,QAAS,CAAE;AACjB;AAEA,SAAS,SAAU,EAAE,SAAS,GAAI;AACjC,QAAM,cAAc,eAAgB,QAAS;AAC7C,QAAM,iBAAa;AAAA,IAClB,CAAE,WAAY;AACb,YAAM,EAAE,sBAAsB,aAAa,IAC1C,OAAQ,oBAAAA,KAAiB;AAC1B,aACC,aAAc,qBAAsB,QAAS,CAAE,MAC/C;AAAA,IAEF;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AACA,SACC,2EACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAO,mBAAM,IAAI,gCAAmB;AAAA,MACpC,WAAQ,gBAAI,SAAU;AAAA,MACtB,iBAAc,gBAAI,mBAAoB;AAAA,MACtC,UAAW,CAAE;AAAA,MACb,SAAU;AAAA;AAAA,EACX,GACD;AAEF;AAEe,SAAR,KAAuB,EAAE,YAAY,eAAe,UAAU,MAAM,GAAI;AAC9E,QAAM,EAAE,SAAS,MAAM,UAAU,MAAM,IAAI;AAC3C,QAAM,iBAAa,mCAAe;AAAA,IACjC,OAAO;AAAA,MACN,GAAK,wBAAS,YAAY;AAAA,MAC1B,eAAe,WAAW,SAAS,YAAY,OAAO;AAAA,IACvD;AAAA,EACD,CAAE;AAEF,QAAM,uBAAmB,yCAAqB,YAAY;AAAA,IACzD,cAAc;AAAA,IACd,cAAc;AAAA,IACd,UAAU;AAAA,IACV,cAAc;AAAA,IACd,gCAAgC;AAAA,IAChC,GAAK,wBAAS,YAAY;AAAA,MACzB,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,IACjB;AAAA,IACA,+BAA+B;AAAA,EAChC,CAAE;AACF,mBAAkB,YAAY,QAAS;AAEvC,QAAM,WACL,6CAAC,qCAAc,OAAM,SACpB;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,UAAO,mBAAM,IAAI,oCAAuB;AAAA,QACxC,WAAQ,gBAAI,WAAY;AAAA,QACxB,iBAAc,gBAAI,2BAA4B;AAAA,QAC9C,UAAW,YAAY;AAAA,QACvB,SAAU,MAAM;AACf,wBAAe,EAAE,SAAS,MAAM,CAAE;AAAA,QACnC;AAAA;AAAA,IACD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,UAAO,mBAAM,IAAI,qCAAwB;AAAA,QACzC,WAAQ,gBAAI,SAAU;AAAA,QACtB,iBAAc,gBAAI,yBAA0B;AAAA,QAC5C,UAAW,YAAY;AAAA,QACvB,SAAU,MAAM;AACf,wBAAe,EAAE,SAAS,KAAK,CAAE;AAAA,QAClC;AAAA;AAAA,IACD;AAAA,IACA,4CAAC,YAAS,UAAsB;AAAA,KACjC;AAGD,SACC,4EACC;AAAA;AAAA,MAAC,gBAAAE;AAAA,MAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACE,GAAG;AAAA;AAAA,IACN;AAAA,IACE;AAAA,IACA,WACD;AAAA,MAAC,6BAAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA;AAAA,IACD;AAAA,KAEF;AAEF;", "names": ["blockEditorStore", "deprecated", "TagName", "OrderedListSettings"] }