summaryrefslogtreecommitdiffstats
path: root/lib/output/modifiers/resolveLinks.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output/modifiers/resolveLinks.js')
-rw-r--r--lib/output/modifiers/resolveLinks.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/output/modifiers/resolveLinks.js b/lib/output/modifiers/resolveLinks.js
new file mode 100644
index 0000000..bf3fd10
--- /dev/null
+++ b/lib/output/modifiers/resolveLinks.js
@@ -0,0 +1,38 @@
+var path = require('path');
+
+var LocationUtils = require('../../utils/location');
+var editHTMLElement = require('./editHTMLElement');
+
+/**
+ Resolve all HTML links:
+ - /test.md in hello -> ../test.html
+
+ @param {String} currentFile
+ @param {Function(String) -> String} resolveFile
+ @param {HTMLDom} $
+*/
+function resolveLinks(currentFile, resolveFile, $) {
+ var currentDirectory = path.dirname(currentFile);
+
+ return editHTMLElement($, 'a', function($a) {
+ var href = $a.attr('href');
+
+ if (LocationUtils.isExternal(href)) {
+ $a.attr('_target', 'blank');
+ return;
+ }
+
+ // Calcul absolute path for this
+ href = LocationUtils.toAbsolute(href, currentDirectory, '.');
+
+ // Resolve file
+ href = resolveFile(href);
+
+ // Convert back to relative
+ href = LocationUtils.relative(currentDirectory, href);
+
+ $a.attr('href', href);
+ });
+}
+
+module.exports = resolveLinks;