@wordpress/block-library
Version:
Block library for the WordPress editor.
135 lines (113 loc) • 3.89 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 _lodash = require("lodash");
var _compose = require("@wordpress/compose");
var _utils = require("./utils");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
var ImageSize =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(ImageSize, _Component);
function ImageSize() {
var _this;
(0, _classCallCheck2.default)(this, ImageSize);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(ImageSize).apply(this, arguments));
_this.state = {
width: undefined,
height: undefined
};
_this.bindContainer = _this.bindContainer.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
_this.calculateSize = _this.calculateSize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
return _this;
}
(0, _createClass2.default)(ImageSize, [{
key: "bindContainer",
value: function bindContainer(ref) {
this.container = ref;
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
if (this.props.src !== prevProps.src) {
this.setState({
width: undefined,
height: undefined
});
this.fetchImageSize();
}
if (this.props.dirtynessTrigger !== prevProps.dirtynessTrigger) {
this.calculateSize();
}
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
this.fetchImageSize();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.image) {
this.image.onload = _lodash.noop;
}
}
}, {
key: "fetchImageSize",
value: function fetchImageSize() {
this.image = new window.Image();
this.image.onload = this.calculateSize;
this.image.src = this.props.src;
}
}, {
key: "calculateSize",
value: function calculateSize() {
var _calculatePreferedIma = (0, _utils.calculatePreferedImageSize)(this.image, this.container),
width = _calculatePreferedIma.width,
height = _calculatePreferedIma.height;
this.setState({
width: width,
height: height
});
}
}, {
key: "render",
value: function render() {
var sizes = {
imageWidth: this.image && this.image.width,
imageHeight: this.image && this.image.height,
containerWidth: this.container && this.container.clientWidth,
containerHeight: this.container && this.container.clientHeight,
imageWidthWithinContainer: this.state.width,
imageHeightWithinContainer: this.state.height
};
return (0, _element.createElement)("div", {
ref: this.bindContainer
}, this.props.children(sizes));
}
}]);
return ImageSize;
}(_element.Component);
var _default = (0, _compose.withGlobalEvents)({
resize: 'calculateSize'
})(ImageSize);
exports.default = _default;
//# sourceMappingURL=image-size.js.map