├── package.json ├── README.md └── src └── lorem-ipsum.js /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lorem-ipsum-js", 3 | "title": "Lorem Ipsum generator", 4 | "description": "JavaScript random text generator...", 5 | "version": "0.1.0", 6 | "main": "src/lorem-ipsum.js", 7 | "homepage": "https://github.com/fffilo/lorem-ipsum-js", 8 | "authors": [ 9 | "Franjo Filo " 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/fffilo/lorem-ipsum-js.git" 14 | }, 15 | "keywords": [ 16 | "javascript", 17 | "lorem", 18 | "ipsum", 19 | "random", 20 | "text", 21 | "generator" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Lorem Ipsum generator 2 | ===================== 3 | 4 | JavaScript random text generator... 5 | 6 | #### Random sentence 7 | 8 | var ipsum = new LoremIpsum(); 9 | console.log(ipsum.sentence()); 10 | 11 | #### Random sentence specific length 12 | 13 | var ipsum = new LoremIpsum(); 14 | console.log(ipsum.sentence(12)); 15 | 16 | #### Random sentence dynamic length 17 | 18 | var ipsum = new LoremIpsum(); 19 | console.log(ipsum.sentence(8, 12)); 20 | 21 | #### Random paragraph 22 | 23 | var ipsum = new LoremIpsum(); 24 | console.log(ipsum.paragraph()); 25 | 26 | #### Random paragraph specific length 27 | 28 | var ipsum = new LoremIpsum(); 29 | console.log(ipsum.paragraph(50)); 30 | 31 | #### Random paragraph dynamic length 32 | 33 | var ipsum = new LoremIpsum(); 34 | console.log(ipsum.paragraph(20, 60)); 35 | 36 | -------------------------------------------------------------------------------- /src/lorem-ipsum.js: -------------------------------------------------------------------------------- 1 | ;(function() { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * LoremIpsum constructor 7 | * 8 | * @type {Function} 9 | */ 10 | window.LoremIpsum = function() { 11 | // pass 12 | } 13 | 14 | /** 15 | * LoremIpsum prototype 16 | * 17 | * @type {Object} 18 | */ 19 | window.LoremIpsum.prototype = { 20 | 21 | /** 22 | * Possible words 23 | * 24 | * @type {Array} 25 | */ 26 | _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" ], 27 | 28 | /** 29 | * Get random number 30 | * 31 | * @param {Number} x 32 | * @param {Number} y 33 | * @return {Number} 34 | */ 35 | _random: function(x, y) { 36 | var rnd = (Math.random() * 2 - 1) + (Math.random() * 2 - 1) + (Math.random() * 2 - 1); 37 | return Math.round(Math.abs(rnd) * x + y); 38 | }, 39 | 40 | /** 41 | * Get random number between min and max 42 | * 43 | * @param {Number} min (optional) lower result limit 44 | * @param {Number} max (optional) upper result limit 45 | * @return {Number} random number 46 | */ 47 | _count: function(min, max) { 48 | var result; 49 | if (min && max) result = Math.floor(Math.random() * (max - min + 1) + min); 50 | else if (min) result = min; 51 | else if (max) result = max; 52 | else result = this._random(8, 2); 53 | 54 | return result; 55 | }, 56 | 57 | /** 58 | * Get random words 59 | * 60 | * @param {Number} min (optional) minimal words count 61 | * @param {Number} max (optional) maximal words count 62 | * @return {Object} array of random words 63 | */ 64 | words: function(min, max) { 65 | var result = []; 66 | var count = this._count(min, max); 67 | 68 | // get random words 69 | while (result.length < count) { 70 | var pos = Math.floor(Math.random() * this._words.length); 71 | var rnd = this._words[pos]; 72 | 73 | // do not allow same word twice in a row 74 | if (result.length && result[result.length - 1] === rnd) { 75 | continue; 76 | } 77 | 78 | result.push(rnd); 79 | } 80 | 81 | return result; 82 | }, 83 | 84 | /** 85 | * Generate sentence 86 | * 87 | * @param {Number} min (optional) minimal words count 88 | * @param {Number} max (optional) maximal words count 89 | * @return {String} sentence 90 | */ 91 | sentence: function(min, max) { 92 | var words = this.words(min, max); 93 | 94 | // add comma(s) to sentence 95 | var index = this._random(6, 2); 96 | while (index < words.length - 2) { 97 | words[index] += ","; 98 | index += this._random(6, 2); 99 | } 100 | 101 | // append puctation on end 102 | var punct = "...!?" 103 | words[words.length - 1] += punct.charAt(Math.floor(Math.random() * punct.length)); 104 | 105 | // uppercase first letter 106 | words[0] = words[0].charAt(0).toUpperCase() + words[0].slice(1); 107 | 108 | return words.join(" "); 109 | }, 110 | 111 | /** 112 | * Generate paragraph 113 | * 114 | * @param {Number} min (optional) minimal words count 115 | * @param {Number} max (optional) maximal words count 116 | * @return {String} paragraph 117 | */ 118 | paragraph: function(min, max) { 119 | if (!min && !max) { 120 | min = 20; 121 | max = 60; 122 | } 123 | 124 | var result = ""; 125 | var count = this._count(min, max); 126 | 127 | // append sentences until limit is reached 128 | while (result.slice(0, -1).split(" ").length < count) { 129 | result += this.sentence() + " "; 130 | } 131 | result = result.slice(0, -1) 132 | 133 | // remove words 134 | if (result.split(" ").length > count) { 135 | var punct = result.slice(-1); 136 | result = result.split(" ").slice(0, count).join(" "); 137 | result = result.replace(/,$/, ""); 138 | result += punct; 139 | } 140 | 141 | return result; 142 | } 143 | 144 | } 145 | 146 | })(); 147 | --------------------------------------------------------------------------------