summaryrefslogtreecommitdiffstats
path: root/lib/output/helper
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output/helper')
-rw-r--r--lib/output/helper/fileToOutput.js32
-rw-r--r--lib/output/helper/fileToURL.js31
-rw-r--r--lib/output/helper/index.js2
-rw-r--r--lib/output/helper/resolveFileToUrl.js27
-rw-r--r--lib/output/helper/writeFile.js23
5 files changed, 115 insertions, 0 deletions
diff --git a/lib/output/helper/fileToOutput.js b/lib/output/helper/fileToOutput.js
new file mode 100644
index 0000000..9673162
--- /dev/null
+++ b/lib/output/helper/fileToOutput.js
@@ -0,0 +1,32 @@
+var path = require('path');
+
+var PathUtils = require('../../utils/path');
+var LocationUtils = require('../../utils/location');
+
+var OUTPUT_EXTENSION = '.html';
+
+/**
+ Convert a filePath (absolute) to a filename for output
+
+ @param {Output} output
+ @param {String} filePath
+ @return {String}
+*/
+function fileToOutput(output, filePath) {
+ var book = output.getBook();
+ var readme = book.getReadme();
+ var fileReadme = readme.getFile();
+
+ if (
+ path.basename(filePath, path.extname(filePath)) == 'README' ||
+ (fileReadme.exists() && filePath == fileReadme.getPath())
+ ) {
+ filePath = path.join(path.dirname(filePath), 'index' + OUTPUT_EXTENSION);
+ } else {
+ filePath = PathUtils.setExtension(filePath, OUTPUT_EXTENSION);
+ }
+
+ return LocationUtils.normalize(filePath);
+}
+
+module.exports = fileToOutput;
diff --git a/lib/output/helper/fileToURL.js b/lib/output/helper/fileToURL.js
new file mode 100644
index 0000000..44ad2d8
--- /dev/null
+++ b/lib/output/helper/fileToURL.js
@@ -0,0 +1,31 @@
+var path = require('path');
+var LocationUtils = require('../../utils/location');
+
+var fileToOutput = require('./fileToOutput');
+
+/**
+ Convert a filePath (absolute) to an url (without hostname).
+ It returns an absolute path.
+
+ "README.md" -> "/"
+ "test/hello.md" -> "test/hello.html"
+ "test/README.md" -> "test/"
+
+ @param {Output} output
+ @param {String} filePath
+ @return {String}
+*/
+function fileToURL(output, filePath) {
+ var options = output.getOptions();
+ var directoryIndex = options.get('directoryIndex');
+
+ filePath = fileToOutput(output, filePath);
+
+ if (directoryIndex && path.basename(filePath) == 'index.html') {
+ filePath = path.dirname(filePath) + '/';
+ }
+
+ return LocationUtils.normalize(filePath);
+}
+
+module.exports = fileToURL;
diff --git a/lib/output/helper/index.js b/lib/output/helper/index.js
new file mode 100644
index 0000000..f8bc109
--- /dev/null
+++ b/lib/output/helper/index.js
@@ -0,0 +1,2 @@
+
+module.exports = {};
diff --git a/lib/output/helper/resolveFileToUrl.js b/lib/output/helper/resolveFileToUrl.js
new file mode 100644
index 0000000..3dba8f7
--- /dev/null
+++ b/lib/output/helper/resolveFileToUrl.js
@@ -0,0 +1,27 @@
+var LocationUtils = require('../../utils/location');
+
+var fileToURL = require('./fileToURL');
+
+/**
+ Resolve an absolute path (extracted from a link)
+
+ @param {Output} output
+ @param {String} filePath
+ @return {String}
+*/
+function resolveFileToURL(output, filePath) {
+ // Convert /test.png -> test.png
+ filePath = LocationUtils.toAbsolute(filePath, '', '');
+
+ var pages = output.getPages();
+ var page = pages.get(filePath);
+
+ // if file is a page, return correct .html url
+ if (page) {
+ filePath = fileToURL(output, filePath);
+ }
+
+ return LocationUtils.normalize(filePath);
+}
+
+module.exports = resolveFileToURL;
diff --git a/lib/output/helper/writeFile.js b/lib/output/helper/writeFile.js
new file mode 100644
index 0000000..3e2261d
--- /dev/null
+++ b/lib/output/helper/writeFile.js
@@ -0,0 +1,23 @@
+var path = require('path');
+var fs = require('../../utils/fs');
+
+/**
+ Write a file to the output folder
+
+ @param {Output} output
+ @param {String} filePath
+ @param {Buffer|String} content
+ @return {Promise}
+*/
+function writeFile(output, filePath, content) {
+ var rootFolder = output.getRoot();
+ filePath = path.join(rootFolder, filePath);
+
+ return fs.ensure(filePath)
+ .then(function() {
+ return fs.writeFile(filePath, content);
+ })
+ .thenResolve(output);
+}
+
+module.exports = writeFile;