@wordpress/block-library
Version:
Block library for the WordPress editor.
215 lines (182 loc) • 6.88 kB
JavaScript
"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