diff --git a/package.json b/package.json
index a1f06b00b..644e9309d 100644
--- a/package.json
+++ b/package.json
@@ -61,6 +61,7 @@
"favico.js": "^0.3.10",
"filesize": "3.5.6",
"flux": "~2.0.3",
+ "gemini-scrollbar": "matrix-org/gemini-scrollbar#b302279",
"gfm.css": "^1.1.1",
"highlight.js": "^9.0.0",
"linkifyjs": "^2.1.3",
@@ -73,7 +74,7 @@
"react-dnd": "^2.1.4",
"react-dnd-html5-backend": "^2.1.2",
"react-dom": "^15.4.0",
- "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#39d858c",
+ "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef",
"sanitize-html": "^1.11.1",
"ua-parser-js": "^0.7.10",
"url": "^0.11.0"
diff --git a/src/components/structures/BottomLeftMenu.js b/src/components/structures/BottomLeftMenu.js
index 63dfac60d..f378cac62 100644
--- a/src/components/structures/BottomLeftMenu.js
+++ b/src/components/structures/BottomLeftMenu.js
@@ -1,6 +1,5 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
-Copyright 2017 Vector Creations Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,8 +14,13 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import React from 'react';
-import sdk from 'matrix-react-sdk';
+'use strict';
+
+var React = require('react');
+var ReactDOM = require('react-dom');
+var sdk = require('matrix-react-sdk')
+var dis = require('matrix-react-sdk/lib/dispatcher');
+var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
module.exports = React.createClass({
displayName: 'BottomLeftMenu',
@@ -26,28 +30,121 @@ module.exports = React.createClass({
teamToken: React.PropTypes.string,
},
+ getInitialState: function() {
+ return({
+ directoryHover : false,
+ roomsHover : false,
+ homeHover: false,
+ peopleHover : false,
+ settingsHover : false,
+ });
+ },
+
+ // Room events
+ onDirectoryClick: function() {
+ dis.dispatch({ action: 'view_room_directory' });
+ },
+
+ onDirectoryMouseEnter: function() {
+ this.setState({ directoryHover: true });
+ },
+
+ onDirectoryMouseLeave: function() {
+ this.setState({ directoryHover: false });
+ },
+
+ onRoomsClick: function() {
+ dis.dispatch({ action: 'view_create_room' });
+ },
+
+ onRoomsMouseEnter: function() {
+ this.setState({ roomsHover: true });
+ },
+
+ onRoomsMouseLeave: function() {
+ this.setState({ roomsHover: false });
+ },
+
+ // Home button events
+ onHomeClick: function() {
+ dis.dispatch({ action: 'view_home_page' });
+ },
+
+ onHomeMouseEnter: function() {
+ this.setState({ homeHover: true });
+ },
+
+ onHomeMouseLeave: function() {
+ this.setState({ homeHover: false });
+ },
+
+ // People events
+ onPeopleClick: function() {
+ dis.dispatch({ action: 'view_create_chat' });
+ },
+
+ onPeopleMouseEnter: function() {
+ this.setState({ peopleHover: true });
+ },
+
+ onPeopleMouseLeave: function() {
+ this.setState({ peopleHover: false });
+ },
+
+ // Settings events
+ onSettingsClick: function() {
+ dis.dispatch({ action: 'view_user_settings' });
+ },
+
+ onSettingsMouseEnter: function() {
+ this.setState({ settingsHover: true });
+ },
+
+ onSettingsMouseLeave: function() {
+ this.setState({ settingsHover: false });
+ },
+
+ // Get the label/tooltip to show
+ getLabel: function(label, show) {
+ if (show) {
+ var RoomTooltip = sdk.getComponent("rooms.RoomTooltip");
+ return ;
+ }
+ },
+
render: function() {
- const HomeButton = sdk.getComponent('elements.HomeButton');
- const StartChatButton = sdk.getComponent('elements.StartChatButton');
- const RoomDirectoryButton = sdk.getComponent('elements.RoomDirectoryButton');
- const CreateRoomButton = sdk.getComponent('elements.CreateRoomButton');
- const SettingsButton = sdk.getComponent('elements.SettingsButton');
+ var TintableSvg = sdk.getComponent('elements.TintableSvg');
var homeButton;
if (this.props.teamToken) {
- homeButton = ;
+ homeButton = (
+
+
+ { this.getLabel("Welcome page", this.state.homeHover) }
+
+ );
}
return (
{ homeButton }
-
-
-
-
-
-
+
+
+ { this.getLabel("Start chat", this.state.peopleHover) }
+
+
+
+ { this.getLabel("Room directory", this.state.directoryHover) }
+
+
+
+ { this.getLabel("Create new room", this.state.roomsHover) }
+
+
+
+ { this.getLabel("Settings", this.state.settingsHover) }
+
);
diff --git a/src/components/structures/LeftPanel.js b/src/components/structures/LeftPanel.js
index 2d97313a0..a9df37a8b 100644
--- a/src/components/structures/LeftPanel.js
+++ b/src/components/structures/LeftPanel.js
@@ -19,11 +19,9 @@ limitations under the License.
var React = require('react');
var DragDropContext = require('react-dnd').DragDropContext;
var HTML5Backend = require('react-dnd-html5-backend');
-var KeyCode = require('matrix-react-sdk/lib/KeyCode');
var sdk = require('matrix-react-sdk')
var dis = require('matrix-react-sdk/lib/dispatcher');
-
var VectorConferenceHandler = require('../../VectorConferenceHandler');
var CallHandler = require("matrix-react-sdk/lib/CallHandler");
@@ -42,10 +40,6 @@ var LeftPanel = React.createClass({
};
},
- componentWillMount: function() {
- this.focusedElement = null;
- },
-
componentDidMount: function() {
this.dispatcherRef = dis.register(this.onAction);
},
@@ -68,91 +62,6 @@ var LeftPanel = React.createClass({
}
},
- _onFocus: function(ev) {
- this.focusedElement = ev.target;
- },
-
- _onBlur: function(ev) {
- this.focusedElement = null;
- },
-
- _onKeyDown: function(ev) {
- if (!this.focusedElement) return;
- let handled = false;
-
- switch (ev.keyCode) {
- case KeyCode.UP:
- this._onMoveFocus(true);
- handled = true;
- break;
- case KeyCode.DOWN:
- this._onMoveFocus(false);
- handled = true;
- break;
- }
-
- if (handled) {
- ev.stopPropagation();
- ev.preventDefault();
- }
- },
-
- _onMoveFocus: function(up) {
- var element = this.focusedElement;
-
- // unclear why this isn't needed
- // var descending = (up == this.focusDirection) ? this.focusDescending : !this.focusDescending;
- // this.focusDirection = up;
-
- var descending = false; // are we currently descending or ascending through the DOM tree?
- var classes;
-
- do {
- var child = up ? element.lastElementChild : element.firstElementChild;
- var sibling = up ? element.previousElementSibling : element.nextElementSibling;
-
- if (descending) {
- if (child) {
- element = child;
- }
- else if (sibling) {
- element = sibling;
- }
- else {
- descending = false;
- element = element.parentElement;
- }
- }
- else {
- if (sibling) {
- element = sibling;
- descending = true;
- }
- else {
- element = element.parentElement;
- }
- }
-
- if (element) {
- classes = element.classList;
- if (classes.contains("mx_LeftPanel")) { // we hit the top
- element = up ? element.lastElementChild : element.firstElementChild;
- descending = true;
- }
- }
-
- } while(element && !(
- classes.contains("mx_RoomTile") ||
- classes.contains("mx_SearchBox_search") ||
- classes.contains("mx_RoomSubList_ellipsis")));
-
- if (element) {
- element.focus();
- this.focusedElement = element;
- this.focusedDescending = descending;
- }
- },
-
_recheckCallElement: function(selectedRoomId) {
// if we aren't viewing a room with an ongoing call, but there is an
// active call, show the call element - we need to do this to make
@@ -211,8 +120,7 @@ var LeftPanel = React.createClass({
}
return (
-