Changeset 749605a in Klonkt for src/services/ap-core.js
- Timestamp:
- 08/16/2026 03:06:18 PM (3 weeks ago)
- Branches:
- main
- Children:
- a5caa73
- Parents:
- a5515b4 (diff), 9026de5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
src/services/ap-core.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ap-core.js
ra5515b4 r749605a 57 57 // zou een verhuizing kunnen laten mislukken. 58 58 sameAs: { '@id': 'schema:sameAs', '@type': '@id' }, 59 // ── Wat we uit Funkwhale's vocabulaire overnemen, en waarom ── 60 // 61 // LIBRARY. Gemeten op 13-8: open.audio had onze vier tracks binnengehaald 62 // via hun AP-id, met een artist_credit dat het zelf uit onze attributedTo 63 // afleidde -- maar uploads LEEG en is_playable false. Bij Funkwhale hangt 64 // een upload aan een library; zonder die bak blijft een track een naam 65 // zonder geluid. 66 // 67 // TRACK. Hier stond dat we deze NIET namen, met als reden: hij vraagt een 68 // entiteit waar wij tekst hebben, en er een id voor verzinnen belooft wat 69 // we niet waarmaken. Die redenering klopte half, en de Emissary-meting van 70 // 16-8 (shaer-3f8a) laat zien welke helft. Een TRACK heeft bij ons wel 71 // degelijk een eigen identiteit -- het is een rij met een titel en een 72 // plaats in een uitgave. Wat wij niet hebben is een ALBUM als entiteit, en 73 // dat is een andere vraag (shaer-k37k). Emissary stuurt precies die kleine 74 // vorm: type, id, name, position. Wij ook, en album blijft eruit tot het 75 // een echt object is -- een verzonnen album-URI is nu juist wel de belofte 76 // die we niet kunnen waarmaken. 77 // 78 // Twee onafhankelijke implementaties zenden dit nu, en het is de kant waar 79 // FEP-be68 heen beweegt. ArtistCredit blijft eruit: dat is nog steeds een 80 // entiteit die wij niet hebben. 81 // 82 // De vorm van de termen is letterlijk die van hun contexts.py (regel 83 // 293-306), zodat een lezer die hun context laadt en een lezer die de onze 84 // leest op dezelfde IRI's uitkomen. 85 fw: 'https://funkwhale.audio/ns#', 86 Library: 'fw:Library', 87 library: { '@id': 'fw:library', '@type': '@id' }, 88 Track: 'fw:Track', 89 track: { '@id': 'fw:track', '@type': '@id' }, 90 // ARTIEST-CREDIT. Hun TrackSerializer eist minstens een artist_credit, en 91 // dat leek lang onmogelijk: het vraagt een Artist met een eigen id, en bij 92 // ons was een artiest tekst. Sinds de MusicBrainz-koppeling (shaer-mbz) is 93 // dat niet meer waar -- de site-ACTOR is de artiest. Een echte, opvraagbare 94 // URI, met de sitetitel als naam en een musicbrainzId als hij gekoppeld is. 95 // Er valt hier niets te verzinnen; open.audio leidde dit zelfs al zelf af 96 // uit onze attributedTo (gemeten 13-8). 97 // 98 // `@container: @list` is GEEN opsmuk. Ze lezen dit veld met 99 // first_attr(FW.artist_credit, "@list"), en zonder die declaratie expandeert 100 // onze array niet naar een @list -- dan staat er iets dat er goed uitziet en 101 // door hun lezer niet gevonden wordt. Letterlijk hun contexts.py regel 311. 102 Artist: 'fw:Artist', 103 ArtistCredit: 'fw:ArtistCredit', 104 artist: { '@id': 'fw:artist', '@type': '@id' }, 105 artist_credit: { '@id': 'fw:artist_credit', '@type': '@id', '@container': '@list' }, 106 credit: 'fw:credit', 107 musicbrainzId: 'fw:musicbrainzId', 59 108 position: 'schema:position', 60 109 bitrate: 'schema:bitrate', … … 249 298 * en zonder `next`. Hem naar de laatste pagina terugbuigen zou opnieuw een 250 299 * antwoord zijn dat over zichzelf liegt. 251 */ 252 export function pagedCollection(id, items, { totalItems, page = false, perPage = PAGINA_GROOTTE, alGesneden = false, extra = {} } = {}) { 300 * 301 * `ongeordend` maakt er de NIET-geordende vorm van: `Collection` met 302 * `CollectionPage` en `items`, in plaats van `OrderedCollection` met 303 * `OrderedCollectionPage` en `orderedItems`. Dat is geen dialect maar de andere 304 * helft van AS2 -- en de bibliotheek hoort daar: een platenkast heeft geen 305 * volgorde die iets betekent, en `Library` is bij Funkwhale expliciet een 306 * `Collection`. Onze outbox is wél geordend (chronologie is daar de inhoud) en 307 * blijft dus zoals hij was. 308 * 309 * De pagina draagt in die vorm ook `first` en `last`. AS2 staat dat toe -- 310 * CollectionPage erft van Collection -- en een lezer die halverwege binnenkomt 311 * kan zo terug naar het begin zonder eerst de wortel op te halen. 312 */ 313 export function pagedCollection(id, items, { totalItems, page = false, perPage = PAGINA_GROOTTE, alGesneden = false, ongeordend = false, extra = {} } = {}) { 253 314 const lijst = items || []; 254 315 const telling = totalItems === undefined ? lijst.length : totalItems; … … 267 328 '@context': AP_CONTEXT, 268 329 id: url(n), 269 type: 'OrderedCollectionPage',330 type: ongeordend ? 'CollectionPage' : 'OrderedCollectionPage', 270 331 partOf: id, 271 332 totalItems: telling, 333 ...(ongeordend ? { first: url(1), last: url(paginas) } : {}), 334 ...(extra.attributedTo ? { attributedTo: extra.attributedTo } : {}), 272 335 ...(n > 1 ? { prev: url(n - 1) } : {}), 273 336 ...(n < paginas ? { next: url(n + 1) } : {}), 274 orderedItems: deel,337 ...(ongeordend ? { items: deel } : { orderedItems: deel }), 275 338 }; 276 339 } … … 278 341 '@context': AP_CONTEXT, 279 342 id, 280 type: 'OrderedCollection',343 type: ongeordend ? 'Collection' : 'OrderedCollection', 281 344 ...extra, 282 345 totalItems: telling, 283 346 first: url(1), 284 347 last: url(paginas), 285 orderedItems: lijst,348 ...(ongeordend ? { items: lijst } : { orderedItems: lijst }), 286 349 }; 287 350 }
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)