hexo-util
![devDependencies Status](https://david-dm.org/hexojs/hexo-util/dev-status.svg)
Utilities for Hexo.
Installation
$ npm install hexo-util --save
Usage
var util = require('hexo-util');
CacheStream()
Caches contents piped to the stream.
var stream = new CacheStream();
fs.createReadStream('/path/to/file').pipe(stream);
stream.on('finish', function(){
console.log(stream.getCache());
stream.destroy();
});
camelCaseKeys(obj, options)
Convert object keys to camelCase. Original keys will be converted to getter/setter and sync to the camelCase keys.
camelCaseKeys({
foo_bar: 'test'
});
createSha1Hash()
return SHA1 hash object.
This is the same as calling createHash('utf8')
in the node.js native module crypto.
const sha1 = createSha1Hash();
fs.createReadStream('/path/to/file')
.pipe(sha1)
.on('finish', () => {
console.log(sha1.read());
});
encodeURL(str)
Encode URL or path into a safe format. Domain is encoded into punycode when necessary.
encodeURL('http://foo.com/bár')
encodeURL('http://bár.com/baz')
encodeURL('/foo/bár/')
escapeDiacritic(str)
Escapes diacritic characters in a string.
escapeHTML(str)
Escapes HTML entities in a string.
escapeRegex(str)
Escapes special characters in a regular expression.
full_url_for(path)
Returns a url with the config.url prefixed. Output is encoded automatically. Requires bind(hexo)
.
_config.yml
url: https://example.com/blog
full_url_for('/a/path')
gravatar(str, [options])
Returns the gravatar image url from an email.
If you didn't specify the [options] parameter, the default options will apply. Otherwise, you can set it to a number which will then be passed on as the size parameter to Gravatar. Finally, if you set it to an object, it will be converted into a query string of parameters for Gravatar.
Option | Description | Default |
---|
s | Output image size | 80 |
d | Default image | |
f | Force default | |
r | Rating | |
More info: Gravatar
gravatar('a@abc.com')
gravatar('a@abc.com', 40)
gravatar('a@abc.com' {s: 40, d: 'https://via.placeholder.com/150'})
hash(str)
Generates SHA1 hash.
hash('123456');
HashStream()
[deprecated] use createSha1Hash()
.
Generates SHA1 hash with a transform stream.
var stream = new HashStream();
fs.createReadStream('/path/to/file')
.pipe(stream)
.on('finish', function(){
console.log(stream.read());
});
highlight(str, [options])
Syntax highlighting for a code block.
Option | Description | Default |
---|
gutter | Whether to show line numbers | true |
wrap | Whether to wrap the code block | true |
firstLine | First line number | 1 |
hljs | Whether to use the hljs-* prefix for CSS classes | false |
lang | Language | |
caption | Caption | |
tab | Replace tabs | |
autoDetect | Detect language automatically | false |
htmlTag(tag, attrs, text)
Creates a html tag.
htmlTag('img', {src: 'example.png'})
htmlTag('a', {href: 'http://hexo.io/'}, 'Hexo')
Pattern(rule)
Parses the string and tests if the string matches the rule. rule
can be a string, a regular expression or a function.
var pattern = new Pattern('posts/:id');
pattern.match('posts/89');
var pattern = new Pattern('posts/*path');
pattern.match('posts/2013/hello-world');
Permalink(rule, [options])
Parses a permalink.
Option | Description |
---|
segments | Customize the rule of a segment in the permalink |
var permalink = new Permalink(':year/:month/:day/:title', {
segments: {
year: /(\d{4})/,
month: /(\d{2})/,
day: /(\d{2})/
}
});
permalink.parse('2014/01/31/test');
permalink.test('2014/01/31/test');
permalink.stringify({year: '2014', month: '01', day: '31', title: 'test'})
relative_url(from, to)
Returns the relative URL from from
to to
. Output is encoded automatically. Requires bind(hexo)
.
relative_url('foo/bar/', 'css/style.css')
slugize(str, [options])
Transforms a string into a clean URL-friendly string.
Option | Description | Default |
---|
separator | Separator | - |
transform | Transform the string into lower case (1 ) or upper case (2 ) | |
slugize('Hello World') = 'Hello-World'
slugize('Hellô Wòrld') = 'Hello-World'
slugize('Hello World', {separator: '_'}) = 'Hello_World'
slugize('Hello World', {transform: 1}) = 'hello-world'
slugize('Hello World', {transform: 2}) = 'HELLO-WORLD'
spawn(command, [args], [options])
Launches a new process with the given command
. This method returns a promise.
Option | Description | Default |
---|
cwd | Current working directory of the child process | |
env | Environment key-value pairs | |
stdio | Child's stdio configuration | |
detached | The child will be a process group leader | |
uid | Sets the user identity of the process | |
gid | Sets the group identity of the process | |
verbose | Display messages on the console | false |
encoding | Sets the encoding of the output string | utf8 |
spawn('cat', 'test.txt').then(function(content){
console.log(content);
});
stripHTML(str)
Removes HTML tags in a string.
wordWrap(str, [options])
Wraps the string no longer than line width. This method breaks on the first whitespace character that does not exceed line width.
Option | Description | Default |
---|
width | Line width | 80 |
wordWrap('Once upon a time')
wordWrap('Once upon a time, in a kingdom called Far Far Away, a king fell ill, and finding a successor to the throne turned out to be more trouble than anyone could have imagined...')
wordWrap('Once upon a time', {width: 8})
wordWrap('Once upon a time', {width: 1})
truncate(str, [options])
Truncates a given text after a given length
if text is longer than length
. The last characters will be replaced with the omission
option for a total length not exceeding length
.
Option | Description | Default |
---|
length | Max length of the string | 30 |
omission | Omission text | ... |
separator | truncate text at a natural break | |
truncate('Once upon a time in a world far far away')
truncate('Once upon a time in a world far far away', {length: 17})
truncate('Once upon a time in a world far far away', {length: 17, separator: ' '})
truncate('And they found that many people were sleeping better.', {length: 25, omission: '... (continued)'})
url_for(path, [option])
Returns a url with the root path prefixed. Output is encoded automatically. Requires bind(hexo)
.
Option | Description | Default |
---|
relative | Output relative link | Value of config.relative_link |
_config.yml
root: /blog/
url_for('/a/path')
Relative link, follows relative_link
option by default
e.g. post/page path is '/foo/bar/index.html'
_config.yml
relative_link: true
url_for('/css/style.css')
url_for('/css/style.css', {relative: false})
bind(hexo)
Following utilities require bind(hexo)
/ bind(this)
to parse the user config when initializing:
Below examples demonstrate four approaches of creating a helper (each example is separated by /******/
),
const url_for = require('hexo-util').url_for.bind(hexo);
hexo.extend.helper.register('test_url', (str) => {
return url_for(str);
})
const url_for = require('hexo-util').url_for.bind(hexo)
function testurlHelper(str) {
return url_for(str);
}
hexo.extend.helper.register('test_url', testurlHelper);
module.exports = function(str) {
const url_for = require('hexo-util').url_for.bind(this);
return url_for(str);
}
hexo.extend.helper.register('test_url', require('./test_url'));
function testurlHelper(str) {
const url_for = require('hexo-util').url_for.bind(this);
return url_for(str);
}
module.exports = {
testurlHelper: testurlHelper
}
hexo.extend.helper.register('test_url', require('./test_url').testurlHelper);
License
MIT