summaryrefslogtreecommitdiffstats
path: root/lib/models
diff options
context:
space:
mode:
Diffstat (limited to 'lib/models')
-rw-r--r--lib/models/__tests__/summaryArticle.js30
-rw-r--r--lib/models/summaryArticle.js33
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}