summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md58
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--LICENSE.txt2
-rw-r--r--doc/developer/tests/test-attachments.md144
-rw-r--r--doc/developer/tests/test-markdown-lists.md53
-rw-r--r--doc/developer/tests/test-syntax-highlighting.md231
-rw-r--r--doc/developer/tests/test-tables.md80
-rw-r--r--doc/help/Account-Settings.md9
-rw-r--r--doc/help/Markdown.md13
-rw-r--r--doc/help/Messaging.md12
-rw-r--r--doc/help/Sign-in.md14
-rw-r--r--doc/install/Configuration-Settings.md22
-rw-r--r--doc/install/Upgrade-Guide.md2
-rw-r--r--doc/process/overview.md8
-rw-r--r--web/react/components/admin_console/user_item.jsx2
-rw-r--r--web/react/components/channel_header.jsx6
-rw-r--r--web/react/components/create_comment.jsx2
-rw-r--r--web/react/components/create_post.jsx6
-rw-r--r--web/react/components/member_list_item.jsx6
-rw-r--r--web/react/components/member_list_team_item.jsx4
-rw-r--r--web/react/components/navbar.jsx2
-rw-r--r--web/react/components/post_body.jsx14
-rw-r--r--web/react/components/search_results_item.jsx7
-rw-r--r--web/react/components/suggestion/emoticon_provider.jsx23
-rw-r--r--web/react/stores/socket_store.jsx1
-rw-r--r--web/sass-files/sass/partials/_error-bar.scss1
-rw-r--r--web/sass-files/sass/partials/_files.scss2
-rw-r--r--web/sass-files/sass/partials/_modal.scss1
-rw-r--r--web/sass-files/sass/partials/_post.scss12
-rw-r--r--web/sass-files/sass/partials/_post_right.scss8
-rw-r--r--web/sass-files/sass/partials/_responsive.scss9
-rw-r--r--web/sass-files/sass/partials/_search.scss9
-rw-r--r--web/sass-files/sass/partials/_settings.scss25
33 files changed, 706 insertions, 84 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/CONTRIBUTING.md b/CONTRIBUTING.md
index 18fd7c229..41a8f9375 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -49,7 +49,7 @@ git checkout -b <branch name>
2. When you submit your pull request please make it against `master` and include the Ticket ID at the beginning of your pull request comment, followed by a colon
- For example, for a ticket ID `PLT-394` start your comment with: `PLT-394:`. See [previously closed pull requests](https://github.com/mattermost/platform/pulls?q=is%3Apr+is%3Aclosed) for examples
- - All pull requests must have a ticket ID so the issue can be tracked and tested properly. If there is no existing ticket in Jira, please [file an issue in GitHub](http://www.mattermost.org/filing-issues/) so a Jira ticket can be created
+ - All pull requests must have a ticket ID so the issue can be tracked and tested properly. If there is no existing ticket in Jira, please [file a bug in GitHub](http://www.mattermost.org/filing-issues/) or a [feature idea you're proposing to implement](http://www.mattermost.org/feature-requests/) so a Jira ticket can be created
3. Please include a comment on the pull request describing the changes
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/developer/tests/test-markdown-lists.md b/doc/developer/tests/test-markdown-lists.md
index 905350d31..d5bbd82ac 100644
--- a/doc/developer/tests/test-markdown-lists.md
+++ b/doc/developer/tests/test-markdown-lists.md
@@ -21,6 +21,7 @@ Verify that all list types render as expected.
```
**Actual:**
+
3. One
2. Two
1. Three
@@ -38,12 +39,13 @@ Verify that all list types render as expected.
```
**Actual:**
-1. Alpha
- 1. Bravo
+
+1. Alpha
+ 1. Bravo
1. Charlie
1. Delta
- 1. Echo
- 1. Foxtrot
+ 1. Echo
+ 1. Foxtrot
### Single-item Unordered List
@@ -99,6 +101,7 @@ Verify that all list types render as expected.
```
**Actual:**
+
1. One
+ Two
- Three
@@ -169,10 +172,11 @@ Verify that all list types render as expected.
```
**Actual:**
+
1. One
- - Two
-
-
+ - Two
+
+
1. One
2. Two
@@ -186,7 +190,42 @@ This text should be on a new line.
```
**Actual:**
+
1. One
- Two
This text should be on a new line.
+### Task Lists
+
+**Expected:**
+```
+[ ] One
+ [ ] Subpoint one
+ - Normal Bullet
+[ ] Two
+[x] Completed item
+```
+
+**Actual:**
+
+- [ ] One
+ - [ ] Subpoint one
+ - Normal Bullet
+- [ ] Two
+- [x] Completed item
+
+### Numbered Task Lists
+
+**Expected:**
+```
+1. [ ] One
+2. [ ] Two
+3. [x] Completed item
+```
+
+**Actual:**
+
+1. [ ] One
+2. [ ] Two
+3. [x] Completed item
+
diff --git a/doc/developer/tests/test-syntax-highlighting.md b/doc/developer/tests/test-syntax-highlighting.md
new file mode 100644
index 000000000..7f8f4cdaa
--- /dev/null
+++ b/doc/developer/tests/test-syntax-highlighting.md
@@ -0,0 +1,231 @@
+# Code Syntax Highlighting
+
+Verify the following code blocks render as code blocks and highlight properly.
+
+### Diff
+
+``` diff
+*** /path/to/original ''timestamp''
+--- /path/to/new ''timestamp''
+***************
+*** 1 ****
+! This is a line.
+--- 1 ---
+! This is a replacement line.
+It is important to spell
+-removed line
++new line
+```
+
+### Apache
+
+``` apache
+<VirtualHost *:80>
+DocumentRoot /www/example1
+ServerName www.example.com
+</VirtualHost>
+```
+
+### Makefile
+
+``` makefile
+CC=gcc
+CFLAGS=-I.
+
+hellomake: hellomake.o hellofunc.o
+ $(CC) -o hellomake hellomake.o hellofunc.o -I.
+```
+
+### HTTP
+
+``` http
+HTTP/1.1 200 OK
+Date: Sun, 28 Dec 2014 08:56:53 GMT
+Content-Length: 44
+Content-Type: text/html
+
+<html><body><h1>It works!</h1></body></html>
+```
+
+### JSON
+
+``` json
+{"employees":[
+ {"firstName":"John", "lastName":"Doe"},
+]}
+```
+
+### Markdown
+
+``` markdown
+**bold**
+*italics*
+[link](www.example.com)
+```
+
+### JavaScript
+
+``` javascript
+document.write('Hello, world!');
+```
+
+### CSS
+
+``` css
+body {
+ background-color: red;
+}
+```
+
+### NGINX
+
+``` nginx
+server { # simple reverse-proxy
+ listen 80;
+ server_name domain2.com www.domain2.com;
+ access_log logs/domain2.access.log main;
+```
+
+### Objective C
+
+``` objectivec
+#import <stdio.h>
+
+int main (void)
+{
+ printf ("Hello world!\n");
+}
+```
+
+### Python
+
+``` python
+print "Hello, world!"
+```
+
+### XML
+
+``` xml
+<employees>
+ <employee>
+ <firstName>John</firstName> <lastName>Doe</lastName>
+ </employee>
+</employees>
+```
+
+### Perl
+
+``` perl
+print "Hello, World!\n";
+```
+
+### Bash
+
+``` bash
+echo "Hello World"
+```
+
+### PHP
+
+``` php
+ <?php echo '<p>Hello World</p>'; ?>
+```
+
+### CoffeeScript
+
+``` coffee
+console.log(“Hello world!”);
+```
+
+### C#
+
+``` cs
+using System;
+class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, world!");
+ }
+}
+```
+
+### C++
+
+``` cpp
+#include <iostream.h>
+
+main()
+{
+ cout << "Hello World!";
+ return 0;
+}
+```
+
+### SQL
+
+``` sql
+SELECT column_name,column_name
+FROM table_name;
+```
+
+### Go
+
+``` go
+package main
+import "fmt"
+func main() {
+ fmt.Println("Hello, 世界")
+}
+```
+
+### Ruby
+
+``` ruby
+puts "Hello, world!"
+```
+
+### Java
+
+``` java
+import javax.swing.JFrame; //Importing class JFrame
+import javax.swing.JLabel; //Importing class JLabel
+public class HelloWorld {
+ public static void main(String[] args) {
+ JFrame frame = new JFrame(); //Creating frame
+ frame.setTitle("Hi!"); //Setting title frame
+ frame.add(new JLabel("Hello, world!"));//Adding text to frame
+ frame.pack(); //Setting size to smallest
+ frame.setLocationRelativeTo(null); //Centering frame
+ frame.setVisible(true); //Showing frame
+ }
+}
+```
+
+### INI
+
+``` ini
+; last modified 1 April 2011 by John Doe
+[owner]
+name=John Doe
+organization=Mattermost
+```
+
+### Latex Equation
+
+``` latex
+\frac{d}{dx}\left( \int_{0}^{x} f(u)\,du\right)=f(x).
+```
+
+### Latex Document
+
+``` latex
+\documentclass{article}
+\begin{document}
+\noindent
+Are $a, b \in \mathbb{R}, then applies (a+b)^{2} = a^{2} + ab + b^{2} $ \\
+better \\
+are $a, b \in \mathbb{R}, \textrm{then applies} \, (a+b)^{2 } = a^{2 } + ab + b^{2}$\\
+\end{document}
+```
+
diff --git a/doc/developer/tests/test-tables.md b/doc/developer/tests/test-tables.md
new file mode 100644
index 000000000..87d8af856
--- /dev/null
+++ b/doc/developer/tests/test-tables.md
@@ -0,0 +1,80 @@
+# Markdown Tables
+
+Verify that all tables render as described.
+
+### Normal Tables
+
+These tables use different raw text as inputs, but all three should render as the same table.
+
+#### Table 1
+
+Raw text:
+
+```
+First Header | Second Header
+------------- | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+```
+
+Renders as:
+
+First Header | Second Header
+------------- | -------------
+Content Cell | Content Cell
+Content Cell | Content Cell
+
+#### Table 2
+
+Raw Text:
+
+```
+| First Header | Second Header |
+| ------------- | ------------- |
+| Content Cell | Content Cell |
+| Content Cell | Content Cell |
+```
+
+Renders as:
+
+| First Header | Second Header |
+| ------------- | ------------- |
+| Content Cell | Content Cell |
+| Content Cell | Content Cell |
+
+#### Table 3
+
+Raw Text:
+
+```
+| First Header | Second Header |
+| ------------- | ----------- |
+| Content Cell | Content Cell|
+| Content Cell | Content Cell |
+```
+
+Renders as:
+
+| First Header | Second Header |
+| ------------- | ----------- |
+| Content Cell | Content Cell|
+| Content Cell | Content Cell |
+
+### Tables Containing Markdown
+
+This table should contain A1: Strikethrough, A2: Bold, B1: Italics, B2: Dolphin emoticon.
+
+| Column\Row | 1 | 2 |
+| ------------- | ------------- |------------- |
+| A | ~~Strikethrough~~ | **Bold** |
+| B | _italics_ | :dolphin: |
+
+### Table with Left, Center, and Right Aligned Columns
+
+The left column should be left aligned, the center column centered and the right column should be right aligned.
+
+| Left-Aligned | Center Aligned | Right Aligned |
+| :------------ |:---------------:| -----:|
+| 1 | this text | $100 |
+| 2 | is | $10 |
+| 3 | centered | $1 |
diff --git a/doc/help/Account-Settings.md b/doc/help/Account-Settings.md
index a0c55d3e9..1e05ef2ad 100644
--- a/doc/help/Account-Settings.md
+++ b/doc/help/Account-Settings.md
@@ -93,6 +93,9 @@ Outgoing webhooks use trigger words to fire new message events to external integ
##Display
Settings to configure clock and teammate name display preferences.
+#### Display Font
+Select what font is used.
+
#### Clock Display
Choose a 12-hour or 24-hour time preference that appears on the time stamp for all posts.
@@ -104,3 +107,9 @@ Setting to configure when messages are sent.
#### Send Messages on Ctrl+Enter
If enabled, press **Enter** to insert a new line and **Ctrl + Enter** posts the message. If disabled, **Shift + Enter** inserts a new line and **Enter** posts the message.
+
+#### Preview pre-release features
+Turn on preview features to view them early, ahead of their official release:
+- **Show markdown preview option in message input box:** Turning this on will show a "Preview" option when typing in the text input box. Pressing "Preview" shows what the Markdown formatting in the message looks like before the message is sent.
+- **Show preview snippet of links below message:** Turning this on will show a preview snippet posted below links from select websites.
+
diff --git a/doc/help/Markdown.md b/doc/help/Markdown.md
index 1befed8d4..64ce4fc83 100644
--- a/doc/help/Markdown.md
+++ b/doc/help/Markdown.md
@@ -88,7 +88,7 @@ and
## Emojis
-Check out a full list of emojis [here](http://www.emoji-cheat-sheet.com/).
+Emoji provided free by [Emoji One](http://emojione.com/). Check out a full list of emojis [here](http://http://emoji.codes/).
```
:smile: :+1: :sheep:
@@ -132,6 +132,17 @@ Renders as:
1. Item one
2. Item two
+Make a task list by including square brackets:
+```
+- [ ] Item one
+- [ ] Item two
+- [x] Completed item
+```
+Renders as:
+- [ ] Item one
+- [ ] Item two
+- [x] Completed item
+
## Tables:
Create a table by placing a dashed line under the header row and separating the columns with a pipe `|`. (The columns don’t need to line up exactly for it to work). Choose how to align table columns by including colons `:` within the header row.
diff --git a/doc/help/Messaging.md b/doc/help/Messaging.md
index cc26a948e..548892650 100644
--- a/doc/help/Messaging.md
+++ b/doc/help/Messaging.md
@@ -18,7 +18,8 @@ Mattermost messages are formatted using a standard called "markdown". Here are e
|`![embedded image](https://travis-ci.org/mattermost/platform.svg)`|![embedded image](https://travis-ci.org/mattermost/platform.svg)|
|`:smile:` `:sheep:` `:alien:`|:smile: :sheep: :alien:|
-Check out a full list of Emojis [here](http://www.emoji-cheat-sheet.com/).
+Emojis provided free from [Emoji One](http://emojione.com/). Check out a full list of Emojis [here](http://emoji.codes/).
+
## Mentioning Teammates
@@ -35,3 +36,12 @@ Which sends a special mention notification to **alice** to check your message.
To mention a teammate, press `@` and you should see a list of team members who can be messaged. You can either type their username or use the **Up** and **Down** arrow keys and then **ENTER** to select them to be mentioned.
You can configure how you'd like to be alerted about mentions of your username, your first name, your nickname, or other keywords from **Account Settings** > **Notifications** and you can set channel-specific preferences from **[Channel Name]** > **Notification Preferences**
+
+## Messages Dropdown Menu
+
+To get to the Messages Dropdown Menu, hover over a message and click on the [...] menu. This shows a dropdown list containing additional actions you can perform on a message:
+
+- **Reply:** Opens up the sidebar so you can reply to a message in a comment thread.
+- **Permalink:** Creates a link to the message. Sharing this link with other users in the channel lets them view the linked message in the Message Archives.
+- **Delete:** Deletes the message so it is no longer visible. Team Administrators and System Administrators can also delete another user's message.
+- **Edit:** Lets you edit your own message.
diff --git a/doc/help/Sign-in.md b/doc/help/Sign-in.md
index f8e353cce..5b7b375c7 100644
--- a/doc/help/Sign-in.md
+++ b/doc/help/Sign-in.md
@@ -2,22 +2,26 @@
You can sign-in to your team from the web address of `https://domain.com/teamname`.
-There are several options for signing in depending on how your System Administrator has configured your server.
+There are several options for signing in to your team depending on how your System Administrator has configured your server.
#### Email address and password sign-in
-If available, you can sign in using the combination of email address and password used to create your account.
+When enabled by your System Administrator, you can sign in using the combination of email address and password used to create your account.
If you have forgotten your password, you should be able to reset it from the "I forgot my password" option on the sign-in screen, or contact your System Administrator if you need help resetting your password.
#### GitLab Single-Sign-On (SSO) option
-If available, you can sign in using your GitLab account using a one-click sign-in option. GitLab SSO lets you create teams, create accounts on teams, and sign-in to teams using one username, email address, and password that works across everything on the server.
+When enabled by your System Administrator, you can sign-in using your GitLab account using a one-click sign-in option. GitLab SSO lets you create teams, create accounts on teams, and sign-in to teams using one username, email address, and password that works across everything on the server.
#### Switching Teams
-You can switch among teams you've recently signed into using the main menu in any team site on the server. By default, devices remember which teams you have signed into for 30 days, and this duration is configurable by the System Administrator.
+When you've used the same email address to sign-up and sign-in to multiple teams, you can switch among those teams using the main menu in any team site on the server. By default, devices remember which teams you have signed into for 30 days.
+
+#### System Adminstrator Role
+
+If your account in a given team has been given the System Administrator role, it has access to the System Console. The System Administrator role does not apply to accounts created in other teams using the same email address, since user accounts are unique to teams.
#### Logging Out
-You can log out from the main menu, which is accessed by clicking the three dots in the top header on the left side of the screen. Clicking "Logout" logs you out of all the teams you are signed into on the site.
+You can log out from the main menu, which is accessed by clicking the three dots in the top header on the left side of the screen. Clicking "Logout" logs you out of all the teams you are signed-in to that share the same email address.
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/doc/install/Upgrade-Guide.md b/doc/install/Upgrade-Guide.md
index e01bdb9a0..edcc754f8 100644
--- a/doc/install/Upgrade-Guide.md
+++ b/doc/install/Upgrade-Guide.md
@@ -15,7 +15,7 @@ If you're upgrading across multiple major releases, from 1.0.x to 1.2.x for exam
3. Review Release Notes
1. Check the release notes for the version of Mattermost you are able to install, and note any setting changes in the **Compatibility** section that apply to your deployment (Release notes across versions are available from the [CHANGELOG](https://github.com/mattermost/platform/blob/master/CHANGELOG.md)).
4. Download the `mattermost.tar.gz` file with the correct version for your upgrade
- 1. You can use `wget` to retrieve a specific version. For example, to download v1.1.0 run `wget https://github.com/mattermost/platform/releases/download/v1.1.0/mattermost.tar.gz`
+ 1. You can use `wget` to retrieve a specific version. For example, to download v1.1.0 run `wget https://github.com/mattermost/platform/releases/download/v1.x.x/mattermost.tar.gz`
2. Stop the Mattermost Server
1. As best practice, consider posting to the Town Square channel of active teams pre-announcing the scheduled downtime to apply these upgrade procedures
2. To stop the server run `sudo stop mattermost`
diff --git a/doc/process/overview.md b/doc/process/overview.md
index a1201a8d6..8a4c0459d 100644
--- a/doc/process/overview.md
+++ b/doc/process/overview.md
@@ -1,6 +1,6 @@
# Development Process Overview
-This document describes the process through which feedback and design discussions flow into community systems, then into tickets, then into merge requests, then into monthly releases based on the purpose of the product.
+This document describes the process through which feedback and design discussions flow into community systems, then into tickets, then into pull requests, then into monthly releases based on the purpose of the product.
## Purpose
@@ -44,7 +44,7 @@ Please consider using more mainstream processes for [filing feature ideas to be
### GitHub Pull Requests
-A system for submitting merge requests for changes to Mattermost. See [Merge Requests](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#merge-requests) section below.
+A system for submitting pull requests for changes to Mattermost. See [Pull Requests](https://github.com/mattermost/platform/blob/master/doc/process/overview.md#merge-requests) section below.
### General Forum
@@ -80,7 +80,7 @@ Release planning sets the "Fix Version" of tickets to one of the upcoming monthl
Tickets to be completed in the upcoming two weeks are organized on Tuesdays, with input from developers, and finalized on Fridays.
-## Merge Requests
+## Pull Requests
### Core Team Weekly Rhythm
@@ -92,7 +92,7 @@ Key contributors might also pick up tickets, or through conversations with the c
### Community Contributions
-Community members following the Contribution Guidelines might also submit pull requests.
+Community members following the [Contribution Guidelines](https://github.com/mattermost/platform/blob/master/CONTRIBUTING.md) might also submit pull requests. Pull requests should not disable existing functionality without a Jira ticket, which are opened [via the feature ideas process](http://www.mattermost.org/feature-requests/).
#### Bug Fixes
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/post_body.jsx b/web/react/components/post_body.jsx
index 296b9e7d7..35a7727e9 100644
--- a/web/react/components/post_body.jsx
+++ b/web/react/components/post_body.jsx
@@ -309,7 +309,15 @@ export default class PostBody extends React.Component {
let apostrophe = '';
let name = '...';
if (profile != null) {
- if (profile.username.slice(-1) === 's') {
+ let username = profile.username;
+ if (parentPost.props &&
+ parentPost.props.from_webhook &&
+ parentPost.props.override_username &&
+ global.window.mm_config.EnablePostUsernameOverride === 'true') {
+ username = parentPost.props.override_username;
+ }
+
+ if (username.slice(-1) === 's') {
apostrophe = '\'';
} else {
apostrophe = '\'s';
@@ -317,9 +325,9 @@ export default class PostBody extends React.Component {
name = (
<a
className='theme'
- onClick={Utils.searchForTerm.bind(null, profile.username)}
+ onClick={Utils.searchForTerm.bind(null, username)}
>
- {profile.username}
+ {username}
</a>
);
}
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/react/components/suggestion/emoticon_provider.jsx b/web/react/components/suggestion/emoticon_provider.jsx
index 7dcb86442..fd470cf21 100644
--- a/web/react/components/suggestion/emoticon_provider.jsx
+++ b/web/react/components/suggestion/emoticon_provider.jsx
@@ -51,23 +51,40 @@ export default class EmoticonProvider {
const text = captured[1];
const partialName = captured[2];
- const terms = [];
const names = [];
for (const emoticon of Emoticons.emoticonMap.keys()) {
if (emoticon.indexOf(partialName) !== -1) {
- terms.push(':' + emoticon + ':');
names.push(emoticon);
- if (terms.length >= MAX_EMOTICON_SUGGESTIONS) {
+ if (names.length >= MAX_EMOTICON_SUGGESTIONS) {
break;
}
}
}
+ // sort the emoticons so that emoticons starting with the entered text come first
+ names.sort((a, b) => {
+ const aPrefix = a.startsWith(partialName);
+ const bPrefix = b.startsWith(partialName);
+
+ if (aPrefix === bPrefix) {
+ return a.localeCompare(b);
+ } else if (aPrefix) {
+ return -1;
+ }
+
+ return 1;
+ });
+
+ const terms = names.map((name) => ':' + name + ':');
+
if (terms.length > 0) {
SuggestionStore.setMatchedPretext(suggestionId, text);
SuggestionStore.addSuggestions(suggestionId, terms, names, EmoticonSuggestion);
+
+ // force the selection to be cleared since the order of elements may have changed
+ SuggestionStore.clearSelection(suggestionId);
}
}
}
diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx
index c8e3c8bdd..d5aed40cf 100644
--- a/web/react/stores/socket_store.jsx
+++ b/web/react/stores/socket_store.jsx
@@ -225,6 +225,7 @@ function handlePostEditEvent(msg) {
// Store post
const post = JSON.parse(msg.props.post);
PostStore.storePost(post);
+ PostStore.emitChange();
// Update channel state
if (ChannelStore.getCurrentId() === msg.channel_id) {
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 {