UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 5.16 kB
{ "version": 3, "sources": ["../../src/utils/caption.js"], "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { usePrevious } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\t__experimentalGetElementClassName,\n\tRichText,\n} from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { caption as captionIcon } from '@wordpress/icons';\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nexport function Caption( {\n\tattributeKey = 'caption',\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tplaceholder = __( 'Add caption' ),\n\tlabel = __( 'Caption text' ),\n\tshowToolbarButton = true,\n\texcludeElementClassName,\n\tclassName,\n\treadOnly,\n\ttagName = 'figcaption',\n\taddLabel = __( 'Add caption' ),\n\tremoveLabel = __( 'Remove caption' ),\n\ticon = captionIcon,\n\t...props\n} ) {\n\tconst caption = attributes[ attributeKey ];\n\tconst prevCaption = usePrevious( caption );\n\tconst isCaptionEmpty = RichText.isEmpty( caption );\n\tconst isPrevCaptionEmpty = RichText.isEmpty( prevCaption );\n\tconst [ showCaption, setShowCaption ] = useState( ! isCaptionEmpty );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( ! isCaptionEmpty && isPrevCaptionEmpty ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ isCaptionEmpty, isPrevCaptionEmpty ] );\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected && isCaptionEmpty ) {\n\t\t\tsetShowCaption( false );\n\t\t}\n\t}, [ isSelected, isCaptionEmpty ] );\n\n\t// Focus the caption when we click to add one.\n\tconst ref = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && isCaptionEmpty ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ isCaptionEmpty ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ showToolbarButton && (\n\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t[ attributeKey ]: undefined,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={ showCaption ? removeLabel : addLabel }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier={ attributeKey }\n\t\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\texcludeElementClassName\n\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t: __experimentalGetElementClassName( 'caption' )\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { [ attributeKey ]: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treadOnly={ readOnly }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t</>\n\t);\n}\n"], "mappings": ";AAGA,OAAO,UAAU;AAKjB,SAAS,UAAU,WAAW,mBAAmB;AACjD,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,qBAAqB;AAC9B,SAAS,WAAW,mBAAmB;AACvC,SAAS,aAAa,2BAA2B;AAmD/C,mBAGG,KAHH;AAjDK,SAAS,QAAS;AAAA,EACxB,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,GAAI,aAAc;AAAA,EAChC,QAAQ,GAAI,cAAe;AAAA,EAC3B,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW,GAAI,aAAc;AAAA,EAC7B,cAAc,GAAI,gBAAiB;AAAA,EACnC,OAAO;AAAA,EACP,GAAG;AACJ,GAAI;AACH,QAAM,UAAU,WAAY,YAAa;AACzC,QAAM,cAAc,YAAa,OAAQ;AACzC,QAAM,iBAAiB,SAAS,QAAS,OAAQ;AACjD,QAAM,qBAAqB,SAAS,QAAS,WAAY;AACzD,QAAM,CAAE,aAAa,cAAe,IAAI,SAAU,CAAE,cAAe;AAInE,YAAW,MAAM;AAChB,QAAK,CAAE,kBAAkB,oBAAqB;AAC7C,qBAAgB,IAAK;AAAA,IACtB;AAAA,EACD,GAAG,CAAE,gBAAgB,kBAAmB,CAAE;AAE1C,YAAW,MAAM;AAChB,QAAK,CAAE,cAAc,gBAAiB;AACrC,qBAAgB,KAAM;AAAA,IACvB;AAAA,EACD,GAAG,CAAE,YAAY,cAAe,CAAE;AAGlC,QAAM,MAAM;AAAA,IACX,CAAE,SAAU;AACX,UAAK,QAAQ,gBAAiB;AAC7B,aAAK,MAAM;AAAA,MACZ;AAAA,IACD;AAAA,IACA,CAAE,cAAe;AAAA,EAClB;AAEA,SACC,iCACG;AAAA,yBACD,oBAAC,iBAAc,OAAM,SACpB;AAAA,MAAC;AAAA;AAAA,QACA,SAAU,MAAM;AACf,yBAAgB,CAAE,WAAY;AAC9B,cAAK,eAAe,SAAU;AAC7B,0BAAe;AAAA,cACd,CAAE,YAAa,GAAG;AAAA,YACnB,CAAE;AAAA,UACH;AAAA,QACD;AAAA,QACA;AAAA,QACA,WAAY;AAAA,QACZ,OAAQ,cAAc,cAAc;AAAA;AAAA,IACrC,GACD;AAAA,IAEC,gBACC,CAAE,SAAS,QAAS,OAAQ,KAAK,eAClC;AAAA,MAAC;AAAA;AAAA,QACA,YAAa;AAAA,QACb;AAAA,QACA,WAAY;AAAA,UACX;AAAA,UACA,0BACG,KACA,kCAAmC,SAAU;AAAA,QACjD;AAAA,QACA;AAAA,QACA,cAAa;AAAA,QACb;AAAA,QACA,OAAQ;AAAA,QACR,UAAW,CAAE,UACZ,cAAe,EAAE,CAAE,YAAa,GAAG,MAAM,CAAE;AAAA,QAE5C,eAAa;AAAA,QACb,wBAAyB,MACxB;AAAA,UACC,YAAa,oBAAoB,CAAE;AAAA,QACpC;AAAA,QAED;AAAA,QACE,GAAG;AAAA;AAAA,IACN;AAAA,KAEH;AAEF;", "names": [] }