diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-06-29 10:31:06 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-06-29 10:31:06 +0200 |
commit | c9c2dde2b63505177265c66b1a6c4dd358415416 (patch) | |
tree | 444b6a539c93f677c6f8ee5eac67dca8de7cdab8 /lib/models | |
parent | d9a1d387c7a61aa18cdb9b2916bc761e0f902804 (diff) | |
download | gitbook-c9c2dde2b63505177265c66b1a6c4dd358415416.zip gitbook-c9c2dde2b63505177265c66b1a6c4dd358415416.tar.gz gitbook-c9c2dde2b63505177265c66b1a6c4dd358415416.tar.bz2 |
Add method "isFile" and "isReadme" in SummaryArticle
Diffstat (limited to 'lib/models')
-rw-r--r-- | lib/models/__tests__/summaryArticle.js | 30 | ||||
-rw-r--r-- | lib/models/summaryArticle.js | 33 |
2 files changed, 60 insertions, 3 deletions
diff --git a/lib/models/__tests__/summaryArticle.js b/lib/models/__tests__/summaryArticle.js index 7c4bc57..22a7a20 100644 --- a/lib/models/__tests__/summaryArticle.js +++ b/lib/models/__tests__/summaryArticle.js @@ -1,4 +1,5 @@ var SummaryArticle = require('../summaryArticle'); +var File = require('../file'); describe('SummaryArticle', function() { describe('createChildLevel', function() { @@ -18,6 +19,35 @@ describe('SummaryArticle', function() { expect(article.createChildLevel()).toBe('1.1.2'); }); }); + + describe('isFile', function() { + it('must return true when exactly the file', function() { + var article = SummaryArticle.create({ + ref: 'hello.md' + }, '1.1'); + var file = File.createWithFilepath('hello.md'); + + expect(article.isFile(file)).toBe(true); + }); + + it('must return true when path is not normalized', function() { + var article = SummaryArticle.create({ + ref: '/hello.md' + }, '1.1'); + var file = File.createWithFilepath('hello.md'); + + expect(article.isFile(file)).toBe(true); + }); + + it('must return false when has anchor', function() { + var article = SummaryArticle.create({ + ref: 'hello.md#world' + }, '1.1'); + var file = File.createWithFilepath('hello.md'); + + expect(article.isFile(file)).toBe(false); + }); + }); }); diff --git a/lib/models/summaryArticle.js b/lib/models/summaryArticle.js index 9b5b653..6da8d1d 100644 --- a/lib/models/summaryArticle.js +++ b/lib/models/summaryArticle.js @@ -40,7 +40,8 @@ SummaryArticle.prototype.getDepth = function() { }; /** - * Get path (without anchor) to the pointing file + * Get path (without anchor) to the pointing file. + * It also normalizes the file path. * * @return {String} */ @@ -58,8 +59,8 @@ SummaryArticle.prototype.getPath = function() { var pathname = (parts.length > 1? parts.slice(0, -1).join('#') : ref); - // Normalize path to remove ('./', etc) - return location.normalize(pathname); + // Normalize path to remove ('./', '/...', etc) + return location.flatten(pathname); }; /** @@ -107,6 +108,32 @@ SummaryArticle.prototype.isPage = function() { }; /** + * Check if this article is a file (exatcly) + * + * @param {File} file + * @return {Boolean} + */ +SummaryArticle.prototype.isFile = function(file) { + return ( + file.getPath() === this.getPath() + && this.getAnchor() === undefined + ); +}; + +/** + * Check if this article is the introduction of the book + * + * @param {Book|Readme} book + * @return {Boolean} + */ +SummaryArticle.prototype.isReadme = function(book) { + var readme = book.getFile? book : book.getReadme(); + var file = readme.getFile(); + + return this.isFile(file); +}; + +/** * Is article pointing to aan absolute url * * @return {Boolean} |