@wordpress/components
Version:
UI components for WordPress.
70 lines (69 loc) • 1.91 kB
JavaScript
import { isValueDefined } from "../utils/values";
const TRUNCATE_ELLIPSIS = "\u2026";
const TRUNCATE_TYPE = {
auto: "auto",
head: "head",
middle: "middle",
tail: "tail",
none: "none"
};
const TRUNCATE_DEFAULT_PROPS = {
ellipsis: TRUNCATE_ELLIPSIS,
ellipsizeMode: TRUNCATE_TYPE.auto,
limit: 0,
numberOfLines: 0
};
function truncateMiddle(word, headLength, tailLength, ellipsis) {
if (typeof word !== "string") {
return "";
}
const wordLength = word.length;
const frontLength = ~~headLength;
const backLength = ~~tailLength;
const truncateStr = isValueDefined(ellipsis) ? ellipsis : TRUNCATE_ELLIPSIS;
if (frontLength === 0 && backLength === 0 || frontLength >= wordLength || backLength >= wordLength || frontLength + backLength >= wordLength) {
return word;
} else if (backLength === 0) {
return word.slice(0, frontLength) + truncateStr;
}
return word.slice(0, frontLength) + truncateStr + word.slice(wordLength - backLength);
}
function truncateContent(words = "", props) {
const mergedProps = {
...TRUNCATE_DEFAULT_PROPS,
...props
};
const {
ellipsis,
ellipsizeMode,
limit
} = mergedProps;
if (ellipsizeMode === TRUNCATE_TYPE.none) {
return words;
}
let truncateHead;
let truncateTail;
switch (ellipsizeMode) {
case TRUNCATE_TYPE.head:
truncateHead = 0;
truncateTail = limit;
break;
case TRUNCATE_TYPE.middle:
truncateHead = Math.floor(limit / 2);
truncateTail = Math.floor(limit / 2);
break;
default:
truncateHead = limit;
truncateTail = 0;
}
const truncatedContent = ellipsizeMode !== TRUNCATE_TYPE.auto ? truncateMiddle(words, truncateHead, truncateTail, ellipsis) : words;
return truncatedContent;
}
export {
TRUNCATE_DEFAULT_PROPS,
TRUNCATE_ELLIPSIS,
TRUNCATE_TYPE,
truncateContent,
truncateMiddle
};
//# sourceMappingURL=utils.js.map