Extend Marked.js in order to support React Native's code players (#109)

* Extend Marked.js to support SnackPlayer and the WebPlayer, as used in React Native
This commit is contained in:
Héctor Ramos 2017-10-04 08:56:55 -07:00 committed by GitHub
parent 069d5b3870
commit 419a11af3e
3 changed files with 67 additions and 9 deletions

View file

@ -71,6 +71,8 @@ class Head extends React.Component {
{includeGithubButton &&
<script async defer src="https://buttons.github.io/buttons.js" />
}
<script type="text/javascript" src={this.props.config.baseUrl + "js/webplayer.js"} />
<script type="text/javascript" src="https://snack.expo.io/embed.js" />
</head>
);
}

View file

@ -11,8 +11,10 @@
const React = require("react");
import DOM from 'react-dom-factories';
const Prism = require("./Prism.js");
const Header = require("./Header.js");
const Prism = require("./Prism");
const Header = require("./Header");
const WebPlayer = require('./WebPlayer');
const SnackPlayer = require('./SnackPlayer');
/**
* Block-Level Grammar
@ -816,12 +818,32 @@ Parser.prototype.tok = function() {
</Header>
);
}
case "code": {
return (
<Prism language={this.token.lang}>
{this.token.text}
</Prism>
);
case 'code': {
const lang = this.token.lang, text = this.token.text;
if (
lang && lang.indexOf('ReactNativeWebPlayer') === 0
) {
return (
<WebPlayer params={lang.split('?')[1]}>
{text}
</WebPlayer>
);
}
if (lang && lang.indexOf('SnackPlayer') === 0) {
return (
<SnackPlayer params={lang.split('?')[1]}>
{text}
</SnackPlayer>
);
}
if (lang) {
return <Prism language={lang}>{text}</Prism>;
}
return <Prism>{text}</Prism>;
}
case "table": {
const table = [];

View file

@ -1994,3 +1994,37 @@ footer .copyright {
display: none;
}
}
/** Web player **/
.web-player > iframe {
display: none;
}
.web-player > .prism {
display: none;
}
.web-player.desktop > iframe {
display: block; }
.web-player.mobile > .prism {
display: block; }
.token.keyword {
color: #1990b8;
}
.token.string,
.token.regex {
color: #2f9c0a;
}
.token.boolean,
.token.number {
color: #c92c2c;
}
.token.comment {
color: #7d8b99;
}