affected, replaced onClick handler with onMouseUp/Down to detect text selection not trigger onClick handler then
This commit is contained in:
		
							parent
							
								
									b06a375ee4
								
							
						
					
					
						commit
						80cefd5b3c
					
				
					 4 changed files with 42 additions and 5 deletions
				
			
		| 
						 | 
					@ -56,12 +56,35 @@ const StatusContent = React.createClass({
 | 
				
			||||||
    e.stopPropagation();
 | 
					    e.stopPropagation();
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleMouseDown (e) {
 | 
				
			||||||
 | 
					    this.startXY = [e.clientX, e.clientY];
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleMouseUp (e) {
 | 
				
			||||||
 | 
					    const [ startX, startY ] = this.startXY;
 | 
				
			||||||
 | 
					    const [ deltaX, deltaY ] = [Math.abs(e.clientX - startX), Math.abs(e.clientY - startY)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (deltaX + deltaY < 5) {
 | 
				
			||||||
 | 
					      this.props.onClick();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.startXY = null;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    const { status, onClick } = this.props;
 | 
					    const { status } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const content = { __html: emojify(status.get('content')) };
 | 
					    const content = { __html: emojify(status.get('content')) };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return <div className='status__content' style={{ cursor: 'pointer' }} dangerouslySetInnerHTML={content} onClick={onClick} />;
 | 
					    return (
 | 
				
			||||||
 | 
					      <div
 | 
				
			||||||
 | 
					        className='status__content'
 | 
				
			||||||
 | 
					        style={{ cursor: 'pointer' }}
 | 
				
			||||||
 | 
					        dangerouslySetInnerHTML={content}
 | 
				
			||||||
 | 
					        onMouseDown={this.handleMouseDown}
 | 
				
			||||||
 | 
					        onMouseUp={this.handleMouseUp}
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,17 @@
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.invisible {
 | 
				
			||||||
 | 
					  font-size: 0;
 | 
				
			||||||
 | 
					  line-height: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ellipsis {
 | 
				
			||||||
 | 
					  &:after {
 | 
				
			||||||
 | 
					    content: "…";
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lightbox .icon-button {
 | 
					.lightbox .icon-button {
 | 
				
			||||||
  color: $color1;
 | 
					  color: $color1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,8 +65,11 @@ class Formatter
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def link_html(url)
 | 
					  def link_html(url)
 | 
				
			||||||
    link_text = truncate(url.gsub(/\Ahttps?:\/\/(www\.)?/, ''), length: 30)
 | 
					    prefix = url.match(/\Ahttps?:\/\/(www\.)?/).to_s
 | 
				
			||||||
    "<a rel=\"nofollow noopener\" target=\"_blank\" href=\"#{url}\">#{link_text}</a>"
 | 
					    text   = url[prefix.length, 30]
 | 
				
			||||||
 | 
					    suffix = url[prefix.length + 30..-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    "<a rel=\"nofollow noopener\" target=\"_blank\" href=\"#{url}\"><span class=\"invisible\">#{prefix}</span><span class=\"ellipsis\">#{text}</span><span class=\"invisible\">#{suffix}</span></a>"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def hashtag_html(match)
 | 
					  def hashtag_html(match)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ RSpec.describe Formatter do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'contains a link' do
 | 
					    it 'contains a link' do
 | 
				
			||||||
      expect(subject).to match('<a rel="nofollow noopener" target="_blank" href="http://google.com">google.com</a>')
 | 
					      expect(subject).to match('<a rel="nofollow noopener" target="_blank" href="http://google.com"><span class="invisible">http://</span><span class="ellipsis">google.com</span><span class="invisible"></span></a>')
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue