Merge pull request #368 from nickago/MM-1911
MM 1911 Added support for .jpeg in addition to .jpg
Этот коммит содержится в:
@@ -13,8 +13,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
IMAGE_EXTENSIONS = [4]string{".jpg", ".gif", ".bmp", ".png"}
|
IMAGE_EXTENSIONS = [5]string{".jpg", ".jpeg", ".gif", ".bmp", ".png"}
|
||||||
IMAGE_MIME_TYPES = map[string]string{".jpg": "image/jpeg", ".gif": "image/gif", ".bmp": "image/bmp", ".png": "image/png", ".tiff": "image/tiff"}
|
IMAGE_MIME_TYPES = map[string]string{".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".gif": "image/gif", ".bmp": "image/bmp", ".png": "image/png", ".tiff": "image/tiff"}
|
||||||
)
|
)
|
||||||
|
|
||||||
type FileUploadResponse struct {
|
type FileUploadResponse struct {
|
||||||
|
|||||||
@@ -7,6 +7,13 @@ var ChannelStore = require('../stores/channel_store.jsx');
|
|||||||
var utils = require('../utils/utils.jsx');
|
var utils = require('../utils/utils.jsx');
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
|
displayName: 'FileUpload',
|
||||||
|
propTypes: {
|
||||||
|
onUploadError: React.PropTypes.func,
|
||||||
|
getFileCount: React.PropTypes.func,
|
||||||
|
onFileUpload: React.PropTypes.func,
|
||||||
|
onUploadStart: React.PropTypes.func
|
||||||
|
},
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
return {requests: {}};
|
return {requests: {}};
|
||||||
},
|
},
|
||||||
@@ -21,7 +28,7 @@ module.exports = React.createClass({
|
|||||||
// This looks redundant, but must be done this way due to
|
// This looks redundant, but must be done this way due to
|
||||||
// setState being an asynchronous call
|
// setState being an asynchronous call
|
||||||
var numFiles = 0;
|
var numFiles = 0;
|
||||||
for(var i = 0; i < files.length; i++) {
|
for (var i = 0; i < files.length; i++) {
|
||||||
if (files[i].size <= Constants.MAX_FILE_SIZE) {
|
if (files[i].size <= Constants.MAX_FILE_SIZE) {
|
||||||
numFiles++;
|
numFiles++;
|
||||||
}
|
}
|
||||||
@@ -51,11 +58,11 @@ module.exports = React.createClass({
|
|||||||
var request = client.uploadFile(formData,
|
var request = client.uploadFile(formData,
|
||||||
function(data) {
|
function(data) {
|
||||||
var parsedData = $.parseJSON(data);
|
var parsedData = $.parseJSON(data);
|
||||||
this.props.onFileUpload(parsedData['filenames'], parsedData['client_ids'], channelId);
|
this.props.onFileUpload(parsedData.filenames, parsedData.client_ids, channelId);
|
||||||
|
|
||||||
var requests = this.state.requests;
|
var requests = this.state.requests;
|
||||||
for (var i = 0; i < parsedData['client_ids'].length; i++) {
|
for (var i = 0; i < parsedData.client_ids.length; i++) {
|
||||||
delete requests[parsedData['client_ids'][i]];
|
delete requests[parsedData.client_ids[i]];
|
||||||
}
|
}
|
||||||
this.setState({requests: requests});
|
this.setState({requests: requests});
|
||||||
}.bind(this),
|
}.bind(this),
|
||||||
@@ -100,12 +107,9 @@ module.exports = React.createClass({
|
|||||||
if (items) {
|
if (items) {
|
||||||
for (var i = 0; i < items.length; i++) {
|
for (var i = 0; i < items.length; i++) {
|
||||||
if (items[i].type.indexOf('image') !== -1) {
|
if (items[i].type.indexOf('image') !== -1) {
|
||||||
var ext = items[i].type.split('/')[1].toLowerCase();
|
var testExt = items[i].type.split('/')[1].toLowerCase();
|
||||||
if (ext === 'jpeg') {
|
|
||||||
ext = 'jpg';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Constants.IMAGE_TYPES.indexOf(ext) < 0) {
|
if (Constants.IMAGE_TYPES.indexOf(testExt) < 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +117,7 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var numToUpload = Math.min(Constants.MAX_UPLOAD_FILES - self.props.getFileCount(channelId), numItems);
|
var numToUpload = Math.min(Constants.MAX_UPLOAD_FILES - self.props.getFileCount(ChannelStore.getCurrentId()), numItems);
|
||||||
|
|
||||||
if (numItems > numToUpload) {
|
if (numItems > numToUpload) {
|
||||||
self.props.onUploadError('Uploads limited to ' + Constants.MAX_UPLOAD_FILES + ' files maximum. Please use additional posts for more files.');
|
self.props.onUploadError('Uploads limited to ' + Constants.MAX_UPLOAD_FILES + ' files maximum. Please use additional posts for more files.');
|
||||||
@@ -124,9 +128,6 @@ module.exports = React.createClass({
|
|||||||
var file = items[i].getAsFile();
|
var file = items[i].getAsFile();
|
||||||
|
|
||||||
var ext = items[i].type.split('/')[1].toLowerCase();
|
var ext = items[i].type.split('/')[1].toLowerCase();
|
||||||
if (ext === 'jpeg') {
|
|
||||||
ext = 'jpg';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Constants.IMAGE_TYPES.indexOf(ext) < 0) {
|
if (Constants.IMAGE_TYPES.indexOf(ext) < 0) {
|
||||||
continue;
|
continue;
|
||||||
@@ -161,11 +162,11 @@ module.exports = React.createClass({
|
|||||||
var request = client.uploadFile(formData,
|
var request = client.uploadFile(formData,
|
||||||
function(data) {
|
function(data) {
|
||||||
var parsedData = $.parseJSON(data);
|
var parsedData = $.parseJSON(data);
|
||||||
self.props.onFileUpload(parsedData['filenames'], parsedData['client_ids'], channelId);
|
self.props.onFileUpload(parsedData.filenames, parsedData.client_ids, channelId);
|
||||||
|
|
||||||
var requests = self.state.requests;
|
var requests = self.state.requests;
|
||||||
for (var i = 0; i < parsedData['client_ids'].length; i++) {
|
for (var i = 0; i < parsedData.client_ids.length; i++) {
|
||||||
delete requests[parsedData['client_ids'][i]];
|
delete requests[parsedData.client_ids[i]];
|
||||||
}
|
}
|
||||||
self.setState({requests: requests});
|
self.setState({requests: requests});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ module.exports = {
|
|||||||
}),
|
}),
|
||||||
SPECIAL_MENTIONS: ['all', 'channel'],
|
SPECIAL_MENTIONS: ['all', 'channel'],
|
||||||
CHARACTER_LIMIT: 4000,
|
CHARACTER_LIMIT: 4000,
|
||||||
IMAGE_TYPES: ['jpg', 'gif', 'bmp', 'png'],
|
IMAGE_TYPES: ['jpg', 'gif', 'bmp', 'png', 'jpeg'],
|
||||||
AUDIO_TYPES: ['mp3', 'wav', 'wma', 'm4a', 'flac', 'aac'],
|
AUDIO_TYPES: ['mp3', 'wav', 'wma', 'm4a', 'flac', 'aac'],
|
||||||
VIDEO_TYPES: ['mp4', 'avi', 'webm', 'mkv', 'wmv', 'mpg', 'mov', 'flv'],
|
VIDEO_TYPES: ['mp4', 'avi', 'webm', 'mkv', 'wmv', 'mpg', 'mov', 'flv'],
|
||||||
SPREADSHEET_TYPES: ['ppt', 'pptx', 'csv'],
|
SPREADSHEET_TYPES: ['ppt', 'pptx', 'csv'],
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user