« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common-util/wiki-data.js2
-rw-r--r--src/content/dependencies/generateArtTagGalleryPage.js71
-rw-r--r--src/content/dependencies/generateArtTagNavLinks.js81
-rw-r--r--src/content/dependencies/generateCoverArtwork.js2
-rw-r--r--src/content/dependencies/generateCoverArtworkArtTagDetails.js8
-rw-r--r--src/content/dependencies/image.js4
-rw-r--r--src/content/dependencies/linkArtTag.js2
-rw-r--r--src/content/dependencies/linkArtTagGallery.js8
-rw-r--r--src/content/dependencies/listTagsByName.js15
-rw-r--r--src/content/dependencies/listTagsByUses.js49
-rw-r--r--src/data/checks.js2
-rw-r--r--src/data/composite/things/art-tag/index.js2
-rw-r--r--src/data/composite/things/art-tag/withAllDescendantArtTags.js (renamed from src/data/composite/things/art-tag/withAllDescendantTags.js)20
-rw-r--r--src/data/things/art-tag.js34
-rw-r--r--src/page/art-tag.js (renamed from src/page/tag.js)4
-rw-r--r--src/page/index.js2
-rw-r--r--src/replacer.js5
-rw-r--r--src/strings-default.yaml45
-rw-r--r--src/urls-default.yaml5
19 files changed, 226 insertions, 135 deletions
diff --git a/src/common-util/wiki-data.js b/src/common-util/wiki-data.js
index f97ecd63..e012759d 100644
--- a/src/common-util/wiki-data.js
+++ b/src/common-util/wiki-data.js
@@ -342,7 +342,7 @@ export function filterItemsForCarousel(items) {
 
   return items
     .filter(item => item.hasCoverArt)
-    .filter(item => item.artTags.every(tag => !tag.isContentWarning))
+    .filter(item => item.artTags.every(artTag => !artTag.isContentWarning))
     .slice(0, maxCarouselLayoutItems + 1);
 }
 
diff --git a/src/content/dependencies/generateArtTagGalleryPage.js b/src/content/dependencies/generateArtTagGalleryPage.js
index dc42b1d3..a0b3a0e5 100644
--- a/src/content/dependencies/generateArtTagGalleryPage.js
+++ b/src/content/dependencies/generateArtTagGalleryPage.js
@@ -3,12 +3,13 @@ import {empty, stitchArrays, unique} from '#sugar';
 
 export default {
   contentDependencies: [
+    'generateArtTagNavLinks',
     'generateCoverGrid',
     'generatePageLayout',
     'generateQuickDescription',
     'image',
     'linkAlbum',
-    'linkArtTag',
+    'linkArtTagGallery',
     'linkTrack',
   ],
 
@@ -20,9 +21,9 @@ export default {
     };
   },
 
