147 lines
5.7 KiB
JavaScript
147 lines
5.7 KiB
JavaScript
|
;
|
||
|
(function () {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* LoremIpsum constructor
|
||
|
*
|
||
|
* @type {Function}
|
||
|
*/
|
||
|
window.LoremIpsum = function () {
|
||
|
// pass
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* LoremIpsum prototype
|
||
|
*
|
||
|
* @type {Object}
|
||
|
*/
|
||
|
window.LoremIpsum.prototype = {
|
||
|
|
||
|
/**
|
||
|
* Possible words
|
||
|
*
|
||
|
* @type {Array}
|
||
|
*/
|
||
|
_words: ["a", "ac", "accumsan", "ad", "adipiscing", "aenean", "aenean", "aliquam", "aliquam", "aliquet", "amet", "ante", "aptent", "arcu", "at", "auctor", "augue", "bibendum", "blandit", "class", "commodo", "condimentum", "congue", "consectetur", "consequat", "conubia", "convallis", "cras", "cubilia", "curabitur", "curabitur", "curae", "cursus", "dapibus", "diam", "dictum", "dictumst", "dolor", "donec", "donec", "dui", "duis", "egestas", "eget", "eleifend", "elementum", "elit", "enim", "erat", "eros", "est", "et", "etiam", "etiam", "eu", "euismod", "facilisis", "fames", "faucibus", "felis", "fermentum", "feugiat", "fringilla", "fusce", "gravida", "habitant", "habitasse", "hac", "hendrerit", "himenaeos", "iaculis", "id", "imperdiet", "in", "inceptos", "integer", "interdum", "ipsum", "justo", "lacinia", "lacus", "laoreet", "lectus", "leo", "libero", "ligula", "litora", "lobortis", "lorem", "luctus", "maecenas", "magna", "malesuada", "massa", "mattis", "mauris", "metus", "mi", "molestie", "mollis", "morbi", "nam", "nec", "neque", "netus", "nibh", "nisi", "nisl", "non", "nostra", "nulla", "nullam", "nunc", "odio", "orci", "ornare", "pellentesque", "per", "pharetra", "phasellus", "placerat", "platea", "porta", "porttitor", "posuere", "potenti", "praesent", "pretium", "primis", "proin", "pulvinar", "purus", "quam", "quis", "quisque", "quisque", "rhoncus", "risus", "rutrum", "sagittis", "sapien", "scelerisque", "sed", "sem", "semper", "senectus", "sit", "sociosqu", "sodales", "sollicitudin", "suscipit", "suspendisse", "taciti", "tellus", "tempor", "tempus", "tincidunt", "torquent", "tortor", "tristique", "turpis", "ullamcorper", "ultrices", "ultricies", "urna", "ut", "ut", "varius", "vehicula", "vel", "velit", "venenatis", "vestibulum", "vitae", "vivamus", "viverra", "volutpat", "vulputate"],
|
||
|
|
||
|
/**
|
||
|
* Get random number
|
||
|
*
|
||
|
* @param {Number} x
|
||
|
* @param {Number} y
|
||
|
* @return {Number}
|
||
|
*/
|
||
|
_random: function (x, y) {
|
||
|
var rnd = (Math.random() * 2 - 1) + (Math.random() * 2 - 1) + (Math.random() * 2 - 1);
|
||
|
return Math.round(Math.abs(rnd) * x + y);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get random number between min and max
|
||
|
*
|
||
|
* @param {Number} min (optional) lower result limit
|
||
|
* @param {Number} max (optional) upper result limit
|
||
|
* @return {Number} random number
|
||
|
*/
|
||
|
_count: function (min, max) {
|
||
|
var result;
|
||
|
if (min && max) result = Math.floor(Math.random() * (max - min + 1) + min);
|
||
|
else if (min) result = min;
|
||
|
else if (max) result = max;
|
||
|
else result = this._random(8, 2);
|
||
|
|
||
|
return result;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get random words
|
||
|
*
|
||
|
* @param {Number} min (optional) minimal words count
|
||
|
* @param {Number} max (optional) maximal words count
|
||
|
* @return {Object} array of random words
|
||
|
*/
|
||
|
words: function (min, max) {
|
||
|
var result = [];
|
||
|
var count = this._count(min, max);
|
||
|
|
||
|
// get random words
|
||
|
while (result.length < count) {
|
||
|
var pos = Math.floor(Math.random() * this._words.length);
|
||
|
var rnd = this._words[pos];
|
||
|
|
||
|
// do not allow same word twice in a row
|
||
|
if (result.length && result[result.length - 1] === rnd) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
result.push(rnd);
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Generate sentence
|
||
|
*
|
||
|
* @param {Number} min (optional) minimal words count
|
||
|
* @param {Number} max (optional) maximal words count
|
||
|
* @return {String} sentence
|
||
|
*/
|
||
|
sentence: function (min, max) {
|
||
|
var words = this.words(min, max);
|
||
|
|
||
|
// add comma(s) to sentence
|
||
|
var index = this._random(6, 2);
|
||
|
while (index < words.length - 2) {
|
||
|
words[index] += ",";
|
||
|
index += this._random(6, 2);
|
||
|
}
|
||
|
|
||
|
// append puctation on end
|
||
|
var punct = "...!?"
|
||
|
words[words.length - 1] += punct.charAt(Math.floor(Math.random() * punct.length));
|
||
|
|
||
|
// uppercase first letter
|
||
|
words[0] = words[0].charAt(0).toUpperCase() + words[0].slice(1);
|
||
|
|
||
|
return words.join(" ");
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Generate paragraph
|
||
|
*
|
||
|
* @param {Number} min (optional) minimal words count
|
||
|
* @param {Number} max (optional) maximal words count
|
||
|
* @return {String} paragraph
|
||
|
*/
|
||
|
paragraph: function (min, max) {
|
||
|
if (!min && !max) {
|
||
|
min = 20;
|
||
|
max = 60;
|
||
|
}
|
||
|
|
||
|
var result = "";
|
||
|
var count = this._count(min, max);
|
||
|
|
||
|
// append sentences until limit is reached
|
||
|
while (result.slice(0, -1).split(" ").length < count) {
|
||
|
result += this.sentence() + " ";
|
||
|
}
|
||
|
result = result.slice(0, -1)
|
||
|
|
||
|
// remove words
|
||
|
if (result.split(" ").length > count) {
|
||
|
var punct = result.slice(-1);
|
||
|
result = result.split(" ").slice(0, count).join(" ");
|
||
|
result = result.replace(/,$/, "");
|
||
|
result += punct;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
})();
|