summaryrefslogtreecommitdiffstats
path: root/lib/output
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-04-23 23:58:08 +0200
committerSamy Pesse <samypesse@gmail.com>2016-04-23 23:58:08 +0200
commit927185d95c9875a9b74d176b93669ebdbceecd14 (patch)
tree94c0b9ef45af8d86c8250ed8c86ad2810ac49d79 /lib/output
parenta3df6c6f0c1068762f9d48cdff97ab5d4c583082 (diff)
downloadgitbook-927185d95c9875a9b74d176b93669ebdbceecd14.zip
gitbook-927185d95c9875a9b74d176b93669ebdbceecd14.tar.gz
gitbook-927185d95c9875a9b74d176b93669ebdbceecd14.tar.bz2
add test for modifier "annotateText"
Diffstat (limited to 'lib/output')
-rw-r--r--lib/output/modifiers/__tests__/annotateText.js49
-rw-r--r--lib/output/modifiers/annotateText.js2
-rw-r--r--lib/output/modifiers/resolveLinks.js31
3 files changed, 78 insertions, 4 deletions
diff --git a/lib/output/modifiers/__tests__/annotateText.js b/lib/output/modifiers/__tests__/annotateText.js
new file mode 100644
index 0000000..15d4c30
--- /dev/null
+++ b/lib/output/modifiers/__tests__/annotateText.js
@@ -0,0 +1,49 @@
+jest.autoMockOff();
+
+var Immutable = require('immutable');
+var cheerio = require('cheerio');
+var GlossaryEntry = require('../../../models/glossaryEntry');
+
+describe('annotateText', function() {
+ var annotateText = require('../annotateText');
+
+ var entries = Immutable.List([
+ GlossaryEntry({ name: 'Word' }),
+ GlossaryEntry({ name: 'Multiple Words' })
+ ]);
+
+ it('should annotate text', function() {
+ var $ = cheerio.load('<p>This is a word, and multiple words</p>');
+
+ annotateText(entries, $);
+
+ var links = $('a');
+ expect(links.length).toBe(2);
+
+ var word = $(links.get(0));
+ expect(word.attr('href')).toBe('/GLOSSARY.md#word');
+ expect(word.text()).toBe('word');
+ expect(word.hasClass('glossary-term')).toBeTruthy();
+
+ var words = $(links.get(1));
+ expect(words.attr('href')).toBe('/GLOSSARY.md#multiple-words');
+ expect(words.text()).toBe('multiple words');
+ expect(words.hasClass('glossary-term')).toBeTruthy();
+ });
+
+ it('should not annotate scripts', function() {
+ var $ = cheerio.load('<script>This is a word, and multiple words</script>');
+
+ annotateText(entries, $);
+ expect($('a').length).toBe(0);
+ });
+
+ it('should not annotate when has class "no-glossary"', function() {
+ var $ = cheerio.load('<p class="no-glossary">This is a word, and multiple words</p>');
+
+ annotateText(entries, $);
+ expect($('a').length).toBe(0);
+ });
+});
+
+
diff --git a/lib/output/modifiers/annotateText.js b/lib/output/modifiers/annotateText.js
index 2832f91..d8443cf 100644
--- a/lib/output/modifiers/annotateText.js
+++ b/lib/output/modifiers/annotateText.js
@@ -81,7 +81,7 @@ function annotateText(entries, $) {
) return;
replaceText($, this, searchRegex, function(match) {
- return '<a href="/GLOSSARY.html#' + entryId + '" '
+ return '<a href="/GLOSSARY.md#' + entryId + '" '
+ 'class="glossary-term" title="' + escape(description) + '">'
+ match
+ '</a>';
diff --git a/lib/output/modifiers/resolveLinks.js b/lib/output/modifiers/resolveLinks.js
index 5c2514f..b5ad4f3 100644
--- a/lib/output/modifiers/resolveLinks.js
+++ b/lib/output/modifiers/resolveLinks.js
@@ -1,13 +1,38 @@
+var path = require('path');
+var LocationUtils = require('../../utils/location');
+var editHTMLElement = require('./editHTMLElement');
/**
- Resolve all HTML links
+ Resolve all HTML links:
+ - /test.md in hello -> ../test.html
- @param {String}
+ @param {String} currentFile
+ @param {Function(String) -> String} resolveFile
@param {HTMLDom} $
*/
-function resolveLinks() {
+function resolveLinks(currentFile, resolveFile, $) {
+ var currentDirectory = path.dirname(currentFile);
+ return editHTMLElement($, 'a', function($a) {
+ var href = $a.attr('href');
+
+ if (location.isExternal(href)) {
+ $a.attr('_target', 'blank');
+ return;
+ }
+
+ // Calcul absolute path for this
+ href = LocationUtils.toAbsolute(href, currentDirectory, currentDirectory);
+
+ // Resolve file
+ href = resolveFile(href);
+
+ // Convert back to relative
+ href = LocationUtils.relative(currentDirectory, href);
+
+ $a.attr('href', href);
+ });
}
module.exports = resolveLinks;