summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--model/file_info.go7
-rw-r--r--model/file_info_test.go22
-rw-r--r--web/react/components/activity_log_modal.jsx6
-rw-r--r--web/react/components/delete_post_modal.jsx12
-rw-r--r--web/react/components/file_info_preview.jsx11
5 files changed, 47 insertions, 11 deletions
diff --git a/model/file_info.go b/model/file_info.go
index 131baff6d..f785042b3 100644
--- a/model/file_info.go
+++ b/model/file_info.go
@@ -32,6 +32,11 @@ func GetInfoForBytes(filename string, data []byte) (*FileInfo, *AppError) {
mimeType = mime.TypeByExtension(extension)
}
+ if extension != "" && extension[0] == '.' {
+ // the client expects a file extension without the leading period
+ extension = extension[1:]
+ }
+
hasPreviewImage := isImage
if mimeType == "image/gif" {
// just show the gif itself instead of a preview image for animated gifs
@@ -45,7 +50,7 @@ func GetInfoForBytes(filename string, data []byte) (*FileInfo, *AppError) {
return &FileInfo{
Filename: filename,
Size: size,
- Extension: extension[1:],
+ Extension: extension,
MimeType: mimeType,
HasPreviewImage: hasPreviewImage,
}, nil
diff --git a/model/file_info_test.go b/model/file_info_test.go
index ecf0d509c..e89681626 100644
--- a/model/file_info_test.go
+++ b/model/file_info_test.go
@@ -19,7 +19,7 @@ func TestGetInfoForBytes(t *testing.T) {
} else if info.Size != 1000 {
t.Fatalf("Got incorrect size: %v", info.Size)
} else if info.Extension != "txt" {
- t.Fatalf("Git incorrect file extension: %v", info.Extension)
+ t.Fatalf("Got incorrect file extension: %v", info.Extension)
} else if info.MimeType != "text/plain; charset=utf-8" {
t.Fatalf("Got incorrect mime type: %v", info.MimeType)
} else if info.HasPreviewImage {
@@ -33,7 +33,7 @@ func TestGetInfoForBytes(t *testing.T) {
} else if info.Size != 1000 {
t.Fatalf("Got incorrect size: %v", info.Size)
} else if info.Extension != "png" {
- t.Fatalf("Git incorrect file extension: %v", info.Extension)
+ t.Fatalf("Got incorrect file extension: %v", info.Extension)
} else if info.MimeType != "image/png" {
t.Fatalf("Got incorrect mime type: %v", info.MimeType)
} else if !info.HasPreviewImage {
@@ -49,7 +49,7 @@ func TestGetInfoForBytes(t *testing.T) {
} else if info.Size != 35 {
t.Fatalf("Got incorrect size: %v", info.Size)
} else if info.Extension != "gif" {
- t.Fatalf("Git incorrect file extension: %v", info.Extension)
+ t.Fatalf("Got incorrect file extension: %v", info.Extension)
} else if info.MimeType != "image/gif" {
t.Fatalf("Got incorrect mime type: %v", info.MimeType)
} else if !info.HasPreviewImage {
@@ -67,10 +67,24 @@ func TestGetInfoForBytes(t *testing.T) {
} else if info.Size != 38689 {
t.Fatalf("Got incorrect size: %v", info.Size)
} else if info.Extension != "gif" {
- t.Fatalf("Git incorrect file extension: %v", info.Extension)
+ t.Fatalf("Got incorrect file extension: %v", info.Extension)
} else if info.MimeType != "image/gif" {
t.Fatalf("Got incorrect mime type: %v", info.MimeType)
} else if info.HasPreviewImage {
t.Fatalf("Got HasPreviewImage = true for animated gif")
}
+
+ if info, err := GetInfoForBytes("filewithoutextension", fakeFile); err != nil {
+ t.Fatal(err)
+ } else if info.Filename != "filewithoutextension" {
+ t.Fatalf("Got incorrect filename: %v", info.Filename)
+ } else if info.Size != 1000 {
+ t.Fatalf("Got incorrect size: %v", info.Size)
+ } else if info.Extension != "" {
+ t.Fatalf("Got incorrect file extension: %v", info.Extension)
+ } else if info.MimeType != "" {
+ t.Fatalf("Got incorrect mime type: %v", info.MimeType)
+ } else if info.HasPreviewImage {
+ t.Fatalf("Got HasPreviewImage = true for non-image file")
+ }
}
diff --git a/web/react/components/activity_log_modal.jsx b/web/react/components/activity_log_modal.jsx
index f5341c0bc..6a880f0ee 100644
--- a/web/react/components/activity_log_modal.jsx
+++ b/web/react/components/activity_log_modal.jsx
@@ -100,8 +100,12 @@ export default class ActivityLogModal extends React.Component {
if (currentSession.props.platform === 'Windows') {
devicePicture = 'fa fa-windows';
- } else if (currentSession.props.platform === 'Macintosh' || currentSession.props.platform === 'iPhone') {
+ } else if (currentSession.props.platform === 'Macintosh' ||
+ currentSession.props.platform === 'iPhone') {
devicePicture = 'fa fa-apple';
+ } else if (currentSession.props.platform.browser.indexOf('Mattermost/') === 0) {
+ devicePicture = 'fa fa-apple';
+ devicePlatform = 'iPhone';
} else if (currentSession.props.platform === 'Linux') {
if (currentSession.props.os.indexOf('Android') >= 0) {
devicePlatform = 'Android';
diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx
index 827654e1b..4cde5feed 100644
--- a/web/react/components/delete_post_modal.jsx
+++ b/web/react/components/delete_post_modal.jsx
@@ -23,7 +23,7 @@ export default class DeletePostModal extends React.Component {
this.selectedList = null;
this.state = {
- show: true,
+ show: false,
post: null,
commentCount: 0,
error: ''
@@ -40,6 +40,14 @@ export default class DeletePostModal extends React.Component {
ModalStore.removeModalListener(ActionTypes.TOGGLE_DELETE_POST_MODAL, this.handleToggle);
}
+ componentDidUpdate(prevProps, prevState) {
+ if (this.state.show && !prevState.show) {
+ setTimeout(() => {
+ $(ReactDOM.findDOMNode(this.refs.deletePostBtn)).focus();
+ }, 0);
+ }
+ }
+
handleDelete() {
Client.deletePost(
this.state.post.channel_id,
@@ -149,10 +157,10 @@ export default class DeletePostModal extends React.Component {
{'Cancel'}
</button>
<button
+ ref='deletePostBtn'
type='button'
className='btn btn-danger'
onClick={this.handleDelete}
- autoFocus='autofocus'
>
{'Delete'}
</button>
diff --git a/web/react/components/file_info_preview.jsx b/web/react/components/file_info_preview.jsx
index 4b76cd162..45d89007f 100644
--- a/web/react/components/file_info_preview.jsx
+++ b/web/react/components/file_info_preview.jsx
@@ -5,11 +5,16 @@ import * as Utils from '../utils/utils.jsx';
export default function FileInfoPreview({filename, fileUrl, fileInfo}) {
// non-image files include a section providing details about the file
- let infoString = 'File type ' + fileInfo.extension.toUpperCase();
- if (fileInfo.size > 0) {
- infoString += ', Size ' + Utils.fileSizeToString(fileInfo.size);
+ const infoParts = [];
+
+ if (fileInfo.extension !== '') {
+ infoParts.push('File type ' + fileInfo.extension.toUpperCase());
}
+ infoParts.push('Size ' + Utils.fileSizeToString(fileInfo.size));
+
+ const infoString = infoParts.join(', ');
+
const name = decodeURIComponent(Utils.getFileName(filename));
return (