blob: 3d642fc2a74e6229d3a7201dcf98436261cdb9f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
var Immutable = require('immutable');
var location = require('../utils/location');
/*
An article represents an entry in the Summary / table of Contents
*/
var SummaryArticle = Immutable.Record({
level: String(),
title: String(),
ref: String(),
articles: Immutable.List()
});
SummaryArticle.prototype.getLevel = function() {
return this.get('level');
};
SummaryArticle.prototype.getTitle = function() {
return this.get('title');
};
SummaryArticle.prototype.getRef = function() {
return this.get('ref');
};
SummaryArticle.prototype.getArticles = function() {
return this.get('articles');
};
/**
Get path (without anchor) to the pointing file
@return {String}
*/
SummaryArticle.prototype.getPath = function() {
var ref = this.getRef();
var parts = ref.split('#');
var pathname = (parts.length > 1? parts.slice(0, -1).join('#') : ref);
// Normalize path to remove ('./', etc)
return location.normalize(pathname);
};
/**
Get anchor for this article (or undefined)
@return {String}
*/
SummaryArticle.prototype.getAnchor = function() {
var ref = this.getRef();
var parts = ref.split('#');
var anchor = (parts.length > 1? '#' + parts[parts.length - 1] : null);
return anchor;
};
/**
Is article pointing to a page of an absolute url
@return {Boolean}
*/
SummaryArticle.prototype.isPage = function() {
return !this.isExternal() && this.getRef();
};
/**
Is article pointing to aan absolute url
@return {Boolean}
*/
SummaryArticle.prototype.isExternal = function() {
return location.isExternal(this.getRef());
};
/**
Create a SummaryArticle
@param {Object} def
@return {SummaryArticle}
*/
SummaryArticle.create = function(def) {
var articles = (def.articles || []).map(function(article) {
if (article instanceof SummaryArticle) {
return article;
}
return SummaryArticle.create(article);
});
return new SummaryArticle({
title: def.title,
ref: def.ref || def.path,
articles: Immutable.List(articles)
});
};
module.exports = SummaryArticle;
|