Path: blob/main/src/resources/projects/website/listing/item-default.ejs.md
12923 views
<% // Fields const fields = listing.fields;
// Image properties const imageAlign = listing['image-align'] || 'left'; const imageHeight = listing['image-height'];
// Fields that don't have a known place to be displayed in this template const otherFields = fields.filter(field => { return !["title", "image", "image-alt", "date", "author", "subtitle", "description", "reading-time", "categories"].includes(field); });
// Capture the item number for utility functions that need it const itemNumber = listing.utilities.itemNumber();
// Writes a metadata value const outputMetadata = (item, field) => {
const readField = (item, field) => { let value = item[field]; if (field.includes(".") && !field.endsWith(".") && !field.startsWith(".")) { const fields = field.split("."); value = item; for (const deref of fields) { value = value[deref]; } } return value; }
let value = readField(item, field); if (value !== undefined) { print(<div class="metadata-value listing-${field}">${listing.utilities.outputLink(item, field, value)}</div>); } } %>
::: {.quarto-post .image-<%= imageAlign %> <%= listing.utilities.metadataAttrs(item) %>}
<% if (fields.includes('image')) { %>
<% } %>
::: {.body}
<% if (fields.includes('title')) { %>
<%= item.title %>
<% if (fields.includes('subtitle')) { %> <% } %> <% } %><% if (fields.includes('categories') && item.categories) { %>
<% } %>
<% if (fields.includes('description')) { %>
<%= item.description %>
<% } %>
:::
::: {.metadata}
<% if (fields.includes('date') && item.date) { %>
<% if (fields.includes('author') && item.author) { %>
<% if (fields.includes('reading-time') && item['reading-time']) { %>
<% } %>
<% for (const field of otherFields) { %> <% outputMetadata(item, field) %> <% } %>
:::
:::