Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80635 views
1
/**
2
* @providesModule Header
3
* @jsx React.DOM
4
*/
5
6
var React = require('React');
7
8
var Header = React.createClass({
9
slug: function(string) {
10
// var accents = "àáäâèéëêìíïîòóöôùúüûñç";
11
var accents = "\u00e0\u00e1\u00e4\u00e2\u00e8"
12
+ "\u00e9\u00eb\u00ea\u00ec\u00ed\u00ef"
13
+ "\u00ee\u00f2\u00f3\u00f6\u00f4\u00f9"
14
+ "\u00fa\u00fc\u00fb\u00f1\u00e7";
15
16
var without = "aaaaeeeeiiiioooouuuunc";
17
18
return string
19
.toString()
20
21
// Handle uppercase characters
22
.toLowerCase()
23
24
// Handle accentuated characters
25
.replace(
26
new RegExp('[' + accents + ']', 'g'),
27
function (c) { return without.charAt(accents.indexOf(c)); })
28
29
// Dash special characters
30
.replace(/[^a-z0-9]/g, '-')
31
32
// Compress multiple dash
33
.replace(/-+/g, '-')
34
35
// Trim dashes
36
.replace(/^-|-$/g, '');
37
},
38
39
render: function() {
40
var slug = this.slug(this.props.toSlug || this.props.children);
41
var Heading = 'h' + this.props.level;
42
43
return (
44
<Heading {...this.props}>
45
<a className="anchor" name={slug}></a>
46
{this.props.children}
47
{' '}<a className="hash-link" href={'#' + slug}>#</a>
48
</Heading>
49
);
50
}
51
});
52
53
module.exports = Header;
54
55