Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/glorious-codes/glorious-triven
A multi-language markdown-based blog generator.
https://github.com/glorious-codes/glorious-triven
blog markdown multilingual rss
Last synced: 6 days ago
JSON representation
A multi-language markdown-based blog generator.
- Host: GitHub
- URL: https://github.com/glorious-codes/glorious-triven
- Owner: glorious-codes
- Created: 2021-06-11T20:34:19.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-10-17T05:03:54.000Z (about 1 year ago)
- Last Synced: 2024-05-01T09:58:39.439Z (7 months ago)
- Topics: blog, markdown, multilingual, rss
- Language: JavaScript
- Homepage:
- Size: 919 KB
- Stars: 7
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# Triven
> A multi-language markdown-based blog generator.[![CircleCI](https://circleci.com/gh/glorious-codes/glorious-triven/tree/master.svg?style=svg)](https://circleci.com/gh/glorious-codes/glorious-triven/tree/master)
[![Coverage Status](https://coveralls.io/repos/github/glorious-codes/glorious-triven/badge.svg?branch=master)](https://coveralls.io/github/glorious-codes/glorious-triven?branch=master)## Installation
```
npm install -D @glorious/triven
```## Usage
To get started with Triven, you need to run the following command at the root directory of your project:
```
npx triven build
```After running this command, a directory called `triven` and a demo post will be created.
### Setup
You don't need to setup anything to see Triven in action. By default, Triven will look for markdown files in the project directory (and sub-directories) and will generate a blog - ready to be published - inside a directory called *triven*.
However, you can override the default configuration values used to build your blog creating a file called `triven.config.js` in the root directory of your project containing the following options:
``` javascript
// triven.config.jsmodule.exports = {
title: 'Your Blog Title',
// [Required] Used as browser window title on homepage.
// Default: Triven.
url: 'https://rafaelcamargo.com/blog',
// [Required ]Production URL where the blog will be deployed to.
// Used to build absolute URLs on RSS Feeds.
sourceDirectory: './posts',
// Directory where triven will look for markdown files.
// Default: Root directory of your project ('./').
outputDirectory: './dist',
// Directory where the final files will be saved.
// Default: './triven'.
lang: 'pt-BR',
// Used as default language for articles and homepage.
// Default: en-US.
homepagePostIntroType: 'description'
// Content to be used as post introduction on homepage.
// Options:
// 1. Post Excerpt: 'excerpt'
// 2. Post Description: 'description'
// Default: 'excerpt'.
// Note: Excerpts are automatically generated using
// the first 340 characters of the post body.
templates: {
article: './some/path/to/article/template.html',
// You can optionally set an HTML file as template for articles
homepage: './some/path/to/homepage/template.html',
// You can optionally set an HTML file as template for homepage
vars: {
// You can optionally set variables in your templates
// to be replaced with custom values in build time:
someVar: 'someValue',
// If a variable depends on the page language,
// you can set a function as value to handle any custom logic:
greet: lang => lang == 'pt-BR' ? 'Olá' : 'Hello!'
}
},
// You can optionally set custom translations for labels used by Triven:
translations: {
'en-US': {
availableRSSFeeds: 'RSS Feed options', // Default: 'Available RSS Feeds'
availableLanguages: 'Language options', // Default: 'Available languages'
currentLanguage: 'Selected language', // Default: 'Current language'
multiLanguage: 'All languages', // Default: 'Multi-language'
newer: 'Previous page', // Default: 'Newer'
older: 'Next page', // Default: 'Older'
readMore: 'Keep reading', // Default: 'Read more'
rssFeed: 'Feed', // Default: 'RSS Feed'
rssFeeds: 'Feeds', // Default: 'RSS Feeds'
seeAllPosts: 'All publications' // Default: 'See all posts'
},
// You can add specific-language dictionaries if you have a multi-language blog:
'pt-BR': {
// Portuguese translations
}
},
formatters: {
// You can optionally set a custom date formatter.
// Formatter will receive the date string and the language set on the
// respective post markdown file.
// By default, date format will be month/day/year for US English posts and
// day/month/year for any other language.
date: (isoDateString, lang) => {
const months = {
'en-US': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
'pt-BR': ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']
}
const [year, month, day] = isoDateString.split('-');
const monthName = months[lang][parseInt(month)-1];
return lang == 'en-US' ? `${monthName} ${parseInt(day)}, ${year}` : `${day} de ${monthName} de ${year}`;
}
}
}
```### Markdown Articles
You can prefix your Markdown articles with a header containing some metadata:
| Name | Description | Default Value |
|------|-------------|---------------|
| title | Title for your post | Untitled |
| lang | Language which your article is written in | language set on `triven.config.js` or en-US |
| date | Date expressed according to ISO 8601 (YYYY-MM-DD) | |
| description | A brief description of your post (used in HTML meta tags) | |
| keywords | Keywords for your post (used in HTML meta tags) | |
| unlisted | Set as `true` to keep the post out of homepages | |
| externalUrl | URL for a post published in an external website | |
| excerpt | An optional text representing the first paragraphs of your post | First 340 chars of your post |**Important:** Do not forget to separate your article from its metadata with three dashes.
#### Markdown Example
```
// hello-world.mdtitle: Hello World!
date: 2021-08-20
description: Saying hello to the world.
keywords: hello, world---
It's very easy to get started with Triven.
```### Custom Templates
You can define your own HTML to be used as template for homepage and article. Just make sure that your HTML contain at least the following markup:
#### Homepage
``` html
{{ triven:posts }}
{{ triven:settings }}
```
#### Article
``` html
{{ triven:article }}
```
You can optionally set variables in your templates to be replaced in build time. To do so, you need define them as key/value pairs in your `triven.config.js`, and reference them in your template HTML file as follow:
``` javascript
// triven.config.jsconst date = new Date();
module.exports = {
templates: {
vars: {
copywrite: `©${date.getFullYear()} Triven`
}
}
}
`````` html
{{ triven:posts }}
{{ triven:settings }}
{{ copywrite }}
```
**Note:** Variables in templates are *space insensitive*. You can write them as `{{copywrite}}` or `{{ copywrite }}`.
## Contributing
If you want to contribute to this project, follow [these instructions](CONTRIBUTING.md).