« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/tap-snapshots/test/snapshot
diff options
context:
space:
mode:
Diffstat (limited to 'tap-snapshots/test/snapshot')
-rw-r--r--tap-snapshots/test/snapshot/generateAdditionalFilesList.js.test.cjs29
-rw-r--r--tap-snapshots/test/snapshot/generateAdditionalFilesShortcut.js.test.cjs14
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumAdditionalFilesList.js.test.cjs56
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumCoverArtwork.js.test.cjs4
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumReleaseInfo.js.test.cjs6
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumSecondaryNav.js.test.cjs12
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumSidebarGroupBox.js.test.cjs26
-rw-r--r--tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs28
-rw-r--r--tap-snapshots/test/snapshot/generateTrackCoverArtwork.js.test.cjs4
-rw-r--r--tap-snapshots/test/snapshot/generateTrackReleaseInfo.js.test.cjs2
-rw-r--r--tap-snapshots/test/snapshot/image.js.test.cjs12
-rw-r--r--tap-snapshots/test/snapshot/linkContribution.js.test.cjs42
-rw-r--r--tap-snapshots/test/snapshot/linkExternal.js.test.cjs329
13 files changed, 320 insertions, 244 deletions
diff --git a/tap-snapshots/test/snapshot/generateAdditionalFilesList.js.test.cjs b/tap-snapshots/test/snapshot/generateAdditionalFilesList.js.test.cjs
deleted file mode 100644
index 42a409a..0000000
--- a/tap-snapshots/test/snapshot/generateAdditionalFilesList.js.test.cjs
+++ /dev/null
@@ -1,29 +0,0 @@
-/* IMPORTANT
- * This snapshot file is auto-generated, but designed for humans.
- * It should be checked into source control and tracked carefully.
- * Re-generate by setting TAP_SNAPSHOT=1 and running tests.
- * Make sure to inspect the output below.  Do not ignore changes!
- */
-'use strict'
-exports[`test/snapshot/generateAdditionalFilesList.js > TAP > generateAdditionalFilesList (snapshot) > basic behavior 1`] = `
-<dl>
-    <dt>SBURB Wallpaper</dt>
-    <dd>
-        <ul>
-            <li>link to 1280x1024 (2.5 kB)</li>
-            <li>link to 1440x900</li>
-        </ul>
-    </dd>
-    <dt>Alternate Covers: This is just an example description.</dt>
-    <dd>
-        <ul>
-            <li>link to alt1 (1.2 MB)</li>
-            <li>link to alt3 (1.2 MB)</li>
-        </ul>
-    </dd>
-</dl>
-`
-
-exports[`test/snapshot/generateAdditionalFilesList.js > TAP > generateAdditionalFilesList (snapshot) > no additional files 1`] = `
-
-`
diff --git a/tap-snapshots/test/snapshot/generateAdditionalFilesShortcut.js.test.cjs b/tap-snapshots/test/snapshot/generateAdditionalFilesShortcut.js.test.cjs
deleted file mode 100644
index e166140..0000000
--- a/tap-snapshots/test/snapshot/generateAdditionalFilesShortcut.js.test.cjs
+++ /dev/null
@@ -1,14 +0,0 @@
-/* IMPORTANT
- * This snapshot file is auto-generated, but designed for humans.
- * It should be checked into source control and tracked carefully.
- * Re-generate by setting TAP_SNAPSHOT=1 and running tests.
- * Make sure to inspect the output below.  Do not ignore changes!
- */
-'use strict'
-exports[`test/snapshot/generateAdditionalFilesShortcut.js > TAP > generateAdditionalFilesShortcut (snapshot) > basic behavior 1`] = `
-View <a href="#additional-files">additional files</a>: SBURB Wallpaper, Alternate Covers
-`
-
-exports[`test/snapshot/generateAdditionalFilesShortcut.js > TAP > generateAdditionalFilesShortcut (snapshot) > no additional files 1`] = `
-
-`
diff --git a/tap-snapshots/test/snapshot/generateAlbumAdditionalFilesList.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumAdditionalFilesList.js.test.cjs
new file mode 100644
index 0000000..d8f1e97
--- /dev/null
+++ b/tap-snapshots/test/snapshot/generateAlbumAdditionalFilesList.js.test.cjs
@@ -0,0 +1,56 @@
+/* IMPORTANT
+ * This snapshot file is auto-generated, but designed for humans.
+ * It should be checked into source control and tracked carefully.
+ * Re-generate by setting TAP_SNAPSHOT=1 and running tests.
+ * Make sure to inspect the output below.  Do not ignore changes!
+ */
+'use strict'
+exports[`test/snapshot/generateAlbumAdditionalFilesList.js > TAP > generateAlbumAdditionalFilesList (snapshot) > basic behavior 1`] = `
+<ul class="additional-files-list">
+    <li>
+        <details>
+            <summary><span><span class="group-name">SBURB Wallpaper</span></span></summary>
+            <ul>
+                <li><a href="media/album-additional/exciting-album/sburbwp_1280x1024.jpg">sburbwp_1280x1024.jpg</a></li>
+                <li><a href="media/album-additional/exciting-album/sburbwp_1440x900.jpg">sburbwp_1440x900.jpg</a></li>
+                <li><a href="media/album-additional/exciting-album/sburbwp_1920x1080.jpg">sburbwp_1920x1080.jpg</a></li>
+            </ul>
+        </details>
+    </li>
+    <li>
+        <details>
+            <summary><span><span class="group-name">Fake Section</span></span></summary>
+            <ul>
+                <li class="entry-description">No sizes for these files</li>
+                <li><a href="media/album-additional/exciting-album/oops.mp3">oops.mp3</a></li>
+                <li><a href="media/album-additional/exciting-album/Internet%20Explorer.gif">Internet Explorer.gif</a></li>
+                <li><a href="media/album-additional/exciting-album/daisy.mp3">daisy.mp3</a></li>
+            </ul>
+        </details>
+    </li>
+    <li>
+        <details open>
+            <summary><span><span class="group-name">Empty Section</span></span></summary>
+            <ul>
+                <li class="entry-description">These files haven&#39;t been made available.</li>
+                <li>There are no files available or listed for this entry.</li>
+            </ul>
+        </details>
+    </li>
+    <li>
+        <details>
+            <summary><span><span class="group-name">Alternate Covers</span></span></summary>
+            <ul>
+                <li class="entry-description">This is just an example description.</li>
+                <li><a href="media/album-additional/exciting-album/Homestuck_Vol4_alt1.jpg">Homestuck_Vol4_alt1.jpg</a></li>
+                <li><a href="media/album-additional/exciting-album/Homestuck_Vol4_alt2.jpg">Homestuck_Vol4_alt2.jpg</a></li>
+                <li><a href="media/album-additional/exciting-album/Homestuck_Vol4_alt3.jpg">Homestuck_Vol4_alt3.jpg</a></li>
+            </ul>
+        </details>
+    </li>
+</ul>
+`
+
+exports[`test/snapshot/generateAlbumAdditionalFilesList.js > TAP > generateAlbumAdditionalFilesList (snapshot) > no additional files 1`] = `
+<ul class="additional-files-list"></ul>
+`
diff --git a/tap-snapshots/test/snapshot/generateAlbumCoverArtwork.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumCoverArtwork.js.test.cjs
index 71d9c55..47df3e2 100644
--- a/tap-snapshots/test/snapshot/generateAlbumCoverArtwork.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateAlbumCoverArtwork.js.test.cjs
@@ -15,7 +15,7 @@ exports[`test/snapshot/generateAlbumCoverArtwork.js > TAP > generateAlbumCoverAr
      { name: 'creepy crawlies', isContentWarning: true }
    ]
  ]
- slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#f28514', thumb: 'medium', reveal: true, link: true, square: true }]
+ slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#f28514', thumb: 'medium', reveal: true, link: true, dimensions: [ 400, 300 ] }]
 <ul class="image-details">
     <li><a href="tag/damara/">Damara</a></li>
     <li><a href="tag/cronus/">Cronus</a></li>
@@ -33,5 +33,5 @@ exports[`test/snapshot/generateAlbumCoverArtwork.js > TAP > generateAlbumCoverAr
      { name: 'creepy crawlies', isContentWarning: true }
    ]
  ]
- slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#f28514', thumb: 'small', reveal: false, link: false, square: true }]
+ slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#f28514', thumb: 'small', reveal: false, link: false, dimensions: [ 400, 300 ] }]
 `
diff --git a/tap-snapshots/test/snapshot/generateAlbumReleaseInfo.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumReleaseInfo.js.test.cjs
index f9fc025..a0f17e5 100644
--- a/tap-snapshots/test/snapshot/generateAlbumReleaseInfo.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateAlbumReleaseInfo.js.test.cjs
@@ -10,7 +10,7 @@ exports[`test/snapshot/generateAlbumReleaseInfo.js > TAP > generateAlbumReleaseI
     By <span class="contribution nowrap"><a href="artist/toby-fox/">Toby Fox</a> (music probably)</span> and <span class="contribution nowrap"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/tensei/">Tensei</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://tenseimusic.bandcamp.com/">
                         <svg><use href="static/icons.svg#icon-bandcamp"></use></svg>
                         <span class="icon-text">tenseimusic</span>
-                    </a></span></span></span> (hot jams)</span>.
+                    </a><span class="icon-platform">Bandcamp</span></span></span></span> (hot jams)</span>.
     <br>
     Cover art by <a href="artist/hb/">Hanni Brosh</a>.
     <br>
