diff --git a/projects/player/src/app/components/layout/layout.component.css b/projects/player/src/app/components/layout/layout.component.css index aa11682c19b2bf1704bf7699e4c4636e903ecf6b..85bbc17ffd5e8c533cc813521a07c997462edb15 100644 --- a/projects/player/src/app/components/layout/layout.component.css +++ b/projects/player/src/app/components/layout/layout.component.css @@ -7,17 +7,14 @@ } .page-container{ - overflow: scroll; - margin-left: 1vw; - margin-top: 1vh; + flex: 1 1 100%; + overflow: auto; } .layout-container{ - max-height: 100vh; + margin: auto; } -.tab-page-container{ - overflow: hidden; - margin-left: 1vw; - margin-top: 1vh; +.layout-flex-container{ + height: 100vh; } diff --git a/projects/player/src/app/components/layout/layout.component.html b/projects/player/src/app/components/layout/layout.component.html index 08f0d74c0de4c984eb2452003a5e9764e2069f9d..6ac2ab4eb6a285647e5b0562b469bb02d804a40f 100644 --- a/projects/player/src/app/components/layout/layout.component.html +++ b/projects/player/src/app/components/layout/layout.component.html @@ -1,21 +1,28 @@ -<div class="layout-container" #layoutContainer [fxLayout]="layoutAlignment"> - <ng-container *ngTemplateOutlet="alwaysVisiblePagePosition === 'top' || alwaysVisiblePagePosition === 'left' ? - alwaysVisiblePageView : - scrollPagesView"></ng-container> - <ng-container *ngTemplateOutlet="alwaysVisiblePagePosition === 'bottom' || alwaysVisiblePagePosition === 'right' ? - alwaysVisiblePageView : - scrollPagesView"></ng-container> +<div class="layout-container" [style.max-width.px]="layoutWidth"> + <div class="layout-flex-container" + [fxLayout]="layoutAlignment"> + <ng-container *ngTemplateOutlet="alwaysVisiblePagePosition === 'top' || alwaysVisiblePagePosition === 'left' ? + alwaysVisiblePageView : + scrollPagesView"></ng-container> + <ng-container *ngTemplateOutlet="alwaysVisiblePagePosition === 'bottom' || alwaysVisiblePagePosition === 'right' ? + alwaysVisiblePageView : + scrollPagesView"></ng-container> + </div> </div> <ng-template #alwaysVisiblePageView> <div *ngIf="alwaysVisiblePage" + #alwaysVisiblePageContainer class="page-container" - [fxFlex]="pageExpansion"> - <div appHideFirstChild [hideFirstChild]="hidePageLabels"> - <div class="mat-tab-label">{{'alwaysVisiblePage' | translate}}</div> + [style.max-width.px]="layoutAlignment === 'row' ? alwaysVisiblePageWidth : layoutWidth"> + <div appHideFirstChild + [hideFirstChild]="hidePageLabels" + [style.max-width.px]="alwaysVisiblePage.width" + [style.margin.px]="alwaysVisiblePage.margin"> + <div class="mat-tab-label">{{'alwaysVisiblePage' | translate}}</div> <app-page [parentArrayIndex]="alwaysVisibleUnitPageIndex" [parentForm]="parentForm" - [pagesContainer]="layoutContainer" + [pagesContainer]="alwaysVisiblePageContainer" [page]="alwaysVisiblePage"> </app-page> </div> @@ -31,45 +38,52 @@ </ng-template> <ng-template #scrollPagesSeparatedView> + <div #pagesSeparatedContainer + class="page-container" + [style.max-width.px]="layoutAlignment === 'row' ? scrollPageWidth : layoutWidth"> <mat-tab-group appHideFirstChild [hideFirstChild]="hidePageLabels" - class="tab-page-container" - [fxFlex]="pageExpansion" mat-align-tabs="start" [(selectedIndex)]="selectedIndex" (selectedIndexChange)="onSelectedIndexChange($event)"> <ng-container *ngFor="let page of pages; let i = index"> <mat-tab *ngIf="!page.alwaysVisible" label="{{'pageIndication' | translate: {index: playerPageIndices[i] + 1} }}"> - <app-page [parentArrayIndex]="i" - [parentForm]="parentForm" - [pagesContainer]="layoutContainer" - [page]="page"> - </app-page> + <div [style.margin.px]="page.margin" [style.max-width.px]="page.width"> + <app-page [parentArrayIndex]="i" + [parentForm]="parentForm" + [pagesContainer]="pagesSeparatedContainer" + [page]="page"> + </app-page> + </div> </mat-tab> </ng-container> </mat-tab-group> + </div> </ng-template> <ng-template #scrollPagesScrolledView> - <div class="page-container" - [ngClass]="{'concat-scroll-snap' : playerConfig.pagingMode === 'concat-scroll-snap'}" - [fxFlex]="pageExpansion"> + <div #pagesScrolledContainer + class="page-container" + [class.concat-scroll-snap]="playerConfig.pagingMode === 'concat-scroll-snap'" + [style.max-width.px]="layoutAlignment === 'row' ? scrollPageWidth : layoutWidth"> <div fxLayout="column"> <ng-container *ngFor="let page of pages; let i = index"> <div *ngIf="!page.alwaysVisible" - [ngClass]="{'concat-scroll-snap-align' : playerConfig.pagingMode === 'concat-scroll-snap'}" + [class.concat-scroll-snap-align]="playerConfig.pagingMode === 'concat-scroll-snap'" appHideFirstChild [hideFirstChild]="hidePageLabels" appScrollIndex [selectedIndex]="selectedIndex" - [index]="playerPageIndices[i]"> + [index]="playerPageIndices[i]" + [style.max-width.px]="page.width" + [style.margin.px]="page.margin"> <div class="mat-tab-label"> {{'pageIndication' | translate: {index: playerPageIndices[i] + 1} }} </div> <app-page [parentArrayIndex]="i" [parentForm]="parentForm" - [pagesContainer]="layoutContainer" + [pagesContainer]="pagesScrolledContainer" [page]="page" (selectedIndexChange)="onSelectedIndexChange($event)"> </app-page> diff --git a/projects/player/src/app/components/layout/layout.component.ts b/projects/player/src/app/components/layout/layout.component.ts index 6e9415c1e96053168e5d602dd2abe81c59b29e21..833c1e9bee19f9955d2789b3c2e1629106fe5a49 100644 --- a/projects/player/src/app/components/layout/layout.component.ts +++ b/projects/player/src/app/components/layout/layout.component.ts @@ -31,6 +31,9 @@ export class LayoutComponent implements OnInit { layoutAlignment!: 'row' | 'column'; scrollPageMode!: 'separate' | 'concat-scroll' | 'concat-scroll-snap'; hidePageLabels!: boolean; + layoutWidth!: number; + alwaysVisiblePageWidth!: number; + scrollPageWidth!: number; constructor(private translateService: TranslateService) { } @@ -64,8 +67,21 @@ export class LayoutComponent implements OnInit { this.pageExpansion = !this.alwaysVisiblePage || !this.hasScrollPages ? 100 : 50; this.scrollPageMode = this.playerConfig.pagingMode ? this.playerConfig.pagingMode : 'separate'; this.hidePageLabels = false; + + this.alwaysVisiblePageWidth = this.getAbsolutePageWidth(this.alwaysVisiblePage); + this.scrollPageWidth = this.calculateScrollPagesWidth(); + + this.layoutWidth = this.layoutAlignment === 'row' ? + this.alwaysVisiblePageWidth + this.scrollPageWidth : Math.max(this.alwaysVisiblePageWidth, this.scrollPageWidth); } + private calculateScrollPagesWidth(): number { + return this.hasScrollPages ? + Math.max(...this.scrollPages.map((page: UnitPage): number => this.getAbsolutePageWidth(page))) : 0; + } + + private getAbsolutePageWidth = (page: UnitPage | undefined): number => ((page) ? 2 * page.margin + page.width : 0); + onSelectedIndexChange(selectedIndex: number): void { this.selectedIndexChange.emit(selectedIndex); } diff --git a/projects/player/src/app/components/page/page.component.html b/projects/player/src/app/components/page/page.component.html index 730168a2d96d349c133f342fc9922345e03987c6..23c4f7a016109851febcbe7c1c2e6a369042eae0 100644 --- a/projects/player/src/app/components/page/page.component.html +++ b/projects/player/src/app/components/page/page.component.html @@ -9,10 +9,11 @@ [section]="section" [ngStyle]="{ position: 'relative', - display: 'inline-block', + display: 'block', + overflow: 'auto', + width: '100%', 'background-color': section.backgroundColor, - 'height.px': section.height, - 'width.px': section.width }"> + 'min-height.px': section.height}"> </app-section> <div appIntersectionDetection detectionType="bottom" diff --git a/projects/player/src/app/components/section/section.component.html b/projects/player/src/app/components/section/section.component.html index f9760861d84d899612fe09d5208ea539045bdc22..7079685564177d240dc676b22147ccedeb3eed7e 100644 --- a/projects/player/src/app/components/section/section.component.html +++ b/projects/player/src/app/components/section/section.component.html @@ -19,7 +19,7 @@ <div [style.display]="'grid'" [style.grid-template-columns]="section.gridColumnSizes" [style.grid-template-rows]="section.gridRowSizes" - [style.height.%]="100"> + [style.min-height.px]="section.height"> <div *ngFor="let element of section.elements; let i = index" [style.min-width.px]="element.width" [style.min-height.px]="element.height" diff --git a/projects/player/src/index.html b/projects/player/src/index.html index 5c1c3fbe6b22c889d5a3de54edc995e709122383..00d1f29322eecd1acd3b56040b666084733e76c6 100644 --- a/projects/player/src/index.html +++ b/projects/player/src/index.html @@ -23,7 +23,9 @@ <fieldset> <h4>Load Unit Definition</h4> <input type='file' id='fileInput' accept='.json,application/json'> - <input type='button' value='Load' onclick='loadUnitDefinition();'> + <input type='button' value='Load separate' onclick='loadUnitDefinition("separate");'> + <input type='button' value='Load snap' onclick='loadUnitDefinition("concat-scroll-snap");'> + <input type='button' value='Load scroll' onclick='loadUnitDefinition("concat-scroll");'> </fieldset> </form> <button onclick='denyNavigation();'>Deny Navigation</button> @@ -50,7 +52,7 @@ }, '*'); } - loadUnitDefinition = () => { + loadUnitDefinition = (pagingMode) => { const setStartData = (e) => { window.postMessage({ type: 'vopStartCommand', @@ -61,7 +63,7 @@ }, playerConfig: { stateReportPolicy: 'eager', - pagingMode: 'separate', //concat-scroll, separate, concat-scroll-snap + pagingMode: pagingMode, //concat-scroll, separate, concat-scroll-snap logPolicy: 'rich', startPage: 'page0', enabledNavigationTargets: ['next'] diff --git a/projects/player/src/styles.css b/projects/player/src/styles.css index 910c5c6ece693f2a1ef44faed3bb205271f617ae..d9d9d6021740ad854b181f0aed1601c76c33c607 100644 --- a/projects/player/src/styles.css +++ b/projects/player/src/styles.css @@ -1,4 +1,4 @@ body { overflow: hidden; margin: 0; -}/* You can add global styles to this file, and also import other style files */ +}