mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
Page Number doesn't change when user scroll the document #319
This commit is contained in:
@@ -28,15 +28,33 @@ export class PDFViewermock {
|
|||||||
[{
|
[{
|
||||||
width: 793,
|
width: 793,
|
||||||
scale: 1,
|
scale: 1,
|
||||||
update: this.update
|
update: this.update,
|
||||||
|
div: {
|
||||||
|
offsetTop: 400
|
||||||
|
},
|
||||||
|
viewport: {
|
||||||
|
height: 400
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
width: 793,
|
width: 793,
|
||||||
scale: 1,
|
scale: 1,
|
||||||
update: this.update
|
update: this.update,
|
||||||
|
div: {
|
||||||
|
offsetTop: 800
|
||||||
|
},
|
||||||
|
viewport: {
|
||||||
|
height: 400
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
width: 793,
|
width: 793,
|
||||||
scale: 1,
|
scale: 1,
|
||||||
update: this.update
|
update: this.update,
|
||||||
|
div: {
|
||||||
|
offsetTop: 1200
|
||||||
|
},
|
||||||
|
viewport: {
|
||||||
|
height: 400
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
_currentPageNumber: number = 0;
|
_currentPageNumber: number = 0;
|
||||||
|
@@ -346,8 +346,7 @@ describe('PdfViewer', () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Rezize interaction', () => {
|
describe('Resize interaction', () => {
|
||||||
|
|
||||||
it('resize event should trigger setScaleUpdatePages', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
|
it('resize event should trigger setScaleUpdatePages', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
|
||||||
return tcb
|
return tcb
|
||||||
.createAsync(PdfViewerComponent)
|
.createAsync(PdfViewerComponent)
|
||||||
@@ -370,4 +369,33 @@ describe('PdfViewer', () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('scroll interaction', () => {
|
||||||
|
it('scroll page should return the current page', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
|
||||||
|
return tcb
|
||||||
|
.createAsync(PdfViewerComponent)
|
||||||
|
.then((fixture) => {
|
||||||
|
let component = fixture.componentInstance;
|
||||||
|
|
||||||
|
spyOn(component, 'getPDFJS').and.returnValue(new PDFJSmock());
|
||||||
|
spyOn(component, 'initPDFViewer').and.callFake(() => {
|
||||||
|
component.pdfViewer = new PDFViewermock();
|
||||||
|
});
|
||||||
|
|
||||||
|
component.urlFile = 'fake-url-file';
|
||||||
|
|
||||||
|
component.ngOnChanges().then(() => {
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(component.displayPage).toBe(1);
|
||||||
|
component.inputPage('4');
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(component.displayPage).toBe(4);
|
||||||
|
component.watchScroll({scrollTop: 10000});
|
||||||
|
expect(component.displayPage).toBe(4);
|
||||||
|
}).catch((error) => {
|
||||||
|
expect(error).toBeUndefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@@ -91,6 +91,10 @@ export class PdfViewerComponent {
|
|||||||
let documentContainer = document.getElementById('viewer-pdf-container');
|
let documentContainer = document.getElementById('viewer-pdf-container');
|
||||||
let viewer: any = document.getElementById('viewer-viewerPdf');
|
let viewer: any = document.getElementById('viewer-viewerPdf');
|
||||||
|
|
||||||
|
window.document.addEventListener('scroll', (event) => {
|
||||||
|
this.watchScroll(event.target);
|
||||||
|
}, true);
|
||||||
|
|
||||||
this.pdfViewer = new PDFJS.PDFViewer({
|
this.pdfViewer = new PDFJS.PDFViewer({
|
||||||
container: documentContainer,
|
container: documentContainer,
|
||||||
viewer: viewer
|
viewer: viewer
|
||||||
@@ -284,6 +288,50 @@ export class PdfViewerComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Litener Scroll Event
|
||||||
|
*
|
||||||
|
* @param {any} target
|
||||||
|
*/
|
||||||
|
watchScroll(target) {
|
||||||
|
let outputPage = this.getVisibleElement(target);
|
||||||
|
if (outputPage) {
|
||||||
|
this.page = outputPage.id;
|
||||||
|
this.displayPage = this.page;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find out what elements are visible within a scroll pane
|
||||||
|
*
|
||||||
|
* @param {any} target
|
||||||
|
*
|
||||||
|
* @returns {Object} page
|
||||||
|
*/
|
||||||
|
getVisibleElement(target) {
|
||||||
|
return this.pdfViewer._pages.find((page) => {
|
||||||
|
return this.isOnScreen(page, target);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check if a page is visible
|
||||||
|
*
|
||||||
|
* @param {any} page
|
||||||
|
* @param {any} target
|
||||||
|
*
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
isOnScreen(page: any, target: any) {
|
||||||
|
let viewport: any = {};
|
||||||
|
viewport.top = target.scrollTop;
|
||||||
|
viewport.bottom = viewport.top + target.scrollHeight;
|
||||||
|
let bounds: any = {};
|
||||||
|
bounds.top = page.div.offsetTop;
|
||||||
|
bounds.bottom = bounds.top + page.viewport.height;
|
||||||
|
return ((bounds.top <= viewport.bottom) && (bounds.bottom >= viewport.top));
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Litener Keyboard Event
|
* Litener Keyboard Event
|
||||||
* @param {KeyboardEvent} event
|
* @param {KeyboardEvent} event
|
||||||
|
Reference in New Issue
Block a user