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() {