diff options
20 files changed, 270 insertions, 58 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 595371fe6..25d188397 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,14 +7,38 @@ The "UNDER DEVELOPMENT" section of the Mattermost changelog appears in the produ - **Release candidate anticipated:** 2015-12-10 - **Final release anticipated:** 2015-12-16 +### New Features + +Authentication +- Documented unofficial GitHub SSO support using GitLab UI + +Archives +- Added permalink feature that lets users link to a post in the message archives +- Added ability to "Jump" to archives from a search result + +Account Settings +- Added "Preview pre-release features" setting, to allow user to preview early features ahead of their official release +- Added "Display font" setting, so users can select which font to use + +Messaging & Comments +- Added in-line previews for links from select websites and for URLs pointing to an image (enabled via Account Settings -> Advanced -> Preview pre-release features) +- Added emoji autocomplete + +Extras +- Added `/loadtest url` tool for manually [testing text processing](https://github.com/mattermost/platform/tree/master/doc/developer/tests) + ### Improvements Performance - Updated getProfiles service to return less data +- Refactored several modals to use React-Boostrap +- Refactored the center channel Messaging & Comments -- Added in-line previews for links from select websites and for URLs pointing to an image -- Added a "Help" link for messaging +- Added "Help" link for messaging +- Removed the @all mention +- Added Markdown support for task lists +- Added ability to preview a Markdown message before sending (enabled via Account Settings -> Advanced -> Preview pre-release features) Onboarding - Added various small improvements to the tutorial @@ -22,6 +46,9 @@ Onboarding User Interface - Visually combined sequential messages from the same user - Added ability to rename "Town Square" +- Teammate name display option now applies to messages and comments +- Menus and search improved on mobile UI +- Switched to Emoji One style emojis #### Bug Fixes @@ -29,14 +56,38 @@ User Interface - Fixed bug where the channel sidebar didn't order correctly on Postgres databases - Fixed bug where search results did not highlight when searching with quotation marks, wildcard, or in: and from: modifiers - Fixed bug with the cancel button not properly resetting the text in some account settings fields -- Fixed a bug where editing a post to be empty caused a 404 error +- Fixed bug where editing a post to be empty caused a 404 error +- Fixed bug where logging out did not work properly on IE11 - Fixed issue where refreshing the page with the right hand sidebar open caused "..." to show up in place of usernames +- Fixed issue where invite to channel modal did not update properly when switching between channels + +### Compatibility + +#### Config.json Changes from v1.2 to v1.3 + +Multiple settings were added to [`config.json`](./config/config.json). These options can be modified in the System Console, or manually updated in the existing config.json file. This is a list of changes and their new default values in a fresh install: +- Under `EmailSettings` in `config.json`: + - Removed: `"ApplePushServer": ""` which is replaced with `SendPushNotifications` and `PushNotificationServer` + - Removed: `"ApplePushCertPublic": ""` which is replaced with `SendPushNotifications` and `PushNotificationServer` + - Removed: `"ApplePushCertPrivate": ""` which is replaced with `SendPushNotifications` and `PushNotificationServer` + - Added: `"SendPushNotifications": true` to control whether mobile push notifications are sent to the server specified in `PushNotificationServer` + - Added: `"PushNotificationServer": "https://push.mattermost.com"` to specify the address of the proxy server that re-sends push notifications to their respective services like APNS (Apple Push Notification Services) + +#### Known Issues + +- When navigating to a page with new messages as well as message containing inline images added via markdown, the channel may move up and down while loading the inline images +- Microsoft Edge does not yet support drag and drop +- Media files of type .avi .mkv .wmv .mov .flv .mp4a do not play properly +- No scroll bar in center channel +- Pasting images into text box fails to upload on Firefox, Safari, and IE11 +- Slack import @mentions break #### Contributors Many thanks to our external contributors. In no particular order: - [florianorben](https://github.com/florianorben) +- [npcode](https://github.com/npcode) - [42wim](https://github.com/42wim) - [cifvts](https://github.com/cifvts) - [rompic](https://github.com/rompic) @@ -45,6 +96,7 @@ Many thanks to our external contributors. In no particular order: - [alexgaribay](https://github.com/alexgaribay) - [vladikoff](https://github.com/vladikoff) - [jonathanwiesel](https://github.com/jonathanwiesel) +- [tamtamchik](https://github.com/tamtamchik) ## Release v1.2.1 diff --git a/LICENSE.txt b/LICENSE.txt index 88200cdba..b05ccb408 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -4,7 +4,7 @@ SOFTWARE LICENSING You are licensed to use compiled versions of the Mattermost platform produced by Mattermost, Inc. under an MIT LICENSE -- See MIT-COMPILED-LICENSE.md included in compiled versions for details. +- See MIT-COMPILED-LICENSE.md included in compiled versions for details You may be licensed to use source code to create compiled versions not produced by Mattermost, Inc. in one of two ways: diff --git a/doc/developer/tests/test-attachments.md b/doc/developer/tests/test-attachments.md new file mode 100644 index 000000000..71cc496ce --- /dev/null +++ b/doc/developer/tests/test-attachments.md @@ -0,0 +1,144 @@ +# Testing Files and Attachments +This test contains instructions for the core team to manually test common attachment types. All files for testing are stored in the [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) dropbox folder. Follow these instructions: + +1. Download the entire [mm_file_testing](https://www.dropbox.com/sh/i7ft8is5hbhk8ii/AAAyM-WG-X2jiQOgg6-E3MmLa?dl=0) folder. +2. Drag and drop each file type into Mattermost to upload it. +3. Post the file attachment + +**Notes:** +- All file types should upload and post. +- Read the expected for details on the behavior of the thumbnail and preview window. +- The expected behavior of video and audio formats depends on the operating system, browser and plugins. View the permalinks to the Public Test Channel on Pre-Release Core to see the expected cases. + + +### Images +**JPG** +`Images/JPG.jpg` +Expected: Scaled thumbnail & preview window +[Permalink](https://pre-release.mattermost.com/core/pl/bgx3wcd9ppdo7fz9zqokofg7sc) + +**PNG** +`Images/PNG.png` +Expected: Scaled thumbnail & preview window +[Permalink](https://pre-release.mattermost.com/core/pl/zra4yhm69j8ij81iy5hw7983qe) + +**BMP** +`Images/BMP.bmp` +Expected: Scaled thumbnail & preview window +[Permalink](https://pre-release.mattermost.com/core/pl/1hx7x7t1npn4jqyr5rb1qhbj3h) + +**GIF** +`Images/GIF.gif` +Expected: Scaled thumbnail & preview window. Click to play GIF. +[Permalink](https://pre-release.mattermost.com/core/pl/j49fowdkstr57g3ed9bgpfoo5w) + +**TIFF** +`Images/TIFF.tiff` +Expected: Generic attachment thumbnail & preview window +[Permalink](https://pre-release.mattermost.com/core/pl/6yad4jydaidr3pc3tihp8n8bge) + +**PSD** +`Images/PSD.psd` +Expected: Generic attachment thumbnail & preview window +[Permalink](https://pre-release.mattermost.com/core/pl/4kitwk7pi78c9ck4i98f9xnzoe) + + +### Documents + +**PDF Files** +`Documents/PDF.pdf` +Expected: Generic PDF thumbnail & preview window. +[Permalink](https://pre-release.mattermost.com/core/pl/o1dg6menetdszrhyxmtoqjfi8h) + + +**Excel** +`Documents/Excel.xlsx` +Expected: Generic Excel thumbnail & preview window. +[Permalink](https://pre-release.mattermost.com/core/pl/71wwezy3f7drze6ipundscb17y) + + +**PPT** +`Documents/PPT.pptx` +Expected: Generic Powerpoint thumbnail & preview window. +[Permalink](https://pre-release.mattermost.com/core/pl/mx37h4znwb8f5ffuoajusqhiew) + +**Word** +`Documents/Word.docx` +Expected: Generic Word thumbnail & preview window. +[Permalink](https://pre-release.mattermost.com/core/pl/d7s76wp6kjdwfp4hgrwpijsnyy) + + +### Videos + +**MP4** +`Videos/MP4.mp4` +Expected: Generic video thumbnail & playable preview window +[Permalink](https://pre-release.mattermost.com/core/pl/5dx5qx9t9brqfnhohccxjynx7c) + +**AVI** +`Videos/AVI.avi` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/qwn9eiy7j3rkjyruxhcugpogdw) + +**MKV** +`Videos/MKV.mkv` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/tszyjkr1cidhxjgiusa4mde3ja) + +**MOV** +`Videos/MOV.mov` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/ienzppz5i3f7tbt5jiujn8uuir) + +**MPG** +`Videos/MPG.mpg` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/skggdq1hfpritc6c88bi481p5a) + +**Webm** +`Videos/WEBM.webm` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/7h8tysuxgfgsxeht3sbn7e4h6y) + +**WMV** +`Videos/WMV.wmv` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/kaom7j7uyjra7bzhrre6qwdrbw) + +### Audio + +**MP3** +`Audio/MP3.mp3` +Expected: Generic audio thumbnail & playable preview window +[Permalink](https://pre-release.mattermost.com/core/pl/if4gn8dbrjgx8fmqmkukzefyme) + + +**M4A** +`Audio/M4a.m4a` +Expected: Generic audio thumbnail & playable preview window +[Permalink](https://pre-release.mattermost.com/core/pl/6c7qsw48ybd88bktgeykodsrrc) + +**AAC** +`Audio/AAC.aac` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/3naoy5pr5tydbk1m6yo1ast9ny) + +**FLAC** +`Audio/FLAC.flac` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/kf4cmy44dfya5efmse7rg43eih) + +**OGG** +`Audio/OGG.ogg` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/dezrcpbxapyexe77rjuzkrp63r) + +**WAV** +`Audio/WAV.wav` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/pdkxx1udepdnbmi9j8kyas5xbh) + +**WMA** +`Audio/WMA.wma` +Expected: View Permalink. Expected depends on the operating system, browser and plugins. +[Permalink](https://pre-release.mattermost.com/core/pl/756wrmdd57dcig3m4emypp6i1h) diff --git a/doc/install/Configuration-Settings.md b/doc/install/Configuration-Settings.md index 66fda15e0..46a6defdf 100644 --- a/doc/install/Configuration-Settings.md +++ b/doc/install/Configuration-Settings.md @@ -141,9 +141,16 @@ Port of SMTP email server. ```"InviteSalt": "bjlSR4QqkXFBr7TP4oDzlfZmcNuH9YoS"``` 32-character (to be randomly generated via Admin Console) salt added to signing of email invites. - ```"PasswordResetSalt": "vZ4DcKyVVRlKHHJpexcuXzojkE5PZ5eL"``` -32-character (to be randomly generated via Admin Console) salt added to signing of password reset emails. +32-character (to be randomly generated via Admin Console) salt added to signing of password reset emails. + +#### Push Notification Settings + +```"SendPushNotifications": true``` +"true": Your mattermsot server sends mobile push notifications to the server specified in **PushNotificationServer**; "false": Mobile push notifications are disabled. + +```"PushNotificationServer": "https://push.mattermost.com"``` +Address of the proxy server that re-sends push notifications to their respective services like APNS (Apple Push Notification Services). ### File Settings @@ -291,17 +298,6 @@ System Console allows an IT Admin to update settings defined in `config.json`. H ```"EnableOAuthServiceProvider": false``` ”true”: Allow Mattermost to function as an OAuth provider, allowing 3rd party apps access to your user store for authentication. -### Push Notification Settings - -```"ApplePushServer": ""``` -Setting for features in development. - -```"ApplePushCertPublic": ""``` -Setting for features in development. - -```"ApplePushCertPrivate": ""``` -Setting for features in development. - ### File Settings ```"InitialFont": "luximbi.ttf"``` diff --git a/web/react/components/admin_console/user_item.jsx b/web/react/components/admin_console/user_item.jsx index bd64564c9..ef0b61460 100644 --- a/web/react/components/admin_console/user_item.jsx +++ b/web/react/components/admin_console/user_item.jsx @@ -227,7 +227,6 @@ export default class UserItem extends React.Component { href='#' className='dropdown-toggle theme' type='button' - id='channel_header_dropdown' data-toggle='dropdown' aria-expanded='true' > @@ -237,7 +236,6 @@ export default class UserItem extends React.Component { <ul className='dropdown-menu member-menu' role='menu' - aria-labelledby='channel_header_dropdown' > {makeAdmin} {makeMember} diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx index d5a46721e..59ceb038e 100644 --- a/web/react/components/channel_header.jsx +++ b/web/react/components/channel_header.jsx @@ -101,9 +101,9 @@ export default class ChannelHeader extends React.Component { if (user.notify_props && user.notify_props.mention_keys) { const termKeys = UserStore.getCurrentMentionKeys(); - // if (user.notify_props.all === 'true' && termKeys.indexOf('@all') !== -1) { - // termKeys.splice(termKeys.indexOf('@all'), 1); - // } + if (user.notify_props.all === 'true' && termKeys.indexOf('@all') !== -1) { + termKeys.splice(termKeys.indexOf('@all'), 1); + } if (user.notify_props.channel === 'true' && termKeys.indexOf('@channel') !== -1) { termKeys.splice(termKeys.indexOf('@channel'), 1); diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx index fac40e895..b0f33eda1 100644 --- a/web/react/components/create_comment.jsx +++ b/web/react/components/create_comment.jsx @@ -362,11 +362,11 @@ export default class CreateComment extends React.Component { onClick={this.handleSubmit} /> {uploadsInProgressText} + {preview} {postError} {serverError} </div> </div> - {preview} </form> ); } diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx index f7f63fb92..89e984e27 100644 --- a/web/react/components/create_post.jsx +++ b/web/react/components/create_post.jsx @@ -470,13 +470,13 @@ export default class CreatePost extends React.Component { {tutorialTip} </div> <div className={postFooterClassName}> - {postError} - {serverError} - {preview} <MsgTyping channelId={this.state.channelId} parentId='' /> + {preview} + {postError} + {serverError} </div> </div> </form> diff --git a/web/react/components/member_list_item.jsx b/web/react/components/member_list_item.jsx index f7f77f48a..a7273f280 100644 --- a/web/react/components/member_list_item.jsx +++ b/web/react/components/member_list_item.jsx @@ -78,17 +78,15 @@ export default class MemberListItem extends React.Component { href='#' className='dropdown-toggle theme' type='button' - id='channel_header_dropdown' data-toggle='dropdown' aria-expanded='true' > + <span className='fa fa-pencil'></span> <span className='text-capitalize'>{member.roles || 'Member'} </span> - <span className='caret'></span> </a> <ul className='dropdown-menu member-menu' role='menu' - aria-labelledby='channel_header_dropdown' > {makeAdminOption} {handleRemoveOption} @@ -96,7 +94,7 @@ export default class MemberListItem extends React.Component { </div> ); } else { - invite = <div className='member-role text-capitalize'>{member.roles || 'Member'}<span className='caret hidden'></span></div>; + invite = <div className='member-role text-capitalize'><span className='fa fa-pencil hidden'></span>{member.roles || 'Member'}</div>; } return ( diff --git a/web/react/components/member_list_team_item.jsx b/web/react/components/member_list_team_item.jsx index 316fad01a..7967c410d 100644 --- a/web/react/components/member_list_team_item.jsx +++ b/web/react/components/member_list_team_item.jsx @@ -181,17 +181,15 @@ export default class MemberListTeamItem extends React.Component { href='#' className='dropdown-toggle theme' type='button' - id='channel_header_dropdown' data-toggle='dropdown' aria-expanded='true' > + <span className='fa fa-pencil'></span> <span>{currentRoles} </span> - <span className='caret'></span> </a> <ul className='dropdown-menu member-menu' role='menu' - aria-labelledby='channel_header_dropdown' > {makeAdmin} {makeMember} diff --git a/web/react/components/navbar.jsx b/web/react/components/navbar.jsx index 3bdc9efac..ae14fca2f 100644 --- a/web/react/components/navbar.jsx +++ b/web/react/components/navbar.jsx @@ -272,7 +272,6 @@ export default class Navbar extends React.Component { href='#' className='dropdown-toggle theme' type='button' - id='channel_header_dropdown' data-toggle='dropdown' aria-expanded='true' > @@ -282,7 +281,6 @@ export default class Navbar extends React.Component { <ul className='dropdown-menu' role='menu' - aria-labelledby='channel_header_dropdown' > {viewInfoOption} {addMembersOption} diff --git a/web/react/components/search_results_item.jsx b/web/react/components/search_results_item.jsx index 1d4983026..cd8359df5 100644 --- a/web/react/components/search_results_item.jsx +++ b/web/react/components/search_results_item.jsx @@ -19,6 +19,11 @@ export default class SearchResultsItem extends React.Component { e.preventDefault(); EventHelpers.emitPostFocusEvent(this.props.post.id); + + if ($(window).width() < 768) { + $('.sidebar--right').removeClass('move--left'); + $('.inner__wrap').removeClass('move--left'); + } } render() { @@ -65,7 +70,7 @@ export default class SearchResultsItem extends React.Component { className='search-item__jump' onClick={this.handleClick} > - {<i className='fa fa-mail-reply'></i>} + {'Jump'} </a> </li> </ul> diff --git a/web/sass-files/sass/partials/_error-bar.scss b/web/sass-files/sass/partials/_error-bar.scss index 249bbeaa5..0bfcbe0be 100644 --- a/web/sass-files/sass/partials/_error-bar.scss +++ b/web/sass-files/sass/partials/_error-bar.scss @@ -19,6 +19,7 @@ font-weight: 600; text-decoration: none; padding: 0 10px; + font-family: 'Open Sans', sans-serif; &:hover { color: #FFF; text-decoration: none; diff --git a/web/sass-files/sass/partials/_files.scss b/web/sass-files/sass/partials/_files.scss index aeb04e931..2c341f61e 100644 --- a/web/sass-files/sass/partials/_files.scss +++ b/web/sass-files/sass/partials/_files.scss @@ -2,7 +2,7 @@ .preview-container { position: relative; - margin-top: 25px; + margin: 1px 0 10px; width: 100%; max-height: 100px; height: 100px; diff --git a/web/sass-files/sass/partials/_modal.scss b/web/sass-files/sass/partials/_modal.scss index 55725abe0..9279cf0c4 100644 --- a/web/sass-files/sass/partials/_modal.scss +++ b/web/sass-files/sass/partials/_modal.scss @@ -186,6 +186,7 @@ padding: 8px 15px 8px 8px; width: 80px; vertical-align: middle; + position: relative; &.lg { width: 110px; } diff --git a/web/sass-files/sass/partials/_post.scss b/web/sass-files/sass/partials/_post.scss index 81cc311e1..df519c752 100644 --- a/web/sass-files/sass/partials/_post.scss +++ b/web/sass-files/sass/partials/_post.scss @@ -319,13 +319,11 @@ body.ios { @include clearfix; padding: 3px 0 0 0; font-size: 13px; - .has-error { - .control-label { - height: 0; - display: block; - font-weight: normal; - margin-bottom: 0; - } + .control-label { + font-weight: normal; + margin-bottom: 0; + top: -5px; + position: relative; } .msg-typing { min-height: 25px; diff --git a/web/sass-files/sass/partials/_post_right.scss b/web/sass-files/sass/partials/_post_right.scss index 4f04a266b..fa52e2972 100644 --- a/web/sass-files/sass/partials/_post_right.scss +++ b/web/sass-files/sass/partials/_post_right.scss @@ -44,6 +44,9 @@ .textarea-wrapper { min-height: 100px; } + .btn { + margin-bottom: 10px; + } .custom-textarea { min-height: 100px; } @@ -123,6 +126,11 @@ overflow: auto; -webkit-overflow-scrolling: touch; @include flex(1 1 auto); + + .preview-container { + margin-top: 5px; + } + } .post-right-comment-time { diff --git a/web/sass-files/sass/partials/_responsive.scss b/web/sass-files/sass/partials/_responsive.scss index bdf04ff82..ed2d0bbe9 100644 --- a/web/sass-files/sass/partials/_responsive.scss +++ b/web/sass-files/sass/partials/_responsive.scss @@ -377,10 +377,8 @@ .msg-typing { display: none; } - .has-error { - .control-label { - height: auto; - } + .control-label { + top: 0; } } .post-create-body { @@ -409,8 +407,7 @@ } } .preview-container { - padding: 0px; - margin-top: 5px; + margin: 5px 0 0; .preview-div { margin-top: 0; } diff --git a/web/sass-files/sass/partials/_search.scss b/web/sass-files/sass/partials/_search.scss index a29e940e6..a5b2a78dd 100644 --- a/web/sass-files/sass/partials/_search.scss +++ b/web/sass-files/sass/partials/_search.scss @@ -111,7 +111,14 @@ .search-item__jump { position: absolute; right: 0; - top: 0; + top: 0px; + font-size: 13px; + @include opacity(0.8); + + &:hover { + @include opacity(1); + } + } .search-item-time { diff --git a/web/sass-files/sass/partials/_settings.scss b/web/sass-files/sass/partials/_settings.scss index ee0c40067..f078cafb4 100644 --- a/web/sass-files/sass/partials/_settings.scss +++ b/web/sass-files/sass/partials/_settings.scss @@ -135,9 +135,10 @@ .input-group-addon { padding: 4px 5px; width: 40px; - img { - border: 1px solid rgba(black, 0.15); - } + } + img { + border: 1px solid rgba(black, 0.15); + width: 29px; } } .premade-themes { @@ -325,12 +326,22 @@ overflow: hidden; text-overflow: ellipsis; } +} + +.member-role, .member-drop { + position:absolute; + right: 15px; + top: 8px; + + .fa { + margin-right: 5px; + } - .member-role, .member-drop { - position:absolute; - right: 15px; - top: 8px; + .member-menu { + top: -50%; + right: 110%; } + } .member-invite { |