diff --git a/app/components/TrixEditor.jsx b/app/components/TrixEditor.jsx new file mode 100644 index 0000000000000000000000000000000000000000..4bd38e60eeb8b259e10eac4ae24234af39d1facd --- /dev/null +++ b/app/components/TrixEditor.jsx @@ -0,0 +1,79 @@ +// WIP EXPERIMENTAL + +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import * as Actions from '../actions' +import _ from 'lodash' +import React from 'react' +import 'trix/dist/trix.css' +require('script!../../node_modules/trix/dist/trix.js') + +// import '../scss/components/_trixEditor' + +class TrixEditor extends React.Component { + constructor (props) { + super(props) + this._onChange = this._onChange.bind(this) + } + + componentDidMount () { + document.querySelector('trix-editor').addEventListener('trix-change', this._onChange) + } + + componentWillUnmount () { + document.querySelector('trix-editor').removeEventListener('trix-change', this._onChange) + } + + _onChange (event) { + let element = document.querySelector('trix-editor') + let fragment = Object.assign(this.props.fragment, { + source: JSON.stringify(element.editor), + presentation: element.innerHTML + }) + this.props.actions.updateFragment(fragment) + } + + render () { + let editor + + if (this.props.fragment) { + editor = <div> + <input id='content' value={this.props.fragment.presentation} type='hidden' name='content'/> + <trix-editor id='trix-editor' input='content'></trix-editor> + </div> + } else { + editor = <trix-editor></trix-editor> + } + + return ( + <div> + {editor} + </div> + ) + } +} + +TrixEditor.propTypes = { + fragment: React.PropTypes.object, + actions: React.PropTypes.object +} + +function mapStateToProps (state) { + console.log(state) + return { + fragment: _.find(state.fragments, function (f) { + return f._id === state.router.params.id + }) + } +} + +function mapDispatchToProps (dispatch) { + return { + actions: bindActionCreators(Actions, dispatch) + } +} + +export default connect( + mapStateToProps, + mapDispatchToProps +)(TrixEditor) diff --git a/app/routes.jsx b/app/routes.jsx index 7bd75550306f2d2aa7c8f69a58f68df91bd351c3..658b5db6c02825ac6cd31a1341c9a63f653c4592 100644 --- a/app/routes.jsx +++ b/app/routes.jsx @@ -6,7 +6,7 @@ import App from './containers/App' // Admin import About from './components/About' import BlogManager from './containers/BlogManager' -import Editor from './components/SubstanceEditor' +import Editor from './components/TrixEditor' // Public import Share from './components/Share' diff --git a/package.json b/package.json index 1ec85b149866b76dd1aa72baabff8386961c0f2b..27f86675356cd55304a61f04ccdaa39bdb755a26 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,9 @@ "sass-loader": "^3.0.0", "serve-favicon": "~2.3.0", "style-loader": "^0.12.3", + "script-loader": "^0.6.1", "lens-writer": "substance/lens#master", + "trix": "^0.9.0", "webpack": "^1.12.2", "pouchdb": "^5.0.0", "leveldown": "^1.4.1", diff --git a/webpack/webpack.dev.config.js b/webpack/webpack.dev.config.js index e30ef031b4267e039c53e0ad9b75588c8e6df089..f15236518b8b97e8f175fba0f6942f0fb06b87bd 100644 --- a/webpack/webpack.dev.config.js +++ b/webpack/webpack.dev.config.js @@ -55,9 +55,8 @@ module.exports = [ loaders: ['eslint-loader'] }], loaders: commonLoaders.concat([ - { test: /\.scss$/, - loader: 'style!css!sass?includePaths[]=' + - path.resolve(__dirname, '../node_modules/lens-writer/app/assets/fonts/') + { test: /\.scss$|\.css$/, + loader: 'style!css!sass' } ]) },