« get me outta code hell

fix backwards slashes in hrefs on windows... - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2022-01-01 23:18:03 -0400
committer(quasar) nebula <qznebula@protonmail.com>2022-01-01 23:18:03 -0400
commit0bb644e2a37ad63d86fe3b313d5f33059b3bdc43 (patch)
treeac3dcefcf53d9c5de73bd4df23b6ad2e89fb4ad4
parent1b4a8e79e94d67444675b43c1a40c161b9d6b3db (diff)
fix backwards slashes in hrefs on windows...
...while also not breaking the way we use the to() functions for
actual output write paths!
-rwxr-xr-xsrc/upd8.js6
-rw-r--r--src/util/urls.js21
2 files changed, 19 insertions, 8 deletions
diff --git a/src/upd8.js b/src/upd8.js
index 29063f8..daef145 100755
--- a/src/upd8.js
+++ b/src/upd8.js
@@ -2023,8 +2023,8 @@ writePage.paths = (baseDirectory, fullKey, directory = '', {
     const [ groupKey, subKey ] = fullKey.split('.');
 
     const pathname = (groupKey === 'localized' && baseDirectory
-        ? urls.from('shared.root').to('localizedWithBaseDirectory.' + subKey, baseDirectory, directory)
-        : urls.from('shared.root').to(fullKey, directory));
+        ? urls.from('shared.root').toDevice('localizedWithBaseDirectory.' + subKey, baseDirectory, directory)
+        : urls.from('shared.root').toDevice(fullKey, directory));
 
     // Needed for the rare directory which itself contains a slash, e.g. for
     // listings, with directories like 'albums/by-name'.
@@ -2048,7 +2048,7 @@ function writeSymlinks() {
     ]);
 
     async function link(directory, urlKey) {
-        const pathname = urls.from('shared.root').to(urlKey);
+        const pathname = urls.from('shared.root').toDevice(urlKey);
         const file = path.join(outputPath, pathname);
         try {
             await unlink(file);
diff --git a/src/util/urls.js b/src/util/urls.js
index f0f9cdb..5f1d6eb 100644
--- a/src/util/urls.js
+++ b/src/util/urls.js
@@ -48,8 +48,12 @@ export function generateURLs(urlSpec) {
                 target = rebasePrefix + (toGroup.prefix || '') + target;
             }
 
-            return (path.relative(fromPath, target)
-                + (toPath.endsWith('/') ? '/' : ''));
+            const suffix = (toPath.endsWith('/') ? '/' : '');
+
+            return {
+                posix: path.posix.relative(fromPath, target) + suffix,
+                device: path.relative(fromPath, target) + suffix
+            };
         };
 
         const groupSymbol = Symbol();
@@ -63,8 +67,12 @@ export function generateURLs(urlSpec) {
         const relative = withEntries(urlSpec, entries => entries
             .map(([key, urlGroup]) => [key, groupHelper(urlGroup)]));
 
-        const to = (key, ...args) => {
-            const { value: template, group: {[groupSymbol]: toGroup} } = getValueForFullKey(relative, key)
+        const toHelper = (delimiterMode) => (key, ...args) => {
+            const {
+                value: {[delimiterMode]: template},
+                group: {[groupSymbol]: toGroup}
+            } = getValueForFullKey(relative, key);
+
             let result = template.replaceAll(/<([0-9]+)>/g, (match, n) => args[n]);
 
             // Kinda hacky lol, 8ut it works.
@@ -76,7 +84,10 @@ export function generateURLs(urlSpec) {
             return result;
         };
 
-        return {to, relative};
+        return {
+            to: toHelper('posix'),
+            toDevice: toHelper('device')
+        };
     };
 
     const generateFrom = () => {