Merge pull request #18780 from owncloud/isimage-fallback
fallback for isimage
This commit is contained in:
commit
c4096767cc
|
@ -31,16 +31,15 @@
|
||||||
*/
|
*/
|
||||||
var FileInfoModel = OC.Backbone.Model.extend({
|
var FileInfoModel = OC.Backbone.Model.extend({
|
||||||
|
|
||||||
|
defaults: {
|
||||||
|
mimetype: 'application/octet-stream',
|
||||||
|
path: ''
|
||||||
|
},
|
||||||
|
|
||||||
initialize: function(data) {
|
initialize: function(data) {
|
||||||
if (!_.isUndefined(data.id)) {
|
if (!_.isUndefined(data.id)) {
|
||||||
data.id = parseInt(data.id, 10);
|
data.id = parseInt(data.id, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: normalize path
|
|
||||||
data.path = data.path || '';
|
|
||||||
data.name = data.name;
|
|
||||||
|
|
||||||
data.mimetype = data.mimetype || 'application/octet-stream';
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,7 +57,7 @@
|
||||||
* @return {boolean} true if this is an image, false otherwise
|
* @return {boolean} true if this is an image, false otherwise
|
||||||
*/
|
*/
|
||||||
isImage: function() {
|
isImage: function() {
|
||||||
return this.get('mimetype').substr(0, 6) === 'image/';
|
return this.has('mimetype') ? this.get('mimetype').substr(0, 6) === 'image/' : false;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -20,11 +20,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
||||||
var view, tooltipStub, fileListMock, fileActions, fileList, testFileInfo;
|
var view, tooltipStub, fileActions, fileList, testFileInfo;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
tooltipStub = sinon.stub($.fn, 'tooltip');
|
tooltipStub = sinon.stub($.fn, 'tooltip');
|
||||||
fileListMock = sinon.mock(OCA.Files.FileList.prototype);
|
|
||||||
fileActions = new OCA.Files.FileActions();
|
fileActions = new OCA.Files.FileActions();
|
||||||
fileList = new OCA.Files.FileList($('<table></table>'), {
|
fileList = new OCA.Files.FileList($('<table></table>'), {
|
||||||
fileActions: fileActions
|
fileActions: fileActions
|
||||||
|
@ -40,6 +39,7 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
||||||
permissions: 31,
|
permissions: 31,
|
||||||
path: '/subdir',
|
path: '/subdir',
|
||||||
size: 123456789,
|
size: 123456789,
|
||||||
|
etag: 'abcdefg',
|
||||||
mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0)
|
mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -47,7 +47,6 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
||||||
view.remove();
|
view.remove();
|
||||||
view = undefined;
|
view = undefined;
|
||||||
tooltipStub.restore();
|
tooltipStub.restore();
|
||||||
fileListMock.restore();
|
|
||||||
|
|
||||||
});
|
});
|
||||||
describe('rendering', function() {
|
describe('rendering', function() {
|
||||||
|
@ -76,9 +75,31 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
||||||
});
|
});
|
||||||
it('displays mime icon', function() {
|
it('displays mime icon', function() {
|
||||||
// File
|
// File
|
||||||
|
var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview');
|
||||||
testFileInfo.set('mimetype', 'text/calendar');
|
testFileInfo.set('mimetype', 'text/calendar');
|
||||||
view.setFileInfo(testFileInfo);
|
view.setFileInfo(testFileInfo);
|
||||||
|
|
||||||
|
expect(lazyLoadPreviewStub.calledOnce).toEqual(true);
|
||||||
|
var previewArgs = lazyLoadPreviewStub.getCall(0).args;
|
||||||
|
expect(previewArgs[0].mime).toEqual('text/calendar');
|
||||||
|
expect(previewArgs[0].path).toEqual('/subdir/One.txt');
|
||||||
|
expect(previewArgs[0].etag).toEqual('abcdefg');
|
||||||
|
|
||||||
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
|
||||||
|
|
||||||
|
// returns mime icon first without img parameter
|
||||||
|
previewArgs[0].callback(
|
||||||
|
OC.imagePath('core', 'filetypes/text-calendar.svg')
|
||||||
|
);
|
||||||
|
|
||||||
|
// still loading
|
||||||
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
|
||||||
|
|
||||||
|
// preview loading failed, no prview
|
||||||
|
previewArgs[0].error();
|
||||||
|
|
||||||
|
// loading stopped, the mimetype icon gets displayed
|
||||||
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false);
|
||||||
expect(view.$el.find('.thumbnail').css('background-image'))
|
expect(view.$el.find('.thumbnail').css('background-image'))
|
||||||
.toContain('filetypes/text-calendar.svg');
|
.toContain('filetypes/text-calendar.svg');
|
||||||
|
|
||||||
|
@ -88,17 +109,46 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() {
|
||||||
|
|
||||||
expect(view.$el.find('.thumbnail').css('background-image'))
|
expect(view.$el.find('.thumbnail').css('background-image'))
|
||||||
.toContain('filetypes/folder.svg');
|
.toContain('filetypes/folder.svg');
|
||||||
|
|
||||||
|
lazyLoadPreviewStub.restore();
|
||||||
});
|
});
|
||||||
it('displays thumbnail', function() {
|
it('displays thumbnail', function() {
|
||||||
testFileInfo.set('mimetype', 'test/plain');
|
var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview');
|
||||||
|
|
||||||
|
testFileInfo.set('mimetype', 'text/plain');
|
||||||
view.setFileInfo(testFileInfo);
|
view.setFileInfo(testFileInfo);
|
||||||
|
|
||||||
var expectation = fileListMock.expects('lazyLoadPreview');
|
expect(lazyLoadPreviewStub.calledOnce).toEqual(true);
|
||||||
expectation.once();
|
var previewArgs = lazyLoadPreviewStub.getCall(0).args;
|
||||||
|
expect(previewArgs[0].mime).toEqual('text/plain');
|
||||||
|
expect(previewArgs[0].path).toEqual('/subdir/One.txt');
|
||||||
|
expect(previewArgs[0].etag).toEqual('abcdefg');
|
||||||
|
|
||||||
view.setFileInfo(testFileInfo);
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
|
||||||
|
|
||||||
fileListMock.verify();
|
// returns mime icon first without img parameter
|
||||||
|
previewArgs[0].callback(
|
||||||
|
OC.imagePath('core', 'filetypes/text-plain.svg')
|
||||||
|
);
|
||||||
|
|
||||||
|
// still loading
|
||||||
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true);
|
||||||
|
|
||||||
|
// return an actual (simulated) image
|
||||||
|
previewArgs[0].callback(
|
||||||
|
'testimage', {
|
||||||
|
width: 100,
|
||||||
|
height: 200
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// loading stopped, image got displayed
|
||||||
|
expect(view.$el.find('.thumbnail').css('background-image'))
|
||||||
|
.toContain('testimage');
|
||||||
|
|
||||||
|
expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false);
|
||||||
|
|
||||||
|
lazyLoadPreviewStub.restore();
|
||||||
});
|
});
|
||||||
it('does not show size if no size available', function() {
|
it('does not show size if no size available', function() {
|
||||||
testFileInfo.unset('size');
|
testFileInfo.unset('size');
|
||||||
|
|
Loading…
Reference in New Issue