summaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rw-r--r--web/react/components/access_history_modal.jsx4
-rw-r--r--web/react/components/activity_log_modal.jsx4
-rw-r--r--web/react/components/channel_invite_modal.jsx11
-rw-r--r--web/react/components/channel_notifications_modal.jsx2
-rw-r--r--web/react/components/delete_channel_modal.jsx4
-rw-r--r--web/react/components/delete_post_modal.jsx2
-rw-r--r--web/react/components/edit_channel_header_modal.jsx2
-rw-r--r--web/react/components/invite_member_modal.jsx2
-rw-r--r--web/react/components/post.jsx2
-rw-r--r--web/react/components/post_attachment_oembed.jsx35
-rw-r--r--web/react/components/post_body.jsx21
-rw-r--r--web/react/components/post_body_additional_content.jsx6
-rw-r--r--web/react/components/post_header.jsx2
-rw-r--r--web/react/components/post_info.jsx83
-rw-r--r--web/react/components/posts_view.jsx2
-rw-r--r--web/react/components/providers.json158
-rw-r--r--web/react/components/rhs_root_post.jsx4
-rw-r--r--web/react/components/suggestion/suggestion_box.jsx2
-rw-r--r--web/react/components/team_members_modal.jsx4
-rw-r--r--web/react/components/user_settings/manage_outgoing_hooks.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_advanced.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_modal.jsx4
-rw-r--r--web/react/utils/constants.jsx8
-rw-r--r--web/react/utils/markdown.jsx2
-rw-r--r--web/react/utils/utils.jsx21
-rw-r--r--web/sass-files/sass/partials/_access-history.scss2
-rw-r--r--web/sass-files/sass/partials/_activity-log.scss2
-rw-r--r--web/sass-files/sass/partials/_admin-console.scss2
-rw-r--r--web/sass-files/sass/partials/_base.scss4
-rw-r--r--web/sass-files/sass/partials/_colorpicker.scss2
-rw-r--r--web/sass-files/sass/partials/_content.scss8
-rw-r--r--web/sass-files/sass/partials/_error-bar.scss2
-rw-r--r--web/sass-files/sass/partials/_error.scss2
-rw-r--r--web/sass-files/sass/partials/_files.scss2
-rw-r--r--web/sass-files/sass/partials/_font-awesome.scss2
-rw-r--r--web/sass-files/sass/partials/_footer.scss2
-rw-r--r--web/sass-files/sass/partials/_forms.scss2
-rw-r--r--web/sass-files/sass/partials/_get-link.scss4
-rw-r--r--web/sass-files/sass/partials/_headers.scss3
-rw-r--r--web/sass-files/sass/partials/_loading.scss2
-rw-r--r--web/sass-files/sass/partials/_markdown.scss2
-rw-r--r--web/sass-files/sass/partials/_mentions.scss2
-rw-r--r--web/sass-files/sass/partials/_modal.scss6
-rw-r--r--web/sass-files/sass/partials/_navbar.scss2
-rw-r--r--web/sass-files/sass/partials/_oauth.scss2
-rwxr-xr-xweb/sass-files/sass/partials/_perfect-scrollbar.scss2
-rw-r--r--web/sass-files/sass/partials/_popover.scss2
-rw-r--r--web/sass-files/sass/partials/_post.scss75
-rw-r--r--web/sass-files/sass/partials/_post_right.scss2
-rw-r--r--web/sass-files/sass/partials/_print.scssbin0 -> 3604 bytes
-rw-r--r--web/sass-files/sass/partials/_responsive.scss5
-rw-r--r--web/sass-files/sass/partials/_search.scss2
-rw-r--r--web/sass-files/sass/partials/_settings.scss14
-rw-r--r--web/sass-files/sass/partials/_sidebar--left.scss4
-rw-r--r--web/sass-files/sass/partials/_sidebar--menu.scss2
-rw-r--r--web/sass-files/sass/partials/_sidebar--right.scss2
-rw-r--r--web/sass-files/sass/partials/_signup.scss2
-rw-r--r--web/sass-files/sass/partials/_statistics.scss2
-rw-r--r--web/sass-files/sass/partials/_suggestion_list.scss2
-rw-r--r--web/sass-files/sass/partials/_tooltips.scss2
-rw-r--r--web/sass-files/sass/partials/_tutorial.scss2
-rw-r--r--web/sass-files/sass/partials/_variables.scss2
-rw-r--r--web/sass-files/sass/partials/_videos.scss2
-rw-r--r--web/sass-files/sass/partials/_webhooks.scss2
-rw-r--r--web/sass-files/sass/partials/_welcome.scss2
-rw-r--r--web/sass-files/sass/styles.scss5
-rw-r--r--web/templates/channel.html2
67 files changed, 416 insertions, 163 deletions
diff --git a/web/react/components/access_history_modal.jsx b/web/react/components/access_history_modal.jsx
index deef92a54..85c28ca5c 100644
--- a/web/react/components/access_history_modal.jsx
+++ b/web/react/components/access_history_modal.jsx
@@ -32,9 +32,11 @@ export default class AccessHistoryModal extends React.Component {
onShow() {
AsyncClient.getAudits();
- $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
+ } else {
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 150);
}
}
onHide() {
diff --git a/web/react/components/activity_log_modal.jsx b/web/react/components/activity_log_modal.jsx
index 200f4d724..f5341c0bc 100644
--- a/web/react/components/activity_log_modal.jsx
+++ b/web/react/components/activity_log_modal.jsx
@@ -51,9 +51,11 @@ export default class ActivityLogModal extends React.Component {
onShow() {
AsyncClient.getSessions();
- $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
+ } else {
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 150);
}
}
onHide() {
diff --git a/web/react/components/channel_invite_modal.jsx b/web/react/components/channel_invite_modal.jsx
index 56e2e53f9..7dac39942 100644
--- a/web/react/components/channel_invite_modal.jsx
+++ b/web/react/components/channel_invite_modal.jsx
@@ -61,6 +61,9 @@ export default class ChannelInviteModal extends React.Component {
onShow() {
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
+ } else {
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 150);
}
}
componentDidUpdate(prevProps) {
@@ -103,11 +106,6 @@ export default class ChannelInviteModal extends React.Component {
);
}
render() {
- var maxHeight = 1000;
- if (Utils.windowHeight() <= 1200) {
- maxHeight = Utils.windowHeight() - 300;
- }
-
var inviteError = null;
if (this.state.inviteError) {
inviteError = (<label className='has-error control-label'>{this.state.inviteError}</label>);
@@ -139,11 +137,10 @@ export default class ChannelInviteModal extends React.Component {
onHide={this.props.onHide}
>
<Modal.Header closeButton={true}>
- <Modal.Title>{'Add New Members to '}<span className='name'>{this.props.channel.display_nam}</span></Modal.Title>
+ <Modal.Title>{'Add New Members to '}<span className='name'>{this.props.channel.display_name}</span></Modal.Title>
</Modal.Header>
<Modal.Body
ref='modalBody'
- style={{maxHeight}}
>
{inviteError}
{content}
diff --git a/web/react/components/channel_notifications_modal.jsx b/web/react/components/channel_notifications_modal.jsx
index 887589468..e70d3a634 100644
--- a/web/react/components/channel_notifications_modal.jsx
+++ b/web/react/components/channel_notifications_modal.jsx
@@ -335,7 +335,7 @@ export default class ChannelNotificationsModal extends React.Component {
onHide={this.props.onHide}
>
<Modal.Header closeButton={true}>
- {'Notification Preferences for '}<span className='name'>{this.props.channel.display_name}</span>
+ <Modal.Title>{'Notification Preferences for '}<span className='name'>{this.props.channel.display_name}</span></Modal.Title>
</Modal.Header>
<Modal.Body>
<div className='settings-table'>
diff --git a/web/react/components/delete_channel_modal.jsx b/web/react/components/delete_channel_modal.jsx
index 99bae962a..1255067fd 100644
--- a/web/react/components/delete_channel_modal.jsx
+++ b/web/react/components/delete_channel_modal.jsx
@@ -39,7 +39,9 @@ export default class DeleteChannelModal extends React.Component {
show={this.props.show}
onHide={this.props.onHide}
>
- <Modal.Header closeButton={true}>{'Confirm DELETE Channel'}</Modal.Header>
+ <Modal.Header closeButton={true}>
+ <h4 className='modal-title'>{'Confirm DELETE Channel'}</h4>
+ </Modal.Header>
<Modal.Body>
{`Are you sure you wish to delete the ${this.props.channel.display_name} ${channelTerm}?`}
</Modal.Body>
diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx
index 5e89a0893..827654e1b 100644
--- a/web/react/components/delete_post_modal.jsx
+++ b/web/react/components/delete_post_modal.jsx
@@ -131,7 +131,7 @@ export default class DeletePostModal extends React.Component {
onHide={this.handleHide}
>
<Modal.Header closeButton={true}>
- {`Confirm ${postTerm} Delete`}
+ <Modal.Title>{`Confirm ${postTerm} Delete`}</Modal.Title>
</Modal.Header>
<Modal.Body>
{`Are you sure you want to delete this ${postTerm.toLowerCase()}?`}
diff --git a/web/react/components/edit_channel_header_modal.jsx b/web/react/components/edit_channel_header_modal.jsx
index 5529a419d..209e30fcc 100644
--- a/web/react/components/edit_channel_header_modal.jsx
+++ b/web/react/components/edit_channel_header_modal.jsx
@@ -84,7 +84,7 @@ export default class EditChannelHeaderModal extends React.Component {
onHide={this.onHide}
>
<Modal.Header closeButton={true}>
- {'Edit Header for ' + this.props.channel.display_name}
+ <Modal.Title>{'Edit Header for ' + this.props.channel.display_name}</Modal.Title>
</Modal.Header>
<Modal.Body>
<p>{'Edit the text appearing next to the channel name in the channel header.'}</p>
diff --git a/web/react/components/invite_member_modal.jsx b/web/react/components/invite_member_modal.jsx
index 25a915e22..649ec7321 100644
--- a/web/react/components/invite_member_modal.jsx
+++ b/web/react/components/invite_member_modal.jsx
@@ -143,7 +143,7 @@ export default class InviteMemberModal extends React.Component {
componentDidUpdate(prevProps, prevState) {
if (!prevState.show && this.state.show) {
- $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
}
diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx
index 786a4a325..695d7daef 100644
--- a/web/react/components/post.jsx
+++ b/web/react/components/post.jsx
@@ -152,7 +152,7 @@ export default class Post extends React.Component {
}
let currentUserCss = '';
- if (UserStore.getCurrentId() === post.user_id && !post.props.from_webhook) {
+ if (UserStore.getCurrentId() === post.user_id && !post.props.from_webhook && !utils.isSystemMessage(post)) {
currentUserCss = 'current--user';
}
diff --git a/web/react/components/post_attachment_oembed.jsx b/web/react/components/post_attachment_oembed.jsx
index f544dbc88..13c32f744 100644
--- a/web/react/components/post_attachment_oembed.jsx
+++ b/web/react/components/post_attachment_oembed.jsx
@@ -20,8 +20,11 @@ export default class PostAttachmentOEmbed extends React.Component {
fetchData(link) {
if (!this.isLoading) {
this.isLoading = true;
+ let url = 'https://noembed.com/embed?nowrap=on';
+ url += '&url=' + encodeURIComponent(link);
+ url += '&maxheight=' + this.props.provider.height;
return $.ajax({
- url: 'https://noembed.com/embed?nowrap=on&url=' + encodeURIComponent(link),
+ url,
dataType: 'jsonp',
success: (result) => {
this.isLoading = false;
@@ -39,8 +42,18 @@ export default class PostAttachmentOEmbed extends React.Component {
}
render() {
+ let data = {};
+ let content;
if ($.isEmptyObject(this.state.data)) {
- return <div></div>;
+ content = <div style={{height: this.props.provider.height}}/>;
+ } else {
+ data = this.state.data;
+ content = (
+ <div
+ style={{height: this.props.provider.height}}
+ dangerouslySetInnerHTML={{__html: data.html}}
+ />
+ );
}
return (
@@ -57,18 +70,17 @@ export default class PostAttachmentOEmbed extends React.Component {
>
<a
className='attachment__title-link'
- href={this.state.data.url}
+ href={data.url}
target='_blank'
>
- {this.state.data.title}
+ {data.title}
</a>
</h1>
- <div>
- <div className={'attachment__body attachment__body--no_thumb'}>
- <div
- dangerouslySetInnerHTML={{__html: this.state.data.html}}
- >
- </div>
+ <div >
+ <div
+ className={'attachment__body attachment__body--no_thumb'}
+ >
+ {content}
</div>
</div>
</div>
@@ -79,5 +91,6 @@ export default class PostAttachmentOEmbed extends React.Component {
}
PostAttachmentOEmbed.propTypes = {
- link: React.PropTypes.string.isRequired
+ link: React.PropTypes.string.isRequired,
+ provider: React.PropTypes.object.isRequired
};
diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx
index 27f7ad2de..296b9e7d7 100644
--- a/web/react/components/post_body.jsx
+++ b/web/react/components/post_body.jsx
@@ -6,6 +6,7 @@ import UserStore from '../stores/user_store.jsx';
import * as Utils from '../utils/utils.jsx';
import * as Emoji from '../utils/emoticons.jsx';
import Constants from '../utils/constants.jsx';
+const PreReleaseFeatures = Constants.PRE_RELEASE_FEATURES;
import * as TextFormatting from '../utils/text_formatting.jsx';
import twemoji from 'twemoji';
import PostBodyAdditionalContent from './post_body_additional_content.jsx';
@@ -109,11 +110,14 @@ export default class PostBody extends React.Component {
const trimmedLink = link.trim();
- if (this.checkForOembedContent(trimmedLink)) {
- post.props.oEmbedLink = trimmedLink;
- post.type = 'oEmbed';
- this.setState({post});
- return '';
+ if (Utils.isFeatureEnabled(PreReleaseFeatures.EMBED_PREVIEW)) {
+ const provider = this.getOembedProvider(trimmedLink);
+ if (provider != null) {
+ post.props.oEmbedLink = trimmedLink;
+ post.type = 'oEmbed';
+ this.setState({post, provider});
+ return '';
+ }
}
const embed = this.createYoutubeEmbed(link);
@@ -133,15 +137,15 @@ export default class PostBody extends React.Component {
return null;
}
- checkForOembedContent(link) {
+ getOembedProvider(link) {
for (let i = 0; i < providers.length; i++) {
for (let j = 0; j < providers[i].patterns.length; j++) {
if (link.match(providers[i].patterns[j])) {
- return true;
+ return providers[i];
}
}
}
- return false;
+ return null;
}
loadImg(src) {
@@ -399,6 +403,7 @@ export default class PostBody extends React.Component {
</div>
<PostBodyAdditionalContent
post={this.state.post}
+ provider={this.state.provider}
/>
{fileAttachmentHolder}
{this.embed}
diff --git a/web/react/components/post_body_additional_content.jsx b/web/react/components/post_body_additional_content.jsx
index e19bf51eb..7e6f3f037 100644
--- a/web/react/components/post_body_additional_content.jsx
+++ b/web/react/components/post_body_additional_content.jsx
@@ -32,6 +32,7 @@ export default class PostBodyAdditionalContent extends React.Component {
return (
<PostAttachmentOEmbed
key={'post_body_additional_content' + this.props.post.id}
+ provider={this.props.provider}
link={link}
/>
);
@@ -68,5 +69,6 @@ export default class PostBodyAdditionalContent extends React.Component {
}
PostBodyAdditionalContent.propTypes = {
- post: React.PropTypes.object.isRequired
-}; \ No newline at end of file
+ post: React.PropTypes.object.isRequired,
+ provider: React.PropTypes.object
+};
diff --git a/web/react/components/post_header.jsx b/web/react/components/post_header.jsx
index 76b3a64be..f18024343 100644
--- a/web/react/components/post_header.jsx
+++ b/web/react/components/post_header.jsx
@@ -34,7 +34,7 @@ export default class PostHeader extends React.Component {
userProfile = (
<UserProfile
userId={''}
- overwriteName={''}
+ overwriteName={Constants.SYSTEM_MESSAGE_PROFILE_NAME}
overwriteImage={Constants.SYSTEM_MESSAGE_PROFILE_IMAGE}
disablePopover={true}
/>
diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index cedb2b59b..21683bb01 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -9,14 +9,15 @@ import * as EventHelpers from '../dispatcher/event_helpers.jsx';
import Constants from '../utils/constants.jsx';
-const OverlayTrigger = ReactBootstrap.OverlayTrigger;
+const Overlay = ReactBootstrap.Overlay;
const Popover = ReactBootstrap.Popover;
export default class PostInfo extends React.Component {
constructor(props) {
super(props);
this.state = {
- copiedLink: false
+ copiedLink: false,
+ show: false
};
this.handlePermalinkCopy = this.handlePermalinkCopy.bind(this);
@@ -41,30 +42,37 @@ export default class PostInfo extends React.Component {
dataComments = this.props.commentCount;
}
- if (isOwner) {
+ if (this.props.allowReply === 'true') {
dropdownContents.push(
<li
- key='editPost'
+ key='replyLink'
role='presentation'
>
<a
+ className='link__reply theme'
href='#'
- role='menuitem'
- data-toggle='modal'
- data-target='#edit_post'
- data-refocusid='#post_textbox'
- data-title={type}
- data-message={post.message}
- data-postid={post.id}
- data-channelid={post.channel_id}
- data-comments={dataComments}
+ onClick={this.props.handleCommentClick}
>
- {'Edit'}
+ {'Reply'}
</a>
</li>
);
}
+ dropdownContents.push(
+ <li
+ key='copyLink'
+ role='presentation'
+ >
+ <a
+ href='#'
+ onClick={(e) => this.setState({target: e.target, show: !this.state.show})}
+ >
+ {'Permalink'}
+ </a>
+ </li>
+ );
+
if (isOwner || isAdmin) {
dropdownContents.push(
<li
@@ -82,18 +90,25 @@ export default class PostInfo extends React.Component {
);
}
- if (this.props.allowReply === 'true') {
+ if (isOwner) {
dropdownContents.push(
<li
- key='replyLink'
+ key='editPost'
role='presentation'
>
<a
- className='link__reply theme'
href='#'
- onClick={this.props.handleCommentClick}
+ role='menuitem'
+ data-toggle='modal'
+ data-target='#edit_post'
+ data-refocusid='#post_textbox'
+ data-title={type}
+ data-message={post.message}
+ data-postid={post.id}
+ data-channelid={post.channel_id}
+ data-comments={dataComments}
>
- {'Reply'}
+ {'Edit'}
</a>
</li>
);
@@ -121,6 +136,7 @@ export default class PostInfo extends React.Component {
</div>
);
}
+
handlePermalinkCopy() {
const textBox = $(ReactDOM.findDOMNode(this.refs.permalinkbox));
textBox.select();
@@ -128,7 +144,7 @@ export default class PostInfo extends React.Component {
try {
const successful = document.execCommand('copy');
if (successful) {
- this.setState({copiedLink: true});
+ this.setState({copiedLink: true, show: false});
} else {
this.setState({copiedLink: false});
}
@@ -180,7 +196,7 @@ export default class PostInfo extends React.Component {
type='text'
readOnly='true'
ref='permalinkbox'
- className='permalink-text form-control no-resize min-height input-large'
+ className='permalink-text form-control no-resize'
rows='1'
value={permalink}
/>
@@ -197,6 +213,8 @@ export default class PostInfo extends React.Component {
</Popover>
);
+ const containerPadding = 20;
+
return (
<ul className='post__header post__header--info'>
<li className='col'>
@@ -206,18 +224,23 @@ export default class PostInfo extends React.Component {
</li>
<li className='col col__reply'>
{comments}
- <OverlayTrigger
- trigger='click'
- placement='left'
- rootClose={true}
- overlay={permalinkOverlay}
+ <div
+ className='dropdown'
+ ref='dotMenu'
>
- <i className={'permalink-icon fa fa-link ' + showCommentClass}/>
- </OverlayTrigger>
-
- <div className='dropdown'>
{dropdown}
</div>
+ <Overlay
+ show={this.state.show}
+ target={() => ReactDOM.findDOMNode(this.refs.dotMenu)}
+ onHide={() => this.setState({show: false})}
+ placement='left'
+ container={this}
+ containerPadding={containerPadding}
+ rootClose={true}
+ >
+ {permalinkOverlay}
+ </Overlay>
</li>
</ul>
);
diff --git a/web/react/components/posts_view.jsx b/web/react/components/posts_view.jsx
index 740ce04f6..b7ac92672 100644
--- a/web/react/components/posts_view.jsx
+++ b/web/react/components/posts_view.jsx
@@ -103,7 +103,7 @@ export default class PostsView extends React.Component {
const prevPostIsComment = Utils.isComment(prevPost);
const postFromWebhook = Boolean(post.props && post.props.from_webhook);
const prevPostFromWebhook = Boolean(prevPost.props && prevPost.props.from_webhook);
- const prevPostUserId = Utils.isSystemMessage(prevPost) ? '' : prevPostUserId;
+ const prevPostUserId = Utils.isSystemMessage(prevPost) ? '' : prevPost.user_id;
let prevWebhookName = '';
if (prevPost.props && prevPost.props.override_username) {
prevWebhookName = prevPost.props.override_username;
diff --git a/web/react/components/providers.json b/web/react/components/providers.json
index 5e4cbd656..33e377a39 100644
--- a/web/react/components/providers.json
+++ b/web/react/components/providers.json
@@ -3,265 +3,308 @@
"patterns": [
"http://(?:www\\.)?xkcd\\.com/\\d+/?"
],
- "name": "XKCD"
+ "name": "XKCD",
+ "height": 110
},
{
"patterns": [
"https?://soundcloud.com/.*/.*"
],
- "name": "SoundCloud"
+ "name": "SoundCloud",
+ "height": 110
},
{
"patterns": [
"https?://(?:www\\.)?flickr\\.com/.*",
"https?://flic\\.kr/p/[a-zA-Z0-9]+"
],
- "name": "Flickr"
+ "name": "Flickr",
+ "height": 110
},
{
"patterns": [
"http://www\\.ted\\.com/talks/.+\\.html"
],
- "name": "TED"
+ "name": "TED",
+ "height": 110
},
{
"patterns": [
"http://(?:www\\.)?theverge\\.com/\\d{4}/\\d{1,2}/\\d{1,2}/\\d+/[^/]+/?$"
],
- "name": "The Verge"
+ "name": "The Verge",
+ "height": 110
},
{
"patterns": [
"http://.*\\.viddler\\.com/.*"
],
- "name": "Viddler"
+ "name": "Viddler",
+ "height": 110
},
{
"patterns": [
"https?://(?:www\\.)?avclub\\.com/article/[^/]+/?$"
],
- "name": "The AV Club"
+ "name": "The AV Club",
+ "height": 110
},
{
"patterns": [
"https?://(?:www\\.)?wired\\.com/([^/]+/)?\\d+/\\d+/[^/]+/?$"
],
- "name": "Wired"
+ "name": "Wired",
+ "height": 110
},
{
"patterns": [
"http://www\\.theonion\\.com/articles/[^/]+/?"
],
- "name": "The Onion"
+ "name": "The Onion",
+ "height": 110
},
{
"patterns": [
"http://yfrog\\.com/[0-9a-zA-Z]+/?$"
],
- "name": "YFrog"
+ "name": "YFrog",
+ "height": 110
},
{
"patterns": [
"http://www\\.duffelblog\\.com/\\d{4}/\\d{1,2}/[^/]+/?$"
],
- "name": "The Duffel Blog"
+ "name": "The Duffel Blog",
+ "height": 110
},
{
"patterns": [
"http://www\\.clickhole\\.com/article/[^/]+/?"
],
- "name": "Clickhole"
+ "name": "Clickhole",
+ "height": 110
},
{
"patterns": [
"https?://(?:www.)?skitch.com/([^/]+)/[^/]+/.+",
"http://skit.ch/[^/]+"
],
- "name": "Skitch"
+ "name": "Skitch",
+ "height": 110
},
{
"patterns": [
"https?://(alpha|posts|photos)\\.app\\.net/.*"
],
- "name": "ADN"
+ "name": "ADN",
+ "height": 110
},
{
"patterns": [
"https?://gist\\.github\\.com/(?:[-0-9a-zA-Z]+/)?([0-9a-fA-f]+)"
],
- "name": "Gist"
+ "name": "Gist",
+ "height": 110
},
{
"patterns": [
"https?://www\\.(dropbox\\.com/s/.+\\.(?:jpg|png|gif))",
"https?://db\\.tt/[a-zA-Z0-9]+"
],
- "name": "Dropbox"
+ "name": "Dropbox",
+ "height": 110
},
{
"patterns": [
"https?://[^\\.]+\\.wikipedia\\.org/wiki/(?!Talk:)[^#]+(?:#(.+))?"
],
- "name": "Wikipedia"
+ "name": "Wikipedia",
+ "height": 110
},
{
"patterns": [
"http://www.traileraddict.com/trailer/[^/]+/trailer"
],
- "name": "TrailerAddict"
+ "name": "TrailerAddict",
+ "height": 110
},
{
"patterns": [
"http://lockerz\\.com/[sd]/\\d+"
],
- "name": "Lockerz"
+ "name": "Lockerz",
+ "height": 110
},
{
"patterns": [
"http://gifuk\\.com/s/[0-9a-f]{16}"
],
- "name": "GIFUK"
+ "name": "GIFUK",
+ "height": 110
},
{
"patterns": [
"http://trailers\\.apple\\.com/trailers/[^/]+/[^/]+"
],
- "name": "iTunes Movie Trailers"
+ "name": "iTunes Movie Trailers",
+ "height": 110
},
{
"patterns": [
"http://gfycat\\.com/([a-zA-Z]+)"
],
- "name": "Gfycat"
+ "name": "Gfycat",
+ "height": 110
},
{
"patterns": [
"http://bash\\.org/\\?(\\d+)"
],
- "name": "Bash.org"
+ "name": "Bash.org",
+ "height": 110
},
{
"patterns": [
"http://arstechnica\\.com/[^/]+/\\d+/\\d+/[^/]+/?$"
],
- "name": "Ars Technica"
+ "name": "Ars Technica",
+ "height": 110
},
{
"patterns": [
"http://imgur\\.com/gallery/[0-9a-zA-Z]+"
],
- "name": "Imgur"
+ "name": "Imgur",
+ "height": 110
},
{
"patterns": [
"http://www\\.asciiartfarts\\.com/[0-9]+\\.html"
],
- "name": "ASCII Art Farts"
+ "name": "ASCII Art Farts",
+ "height": 110
},
{
"patterns": [
"http://www\\.monoprice\\.com/products/product\\.asp\\?.*p_id=\\d+"
],
- "name": "Monoprice"
+ "name": "Monoprice",
+ "height": 110
},
{
"patterns": [
"http://boingboing\\.net/\\d{4}/\\d{2}/\\d{2}/[^/]+\\.html"
],
- "name": "Boing Boing"
+ "name": "Boing Boing",
+ "height": 110
},
{
"patterns": [
"https?://github\\.com/([^/]+)/([^/]+)/commit/(.+)",
"http://git\\.io/[_0-9a-zA-Z]+"
],
- "name": "Github Commit"
+ "name": "Github Commit",
+ "height": 110
},
{
"patterns": [
"https?://open\\.spotify\\.com/(track|album)/([0-9a-zA-Z]{22})"
],
- "name": "Spotify"
+ "name": "Spotify",
+ "height": 110
},
{
"patterns": [
"https?://path\\.com/p/([0-9a-zA-Z]+)$"
],
- "name": "Path"
+ "name": "Path",
+ "height": 110
},
{
"patterns": [
"http://www.funnyordie.com/videos/[^/]+/.+"
],
- "name": "Funny or Die"
+ "name": "Funny or Die",
+ "height": 110
},
{
"patterns": [
"http://(?:www\\.)?twitpic\\.com/([^/]+)"
],
- "name": "Twitpic"
+ "name": "Twitpic",
+ "height": 110
},
{
"patterns": [
"https?://www\\.giantbomb\\.com/videos/[^/]+/\\d+-\\d+/?"
],
- "name": "GiantBomb"
+ "name": "GiantBomb",
+ "height": 110
},
{
"patterns": [
"http://(?:www\\.)?beeradvocate\\.com/beer/profile/\\d+/\\d+"
],
- "name": "Beer Advocate"
+ "name": "Beer Advocate",
+ "height": 110
},
{
"patterns": [
"http://(?:www\\.)?imdb.com/title/(tt\\d+)"
],
- "name": "IMDB"
+ "name": "IMDB",
+ "height": 110
},
{
"patterns": [
"http://cl\\.ly/(?:image/)?[0-9a-zA-Z]+/?$"
],
- "name": "CloudApp"
+ "name": "CloudApp",
+ "height": 110
},
{
"patterns": [
"http://clyp\\.it/.*"
],
- "name": "Clyp"
+ "name": "Clyp",
+ "height": 110
},
{
"patterns": [
"http://www\\.hulu\\.com/watch/.*"
],
- "name": "Hulu"
+ "name": "Hulu",
+ "height": 110
},
{
"patterns": [
"https?://(?:www|mobile\\.)?twitter\\.com/(?:#!/)?[^/]+/status(?:es)?/(\\d+)/?$",
"https?://t\\.co/[a-zA-Z0-9]+"
],
- "name": "Twitter"
+ "name": "Twitter",
+ "height": 110
},
{
"patterns": [
"https?://(?:www\\.)?vimeo\\.com/.+"
],
- "name": "Vimeo"
+ "name": "Vimeo",
+ "height": 110
},
{
"patterns": [
"http://www\\.amazon\\.com/(?:.+/)?[gd]p/(?:product/)?(?:tags-on-product/)?([a-zA-Z0-9]+)",
"http://amzn\\.com/([^/]+)"
],
- "name": "Amazon"
+ "name": "Amazon",
+ "height": 110
},
{
"patterns": [
"http://qik\\.com/video/.*"
],
- "name": "Qik"
+ "name": "Qik",
+ "height": 110
},
{
"patterns": [
@@ -269,56 +312,65 @@
"http://www\\.rdio\\.com/artist/[^/]+/album/[^/]+/track/[^/]+/?",
"http://www\\.rdio\\.com/people/[^/]+/playlists/\\d+/[^/]+"
],
- "name": "Rdio"
+ "name": "Rdio",
+ "height": 110
},
{
"patterns": [
"http://www\\.slideshare\\.net/.*/.*"
],
- "name": "SlideShare"
+ "name": "SlideShare",
+ "height": 110
},
{
"patterns": [
"http://imgur\\.com/([0-9a-zA-Z]+)$"
],
- "name": "Imgur"
+ "name": "Imgur",
+ "height": 110
},
{
"patterns": [
"https?://instagr(?:\\.am|am\\.com)/p/.+"
],
- "name": "Instagram"
+ "name": "Instagram",
+ "height": 110
},
{
"patterns": [
"http://www\\.twitlonger\\.com/show/[a-zA-Z0-9]+",
"http://tl\\.gd/[^/]+"
],
- "name": "Twitlonger"
+ "name": "Twitlonger",
+ "height": 110
},
{
"patterns": [
"https?://vine.co/v/[a-zA-Z0-9]+"
],
- "name": "Vine"
+ "name": "Vine",
+ "height": 110
},
{
"patterns": [
"http://www\\.urbandictionary\\.com/define\\.php\\?term=.+"
],
- "name": "Urban Dictionary"
+ "name": "Urban Dictionary",
+ "height": 110
},
{
"patterns": [
"http://picplz\\.com/user/[^/]+/pic/[^/]+"
],
- "name": "Picplz"
+ "name": "Picplz",
+ "height": 110
},
{
"patterns": [
"https?://(?:www\\.)?twitter\\.com/(?:#!/)?[^/]+/status(?:es)?/(\\d+)/photo/\\d+(?:/large|/)?$",
"https?://pic\\.twitter\\.com/.+"
],
- "name": "Twitter"
+ "name": "Twitter",
+ "height": 110
}
-] \ No newline at end of file
+]
diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx
index 0a37a6803..dd9a793be 100644
--- a/web/react/components/rhs_root_post.jsx
+++ b/web/react/components/rhs_root_post.jsx
@@ -167,7 +167,7 @@ export default class RhsRootPost extends React.Component {
userProfile = (
<UserProfile
userId={''}
- overwriteName={''}
+ overwriteName={Constants.SYSTEM_MESSAGE_PROFILE_NAME}
overwriteImage={Constants.SYSTEM_MESSAGE_PROFILE_IMAGE}
disablePopover={true}
/>
@@ -209,7 +209,7 @@ export default class RhsRootPost extends React.Component {
</time>
</li>
<li className='col col__reply'>
- <div className='dropdown'>
+ <div>
{rootOptions}
</div>
</li>
diff --git a/web/react/components/suggestion/suggestion_box.jsx b/web/react/components/suggestion/suggestion_box.jsx
index 4cfb38f8e..ad8ad1e9e 100644
--- a/web/react/components/suggestion/suggestion_box.jsx
+++ b/web/react/components/suggestion/suggestion_box.jsx
@@ -94,7 +94,7 @@ export default class SuggestionBox extends React.Component {
} else if (e.which === KeyCodes.DOWN) {
EventHelpers.emitSelectNextSuggestion(this.suggestionId);
e.preventDefault();
- } else if (e.which === KeyCodes.ENTER || (e.which === KeyCodes.SPACE && SuggestionStore.shouldCompleteOnSpace(this.suggestionId))) {
+ } else if (e.which === KeyCodes.ENTER || e.which === KeyCodes.TAB || (e.which === KeyCodes.SPACE && SuggestionStore.shouldCompleteOnSpace(this.suggestionId))) {
EventHelpers.emitCompleteWordSuggestion(this.suggestionId);
e.preventDefault();
} else if (this.props.onKeyDown) {
diff --git a/web/react/components/team_members_modal.jsx b/web/react/components/team_members_modal.jsx
index eed4a1f19..27224c283 100644
--- a/web/react/components/team_members_modal.jsx
+++ b/web/react/components/team_members_modal.jsx
@@ -26,9 +26,11 @@ export default class TeamMembersModal extends React.Component {
}
onShow() {
- $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
+ } else {
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 150);
}
}
diff --git a/web/react/components/user_settings/manage_outgoing_hooks.jsx b/web/react/components/user_settings/manage_outgoing_hooks.jsx
index 9c88bb819..9c0fe3709 100644
--- a/web/react/components/user_settings/manage_outgoing_hooks.jsx
+++ b/web/react/components/user_settings/manage_outgoing_hooks.jsx
@@ -188,7 +188,7 @@ export default class ManageOutgoingHooks extends React.Component {
key={hook.id}
className='webhook__item'
>
- <div className='padding-top x2'>
+ <div className='padding-top x2 webhook__url'>
<strong>{'URLs: '}</strong><span className='word-break--all'>{hook.callback_urls.join(', ')}</span>
</div>
{channelDiv}
diff --git a/web/react/components/user_settings/user_settings_advanced.jsx b/web/react/components/user_settings/user_settings_advanced.jsx
index b4d34c658..c15936ccd 100644
--- a/web/react/components/user_settings/user_settings_advanced.jsx
+++ b/web/react/components/user_settings/user_settings_advanced.jsx
@@ -195,7 +195,7 @@ export default class AdvancedSettingsDisplay extends React.Component {
inputs.push(
<div key='advancedPreviewFeatures_helptext'>
<br/>
- {'Check any pre-released features you\'d like to preview.'}
+ {'Check any pre-released features you\'d like to preview. You may also need to refresh the page before the setting will take effect.'}
</div>
);
diff --git a/web/react/components/user_settings/user_settings_modal.jsx b/web/react/components/user_settings/user_settings_modal.jsx
index 97c601b5e..36e1aa217 100644
--- a/web/react/components/user_settings/user_settings_modal.jsx
+++ b/web/react/components/user_settings/user_settings_modal.jsx
@@ -47,9 +47,11 @@ export default class UserSettingsModal extends React.Component {
}
handleShow() {
- $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
if ($(window).width() > 768) {
$(ReactDOM.findDOMNode(this.refs.modalBody)).perfectScrollbar();
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 200);
+ } else {
+ $(ReactDOM.findDOMNode(this.refs.modalBody)).css('max-height', $(window).height() - 50);
}
}
diff --git a/web/react/utils/constants.jsx b/web/react/utils/constants.jsx
index 2d0edd596..b4d56bccb 100644
--- a/web/react/utils/constants.jsx
+++ b/web/react/utils/constants.jsx
@@ -121,6 +121,7 @@ export default {
POST_DELETED: 'deleted',
POST_TYPE_JOIN_LEAVE: 'system_join_leave',
SYSTEM_MESSAGE_PREFIX: 'system_',
+ SYSTEM_MESSAGE_PROFILE_NAME: 'System',
SYSTEM_MESSAGE_PROFILE_IMAGE: '/static/images/logo_compact.png',
RESERVED_TEAM_NAMES: [
'www',
@@ -391,7 +392,8 @@ export default {
BACKSPACE: 8,
ENTER: 13,
ESCAPE: 27,
- SPACE: 32
+ SPACE: 32,
+ TAB: 9
},
HighlightedLanguages: {
diff: 'Diff',
@@ -431,6 +433,10 @@ export default {
MARKDOWN_PREVIEW: {
label: 'markdown_preview', // github issue: https://github.com/mattermost/platform/pull/1389
description: 'Show markdown preview option in message input box'
+ },
+ EMBED_PREVIEW: {
+ label: 'embed_preview',
+ description: 'Show preview snippet of links below message'
}
}
};
diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx
index f2721c81d..d600ef069 100644
--- a/web/react/utils/markdown.jsx
+++ b/web/react/utils/markdown.jsx
@@ -228,7 +228,7 @@ class MattermostMarkdownRenderer extends marked.Renderer {
const isTaskList = taskListReg.exec(text);
if (isTaskList) {
- return `<li>${'<input type="checkbox" disabled="disabled" ' + (isTaskList[1] === ' ' ? '' : 'checked="checked" ') + '/> '}${text.replace(taskListReg, '')}</li>`;
+ return `<li class="list-item--task-list">${'<input type="checkbox" disabled="disabled" ' + (isTaskList[1] === ' ' ? '' : 'checked="checked" ') + '/> '}${text.replace(taskListReg, '')}</li>`;
}
return `<li>${text}</li>`;
}
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index afe27ef96..eb1d36ced 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -252,13 +252,6 @@ export function getTimestamp() {
// extracts links not styled by Markdown
export function extractLinks(text) {
- const urlMatcher = new Autolinker.matchParser.MatchParser({
- urls: true,
- emails: false,
- twitter: false,
- phone: false,
- hashtag: false
- });
const links = [];
let replaceText = text;
@@ -271,7 +264,7 @@ export function extractLinks(text) {
}
}
- function replaceFn(match) {
+ function replaceFn(autolinker, match) {
let link = '';
const matchText = match.getMatchedText();
const tempText = replaceText;
@@ -304,7 +297,16 @@ export function extractLinks(text) {
links.push(link);
}
- urlMatcher.replace(text, replaceFn, this);
+
+ Autolinker.link(text, {
+ replaceFn,
+ urls: true,
+ emails: false,
+ twitter: false,
+ phone: false,
+ hashtag: false
+ });
+
return {links, text};
}
@@ -574,6 +576,7 @@ export function applyTheme(theme) {
if (theme.sidebarHeaderTextColor) {
changeCss('.sidebar--left .team__header .header__info, .sidebar--menu .team__header .header__info', 'color:' + theme.sidebarHeaderTextColor, 1);
+ changeCss('.sidebar--left .team__header .navbar-right .dropdown__icon, .sidebar--menu .team__header .navbar-right .dropdown__icon', 'fill:' + theme.sidebarHeaderTextColor, 1);
changeCss('.sidebar--left .team__header .user__name, .sidebar--menu .team__header .user__name', 'color:' + changeOpacity(theme.sidebarHeaderTextColor, 0.8), 1);
changeCss('.sidebar--left .team__header:hover .user__name, .sidebar--menu .team__header:hover .user__name', 'color:' + theme.sidebarHeaderTextColor, 1);
changeCss('.modal .modal-header .modal-title, .modal .modal-header .modal-title .name, .modal .modal-header button.close', 'color:' + theme.sidebarHeaderTextColor, 1);
diff --git a/web/sass-files/sass/partials/_access-history.scss b/web/sass-files/sass/partials/_access-history.scss
index c8a0b28bd..dcb5f3c5f 100644
--- a/web/sass-files/sass/partials/_access-history.scss
+++ b/web/sass-files/sass/partials/_access-history.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.access-history__table {
display: table;
width: 100%;
diff --git a/web/sass-files/sass/partials/_activity-log.scss b/web/sass-files/sass/partials/_activity-log.scss
index f61c35a28..df5869b4c 100644
--- a/web/sass-files/sass/partials/_activity-log.scss
+++ b/web/sass-files/sass/partials/_activity-log.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
@keyframes highlight {
from { background: rgba(yellow, 0.5);}
to { background: none;}
diff --git a/web/sass-files/sass/partials/_admin-console.scss b/web/sass-files/sass/partials/_admin-console.scss
index af827a7f8..abba9de02 100644
--- a/web/sass-files/sass/partials/_admin-console.scss
+++ b/web/sass-files/sass/partials/_admin-console.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#admin_controller {
> div {
height: 100%;
diff --git a/web/sass-files/sass/partials/_base.scss b/web/sass-files/sass/partials/_base.scss
index 0f8cd56f7..61ad186e0 100644
--- a/web/sass-files/sass/partials/_base.scss
+++ b/web/sass-files/sass/partials/_base.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
html, body {
height: 100%;
}
@@ -143,6 +145,7 @@ select {
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
cursor: auto;
background: rgba(#fff, 0.1);
+ color: inherit;
}
.form-group {
@@ -208,6 +211,7 @@ select {
.alert {
padding: 8px 12px;
+ @include border-radius(2px);
}
.emoji {
diff --git a/web/sass-files/sass/partials/_colorpicker.scss b/web/sass-files/sass/partials/_colorpicker.scss
index 431f9d8d0..7c79844ae 100644
--- a/web/sass-files/sass/partials/_colorpicker.scss
+++ b/web/sass-files/sass/partials/_colorpicker.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
/*!
* Bootstrap Colorpicker
* http://mjolnic.github.io/bootstrap-colorpicker/
diff --git a/web/sass-files/sass/partials/_content.scss b/web/sass-files/sass/partials/_content.scss
index 471ba63af..da75bc61b 100644
--- a/web/sass-files/sass/partials/_content.scss
+++ b/web/sass-files/sass/partials/_content.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.inner__wrap {
@include single-transition(all, 0.5s, ease);
&.move--left {
@@ -34,9 +36,13 @@
#archive-link-home {
@include flex(0 0 auto);
cursor: pointer;
- padding: 10px;
+ padding: 10px 20px;
font-size: 13px;
+ .fa {
+ @include opacity(0.7);
+ }
+
a {
color: inherit;
}
diff --git a/web/sass-files/sass/partials/_error-bar.scss b/web/sass-files/sass/partials/_error-bar.scss
index 8b7432bbb..249bbeaa5 100644
--- a/web/sass-files/sass/partials/_error-bar.scss
+++ b/web/sass-files/sass/partials/_error-bar.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.error-bar {
background-color: #0099FF;
text-align:center;
diff --git a/web/sass-files/sass/partials/_error.scss b/web/sass-files/sass/partials/_error.scss
index ecdcc62d9..e09a751d2 100644
--- a/web/sass-files/sass/partials/_error.scss
+++ b/web/sass-files/sass/partials/_error.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
body {
&.error {
.container-fluid {
diff --git a/web/sass-files/sass/partials/_files.scss b/web/sass-files/sass/partials/_files.scss
index 168634b5e..aeb04e931 100644
--- a/web/sass-files/sass/partials/_files.scss
+++ b/web/sass-files/sass/partials/_files.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.preview-container {
position: relative;
margin-top: 25px;
diff --git a/web/sass-files/sass/partials/_font-awesome.scss b/web/sass-files/sass/partials/_font-awesome.scss
index 2dcdc2207..74580a7e8 100644
--- a/web/sass-files/sass/partials/_font-awesome.scss
+++ b/web/sass-files/sass/partials/_font-awesome.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
/*!
* Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
diff --git a/web/sass-files/sass/partials/_footer.scss b/web/sass-files/sass/partials/_footer.scss
index 239dd92c1..deed14d67 100644
--- a/web/sass-files/sass/partials/_footer.scss
+++ b/web/sass-files/sass/partials/_footer.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.footer-pane {
background: #eee;
padding-bottom: 1em;
diff --git a/web/sass-files/sass/partials/_forms.scss b/web/sass-files/sass/partials/_forms.scss
index 685677ad0..a2d6eaf99 100644
--- a/web/sass-files/sass/partials/_forms.scss
+++ b/web/sass-files/sass/partials/_forms.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.form-horizontal {
.modal-intro {
margin: -10px 0 30px;
diff --git a/web/sass-files/sass/partials/_get-link.scss b/web/sass-files/sass/partials/_get-link.scss
index a723a4c1f..d4365d1e6 100644
--- a/web/sass-files/sass/partials/_get-link.scss
+++ b/web/sass-files/sass/partials/_get-link.scss
@@ -1,6 +1,8 @@
+@charset "UTF-8";
+
.copy-link-confirm {
display: inline-block;
float: left;
padding: 4px 10px;
- margin: 3px 0 0 10px;
+ margin: 1px 0 0 10px;
} \ No newline at end of file
diff --git a/web/sass-files/sass/partials/_headers.scss b/web/sass-files/sass/partials/_headers.scss
index 51625afe0..bd0392a52 100644
--- a/web/sass-files/sass/partials/_headers.scss
+++ b/web/sass-files/sass/partials/_headers.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#channel-header {
@include flex(0 0 56px);
}
@@ -291,6 +293,7 @@
}
.channel-header__links {
+ font-family: 'Open Sans', sans-serif;
height: 30px;
width: 24px;
line-height: 26px;
diff --git a/web/sass-files/sass/partials/_loading.scss b/web/sass-files/sass/partials/_loading.scss
index ab8601df6..e9863ddbd 100644
--- a/web/sass-files/sass/partials/_loading.scss
+++ b/web/sass-files/sass/partials/_loading.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.loading-screen {
display: table;
width: 100%;
diff --git a/web/sass-files/sass/partials/_markdown.scss b/web/sass-files/sass/partials/_markdown.scss
index 6d1ecbfa0..9ad15f91a 100644
--- a/web/sass-files/sass/partials/_markdown.scss
+++ b/web/sass-files/sass/partials/_markdown.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.markdown__heading {
font-weight: 700;
line-height: 1.5;
diff --git a/web/sass-files/sass/partials/_mentions.scss b/web/sass-files/sass/partials/_mentions.scss
index ee5b7f6d0..df6dd40a2 100644
--- a/web/sass-files/sass/partials/_mentions.scss
+++ b/web/sass-files/sass/partials/_mentions.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.mention {
color: #fff;
background: $primary-color;
diff --git a/web/sass-files/sass/partials/_modal.scss b/web/sass-files/sass/partials/_modal.scss
index 01c9e136c..55725abe0 100644
--- a/web/sass-files/sass/partials/_modal.scss
+++ b/web/sass-files/sass/partials/_modal.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#channel_members_modal .modal-body {
min-height: 110px;
}
@@ -33,6 +35,9 @@
text-align: right;
padding-right: 0;
}
+ .team-member-list {
+ width: 100%;
+ }
.remove__member {
float: right;
color: #999;
@@ -93,6 +98,7 @@
background: rgba(0, 0, 0, 0.1);
}
span {
+ font-family: 'Open Sans', sans-serif;
line-height: 10px;
}
}
diff --git a/web/sass-files/sass/partials/_navbar.scss b/web/sass-files/sass/partials/_navbar.scss
index aad46d3d9..28ab61ec1 100644
--- a/web/sass-files/sass/partials/_navbar.scss
+++ b/web/sass-files/sass/partials/_navbar.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#navbar{
input {
margin: 0px 5px 0px 2px;
diff --git a/web/sass-files/sass/partials/_oauth.scss b/web/sass-files/sass/partials/_oauth.scss
index 35d3a95e3..2bd9a0de5 100644
--- a/web/sass-files/sass/partials/_oauth.scss
+++ b/web/sass-files/sass/partials/_oauth.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.oauth-prompt {
background: #fff;
border: 1px solid #ddd;
diff --git a/web/sass-files/sass/partials/_perfect-scrollbar.scss b/web/sass-files/sass/partials/_perfect-scrollbar.scss
index f38c6062f..0e0967d81 100755
--- a/web/sass-files/sass/partials/_perfect-scrollbar.scss
+++ b/web/sass-files/sass/partials/_perfect-scrollbar.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.ps-container {
overflow: hidden !important; }
.ps-container.ps-active-x > .ps-scrollbar-x-rail, .ps-container.ps-active-y > .ps-scrollbar-y-rail {
diff --git a/web/sass-files/sass/partials/_popover.scss b/web/sass-files/sass/partials/_popover.scss
index a48bfb22d..bc55b7ff7 100644
--- a/web/sass-files/sass/partials/_popover.scss
+++ b/web/sass-files/sass/partials/_popover.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.channel-header__info .popover-content {
max-height: 250px;
overflow: auto;
diff --git a/web/sass-files/sass/partials/_post.scss b/web/sass-files/sass/partials/_post.scss
index 4376b43a4..81cc311e1 100644
--- a/web/sass-files/sass/partials/_post.scss
+++ b/web/sass-files/sass/partials/_post.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.custom-textarea {
white-space:pre-wrap;
word-wrap:break-word;
@@ -367,12 +369,8 @@ body.ios {
}
}
- &.post--highlight {
- background-color: beige;
- }
-
- &.post--system .post__header .col__name {
- display: none;
+ &.post--highlight {
+ background-color: beige;
}
ul {
@@ -549,7 +547,23 @@ body.ios {
position: absolute;
right: 0;
top: 30px;
- width: 60px;
+ width: 65px;
+ }
+
+ .permalink-popover {
+ min-width: 0;
+
+ .popover-content {
+ padding: 5px;
+ }
+
+ .form-control, .btn {
+ font-size: 13px;
+ height: 30px;
+ padding: 0 8px;
+ line-height: 30px;
+ }
+
}
}
@@ -567,8 +581,9 @@ body.ios {
.dropdown {
display: inline-block;
visibility: hidden;
+ position: absolute;
+ right: 0;
top: -1px;
- float: right;
.dropdown-menu {
right: 0;
@@ -601,11 +616,11 @@ body.ios {
word-wrap: break-word;
padding: 0.2em 0.5em 0em;
@include legacy-pie-clearfix;
- width: calc(100% - 70px);
+ width: calc(100% - 75px);
img {
- max-height: 400px;
- }
+ max-height: 400px;
+ }
ul {
padding: 5px 0 0 20px;
@@ -616,11 +631,36 @@ body.ios {
padding: 0 0 0 20px
}
+ li.list-item--task-list ul, li.list-item--task-list ol {
+ margin-left: 20px;
+ }
+
+ li.list-item--task-list ul {
+ padding-left: 0;
+ }
+
+ li:not(.list-item--task-list) li.list-item--task-list, li:not(.list-item--task-list) li.list-item--task-list ~ li {
+ margin-left: -20px;
+ }
+
li input[type="checkbox"]:disabled {
- vertical-align: sub;
+ vertical-align: top;
cursor: default;
}
}
+
+ ul li.list-item--task-list, ul li.list-item--task-list ~ li {
+ list-style-type: none;
+ }
+
+ ul li.list-item--task-list ~ li:not(.list-item--task-list) {
+ text-indent: 3px;
+
+ &:before {
+ content: "⦁";
+ margin-right: 8px;
+ }
+ }
}
.post__link {
@@ -653,11 +693,11 @@ body.ios {
color: #999;
}
- .permalink-icon {
+ .permalink-icon {
display: inline-block;
color: $primary-color;
visibility: hidden;
- }
+ }
.comment-icon__container {
fill: $primary-color;
@@ -751,6 +791,7 @@ body.ios {
width: 80%;
padding-right: 5px;
overflow-x: auto;
+ overflow-y: hidden;
&.attachment__body--no_thumb {
width: 100%;
}
@@ -765,6 +806,7 @@ body.ios {
margin: 5px 0;
padding: 0;
line-height: 16px;
+ height: 22px;
font-size: 16px;
a {
font-size: 16px;
@@ -800,9 +842,10 @@ body.ios {
}
.permalink-text {
- overflow: hidden;
+ overflow: hidden;
}
.permalink-popover {
- min-width: 320px;
+ min-width: 320px;
+ margin-left: 50px !important;
}
diff --git a/web/sass-files/sass/partials/_post_right.scss b/web/sass-files/sass/partials/_post_right.scss
index 582b72c90..4f04a266b 100644
--- a/web/sass-files/sass/partials/_post_right.scss
+++ b/web/sass-files/sass/partials/_post_right.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.post-right__container {
@include display-flex;
@include flex-direction(column);
diff --git a/web/sass-files/sass/partials/_print.scss b/web/sass-files/sass/partials/_print.scss
new file mode 100644
index 000000000..143ec2915
--- /dev/null
+++ b/web/sass-files/sass/partials/_print.scss
Binary files differ
diff --git a/web/sass-files/sass/partials/_responsive.scss b/web/sass-files/sass/partials/_responsive.scss
index 2011a25f2..bdf04ff82 100644
--- a/web/sass-files/sass/partials/_responsive.scss
+++ b/web/sass-files/sass/partials/_responsive.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
@media screen and (max-width: 1800px) {
.inner__wrap {
&.move--left {
@@ -105,7 +107,8 @@
&:after {
font-size: 20px;
- content: '...'
+ content: '...';
+ top: -3px;
}
}
diff --git a/web/sass-files/sass/partials/_search.scss b/web/sass-files/sass/partials/_search.scss
index 3af0f3f2c..a29e940e6 100644
--- a/web/sass-files/sass/partials/_search.scss
+++ b/web/sass-files/sass/partials/_search.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#channel-header .search-bar__container {
padding: 0 8px 0 3px;
}
diff --git a/web/sass-files/sass/partials/_settings.scss b/web/sass-files/sass/partials/_settings.scss
index ad52e0bbb..ee0c40067 100644
--- a/web/sass-files/sass/partials/_settings.scss
+++ b/web/sass-files/sass/partials/_settings.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
@import "access-history";
@import "activity-log";
@import "webhooks";
@@ -38,7 +40,7 @@
font-weight: 600;
}
- .no-padding--left {
+ .no-padding--left {
padding-left: 0;
}
.padding-top {
@@ -311,17 +313,23 @@
.member-name {
font-weight:500;
display: block;
+ max-width: 80%;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.member-email {
color:darkgrey;
display: block;
+ max-width: 80%;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.member-role, .member-drop {
position:absolute;
- right:15px;
- top:13px;
+ right: 15px;
+ top: 8px;
}
}
diff --git a/web/sass-files/sass/partials/_sidebar--left.scss b/web/sass-files/sass/partials/_sidebar--left.scss
index eb7c1b83f..d5bf0e503 100644
--- a/web/sass-files/sass/partials/_sidebar--left.scss
+++ b/web/sass-files/sass/partials/_sidebar--left.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.sidebar--left {
position: absolute;
width: 220px;
@@ -108,6 +110,7 @@
}
}
.btn-close {
+ font-family: 'Open Sans', sans-serif;
position: absolute;
right: 15px;
top: -1px;
@@ -140,7 +143,6 @@
}
}
a, a:hover, a:focus {
- padding-right: 10px;
background-color: rgba(black, 0.1);
border-radius: 0;
font-weight: 400;
diff --git a/web/sass-files/sass/partials/_sidebar--menu.scss b/web/sass-files/sass/partials/_sidebar--menu.scss
index e34cd72c1..443b7dbb0 100644
--- a/web/sass-files/sass/partials/_sidebar--menu.scss
+++ b/web/sass-files/sass/partials/_sidebar--menu.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.sidebar--menu {
position: absolute;
width: 220px;
diff --git a/web/sass-files/sass/partials/_sidebar--right.scss b/web/sass-files/sass/partials/_sidebar--right.scss
index ada43fb99..f328f0971 100644
--- a/web/sass-files/sass/partials/_sidebar--right.scss
+++ b/web/sass-files/sass/partials/_sidebar--right.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.sidebar--right {
position: absolute;
width: 400px;
diff --git a/web/sass-files/sass/partials/_signup.scss b/web/sass-files/sass/partials/_signup.scss
index 6216dd9ae..81fe037f7 100644
--- a/web/sass-files/sass/partials/_signup.scss
+++ b/web/sass-files/sass/partials/_signup.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.signup-header {
width:100%;
line-height: 33px;
diff --git a/web/sass-files/sass/partials/_statistics.scss b/web/sass-files/sass/partials/_statistics.scss
index a2401a70f..edd3c9bf3 100644
--- a/web/sass-files/sass/partials/_statistics.scss
+++ b/web/sass-files/sass/partials/_statistics.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.team_statistics {
.total-count {
margin: 1em 0;
diff --git a/web/sass-files/sass/partials/_suggestion_list.scss b/web/sass-files/sass/partials/_suggestion_list.scss
index 5e91a126d..28c113c6d 100644
--- a/web/sass-files/sass/partials/_suggestion_list.scss
+++ b/web/sass-files/sass/partials/_suggestion_list.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.suggestion-list {
width: 100%;
z-index: 100;
diff --git a/web/sass-files/sass/partials/_tooltips.scss b/web/sass-files/sass/partials/_tooltips.scss
index e018cf13c..c2de3c590 100644
--- a/web/sass-files/sass/partials/_tooltips.scss
+++ b/web/sass-files/sass/partials/_tooltips.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
#recentMentionsTooltip {
.tooltip-arrow {
margin-left: 10px;
diff --git a/web/sass-files/sass/partials/_tutorial.scss b/web/sass-files/sass/partials/_tutorial.scss
index 8ab29ab10..9e5e1ad7a 100644
--- a/web/sass-files/sass/partials/_tutorial.scss
+++ b/web/sass-files/sass/partials/_tutorial.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.tip-backdrop {
background: rgba(black, 0.5);
position: absolute;
diff --git a/web/sass-files/sass/partials/_variables.scss b/web/sass-files/sass/partials/_variables.scss
index 78952abb5..514be2e8b 100644
--- a/web/sass-files/sass/partials/_variables.scss
+++ b/web/sass-files/sass/partials/_variables.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
@function em($pixels, $context: 14px) {
@return #{$pixels/$context}em
}
diff --git a/web/sass-files/sass/partials/_videos.scss b/web/sass-files/sass/partials/_videos.scss
index 3f15f8f1e..43f30ce84 100644
--- a/web/sass-files/sass/partials/_videos.scss
+++ b/web/sass-files/sass/partials/_videos.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.video-div {
position:relative;
max-width: 480px;
diff --git a/web/sass-files/sass/partials/_webhooks.scss b/web/sass-files/sass/partials/_webhooks.scss
index b801ccf63..4b0215a9e 100644
--- a/web/sass-files/sass/partials/_webhooks.scss
+++ b/web/sass-files/sass/partials/_webhooks.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.webhooks__container {
background: rgba(black, 0.1);
border: 1px solid;
diff --git a/web/sass-files/sass/partials/_welcome.scss b/web/sass-files/sass/partials/_welcome.scss
index 7f2354a36..0be43d29c 100644
--- a/web/sass-files/sass/partials/_welcome.scss
+++ b/web/sass-files/sass/partials/_welcome.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
.welcome-info {
max-width: 550px;
margin-top: 50px;
diff --git a/web/sass-files/sass/styles.scss b/web/sass-files/sass/styles.scss
index e7fd7c976..c93372175 100644
--- a/web/sass-files/sass/styles.scss
+++ b/web/sass-files/sass/styles.scss
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
/* Welcome to Compass.
* In this file you should write your main styles. (or centralize your imports)
* Import this file using the following HTML or equivalent:
@@ -49,3 +51,6 @@
// Standalone Css
@import "partials/oauth";
+
+// Print
+@import "partials/print"; \ No newline at end of file
diff --git a/web/templates/channel.html b/web/templates/channel.html
index a5c0354a3..8abbe36df 100644
--- a/web/templates/channel.html
+++ b/web/templates/channel.html
@@ -30,7 +30,7 @@ window.setup_channel_page({{ .Props }}, {{ .Team }}, {{ .Channel }}, {{ .User }}
if($(window).height() > 1200){
modals.css('max-height', 1000);
} else {
- modals.css('max-height', $(window).height() - 50);
+ modals.css('max-height', $(window).height() - 200);
}
modals.perfectScrollbar();
</script>