combine M{Text,Notice,Emote}Message into a generic TextualMessage component
							parent
							
								
									832da3aa8e
								
							
						
					
					
						commit
						9befe243b5
					
				| 
						 | 
				
			
			@ -1,44 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2015 OpenMarket Ltd
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var React = require('react');
 | 
			
		||||
var linkify = require('linkifyjs');
 | 
			
		||||
var linkifyElement = require('linkifyjs/element');
 | 
			
		||||
var linkifyMatrix = require('../../../linkify-matrix');
 | 
			
		||||
 | 
			
		||||
linkifyMatrix(linkify);
 | 
			
		||||
 | 
			
		||||
module.exports = React.createClass({
 | 
			
		||||
    displayName: 'MEmoteMessage',
 | 
			
		||||
 | 
			
		||||
    componentDidMount: function() {
 | 
			
		||||
        linkifyElement(this.refs.content, linkifyMatrix.options);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
        var mxEvent = this.props.mxEvent;
 | 
			
		||||
        var content = mxEvent.getContent();
 | 
			
		||||
        var name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender();
 | 
			
		||||
        return (
 | 
			
		||||
            <span ref="content" className="mx_MEmoteTile mx_MessageTile_content">
 | 
			
		||||
                * {name} {content.body}
 | 
			
		||||
            </span>
 | 
			
		||||
        );
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,59 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2015 OpenMarket Ltd
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var React = require('react');
 | 
			
		||||
var linkify = require('linkifyjs');
 | 
			
		||||
var linkifyElement = require('linkifyjs/element');
 | 
			
		||||
var linkifyMatrix = require('../../../linkify-matrix.js');
 | 
			
		||||
linkifyMatrix(linkify);
 | 
			
		||||
var HtmlUtils = require('../../../HtmlUtils');
 | 
			
		||||
 | 
			
		||||
module.exports = React.createClass({
 | 
			
		||||
    displayName: 'MNoticeMessage',
 | 
			
		||||
 | 
			
		||||
    componentDidMount: function() {
 | 
			
		||||
        linkifyElement(this.refs.content, linkifyMatrix.options);
 | 
			
		||||
 | 
			
		||||
        if (this.props.mxEvent.getContent().format === "org.matrix.custom.html")
 | 
			
		||||
            HtmlUtils.highlightDom(this.getDOMNode());
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    componentDidUpdate: function() {
 | 
			
		||||
        if (this.props.mxEvent.getContent().format === "org.matrix.custom.html")
 | 
			
		||||
            HtmlUtils.highlightDom(this.getDOMNode());
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    shouldComponentUpdate: function(nextProps) {
 | 
			
		||||
        // exploit that events are immutable :)
 | 
			
		||||
        return (nextProps.mxEvent.getId() !== this.props.mxEvent.getId() ||
 | 
			
		||||
                nextProps.searchTerm !== this.props.searchTerm);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // XXX: fix horrible duplication with MTextTile
 | 
			
		||||
    render: function() {
 | 
			
		||||
        var content = this.props.mxEvent.getContent();
 | 
			
		||||
        var body = HtmlUtils.bodyToHtml(content, this.props.searchTerm);
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <span ref="content" className="mx_MNoticeTile mx_MessageTile_content">
 | 
			
		||||
                { body }
 | 
			
		||||
            </span>
 | 
			
		||||
        );
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,9 +32,9 @@ module.exports = React.createClass({
 | 
			
		|||
        var UnknownMessageTile = sdk.getComponent('messages.UnknownMessage');
 | 
			
		||||
 | 
			
		||||
        var tileTypes = {
 | 
			
		||||
            'm.text': sdk.getComponent('messages.MTextMessage'),
 | 
			
		||||
            'm.notice': sdk.getComponent('messages.MNoticeMessage'),
 | 
			
		||||
            'm.emote': sdk.getComponent('messages.MEmoteMessage'),
 | 
			
		||||
            'm.text': sdk.getComponent('messages.TextualMessage'),
 | 
			
		||||
            'm.notice': sdk.getComponent('messages.TextualMessage'),
 | 
			
		||||
            'm.emote': sdk.getComponent('messages.TextualMessage'),
 | 
			
		||||
            'm.image': sdk.getComponent('messages.MImageMessage'),
 | 
			
		||||
            'm.file': sdk.getComponent('messages.MFileMessage'),
 | 
			
		||||
            'm.video': sdk.getComponent('messages.MVideoMessage')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ limitations under the License.
 | 
			
		|||
'use strict';
 | 
			
		||||
 | 
			
		||||
var React = require('react');
 | 
			
		||||
var ReactDOM = require('react-dom');
 | 
			
		||||
var HtmlUtils = require('../../../HtmlUtils');
 | 
			
		||||
var linkify = require('linkifyjs');
 | 
			
		||||
var linkifyElement = require('linkifyjs/element');
 | 
			
		||||
| 
						 | 
				
			
			@ -25,18 +26,18 @@ var linkifyMatrix = require('../../../linkify-matrix');
 | 
			
		|||
linkifyMatrix(linkify);
 | 
			
		||||
 | 
			
		||||
module.exports = React.createClass({
 | 
			
		||||
    displayName: 'MTextMessage',
 | 
			
		||||
    displayName: 'TextualMessage',
 | 
			
		||||
 | 
			
		||||
    componentDidMount: function() {
 | 
			
		||||
        linkifyElement(this.refs.content, linkifyMatrix.options);
 | 
			
		||||
 | 
			
		||||
        if (this.props.mxEvent.getContent().format === "org.matrix.custom.html")
 | 
			
		||||
            HtmlUtils.highlightDom(this.getDOMNode());
 | 
			
		||||
            HtmlUtils.highlightDom(ReactDOM.findDOMNode(this));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    componentDidUpdate: function() {
 | 
			
		||||
        if (this.props.mxEvent.getContent().format === "org.matrix.custom.html")
 | 
			
		||||
            HtmlUtils.highlightDom(this.getDOMNode());
 | 
			
		||||
            HtmlUtils.highlightDom(ReactDOM.findDOMNode(this));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    shouldComponentUpdate: function(nextProps) {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,14 +47,31 @@ module.exports = React.createClass({
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
        var content = this.props.mxEvent.getContent();
 | 
			
		||||
        var mxEvent = this.props.mxEvent;
 | 
			
		||||
        var content = mxEvent.getContent();
 | 
			
		||||
        var body = HtmlUtils.bodyToHtml(content, this.props.searchTerm);
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <span ref="content" className="mx_MTextTile mx_MessageTile_content">
 | 
			
		||||
                { body }
 | 
			
		||||
            </span>
 | 
			
		||||
        );
 | 
			
		||||
        switch (content.msgtype) {
 | 
			
		||||
            case "m.emote":
 | 
			
		||||
                var name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender();
 | 
			
		||||
                return (
 | 
			
		||||
                    <span ref="content" className="mx_MEmoteTile mx_MessageTile_content">
 | 
			
		||||
                        * {name} {content.body}
 | 
			
		||||
                    </span>
 | 
			
		||||
                );
 | 
			
		||||
            case "m.notice":
 | 
			
		||||
                return (
 | 
			
		||||
                    <span ref="content" className="mx_MNoticeTile mx_MessageTile_content">
 | 
			
		||||
                        { body }
 | 
			
		||||
                    </span>
 | 
			
		||||
                );
 | 
			
		||||
            default: // including "m.text"
 | 
			
		||||
                return (
 | 
			
		||||
                    <span ref="content" className="mx_MTextTile mx_MessageTile_content">
 | 
			
		||||
                        { body }
 | 
			
		||||
                    </span>
 | 
			
		||||
                );
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue