Changeset bac4bf3 in Klonkt for src/services/ap-core.js
- Timestamp:
- 08/13/2026 11:55:04 AM (4 weeks ago)
- Branches:
- main
- Children:
- 783b9ff
- Parents:
- 7e9d0ea
- git-author:
- Robin <roboburr@…> (08/13/2026 11:54:36 AM)
- git-committer:
- Robin <roboburr@…> (08/13/2026 11:55:04 AM)
- File:
-
- 1 edited
-
src/services/ap-core.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ap-core.js
r7e9d0ea rbac4bf3 212 212 * extra velden die op de wortel horen (attributedTo, shaer:*) 213 213 */ 214 export function pagedCollection(id, items, { totalItems, page = false, extra = {} } = {}) { 214 /** Hoeveel items op een pagina. Gelijk aan wat de outbox vroeger als KAP had. */ 215 export const PAGINA_GROOTTE = 20; 216 217 /** 218 * Een collectie, met ECHTE paginering (shaer-sk4). 219 * 220 * Wat hier stond was een omhulsel: `page` veranderde alleen de VORM en er werd 221 * nooit gesneden. `first` en `last` wezen allebei naar ?page=1, elke ?page=N gaf 222 * dezelfde items, en pagina 99 noemde zichzelf pagina 1. Robin zag dat de 223 * pagina's identiek bleven; dit is waarom. 224 * 225 * DE WORTEL BLIJFT ZIJN ITEMS INLINE DRAGEN, en dat is geen slordigheid maar de 226 * hele reden dat dit veilig is. Shaer leest één document en volgt `next` niet; 227 * zou de wortel nu leeg worden, dan kreeg elke draaiende app nul items en geen 228 * foutmelding. Eerst de clients leren pagineren, dan pas de wortel afslanken. 229 * 230 * Een pagina VOORBIJ het einde is leeg en zegt dat ook -- met zijn eigen nummer 231 * en zonder `next`. Hem naar de laatste pagina terugbuigen zou opnieuw een 232 * antwoord zijn dat over zichzelf liegt. 233 */ 234 export function pagedCollection(id, items, { totalItems, page = false, perPage = PAGINA_GROOTTE, extra = {} } = {}) { 215 235 const lijst = items || []; 216 236 const telling = totalItems === undefined ? lijst.length : totalItems; 217 const eerste = `${id}?page=1`; 237 const grootte = Math.max(1, Number(perPage) || PAGINA_GROOTTE); 238 const paginas = Math.max(1, Math.ceil(lijst.length / grootte)); 239 const url = (n) => `${id}?page=${n}`; 240 218 241 if (page) { 242 const n = Math.max(1, Math.floor(Number(page)) || 1); 243 const deel = lijst.slice((n - 1) * grootte, n * grootte); 219 244 return { 220 245 '@context': AP_CONTEXT, 221 id: eerste,246 id: url(n), 222 247 type: 'OrderedCollectionPage', 223 248 partOf: id, 224 249 totalItems: telling, 225 orderedItems: lijst, 250 ...(n > 1 ? { prev: url(n - 1) } : {}), 251 ...(n < paginas ? { next: url(n + 1) } : {}), 252 orderedItems: deel, 226 253 }; 227 254 } … … 232 259 ...extra, 233 260 totalItems: telling, 234 first: eerste,235 last: eerste,261 first: url(1), 262 last: url(paginas), 236 263 orderedItems: lijst, 237 264 };
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)