From e86738fc4aef746a7fa4aef6c84a0b0bc0f9005a Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 5 Apr 2021 16:18:59 -0300 Subject: use or mock ListFormat api on client --- static/client.js | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'static') diff --git a/static/client.js b/static/client.js index b79539e..96d227f 100644 --- a/static/client.js +++ b/static/client.js @@ -12,6 +12,38 @@ let officialAlbumData, fandomAlbumData, artistNames; let ready = false; +// Localiz8tion nonsense ---------------------------------- + +const language = document.documentElement.getAttribute('lang'); + +let list; +if ( + typeof Intl === 'object' && + typeof Intl.ListFormat === 'function' +) { + const getFormat = type => { + const formatter = new Intl.ListFormat(language, {type}); + return formatter.format.bind(formatter); + }; + + list = { + conjunction: getFormat('conjunction'), + disjunction: getFormat('disjunction'), + unit: getFormat('unit') + }; +} else { + // Not a gr8 mock we've got going here, 8ut it's *mostly* language-free. + // We use the same mock for every list 'cuz we don't have any of the + // necessary CLDR info to appropri8tely distinguish 8etween them. + const arbitraryMock = array => array.join(', '); + + list = { + conjunction: arbitraryMock, + disjunction: arbitraryMock, + unit: arbitraryMock + }; +} + // Miscellaneous helpers ---------------------------------- function rebase(href, rebaseKey = 'rebaseLocalized') { @@ -251,9 +283,8 @@ const infoCard = (() => { imgLink.href = rebase(data.cover.paths.original, 'rebaseMedia'); if (containerShow === containerReveal) { - // TODO: List localiz8tion? const cw = containerShow.querySelector('.info-card-art-warnings'); - cw.innerText = data.cover.warnings.join(', '); + cw.innerText = list.unit(data.cover.warnings); const reveal = containerShow.querySelector('.reveal'); reveal.classList.remove('revealed'); -- cgit 1.3.0-6-gf8a5