vuepress-plugin-feed
v0.1.9
Published
RSS, Atom, and JSON feeds generator plugin for VuePress 1.x
Downloads
2,613
Maintainers
Readme
VuePress Plugin Feed
RSS, Atom, and JSON feeds generator plugin for VuePress 1.x
Install
$ npm install -D vuepress-plugin-feed
# or
$ yarn add -D vuepress-plugin-feed
Usage
Add vuepress-plugin-feed
in your site or theme config file.
// .vuepress/config.js
// or
// .vuepress/theme/index.js
// set your global feed options - override in page frontmatter `feed`
const feed_options = {
canonical_base: 'https://webmasterish.com',
};
module.exports = {
plugins: [
[ 'feed', feed_options ]
]
}
Page frontmatter
Page frontmatter.feed
is optional. It can be used to override the defaults.
Check the Page class
for more details.
---
title: Page Title
feed:
enable: true
title: Title used in feed
description: Description used in feed
image: /public/image.png
author:
-
name: Author
email: [email protected]
link: http://doamin.tld
contributor:
-
name: Contributor
email: [email protected]
link: http://doamin.tld
---
How pages are added as feed items
A page is auto added as a feed item if one the following conditions is met:
frontmatter.feed.enable === true
frontmatter.type === 'post'
- it resides in whatever the
posts_directories
are set to (the defaults areblog
and_posts
)
if you need to exclude a particular page that meets one of the conditions above,
you can use frontmatter.feed.enable === false
.
Details on how pages are filtered can be found in PLUGIN.is_feed_page()
.
The PLUGIN.is_feed_page()
function is the default way of filtering the pages,
you can override it using is_feed_page
option (see Options section below).
Options
See Plugin Option API official docs
Default options
You can override default options in 2 ways:
- Global plugin options set in
.vuepress/config.js
or.vuepress/theme/index.js
as described in Usage - Individual page/post
frontmatter
as shown in Pagefrontmatter
const {
title,
description
} = context.getSiteData ? context.getSiteData() : context;
// -----------------------------------------------------------------------------
// Feed class options
// @see: https://github.com/jpmonette/feed#example
const feed_options = {
title,
description,
generator: PLUGIN.homepage,
// ---------------------------------------------------------------------------
// the following are auto populated in PLUGIN.get_options()
// if they are not set as options
/*
id,
link,
feedLinks,
*/
// ---------------------------------------------------------------------------
// ref:
/*
title: "Feed Title",
description: "This is my personal feed!",
id: "http://example.com/",
link: "http://example.com/",
image: "http://example.com/image.png",
favicon: "http://example.com/favicon.ico",
copyright: "All rights reserved 2013, John Doe",
updated: new Date(2013, 6, 14), // optional, default = today
generator: "awesome", // optional, default = 'Feed for Node.js'
feedLinks: {
json: "https://example.com/json",
atom: "https://example.com/atom"
},
author: {
name: "John Doe",
email: "[email protected]",
link: "https://example.com/johndoe"
}
*/
};
// -----------------------------------------------------------------------------
const default_options = {
// required; it can also be used as enable/disable
canonical_base: '',
// ---------------------------------------------------------------------------
// Feed class options - @see: https://github.com/jpmonette/feed#example
// optional - auto-populated based on context.getSiteData()
feed_options,
// ---------------------------------------------------------------------------
// @notes:
// property name is also the name of the jpmonette/feed package function
feeds: {
rss2: {
enable : true,
file_name : 'rss.xml',
head_link : {
enable: true,
type : 'application/rss+xml',
title : '%%site_title%% RSS Feed',
}
},
// -------------------------------------------------------------------------
atom1: {
enable : true,
file_name : 'feed.atom',
head_link : {
enable: true,
type : 'application/atom+xml',
title : '%%site_title%% Atom Feed',
}
},
// -------------------------------------------------------------------------
json1: {
enable : true,
file_name : 'feed.json',
head_link : {
enable: true,
type : 'application/json',
title : '%%site_title%% JSON Feed',
}
},
},
// ---------------------------------------------------------------------------
// page/post description sources
// order of what gets the highest priority:
//
// 1. frontmatter
// 2. page excerpt
// 3. content markdown paragraph
// 4. content regular html <p>
description_sources: [
'frontmatter',
'excerpt',
// markdown paragraph regex
// @todo: needs work
//
/^((?:(?!^#)(?!^\-|\+)(?!^[0-9]+\.)(?!^!\[.*?\]\((.*?)\))(?!^\[\[.*?\]\])(?!^\{\{.*?\}\})[^\n]|\n(?! *\n))+)(?:\n *)+\n/gim,
//
// this excludes blockquotes using `(?!^>)`
///^((?:(?!^#)(?!^\-|\+)(?!^[0-9]+\.)(?!^!\[.*?\]\((.*?)\))(?!^>)(?!^\[\[.*?\]\])(?!^\{\{.*?\}\})[^\n]|\n(?! *\n))+)(?:\n *)+\n/gim,
// html paragraph regex
/<p(?:.*?)>(.*?)<\/p>/i,
],
// ---------------------------------------------------------------------------
// page/post image sources
// order of what gets the highest priority:
//
// 1. frontmatter
// 2. content markdown image such as `![alt text](http://url)`
// 3. content regular html img
image_sources: [
'frontmatter',
/!\[.*?\]\((.*?)\)/i, // markdown image regex
/<img.*?src=['"](.*?)['"]/i, // html image regex
],
// ---------------------------------------------------------------------------
// pages in current directories will be auto added as feed
// unless they are disabled using their frontmatter
// this option is used by the default is_feed_page function
posts_directories: ['/blog/', '/_posts/'],
// ---------------------------------------------------------------------------
// function to check if the page is to be used in a feed item
is_feed_page: PLUGIN.is_feed_page, // function
// ---------------------------------------------------------------------------
count: 20,
// optional sorting function for the entries.
// Gets the array entries as the input, expects the sorted array
// as its output.
// e.g.: sort: entries => _.reverse( _.sortBy( entries, 'date' ) ),
// Don't forget to do a `const _ = require('lodash');` to be able to use `_`!
sort: entries => entries,
// ---------------------------------------------------------------------------
// supported - use in config as needed
// category
// contributor
};
Reference
- VuePress official plugin docs
- VuePress official Front Matter
- jpmonette/feed
- RSS 2.0 specificatiion
- Atom feed
- JSON feed
Related Plugins
License
MIT © webmasterish