JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://iansan5653.host22.com/jquery.dotdotdot.min.js"></script>
<div id="photoGrid"></div>
CSS
.photoGridRows {
width: 100%;
white-space: nowrap;
overflow: visible;
}
.photoGridCells {
position: relative;
}
.photoGridPhotos {
vertical-align: bottom;
}
.photoGridTextBox {
position: absolute;
left: 0;
bottom: -1px;
width: 100%;
height: 220%;
color: white;
background: url(data:image/svg+xml;
base64, PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC40Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0.4)));
background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.4) 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#66000000', GradientType=0);
overflow: hidden;
transition: opacity 0.3s;
}
.photoGridText {
position: absolute;
bottom: 0;
left: 2%;
font-family:'Open Sans';
font-weight: 700;
text-transform: uppercase;
width: 96%;
height: 60px;
font-size: 14px;
text-shadow: 0 0 3px...
JavaScript
//var prefs = new gadgets.Prefs();
$(document).ready(function () {
var animate = true; //prefs.getBool("animate");
var changetime = 2500; //prefs.getInt("changetime");
var shopname = "becauseimme"; //prefs.getString("shopname");
var placeholderURL = "http://placehold.it/170x135&text=...";
var listingsAPIURL = "https://openapi.etsy.com/v2/shops/" + shopname + "/listings/active.js?fields=title,url&includes=Images%28url_170x135%29:1:0&api_key=pydcagwswpjpow8wl5doworg&limit=100&callback=?";
function populateGrid(data) {
$("#photoGrid").empty();
var colnumber = Math.ceil($("#photoGrid").width() / 170);
var colwidth = ($("#photoGrid").width() / colnumber) + 2;
var rownumber = 3;
var rowheight = 135 * (colwidth / 170);
for (i = 0; i < rownumber; i++) {
$("#photoGrid").append("<div class='photoGridRows'></div>");
}
var insertPhotoNo = 0;
$(".photoGridRows").each(function (index, elem) {
for (j = 0; j < colnumber; j++) {
if (data === 0) {
var listingTitle = "Loading";
var listingImageURL = placeholderURL;
var listingURL = "#";
} else {
var listingTitle = etsyData.results[insertPhotoNo].title;
var listingImageURL = etsyData.results[insertPhotoNo].Images[0].url_170x135;
var listingURL = etsyData.results[insertPhotoNo].url;
}
$(this).append("<a class='photoGridCells' href='" + listingURL + "' title='" + listingTitle + "'><img class='photoGridPhotos' height='" + rowheight + "' width='" + colwidth + "' src='" + listingImageURL + "' /><div class='photoGridTextBox'><div class='photoGridText'>" + listingTitle + "</div></div></a>");
insertPhotoNo++;
}
});
$(".photoGridCells .photoGridText").dotdotdot();
...