@@ -24,7 +24,7 @@ exports[`test/snapshot/generateAlbumReleaseInfo.js > TAP > generateAlbumReleaseI
     <br>
     Duration: ~10:25.
 </p>
-<p>Listen on <a href="https://homestuck.bandcamp.com/album/alterniabound-with-alternia" class="nowrap">Bandcamp</a>, <a href="https://www.youtube.com/playlist?list=PLnVpmehyaOFZWO9QOZmD6A3TIK0wZ6xE2" class="nowrap">YouTube (playlist)</a>, or <a href="https://www.youtube.com/watch?v=HO5V2uogkYc" class="nowrap">YouTube (full album)</a>.</p>
+<p>Listen on <a class="external-link" href="https://homestuck.bandcamp.com/album/alterniabound-with-alternia">Bandcamp</a>, <a class="external-link" href="https://www.youtube.com/playlist?list=PLnVpmehyaOFZWO9QOZmD6A3TIK0wZ6xE2">YouTube (playlist)</a>, or <a class="external-link" href="https://www.youtube.com/watch?v=HO5V2uogkYc">YouTube (full album)</a>.</p>
 `
 
 exports[`test/snapshot/generateAlbumReleaseInfo.js > TAP > generateAlbumReleaseInfo (snapshot) > equal cover art date 1`] = `
@@ -36,5 +36,5 @@ exports[`test/snapshot/generateAlbumReleaseInfo.js > TAP > generateAlbumReleaseI
 `
 
 exports[`test/snapshot/generateAlbumReleaseInfo.js > TAP > generateAlbumReleaseInfo (snapshot) > URLs only 1`] = `
-<p>Listen on <a href="https://homestuck.bandcamp.com/foo" class="nowrap">Bandcamp</a> or <a href="https://soundcloud.com/bar" class="nowrap">SoundCloud</a>.</p>
+<p>Listen on <a class="external-link" href="https://homestuck.bandcamp.com/foo">Bandcamp</a> or <a class="external-link" href="https://soundcloud.com/bar">SoundCloud</a>.</p>
 `
diff --git a/tap-snapshots/test/snapshot/generateAlbumSecondaryNav.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumSecondaryNav.js.test.cjs
index f2b51cb..de35048 100644
--- a/tap-snapshots/test/snapshot/generateAlbumSecondaryNav.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateAlbumSecondaryNav.js.test.cjs
@@ -7,11 +7,11 @@
 'use strict'
 exports[`test/snapshot/generateAlbumSecondaryNav.js > TAP > generateAlbumSecondaryNav (snapshot) > basic behavior, mode: album 1`] = `
 <nav id="secondary-nav" class="nav-links-groups">
-    <span style="--primary-color: #abcdef">
+    <span class="nav-link" style="--primary-color: #abcdef">
         <a href="group/vcg/">VCG</a>
         (<a title="First" href="album/first/">Previous</a>, <a title="Last" href="album/last/">Next</a>)
     </span>
-    <span style="--primary-color: #123456">
+    <span class="nav-link" style="--primary-color: #123456">
         <a href="group/bepis/">Bepis</a>
         (<a title="Second" href="album/second/">Next</a>)
     </span>
@@ -20,14 +20,14 @@ exports[`test/snapshot/generateAlbumSecondaryNav.js > TAP > generateAlbumSeconda
 
 exports[`test/snapshot/generateAlbumSecondaryNav.js > TAP > generateAlbumSecondaryNav (snapshot) > basic behavior, mode: track 1`] = `
 <nav id="secondary-nav" class="nav-links-groups">
-    <a style="--primary-color: #abcdef" href="group/vcg/">VCG</a>
-    <a style="--primary-color: #123456" href="group/bepis/">Bepis</a>
+    <span class="nav-link" style="--primary-color: #abcdef"><a href="group/vcg/">VCG</a></span>
+    <span class="nav-link" style="--primary-color: #123456"><a href="group/bepis/">Bepis</a></span>
 </nav>
 `
 
 exports[`test/snapshot/generateAlbumSecondaryNav.js > TAP > generateAlbumSecondaryNav (snapshot) > dateless album in mixed group 1`] = `
 <nav id="secondary-nav" class="nav-links-groups">
-    <a style="--primary-color: #abcdef" href="group/vcg/">VCG</a>
-    <a style="--primary-color: #123456" href="group/bepis/">Bepis</a>
+    <span class="nav-link" style="--primary-color: #abcdef"><a href="group/vcg/">VCG</a></span>
+    <span class="nav-link" style="--primary-color: #123456"><a href="group/bepis/">Bepis</a></span>
 </nav>
 `
diff --git a/tap-snapshots/test/snapshot/generateAlbumSidebarGroupBox.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumSidebarGroupBox.js.test.cjs
index cd820cd..6502f71 100644
--- a/tap-snapshots/test/snapshot/generateAlbumSidebarGroupBox.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateAlbumSidebarGroupBox.js.test.cjs
@@ -6,20 +6,26 @@
  */
 'use strict'
 exports[`test/snapshot/generateAlbumSidebarGroupBox.js > TAP > generateAlbumSidebarGroupBox (snapshot) > basic behavior, mode: album 1`] = `
-<h1><a href="group/vcg/">VCG</a></h1>
-Very cool group.
-<p>Visit on <a href="https://vcg.bandcamp.com/" class="nowrap">Bandcamp</a> or <a href="https://youtube.com/@vcg" class="nowrap">YouTube</a>.</p>
-<p class="group-chronology-link">Next: <a href="album/last/">Last</a></p>
-<p class="group-chronology-link">Previous: <a href="album/first/">First</a></p>
+<div class="sidebar collapsible individual-group-sidebar-box">
+    <h1><a href="group/vcg/">VCG</a></h1>
+    Very cool group.
+    <p>Visit on <a class="external-link" href="https://vcg.bandcamp.com/">Bandcamp</a> or <a class="external-link" href="https://youtube.com/@vcg">YouTube</a>.</p>
+    <p class="group-chronology-link">Next: <a href="album/last/">Last</a></p>
+    <p class="group-chronology-link">Previous: <a href="album/first/">First</a></p>
+</div>
 `
 
 exports[`test/snapshot/generateAlbumSidebarGroupBox.js > TAP > generateAlbumSidebarGroupBox (snapshot) > basic behavior, mode: track 1`] = `
-<h1><a href="group/vcg/">VCG</a></h1>
-<p>Visit on <a href="https://vcg.bandcamp.com/" class="nowrap">Bandcamp</a> or <a href="https://youtube.com/@vcg" class="nowrap">YouTube</a>.</p>
+<div class="sidebar collapsible individual-group-sidebar-box">
+    <h1><a href="group/vcg/">VCG</a></h1>
+    <p>Visit on <a class="external-link" href="https://vcg.bandcamp.com/">Bandcamp</a> or <a class="external-link" href="https://youtube.com/@vcg">YouTube</a>.</p>
+</div>
 `
 
 exports[`test/snapshot/generateAlbumSidebarGroupBox.js > TAP > generateAlbumSidebarGroupBox (snapshot) > dateless album in mixed group 1`] = `
-<h1><a href="group/vcg/">VCG</a></h1>
-Very cool group.
-<p>Visit on <a href="https://vcg.bandcamp.com/" class="nowrap">Bandcamp</a> or <a href="https://youtube.com/@vcg" class="nowrap">YouTube</a>.</p>
+<div class="sidebar collapsible individual-group-sidebar-box">
+    <h1><a href="group/vcg/">VCG</a></h1>
+    Very cool group.
+    <p>Visit on <a class="external-link" href="https://vcg.bandcamp.com/">Bandcamp</a> or <a class="external-link" href="https://youtube.com/@vcg">YouTube</a>.</p>
+</div>
 `
diff --git a/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs
index 3b6676f..b338f29 100644
--- a/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateAlbumTrackList.js.test.cjs
@@ -10,7 +10,7 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
     <li>(0:20) <a href="track/t1/">Track 1</a></li>
     <li>[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t2/">Track 2</a></li>
     <li>(0:40) <a href="track/t3/">Track 3</a></li>
-    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 `
 
@@ -25,7 +25,7 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
         </ul>
     </dd>
     <dt class="content-heading" tabindex="0"><span class="content-heading-main-title">Second section:</span></dt>
-    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li></ul></dd>
+    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li></ul></dd>
 </dl>
 `
 
@@ -40,17 +40,17 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
         </ul>
     </dd>
     <dt class="content-heading" tabindex="0"><span class="content-heading-main-title">Second section:</span></dt>
-    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li></ul></dd>
+    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li></ul></dd>
 </dl>
 <ul>
     <li>(0:20) <a href="track/t1/">Track 1</a></li>
     <li>[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t2/">Track 2</a></li>
     <li>(0:40) <a href="track/t3/">Track 3</a></li>
-    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 <ul>
     <li><a href="track/t2/">Track 2</a></li>
-    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 `
 
@@ -65,17 +65,17 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
         </ul>
     </dd>
     <dt class="content-heading" tabindex="0"><span class="content-heading-main-title">Second section:</span></dt>
-    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li></ul></dd>
+    <dd><ul><li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li></ul></dd>
 </dl>
 <ul>
     <li>(0:20) <a href="track/t1/">Track 1</a></li>
     <li>[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t2/">Track 2</a></li>
     <li>(0:40) <a href="track/t3/">Track 3</a></li>
-    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 <ul>
     <li>[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t2/">Track 2</a></li>
-    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 `
 
@@ -90,17 +90,17 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
         </ul>
     </dd>
     <dt class="content-heading" tabindex="0"><span class="content-heading-main-title">Second section:</span></dt>
-    <dd><ul><li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li></ul></dd>
+    <dd><ul><li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li></ul></dd>
 </dl>
 <ul>
     <li>(0:20) <a href="track/t1/">Track 1</a></li>
     <li>[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t2/">Track 2</a></li>
     <li>(0:40) <a href="track/t3/">Track 3</a></li>
-    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83">[mocked: generateAlbumTrackListMissingDuration - slots: {}] <a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 <ul>
     <li><a href="track/t2/">Track 2</a></li>
-    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 `
 
@@ -115,16 +115,16 @@ exports[`test/snapshot/generateAlbumTrackList.js > TAP > generateAlbumTrackList
         </ul>
     </dd>
     <dt class="content-heading" tabindex="0"><span class="content-heading-main-title">Second section:</span></dt>
-    <dd><ul><li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li></ul></dd>
+    <dd><ul><li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li></ul></dd>
 </dl>
 <ul>
     <li>(0:20) <a href="track/t1/">Track 1</a></li>
     <li><a href="track/t2/">Track 2</a></li>
     <li>(0:40) <a href="track/t3/">Track 3</a></li>
-    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 <ul>
     <li><a href="track/t2/">Track 2</a></li>
-    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by">by <a href="artist/apricot/">Apricot</a> and <a href="artist/peach/">Peach</a></span></li>
+    <li style="--primary-color: #ea2e83"><a href="track/t4/">Track 4</a> <span class="by"><span class="chunkwrap">by <a href="artist/apricot/">Apricot</a>,</span> <span class="chunkwrap"><a href="artist/peach/">Peach</a>,</span> <span class="chunkwrap">and <a href="artist/cerise/">Cerise</a></span></span></li>
 </ul>
 `
diff --git a/tap-snapshots/test/snapshot/generateTrackCoverArtwork.js.test.cjs b/tap-snapshots/test/snapshot/generateTrackCoverArtwork.js.test.cjs
index 1d21e47..29399c7 100644
--- a/tap-snapshots/test/snapshot/generateTrackCoverArtwork.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateTrackCoverArtwork.js.test.cjs
@@ -15,7 +15,7 @@ exports[`test/snapshot/generateTrackCoverArtwork.js > TAP > generateTrackCoverAr
      { name: 'creepy crawlies', isContentWarning: true }
    ]
  ]
- slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#abcdef', thumb: 'medium', reveal: true, link: true, square: true }]
+ slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#abcdef', thumb: 'medium', reveal: true, link: true, dimensions: [ 400, 300 ] }]
 <ul class="image-details">
     <li><a href="tag/damara/">Damara</a></li>
     <li><a href="tag/cronus/">Cronus</a></li>
@@ -40,7 +40,7 @@ exports[`test/snapshot/generateTrackCoverArtwork.js > TAP > generateTrackCoverAr
      { name: 'creepy crawlies', isContentWarning: true }
    ]
  ]
- slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#abcdef', thumb: 'small', reveal: false, link: false, square: true }]
+ slots: { path: [ 'media.albumCover', 'bee-forus-seatbelt-safebee', 'png' ], color: '#abcdef', thumb: 'small', reveal: false, link: false, dimensions: [ 400, 300 ] }]
 `
 
 exports[`test/snapshot/generateTrackCoverArtwork.js > TAP > generateTrackCoverArtwork (snapshot) > display: thumbnail - unique art 1`] = `
diff --git a/tap-snapshots/test/snapshot/generateTrackReleaseInfo.js.test.cjs b/tap-snapshots/test/snapshot/generateTrackReleaseInfo.js.test.cjs
index 3d988dc..e35f935 100644
--- a/tap-snapshots/test/snapshot/generateTrackReleaseInfo.js.test.cjs
+++ b/tap-snapshots/test/snapshot/generateTrackReleaseInfo.js.test.cjs
@@ -13,7 +13,7 @@ exports[`test/snapshot/generateTrackReleaseInfo.js > TAP > generateTrackReleaseI
     <br>
     Duration: 0:58.
 </p>
-<p>Listen on <a href="https://soundcloud.com/foo" class="nowrap">SoundCloud</a> or <a href="https://youtube.com/watch?v=bar" class="nowrap">YouTube</a>.</p>
+<p>Listen on <a class="external-link" href="https://soundcloud.com/foo">SoundCloud</a> or <a class="external-link" href="https://youtube.com/watch?v=bar">YouTube</a>.</p>
 `
 
 exports[`test/snapshot/generateTrackReleaseInfo.js > TAP > generateTrackReleaseInfo (snapshot) > cover artist contribs, non-unique 1`] = `
diff --git a/tap-snapshots/test/snapshot/image.js.test.cjs b/tap-snapshots/test/snapshot/image.js.test.cjs
index ddfb3e6..77e9586 100644
--- a/tap-snapshots/test/snapshot/image.js.test.cjs
+++ b/tap-snapshots/test/snapshot/image.js.test.cjs
@@ -24,6 +24,14 @@ exports[`test/snapshot/image.js > TAP > image (snapshot) > content warnings via
 </div>
 `
 
+exports[`test/snapshot/image.js > TAP > image (snapshot) > dimensions 1`] = `
+<div class="image-container"><div class="image-outer-area"><div class="image-inner-area"><img class="image" width="400" src="foobar"></div></div></div>
+`
+
+exports[`test/snapshot/image.js > TAP > image (snapshot) > dimensions with square 1`] = `
+<div class="image-container"><div class="image-outer-area"><div class="image-inner-area"><img class="image" width="400" src="foobar"></div></div></div>
+`
+
 exports[`test/snapshot/image.js > TAP > image (snapshot) > lazy with square 1`] = `
 <noscript><div class="image-container square"><div class="image-outer-area square-content"><div class="image-inner-area"><img class="image" src="foobar"></div></div></div></noscript>
 <div class="image-container square js-hide"><div class="image-outer-area square-content"><div class="image-inner-area"><img class="image lazy" data-original="foobar"></div></div></div>
@@ -64,7 +72,3 @@ exports[`test/snapshot/image.js > TAP > image (snapshot) > thumb requested but s
 exports[`test/snapshot/image.js > TAP > image (snapshot) > thumbnail details 1`] = `
 <div class="image-container"><div class="image-outer-area"><div class="image-inner-area"><img class="image" data-original-length="1200" data-thumbs="voluminous:1200 middling:900 petite:20" src="thumb/album-art/beyond-canon/cover.voluminous.jpg"></div></div></div>
 `
-
-exports[`test/snapshot/image.js > TAP > image (snapshot) > width & height 1`] = `
-<div class="image-container"><div class="image-outer-area"><div class="image-inner-area"><img class="image" width="600" height="400" src="foobar"></div></div></div>
-`
diff --git a/tap-snapshots/test/snapshot/linkContribution.js.test.cjs b/tap-snapshots/test/snapshot/linkContribution.js.test.cjs
index 20f5adc..4666cd2 100644
--- a/tap-snapshots/test/snapshot/linkContribution.js.test.cjs
+++ b/tap-snapshots/test/snapshot/linkContribution.js.test.cjs
@@ -8,22 +8,22 @@
 exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) > loads of links (inline) 1`] = `
 <span class="contribution nowrap"><a href="artist/lorem-ipsum-lover/">Lorem Ipsum Lover</a> (<span class="icons icons-inline"><a class="icon" href="https://loremipsum.io">
             <svg>
-                <title>External (loremipsum.io)</title>
+                <title>loremipsum.io</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a>, <a class="icon" href="https://loremipsum.io/generator/">
             <svg>
-                <title>External (loremipsum.io)</title>
+                <title>loremipsum.io</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a>, <a class="icon" href="https://loremipsum.io/#meaning">
             <svg>
-                <title>External (loremipsum.io)</title>
+                <title>loremipsum.io</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a>, <a class="icon" href="https://loremipsum.io/#usage-and-examples">
             <svg>
-                <title>External (loremipsum.io)</title>
+                <title>loremipsum.io</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a></span>)</span>
@@ -33,28 +33,28 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
 <span class="contribution"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/lorem-ipsum-lover/">Lorem Ipsum Lover</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://loremipsum.io">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/generator/">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/generator/">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#meaning">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#meaning">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#usage-and-examples">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#usage-and-examples">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#controversy">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#controversy">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#when-to-use-lorem-ipsum">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#when-to-use-lorem-ipsum">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#lorem-ipsum-all-the-things">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#lorem-ipsum-all-the-things">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a><a class="icon has-text" href="https://loremipsum.io/#original-source">
+                </a><span class="icon-platform">Other</span><a class="icon has-text" href="https://loremipsum.io/#original-source">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">loremipsum.io</span>
-                </a></span></span></span></span>
+                </a><span class="icon-platform">Other</span></span></span></span></span>
 `
 
 exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) > no accents 1`] = `
@@ -78,7 +78,7 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
             </svg>
         </a>, <a class="icon" href="https://toby.fox/">
             <svg>
-                <title>External (toby.fox)</title>
+                <title>toby.fox</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a></span>)</span>
@@ -105,7 +105,7 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
             </svg>
         </a>, <a class="icon" href="https://toby.fox/">
             <svg>
-                <title>External (toby.fox)</title>
+                <title>toby.fox</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a></span>)</span>
@@ -115,15 +115,15 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
 <span class="contribution"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/clark-powell/">Clark Powell</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://soundcloud.com/plazmataz">
                     <svg><use href="static/icons.svg#icon-soundcloud"></use></svg>
                     <span class="icon-text">plazmataz</span>
-                </a></span></span></span></span>
+                </a><span class="icon-platform">SoundCloud</span></span></span></span></span>
 <span class="contribution nowrap"><a href="artist/the-big-baddies/">Grounder &amp; Scratch</a> (Snooping)</span>
 <span class="contribution nowrap"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/toby-fox/">Toby Fox</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://tobyfox.bandcamp.com/">
                     <svg><use href="static/icons.svg#icon-bandcamp"></use></svg>
                     <span class="icon-text">tobyfox</span>
-                </a><a class="icon has-text" href="https://toby.fox/">
+                </a><span class="icon-platform">Bandcamp</span><a class="icon has-text" href="https://toby.fox/">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">toby.fox</span>
-                </a></span></span></span> (Arrangement)</span>
+                </a><span class="icon-platform">Other</span></span></span></span> (Arrangement)</span>
 `
 
 exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) > showContribution & showIcons (inline) 1`] = `
@@ -141,7 +141,7 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
             </svg>
         </a>, <a class="icon" href="https://toby.fox/">
             <svg>
-                <title>External (toby.fox)</title>
+                <title>toby.fox</title>
                 <use href="static/icons.svg#icon-globe"></use>
             </svg>
         </a></span>)</span>
@@ -151,13 +151,13 @@ exports[`test/snapshot/linkContribution.js > TAP > linkContribution (snapshot) >
 <span class="contribution"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/clark-powell/">Clark Powell</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://soundcloud.com/plazmataz">
                     <svg><use href="static/icons.svg#icon-soundcloud"></use></svg>
                     <span class="icon-text">plazmataz</span>
