Библиотека 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 ответ
Решение
Если вы не можете его найти, то создайте его.
Я использовал два онлайн-ресурса для создания простого генератора контента (помощника):
- FillText.com Api и
- http://placehold.it/ фиктивный генератор изображений.
/* 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...). Тот же код также на скрипке.