react-lorem-ipsum
Version:
React Component and Function for Creating Lorem Ipsum Text as Placeholder
174 lines (137 loc) • 7.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loremIpsum = exports.LoremIpsum = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _utils = require("../utils");
var _words = _interopRequireDefault(require("../data/words.json"));
var _excluded = ["p", "random"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var defaultProps = {
p: 1,
avgWordsPerSentence: 8,
avgSentencesPerParagraph: 8,
startWithLoremIpsum: true,
random: true
};
var stDevPercentage = 0.25;
var getRandomWord = function getRandomWord() {
return _words["default"][(0, _utils.randomFromRange)(0, _words["default"].length - 1)];
};
var getWord = function getWord(i) {
return _words["default"][i % _words["default"].length];
};
var midPunctuation = function midPunctuation(sentenceLength) {
var punctuations = [',', ';'];
var punctuation;
var position;
if (sentenceLength > 6) {
var hasPunctuation = !!(Math.random() <= 0.25);
if (hasPunctuation) {
position = (0, _utils.randomFromRange)(2, sentenceLength - 3);
punctuation = punctuations[(0, _utils.randomFromRange)(0, punctuations.length - 1)];
}
}
return {
punctuation: punctuation,
position: position
};
};
var endPunctuation = function endPunctuation() {
var random = Math.random();
if (random > 0.99) return '!';
if (random > 0.95) return '?';
return '.';
};
var createSentence = function createSentence(_ref) {
var withLoremIpsum = _ref.withLoremIpsum,
avgWordsPerSentence = _ref.avgWordsPerSentence;
if (withLoremIpsum) return 'Lorem ipsum odor amet, consectetuer adipiscing elit.';
var awps = (0, _utils.parseIntWithDefault)(avgWordsPerSentence, defaultProps.avgWordsPerSentence);
var stDev = (0, _utils.getStandardDeviation)(awps, stDevPercentage);
var sentenceLength = (0, _utils.randomPositiveFromRange)(awps - stDev, awps + stDev);
var midPunc = midPunctuation(sentenceLength);
var sentence = '';
for (var i = 0; i < sentenceLength; i += 1) {
sentence += "".concat(getRandomWord()).concat(midPunc.position === i ? midPunc.punctuation : '', " ");
}
sentence = "".concat(sentence.charAt(0).toUpperCase() + sentence.substr(1).trim()).concat(endPunctuation());
return sentence;
};
var createStandardParagraph = function createStandardParagraph(_ref2) {
var avgWordsPerSentence = _ref2.avgWordsPerSentence,
avgSentencesPerParagraph = _ref2.avgSentencesPerParagraph;
var paragraph = '';
var awps = (0, _utils.parseIntWithDefault)(avgWordsPerSentence, defaultProps.avgWordsPerSentence);
var aspp = (0, _utils.parseIntWithDefault)(avgSentencesPerParagraph, defaultProps.avgSentencesPerParagraph);
for (var i = 0; i < aspp; i += 1) {
var sentence = '';
for (var j = 0; j < awps; j += 1) {
sentence += "".concat(getWord(i * aspp + j), " ");
}
paragraph += "".concat(sentence.charAt(0).toUpperCase() + sentence.slice(1).trim(), ". ");
}
return paragraph.trim();
};
var createRandomParagraph = function createRandomParagraph(_ref3) {
var firstParagraph = _ref3.firstParagraph,
avgWordsPerSentence = _ref3.avgWordsPerSentence,
avgSentencesPerParagraph = _ref3.avgSentencesPerParagraph,
startWithLoremIpsum = _ref3.startWithLoremIpsum;
var aspp = (0, _utils.parseIntWithDefault)(avgSentencesPerParagraph, defaultProps.avgSentencesPerParagraph);
var swli = typeof startWithLoremIpsum === 'boolean' ? startWithLoremIpsum : defaultProps.startWithLoremIpsum;
var stDev = (0, _utils.getStandardDeviation)(aspp, stDevPercentage);
var paragraphLength = (0, _utils.randomPositiveFromRange)(aspp - stDev, aspp + stDev);
var paragraph = '';
for (var i = 0; i < paragraphLength; i += 1) {
var withLoremIpsum = !!(i === 0 && firstParagraph && swli);
paragraph += "".concat(createSentence({
withLoremIpsum: withLoremIpsum,
avgWordsPerSentence: avgWordsPerSentence
}), " ");
}
return paragraph.trim();
};
var loremIpsum = function loremIpsum() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var p = props.p,
random = props.random,
otherProps = _objectWithoutProperties(props, _excluded);
var pCount = (0, _utils.parseIntWithDefault)(p, defaultProps.p);
var createParagraph = random ? createRandomParagraph : createStandardParagraph;
return Array.from({
length: pCount
}, function (_, i) {
return i;
}).map(function (_, i) {
return createParagraph(_objectSpread({
firstParagraph: i === 0
}, otherProps));
});
};
exports.loremIpsum = loremIpsum;
var LoremIpsum = function LoremIpsum(props) {
var paragraphs = loremIpsum(props);
var html = paragraphs.map(function (paragraph, index) {
return _react["default"].createElement("p", {
key: index
}, paragraph);
});
return html;
};
exports.LoremIpsum = LoremIpsum;
LoremIpsum.propTypes = {
p: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]),
avgWordsPerSentence: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]),
avgSentencesPerParagraph: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]),
startWithLoremIpsum: _propTypes["default"].bool,
random: _propTypes["default"].bool
};
LoremIpsum.defaultProps = defaultProps;