-                </a></span></span></span></span>
+                </a><span class="icon-platform">SoundCloud</span></span></span></span></span>
 <span class="contribution nowrap"><a href="artist/the-big-baddies/">Grounder &amp; Scratch</a> (Snooping)</span>
 <span class="contribution nowrap"><span class="text-with-tooltip"><span class="hoverable"><a class="text-with-tooltip-interaction-cue" href="artist/toby-fox/">Toby Fox</a></span><span class="tooltip icons icons-tooltip"><span class="tooltip-content"><a class="icon has-text" href="https://tobyfox.bandcamp.com/">
                     <svg><use href="static/icons.svg#icon-bandcamp"></use></svg>
                     <span class="icon-text">tobyfox</span>
-                </a><a class="icon has-text" href="https://toby.fox/">
+                </a><span class="icon-platform">Bandcamp</span><a class="icon has-text" href="https://toby.fox/">
                     <svg><use href="static/icons.svg#icon-globe"></use></svg>
                     <span class="icon-text">toby.fox</span>
-                </a></span></span></span> (Arrangement)</span>
+                </a><span class="icon-platform">Other</span></span></span></span> (Arrangement)</span>
 `
diff --git a/tap-snapshots/test/snapshot/linkExternal.js.test.cjs b/tap-snapshots/test/snapshot/linkExternal.js.test.cjs
index 1c1f35f..03192e8 100644
--- a/tap-snapshots/test/snapshot/linkExternal.js.test.cjs
+++ b/tap-snapshots/test/snapshot/linkExternal.js.test.cjs
@@ -5,171 +5,224 @@
  * Make sure to inspect the output below.  Do not ignore changes!
  */
 'use strict'
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: album, style: compact 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">youtu.be</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">youtube.com</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">youtube.com</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: album, style: normal 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: album, style: handle 1`] = `
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: album, style: platform 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumMultipleTracks, style: compact 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">youtu.be</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">youtube.com</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">youtube.com</a>
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumMultipleTracks, style: normal 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube (full album)</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube (full album)</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumMultipleTracks, style: handle 1`] = `
+<a class="external-link" href="https://youtu.be/abc">YouTube (full album)</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube (full album)</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumMultipleTracks, style: platform 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
+<a class="external-link" href="https://youtu.be/abc">YouTube (full album)</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube (full album)</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumNoTracks, style: compact 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">youtu.be</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">youtube.com</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">youtube.com</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumNoTracks, style: normal 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumNoTracks, style: handle 1`] = `
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumNoTracks, style: platform 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumOneTrack, style: compact 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">youtu.be</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">youtube.com</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">youtube.com</a>
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumOneTrack, style: normal 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumOneTrack, style: handle 1`] = `
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: albumOneTrack, style: platform 1`] = `
-<a href="https://youtu.be/abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/watch?v=abc" class="nowrap">YouTube</a>
-<a href="https://youtube.com/Playlist?list=kweh" class="nowrap">YouTube</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: flash, style: compact 1`] = `
-<a href="https://www.bgreco.net/hsflash/002238.html" class="nowrap">bgreco.net</a>
-<a href="https://homestuck.com/story/1234" class="nowrap">homestuck.com</a>
-<a href="https://homestuck.com/story/pony" class="nowrap">homestuck.com</a>
-<a href="https://www.youtube.com/watch?v=wKgOp3Kg2wI" class="nowrap">youtube.com</a>
-<a href="https://youtu.be/IOcvkkklWmY" class="nowrap">youtu.be</a>
-<a href="https://some.external.site/foo/bar/" class="nowrap">some.external.site</a>
+<a class="external-link" href="https://youtu.be/abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/watch?v=abc">YouTube</a>
+<a class="external-link" href="https://youtube.com/Playlist?list=kweh">YouTube</a>
 `
 
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: flash, style: normal 1`] = `
-<a href="https://www.bgreco.net/hsflash/002238.html" class="nowrap">bgreco.net (high quality audio)</a>
-<a href="https://homestuck.com/story/1234" class="nowrap">Homestuck (page 1234)</a>
-<a href="https://homestuck.com/story/pony" class="nowrap">Homestuck (secret page)</a>
-<a href="https://www.youtube.com/watch?v=wKgOp3Kg2wI" class="nowrap">YouTube (on any device)</a>
-<a href="https://youtu.be/IOcvkkklWmY" class="nowrap">YouTube (on any device)</a>
-<a href="https://some.external.site/foo/bar/" class="nowrap">External (some.external.site)</a>
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: flash, style: handle 1`] = `
+<a class="external-link" href="https://www.bgreco.net/hsflash/002238.html">bgreco.net (high quality audio)</a>
+<a class="external-link" href="https://homestuck.com/story/1234">Homestuck (page 1234)</a>
+<a class="external-link" href="https://homestuck.com/story/pony">Homestuck (secret page)</a>
+<a class="external-link" href="https://www.youtube.com/watch?v=wKgOp3Kg2wI">YouTube (on any device)</a>
+<a class="external-link" href="https://youtu.be/IOcvkkklWmY">YouTube (on any device)</a>
+<a class="external-link" href="https://some.external.site/foo/bar/">some.external.site</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: flash, style: platform 1`] = `
-<a href="https://www.bgreco.net/hsflash/002238.html" class="nowrap">bgreco.net</a>
-<a href="https://homestuck.com/story/1234" class="nowrap">Homestuck</a>
-<a href="https://homestuck.com/story/pony" class="nowrap">Homestuck</a>
-<a href="https://www.youtube.com/watch?v=wKgOp3Kg2wI" class="nowrap">YouTube</a>
-<a href="https://youtu.be/IOcvkkklWmY" class="nowrap">YouTube</a>
-<a href="https://some.external.site/foo/bar/" class="nowrap">External</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: generic, style: compact 1`] = `
-<a href="https://homestuck.bandcamp.com/" class="nowrap">homestuck</a>
-<a href="https://soundcloud.com/plazmataz" class="nowrap">plazmataz</a>
-<a href="https://aeritus.tumblr.com/" class="nowrap">aeritus</a>
-<a href="https://twitter.com/awkwarddoesart" class="nowrap">@awkwarddoesart</a>
-<a href="https://www.deviantart.com/chesswanderlust-sama" class="nowrap">deviantart.com</a>
-<a href="https://en.wikipedia.org/wiki/Haydn_Quartet_(vocal_ensemble)" class="nowrap">en.wikipedia.org</a>
-<a href="https://www.poetryfoundation.org/poets/christina-rossetti" class="nowrap">poetryfoundation.org</a>
-<a href="https://www.instagram.com/levc_egm/" class="nowrap">instagram.com</a>
-<a href="https://www.patreon.com/CecilyRenns" class="nowrap">patreon.com</a>
-<a href="https://open.spotify.com/artist/63SNNpNOicDzG3LY82G4q3" class="nowrap">open.spotify.com</a>
-<a href="https://buzinkai.newgrounds.com/" class="nowrap">buzinkai.newgrounds.com</a>
-<a href="https://music.solatrus.com/" class="nowrap">music.solatrus.com</a>
-<a href="https://types.pl/" class="nowrap">types.pl</a>
-<a href="https://community.fandom.com/" class="nowrap">community.fandom.com</a>
-<a href="https://community.fandom.com/wiki/" class="nowrap">community.fandom.com</a>
-<a href="https://community.fandom.com/wiki/Community_Central" class="nowrap">community.fandom.com</a>
-<a href="https://mspaintadventures.fandom.com/" class="nowrap">mspaintadventures.fandom.com</a>
-<a href="https://mspaintadventures.fandom.com/wiki/" class="nowrap">mspaintadventures.fandom.com</a>
-<a href="https://mspaintadventures.fandom.com/wiki/Draconian_Dignitary" class="nowrap">mspaintadventures.fandom.com</a>
-`
-
-exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: generic, style: normal 1`] = `
-<a href="https://homestuck.bandcamp.com/" class="nowrap">Bandcamp</a>
-<a href="https://soundcloud.com/plazmataz" class="nowrap">SoundCloud</a>
-<a href="https://aeritus.tumblr.com/" class="nowrap">Tumblr</a>
-<a href="https://twitter.com/awkwarddoesart" class="nowrap">Twitter</a>
-<a href="https://www.deviantart.com/chesswanderlust-sama" class="nowrap">DeviantArt</a>
-<a href="https://en.wikipedia.org/wiki/Haydn_Quartet_(vocal_ensemble)" class="nowrap">Wikipedia</a>
-<a href="https://www.poetryfoundation.org/poets/christina-rossetti" class="nowrap">Poetry Foundation</a>
-<a href="https://www.instagram.com/levc_egm/" class="nowrap">Instagram</a>
-<a href="https://www.patreon.com/CecilyRenns" class="nowrap">Patreon</a>
-<a href="https://open.spotify.com/artist/63SNNpNOicDzG3LY82G4q3" class="nowrap">Spotify</a>
-<a href="https://buzinkai.newgrounds.com/" class="nowrap">Newgrounds</a>
-<a href="https://music.solatrus.com/" class="nowrap">Bandcamp (music.solatrus.com)</a>
-<a href="https://types.pl/" class="nowrap">Mastodon (types.pl)</a>
-<a href="https://community.fandom.com/" class="nowrap">Fandom</a>
-<a href="https://community.fandom.com/wiki/" class="nowrap">Fandom</a>
-<a href="https://community.fandom.com/wiki/Community_Central" class="nowrap">Fandom</a>
-<a href="https://mspaintadventures.fandom.com/" class="nowrap">MSPA Wiki</a>
-<a href="https://mspaintadventures.fandom.com/wiki/" class="nowrap">MSPA Wiki</a>
-<a href="https://mspaintadventures.fandom.com/wiki/Draconian_Dignitary" class="nowrap">MSPA Wiki (Draconian Dignitary)</a>
+<a class="external-link" href="https://www.bgreco.net/hsflash/002238.html">bgreco.net (high quality audio)</a>
+<a class="external-link" href="https://homestuck.com/story/1234">Homestuck (page 1234)</a>
+<a class="external-link" href="https://homestuck.com/story/pony">Homestuck (secret page)</a>
+<a class="external-link" href="https://www.youtube.com/watch?v=wKgOp3Kg2wI">YouTube (on any device)</a>
+<a class="external-link" href="https://youtu.be/IOcvkkklWmY">YouTube (on any device)</a>
+<a class="external-link" href="https://some.external.site/foo/bar/">some.external.site</a>
+`
+
+exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: generic, style: handle 1`] = `
+<a class="external-link" href="https://music.apple.com/us/artist/system-of-a-down/462715">Apple Music</a>
+<a class="external-link" href="https://www.artstation.com/eevaningtea">eevaningtea</a>
+<a class="external-link" href="https://witnesstheabsurd.artstation.com/">witnesstheabsurd</a>
+<a class="external-link" href="https://music.solatrus.com/">music.solatrus.com</a>
+<a class="external-link" href="https://homestuck.bandcamp.com/">homestuck</a>
+<a class="external-link" href="https://bsky.app/profile/jacobtheloofah.bsky.social">jacobtheloofah</a>
+<a class="external-link" href="https://aliceflare.carrd.co">aliceflare</a>
+<a class="external-link" href="https://bigchaslappa.carrd.co/">bigchaslappa</a>
+<a class="external-link" href="https://cohost.org/cosmoptera">cosmoptera</a>
+<a class="external-link" href="https://music.deconreconstruction.com/albums/catch-322">MUSIC@DCRC</a>
+<a class="external-link" href="https://music.deconreconstruction.com/albums/catch-322?track=arcjecs-theme">MUSIC@DCRC</a>
+<a class="external-link" href="https://www.deconreconstruction.com/">Deconreconstruction</a>
+<a class="external-link" href="https://culdhira.deviantart.com">culdhira</a>
+<a class="external-link" href="https://www.deviantart.com/chesswanderlust-sama">chesswanderlust-sama</a>
+<a class="external-link" href="https://www.deviantart.com/shilloshilloh/art/Homestuck-Jake-English-268874606">DeviantArt</a>
+<a class="external-link" href="https://www.facebook.com/DoomedCloud/">DoomedCloud</a>
+<a class="external-link" href="https://www.facebook.com/pages/WoodenToaster/280642235307371">WoodenToaster</a>
+<a class="external-link" href="https://www.facebook.com/Svixy/posts/400018786702633">Facebook</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/wiki/Draconian_Dignitary">MSPA Wiki (Draconian Dignitary)</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/wiki/">MSPA Wiki</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/">MSPA Wiki</a>
+<a class="external-link" href="https://community.fandom.com/">Fandom</a>
+<a class="external-link" href="https://community.fandom.com/wiki/">Fandom</a>
+<a class="external-link" href="https://community.fandom.com/wiki/Community_Central">Fandom</a>
+<a class="external-link" href="https://gamebanana.com/members/2028092">GameBanana</a>
+<a class="external-link" href="https://gamebanana.com/mods/459476">GameBanana</a>
+<a class="external-link" href="https://homestuck.com/">Homestuck</a>
+<a class="external-link" href="https://hsmusic.wiki/media/misc/archive/Firefly%20Cloud%20Remix.mp3">HSMusic (wiki archive)</a>
+<a class="external-link" href="https://hsmusic.wiki/feedback/">HSMusic</a>
+<a class="external-link" href="https://archive.org/details/a-life-well-lived">Internet Archive</a>
+<a class="external-link" href="https://archive.org/details/VastError_Volume1/11+Renaissance.mp3">Internet Archive</a>
+<a class="external-link" href="https://instagram.com/bass.and.noises">bass.and.noises</a>
+<a class="external-link" href="https://www.instagram.com/levc_egm/">levc_egm</a>
+<a class="external-link" href="https://tuyoki.itch.io/">tuyoki</a>
+<a class="external-link" href="https://itch.io/profile/bravelittletoreador">bravelittletoreador</a>
+<a class="external-link" href="https://ko-fi.com/gnaach">gnaach</a>
+<a class="external-link" href="https://linktr.ee/bbpanzu">bbpanzu</a>
+<a class="external-link" href="https://types.pl/">types.pl</a>
+<a class="external-link" href="https://canwc.mspfa.com/">MSPFA</a>
+<a class="external-link" href="https://mspfa.com/?s=12003&p=1045">MSPFA</a>
+<a class="external-link" href="https://mspfa.com/user/?u=103334508819793669241">MSPFA</a>
+<a class="external-link" href="https://wodaro.neocities.org">wodaro.neocities.org</a>
+<a class="external-link" href="https://neomints.neocities.org/">neomints.neocities.org</a>
+<a class="external-link" href="https://buzinkai.newgrounds.com/">buzinkai</a>
+<a class="external-link" href="https://www.newgrounds.com/audio/listen/1256058">Newgrounds</a>
+<a class="external-link" href="https://www.patreon.com/CecilyRenns">CecilyRenns</a>
+<a class="external-link" href="https://www.poetryfoundation.org/poets/christina-rossetti">Poetry Foundation</a>
+<a class="external-link" href="https://www.poetryfoundation.org/poems/45000/remember-56d224509b7ae">Poetry Foundation</a>
+<a class="external-link" href="https://soundcloud.com/plazmataz">plazmataz</a>
+<a class="external-link" href="https://soundcloud.com/worthikids/1-i-accidentally-broke-my">SoundCloud</a>
+<a class="external-link" href="https://open.spotify.com/artist/63SNNpNOicDzG3LY82G4q3">Spotify</a>
+<a class="external-link" href="https://open.spotify.com/album/0iHvPD8rM3hQa0qeVtPQ3t">Spotify</a>
+<a class="external-link" href="https://open.spotify.com/track/6YEGQH32aAXb9vQQbBrPlw">Spotify</a>
+<a class="external-link" href="https://www.tiktok.com/@richaadeb">richaadeb</a>
+<a class="external-link" href="https://toyhou.se/ghastaboo">ghastaboo</a>
+<a class="external-link" href="https://aeritus.tumblr.com/">aeritus</a>
+<a class="external-link" href="https://vol5anthology.tumblr.com/post/159528808107/hey-everyone-its-413-and-that-means-we-have">vol5anthology</a>
+<a class="external-link" href="https://www.tumblr.com/electricwestern">electricwestern</a>
+<a class="external-link" href="https://www.tumblr.com/spellmynamewithabang/142767566733/happy-413-this-is-the-first-time-anyones-heard">Tumblr</a>
+<a class="external-link" href="https://www.twitch.tv/ajhebard">ajhebard</a>
+<a class="external-link" href="https://www.twitch.tv/vargskelethor/">vargskelethor/</a>
+<a class="external-link" href="https://twitter.com/awkwarddoesart">awkwarddoesart</a>
+<a class="external-link" href="https://twitter.com/purenonsens/">purenonsens</a>
+<a class="external-link" href="https://twitter.com/circlejourney/status/1202265927183548416">Twitter</a>
+<a class="external-link" href="https://web.archive.org/web/20120405160556/https://homestuck.bandcamp.com/album/colours-and-mayhem-universe-a">Wayback Machine</a>
+<a class="external-link" href="https://web.archive.org/web/20160807111207/http://griffinspacejam.com:80/">Wayback Machine</a>
+<a class="external-link" href="https://en.wikipedia.org/wiki/Haydn_Quartet_(vocal_ensemble)">Wikipedia</a>
+<a class="external-link" href="https://youtube.com/@bani-chan8949">bani-chan8949</a>
+<a class="external-link" href="https://www.youtube.com/@Razzie16">Razzie16</a>
+<a class="external-link" href="https://www.youtube.com/channel/UCQXfvlKkpbOqEz4BepHqK7g">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/watch?v=6ekVnZm29kw">YouTube</a>
+<a class="external-link" href="https://youtu.be/WBkC038wSio">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/playlist?list=PLy5UGIMKOXpONMExgI7lVYFwQa54QFp_H">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > context: generic, style: platform 1`] = `
-<a href="https://homestuck.bandcamp.com/" class="nowrap">Bandcamp</a>
-<a href="https://soundcloud.com/plazmataz" class="nowrap">SoundCloud</a>
-<a href="https://aeritus.tumblr.com/" class="nowrap">Tumblr</a>
-<a href="https://twitter.com/awkwarddoesart" class="nowrap">Twitter</a>
-<a href="https://www.deviantart.com/chesswanderlust-sama" class="nowrap">DeviantArt</a>
-<a href="https://en.wikipedia.org/wiki/Haydn_Quartet_(vocal_ensemble)" class="nowrap">Wikipedia</a>
-<a href="https://www.poetryfoundation.org/poets/christina-rossetti" class="nowrap">Poetry Foundation</a>
-<a href="https://www.instagram.com/levc_egm/" class="nowrap">Instagram</a>
-<a href="https://www.patreon.com/CecilyRenns" class="nowrap">Patreon</a>
-<a href="https://open.spotify.com/artist/63SNNpNOicDzG3LY82G4q3" class="nowrap">Spotify</a>
-<a href="https://buzinkai.newgrounds.com/" class="nowrap">Newgrounds</a>
-<a href="https://music.solatrus.com/" class="nowrap">Bandcamp</a>
-<a href="https://types.pl/" class="nowrap">Mastodon</a>
-<a href="https://community.fandom.com/" class="nowrap">Fandom</a>
-<a href="https://community.fandom.com/wiki/" class="nowrap">Fandom</a>
-<a href="https://community.fandom.com/wiki/Community_Central" class="nowrap">Fandom</a>
-<a href="https://mspaintadventures.fandom.com/" class="nowrap">Fandom</a>
-<a href="https://mspaintadventures.fandom.com/wiki/" class="nowrap">Fandom</a>
-<a href="https://mspaintadventures.fandom.com/wiki/Draconian_Dignitary" class="nowrap">Fandom</a>
+<a class="external-link" href="https://music.apple.com/us/artist/system-of-a-down/462715">Apple Music</a>
+<a class="external-link" href="https://www.artstation.com/eevaningtea">ArtStation</a>
+<a class="external-link" href="https://witnesstheabsurd.artstation.com/">ArtStation</a>
+<a class="external-link" href="https://music.solatrus.com/">Bandcamp (music.solatrus.com)</a>
+<a class="external-link" href="https://homestuck.bandcamp.com/">Bandcamp</a>
+<a class="external-link" href="https://bsky.app/profile/jacobtheloofah.bsky.social">Bluesky</a>
+<a class="external-link" href="https://aliceflare.carrd.co">Carrd</a>
+<a class="external-link" href="https://bigchaslappa.carrd.co/">Carrd</a>
+<a class="external-link" href="https://cohost.org/cosmoptera">Cohost</a>
+<a class="external-link" href="https://music.deconreconstruction.com/albums/catch-322">MUSIC@DCRC</a>
+<a class="external-link" href="https://music.deconreconstruction.com/albums/catch-322?track=arcjecs-theme">MUSIC@DCRC</a>
+<a class="external-link" href="https://www.deconreconstruction.com/">Deconreconstruction</a>
+<a class="external-link" href="https://culdhira.deviantart.com">DeviantArt</a>
+<a class="external-link" href="https://www.deviantart.com/chesswanderlust-sama">DeviantArt</a>
+<a class="external-link" href="https://www.deviantart.com/shilloshilloh/art/Homestuck-Jake-English-268874606">DeviantArt</a>
+<a class="external-link" href="https://www.facebook.com/DoomedCloud/">Facebook</a>
+<a class="external-link" href="https://www.facebook.com/pages/WoodenToaster/280642235307371">Facebook</a>
+<a class="external-link" href="https://www.facebook.com/Svixy/posts/400018786702633">Facebook</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/wiki/Draconian_Dignitary">MSPA Wiki (Draconian Dignitary)</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/wiki/">MSPA Wiki</a>
+<a class="external-link" href="https://mspaintadventures.fandom.com/">MSPA Wiki</a>
+<a class="external-link" href="https://community.fandom.com/">Fandom</a>
+<a class="external-link" href="https://community.fandom.com/wiki/">Fandom</a>
+<a class="external-link" href="https://community.fandom.com/wiki/Community_Central">Fandom</a>
+<a class="external-link" href="https://gamebanana.com/members/2028092">GameBanana</a>
+<a class="external-link" href="https://gamebanana.com/mods/459476">GameBanana</a>
+<a class="external-link" href="https://homestuck.com/">Homestuck</a>
+<a class="external-link" href="https://hsmusic.wiki/media/misc/archive/Firefly%20Cloud%20Remix.mp3">HSMusic (wiki archive)</a>
+<a class="external-link" href="https://hsmusic.wiki/feedback/">HSMusic</a>
+<a class="external-link" href="https://archive.org/details/a-life-well-lived">Internet Archive</a>
+<a class="external-link" href="https://archive.org/details/VastError_Volume1/11+Renaissance.mp3">Internet Archive</a>
+<a class="external-link" href="https://instagram.com/bass.and.noises">Instagram</a>
+<a class="external-link" href="https://www.instagram.com/levc_egm/">Instagram</a>
+<a class="external-link" href="https://tuyoki.itch.io/">itch.io</a>
+<a class="external-link" href="https://itch.io/profile/bravelittletoreador">itch.io</a>
+<a class="external-link" href="https://ko-fi.com/gnaach">Ko-fi</a>
+<a class="external-link" href="https://linktr.ee/bbpanzu">Linktree</a>
+<a class="external-link" href="https://types.pl/">Mastodon (types.pl)</a>
+<a class="external-link" href="https://canwc.mspfa.com/">MSPFA</a>
+<a class="external-link" href="https://mspfa.com/?s=12003&p=1045">MSPFA</a>
+<a class="external-link" href="https://mspfa.com/user/?u=103334508819793669241">MSPFA</a>
+<a class="external-link" href="https://wodaro.neocities.org">Neocities</a>
+<a class="external-link" href="https://neomints.neocities.org/">Neocities</a>
+<a class="external-link" href="https://buzinkai.newgrounds.com/">Newgrounds</a>
+<a class="external-link" href="https://www.newgrounds.com/audio/listen/1256058">Newgrounds</a>
+<a class="external-link" href="https://www.patreon.com/CecilyRenns">Patreon</a>
+<a class="external-link" href="https://www.poetryfoundation.org/poets/christina-rossetti">Poetry Foundation</a>
+<a class="external-link" href="https://www.poetryfoundation.org/poems/45000/remember-56d224509b7ae">Poetry Foundation</a>
+<a class="external-link" href="https://soundcloud.com/plazmataz">SoundCloud</a>
+<a class="external-link" href="https://soundcloud.com/worthikids/1-i-accidentally-broke-my">SoundCloud</a>
+<a class="external-link" href="https://open.spotify.com/artist/63SNNpNOicDzG3LY82G4q3">Spotify</a>
+<a class="external-link" href="https://open.spotify.com/album/0iHvPD8rM3hQa0qeVtPQ3t">Spotify</a>
+<a class="external-link" href="https://open.spotify.com/track/6YEGQH32aAXb9vQQbBrPlw">Spotify</a>
+<a class="external-link" href="https://www.tiktok.com/@richaadeb">TikTok</a>
+<a class="external-link" href="https://toyhou.se/ghastaboo">Toyhouse</a>
+<a class="external-link" href="https://aeritus.tumblr.com/">Tumblr</a>
+<a class="external-link" href="https://vol5anthology.tumblr.com/post/159528808107/hey-everyone-its-413-and-that-means-we-have">Tumblr</a>
+<a class="external-link" href="https://www.tumblr.com/electricwestern">Tumblr</a>
+<a class="external-link" href="https://www.tumblr.com/spellmynamewithabang/142767566733/happy-413-this-is-the-first-time-anyones-heard">Tumblr</a>
+<a class="external-link" href="https://www.twitch.tv/ajhebard">Twitch</a>
+<a class="external-link" href="https://www.twitch.tv/vargskelethor/">Twitch</a>
+<a class="external-link" href="https://twitter.com/awkwarddoesart">Twitter</a>
+<a class="external-link" href="https://twitter.com/purenonsens/">Twitter</a>
+<a class="external-link" href="https://twitter.com/circlejourney/status/1202265927183548416">Twitter</a>
+<a class="external-link" href="https://web.archive.org/web/20120405160556/https://homestuck.bandcamp.com/album/colours-and-mayhem-universe-a">Wayback Machine</a>
+<a class="external-link" href="https://web.archive.org/web/20160807111207/http://griffinspacejam.com:80/">Wayback Machine</a>
+<a class="external-link" href="https://en.wikipedia.org/wiki/Haydn_Quartet_(vocal_ensemble)">Wikipedia</a>
+<a class="external-link" href="https://youtube.com/@bani-chan8949">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/@Razzie16">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/channel/UCQXfvlKkpbOqEz4BepHqK7g">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/watch?v=6ekVnZm29kw">YouTube</a>
+<a class="external-link" href="https://youtu.be/WBkC038wSio">YouTube</a>
+<a class="external-link" href="https://www.youtube.com/playlist?list=PLy5UGIMKOXpONMExgI7lVYFwQa54QFp_H">YouTube</a>
 `
 
 exports[`test/snapshot/linkExternal.js > TAP > linkExternal (snapshot) > unknown domain (arbitrary world wide web path) 1`] = `
-<a href="https://snoo.ping.as/usual/i/see/" class="nowrap">External (snoo.ping.as)</a>
+<a class="external-link" href="https://snoo.ping.as/usual/i/see/">snoo.ping.as</a>
 `