diff --git a/app/lib/file-system.js b/app/lib/file-system.js index 9b7fababcd..134f38d186 100644 --- a/app/lib/file-system.js +++ b/app/lib/file-system.js @@ -176,5 +176,5 @@ function ensureExtension(filePath, defaultExtension) { } function getBase64Contents(contents) { - return contents.replace(/^data:image\/(jpg|png)+;base64,/, ''); + return contents.replace(/^data:image\/(jpeg|png)+;base64,/, ''); } \ No newline at end of file diff --git a/app/test/spec/file-system-spec.js b/app/test/spec/file-system-spec.js index d4f74c12a9..429572cc5c 100644 --- a/app/test/spec/file-system-spec.js +++ b/app/test/spec/file-system-spec.js @@ -8,9 +8,9 @@ const FileSystem = require('../../lib/file-system'); const ENCODING_BASE64 = 'base64', ENCODING_UTF8 = 'utf8'; -const BASE64_ENCODED = - 'data:image/png;base64,' + - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII='; +const PNG_BASE64_ENCODED = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAA'; + +const JPEG_BASE64_ENCODED = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD'; let testFilePaths = []; @@ -79,7 +79,7 @@ describe('FileSystem', function() { // given const fooPath = getTestFilePath('foo.file'); - fileSystem.writeFile(fooPath, { contents: BASE64_ENCODED }, { + fileSystem.writeFile(fooPath, { contents: PNG_BASE64_ENCODED }, { encoding: ENCODING_BASE64 }); @@ -179,13 +179,13 @@ describe('FileSystem', function() { }); - it('should write file (encoding=BASE64)', function() { + it('should write PNG file (encoding=BASE64)', function() { // given const fooPath = getTestFilePath('foo.file'); // when - fileSystem.writeFile(fooPath, { contents: BASE64_ENCODED }, { + fileSystem.writeFile(fooPath, { contents: PNG_BASE64_ENCODED }, { encoding: ENCODING_BASE64 }); @@ -194,7 +194,26 @@ describe('FileSystem', function() { encoding: ENCODING_BASE64 }); - expect(file.contents).to.match(/iVBOR/); + expect(file.contents).to.match(/iVBORw0KGgoAAAANSUhEUgAAADAA/); + }); + + + it('should write JPEG file (encoding=BASE64)', function() { + + // given + const fooPath = getTestFilePath('foo.file'); + + // when + fileSystem.writeFile(fooPath, { contents: JPEG_BASE64_ENCODED }, { + encoding: ENCODING_BASE64 + }); + + // then + const file = fileSystem.readFile(fooPath, { + encoding: ENCODING_BASE64 + }); + + expect(file.contents).to.match(/\/9j\/4AAQSkZJRgABAQAAAQABAAA/); }); diff --git a/client/src/app/TabsProvider.js b/client/src/app/TabsProvider.js index 40d01dc795..33c03af60e 100644 --- a/client/src/app/TabsProvider.js +++ b/client/src/app/TabsProvider.js @@ -26,22 +26,22 @@ const noopProvider = { const ENCODING_BASE64 = 'base64', ENCODING_UTF8 = 'utf8'; -const EXPORT_JPG = { - name: 'JPG', +const EXPORT_JPEG = { + name: 'JPEG image', encoding: ENCODING_BASE64, - extensions: [ '.jpg' ] + extensions: [ 'jpeg' ] }; const EXPORT_PNG = { - name: 'PNG', + name: 'PNG image', encoding: ENCODING_BASE64, - extensions: [ '.png' ] + extensions: [ 'png' ] }; const EXPORT_SVG = { - name: 'SVG', + name: 'SVG image', encoding: ENCODING_UTF8, - extensions: [ '.svg' ] + extensions: [ 'svg' ] }; /** @@ -61,8 +61,8 @@ export default class TabsProvider { name: 'BPMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'bpmn', 'xml' ], @@ -94,8 +94,8 @@ export default class TabsProvider { name: 'CMMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'cmmn', 'xml' ], @@ -126,8 +126,8 @@ export default class TabsProvider { name: 'DMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'dmn', 'xml' ], diff --git a/client/src/app/__tests__/TabsProviderSpec.js b/client/src/app/__tests__/TabsProviderSpec.js index 1ea3800bb5..f99a6a1d9b 100644 --- a/client/src/app/__tests__/TabsProviderSpec.js +++ b/client/src/app/__tests__/TabsProviderSpec.js @@ -23,14 +23,44 @@ describe('TabsProvider', function() { const tabsProvider = new TabsProvider(); // then - expect(tabsProvider.getProvider('cmmn')).to.exist; expect(tabsProvider.getProvider('bpmn')).to.exist; + expect(tabsProvider.getProvider('cmmn')).to.exist; expect(tabsProvider.getProvider('dmn')).to.exist; expect(tabsProvider.getProvider('empty')).to.exist; }); + it('should export BPMN, CMMN and DMN as JPEG, PNG and SVG', function() { + + // given + const tabsProvider = new TabsProvider(); + + const expected = { + png: { + name: 'PNG image', + encoding: 'base64', + extensions: [ 'png' ] + }, + jpeg: { + name: 'JPEG image', + encoding: 'base64', + extensions: [ 'jpeg' ] + }, + svg: { + name: 'SVG image', + encoding: 'utf8', + extensions: [ 'svg' ] + } + }; + + // then + expect(tabsProvider.getProvider('bpmn').exports).to.eql(expected); + expect(tabsProvider.getProvider('cmmn').exports).to.eql(expected); + expect(tabsProvider.getProvider('dmn').exports).to.eql(expected); + }); + + it('should provide initial tab contents', function() { // given diff --git a/client/src/app/__tests__/mocks/index.js b/client/src/app/__tests__/mocks/index.js index 6536d1b164..9c457e3ffd 100644 --- a/client/src/app/__tests__/mocks/index.js +++ b/client/src/app/__tests__/mocks/index.js @@ -10,22 +10,22 @@ import EmptyTab from '../../EmptyTab'; const ENCODING_BASE64 = 'base64', ENCODING_UTF8 = 'utf8'; -const EXPORT_JPG = { - name: 'JPG', +const EXPORT_JPEG = { + name: 'JPEG image', encoding: ENCODING_BASE64, - extensions: [ '.jpg' ] + extensions: [ 'jpeg' ] }; const EXPORT_PNG = { - name: 'PNG', + name: 'PNG image', encoding: ENCODING_BASE64, - extensions: [ '.png' ] + extensions: [ 'png' ] }; const EXPORT_SVG = { - name: 'SVG', + name: 'SVG image', encoding: ENCODING_UTF8, - extensions: [ '.svg' ] + extensions: [ 'svg' ] }; @@ -107,8 +107,8 @@ export class TabsProvider { name: 'BPMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'bpmn', 'xml' ] @@ -117,8 +117,8 @@ export class TabsProvider { name: 'CMMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'cmmn', 'xml' ] @@ -127,8 +127,8 @@ export class TabsProvider { name: 'DMN', encoding: ENCODING_UTF8, exports: { - jpg: EXPORT_JPG, png: EXPORT_PNG, + jpeg: EXPORT_JPEG, svg: EXPORT_SVG }, extensions: [ 'dmn', 'xml' ] diff --git a/client/src/app/tabs/bpmn/BpmnEditor.js b/client/src/app/tabs/bpmn/BpmnEditor.js index e746afb15b..3d27d3e974 100644 --- a/client/src/app/tabs/bpmn/BpmnEditor.js +++ b/client/src/app/tabs/bpmn/BpmnEditor.js @@ -48,7 +48,7 @@ const NAMESPACE_URL_ACTIVITI = 'http://activiti.org/bpmn', NAMESPACE_PREFIX_ACTIVITI = 'activiti', NAMESPACE_PREFIX_CAMUNDA = 'camunda'; -const EXPORT_AS = [ 'svg', 'png' ]; +const EXPORT_AS = [ 'png', 'jpeg', 'svg' ]; const COLORS = [{ title: 'White', diff --git a/client/src/app/tabs/cmmn/CmmnEditor.js b/client/src/app/tabs/cmmn/CmmnEditor.js index 302ccd8785..24d966c8c1 100644 --- a/client/src/app/tabs/cmmn/CmmnEditor.js +++ b/client/src/app/tabs/cmmn/CmmnEditor.js @@ -30,7 +30,7 @@ import generateImage from '../../util/generateImage'; import Metadata from '../../../util/Metadata'; -const EXPORT_AS = [ 'svg', 'png' ]; +const EXPORT_AS = [ 'png', 'jpeg', 'svg' ]; export class CmmnEditor extends CachedComponent { diff --git a/client/src/app/tabs/dmn/DmnEditor.js b/client/src/app/tabs/dmn/DmnEditor.js index 679035b077..3e32cd7834 100644 --- a/client/src/app/tabs/dmn/DmnEditor.js +++ b/client/src/app/tabs/dmn/DmnEditor.js @@ -43,7 +43,7 @@ import generateImage from '../../util/generateImage'; import Metadata from '../../../util/Metadata'; -const EXPORT_AS = [ 'svg', 'png' ]; +const EXPORT_AS = [ 'png', 'jpeg', 'svg' ]; export class DmnEditor extends CachedComponent {