UNPKG

@wordpress/block-library

Version:
122 lines (106 loc) 4.55 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = PostExcerptEditor; var _element = require("@wordpress/element"); var _classnames = _interopRequireDefault(require("classnames")); var _coreData = require("@wordpress/core-data"); var _blockEditor = require("@wordpress/block-editor"); var _components = require("@wordpress/components"); var _i18n = require("@wordpress/i18n"); var _hooks = require("../utils/hooks"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostExcerptEditor(_ref) { let { attributes: { textAlign, moreText, showMoreOnNewLine }, setAttributes, isSelected, context: { postId, postType, queryId } } = _ref; const isDescendentOfQueryLoop = Number.isFinite(queryId); const userCanEdit = (0, _hooks.useCanEditEntity)('postType', postType, postId); const isEditable = userCanEdit && !isDescendentOfQueryLoop; const [rawExcerpt, setExcerpt, { rendered: renderedExcerpt, protected: isProtected } = {}] = (0, _coreData.useEntityProp)('postType', postType, 'excerpt', postId); const blockProps = (0, _blockEditor.useBlockProps)({ className: (0, _classnames.default)({ [`has-text-align-${textAlign}`]: textAlign }) }); /** * When excerpt is editable, strip the html tags from * rendered excerpt. This will be used if the entity's * excerpt has been produced from the content. */ const strippedRenderedExcerpt = (0, _element.useMemo)(() => { if (!renderedExcerpt) return ''; const document = new window.DOMParser().parseFromString(renderedExcerpt, 'text/html'); return document.body.textContent || document.body.innerText || ''; }, [renderedExcerpt]); if (!postType || !postId) { return (0, _element.createElement)("div", blockProps, (0, _element.createElement)("p", null, (0, _i18n.__)('This is the Post Excerpt block, it will display the excerpt from single posts.')), (0, _element.createElement)("p", null, (0, _i18n.__)('If there are any Custom Post Types with support for excerpts, the Post Excerpt block can display the excerpts of those entries as well.'))); } if (isProtected && !userCanEdit) { return (0, _element.createElement)("div", blockProps, (0, _element.createElement)(_blockEditor.Warning, null, (0, _i18n.__)('There is no excerpt because this is a protected post.'))); } const readMoreLink = (0, _element.createElement)(_blockEditor.RichText, { className: "wp-block-post-excerpt__more-link", tagName: "a", "aria-label": (0, _i18n.__)('“Read more” link text'), placeholder: (0, _i18n.__)('Add "read more" link text'), value: moreText, onChange: newMoreText => setAttributes({ moreText: newMoreText }), withoutInteractiveFormatting: true }); const excerptClassName = (0, _classnames.default)('wp-block-post-excerpt__excerpt', { 'is-inline': !showMoreOnNewLine }); const excerptContent = isEditable ? (0, _element.createElement)(_blockEditor.RichText, { className: excerptClassName, "aria-label": (0, _i18n.__)('Post excerpt text'), value: rawExcerpt || strippedRenderedExcerpt || (isSelected ? '' : (0, _i18n.__)('No post excerpt found')), onChange: setExcerpt, tagName: "p" }) : (0, _element.createElement)("p", { className: excerptClassName }, strippedRenderedExcerpt || (0, _i18n.__)('No post excerpt found')); return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_blockEditor.BlockControls, null, (0, _element.createElement)(_blockEditor.AlignmentToolbar, { value: textAlign, onChange: newAlign => setAttributes({ textAlign: newAlign }) })), (0, _element.createElement)(_blockEditor.InspectorControls, null, (0, _element.createElement)(_components.PanelBody, { title: (0, _i18n.__)('Settings') }, (0, _element.createElement)(_components.ToggleControl, { label: (0, _i18n.__)('Show link on new line'), checked: showMoreOnNewLine, onChange: newShowMoreOnNewLine => setAttributes({ showMoreOnNewLine: newShowMoreOnNewLine }) }))), (0, _element.createElement)("div", blockProps, excerptContent, !showMoreOnNewLine && ' ', showMoreOnNewLine ? (0, _element.createElement)("p", { className: "wp-block-post-excerpt__more-text" }, readMoreLink) : readMoreLink)); } //# sourceMappingURL=edit.js.map