diff --git a/src/Velociraptor.js b/src/Velociraptor.js index 81ecd9e55..df6b3c95d 100644 --- a/src/Velociraptor.js +++ b/src/Velociraptor.js @@ -37,7 +37,16 @@ module.exports = React.createClass({ var oldNode = ReactDom.findDOMNode(self.nodes[old.key]); if (oldNode.style.left != c.props.style.left) { - Velocity(oldNode, { left: c.props.style.left }, self.props.transition); + Velocity(oldNode, { left: c.props.style.left }, self.props.transition).then(function() { + // special case visibility because it's nonsensical to animate an invisible element + // so we always hidden->visible pre-transition and visible->hidden after + if (oldNode.style.visibility == 'visible' && c.props.style.visibility == 'hidden') { + oldNode.style.visibility = c.props.style.visibility; + } + }); + if (oldNode.style.visibility == 'hidden' && c.props.style.visibility == 'visible') { + oldNode.style.visibility = c.props.style.visibility; + } //console.log("translation: "+oldNode.style.left+" -> "+c.props.style.left); } self.children[c.key] = old; diff --git a/src/skins/vector/views/molecules/EventTile.js b/src/skins/vector/views/molecules/EventTile.js index 39722c7c6..fa1604f91 100644 --- a/src/skins/vector/views/molecules/EventTile.js +++ b/src/skins/vector/views/molecules/EventTile.js @@ -58,7 +58,7 @@ module.exports = React.createClass({ }, getInitialState: function() { - return {menu: false}; + return {menu: false, allReadAvatars: false}; }, componentDidUpdate: function() { @@ -82,6 +82,12 @@ module.exports = React.createClass({ this.setState({menu: true}); }, + toggleAllReadAvatars: function() { + this.setState({ + allReadAvatars: !this.state.allReadAvatars + }); + }, + getReadAvatars: function() { var avatars = []; @@ -136,25 +142,39 @@ module.exports = React.createClass({ }); } + var style = { + left: left+'px', + top: '0px', + visibility: i < MAX_READ_AVATARS || this.state.allReadAvatars ? 'visible' : 'hidden' + }; + // add to the start so the most recent is on the end (ie. ends up rightmost) avatars.unshift( ); - left -= 15; - if (i + 1 >= MAX_READ_AVATARS) { - break; + // TODO: we keep the extra read avatars in the dom to make animation simpler + // we could optimise this to reduce the dom size. + if (i < MAX_READ_AVATARS - 1 || this.state.allReadAvatars) { + left -= 15; } } - var remainder = receipts.length - MAX_READ_AVATARS; - var remText; - if (remainder > 0) { - remText = +{ remainder }; + if (!this.state.allReadAvatars) { + var remainder = receipts.length - MAX_READ_AVATARS; + var remText; + left -= 15; + if (remainder > 0) { + remText = +{ remainder } + ; + } } return