Skip to content

Instantly share code, notes, and snippets.

@oddvalue
Last active June 11, 2021 09:16
Show Gist options
  • Save oddvalue/5b2b146a07f1a36505548264a9582690 to your computer and use it in GitHub Desktop.
Save oddvalue/5b2b146a07f1a36505548264a9582690 to your computer and use it in GitHub Desktop.
Nunjucks lorem ipsum macro generator
{#
Lorem ipsum generator
Usage:
{{ import 'lipsum.njk' as lipsum }}
{{ lipsum.sentence() }}
#}
{#
Generate a string of lipsum
@param int min Minimum number of words
@param int max Maximum number of words
#}
{% macro string(min, max) %}
{% set words = [
'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'curabitur', 'ultrices', 'et', 'mi', 'suscipit', 'eget', 'vulputate', 'ante', 'proin', 'vel', 'pretium', 'enim', 'vivamus', 'venenatis', 'eu', 'urna', 'tempor', 'blandit', 'nullam', 'pellentesque', 'metus', 'rhoncus', 'mauris', 'mollis', 'neque', 'sed', 'tincidunt', 'tellus', 'nunc', 'ac', 'nulla', 'ut', 'purus', 'etiam', 'id', 'dui', 'justo', 'sapien', 'scelerisque', 'viverra', 'ligula', 'aenean', 'porta', 'condimentum', 'nibh', 'dictum', 'congue', 'odio', 'facilisis', 'finibus', 'mattis', 'vehicula', 'lacinia', 'risus', 'placerat', 'augue', 'fringilla', 'at', 'facilisi', 'arcu', 'diam', 'laoreet'
] %}
{% set length = range(min, max+1)|random %}
{% for word in range(0, length) %}
{{ words | random }}
{% endfor %}
{% endmacro %}
{#
Generate a string of lipsum in title case
@param (optional) int min Minimum number of words, default: 5
@param (optional) int max Maximum number of words, default: min
#}
{% macro title(min, max) %}
{% if not min %}
{% set min = 5 %}
{% endif %}
{% if not max %}
{% set max = min %}
{% endif %}
{{ string(min, max) | title }}
{% endmacro %}
{#
Generate a sentence of lipsum
@param (optional) int min Minimum number of words, default: 20
@param (optional) int max Maximum number of words, default: min
#}
{% macro sentence(min, max) %}
{% if not min %}
{% set min = 20 %}
{% endif %}
{% if not max %}
{% set max = min %}
{% endif %}
{{ string(min, max) | trim | capitalize }}
{% endmacro %}
{#
Generate a paragraph of lipsum
@param (optional) int min Minimum number of sentences, default: 5
@param (optional) int max Maximum number of sentences, default: min
#}
{% macro paragraph(min, max) %}
{% if not min %}
{% set min = 5 %}
{% endif %}
{% if not max %}
{% set max = min %}
{% endif %}
<p>
{% set sentences = range(min, max+1) | random %}
{% for index in range(0, sentences) %}
{{ sentence(5, 15) | trim }}.
{% endfor %}
</p>
{% endmacro %}
{% import 'lipsum.njk' as lipsum %}
<h1>{{ lipsum.title() }}</h1>
<h2>{{ lipsum.title(10) }}</h2>
<p>{{ lipsum.sentence() }}</p>
{{ lipsum.paragraph(4) }}
Output:
<h1>
Mauris Odio Id Facilisis Aenean</h1>
<h2>
Urna Enim Tincidunt Nibh Congue Blandit Nunc Mi Mi Condimentum</h2>
<p>
Dui vehicula sed nibh laoreet vivamus eu elit porta facilisi finibus sed purus tempor ac nullam dolor et et ut.</p>
<p>
Blandit vivamus facilisi id rhoncus finibus justo risus neque tempor vulputate urna.
Urna amet nunc sit id blandit lacinia tellus.
Justo mi consectetur ut purus risus amet nibh ac facilisis congue eget.
Augue condimentum risus mollis urna adipiscing at lorem tincidunt consectetur.
</p>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment