UNPKG

@wordpress/block-library

Version:
215 lines (182 loc) 6.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _element = require("@wordpress/element"); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _classnames = _interopRequireDefault(require("classnames")); var _components = require("@wordpress/components"); var _i18n = require("@wordpress/i18n"); var _keycodes = require("@wordpress/keycodes"); var _data = require("@wordpress/data"); var _blockEditor = require("@wordpress/block-editor"); var _blob = require("@wordpress/blob"); /** * External dependencies */ /** * WordPress dependencies */ var GalleryImage = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(GalleryImage, _Component); function GalleryImage() { var _this; (0, _classCallCheck2.default)(this, GalleryImage); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(GalleryImage).apply(this, arguments)); _this.onSelectImage = _this.onSelectImage.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.onSelectCaption = _this.onSelectCaption.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.onRemoveImage = _this.onRemoveImage.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.bindContainer = _this.bindContainer.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.state = { captionSelected: false }; return _this; } (0, _createClass2.default)(GalleryImage, [{ key: "bindContainer", value: function bindContainer(ref) { this.container = ref; } }, { key: "onSelectCaption", value: function onSelectCaption() { if (!this.state.captionSelected) { this.setState({ captionSelected: true }); } if (!this.props.isSelected) { this.props.onSelect(); } } }, { key: "onSelectImage", value: function onSelectImage() { if (!this.props.isSelected) { this.props.onSelect(); } if (this.state.captionSelected) { this.setState({ captionSelected: false }); } } }, { key: "onRemoveImage", value: function onRemoveImage(event) { if (this.container === document.activeElement && this.props.isSelected && [_keycodes.BACKSPACE, _keycodes.DELETE].indexOf(event.keyCode) !== -1) { event.stopPropagation(); event.preventDefault(); this.props.onRemove(); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this$props = this.props, isSelected = _this$props.isSelected, image = _this$props.image, url = _this$props.url; if (image && !url) { this.props.setAttributes({ url: image.source_url, alt: image.alt_text }); } // unselect the caption so when the user selects other image and comeback // the caption is not immediately selected if (this.state.captionSelected && !isSelected && prevProps.isSelected) { this.setState({ captionSelected: false }); } } }, { key: "render", value: function render() { var _this$props2 = this.props, url = _this$props2.url, alt = _this$props2.alt, id = _this$props2.id, linkTo = _this$props2.linkTo, link = _this$props2.link, isSelected = _this$props2.isSelected, caption = _this$props2.caption, onRemove = _this$props2.onRemove, setAttributes = _this$props2.setAttributes, ariaLabel = _this$props2['aria-label']; var href; switch (linkTo) { case 'media': href = url; break; case 'attachment': href = link; break; } var img = // Disable reason: Image itself is not meant to be interactive, but should // direct image selection and unfocus caption fields. /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */ (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)("img", { src: url, alt: alt, "data-id": id, onClick: this.onSelectImage, onFocus: this.onSelectImage, onKeyDown: this.onRemoveImage, tabIndex: "0", "aria-label": ariaLabel, ref: this.bindContainer }), (0, _blob.isBlobURL)(url) && (0, _element.createElement)(_components.Spinner, null)) /* eslint-enable jsx-a11y/no-noninteractive-element-interactions */ ; var className = (0, _classnames.default)({ 'is-selected': isSelected, 'is-transient': (0, _blob.isBlobURL)(url) }); return (0, _element.createElement)("figure", { className: className }, isSelected && (0, _element.createElement)("div", { className: "block-library-gallery-item__inline-menu" }, (0, _element.createElement)(_components.IconButton, { icon: "no-alt", onClick: onRemove, className: "blocks-gallery-item__remove", label: (0, _i18n.__)('Remove Image') })), href ? (0, _element.createElement)("a", { href: href }, img) : img, !_blockEditor.RichText.isEmpty(caption) || isSelected ? (0, _element.createElement)(_blockEditor.RichText, { tagName: "figcaption", placeholder: (0, _i18n.__)('Write caption…'), value: caption, isSelected: this.state.captionSelected, onChange: function onChange(newCaption) { return setAttributes({ caption: newCaption }); }, unstableOnFocus: this.onSelectCaption, inlineToolbar: true }) : null); } }]); return GalleryImage; }(_element.Component); var _default = (0, _data.withSelect)(function (select, ownProps) { var _select = select('core'), getMedia = _select.getMedia; var id = ownProps.id; return { image: id ? getMedia(id) : null }; })(GalleryImage); exports.default = _default; //# sourceMappingURL=gallery-image.js.map