Библиотека JavaScript для заполнения HTML/CSS дизайна фиктивными, но красивыми данными?

Допустим, у меня есть дизайн CSS/HTML, и я хотел бы показать его клиенту. Вместо того, чтобы заполнять его lorem ipsum и http://placehold.it/, я хотел бы заполнить его более реалистичными (или просто более приятными) данными.

Также я хотел бы избежать повторения блоков контента. Например, вместо написания кода ниже:

<section>
  <article>
    <h2>Lorem ipsum title...<h2>
    <img src="http://placehold.it/200x100" align="left" />
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...<p>
  </article>

  <article>
    <h2>Donec a sodales urna...<h2>
    <img src="http://placehold.it/200x100" align="left" />
    <p>Nunc luctus viverra risus in molestie. Maecenas eros nisl,...<p>
  </article>

  <article>
    <h2>Phasellus nunc dolor...<h2>
    <img src="http://placehold.it/200x100" align="left" />
    <p>Pellentesque habitant morbi tristique senectus et netus...<p>
  </article>
</section>

Я хотел бы написать это так:

<section>
  <article repeat="3">
    <h2 title words="5"><h2>
    <img image width="200" height="200" align="left" />
    <p text words="20"><p>
  </article>
</section>

Я уверен, что видел библиотеку JavaScript, которая делает именно это, но я не смог ее найти.

1 ответ

Решение

Если вы не можете его найти, то создайте его.

Я использовал два онлайн-ресурса для создания простого генератора контента (помощника):

/* Helpers */
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
};

/* Repeating stuff */
function copyFromChildren( elem ) {
    var thisBlock = $(this);
    var hasChildren = thisBlock.find('[data-dummy-repeat]');
    if ( hasChildren.length ) {
        hasChildren.each(copyFromChildren);   
    };
    var copies = parseInt( thisBlock.data('dummyRepeat') );
    if ( !isNaN(copies) && copies>0 ) {
        while(copies>0) {
            thisBlock
                .clone(true, true)
                .removeAttr('data-dummy-repeat')
                .insertAfter(thisBlock);
            copies--;
        };
    };
    thisBlock.remove();
};
$('[data-dummy-repeat]').each(copyFromChildren);

/* Dummy content from: http://www.filltext.com/ */
$('[data-dummy-content]').each(function(i) {
    var thisElem = $(this);
    var contentType = $(thisElem).data('dummyContent').split(':');
    var url = "http://www.filltext.com/?callback=?";
    switch( contentType[0] ) {
        case 'text':
            var wordsCount = contentType[1];
            $.getJSON( url, {
                'rows': 1,
                'words': '{lorem|' + wordsCount + '}'
            }).done(function( data ) {
                thisElem.html( data[0].words.capitalizeFirstLetter() );
            });
            break;
        case 'image':
            var newSrc = '//placehold.it/' + contentType[1] + 'x' + contentType[2];
            thisElem.attr('src', newSrc);
            break;
    };
    thisElem.removeAttr('data-dummy-content');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<section>
    <article data-dummy-repeat="3">
         <h2 data-dummy-content="text:5"></h2>
        <img data-dummy-content="image:300:200" width="150" height="100" align="left" />
        <p data-dummy-repeat="2" data-dummy-content="text:20"></p>
    </article>
</section>

Любой может улучшить код (больше типов контента, плагин jQuery...). Тот же код также на скрипке.

Другие вопросы по тегам