diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-05-11 19:00:59 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-05-11 19:00:59 -0300 |
| commit | 657e1c1e447ad8939d2ad9286af00be52975f791 (patch) | |
| tree | 8f471ff45bad3f1890357f8cbe54c75e5b01fb09 /src/content | |
| parent | 38672451c0f2380093283156609018cce789bb50 (diff) | |
content, data: generateRelationsContentHeading, Track.nameStyle
Diffstat (limited to 'src/content')
3 files changed, 106 insertions, 107 deletions
diff --git a/src/content/dependencies/generateContentContentHeading.js b/src/content/dependencies/generateContentContentHeading.js index 9ed2d9f0..44053427 100644 --- a/src/content/dependencies/generateContentContentHeading.js +++ b/src/content/dependencies/generateContentContentHeading.js @@ -6,9 +6,10 @@ export default { data: (thing) => ({ name: - (thing - ? thing.name - : null), + (thing ? thing.name : null), + + nameStyle: + (thing ? thing.nameStyle : null), }), slots: { @@ -32,33 +33,40 @@ export default { attributes: slots.attributes, title: - (() => { + language.encapsulate(slots.string, workingCapsule => { if (!slots.string) return html.blank(); - const options = {}; + const workingOptions = {}; if (slots.summary) { - options.cue = + workingOptions.cue = html.tag('span', {class: 'cue'}, language.$(slots.string, 'cue')); } - if (data.name) { - options.thing = html.tag('i', data.name); + const name = + (data.nameStyle === 'utility' + ? null + : data.name); + + if (name) { + workingOptions.thing = html.tag('i', name); + } else { + workingCapsule += '.withoutName'; } if (slots.summary) { return html.tags([ html.tag('span', {class: 'when-open'}, - language.$(slots.string, options)), + language.$(workingCapsule, workingOptions)), html.tag('span', {class: 'when-collapsed'}, - language.$(slots.string, 'collapsed', options)), + language.$(workingCapsule, 'collapsed', workingOptions)), ]); } else { - return language.$(slots.string, options); + return language.$(workingCapsule, workingOptions); } - })(), + }), stickyTitle: (slots.string diff --git a/src/content/dependencies/generateRelationsContentHeading.js b/src/content/dependencies/generateRelationsContentHeading.js new file mode 100644 index 00000000..5d50c2fc --- /dev/null +++ b/src/content/dependencies/generateRelationsContentHeading.js @@ -0,0 +1,39 @@ +export default { + relations: (relation, _thing) => ({ + contentHeading: + relation('generateContentHeading'), + }), + + data: (nameSlot, thing) => ({ + nameSlot, + + name: thing.name, + nameStyle: thing.nameStyle, + }), + + slots: { + attributes: {type: 'attributes', mutable: false}, + string: {type: 'string'}, + }, + + generate(data, relations, slots, {html, language}) { + const namePart = + (data.nameStyle === 'utility' + ? null + : html.tag('i', data.name)); + + const title = + (namePart + ? language.$(slots.string, {[data.nameSlot]: namePart}) + : language.$(slots.string, 'withoutName')); + + const stickyTitle = + language.$(slots.string, 'sticky'); + + return relations.contentHeading.slots({ + attributes: slots.attributes, + title, + stickyTitle, + }); + }, +}; diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js index 5dce680b..daba1ead 100644 --- a/src/content/dependencies/generateTrackInfoPage.js +++ b/src/content/dependencies/generateTrackInfoPage.js @@ -76,6 +76,9 @@ export default { contentHeading: relation('generateContentHeading'), + relationsContentHeading: + relation('generateRelationsContentHeading', 'track', track), + name: relation('generateName', track), @@ -237,11 +240,10 @@ export default { relations.otherReleasesLine), html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'contributors'}, - title: language.$('releaseInfo.contributors'), - }), + relations.contentHeading.clone().slots({ + attributes: {id: 'contributors'}, + title: language.$('releaseInfo.contributors'), + }), relations.contributorContributionList.slots({ chronologyKind: 'trackContribution', @@ -249,99 +251,52 @@ export default { ]), html.tags([ - language.encapsulate('releaseInfo.tracksReferenced', capsule => - relations.contentHeading.clone() - .slots({ - attributes: {id: 'references'}, - - title: - language.$(capsule, { - track: - html.tag('i', data.name), - }), - - stickyTitle: - language.$(capsule, 'sticky'), - })), + relations.relationsContentHeading.clone().slots({ + attributes: {id: 'references'}, + string: 'releaseInfo.tracksReferenced', + }), relations.referencedTracksList, ]), html.tags([ - language.encapsulate('releaseInfo.tracksSampled', capsule => - relations.contentHeading.clone() - .slots({ - attributes: {id: 'samples'}, - - title: - language.$(capsule, { - track: - html.tag('i', data.name), - }), - - stickyTitle: - language.$(capsule, 'sticky'), - })), + relations.relationsContentHeading.clone().slots({ + attributes: {id: 'samples'}, + string: 'releaseInfo.tracksSampled', + }), relations.sampledTracksList, ]), language.encapsulate('releaseInfo.tracksThatReference', capsule => html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'referenced-by'}, - - title: - language.$(capsule, { - track: html.tag('i', data.name), - }), - - stickyTitle: - language.$(capsule, 'sticky'), - }), - - relations.referencedByTracksList - .slots({ - headingString: capsule, - }), + relations.relationsContentHeading.clone().slots({ + attributes: {id: 'referenced-by'}, + string: capsule, + }), + + relations.referencedByTracksList.slots({ + headingString: capsule, + }), ])), language.encapsulate('releaseInfo.tracksThatSample', capsule => html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'sampled-by'}, - - title: - language.$(capsule, { - track: html.tag('i', data.name), - }), - - stickyTitle: - language.$(capsule, 'sticky'), - }), - - relations.sampledByTracksList - .slots({ - headingString: capsule, - }), + relations.relationsContentHeading.clone().slots({ + attributes: {id: 'sampled-by'}, + string: capsule, + }), + + relations.sampledByTracksList.slots({ + headingString: capsule, + }), ])), html.tags([ - language.encapsulate('releaseInfo.flashesThatFeature', capsule => - relations.contentHeading.clone() - .slots({ - attributes: {id: 'featured-in'}, - - title: - language.$(capsule, { - track: html.tag('i', data.name), - }), - - stickyTitle: - language.$(capsule, 'sticky'), - })), + relations.relationsContentHeading.clone().slots({ + attributes: {id: 'featured-in'}, + string: 'releaseInfo.flashesThatFeature', + }), relations.flashesThatFeatureList, ]), @@ -368,31 +323,28 @@ export default { relations.lyricsSection, html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'sheet-music-files'}, - title: language.$('releaseInfo.sheetMusicFiles.heading'), - }), + relations.contentHeading.clone().slots({ + attributes: {id: 'sheet-music-files'}, + title: language.$('releaseInfo.sheetMusicFiles.heading'), + }), relations.sheetMusicFilesList, ]), html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'midi-project-files'}, - title: language.$('releaseInfo.midiProjectFiles.heading'), - }), + relations.contentHeading.clone().slots({ + attributes: {id: 'midi-project-files'}, + title: language.$('releaseInfo.midiProjectFiles.heading'), + }), relations.midiProjectFilesList, ]), html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'additional-files'}, - title: language.$('releaseInfo.additionalFiles.heading'), - }), + relations.contentHeading.clone().slots({ + attributes: {id: 'additional-files'}, + title: language.$('releaseInfo.additionalFiles.heading'), + }), relations.additionalFilesList, ]), |