diff --git a/demo-shell-ng2/app/app.module.ts b/demo-shell-ng2/app/app.module.ts
index cd3eddb146..4fd0305b80 100644
--- a/demo-shell-ng2/app/app.module.ts
+++ b/demo-shell-ng2/app/app.module.ts
@@ -35,6 +35,7 @@ import { AnalyticsModule } from 'ng2-activiti-analytics';
import { AppComponent } from './app.component';
import { routing } from './app.routes';
import { CustomEditorsModule } from './components/activiti/custom-editor/custom-editor.component';
+import { Editor3DModule } from 'ng2-3d-editor';
import {
HomeComponent,
@@ -71,7 +72,8 @@ import {
ActivitiProcessListModule.forRoot(),
UserInfoComponentModule.forRoot(),
AnalyticsModule.forRoot(),
- CustomEditorsModule
+ CustomEditorsModule,
+ Editor3DModule.forRoot()
],
declarations: [
AppComponent,
diff --git a/demo-shell-ng2/app/components/files/files.component.html b/demo-shell-ng2/app/components/files/files.component.html
index 94b9382036..bb59434d1a 100644
--- a/demo-shell-ng2/app/components/files/files.component.html
+++ b/demo-shell-ng2/app/components/files/files.component.html
@@ -174,7 +174,13 @@
-
+
+
+
+
+
+
+
diff --git a/demo-shell-ng2/app/vendor.ts b/demo-shell-ng2/app/vendor.ts
index f8900561ae..2c8431a2be 100644
--- a/demo-shell-ng2/app/vendor.ts
+++ b/demo-shell-ng2/app/vendor.ts
@@ -62,3 +62,4 @@ if (process.env.ENV === 'production') {
}
require('pdfjs-dist/web/pdf_viewer.js');
+require('three/build/three.min.js');
diff --git a/demo-shell-ng2/package.json b/demo-shell-ng2/package.json
index 1a87abb25a..5e66c148e9 100644
--- a/demo-shell-ng2/package.json
+++ b/demo-shell-ng2/package.json
@@ -79,6 +79,7 @@
"raphael": "^2.2.6",
"md-date-time-picker": "^2.2.0",
"alfresco-js-api": "~1.1.0",
+ "ng2-3d-editor": "0.0.15",
"ng2-activiti-analytics": "1.1.0",
"ng2-alfresco-core": "1.1.0",
"ng2-alfresco-datatable": "1.1.0",
@@ -97,8 +98,8 @@
"element.scrollintoviewifneeded-polyfill": "^1.0.1"
},
"devDependencies": {
- "@types/jasmine": "^2.5.35",
- "@types/node": "^6.0.45",
+ "@types/jasmine": "2.5.35",
+ "@types/node": "6.0.45",
"angular2-template-loader": "^0.6.0",
"awesome-typescript-loader": "^2.2.4",
"classlist-polyfill": "^1.0.3",
diff --git a/ng2-components/ng2-alfresco-login/src/components/alfresco-login.component.ts b/ng2-components/ng2-alfresco-login/src/components/alfresco-login.component.ts
index 7bd8ccce5b..07d5450266 100644
--- a/ng2-components/ng2-alfresco-login/src/components/alfresco-login.component.ts
+++ b/ng2-components/ng2-alfresco-login/src/components/alfresco-login.component.ts
@@ -71,7 +71,7 @@ export class AlfrescoLoginComponent implements OnInit {
formError: { [id: string]: string };
- minLenght: number = 2;
+ minLength: number = 2;
footerTemplate: TemplateRef;
@@ -299,14 +299,14 @@ export class AlfrescoLoginComponent implements OnInit {
}
};
- this.translateService.get('LOGIN.MESSAGES.USERNAME-MIN', {minLenght: this.minLenght}).subscribe((res: string) => {
+ this.translateService.get('LOGIN.MESSAGES.USERNAME-MIN', {minLength: this.minLength}).subscribe((res: string) => {
this._message['username']['minlength'] = res;
});
}
private initFormFieldsDefault() {
this.form = this._fb.group({
- username: ['', Validators.compose([Validators.required, Validators.minLength(this.minLenght)])],
+ username: ['', Validators.compose([Validators.required, Validators.minLength(this.minLength)])],
password: ['', Validators.required]
});
}
diff --git a/ng2-components/ng2-alfresco-viewer/README.md b/ng2-components/ng2-alfresco-viewer/README.md
index 032cbad12f..41bfe6bae1 100644
--- a/ng2-components/ng2-alfresco-viewer/README.md
+++ b/ng2-components/ng2-alfresco-viewer/README.md
@@ -223,7 +223,44 @@ Media | Mp4, WebM, Ogv
Images | png, jpg, jpeg, gif, bmp
Text | pdf
+# Custom extension handler
+If you want handle other file formats that are not yet supported by the ng2-alfresco-viewer you can define your own custom handler.
+Above you can find an example where with the use of ``` extension-viewer ``` if you can handle 3d files
+
+```html
+
+
+
+
+
+
+
+```
+Note: In order to make the example above works you need to add in your package.json the dependency to ng2-3d-editor.
+
+Is possible define multiple ``` extension-viewer ```
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
## Build from sources
diff --git a/ng2-components/ng2-alfresco-viewer/index.ts b/ng2-components/ng2-alfresco-viewer/index.ts
index 3be1525e41..c133a06d80 100644
--- a/ng2-components/ng2-alfresco-viewer/index.ts
+++ b/ng2-components/ng2-alfresco-viewer/index.ts
@@ -27,26 +27,28 @@
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CoreModule } from 'ng2-alfresco-core';
-import { ViewerComponent } from './src/componets/viewer.component';
+import { ViewerComponent } from './src/components/viewer.component';
import { RenderingQueueServices } from './src/services/rendering-queue.services';
-import { ImgViewerComponent } from './src/componets/imgViewer.component';
-import { MediaPlayerComponent } from './src/componets/mediaPlayer.component';
-import { NotSupportedFormat } from './src/componets/notSupportedFormat.component';
-import { PdfViewerComponent } from './src/componets/pdfViewer.component';
+import { ImgViewerComponent } from './src/components/imgViewer.component';
+import { MediaPlayerComponent } from './src/components/mediaPlayer.component';
+import { NotSupportedFormat } from './src/components/notSupportedFormat.component';
+import { PdfViewerComponent } from './src/components/pdfViewer.component';
+import { ExtensionViewerDirective } from './src/directives/extension-viewer.directive';
-export * from './src/componets/viewer.component';
+export * from './src/components/viewer.component';
export * from './src/services/rendering-queue.services';
-export * from './src/componets/imgViewer.component';
-export * from './src/componets/mediaPlayer.component';
-export * from './src/componets/notSupportedFormat.component';
-export * from './src/componets/pdfViewer.component';
+export * from './src/components/imgViewer.component';
+export * from './src/components/mediaPlayer.component';
+export * from './src/components/notSupportedFormat.component';
+export * from './src/components/pdfViewer.component';
export const VIEWER_DIRECTIVES: any[] = [
ViewerComponent,
ImgViewerComponent,
MediaPlayerComponent,
NotSupportedFormat,
- PdfViewerComponent
+ PdfViewerComponent,
+ ExtensionViewerDirective
];
export const VIEWER_PROVIDERS: any[] = [
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.css b/ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.html b/ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.html
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.html
rename to ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.html
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.spec.ts
similarity index 95%
rename from ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.spec.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.spec.ts
index f7fc9c562f..cd0911947a 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.spec.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.spec.ts
@@ -27,7 +27,7 @@ import {
describe('Test ng2-alfresco-viewer Img viewer component ', () => {
- let component: any;
+ let component: ImgViewerComponent;
let fixture: ComponentFixture;
let debug: DebugElement;
let element: HTMLElement;
@@ -57,14 +57,14 @@ describe('Test ng2-alfresco-viewer Img viewer component ', () => {
it('If no url is passed should thrown an error', () => {
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).toThrow(new Error('Attribute urlFile is required'));
});
it('If url is passed should not thrown an error', () => {
component.urlFile = 'fake-url';
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).not.toThrow(new Error('Attribute urlFile is required'));
});
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.ts
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/imgViewer.component.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/imgViewer.component.ts
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.css b/ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.html b/ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.html
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.html
rename to ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.html
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.spec.ts
similarity index 93%
rename from ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.spec.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.spec.ts
index 7f9600dda9..8093cb51d6 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.spec.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.spec.ts
@@ -27,7 +27,7 @@ import {
describe('Test ng2-alfresco-viewer Media player component ', () => {
- let component: any;
+ let component: MediaPlayerComponent;
let fixture: ComponentFixture;
let debug: DebugElement;
let element: HTMLElement;
@@ -57,21 +57,21 @@ describe('Test ng2-alfresco-viewer Media player component ', () => {
it('If no url is passed should thrown an error', () => {
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).toThrow(new Error('Attribute urlFile is required'));
});
it('If url is passed should not thrown an error', () => {
component.urlFile = 'fake-url';
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).not.toThrow(new Error('Attribute urlFile is required'));
});
it('If url is passed should not thrown an error', () => {
component.urlFile = 'fake-url';
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).not.toThrow(new Error('Attribute urlFile is required'));
});
});
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.ts
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/mediaPlayer.component.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/mediaPlayer.component.ts
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.css b/ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.html b/ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.html
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.html
rename to ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.html
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.spec.ts
similarity index 98%
rename from ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.spec.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.spec.ts
index 4e87868bd8..37da1e7c2d 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.spec.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.spec.ts
@@ -27,7 +27,7 @@ import {
describe('Test ng2-alfresco-viewer Not Supported Format View component', () => {
- let component: any;
+ let component: NotSupportedFormat;
let fixture: ComponentFixture;
let debug: DebugElement;
let element: HTMLElement;
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.ts
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/notSupportedFormat.component.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/notSupportedFormat.component.ts
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.css b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.html b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.html
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.html
rename to ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.html
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.spec.ts
similarity index 91%
rename from ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.spec.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.spec.ts
index c99b5e9532..e81ee5b622 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.spec.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.spec.ts
@@ -29,7 +29,7 @@ import {
describe('Test ng2-alfresco-viewer PdfViewer component', () => {
- let component: any;
+ let component: PdfViewerComponent;
let fixture: ComponentFixture;
let debug: DebugElement;
let element: HTMLElement;
@@ -70,7 +70,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
fixture.detectChanges();
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).toThrow();
});
@@ -109,11 +109,11 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
describe('User interaction', () => {
beforeEach(() => {
- component.inputPage(1);
+ component.inputPage('1');
});
it('Total number of pages should be loaded', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.totalPages).toEqual(6);
done();
@@ -121,7 +121,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
}, 5000);
it('right arrow should move to the next page', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
EventMock.keyDown(39);
@@ -134,7 +134,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
it('nextPage should move to the next page', (done) => {
let nextPageButton: any = element.querySelector('#viewer-next-page-button');
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
nextPageButton.click();
@@ -145,7 +145,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
});
it('left arrow should move to the previous page', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
EventMock.keyDown(39);
@@ -161,7 +161,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
let previousPageButton: any = element.querySelector('#viewer-previous-page-button');
let nextPageButton: any = element.querySelector('#viewer-next-page-button');
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
nextPageButton.click();
@@ -174,7 +174,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
});
it('previous page should not move to the previous page if is page 1', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
component.previousPage();
@@ -185,7 +185,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
});
it('Input page should move to the inserted page', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
component.inputPage('2');
@@ -205,7 +205,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
it('In should increment the scale value', (done) => {
let zoomInButton: any = element.querySelector('#viewer-zoom-in-button');
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
let zoomBefore = component.currentScale;
zoomInButton.click();
expect(component.currentScaleMode).toBe('auto');
@@ -218,7 +218,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
it('Out should decrement the scale value', (done) => {
let zoomOutButton: any = element.querySelector('#viewer-zoom-out-button');
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
let zoomBefore = component.currentScale;
zoomOutButton.click();
expect(component.currentScaleMode).toBe('auto');
@@ -231,7 +231,7 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
it('fit-in button should toggle page-fit and auto scale mode', (done) => {
let fitPage: any = element.querySelector('#viewer-scale-page-button');
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
expect(component.currentScaleMode).toBe('auto');
fitPage.click();
expect(component.currentScaleMode).toBe('page-fit');
@@ -245,20 +245,19 @@ describe('Test ng2-alfresco-viewer PdfViewer component', () => {
describe('Resize interaction', () => {
it('resize event should trigger setScaleUpdatePages', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
spyOn(component, 'onResize');
- component.documentContainer = element.querySelector('#viewer-pdf-container');
EventMock.resizeMobileView();
expect(component.onResize).toHaveBeenCalled();
done();
- }, 5000);
+ });
});
});
describe('scroll interaction', () => {
it('scroll page should return the current page', (done) => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(component.displayPage).toBe(1);
component.inputPage('2');
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.ts
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/pdfViewer.component.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/pdfViewer.component.ts
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/pdfViewerHost.component.css b/ng2-components/ng2-alfresco-viewer/src/components/pdfViewerHost.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/pdfViewerHost.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/pdfViewerHost.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.css b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.css
similarity index 100%
rename from ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.css
rename to ng2-components/ng2-alfresco-viewer/src/components/viewer.component.css
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.html b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html
similarity index 65%
rename from ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.html
rename to ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html
index 09bf019383..af5dd646cb 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.html
+++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html
@@ -31,19 +31,10 @@
-
-
-
+
-
-
-
-
-
-
-
@@ -60,22 +51,19 @@
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts
similarity index 89%
rename from ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.spec.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts
index e610f0b329..0f37f7ff16 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.spec.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts
@@ -35,7 +35,7 @@ declare let jasmine: any;
describe('Test ng2-alfresco-viewer ViewerComponent', () => {
- let component: any;
+ let component: ViewerComponent;
let fixture: ComponentFixture;
let debug: DebugElement;
let element: HTMLElement;
@@ -99,7 +99,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
});
it('Name File should be present if is overlay mode ', () => {
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('#viewer-name-file').innerHTML).toEqual('fake-test-file.pdf');
});
@@ -161,7 +161,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = undefined;
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).toThrow();
});
@@ -171,7 +171,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = undefined;
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).not.toThrow();
});
@@ -180,7 +180,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.fileNodeId = undefined;
expect(() => {
- component.ngOnChanges();
+ component.ngOnChanges(null);
}).not.toThrow();
});
@@ -200,7 +200,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
it('if extension file is a pdf the pdf viewer should be loaded', (done) => {
component.urlFile = 'base/src/assets/fake-test-file.pdf';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('pdf-viewer')).not.toBeNull();
done();
@@ -210,7 +210,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
it('if extension file is a image the img viewer should be loaded', (done) => {
component.urlFile = 'fake-url-file.png';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('#viewer-image')).not.toBeNull();
done();
@@ -220,7 +220,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
it('if extension file is a video the the media player should be loaded', (done) => {
component.urlFile = 'fake-url-file.mp4';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('media-player')).not.toBeNull();
done();
@@ -230,7 +230,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
it('if extension file is a not supported the not supported div should be loaded', (done) => {
component.urlFile = 'fake-url-file.unsupported';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('not-supported-format')).not.toBeNull();
done();
@@ -243,7 +243,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content';
component.mimeType = 'application/pdf';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('pdf-viewer')).not.toBeNull();
done();
@@ -255,7 +255,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content.bin';
component.mimeType = 'application/pdf';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('pdf-viewer')).not.toBeNull();
done();
@@ -266,7 +266,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content';
component.mimeType = 'image/png';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('#viewer-image')).not.toBeNull();
done();
@@ -277,7 +277,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content.bin';
component.mimeType = 'image/png';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('#viewer-image')).not.toBeNull();
done();
@@ -288,7 +288,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content.bin';
component.mimeType = 'video/mp4';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('media-player')).not.toBeNull();
done();
@@ -299,7 +299,7 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content';
component.mimeType = 'video/mp4';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('media-player')).not.toBeNull();
done();
@@ -310,11 +310,25 @@ describe('Test ng2-alfresco-viewer ViewerComponent', () => {
component.urlFile = 'content';
component.mimeType = 'video/avi';
- component.ngOnChanges().then(() => {
+ component.ngOnChanges(null).then(() => {
fixture.detectChanges();
expect(element.querySelector('media-player')).toBeNull();
done();
});
});
});
+
+ describe('Events', () => {
+ it('if extension change exextensionChange event should be fired ', (done) => {
+
+ component.extensionChange.subscribe((fileExtension) => {
+ expect(fileExtension).toEqual('png');
+ done();
+ });
+
+ component.urlFile = 'fake-url-file.png';
+
+ component.ngOnChanges(null);
+ });
+ });
});
diff --git a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts
similarity index 87%
rename from ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.ts
rename to ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts
index c6175b8e2b..d3e6309de6 100644
--- a/ng2-components/ng2-alfresco-viewer/src/componets/viewer.component.ts
+++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-import { Component, ElementRef, Input, Output, HostListener, EventEmitter, Inject } from '@angular/core';
+import { Component, ElementRef, Input, Output, HostListener, EventEmitter, Inject, TemplateRef } from '@angular/core';
import { DOCUMENT } from '@angular/platform-browser';
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
import { AlfrescoApiService, LogService } from 'ng2-alfresco-core';
@@ -46,6 +46,13 @@ export class ViewerComponent {
@Output()
showViewerChange: EventEmitter = new EventEmitter();
+ @Output()
+ extensionChange: EventEmitter = new EventEmitter();
+
+ extensionTemplates: { template: TemplateRef, isVisible: boolean }[] = [];
+
+ externalExtensions: string[] = [];
+
urlFileContent: string;
otherMenu: any;
displayName: string;
@@ -72,6 +79,7 @@ export class ViewerComponent {
let filenameFromUrl = this.getFilenameFromUrl(this.urlFile);
this.displayName = filenameFromUrl ? filenameFromUrl : '';
this.extension = this.getFileExtension(filenameFromUrl);
+ this.extensionChange.emit(this.extension);
this.urlFileContent = this.urlFile;
resolve();
} else if (this.fileNodeId) {
@@ -79,6 +87,8 @@ export class ViewerComponent {
this.mimeType = data.content.mimeType;
this.displayName = data.name;
this.urlFileContent = alfrescoApi.content.getContentUrl(data.id);
+ this.extension = this.getFileExtension(data.name);
+ this.extensionChange.emit(this.extension);
this.loaded = true;
resolve();
}, function (error) {
@@ -103,6 +113,9 @@ export class ViewerComponent {
this.showViewerChange.emit(this.showViewer);
}
+ /**
+ * cleanup before the close
+ */
cleanup() {
this.urlFileContent = '';
this.displayName = '';
@@ -216,7 +229,25 @@ export class ViewerComponent {
* @returns {boolean}
*/
supportedExtension() {
- return this.isImage() || this.isPdf() || this.isMedia();
+ return this.isImage() || this.isPdf() || this.isMedia() || this.isExternalSupportedExtension();
+ }
+
+ /**
+ * Check if the file is compatible with one of the extension
+ *
+ * @returns {boolean}
+ */
+ isExternalSupportedExtension() {
+ let externalType: string;
+
+ if (this.externalExtensions && (this.externalExtensions instanceof Array)) {
+ externalType = this.externalExtensions.find((externalExtension) => {
+ return externalExtension.toLowerCase() === this.extension;
+
+ });
+ }
+
+ return !!externalType;
}
/**
@@ -272,8 +303,8 @@ export class ViewerComponent {
* @param {string} nodeName
* @returns {HTMLElement}
*/
- private closestElement(elelemnt: HTMLElement, nodeName: string) {
- let parent = elelemnt.parentElement;
+ private closestElement(element: HTMLElement, nodeName: string) {
+ let parent = element.parentElement;
if (parent) {
if (parent.nodeName.toLowerCase() === nodeName) {
return parent;
diff --git a/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.spec.ts b/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.spec.ts
new file mode 100644
index 0000000000..16435e3e6d
--- /dev/null
+++ b/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.spec.ts
@@ -0,0 +1,62 @@
+/*!
+ * @license
+ * Copyright 2016 Alfresco Software, 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.
+ */
+
+import { ElementRef } from '@angular/core';
+import { CoreModule } from 'ng2-alfresco-core';
+import { ExtensionViewerDirective } from './extension-viewer.directive';
+import { ViewerComponent } from '../components/viewer.component';
+import { getTestBed, TestBed, async } from '@angular/core/testing';
+import { Injector } from '@angular/core';
+
+export class MockElementRef extends ElementRef {
+
+}
+
+describe('ExtensionViewerComponent', () => {
+ let injector: Injector;
+ let extensionViewerDirective: ExtensionViewerDirective;
+ let viewerComponent: ViewerComponent;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [CoreModule.forRoot()],
+ providers: [
+ ExtensionViewerDirective,
+ {provide: ElementRef, useClass: MockElementRef},
+ ViewerComponent
+ ]
+ });
+ injector = getTestBed();
+ extensionViewerDirective = injector.get(ExtensionViewerDirective);
+ viewerComponent = injector.get(ViewerComponent);
+ extensionViewerDirective.templateModel = {template: '', isVisible: false};
+ }));
+
+ it('is defined', () => {
+ expect(extensionViewerDirective).toBeDefined();
+ });
+
+ it('if the file in the viewer has an extension handled by this extension isVisible should be true', () => {
+ extensionViewerDirective.supportedExtensions = ['xls', 'sts'];
+ expect(extensionViewerDirective.isVisible('xls')).toBeTruthy();
+ });
+
+ it('if the file in the viewer not has an extension handled by this extension isVisible should be false', () => {
+ extensionViewerDirective.supportedExtensions = ['xls', 'sts'];
+ expect(extensionViewerDirective.isVisible('png')).not.toBeTruthy();
+ });
+});
diff --git a/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.ts b/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.ts
new file mode 100644
index 0000000000..b312fa7061
--- /dev/null
+++ b/ng2-components/ng2-alfresco-viewer/src/directives/extension-viewer.directive.ts
@@ -0,0 +1,83 @@
+/*!
+ * @license
+ * Copyright 2016 Alfresco Software, 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.
+ */
+
+import {
+ Directive,
+ ContentChild,
+ TemplateRef,
+ AfterContentInit,
+ Input
+} from '@angular/core';
+import { ViewerComponent } from '../components/viewer.component';
+
+@Directive({
+ selector: 'extension-viewer'
+})
+export class ExtensionViewerDirective implements AfterContentInit {
+
+ @ContentChild(TemplateRef)
+ template: any;
+
+ @Input()
+ urlFileContent: string;
+
+ @Input()
+ extension: string;
+
+ @Input()
+ supportedExtensions: string[];
+
+ templateModel: any;
+
+ constructor(private viewerComponent: ViewerComponent) {
+ }
+
+ ngAfterContentInit() {
+ this.templateModel = {template: this.template, isVisible: false};
+
+ this.viewerComponent.extensionTemplates.push(this.templateModel);
+
+ this.viewerComponent.extensionChange.subscribe((fileExtension) => {
+ this.templateModel.isVisible = this.isVisible(fileExtension);
+ });
+
+ if (this.supportedExtensions instanceof Array) {
+ this.supportedExtensions.forEach((extension) => {
+ this.viewerComponent.externalExtensions.push(extension);
+ });
+ }
+ }
+
+ /**
+ * check if the current extension in the viewer is compatible with this extension checking against supportedExtensions
+ *
+ * @returns {boolean}
+ */
+ isVisible(fileExtension) {
+ let supportedExtension: string;
+
+ if (this.supportedExtensions && (this.supportedExtensions instanceof Array)) {
+ supportedExtension = this.supportedExtensions.find((extension) => {
+ return extension.toLowerCase() === fileExtension;
+
+ });
+ }
+
+ return !!supportedExtension;
+ }
+
+}