Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ap-core.js

    r9a585bf rfbfd7a1  
    5757    // zou een verhuizing kunnen laten mislukken.
    5858    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',
    10859    position: 'schema:position',
    10960    bitrate: 'schema:bitrate',
     
    298249 * en zonder `next`. Hem naar de laatste pagina terugbuigen zou opnieuw een
    299250 * antwoord zijn dat over zichzelf liegt.
    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 = {} } = {}) {
     251 */
     252export function pagedCollection(id, items, { totalItems, page = false, perPage = PAGINA_GROOTTE, alGesneden = false, extra = {} } = {}) {
    314253  const lijst = items || [];
    315254  const telling = totalItems === undefined ? lijst.length : totalItems;
     
    328267      '@context': AP_CONTEXT,
    329268      id: url(n),
    330       type: ongeordend ? 'CollectionPage' : 'OrderedCollectionPage',
     269      type: 'OrderedCollectionPage',
    331270      partOf: id,
    332271      totalItems: telling,
    333       ...(ongeordend ? { first: url(1), last: url(paginas) } : {}),
    334       ...(extra.attributedTo ? { attributedTo: extra.attributedTo } : {}),
    335272      ...(n > 1 ? { prev: url(n - 1) } : {}),
    336273      ...(n < paginas ? { next: url(n + 1) } : {}),
    337       ...(ongeordend ? { items: deel } : { orderedItems: deel }),
     274      orderedItems: deel,
    338275    };
    339276  }
     
    341278    '@context': AP_CONTEXT,
    342279    id,
    343     type: ongeordend ? 'Collection' : 'OrderedCollection',
     280    type: 'OrderedCollection',
    344281    ...extra,
    345282    totalItems: telling,
    346283    first: url(1),
    347284    last: url(paginas),
    348     ...(ongeordend ? { items: lijst } : { orderedItems: lijst }),
     285    orderedItems: lijst,
    349286  };
    350287}
Note: See TracChangeset for help on using the changeset viewer.