diff --git a/package.json b/package.json index 8168a47d62..e5143b0b69 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "classnames": "^2.1.2", + "filesize": "^3.1.2", "flux": "^2.0.3", "matrix-js-sdk": "0.1.1", "q": "^1.4.1", diff --git a/skins/base/views/molecules/MFileTile.js b/skins/base/views/molecules/MFileTile.js new file mode 100644 index 0000000000..712656b406 --- /dev/null +++ b/skins/base/views/molecules/MFileTile.js @@ -0,0 +1,42 @@ +/* +Copyright 2015 OpenMarket Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +'use strict'; + +var React = require('react'); +var filesize = require('filesize'); + +var MFileTileController = require("../../../../src/controllers/molecules/MFileTile"); + +var MatrixClientPeg = require('../../../../src/MatrixClientPeg'); + +module.exports = React.createClass({ + displayName: 'MFileTile', + mixins: [MFileTileController], + + render: function() { + var content = this.props.mxEvent.getContent(); + var cli = MatrixClientPeg.get(); + + return ( + + + {this.presentableTextForFile(content)} + + + ); + }, +}); diff --git a/skins/base/views/molecules/MessageTile.js b/skins/base/views/molecules/MessageTile.js index 257441423d..d13744421a 100644 --- a/skins/base/views/molecules/MessageTile.js +++ b/skins/base/views/molecules/MessageTile.js @@ -31,7 +31,8 @@ var tileTypes = { 'm.text': ComponentBroker.get('molecules/MTextTile'), 'm.notice': ComponentBroker.get('molecules/MNoticeTile'), 'm.emote': ComponentBroker.get('molecules/MEmoteTile'), - 'm.image': ComponentBroker.get('molecules/MImageTile') + 'm.image': ComponentBroker.get('molecules/MImageTile'), + 'm.file': ComponentBroker.get('molecules/MFileTile') }; var MessageTileController = require("../../../../src/controllers/molecules/MessageTile"); diff --git a/src/ComponentBroker.js b/src/ComponentBroker.js index 1177d4aa45..32b07a0335 100644 --- a/src/ComponentBroker.js +++ b/src/ComponentBroker.js @@ -70,6 +70,7 @@ require('../skins/base/views/molecules/MTextTile'); require('../skins/base/views/molecules/MNoticeTile'); require('../skins/base/views/molecules/MEmoteTile'); require('../skins/base/views/molecules/MImageTile'); +require('../skins/base/views/molecules/MFileTile'); require('../skins/base/views/molecules/MRoomMemberTile'); require('../skins/base/views/molecules/RoomHeader'); require('../skins/base/views/molecules/MessageComposer'); diff --git a/src/controllers/molecules/MFileTile.js b/src/controllers/molecules/MFileTile.js new file mode 100644 index 0000000000..a0e0cc3413 --- /dev/null +++ b/src/controllers/molecules/MFileTile.js @@ -0,0 +1,40 @@ +/* +Copyright 2015 OpenMarket Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +'use strict'; + +module.exports = { + presentableTextForFile: function(content) { + var linkText = 'Attachment'; + if (content.body && content.body.length > 0) { + linkText = content.body; + } + + var additionals = []; + if (content.info.mimetype && content.info.mimetype.length > 0) { + additionals.push(content.info.mimetype); + } + if (content.info.size && content.info.size.length > 0) { + additionals.push(filesize(content.info.size)); + } + + if (additionals.length > 0) { + linkText += ' (' + additionals.join(',') + ')'; + } + return linkText; + } +}; +