diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-03-04 20:27:24 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-06-12 17:26:32 -0300 |
commit | 5826cb1f9a21825f4998013a67ae7c9aa6bcb102 (patch) | |
tree | eb3fc986aaf4d0073a855b1898c0cd1032a98e07 /src/data/yaml.js | |
parent | be402bfcad9a8ab5287ed15f942f5d4730d7490e (diff) |
data: WikiInfo: contributionPresets
Diffstat (limited to 'src/data/yaml.js')
-rw-r--r-- | src/data/yaml.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/data/yaml.js b/src/data/yaml.js index 7e470531..d3c77b9e 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -482,6 +482,73 @@ export function parseDimensions(string) { return nums; } +export const contributionPresetYAMLSpec = [ + {from: 'Album', to: 'album', fields: [ + {from: 'Artists', to: 'artistContribs'}, + ]}, + + {from: 'Flash', to: 'flash', fields: [ + {from: 'Contributors', to: 'contributorContribs'}, + ]}, + + {from: 'Track', to: 'track', fields: [ + {from: 'Artists', to: 'artistContribs'}, + {from: 'Contributors', to: 'contributorContribs'}, + ]}, +]; + +export function parseContributionPresetContext(context) { + if (!Array.isArray(context)) { + return context; + } + + const [target, ...fields] = context; + + const targetEntry = + contributionPresetYAMLSpec + .find(({from}) => from === target); + + if (!targetEntry) { + return context; + } + + const properties = + fields.map(field => { + const fieldEntry = + targetEntry.fields + .find(({from}) => from === field); + + if (!fieldEntry) return field; + + return fieldEntry.to; + }); + + return [targetEntry.to, ...properties]; +} + +export function parseContributionPresets(list) { + if (!Array.isArray(list)) return list; + + return list.map(item => { + if (typeof item !== 'object') return item; + + return { + annotation: + item['Annotation'] ?? null, + + context: + parseContributionPresetContext( + item['Context'] ?? null), + + countInContributionTotals: + item['Count In Contribution Totals'] ?? null, + + countInDurationTotals: + item['Count In Duration Totals'] ?? null, + }; + }); +} + // documentModes: Symbols indicating sets of behavior for loading and processing // data files. export const documentModes = { |