82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
var _ = require('lodash');
|
|
var path = require('path');
|
|
var util = require('util');
|
|
var BackboneFile = require('./file');
|
|
|
|
function Language(title, folder) {
|
|
var that = this;
|
|
|
|
this.title = title;
|
|
this.folder = folder;
|
|
|
|
Object.defineProperty(this, 'id', {
|
|
get: function() {
|
|
return path.basename(that.folder);
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
A Langs is a list of languages stored in a LANGS.md file
|
|
*/
|
|
function Langs() {
|
|
BackboneFile.apply(this, arguments);
|
|
|
|
this.languages = [];
|
|
}
|
|
util.inherits(Langs, BackboneFile);
|
|
|
|
Langs.prototype.type = 'langs';
|
|
|
|
// Parse the readme content
|
|
Langs.prototype.parse = function(content) {
|
|
var that = this;
|
|
|
|
return this.parser.langs(content)
|
|
.then(function(langs) {
|
|
that.languages = _.map(langs, function(entry) {
|
|
return new Language(entry.title, entry.path);
|
|
});
|
|
});
|
|
};
|
|
|
|
// Return the list of languages
|
|
Langs.prototype.list = function() {
|
|
return this.languages;
|
|
};
|
|
|
|
// Return default/main language for the book
|
|
Langs.prototype.getDefault = function() {
|
|
return _.first(this.languages);
|
|
};
|
|
|
|
// Return true if a language is the default one
|
|
// "lang" cam be a string (id) or a Language entry
|
|
Langs.prototype.isDefault = function(lang) {
|
|
lang = lang.id || lang;
|
|
return (this.cound() > 0 && this.getDefault().id == lang);
|
|
};
|
|
|
|
// Return the count of languages
|
|
Langs.prototype.count = function() {
|
|
return _.size(this.languages);
|
|
};
|
|
|
|
// Return templating context for the languages list
|
|
Langs.prototype.getContext = function() {
|
|
if (this.count() == 0) return {};
|
|
|
|
return {
|
|
languages: {
|
|
list: _.map(this.languages, function(lang) {
|
|
return {
|
|
id: lang.id,
|
|
title: lang.title
|
|
};
|
|
})
|
|
}
|
|
};
|
|
};
|
|
|
|
module.exports = Langs;
|