Merge pull request #1076 from asaadmahmoodspin/ui-improvements

Multiple UI Improvements
Этот коммит содержится в:
Corey Hulen
2015-10-15 11:42:01 -07:00
родитель f09685a373 3d16d64c0b
Коммит 5f1734a3c2
21 изменённых файлов: 97 добавлений и 66 удалений

Просмотреть файл

@@ -447,7 +447,7 @@ export default class EmailSettings extends React.Component {
</div> </div>
<div className='help-text'> <div className='help-text'>
<button <button
className='btn' className='btn btn-default'
onClick={this.handleTestConnection} onClick={this.handleTestConnection}
disabled={!this.state.sendEmailNotifications} disabled={!this.state.sendEmailNotifications}
id='connection-button' id='connection-button'
@@ -482,7 +482,7 @@ export default class EmailSettings extends React.Component {
<p className='help-text'>{'32-character salt added to signing of email invites. Randomly generated on install. Click "Re-Generate" to create new salt.'}</p> <p className='help-text'>{'32-character salt added to signing of email invites. Randomly generated on install. Click "Re-Generate" to create new salt.'}</p>
<div className='help-text'> <div className='help-text'>
<button <button
className='btn' className='btn btn-default'
onClick={this.handleGenerateInvite} onClick={this.handleGenerateInvite}
disabled={!this.state.sendEmailNotifications} disabled={!this.state.sendEmailNotifications}
> >
@@ -513,7 +513,7 @@ export default class EmailSettings extends React.Component {
<p className='help-text'>{'32-character salt added to signing of password reset emails. Randomly generated on install. Click "Re-Generate" to create new salt.'}</p> <p className='help-text'>{'32-character salt added to signing of password reset emails. Randomly generated on install. Click "Re-Generate" to create new salt.'}</p>
<div className='help-text'> <div className='help-text'>
<button <button
className='btn' className='btn btn-default'
onClick={this.handleGenerateReset} onClick={this.handleGenerateReset}
disabled={!this.state.sendEmailNotifications} disabled={!this.state.sendEmailNotifications}
> >

Просмотреть файл

@@ -116,12 +116,14 @@ export default class GitLabSettings extends React.Component {
<p className='help-text'> <p className='help-text'>
{'When true, Mattermost allows team creation and account signup using GitLab OAuth.'} <br/> {'When true, Mattermost allows team creation and account signup using GitLab OAuth.'} <br/>
</p> </p>
<ol className='help-text'> <div className='help-text'>
<li>{'Log in to your GitLab account and go to Applications -> Profile Settings.'}</li> <ol>
<li>{'Enter Redirect URIs "<your-mattermost-url>/login/gitlab/complete" (example: http://localhost:8065/login/gitlab/complete) and "<your-mattermost-url>/signup/gitlab/complete". '}</li> <li>{'Log in to your GitLab account and go to Applications -> Profile Settings.'}</li>
<li>{'Then use "Secret" and "Id" fields from GitLab to complete the options below.'}</li> <li>{'Enter Redirect URIs "<your-mattermost-url>/login/gitlab/complete" (example: http://localhost:8065/login/gitlab/complete) and "<your-mattermost-url>/signup/gitlab/complete". '}</li>
<li>{'Complete the Endpoint URLs below. '}</li> <li>{'Then use "Secret" and "Id" fields from GitLab to complete the options below.'}</li>
</ol> <li>{'Complete the Endpoint URLs below. '}</li>
</ol>
</div>
</div> </div>
</div> </div>

Просмотреть файл

@@ -220,7 +220,7 @@ export default class SqlSettings extends React.Component {
<p className='help-text'>{'32-character salt available to encrypt and decrypt sensitive fields in database.'}</p> <p className='help-text'>{'32-character salt available to encrypt and decrypt sensitive fields in database.'}</p>
<div className='help-text'> <div className='help-text'>
<button <button
className='help-link' className='btn btn-default'
onClick={this.handleGenerate} onClick={this.handleGenerate}
> >
{'Re-Generate'} {'Re-Generate'}

Просмотреть файл

@@ -75,15 +75,6 @@ export default class ChannelLoader extends React.Component {
Utils.applyTheme(Constants.THEMES.default); Utils.applyTheme(Constants.THEMES.default);
} }
/* Setup global mouse events */
$('body').on('click', function hidePopover(e) {
$('[data-toggle="popover"]').each(function eachPopover() {
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$(this).popover('hide');
}
});
});
$('body').on('mouseenter mouseleave', '.post', function mouseOver(ev) { $('body').on('mouseenter mouseleave', '.post', function mouseOver(ev) {
if (ev.type === 'mouseenter') { if (ev.type === 'mouseenter') {
$(this).parent('div').prev('.date-separator, .new-separator').addClass('hovered--after'); $(this).parent('div').prev('.date-separator, .new-separator').addClass('hovered--after');

Просмотреть файл

@@ -46,7 +46,9 @@ export default class CreateComment extends React.Component {
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
if (prevState.uploadsInProgress < this.state.uploadsInProgress) { if (prevState.uploadsInProgress < this.state.uploadsInProgress) {
$('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight); $('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight);
$('.post-right__scroll').perfectScrollbar('update'); if ($(window).width() > 768) {
$('.post-right__scroll').perfectScrollbar('update');
}
} }
} }
handleSubmit(e) { handleSubmit(e) {

Просмотреть файл

@@ -39,11 +39,9 @@ export default class EmailVerify extends React.Component {
return ( return (
<div className='col-sm-12'> <div className='col-sm-12'>
<div className='panel panel-default verify_panel'> <div className='signup-team__container'>
<div className='panel-heading'> <h3>{title}</h3>
<h3 className='panel-title'>{title}</h3> <div>
</div>
<div className='panel-body'>
{body} {body}
{resend} {resend}
{resendConfirm} {resendConfirm}

Просмотреть файл

@@ -2,6 +2,8 @@
// See License.txt for license information. // See License.txt for license information.
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var Popover = ReactBootstrap.Popover;
var OverlayTrigger = ReactBootstrap.OverlayTrigger;
export default class PopoverListMembers extends React.Component { export default class PopoverListMembers extends React.Component {
componentDidMount() { componentDidMount() {
@@ -24,16 +26,9 @@ export default class PopoverListMembers extends React.Component {
}); });
} }
}; };
$('#member_popover').popover({placement: 'bottom', trigger: 'click', html: true});
$('body').on('click', function onClick(e) {
if (e.target.parentNode && $(e.target.parentNode.parentNode)[0] !== $('#member_popover')[0] && $(e.target).parents('.popover.in').length === 0) {
$('#member_popover').popover('hide');
}
});
} }
render() { render() {
let popoverHtml = ''; let popoverHtml = [];
let count = 0; let count = 0;
let countText = '-'; let countText = '-';
const members = this.props.members; const members = this.props.members;
@@ -46,7 +41,7 @@ export default class PopoverListMembers extends React.Component {
members.forEach(function addMemberElement(m) { members.forEach(function addMemberElement(m) {
if (teamMembers[m.username] && teamMembers[m.username].delete_at <= 0) { if (teamMembers[m.username] && teamMembers[m.username].delete_at <= 0) {
popoverHtml += `<div class='text--nowrap'>${m.username}</div>`; popoverHtml.push(<div className='text--nowrap'>{m.username}</div>);
count++; count++;
} }
}); });
@@ -59,15 +54,14 @@ export default class PopoverListMembers extends React.Component {
} }
return ( return (
<div <OverlayTrigger
id='member_popover' trigger='click'
data-toggle='popover' placement='bottom'
data-content={popoverHtml} rootClose='true'
data-original-title='Members' overlay={<Popover title='Members'>{popoverHtml}</Popover>}
> >
<div <div id='member_popover'>
id='member_tooltip' <div>
>
{countText} {countText}
<span <span
className='fa fa-user' className='fa fa-user'
@@ -75,6 +69,7 @@ export default class PopoverListMembers extends React.Component {
/> />
</div> </div>
</div> </div>
</OverlayTrigger>
); );
} }
} }

Просмотреть файл

@@ -52,8 +52,6 @@ export default class RhsThread extends React.Component {
if ($('.post-right__scroll')[0]) { if ($('.post-right__scroll')[0]) {
$('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight); $('.post-right__scroll').scrollTop($('.post-right__scroll')[0].scrollHeight);
} }
$('.post-right__scroll').perfectScrollbar('update');
this.resize(); this.resize();
} }
componentWillUnmount() { componentWillUnmount() {
@@ -100,8 +98,10 @@ export default class RhsThread extends React.Component {
var height = $(window).height() - $('#error_bar').outerHeight() - 100; var height = $(window).height() - $('#error_bar').outerHeight() - 100;
$('.post-right__scroll').css('height', height + 'px'); $('.post-right__scroll').css('height', height + 'px');
$('.post-right__scroll').scrollTop(100000); $('.post-right__scroll').scrollTop(100000);
$('.post-right__scroll').perfectScrollbar(); if ($(window).width() > 768) {
$('.post-right__scroll').perfectScrollbar('update'); $('.post-right__scroll').perfectScrollbar();
$('.post-right__scroll').perfectScrollbar('update');
}
} }
render() { render() {
var postList = this.state.postList; var postList = this.state.postList;

Просмотреть файл

@@ -56,7 +56,9 @@ export default class SearchResults extends React.Component {
var height = $(window).height() - $('#error_bar').outerHeight() - 100; var height = $(window).height() - $('#error_bar').outerHeight() - 100;
$('#search-items-container').css('height', height + 'px'); $('#search-items-container').css('height', height + 'px');
$('#search-items-container').scrollTop(0); $('#search-items-container').scrollTop(0);
$('#search-items-container').perfectScrollbar(); if ($(window).width() > 768) {
$('#search-items-container').perfectScrollbar();
}
} }
render() { render() {

Просмотреть файл

@@ -134,7 +134,9 @@ export default class Sidebar extends React.Component {
AsyncClient.getDirectChannelPreferences(); AsyncClient.getDirectChannelPreferences();
$('.nav-pills__container').perfectScrollbar(); if ($(window).width() > 768) {
$('.nav-pills__container').perfectScrollbar();
}
this.updateTitle(); this.updateTitle();
this.updateUnreadIndicators(); this.updateUnreadIndicators();

Просмотреть файл

@@ -3,6 +3,8 @@
var Utils = require('../utils/utils.jsx'); var Utils = require('../utils/utils.jsx');
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var Popover = ReactBootstrap.Popover;
var OverlayTrigger = ReactBootstrap.OverlayTrigger;
var id = 0; var id = 0;
@@ -32,7 +34,6 @@ export default class UserProfile extends React.Component {
componentDidMount() { componentDidMount() {
UserStore.addChangeListener(this.onChange); UserStore.addChangeListener(this.onChange);
if (!this.props.disablePopover) { if (!this.props.disablePopover) {
$('#profile_' + this.uniqueId).popover({placement: 'right', container: 'body', trigger: 'click hover', html: true, delay: {show: 200, hide: 100}});
$('body').tooltip({selector: '[data-toggle=tooltip]', trigger: 'hover click'}); $('body').tooltip({selector: '[data-toggle=tooltip]', trigger: 'hover click'});
} }
} }
@@ -62,23 +63,46 @@ export default class UserProfile extends React.Component {
return <div>{name}</div>; return <div>{name}</div>;
} }
var dataContent = '<img class="user-popover__image" src="/api/v1/users/' + this.state.profile.id + '/image?time=' + this.state.profile.update_at + '" height="128" width="128" />'; var dataContent = [];
dataContent.push(
<img className='user-popover__image'
src={'/api/v1/users/' + this.state.profile.id + '/image?time=' + this.state.profile.update_at}
height='128'
width='128'
/>
);
if (!global.window.config.ShowEmailAddress === 'true') { if (!global.window.config.ShowEmailAddress === 'true') {
dataContent += '<div class="text-nowrap">Email not shared</div>'; dataContent.push(<div className='text-nowrap'>{'Email not shared'}</div>);
} else { } else {
dataContent += '<div data-toggle="tooltip" title="' + this.state.profile.email + '"><a href="mailto:' + this.state.profile.email + '" class="text-nowrap text-lowercase user-popover__email">' + this.state.profile.email + '</a></div>'; dataContent.push(
<div
data-toggle='tooltip'
title="' + this.state.profile.email + '"
>
<a
href="mailto:' + this.state.profile.email + '"
className='text-nowrap text-lowercase user-popover__email'
>
{this.state.profile.email}
</a>
</div>
);
} }
return ( return (
<OverlayTrigger
trigger='click'
placement='right'
rootClose='true'
overlay={<Popover title={this.state.profile.username}>{dataContent}</Popover>}
>
<div <div
className='user-popover' className='user-popover'
id={'profile_' + this.uniqueId} id={'profile_' + this.uniqueId}
data-toggle='popover'
data-content={dataContent}
data-original-title={this.state.profile.username}
> >
{name} {name}
</div> </div>
</OverlayTrigger>
); );
} }
} }

Просмотреть файл

@@ -467,6 +467,10 @@ export function applyTheme(theme) {
changeCss('.date-separator .separator__text, .new-separator .separator__text', 'background:' + theme.centerChannelBg, 1); changeCss('.date-separator .separator__text, .new-separator .separator__text', 'background:' + theme.centerChannelBg, 1);
changeCss('.post-image__column .post-image__details', 'background:' + theme.centerChannelBg, 1); changeCss('.post-image__column .post-image__details', 'background:' + theme.centerChannelBg, 1);
changeCss('.sidebar--right, .dropdown-menu, .popover', 'background:' + theme.centerChannelBg, 1); changeCss('.sidebar--right, .dropdown-menu, .popover', 'background:' + theme.centerChannelBg, 1);
changeCss('.popover.bottom>.arrow:after', 'border-bottom-color:' + theme.centerChannelBg, 1);
changeCss('.popover.right>.arrow:after', 'border-right-color:' + theme.centerChannelBg, 1);
changeCss('.popover.left>.arrow:after', 'border-left-color:' + theme.centerChannelBg, 1);
changeCss('.popover.top>.arrow:after', 'border-top-color:' + theme.centerChannelBg, 1);
changeCss('.search-bar__container .search__form .search-bar, .form-control', 'background:' + theme.centerChannelBg, 1); changeCss('.search-bar__container .search__form .search-bar, .form-control', 'background:' + theme.centerChannelBg, 1);
} }

Просмотреть файл

@@ -15,12 +15,11 @@
.nav { .nav {
li { li {
padding: 0; padding: 0;
@include opacity(1);
.icon { .icon {
width: 17px; width: 17px;
} }
> a { > a {
padding: 9px 15px;
display: block;
&:hover, &.active, &:focus { &:hover, &.active, &:focus {
background-color: #EAEAEA; background-color: #EAEAEA;
} }
@@ -117,8 +116,10 @@
.form-group { .form-group {
margin-bottom: 25px; margin-bottom: 25px;
} }
ul, ol { .help-text {
padding-left: 23px; ul, ol {
padding-left: 23px;
}
} }
.help-text { .help-text {
margin: 10px 0 0 15px; margin: 10px 0 0 15px;

Просмотреть файл

@@ -39,10 +39,6 @@ img {
height: auto; height: auto;
} }
.input-group-addon {
background: transparent;
}
.popover { .popover {
color: #333; color: #333;
&.bottom, &.right, &.top, &.left { &.bottom, &.right, &.top, &.left {
@@ -53,6 +49,9 @@ img {
.popover-title { .popover-title {
background: rgba(black, 0.05); background: rgba(black, 0.05);
} }
.popover-content {
white-space: pre-wrap;
}
} }
.dropdown-menu { .dropdown-menu {
@@ -182,6 +181,10 @@ a:focus, a:hover {
background-color: white !important; background-color: white !important;
} }
.alert {
padding: 8px 12px;
}
.emoji { .emoji {
width: 1.5em; width: 1.5em;
height: 1.5em; height: 1.5em;

Просмотреть файл

@@ -194,6 +194,7 @@
vertical-align: top; vertical-align: top;
.file-details__name { .file-details__name {
color: #333;
font-size: 16px; font-size: 16px;
} }
.file-details__info { .file-details__info {

Просмотреть файл

@@ -1,5 +1,6 @@
.markdown__heading { .markdown__heading {
font-weight: 700; font-weight: 700;
line-height: 1.5;
} }
.markdown__paragraph-inline { .markdown__paragraph-inline {
display: inline; display: inline;

Просмотреть файл

@@ -93,6 +93,7 @@
.post-right__scroll { .post-right__scroll {
position: relative; position: relative;
overflow: auto;
} }
.post-right-comment-time { .post-right-comment-time {

Просмотреть файл

@@ -586,11 +586,14 @@
&.move--right { &.move--right {
@include translate3d(0, 0, 0); @include translate3d(0, 0, 0);
} }
.nav-pills__unread-indicator-bottom {
bottom: 10px;
}
.badge { .badge {
top: 13px; top: 13px;
} }
> div { > div {
padding-bottom: 105px; padding-bottom: 65px;
} }
.team__header { .team__header {
display: none; display: none;

Просмотреть файл

@@ -67,6 +67,7 @@
} }
.search-items-container { .search-items-container {
overflow: auto;
position: relative; position: relative;
} }

Просмотреть файл

@@ -69,7 +69,7 @@
top: 66px; top: 66px;
} }
.nav-pills__unread-indicator-bottom { .nav-pills__unread-indicator-bottom {
bottom: 10px; bottom: 20px;
} }
.nav { .nav {

Просмотреть файл

@@ -54,7 +54,7 @@
<script> <script>
window.setup_channel_page({{ .Props }}); window.setup_channel_page({{ .Props }});
$('body').tooltip( {selector: '[data-toggle=tooltip]'} ); $('body').tooltip( {selector: '[data-toggle=tooltip]'} );
$('.modal-body').css('max-height', $(window).height() - 150); $('.modal-body').css('max-height', $(window).height() - 200);
$('.modal-body').perfectScrollbar(); $('.modal-body').perfectScrollbar();
</script> </script>
</body> </body>