@wordpress/block-library
Version:
Block library for the WordPress editor.
94 lines (90 loc) • 3.28 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _clsx = _interopRequireDefault(require("clsx"));
var _i18n = require("@wordpress/i18n");
var _element = require("@wordpress/element");
var _blockEditor = require("@wordpress/block-editor");
var _blocks = require("@wordpress/blocks");
var _coreData = require("@wordpress/core-data");
var _wordcount = require("@wordpress/wordcount");
var _jsxRuntime = require("react/jsx-runtime");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Average reading rate - based on average taken from
* https://irisreading.com/average-reading-speed-in-various-languages/
* (Characters/minute used for Chinese rather than words).
*/const AVERAGE_READING_RATE = 189;
function PostTimeToReadEdit({
attributes,
setAttributes,
context
}) {
const {
textAlign
} = attributes;
const {
postId,
postType
} = context;
const [contentStructure] = (0, _coreData.useEntityProp)('postType', postType, 'content', postId);
const [blocks] = (0, _coreData.useEntityBlockEditor)('postType', postType, {
id: postId
});
const minutesToReadString = (0, _element.useMemo)(() => {
// Replicates the logic found in getEditedPostContent().
let content;
if (contentStructure instanceof Function) {
content = contentStructure({
blocks
});
} else if (blocks) {
// If we have parsed blocks already, they should be our source of truth.
// Parsing applies block deprecations and legacy block conversions that
// unparsed content will not have.
content = (0, _blocks.__unstableSerializeAndClean)(blocks);
} else {
content = contentStructure;
}
/*
* translators: If your word count is based on single characters (e.g. East Asian characters),
* enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
* Do not translate into your own language.
*/
const wordCountType = (0, _i18n._x)('words', 'Word count type. Do not translate!');
const minutesToRead = Math.max(1, Math.round((0, _wordcount.count)(content || '', wordCountType) / AVERAGE_READING_RATE));
return (0, _i18n.sprintf)(/* translators: %s: the number of minutes to read the post. */
(0, _i18n._n)('%s minute', '%s minutes', minutesToRead), minutesToRead);
}, [contentStructure, blocks]);
const blockProps = (0, _blockEditor.useBlockProps)({
className: (0, _clsx.default)({
[`has-text-align-${textAlign}`]: textAlign
})
});
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.BlockControls, {
group: "block",
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.AlignmentControl, {
value: textAlign,
onChange: nextAlign => {
setAttributes({
textAlign: nextAlign
});
}
})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
...blockProps,
children: minutesToReadString
})]
});
}
var _default = exports.default = PostTimeToReadEdit;
//# sourceMappingURL=edit.js.map
;