JavaScript 用于填充 HTML/CSS 设计的库,其中包含虚拟但美观的数据?

JavaScript library to fill HTML/CSS design with dummy but nice-looking data?

假设我有一个 CSS/HTML 设计,我想将它展示给客户。我不想用 lorem ipsum 和 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 库,它完全可以做到这一点,但我找不到它。

万一你找不到它,那就创建一个。

我使用了两个在线资源来创建一个简单的内容生成器(助手):

/* 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 插件...)。 Fiddle.

上也有相同的代码