2022-08-26 08:35:55 -07:00
|
|
|
import { IgniteHtml } from '../ignite-html/ignite-html.js';
|
2020-10-20 13:15:44 -07:00
|
|
|
import { IgniteElement } from "../ignite-html/ignite-element.js";
|
|
|
|
import { IgniteTemplate, button, ul, slot, span, div, list, html, pagination, population } from "../ignite-html/ignite-template.js";
|
|
|
|
import { IgniteProperty } from "../ignite-html/ignite-html.js";
|
|
|
|
|
|
|
|
class PaginationList extends IgniteElement {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
}
|
|
|
|
|
|
|
|
get properties() {
|
|
|
|
return {
|
|
|
|
pageSize: 10,
|
|
|
|
currentPage: 0,
|
|
|
|
items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
get styles() {
|
2020-12-08 09:19:34 -08:00
|
|
|
return /*css*/`
|
2020-10-20 13:15:44 -07:00
|
|
|
mt-pagination-list .list-container {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
gap: 1em;
|
|
|
|
margin-bottom: 1em;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
mt-pagination-list .navigation-buttons button {
|
|
|
|
background-color: #e0e0e0;
|
|
|
|
border-color: #e0e0e0;
|
|
|
|
border: 1px solid transparent;
|
|
|
|
padding: .375rem .75rem;
|
|
|
|
font-size: 1rem;
|
|
|
|
border-radius: .25rem;
|
|
|
|
color: #000;
|
|
|
|
outline: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
mt-pagination-list .navigation-buttons button.active {
|
|
|
|
filter: brightness(75%);
|
|
|
|
}
|
|
|
|
|
|
|
|
mt-pagination-list .navigation-buttons {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
gap: 0.5em;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
|
|
|
|
mt-pagination-list .navigation-page-buttons {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
gap: 0.5em;
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return this.template
|
|
|
|
.style("display", "flex")
|
|
|
|
.style("flex-direction", "column")
|
|
|
|
.style("align-items", "center")
|
|
|
|
.style("justify-content", "center")
|
|
|
|
.onClick(e => e.stopPropagation())
|
|
|
|
.child(
|
|
|
|
new div()
|
|
|
|
.class("list-container")
|
|
|
|
.child(
|
|
|
|
new pagination(this.items, this.pageSize, this.currentPage, item => {
|
|
|
|
if (item instanceof IgniteTemplate) {
|
|
|
|
return item;
|
|
|
|
} else {
|
|
|
|
return new div(item);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
),
|
|
|
|
new div().class("navigation-buttons").child(
|
|
|
|
new button().child("Prev").onClick(e => {
|
|
|
|
e.stopPropagation();
|
|
|
|
var pages = parseInt((this.items.length / this.pageSize)) + (this.items.length % this.pageSize > 0 ? 1 : 0);
|
|
|
|
if (this.currentPage >= pages) {
|
|
|
|
this.currentPage = pages - 1;
|
|
|
|
} else if (this.currentPage > 0) {
|
|
|
|
this.currentPage--;
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
new div().class("navigation-page-buttons").child(
|
|
|
|
new population(
|
|
|
|
[this.pageSize, this.items],
|
|
|
|
index => {
|
|
|
|
return new button()
|
|
|
|
.child((index + 1).toString())
|
|
|
|
.class([this.currentPage, index], (currentPage, index) => {
|
|
|
|
return currentPage == index ? "active" : null;
|
|
|
|
})
|
|
|
|
.onClick(e => {
|
|
|
|
e.stopPropagation();
|
|
|
|
this.currentPage = index;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
(pageSize, items) => {
|
|
|
|
var pages = parseInt((items.length / pageSize)) + (items.length % pageSize > 0 ? 1 : 0);
|
|
|
|
|
|
|
|
//Update our current page if we can and if we need to.
|
|
|
|
if (!(this.currentPage instanceof IgniteProperty) && this.currentPage >= pages) {
|
|
|
|
this.currentPage = pages - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return pages;
|
|
|
|
})
|
|
|
|
),
|
|
|
|
new button().child("Next").onClick(e => {
|
|
|
|
e.stopPropagation();
|
|
|
|
var pages = parseInt((this.items.length / this.pageSize)) + (this.items.length % this.pageSize > 0 ? 1 : 0);
|
|
|
|
if (this.currentPage + 1 < pages) {
|
|
|
|
this.currentPage++;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class PaginationListTemplate extends IgniteTemplate {
|
|
|
|
constructor(...children) {
|
|
|
|
super("mt-pagination-list", children);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-26 08:35:55 -07:00
|
|
|
IgniteHtml.register("mt-pagination-list", PaginationList);
|
2020-10-20 13:15:44 -07:00
|
|
|
|
|
|
|
export {
|
|
|
|
PaginationListTemplate as PaginationList
|
2022-08-26 08:35:55 -07:00
|
|
|
}
|