« get me outta code hell

new Albums - by Date Added to Wiki listing - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <towerofnix@gmail.com>2021-04-10 22:28:17 -0300
committer(quasar) nebula <towerofnix@gmail.com>2021-04-10 22:28:17 -0300
commit0d0d38ce51ca02b7c3bd91317b5fa0bbff1f06de (patch)
treed78594d4b44bb806eccf7f2a3c4f8ec9707622d5
parente99c48d128744a77c672cdf8f19dcf3cdc395b9b (diff)
new Albums - by Date Added to Wiki listing
-rw-r--r--strings-default.json3
-rw-r--r--upd8-util.js13
-rwxr-xr-xupd8.js32
3 files changed, 47 insertions, 1 deletions
diff --git a/strings-default.json b/strings-default.json
index 3dc2e4b..7a948d6 100644
--- a/strings-default.json
+++ b/strings-default.json
@@ -225,6 +225,9 @@
     "listingPage.listAlbums.byDuration.item": "{ALBUM} ({DURATION})",
     "listingPage.listAlbums.byDate.title": "Albums - by Date",
     "listingPage.listAlbums.byDate.item": "{ALBUM} ({DATE})",
+    "listingPage.listAlbums.byDateAdded.title": "Albums - by Date Added to Wiki",
+    "listingPage.listAlbums.byDateAdded.date": "{DATE}",
+    "listingPage.listAlbums.byDateAdded.album": "{ALBUM}",
     "listingPage.listArtists.byName.title": "Artists - by Name",
     "listingPage.listArtists.byName.item": "{ARTIST} ({CONTRIBUTIONS})",
     "listingPage.listArtists.byContribs.title": "Artists - by Contributions",
diff --git a/upd8-util.js b/upd8-util.js
index 6ff3419..abeed6c 100644
--- a/upd8-util.js
+++ b/upd8-util.js
@@ -370,7 +370,18 @@ module.exports.chunkByConditions = function(array, conditions) {
 };
 
 module.exports.chunkByProperties = function(array, properties) {
-    return module.exports.chunkByConditions(array, properties.map(p => (a, b) => a[p] !== b[p] || a[p] != b[p]))
+    return module.exports.chunkByConditions(array, properties.map(p => (a, b) => {
+        if (a[p] instanceof Date && b[p] instanceof Date)
+            return +a[p] !== +b[p];
+
+        if (a[p] !== b[p]) return true;
+
+        // Not sure if this line is still necessary with the specific check for
+        // d8tes a8ove, 8ut, uh, keeping it anyway, just in case....?
+        if (a[p] != b[p]) return true;
+
+        return false;
+    }))
         .map(chunk => ({
             ...Object.fromEntries(properties.map(p => [p, chunk[0][p]])),
             chunk
diff --git a/upd8.js b/upd8.js
index 732c35a..66582f1 100755
--- a/upd8.js
+++ b/upd8.js
@@ -4136,6 +4136,38 @@ const listingSpec = [
     },
 
     {
+        directory: 'albusm/by-date-added',
+        title: ({strings}) => strings('listingPage.listAlbums.byDateAdded.title'),
+
+        data() {
+            return chunkByProperties(albumData.slice().sort((a, b) => {
+                if (a.dateAdded < b.dateAdded) return -1;
+                if (a.dateAdded > b.dateAdded) return 1;
+            }), ['dateAdded']);
+        },
+
+        html(chunks, {strings, to}) {
+            return fixWS`
+                <dl>
+                    ${chunks.map(({dateAdded, chunk: albums}) => fixWS`
+                        <dt>${strings('listingPage.listAlbums.byDateAdded.date', {
+                            date: strings.count.date(dateAdded)
+                        })}</dt>
+                        <dd><ul>
+                            ${(albums
+                                .map(album => strings('listingPage.listAlbums.byDateAdded.album', {
+                                    album: strings.link.album(album, {to})
+                                }))
+                                .map(row => `<li>${row}</li>`)
+                                .join('\n'))}
+                        </ul></dd>
+                    `).join('\n')}
+                </dl>
+            `;
+        }
+    },
+
+    {
         directory: 'artists/by-name',
         title: ({strings}) => strings('listingPage.listArtists.byName.title'),