mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-17 08:05:19 +00:00
101 lines
2.1 KiB
JavaScript
101 lines
2.1 KiB
JavaScript
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;
|