diff options
-rw-r--r-- | model/file_info.go | 7 | ||||
-rw-r--r-- | model/file_info_test.go | 22 | ||||
-rw-r--r-- | web/react/components/activity_log_modal.jsx | 6 | ||||
-rw-r--r-- | web/react/components/delete_post_modal.jsx | 12 | ||||
-rw-r--r-- | web/react/components/file_info_preview.jsx | 11 |
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 ( |