www/src/layouts/partials/package-grid.html

147 lines
3.8 KiB
HTML
Raw Normal View History

<!-- Package Grid -->
<section>
<!-- Package Grid Header -->
<hr>
<div class="container package-grid-header">
2022-09-29 00:45:51 +03:00
<h3>packages</h3>
2022-10-19 20:50:00 +03:00
<p>There are already plenty of packages available through tea. As the communitea builds the library, contributions will live here.</p>
</div>
<hr>
<div class="container package-grid">
<!-- Start Package Grid -->
<div class="row package-row black-bg g-0">
<div id="packageGrid" class="package-grid">
{{ range $.Site.Data.packages }}
{{- partial "package-thumbnail.html" .}}
{{ end }}
</div>
2022-10-19 20:50:00 +03:00
</div>
</div>
<hr>
<div id="loadMoreSection" class="container small">
<div id="loadMorePackagesBtn"><i class="icon-enter-arrow"></i> SHOW MORE</div>
</div>
</section>
<style>
.container.small {
padding-top: 1em;
padding-bottom: 1em;
}
.package-grid {
display: grid;
grid-template-columns: auto auto;
}
#loadMorePackagesBtn {
cursor: pointer;
font-size: 2rem;
font-family: "pp-neue-machina", sans-serif;
background-color: #1a1a1a;
color: #fff;
padding-top: 0.279vw;
text-decoration: none;
text-transform: uppercase;
transition: 0.1s linear;
}
#loadMorePackagesBtn .icon-enter-arrow {
display: inline-block;
position: relaitve;
transition: all 0.2s ease-in-out;
}
#loadMorePackagesBtn:hover .icon-enter-arrow{
display: inline-block;
transform: rotate(-45deg) !important;
}
#loadMoreSection.hidden {
display: none;
}
@media only screen and (max-width: 576px) {
#loadMoreSection {
display: none;
}
}
@media only screen and (min-width: 576px) {
.package-grid {
/* changes to 3 column thumbs */
grid-template-columns: auto auto auto;
}
}
@media only screen and (min-width: 992px) {
.package-grid {
/* changes to 4 column thumbs */
grid-template-columns: auto auto auto auto;
}
}
.card-thumbnail.hidden {
height: 0px;
padding: 0px;
margin: 0px;
border: 0px;
overflow: hidden;
}
2022-10-14 23:23:32 +03:00
</style>
<script language="javascript" type="text/javascript">
let sortBy = 'popularity'; // last_modified
let sortDirection = 'desc'; // asc
let limit = 16;
const packages = document.querySelectorAll('.card-thumbnail');
const packagesCount = packages.length;
function sortPackages() {
const packages = document.querySelectorAll('.card-thumbnail');
const packagesArray = Array.from(packages);
const sortedPackages = packagesArray.sort((a, b) => {
if (sortBy === 'popularity') {
const aPop = +a.dataset.popularity;
const bPop = +b.dataset.popularity;
return sortDirection === 'asc' ? aPop-bPop : bPop - aPop;
} else { // last_modified
const aDate = new Date(a.dataset.last_modified);
const bDate = new Date(b.dataset.last_modified);
return sortDirection === 'asc' ? aDate-bDate : bDate - aDate;
}
});
const grid = document.getElementById('packageGrid');
for(const op of packages) {
op.remove();
}
for(const sp of sortedPackages) {
grid.appendChild(sp);
}
refreshDisplayedPackages();
}
function refreshDisplayedPackages() {
const packages = document.querySelectorAll('.card-thumbnail');
let i = 0;
for(const sp of packages) {
if (i >= limit) {
sp.classList.add('hidden');
} else {
sp.classList.remove('hidden');
}
i++;
}
}
const loadMoreButton = document.getElementById('loadMorePackagesBtn');
loadMoreButton.addEventListener('click',() => {
limit += 16;
refreshDisplayedPackages();
if (limit >= packagesCount) {
const loadMoreSection = document.getElementById('loadMoreSection');
loadMoreSection.classList.add('hidden');
}
},false);
sortPackages();
</script>