@mdfriday/foundry
Version:
The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.
104 lines • 3.15 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SitePager = void 0;
/**
* TypeScript equivalent of Go's SitePager struct
* This implements the Pager interface and wraps the content layer's Pager
* Equivalent to golang's type SitePager struct in domain/site/entity/paginator.go
* Following the same pattern as site.Page implements ContentPage
*/
class SitePager {
constructor(page, pager) {
this.page = page;
this.pager = pager;
}
// =================================================================
// PAGER INTERFACE IMPLEMENTATION - DELEGATE TO CONTENT LAYER
// This follows golang's pattern where domain/site just wraps domain/contenthub
// =================================================================
pageNumber() {
return this.pager.pageNumber();
}
totalPages() {
return this.pager.totalPages();
}
url() {
return this.pager.url();
}
pages() {
return this.pager.pages();
}
pagers() {
return this.pager.pagers();
}
first() {
return this.pager.first();
}
last() {
return this.pager.last();
}
hasPrev() {
return this.pager.hasPrev();
}
prev() {
return this.pager.prev();
}
hasNext() {
return this.pager.hasNext();
}
next() {
return this.pager.next();
}
// =================================================================
// TEMPLATE-FRIENDLY PROPERTIES (UPPERCASE)
// These provide template access to the underlying methods
// =================================================================
get PageNumber() {
return this.pageNumber();
}
get TotalPages() {
return this.totalPages();
}
get URL() {
let targetPath = this.url();
if (targetPath.startsWith('/')) {
targetPath = targetPath.slice(1);
}
return this.page.Site.getURL().relURL(targetPath);
}
get HasPrev() {
return this.hasPrev();
}
get HasNext() {
return this.hasNext();
}
// For First, Last, Prev, Next - wrap them as SitePager if they exist
get First() {
const first = this.first();
return first ? new SitePager(this.page, first) : null;
}
get Last() {
const last = this.last();
return last ? new SitePager(this.page, last) : null;
}
get Prev() {
const prev = this.prev();
return prev ? new SitePager(this.page, prev) : null;
}
get Next() {
const next = this.next();
return next ? new SitePager(this.page, next) : null;
}
// Pagers - wrap each as SitePager
get Pagers() {
return this.pagers().map(p => new SitePager(this.page, p));
}
// Pages - convert content pages to site pages
get Pages() {
const contentPages = this.pages();
// Convert content pages to site pages - this matches golang's p.page.sitePages(p.Pager.Pages())
return this.page.sitePages(contentPages);
}
}
exports.SitePager = SitePager;
//# sourceMappingURL=pager.js.map