-  query(sprawl, tag) {
-    const directThings = tag.directlyTaggedInThings;
-    const indirectThings = tag.indirectlyTaggedInThings;
+  query(sprawl, artTag) {
+    const directThings = artTag.directlyTaggedInThings;
+    const indirectThings = artTag.indirectlyTaggedInThings;
     const allThings = unique([...directThings, ...indirectThings]);
 
     sortAlbumsTracksChronologically(allThings, {
@@ -33,54 +34,54 @@ export default {
     return {directThings, indirectThings, allThings};
   },
 
-  relations(relation, query, sprawl, tag) {
+  relations(relation, query, sprawl, artTag) {
     const relations = {};
 
     relations.layout =
       relation('generatePageLayout');
 
-    relations.artTagMainLink =
-      relation('linkArtTag', tag);
+    relations.navLinks =
+      relation('generateArtTagNavLinks', artTag);
 
     relations.quickDescription =
-      relation('generateQuickDescription', tag);
+      relation('generateQuickDescription', artTag);
 
-    if (!empty(tag.directAncestorTags)) {
+    if (!empty(artTag.directAncestorArtTags)) {
       relations.ancestorLinks =
-        tag.directAncestorTags.map(tag =>
-          relation('linkArtTag', tag));
+        artTag.directAncestorArtTags
+          .map(artTag => relation('linkArtTagGallery', artTag));
     }
 
-    if (!empty(tag.directDescendantTags)) {
+    if (!empty(artTag.directDescendantArtTags)) {
       relations.descendantLinks =
-        tag.directDescendantTags.map(tag =>
-          relation('linkArtTag', tag));
+        artTag.directDescendantArtTags
+          .map(artTag => relation('linkArtTagGallery', artTag));
     }
 
     relations.coverGrid =
       relation('generateCoverGrid');
 
     relations.links =
-      query.allThings.map(thing =>
-        (thing.album
-          ? relation('linkTrack', thing)
-          : relation('linkAlbum', thing)));
+      query.allThings
+        .map(thing =>
+          (thing.album
+            ? relation('linkTrack', thing)
+            : relation('linkAlbum', thing)));
 
     relations.images =
-      query.allThings.map(thing =>
-        relation('image', thing.artTags));
+      query.allThings
+        .map(thing => relation('image', thing.artTags));
 
     return relations;
   },
 
-  data(query, sprawl, tag) {
+  data(query, sprawl, artTag) {
     const data = {};
 
     data.enableListings = sprawl.enableListings;
 
-    data.name = tag.name;
-    data.color = tag.color;
-    data.hasLongerDescription = tag.descriptionShort !== tag.description;
+    data.name = artTag.name;
+    data.color = artTag.color;
 
     data.numArtworks = query.allThings.length;
 
@@ -109,7 +110,7 @@ export default {
   },
 
   generate: (data, relations, {html, language}) =>
-    language.encapsulate('tagPage', pageCapsule =>
+    language.encapsulate('artTagGalleryPage', pageCapsule =>
       relations.layout.slots({
         title:
           language.$(pageCapsule, 'title', {
@@ -175,21 +176,9 @@ export default {
         ],
 
         navLinkStyle: 'hierarchical',
-        navLinks: [
-          {auto: 'home'},
-
-          data.enableListings &&
-            {
-              path: ['localized.listingIndex'],
-              title: language.$('listingIndex.title'),
-            },
-
-          {
-            html:
-              language.$(pageCapsule, 'nav.tag', {
-                tag: relations.artTagMainLink,
-              }),
-          },
-        ],
+        navLinks:
+          html.resolve(
+            relations.navLinks
+              .slot('currentExtra', 'gallery')),
       })),
 };
diff --git a/src/content/dependencies/generateArtTagNavLinks.js b/src/content/dependencies/generateArtTagNavLinks.js
new file mode 100644
index 00000000..df6d7cf0
--- /dev/null
+++ b/src/content/dependencies/generateArtTagNavLinks.js
@@ -0,0 +1,81 @@
+export default {
+  contentDependencies: [
+    'generateInterpageDotSwitcher',
+    'linkArtTag',
+    'linkArtTagGallery',
+  ],
+
+  extraDependencies: ['html', 'language', 'wikiData'],
+
+  sprawl: ({wikiInfo}) =>
+    ({enableListings: wikiInfo.enableListings}),
+
+  relations: (relation, sprawl, tag) => ({
+    switcher:
+      relation('generateInterpageDotSwitcher'),
+
+    mainLink:
+      relation('linkArtTag', tag),
+
+    infoLink:
+      relation('linkArtTag', tag),
+
+    galleryLink:
+      relation('linkArtTagGallery', tag),
+  }),
+
+  data: (sprawl) =>
+    ({enableListings: sprawl.enableListings}),
+
+  slots: {
+    currentExtra: {
+      validate: v => v.is('gallery'),
+    },
+  },
+
+  generate(data, relations, slots, {language}) {
+    if (!data.enableListings) {
+      return [
+        {auto: 'home'},
+        {auto: 'current'},
+      ];
+    }
+
+    const infoLink =
+      relations.infoLink.slots({
+        attributes: {class: slots.currentExtra === null && 'current'},
+        content: language.$('misc.nav.info'),
+      });
+
+    const galleryLink =
+      relations.galleryLink.slots({
+        attributes: {class: slots.currentExtra === 'gallery' && 'current'},
+        content: language.$('misc.nav.gallery'),
+      });
+
+    return [
+      {auto: 'home'},
+
+      data.enableListings &&
+        {
+          path: ['localized.listingIndex'],
+          title: language.$('listingIndex.title'),
+        },
+
+      {
+        html:
+          language.$('artTagPage.nav.tag', {
+            tag: relations.mainLink,
+          }),
+
+        accent:
+          relations.switcher.slots({
+            links: [
+              infoLink,
+              galleryLink,
+            ],
+          }),
+      },
+    ].filter(Boolean);
+  },
+};
diff --git a/src/content/dependencies/generateCoverArtwork.js b/src/content/dependencies/generateCoverArtwork.js
index 50ca89ae..06972d6b 100644
--- a/src/content/dependencies/generateCoverArtwork.js
+++ b/src/content/dependencies/generateCoverArtwork.js
@@ -1,5 +1,5 @@
 export default {
-  contentDependencies: ['image', 'linkArtistGallery'],
+  contentDependencies: ['image'],
   extraDependencies: ['html'],
 
   slots: {
diff --git a/src/content/dependencies/generateCoverArtworkArtTagDetails.js b/src/content/dependencies/generateCoverArtworkArtTagDetails.js
index 81ead8a9..c9475f1f 100644
--- a/src/content/dependencies/generateCoverArtworkArtTagDetails.js
+++ b/src/content/dependencies/generateCoverArtworkArtTagDetails.js
@@ -11,7 +11,7 @@ export default {
   }),
 
   relations: (relation, query, _artTags) => ({
-    tagLinks:
+    artTagLinks:
       query.linkableArtTags
         .map(tag => relation('linkArtTag', tag)),
   }),
@@ -42,9 +42,9 @@ export default {
       {class: 'art-tag-details'},
 
       stitchArrays({
-        tagLink: relations.tagLinks,
+        artTagLink: relations.artTagLinks,
         preferShortName: data.preferShortName,
-      }).map(({tagLink, preferShortName}) =>
+      }).map(({artTagLink, preferShortName}) =>
           html.tag('li',
-            tagLink.slot('preferShortName', preferShortName)))),
+            artTagLink.slot('preferShortName', preferShortName)))),
 };
diff --git a/src/content/dependencies/image.js b/src/content/dependencies/image.js
index 6cbcb7dd..8a446c39 100644
--- a/src/content/dependencies/image.js
+++ b/src/content/dependencies/image.js
@@ -27,8 +27,8 @@ export default {
     if (artTags) {
       data.contentWarnings =
         artTags
-          .filter(tag => tag.isContentWarning)
-          .map(tag => tag.name);
+          .filter(artTag => artTag.isContentWarning)
+          .map(artTag => artTag.name);
     } else {
       data.contentWarnings = null;
     }
diff --git a/src/content/dependencies/linkArtTag.js b/src/content/dependencies/linkArtTag.js
index 7ddb7786..409cb3c0 100644
--- a/src/content/dependencies/linkArtTag.js
+++ b/src/content/dependencies/linkArtTag.js
@@ -2,7 +2,7 @@ export default {
   contentDependencies: ['linkThing'],
 
   relations: (relation, artTag) =>
-    ({link: relation('linkThing', 'localized.tag', artTag)}),
+    ({link: relation('linkThing', 'localized.artTagInfo', artTag)}),
 
   generate: (relations) => relations.link,
 };
diff --git a/src/content/dependencies/linkArtTagGallery.js b/src/content/dependencies/linkArtTagGallery.js
new file mode 100644
index 00000000..a92b69c1
--- /dev/null
+++ b/src/content/dependencies/linkArtTagGallery.js
@@ -0,0 +1,8 @@
+export default {
+  contentDependencies: ['linkThing'],
+
+  relations: (relation, artTag) =>
+    ({link: relation('linkThing', 'localized.artTagGallery', artTag)}),
+
+  generate: (relations) => relations.link,
+};
diff --git a/src/content/dependencies/listTagsByName.js b/src/content/dependencies/listTagsByName.js
index d7022a55..31856478 100644
--- a/src/content/dependencies/listTagsByName.js
+++ b/src/content/dependencies/listTagsByName.js
@@ -1,8 +1,8 @@
 import {sortAlphabetically} from '#sort';
-import {stitchArrays} from '#sugar';
+import {stitchArrays, unique} from '#sugar';
 
 export default {
-  contentDependencies: ['generateListingPage', 'linkArtTag'],
+  contentDependencies: ['generateListingPage', 'linkArtTagGallery'],
   extraDependencies: ['language', 'wikiData'],
 
   sprawl({artTagData}) {
@@ -16,7 +16,7 @@ export default {
       artTags:
         sortAlphabetically(
           artTagData
-            .filter(tag => !tag.isContentWarning)),
+            .filter(artTag => !artTag.isContentWarning)),
     };
   },
 
@@ -26,15 +26,18 @@ export default {
 
       artTagLinks:
         query.artTags
-          .map(tag => relation('linkArtTag', tag)),
+          .map(artTag => relation('linkArtTagGallery', artTag)),
     };
   },
 
   data(query) {
     return {
       counts:
-        query.artTags
-          .map(tag => tag.taggedInThings.length),
+        query.artTags.map(artTag =>
+          unique([
+            ...artTag.indirectlyTaggedInThings,
+            ...artTag.directlyTaggedInThings,
+          ]).length),
     };
   },
 
diff --git a/src/content/dependencies/listTagsByUses.js b/src/content/dependencies/listTagsByUses.js
index 00c700a5..fcd324f7 100644
--- a/src/content/dependencies/listTagsByUses.js
+++ b/src/content/dependencies/listTagsByUses.js
@@ -1,23 +1,25 @@
 import {sortAlphabetically, sortByCount} from '#sort';
-import {filterByCount, stitchArrays} from '#sugar';
+import {filterByCount, stitchArrays, unique} from '#sugar';
 
 export default {
-  contentDependencies: ['generateListingPage', 'linkArtTag'],
+  contentDependencies: ['generateListingPage', 'linkArtTagGallery'],
   extraDependencies: ['language', 'wikiData'],
 
-  sprawl({artTagData}) {
-    return {artTagData};
-  },
+  sprawl: ({artTagData}) =>
+    ({artTagData}),
 
   query({artTagData}, spec) {
     const artTags =
       sortAlphabetically(
         artTagData
-          .filter(tag => !tag.isContentWarning));
+          .filter(artTag => !artTag.isContentWarning));
 
     const counts =
-      artTags
-        .map(tag => tag.taggedInThings.length);
+      artTags.map(artTag =>
+        unique([
+          ...artTag.directlyTaggedInThings,
+          ...artTag.indirectlyTaggedInThings,
+        ]).length);
 
     filterByCount(artTags, counts);
     sortByCount(artTags, counts, {greatestFirst: true});
@@ -25,26 +27,20 @@ export default {
     return {spec, artTags, counts};
   },
 
-  relations(relation, query) {
-    return {
-      page: relation('generateListingPage', query.spec),
+  relations: (relation, query) => ({
+    page:
+      relation('generateListingPage', query.spec),
 
-      artTagLinks:
-        query.artTags
-          .map(tag => relation('linkArtTag', tag)),
-    };
-  },
+    artTagLinks:
+      query.artTags
+        .map(artTag => relation('linkArtTagGallery', artTag)),
+  }),
 
-  data(query) {
-    return {
-      counts:
-        query.artTags
-          .map(tag => tag.taggedInThings.length),
-    };
-  },
+  data: (query) =>
+    ({counts: query.counts}),
 
-  generate(data, relations, {language}) {
-    return relations.page.slots({
+  generate: (data, relations, {language}) =>
+    relations.page.slots({
       type: 'rows',
       rows:
         stitchArrays({
@@ -54,6 +50,5 @@ export default {
             tag: link,
             timesUsed: language.countTimesUsed(count, {unit: true}),
           })),
-    });
-  },
+    }),
 };
diff --git a/src/data/checks.js b/src/data/checks.js
index 8698e877..e46f97ef 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -189,7 +189,7 @@ export function filterReferenceErrors(wikiData, {
     }],
 
     ['artTagData', {
-      directDescendantTags: 'artTag',
+      directDescendantArtTags: 'artTag',
     }],
 
     ['flashData', {
diff --git a/src/data/composite/things/art-tag/index.js b/src/data/composite/things/art-tag/index.js
index aedc3a0c..0c365ce2 100644
--- a/src/data/composite/things/art-tag/index.js
+++ b/src/data/composite/things/art-tag/index.js
@@ -1 +1 @@
-export {default as withAllDescendantTags} from './withAllDescendantTags.js';
+export {default as withAllDescendantArtTags} from './withAllDescendantArtTags.js';
diff --git a/src/data/composite/things/art-tag/withAllDescendantTags.js b/src/data/composite/things/art-tag/withAllDescendantArtTags.js
index 945e9f37..795f96cd 100644
--- a/src/data/composite/things/art-tag/withAllDescendantTags.js
+++ b/src/data/composite/things/art-tag/withAllDescendantArtTags.js
@@ -1,4 +1,4 @@
-// Gets all the tags which descend from this one - that means its own direct
+// Gets all the art tags which descend from this one - that means its own direct
 // descendants, but also all the direct and indirect desceands of each of those!
 // The results aren't specially sorted, but they won't contain any duplicates
 // (for example if two descendant tags both route deeper to end up including
@@ -12,31 +12,31 @@ import {withResolvedReferenceList} from '#composite/wiki-data';
 import {soupyFind} from '#composite/wiki-properties';
 
 export default templateCompositeFrom({
-  annotation: `withAllDescendantTags`,
+  annotation: `withAllDescendantArtTags`,
 
-  outputs: ['#allDescendantTags'],
+  outputs: ['#allDescendantArtTags'],
 
   steps: () => [
     raiseOutputWithoutDependency({
-      dependency: 'directDescendantTags',
+      dependency: 'directDescendantArtTags',
       mode: input.value('empty'),
-      output: input.value({'#allDescendantTags': []})
+      output: input.value({'#allDescendantArtTags': []})
     }),
 
     withResolvedReferenceList({
-      list: 'directDescendantTags',
+      list: 'directDescendantArtTags',
       find: soupyFind.input('artTag'),
     }),
 
     {
       dependencies: ['#resolvedReferenceList'],
       compute: (continuation, {
-        ['#resolvedReferenceList']: directDescendantTags,
+        ['#resolvedReferenceList']: directDescendantArtTags,
       }) => continuation({
-        ['#allDescendantTags']:
+        ['#allDescendantArtTags']:
           unique([
-            ...directDescendantTags,
-            ...directDescendantTags.flatMap(tag => tag.allDescendantTags),
+            ...directDescendantArtTags,
+            ...directDescendantArtTags.flatMap(artTag => artTag.allDescendantArtTags),
           ]),
       }),
     },
diff --git a/src/data/things/art-tag.js b/src/data/things/art-tag.js
index dd3dddf2..60a4340d 100644
--- a/src/data/things/art-tag.js
+++ b/src/data/things/art-tag.js
@@ -24,7 +24,7 @@ import {
   wikiData,
 } from '#composite/wiki-properties';
 
-import {withAllDescendantTags} from '#composite/things/art-tag';
+import {withAllDescendantArtTags} from '#composite/things/art-tag';
 
 export class ArtTag extends Thing {
   static [Thing.referenceType] = 'tag';
@@ -53,7 +53,7 @@ export class ArtTag extends Thing {
 
     description: simpleString(),
 
-    directDescendantTags: referenceList({
+    directDescendantArtTags: referenceList({
       class: input.value(ArtTag),
       find: soupyFind.input('artTag'),
     }),
@@ -94,21 +94,23 @@ export class ArtTag extends Thing {
     },
 
     indirectlyTaggedInThings: [
-      withAllDescendantTags(),
+      withAllDescendantArtTags(),
 
       {
-        dependencies: ['#allDescendantTags'],
-        compute: ({'#allDescendantTags': allDescendantTags}) =>
-          unique(allDescendantTags.flatMap(tag => tag.directlyTaggedInThings)),
+        dependencies: ['#allDescendantArtTags'],
+        compute: ({'#allDescendantArtTags': allDescendantArtTags}) =>
+          unique(
+            allDescendantArtTags
+              .flatMap(artTag => artTag.directlyTaggedInThings)),
       },
     ],
 
-    allDescendantTags: [
-      withAllDescendantTags(),
-      exposeDependency({dependency: '#allDescendantTags'}),
+    allDescendantArtTags: [
+      withAllDescendantArtTags(),
+      exposeDependency({dependency: '#allDescendantArtTags'}),
     ],
 
-    directAncestorTags: reverseReferenceList({
+    directAncestorArtTags: reverseReferenceList({
       reverse: soupyReverse.input('artTagsWhichDirectlyAncestor'),
     }),
   });
@@ -118,10 +120,10 @@ export class ArtTag extends Thing {
       referenceTypes: ['tag'],
       bindTo: 'artTagData',
 
-      getMatchableNames: tag =>
-        (tag.isContentWarning
-          ? [`cw: ${tag.name}`]
-          : [tag.name]),
+      getMatchableNames: artTag =>
+        (artTag.isContentWarning
+          ? [`cw: ${artTag.name}`]
+          : [artTag.name]),
     },
   };
 
@@ -130,7 +132,7 @@ export class ArtTag extends Thing {
       bindTo: 'artTagData',
 
       referencing: artTag => [artTag],
-      referenced: artTag => artTag.directDescendantTags,
+      referenced: artTag => artTag.directDescendantArtTags,
     },
   };
 
@@ -145,7 +147,7 @@ export class ArtTag extends Thing {
       'Color': {property: 'color'},
       'Is CW': {property: 'isContentWarning'},
 
-      'Direct Descendant Tags': {property: 'directDescendantTags'},
+      'Direct Descendant Tags': {property: 'directDescendantArtTags'},
     },
   };
 
diff --git a/src/page/tag.js b/src/page/art-tag.js
index 8942aea9..32e869e1 100644
--- a/src/page/tag.js
+++ b/src/page/art-tag.js
@@ -1,6 +1,6 @@
 // Art tag page specification.
 
-export const description = `per-artwork-tag gallery pages`;
+export const description = `per-art-tag gallery pages`;
 
 export function condition({wikiData}) {
   return wikiData.wikiInfo.enableArtTagUI;
@@ -14,7 +14,7 @@ export function pathsForTarget(tag) {
   return [
     {
       type: 'page',
-      path: ['tag', tag.directory],
+      path: ['artTagGallery', tag.directory],
 
       contentFunction: {
         name: 'generateArtTagGalleryPage',
diff --git a/src/page/index.js b/src/page/index.js
index 21d93c8f..ae480136 100644
--- a/src/page/index.js
+++ b/src/page/index.js
@@ -1,6 +1,7 @@
 export * as album from './album.js';
 export * as artist from './artist.js';
 export * as artistAlias from './artist-alias.js';
+export * as artTag from './art-tag.js';
 export * as flash from './flash.js';
 export * as flashAct from './flash-act.js';
 export * as group from './group.js';
@@ -8,5 +9,4 @@ export * as homepage from './homepage.js';
 export * as listing from './listing.js';
 export * as news from './news.js';
 export * as static from './static.js';
-export * as tag from './tag.js';
 export * as track from './track.js';
diff --git a/src/replacer.js b/src/replacer.js
index 5378db1d..a16d1ab8 100644
--- a/src/replacer.js
+++ b/src/replacer.js
@@ -152,6 +152,11 @@ export const replacerSpec = {
 
   'tag': {
     find: 'artTag',
+    link: 'linkArtTagGallery',
+  },
+
+  'tag-info': {
+    find: 'artTag',
     link: 'linkArtTag',
   },
 
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index cfea25ad..44877e6f 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -1265,6 +1265,32 @@ artistGalleryPage:
     Contributed to {COVER_ARTS}.
 
 #
+# artTagPage:
+#   The art tag info page displays general information about a tag,
+#   including details about how it's networked with other tags in
+#   particular.
+#
+artTagPage:
+  nav:
+    tag: "Tag: {TAG}"
+
+#
+# artTagGalleryPage:
+#   The tag gallery page displays all the artworks that a tag has
+#   been featured in, in one neat grid, with each artwork displaying
+#   its illustrators, as well as a short info line that indicates
+#   how many artworks the tag's part of.
+#
+artTagGalleryPage:
+  title: "{TAG}"
+
+  infoLine: >-
+    Appears in {COVER_ARTS}.
+
+  descendsFrom: "Descends from {TAGS}."
+  descendants: "Direct descendants: {TAGS}."
+
+#
 # commentaryIndex:
 #   The commentary index page shows a summary of all the commentary
 #   across the entire wiki, with a list linking to each album's
@@ -2102,25 +2128,6 @@ referencingArtworksPage:
     Referenced by {ARTWORKS}.
 
 #
-# tagPage:
-#   The tag gallery page displays all the artworks that a tag has
-#   been featured in, in one neat grid, with each artwork displaying
-#   its illustrators, as well as a short info line that indicates
-#   how many artworks the tag's part of.
-#
-tagPage:
-  title: "{TAG}"
-
-  nav:
-    tag: "Tag: {TAG}"
-
-  infoLine: >-
-    Appears in {COVER_ARTS}.
-
-  descendsFrom: "Descends from {TAGS.}"
-  descendants: "Direct descendants: {TAGS}."
-
-#
 # trackPage:
 #
 #   The track info page is pretty much the most discrete and common
diff --git a/src/urls-default.yaml b/src/urls-default.yaml
index dce871f6..c3bf89eb 100644
--- a/src/urls-default.yaml
+++ b/src/urls-default.yaml
@@ -36,6 +36,9 @@ localized:
     albumReferencedArtworks: 'album/<>/referenced-art/'
     albumReferencingArtworks: 'album/<>/referencing-art/'
 
+    artTagInfo: 'tag/<>/info/'
+    artTagGallery: 'tag/<>/'
+
     artist: 'artist/<>/'
     artistGallery: 'artist/<>/gallery/'
 
@@ -60,8 +63,6 @@ localized:
 
     staticPage: '<>/'
 
-    tag: 'tag/<>/'
-
     track: 'track/<>/'
     trackReferencedArtworks: 'track/<>/referenced-art/'
     trackReferencingArtworks: 'track/<>/referencing-art/'