diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/css/versions.css
index cd63a90ab51d..7afd46f4c30e 100644
--- a/apps/files_versions/css/versions.css
+++ b/apps/files_versions/css/versions.css
@@ -44,6 +44,9 @@
.versionsTabView img.preview {
cursor: default;
+ background-size: 32px;
+ width: 32px;
+ height: 32px;
}
.versionsTabView .version-container {
diff --git a/apps/files_versions/js/versioncollection.js b/apps/files_versions/js/versioncollection.js
index 47a26eeb8a04..7ff13a849dc4 100644
--- a/apps/files_versions/js/versioncollection.js
+++ b/apps/files_versions/js/versioncollection.js
@@ -8,6 +8,8 @@
*
*/
+/* global moment */
+
(function() {
/**
* @memberof OCA.Versions
@@ -46,6 +48,7 @@
fullPath: fullPath,
timestamp: moment(new Date(version['{DAV:}getlastmodified'])).format('X'),
size: version['{DAV:}getcontentlength'],
+ mimetype: version['{DAV:}getcontenttype'],
fileId: fileId
};
});
diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/js/versionstabview.js
index 8a77f1bfc075..d6814071246a 100644
--- a/apps/files_versions/js/versionstabview.js
+++ b/apps/files_versions/js/versionstabview.js
@@ -9,6 +9,21 @@
*/
(function() {
+
+ function getPreviewUrl(model) {
+ var mime = model.get('mimetype');
+
+ var enabledPreviewProviders = OC.appConfig.core.enabledPreviewProviders || [];
+ if (enabledPreviewProviders.length > 0) {
+ var allMimesPattern = new RegExp(enabledPreviewProviders.join('|'));
+ if (OC.appConfig.core.previewsEnabled && allMimesPattern.test(mime)) {
+ return model.getPreviewUrl();
+ }
+ }
+
+ return OC.MimeType.getIconUrl(mime);
+ }
+
var TEMPLATE_ITEM =
'
' +
'' +
@@ -185,6 +200,7 @@
_formatItem: function(version) {
var timestamp = version.get('timestamp') * 1000;
var size = version.has('size') ? version.get('size') : 0;
+
return _.extend({
versionId: version.get('id'),
formattedTimestamp: OC.Util.formatDate(timestamp),
@@ -195,7 +211,7 @@
downloadUrl: version.getDownloadUrl(),
downloadIconUrl: OC.imagePath('core', 'actions/download'),
revertIconUrl: OC.imagePath('core', 'actions/history'),
- previewUrl: version.getPreviewUrl(),
+ previewUrl: getPreviewUrl(version),
revertLabel: t('files_versions', 'Restore'),
canRevert: (this.collection.getFileInfo().get('permissions') & OC.PERMISSION_UPDATE) !== 0
}, version.attributes);
diff --git a/apps/files_versions/tests/js/versionstabviewSpec.js b/apps/files_versions/tests/js/versionstabviewSpec.js
index 2e4bbb693c73..a7301dbe473e 100644
--- a/apps/files_versions/tests/js/versionstabviewSpec.js
+++ b/apps/files_versions/tests/js/versionstabviewSpec.js
@@ -24,14 +24,16 @@ describe('OCA.Versions.VersionsTabView', function() {
timestamp: time1,
name: 'some file.txt',
size: 140,
- fullPath: '/subdir/some file.txt'
+ fullPath: '/subdir/some file.txt',
+ mimetype: 'text/plain'
});
var version2 = new VersionModel({
id: time2,
timestamp: time2,
name: 'some file.txt',
size: 150,
- fullPath: '/subdir/some file.txt'
+ fullPath: '/subdir/some file.txt',
+ mimetype: 'text/plain'
});
testVersions = [version1, version2];
@@ -80,14 +82,12 @@ describe('OCA.Versions.VersionsTabView', function() {
expect($item.find('.versiondate').text()).toEqual('seconds ago');
expect($item.find('.size').text()).toEqual('< 1 KB');
expect($item.find('.revertVersion').length).toEqual(1);
- expect($item.find('.preview').attr('src')).toEqual(version1.getPreviewUrl());
$item = $versions.eq(1);
expect($item.find('.downloadVersion').attr('href')).toEqual(version2.getDownloadUrl());
expect($item.find('.versiondate').text()).toEqual('2 days ago');
expect($item.find('.size').text()).toEqual('< 1 KB');
expect($item.find('.revertVersion').length).toEqual(1);
- expect($item.find('.preview').attr('src')).toEqual(version2.getPreviewUrl());
});
it('does not render revert button when no update permissions', function() {
@@ -104,13 +104,66 @@ describe('OCA.Versions.VersionsTabView', function() {
expect($item.find('.downloadVersion').attr('href')).toEqual(version1.getDownloadUrl());
expect($item.find('.versiondate').text()).toEqual('seconds ago');
expect($item.find('.revertVersion').length).toEqual(0);
- expect($item.find('.preview').attr('src')).toEqual(version1.getPreviewUrl());
$item = $versions.eq(1);
expect($item.find('.downloadVersion').attr('href')).toEqual(version2.getDownloadUrl());
expect($item.find('.versiondate').text()).toEqual('2 days ago');
expect($item.find('.revertVersion').length).toEqual(0);
- expect($item.find('.preview').attr('src')).toEqual(version2.getPreviewUrl());
+ });
+
+ describe('version file previews', function() {
+ var oldCoreConfig;
+ var getIconUrlStub;
+ var textIconUrl;
+
+ beforeEach(function() {
+ // backup core config
+ oldCoreConfig = OC.appConfig.core;
+ OC.appConfig.core = _.extend({}, OC.appConfig.core)
+
+ textIconUrl = OC.TestUtil.buildAbsoluteUrl(OC.imagePath('core', 'filetypes/text.svg'))
+ getIconUrlStub = sinon.stub(OC.MimeType, 'getIconUrl').returns(textIconUrl);
+ });
+ afterEach(function() {
+ OC.appConfig.core = oldCoreConfig;
+ getIconUrlStub.restore();
+ });
+
+ it('renders actual file preview when preview mime type is supported', function() {
+ OC.appConfig.core.previewsEnabled = true;
+ OC.appConfig.core.enabledPreviewProviders = ['text/plain'];
+
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.set([testVersions[0]]);
+
+ expect(getIconUrlStub.notCalled).toEqual(true);
+
+ expect(tabView.$el.find('.versions>li:eq(0) .preview').attr('src')).toEqual(testVersions[0].getPreviewUrl());
+ });
+ it('renders mime type icon as preview when preview mime type is not supported', function() {
+ OC.appConfig.core.previewsEnabled = true;
+ OC.appConfig.core.enabledPreviewProviders = ['something/else'];
+
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.set([testVersions[0]]);
+
+ expect(getIconUrlStub.calledOnce).toEqual(true);
+ expect(getIconUrlStub.getCall(0).args[0]).toEqual('text/plain');
+
+ expect(tabView.$el.find('.versions>li:eq(0) .preview').attr('src')).toEqual(textIconUrl);
+ });
+ it('renders mime type icon as preview when previews are disabled', function() {
+ OC.appConfig.core.previewsEnabled = false;
+ OC.appConfig.core.enabledPreviewProviders = ['text/plain'];
+
+ tabView.setFileInfo(fileInfoModel);
+ tabView.collection.set([testVersions[0]]);
+
+ expect(getIconUrlStub.calledOnce).toEqual(true);
+ expect(getIconUrlStub.getCall(0).args[0]).toEqual('text/plain');
+
+ expect(tabView.$el.find('.versions>li:eq(0) .preview').attr('src')).toEqual(textIconUrl);
+ });
});
});
describe('Reverting', function() {