summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-plugin-sharing/src/index.js
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-10-13 13:23:19 +0200
committerSamy Pesse <samypesse@gmail.com>2016-10-13 13:23:19 +0200
commitc42c5897fee1841d2be0207faeda81bc42f250e2 (patch)
tree45fd9a773ba05ae362390e63ce0f2eaaa0154ede /packages/gitbook-plugin-sharing/src/index.js
parent3aea3e5d88384822440517c9a2b722c405547155 (diff)
downloadgitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.zip
gitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.tar.gz
gitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.tar.bz2
Refactor code of plugin sharing
Diffstat (limited to 'packages/gitbook-plugin-sharing/src/index.js')
-rw-r--r--packages/gitbook-plugin-sharing/src/index.js137
1 files changed, 2 insertions, 135 deletions
diff --git a/packages/gitbook-plugin-sharing/src/index.js b/packages/gitbook-plugin-sharing/src/index.js
index 357ccbb..174adfc 100644
--- a/packages/gitbook-plugin-sharing/src/index.js
+++ b/packages/gitbook-plugin-sharing/src/index.js
@@ -1,142 +1,9 @@
const GitBook = require('gitbook-core');
-const {
- React,
- Dropdown
-} = GitBook;
-const { string, arrayOf, shape, func } = React.PropTypes;
-
-const SITES = require('./SITES');
-const optionsShape = require('./optionsShape');
-const siteShape = shape({
- label: string.isRequired,
- icon: string.isRequired,
- onShare: func.isRequired
-});
+const SharingButtons = require('./components/SharingButtons');
module.exports = GitBook.createPlugin({
activate: (dispatch, getState, { Components }) => {
// Dispatch initialization actions
- dispatch(Components.registerComponent(Sharing, { role: 'toolbar:buttons:right' }));
- },
- deactivate: (dispatch, getState) => {
- // Dispatch cleanup actions
- },
- reduce: (state, action) => state
-});
-
-/**
- * Displays the group of sharing buttons
- */
-let Sharing = React.createClass({
- propTypes: {
- options: optionsShape.isRequired,
- page: GitBook.Shapes.Page.isRequired
- },
-
- onShare(site) {
- site.onShare(location.href, this.props.page.title);
- },
-
- render() {
- const { options } = this.props;
-
- // Highlighted sites
- const mainButtons = SITES
- .ALL
- .filter(id => options[id])
- .map(id => <SiteButton key={id} onShare={this.onShare} site={SITES[id]} />);
-
- // Other sites
- let shareButton = undefined;
- if (options.all.length > 0) {
- shareButton = (
- <ShareButton siteIds={options.all}
- onShare={this.onShare} />
- );
- }
-
- return (
- <GitBook.ButtonGroup>
- { mainButtons }
- { shareButton }
- </GitBook.ButtonGroup>
- );
- }
-});
-
-function mapStateToProps(state) {
- let options = state.config.getIn(['pluginsConfig', 'sharing']);
- if (options) {
- options = options.toJS();
- } else {
- options = { all: [] };
- }
-
- return {
- page: state.page,
- options
- };
-}
-
-Sharing = GitBook.connect(Sharing, mapStateToProps);
-
-// An individual site sharing button
-const SiteButton = React.createClass({
- propTypes: {
- site: siteShape.isRequired,
- onShare: func.isRequired
- },
-
- onClick(e) {
- e.preventDefault();
- this.props.onShare(this.props.site);
- },
-
- render() {
- const { site } = this.props;
-
- return (
- <GitBook.Button onClick={this.onClick}>
- <GitBook.Icon id={site.icon}/>
- </GitBook.Button>
- );
- }
-});
-
-// Share button with dropdown list of sites
-const ShareButton = React.createClass({
- propTypes: {
- siteIds: arrayOf(string).isRequired,
- onShare: func.isRequired
- },
-
- getInitialState() {
- return { open: false };
- },
-
- onToggle() {
- this.setState({ open: !this.state.open });
- },
-
- render() {
- const { siteIds, onShare } = this.props;
-
- const items = siteIds.map((id) => (
- <Dropdown.Item onClick={() => onShare(SITES[id])} key={id}>
- {SITES[id].label}
- </Dropdown.Item>
- ));
-
- return (
- <Dropdown.Container>
- <GitBook.Button onClick={this.onToggle}>
- <GitBook.Icon id="share-alt" />
- </GitBook.Button>
-
- <Dropdown.Menu open={this.state.open}>
- {items}
- </Dropdown.Menu>
- </Dropdown.Container>
- );
+ dispatch(Components.registerComponent(SharingButtons, { role: 'toolbar:buttons:right' }));
}
});