diff --git a/projects/editor/src/app/app.component.ts b/projects/editor/src/app/app.component.ts index 3f33e5ef47cea07d2144fe9571bb739c86428250..ab2c3121cd85b1ad4ff136b82625311514f31fbf 100644 --- a/projects/editor/src/app/app.component.ts +++ b/projects/editor/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; -import { VeronaAPIService } from './verona-api.service'; -import { UnitService } from './unit.service'; +import { VeronaAPIService } from './services/verona-api.service'; +import { UnitService } from './services/unit.service'; @Component({ selector: 'editor-aspect', diff --git a/projects/editor/src/app/app.module.ts b/projects/editor/src/app/app.module.ts index 4674d2dd42103e27363f3b4993e6be533da511e7..52b3aa13c31fda3492b0c32c4d90caa1e4b69e70 100644 --- a/projects/editor/src/app/app.module.ts +++ b/projects/editor/src/app/app.module.ts @@ -12,31 +12,29 @@ import { MatMenuModule } from '@angular/material/menu'; import { MatSliderModule } from '@angular/material/slider'; import { AppComponent } from './app.component'; -import { ToolbarComponent } from './toolbar/toolbar.component'; -import { UiElementToolboxComponent } from './unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component'; -import { UnitViewComponent } from './unit-view/unit-view.component'; -import { PageViewComponent } from './unit-view/page-view/page-view.component'; -import { CanvasComponent } from './unit-view/page-view/canvas/canvas.component'; -import { StaticCanvasOverlayComponent } from './unit-view/page-view/canvas/static-canvas-overlay.component'; -import { DynamicCanvasOverlayComponent } from './unit-view/page-view/canvas/dynamic-canvas-overlay.component'; +import { ToolbarComponent } from './components/toolbar/toolbar.component'; +import { UiElementToolboxComponent } from './components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component'; +import { UnitViewComponent } from './components/unit-view/unit-view.component'; +import { PageViewComponent } from './components/unit-view/page-view/page-view.component'; +import { CanvasComponent } from './components/unit-view/page-view/canvas/canvas.component'; +import { StaticCanvasOverlayComponent } from './components/unit-view/page-view/canvas/static-canvas-overlay.component'; +import { DynamicCanvasOverlayComponent } from './components/unit-view/page-view/canvas/dynamic-canvas-overlay.component'; import { SharedModule } from '../../../common/shared.module'; -import { - ConfirmationDialog, - TextEditDialog, - MultilineTextEditDialog, - RichTextEditDialog, - LikertColumnEditDialog, - LikertRowEditDialog, - PlayerEditDialog -} from './dialog.service'; import { EditorTranslateLoader } from './editor-translate-loader'; -import { ElementPropertiesComponent } from './unit-view/page-view/properties-panel/element-properties.component'; -import { SectionMenuComponent } from './unit-view/page-view/canvas/section-menu.component'; -import { SectionStaticComponent } from './unit-view/page-view/canvas/section-static.component'; -import { SectionDynamicComponent } from './unit-view/page-view/canvas/section-dynamic.component'; +import { ElementPropertiesComponent } from './components/unit-view/page-view/properties-panel/element-properties.component'; +import { SectionMenuComponent } from './components/unit-view/page-view/canvas/section-menu.component'; +import { SectionStaticComponent } from './components/unit-view/page-view/canvas/section-static.component'; +import { SectionDynamicComponent } from './components/unit-view/page-view/canvas/section-dynamic.component'; import { RichTextEditorComponent } from './text-editor/rich-text-editor.component'; -import { ElementStylePropertiesComponent } from './unit-view/page-view/properties-panel/element-style-properties.component'; -import { ElementSizingPropertiesComponent } from './unit-view/page-view/properties-panel/element-sizing-properties.component'; +import { ElementStylePropertiesComponent } from './components/unit-view/page-view/properties-panel/element-style-properties.component'; +import { ElementSizingPropertiesComponent } from './components/unit-view/page-view/properties-panel/element-sizing-properties.component'; +import { ConfirmationDialogComponent } from './components/dialogs/confirmation-dialog.component'; +import { TextEditDialogComponent } from './components/dialogs/text-edit-dialog.component'; +import { TextEditMultilineDialogComponent } from './components/dialogs/text-edit-multiline-dialog.component'; +import { PlayerEditDialogComponent } from './components/dialogs/player-edit-dialog.component'; +import { LikertColumnEditDialogComponent } from './components/dialogs/likert-column-edit-dialog.component'; +import { LikertRowEditDialogComponent } from './components/dialogs/likert-row-edit-dialog.component'; +import { RichTextEditDialogComponent } from './components/dialogs/rich-text-edit-dialog.component'; @NgModule({ declarations: [ @@ -48,20 +46,20 @@ import { ElementSizingPropertiesComponent } from './unit-view/page-view/properti CanvasComponent, StaticCanvasOverlayComponent, DynamicCanvasOverlayComponent, - ConfirmationDialog, - TextEditDialog, - MultilineTextEditDialog, - RichTextEditDialog, - LikertColumnEditDialog, - LikertRowEditDialog, - PlayerEditDialog, ElementPropertiesComponent, SectionMenuComponent, SectionStaticComponent, SectionDynamicComponent, RichTextEditorComponent, ElementStylePropertiesComponent, - ElementSizingPropertiesComponent + ElementSizingPropertiesComponent, + ConfirmationDialogComponent, + TextEditDialogComponent, + TextEditMultilineDialogComponent, + PlayerEditDialogComponent, + LikertColumnEditDialogComponent, + LikertRowEditDialogComponent, + RichTextEditDialogComponent ], imports: [ BrowserModule, diff --git a/projects/editor/src/app/components/dialogs/confirmation-dialog.component.ts b/projects/editor/src/app/components/dialogs/confirmation-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b0216b1df32d81c0ee612bac093a5f462e5bce0 --- /dev/null +++ b/projects/editor/src/app/components/dialogs/confirmation-dialog.component.ts @@ -0,0 +1,18 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; + +@Component({ + selector: 'app-confirmation-dialog', + template: ` + <mat-dialog-content> + {{data.text}} + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="true">{{'save' | translate }}</button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class ConfirmationDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } +} diff --git a/projects/editor/src/app/components/dialogs/likert-column-edit-dialog.component.ts b/projects/editor/src/app/components/dialogs/likert-column-edit-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b16ec0405c32df0bdb071ec81c3a628d5428e2d --- /dev/null +++ b/projects/editor/src/app/components/dialogs/likert-column-edit-dialog.component.ts @@ -0,0 +1,48 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { LikertColumn } from '../../../../../common/interfaces/UIElementInterfaces'; +import { FileService } from '../../../../../common/file.service'; + +@Component({ + selector: 'app-likert-column-edit-dialog', + template: ` + <mat-dialog-content fxLayout="column"> + <mat-form-field> + <mat-label>{{'text' | translate }}</mat-label> + <input #textInput matInput type="text" [value]="data.column.text"> + </mat-form-field> + <input #imageUpload type="file" hidden (click)="loadImage()"> + <button mat-raised-button (click)="imageUpload.click()">{{ 'loadImage' | translate }}</button> + <button mat-raised-button (click)="data.column.imgSrc = null">{{ 'removeImage' | translate }}</button> + <img [src]="data.column.imgSrc" + [style.object-fit]="'scale-down'" + [width]="200"> + <mat-form-field appearance="fill"> + <mat-label>{{'position' | translate }}</mat-label> + <mat-select [value]="data.column.position" + (selectionChange)="this.data.column.position = $event.value"> + <mat-option *ngFor="let option of ['above', 'below']" + [value]="option"> + {{ option | translate }} + </mat-option> + </mat-select> + </mat-form-field> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="{ + text: textInput.value, + imgSrc: data.column.imgSrc, + position: data.column.position }"> + {{'save' | translate }} + </button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class LikertColumnEditDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { column: LikertColumn }) { } + + async loadImage(): Promise<void> { + this.data.column.imgSrc = await FileService.loadImage(); + } +} diff --git a/projects/editor/src/app/components/dialogs/likert-row-edit-dialog.component.ts b/projects/editor/src/app/components/dialogs/likert-row-edit-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..8ce581e24a45b76ac04dff2dec986fe3fed0bca9 --- /dev/null +++ b/projects/editor/src/app/components/dialogs/likert-row-edit-dialog.component.ts @@ -0,0 +1,37 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { LikertElementRow } from '../../../../../common/models/compound-elements/likert-element-row'; +import { LikertColumn } from '../../../../../common/interfaces/UIElementInterfaces'; + +@Component({ + selector: 'app-likert-row-edit-dialog', + template: ` + <mat-dialog-content fxLayout="column"> + <mat-form-field> + <mat-label>{{'text' | translate }}</mat-label> + <input #textField matInput type="text" [value]="data.row.text"> + </mat-form-field> + <mat-form-field> + <mat-label>{{'id' | translate }}</mat-label> + <input #idField matInput type="text" [value]="data.row.id"> + </mat-form-field> + {{'preset' | translate }} + <mat-select #valueField [value]="data.row.value"> + <mat-option [value]="null">{{'propertiesPanel.undefined' | translate }}</mat-option> + <mat-option *ngFor="let column of data.columns; let i = index" [value]="i"> + {{column.text}} + </mat-option> + </mat-select> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button + [mat-dialog-close]="{ text: textField.value, id: idField.value, value: valueField.value }"> + {{'save' | translate }} + </button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class LikertRowEditDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { row: LikertElementRow, columns: LikertColumn[] }) { } +} diff --git a/projects/editor/src/app/components/dialogs/player-edit-dialog.component.ts b/projects/editor/src/app/components/dialogs/player-edit-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..a79fc68593d226cd0acf75f69c0cc4946d48780e --- /dev/null +++ b/projects/editor/src/app/components/dialogs/player-edit-dialog.component.ts @@ -0,0 +1,109 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { PlayerElement } from '../../../../../common/interfaces/UIElementInterfaces'; + +@Component({ + selector: 'app-player-edit-dialog', + template: ` + <mat-dialog-content fxLayout="row"> + <mat-tab-group> + <mat-tab label="{{ 'player.appearance' | translate }}"> + <div fxLayout="column"> + <mat-checkbox [checked]="newPlayerConfig.startControl || data.player.startControl" + (change)="newPlayerConfig.startControl = $event.checked"> + {{ 'player.startControl' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.pauseControl || data.player.pauseControl" + (change)="newPlayerConfig.pauseControl = $event.checked"> + {{ 'player.pauseControl' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.progressBar || data.player.progressBar" + (change)="newPlayerConfig.progressBar = $event.checked"> + {{ 'player.progressBar' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.interactiveProgressbar || data.player.interactiveProgressbar" + (change)="newPlayerConfig.interactiveProgressbar = $event.checked"> + {{ 'player.interactiveProgressbar' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.volumeControl || data.player.volumeControl" + (change)="newPlayerConfig.volumeControl = $event.checked"> + {{ 'player.volumeControl' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.showRestTime || data.player.showRestTime" + (change)="newPlayerConfig.showRestTime = $event.checked"> + {{ 'player.showRestTime' | translate }} + </mat-checkbox> + <mat-form-field appearance="fill"> + <mat-label>{{ 'player.hintLabel' | translate }}</mat-label> + <input matInput type="text" [value]="newPlayerConfig.hintLabel || data.player.hintLabel" + (input)="newPlayerConfig.hintLabel = $any($event.target).value"> + </mat-form-field> + <mat-form-field *ngIf="newPlayerConfig.hintLabel || data.player.hintLabel" + appearance="fill"> + <mat-label>{{ 'player.hintLabelDelay' | translate }}</mat-label> + <input matInput type="number" step="1000" min="0" + [ngModel]="newPlayerConfig.hintLabelDelay || data.player.hintLabelDelay" + (ngModelChange)="newPlayerConfig.hintLabelDelay = $event"> + </mat-form-field> + </div> + </mat-tab> + <mat-tab label="{{ 'player.behaviour' | translate }}"> + <div fxLayout="column"> + <mat-checkbox [checked]="newPlayerConfig.autostart || data.player.autostart" + (change)="newPlayerConfig.autostart = $event.checked"> + {{ 'player.autoStart' | translate }} + </mat-checkbox> + <mat-form-field *ngIf="newPlayerConfig.autostart || data.player.autostart" appearance="fill"> + <mat-label>{{ 'player.autoStartDelay' | translate }}</mat-label> + <input matInput type="number" step="1000" + [value]="newPlayerConfig.autostartDelay || data.player.autostartDelay" + (input)="newPlayerConfig.autostartDelay = $any($event.target).value"> + </mat-form-field> + <mat-checkbox [checked]="newPlayerConfig.loop || data.player.loop" + (change)="newPlayerConfig.loop = $event.checked"> + {{ 'player.loop' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.uninterruptible || data.player.uninterruptible" + (change)="newPlayerConfig.uninterruptible = $event.checked"> + {{ 'player.uninterruptible' | translate }} + </mat-checkbox> + <mat-checkbox [checked]="newPlayerConfig.hideOtherPages || data.player.hideOtherPages" + (change)="newPlayerConfig.hideOtherPages = $event.checked"> + {{ 'player.hideOtherPages' | translate }} + </mat-checkbox> + <mat-form-field appearance="fill"> + <mat-label>{{ 'player.activeAfterID' | translate }}</mat-label> + <input matInput type="text" [value]="newPlayerConfig.activeAfterID || data.player.activeAfterID" + (input)="newPlayerConfig.activeAfterID = $any($event.target).value"> + </mat-form-field> + <mat-form-field appearance="fill"> + <mat-label>{{ 'player.minRuns' | translate }}</mat-label> + <input matInput type="number" min="0" + [ngModel]="newPlayerConfig.minRuns || data.player.minRuns" + (ngModelChange)="newPlayerConfig.minRuns = $event"> + </mat-form-field> + <mat-form-field appearance="fill"> + <mat-label>{{ 'player.maxRuns' | translate }}</mat-label> + <input matInput type="number" min="0" + [ngModel]="newPlayerConfig.maxRuns || data.player.maxRuns" + (ngModelChange)="newPlayerConfig.maxRuns = $event"> + </mat-form-field> + <mat-checkbox [checked]="newPlayerConfig.showRestRuns || data.player.showRestRuns" + (change)="newPlayerConfig.showRestRuns = $event.checked"> + {{ 'player.showRestRuns' | translate }} + </mat-checkbox> + </div> + </mat-tab> + </mat-tab-group> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="newPlayerConfig">{{'save' | translate }}</button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class PlayerEditDialogComponent { + newPlayerConfig: PlayerElement = {} as PlayerElement; + constructor(@Inject(MAT_DIALOG_DATA)public data: { player: PlayerElement }) { + } +} diff --git a/projects/editor/src/app/components/dialogs/rich-text-edit-dialog.component.ts b/projects/editor/src/app/components/dialogs/rich-text-edit-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4abdf7a3e7d8c108471a669d26cdcdd36ab6de4b --- /dev/null +++ b/projects/editor/src/app/components/dialogs/rich-text-edit-dialog.component.ts @@ -0,0 +1,18 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; + +@Component({ + selector: 'app-rich-text-edit-dialog-tinymce', + template: ` + <mat-dialog-content> + <app-rich-text-editor [(text)]="data.text"></app-rich-text-editor> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="data.text">{{'save' | translate }}</button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class RichTextEditDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } +} diff --git a/projects/editor/src/app/components/dialogs/text-edit-dialog.component.ts b/projects/editor/src/app/components/dialogs/text-edit-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..33ff28e15c0752188dc9a44238d1ebf8bfe7d4b3 --- /dev/null +++ b/projects/editor/src/app/components/dialogs/text-edit-dialog.component.ts @@ -0,0 +1,21 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; + +@Component({ + selector: 'app-text-edit-dialog', + template: ` + <mat-dialog-content> + <mat-form-field> + <mat-label>{{'text' | translate }}</mat-label> + <input #inputElement matInput type="text" [value]="data.text"> + </mat-form-field> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="inputElement.value">{{'save' | translate }}</button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class TextEditDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } +} diff --git a/projects/editor/src/app/components/dialogs/text-edit-multiline-dialog.component.ts b/projects/editor/src/app/components/dialogs/text-edit-multiline-dialog.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e25d41cbdb8ee422feb9d14b4192a77d7e371651 --- /dev/null +++ b/projects/editor/src/app/components/dialogs/text-edit-multiline-dialog.component.ts @@ -0,0 +1,22 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; + +@Component({ + selector: 'app-multiline-text-edit-dialog', + template: ` + <mat-dialog-content> + <mat-form-field> + <mat-label>{{'text' | translate }}</mat-label> + <textarea #inputElement matInput type="text" [value]="data.text"> + </textarea> + </mat-form-field> + </mat-dialog-content> + <mat-dialog-actions> + <button mat-button [mat-dialog-close]="inputElement.value">{{'save' | translate }}</button> + <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> + </mat-dialog-actions> + ` +}) +export class TextEditMultilineDialogComponent { + constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } +} diff --git a/projects/editor/src/app/toolbar/toolbar.component.html b/projects/editor/src/app/components/toolbar/toolbar.component.html similarity index 100% rename from projects/editor/src/app/toolbar/toolbar.component.html rename to projects/editor/src/app/components/toolbar/toolbar.component.html diff --git a/projects/editor/src/app/toolbar/toolbar.component.ts b/projects/editor/src/app/components/toolbar/toolbar.component.ts similarity index 88% rename from projects/editor/src/app/toolbar/toolbar.component.ts rename to projects/editor/src/app/components/toolbar/toolbar.component.ts index 2200af4a0272dbb9b7335aa9ecbb9466b6a38d42..e9e91c3d413762336bc1c20cc4b0bd39e707f039 100644 --- a/projects/editor/src/app/toolbar/toolbar.component.ts +++ b/projects/editor/src/app/components/toolbar/toolbar.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { UnitService } from '../unit.service'; +import { UnitService } from '../../services/unit.service'; @Component({ selector: 'app-toolbar', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/canvas-element-overlay.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-overlay.ts similarity index 88% rename from projects/editor/src/app/unit-view/page-view/canvas/canvas-element-overlay.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-overlay.ts index 043c98e14a38c64c5a7801f873ebca62117cd9de..f3ec24219592efe81e5472380081ce7d39d01d6e 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/canvas-element-overlay.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-overlay.ts @@ -4,11 +4,11 @@ import { ViewChild, ViewContainerRef, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; import { Subject } from 'rxjs'; -import { UnitService } from '../../../unit.service'; -import * as ElementFactory from '../../../../../../common/util/element.factory'; -import { ElementComponent } from '../../../../../../common/element-component.directive'; -import { SelectionService } from '../../../selection.service'; -import { UIElement } from '../../../../../../common/models/uI-element'; +import { UnitService } from '../../../../services/unit.service'; +import * as ElementFactory from '../../../../../../../common/util/element.factory'; +import { ElementComponent } from '../../../../../../../common/element-component.directive'; +import { SelectionService } from '../../../../services/selection.service'; +import { UIElement } from '../../../../../../../common/models/uI-element'; @Directive() export abstract class CanvasElementOverlay implements OnInit, OnDestroy { diff --git a/projects/editor/src/app/unit-view/page-view/canvas/canvas.component.html b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html similarity index 100% rename from projects/editor/src/app/unit-view/page-view/canvas/canvas.component.html rename to projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html diff --git a/projects/editor/src/app/unit-view/page-view/canvas/canvas.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.ts similarity index 93% rename from projects/editor/src/app/unit-view/page-view/canvas/canvas.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.ts index 35671158a8207da6530751600177821894026b0c..1dd5084dc24b4be89daad0db89f296c07c4f6210 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/canvas.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.ts @@ -4,11 +4,11 @@ import { import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { UnitService } from '../../../unit.service'; -import { SelectionService } from '../../../selection.service'; -import { Page } from '../../../../../../common/models/page'; -import { UIElement } from '../../../../../../common/models/uI-element'; -import { Section } from '../../../../../../common/models/section'; +import { UnitService } from '../../../../services/unit.service'; +import { SelectionService } from '../../../../services/selection.service'; +import { Page } from '../../../../../../../common/models/page'; +import { UIElement } from '../../../../../../../common/models/uI-element'; +import { Section } from '../../../../../../../common/models/section'; @Component({ selector: 'app-page-canvas', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts similarity index 97% rename from projects/editor/src/app/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts index 9c43de68df9eeb7a3c9effb3da2a4759d59ca906..6b2db21d007b00ba6cef7fd2fa5c66c1cd0d9d9f 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/dynamic-canvas-overlay.component.ts @@ -3,7 +3,7 @@ import { } from '@angular/core'; import { CdkDragMove } from '@angular/cdk/drag-drop'; import { CanvasElementOverlay } from './canvas-element-overlay'; -import { UIElement } from '../../../../../../common/models/uI-element'; +import { UIElement } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-dynamic-canvas-overlay', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/section-dynamic.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/section-dynamic.component.ts similarity index 96% rename from projects/editor/src/app/unit-view/page-view/canvas/section-dynamic.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/section-dynamic.component.ts index f0f54c04eedb76295ac5a0a01bf123fd09c1351b..b643936d8b40191f87f126e603136b27da075938 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/section-dynamic.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/section-dynamic.component.ts @@ -3,9 +3,9 @@ import { } from '@angular/core'; import { CdkDragDrop } from '@angular/cdk/drag-drop/drag-events'; import { DragItemData, DropListData } from './canvas.component'; -import { UnitService } from '../../../unit.service'; -import { Section } from '../../../../../../common/models/section'; -import { UIElementType } from '../../../../../../common/models/uI-element'; +import { UnitService } from '../../../../services/unit.service'; +import { Section } from '../../../../../../../common/models/section'; +import { UIElementType } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-section-dynamic', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/section-menu.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/section-menu.component.ts similarity index 97% rename from projects/editor/src/app/unit-view/page-view/canvas/section-menu.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/section-menu.component.ts index 14acd9628d85d094425b1c22a1dd37d1fb0528d5..e173e81db3567090920ae3d1c7fa050747f5cd8f 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/section-menu.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/section-menu.component.ts @@ -4,10 +4,10 @@ import { } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { UnitService } from '../../../unit.service'; -import { DialogService } from '../../../dialog.service'; -import { SelectionService } from '../../../selection.service'; -import { Section } from '../../../../../../common/models/section'; +import { UnitService } from '../../../../services/unit.service'; +import { DialogService } from '../../../../services/dialog.service'; +import { SelectionService } from '../../../../services/selection.service'; +import { Section } from '../../../../../../../common/models/section'; @Component({ selector: 'app-section-menu', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/section-static.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts similarity index 86% rename from projects/editor/src/app/unit-view/page-view/canvas/section-static.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts index 6fd07c3ee3c396f28e6f8bc7e6bb6af5dca2d8ef..56ba5d797862a1bd63a22b8688060883cea5ae3d 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/section-static.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts @@ -1,9 +1,9 @@ import { Component, ElementRef, Input, ViewChild } from '@angular/core'; -import { UnitService } from '../../../unit.service'; -import { Section } from '../../../../../../common/models/section'; -import { UIElementType } from '../../../../../../common/models/uI-element'; +import { UnitService } from '../../../../services/unit.service'; +import { Section } from '../../../../../../../common/models/section'; +import { UIElementType } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-section-static', diff --git a/projects/editor/src/app/unit-view/page-view/canvas/static-canvas-overlay.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/static-canvas-overlay.component.ts similarity index 97% rename from projects/editor/src/app/unit-view/page-view/canvas/static-canvas-overlay.component.ts rename to projects/editor/src/app/components/unit-view/page-view/canvas/static-canvas-overlay.component.ts index 19b988b475426f7c72f5bf459ff08c93f5f88b18..ac98fea9118898cbdb931c990667db052aff5a31 100644 --- a/projects/editor/src/app/unit-view/page-view/canvas/static-canvas-overlay.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/static-canvas-overlay.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; import { take } from 'rxjs/operators'; import { CdkDragEnd, CdkDragMove } from '@angular/cdk/drag-drop'; import { CanvasElementOverlay } from './canvas-element-overlay'; -import { UIElement } from '../../../../../../common/models/uI-element'; +import { UIElement } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-static-canvas-overlay', diff --git a/projects/editor/src/app/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.html b/projects/editor/src/app/components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.html similarity index 100% rename from projects/editor/src/app/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.html rename to projects/editor/src/app/components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.html diff --git a/projects/editor/src/app/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts b/projects/editor/src/app/components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts similarity index 79% rename from projects/editor/src/app/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts rename to projects/editor/src/app/components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts index ce6cf970514c2e5adeb788d98999139cd80e26d0..c2ed4f84303b2873694584e9aec98e78b7e44b8d 100644 --- a/projects/editor/src/app/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/new-ui-element-panel/ui-element-toolbox.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { UnitService } from '../../../unit.service'; -import { SelectionService } from '../../../selection.service'; -import { UIElementType } from '../../../../../../common/models/uI-element'; +import { UnitService } from '../../../../services/unit.service'; +import { SelectionService } from '../../../../services/selection.service'; +import { UIElementType } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-ui-element-toolbox', diff --git a/projects/editor/src/app/unit-view/page-view/page-view.component.ts b/projects/editor/src/app/components/unit-view/page-view/page-view.component.ts similarity index 83% rename from projects/editor/src/app/unit-view/page-view/page-view.component.ts rename to projects/editor/src/app/components/unit-view/page-view/page-view.component.ts index 74b8a394ef9e77ecf68d4215e01241f87a89d4c4..7b0b9ce9c2ac2ebc87a644ef4ba11714d725ba2e 100644 --- a/projects/editor/src/app/unit-view/page-view/page-view.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/page-view.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; -import { Page } from '../../../../../common/models/page'; +import { Page } from '../../../../../../common/models/page'; @Component({ selector: 'app-page-view', diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.css b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.css similarity index 100% rename from projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.css rename to projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.css diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.html similarity index 100% rename from projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.html rename to projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.html diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.ts b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.ts similarity index 89% rename from projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.ts rename to projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.ts index c7ed4680d658f253ee006a09744e07426e63f1eb..f26bda4548ab37420e3a3364f4d8b03cf23b4216 100644 --- a/projects/editor/src/app/unit-view/page-view/properties-panel/element-properties.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-properties.component.ts @@ -7,14 +7,14 @@ import { takeUntil } from 'rxjs/operators'; import { CdkDragDrop } from '@angular/cdk/drag-drop/drag-events'; import { moveItemInArray } from '@angular/cdk/drag-drop'; import { TranslateService } from '@ngx-translate/core'; -import { UnitService } from '../../../unit.service'; -import { SelectionService } from '../../../selection.service'; -import { MessageService } from '../../../../../../common/message.service'; -import { FileService } from '../../../../../../common/file.service'; -import { UIElement } from '../../../../../../common/models/uI-element'; -import { LikertElementRow } from '../../../../../../common/models/compound-elements/likert-element-row'; -import { LikertElement } from '../../../../../../common/models/compound-elements/likert-element'; -import { LikertColumn, LikertRow } from '../../../../../../common/interfaces/UIElementInterfaces'; +import { UnitService } from '../../../../services/unit.service'; +import { SelectionService } from '../../../../services/selection.service'; +import { MessageService } from '../../../../../../../common/message.service'; +import { FileService } from '../../../../../../../common/file.service'; +import { UIElement } from '../../../../../../../common/models/uI-element'; +import { LikertElementRow } from '../../../../../../../common/models/compound-elements/likert-element-row'; +import { LikertElement } from '../../../../../../../common/models/compound-elements/likert-element'; +import { LikertColumn, LikertRow } from '../../../../../../../common/interfaces/UIElementInterfaces'; @Component({ selector: 'app-element-properties', diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-sizing-properties.component.ts b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-sizing-properties.component.ts similarity index 97% rename from projects/editor/src/app/unit-view/page-view/properties-panel/element-sizing-properties.component.ts rename to projects/editor/src/app/components/unit-view/page-view/properties-panel/element-sizing-properties.component.ts index 2e80f919d4c608c81435115141f9b118dd59fbed..a07f507917b3760c87801028cff30fe5ad981822 100644 --- a/projects/editor/src/app/unit-view/page-view/properties-panel/element-sizing-properties.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-sizing-properties.component.ts @@ -1,9 +1,9 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { UnitService } from '../../../unit.service'; -import { SelectionService } from '../../../selection.service'; -import { UIElement } from '../../../../../../common/models/uI-element'; +import { UnitService } from '../../../../services/unit.service'; +import { SelectionService } from '../../../../services/selection.service'; +import { UIElement } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-element-sizing-properties', diff --git a/projects/editor/src/app/unit-view/page-view/properties-panel/element-style-properties.component.ts b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-style-properties.component.ts similarity index 98% rename from projects/editor/src/app/unit-view/page-view/properties-panel/element-style-properties.component.ts rename to projects/editor/src/app/components/unit-view/page-view/properties-panel/element-style-properties.component.ts index aaff4480ca52b121ca97eaf7fb46432f30677e99..8448154ac085e88df3b3dea81f849d5c93fd96fb 100644 --- a/projects/editor/src/app/unit-view/page-view/properties-panel/element-style-properties.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/properties-panel/element-style-properties.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { UIElement } from '../../../../../../common/models/uI-element'; +import { UIElement } from '../../../../../../../common/models/uI-element'; @Component({ selector: 'app-element-style-properties', diff --git a/projects/editor/src/app/unit-view/unit-view.component.html b/projects/editor/src/app/components/unit-view/unit-view.component.html similarity index 100% rename from projects/editor/src/app/unit-view/unit-view.component.html rename to projects/editor/src/app/components/unit-view/unit-view.component.html diff --git a/projects/editor/src/app/unit-view/unit-view.component.ts b/projects/editor/src/app/components/unit-view/unit-view.component.ts similarity index 90% rename from projects/editor/src/app/unit-view/unit-view.component.ts rename to projects/editor/src/app/components/unit-view/unit-view.component.ts index 680a1d3644333c8399e50b47cf17c2f87b9013b7..a65d7afcbb00f4df28515fa6301fbe0398236dbf 100644 --- a/projects/editor/src/app/unit-view/unit-view.component.ts +++ b/projects/editor/src/app/components/unit-view/unit-view.component.ts @@ -1,12 +1,12 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { UnitService } from '../unit.service'; -import { DialogService } from '../dialog.service'; -import { SelectionService } from '../selection.service'; -import { MessageService } from '../../../../common/message.service'; -import { Page } from '../../../../common/models/page'; -import { Unit } from '../../../../common/models/unit'; +import { UnitService } from '../../services/unit.service'; +import { DialogService } from '../../services/dialog.service'; +import { SelectionService } from '../../services/selection.service'; +import { MessageService } from '../../../../../common/message.service'; +import { Page } from '../../../../../common/models/page'; +import { Unit } from '../../../../../common/models/unit'; @Component({ selector: 'app-unit-view', diff --git a/projects/editor/src/app/dialog.service.ts b/projects/editor/src/app/dialog.service.ts deleted file mode 100644 index c92fa5fb62883de9e5863b0a1bcb510574fc8eed..0000000000000000000000000000000000000000 --- a/projects/editor/src/app/dialog.service.ts +++ /dev/null @@ -1,336 +0,0 @@ -// eslint-disable-next-line max-classes-per-file -import { Component, Inject, Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; -import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog'; -import { PlayerElement, LikertColumn } from '../../../common/interfaces/UIElementInterfaces'; -import { FileService } from '../../../common/file.service'; -import { LikertElementRow } from '../../../common/models/compound-elements/likert-element-row'; - -@Injectable({ - providedIn: 'root' -}) -export class DialogService { - constructor(private dialog: MatDialog) { } - - showConfirmDialog(text: string): Observable<boolean> { - const dialogRef = this.dialog.open(ConfirmationDialog, { - data: { - text: text - } - }); - return dialogRef.afterClosed(); - } - - showTextEditDialog(text: string): Observable<string> { - const dialogRef = this.dialog.open(TextEditDialog, { - data: { - text: text - } - }); - return dialogRef.afterClosed(); - } - - showMultilineTextEditDialog(text: string): Observable<string> { - const dialogRef = this.dialog.open(MultilineTextEditDialog, { - data: { - text: text - } - }); - return dialogRef.afterClosed(); - } - - showRichTextEditDialog(text: string): Observable<string> { - const dialogRef = this.dialog.open(RichTextEditDialog, { - data: { - text: text - }, - autoFocus: false - }); - return dialogRef.afterClosed(); - } - - showPlayerEditDialog(player: PlayerElement): Observable<PlayerElement> { - const dialogRef = this.dialog.open(PlayerEditDialog, { - data: { - player: player - }, - autoFocus: false - }); - return dialogRef.afterClosed(); - } - - showLikertColumnEditDialog(column: LikertColumn): Observable<LikertColumn> { - const dialogRef = this.dialog.open(LikertColumnEditDialog, { - data: { - column: column - }, - autoFocus: false - }); - return dialogRef.afterClosed(); - } - - showLikertRowEditDialog(row: LikertElementRow, columns: LikertColumn[]): Observable<LikertElementRow> { - const dialogRef = this.dialog.open(LikertRowEditDialog, { - data: { - row: row, - columns: columns - }, - autoFocus: false - }); - return dialogRef.afterClosed(); - } -} - -@Component({ - selector: 'app-confirmation-dialog', - template: ` - <mat-dialog-content> - {{data.text}} - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="true">{{'save' | translate }}</button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class ConfirmationDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } -} - -@Component({ - selector: 'app-text-edit-dialog', - template: ` - <mat-dialog-content> - <mat-form-field> - <mat-label>{{'text' | translate }}</mat-label> - <input #inputElement matInput type="text" [value]="data.text"> - </mat-form-field> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="inputElement.value">{{'save' | translate }}</button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class TextEditDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } -} - -@Component({ - selector: 'app-multiline-text-edit-dialog', - template: ` - <mat-dialog-content> - <mat-form-field> - <mat-label>{{'text' | translate }}</mat-label> - <textarea #inputElement matInput type="text" [value]="data.text"> - </textarea> - </mat-form-field> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="inputElement.value">{{'save' | translate }}</button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class MultilineTextEditDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } -} - -@Component({ - selector: 'app-rich-text-edit-dialog-tinymce', - template: ` - <mat-dialog-content> - <app-rich-text-editor [(text)]="data.text"></app-rich-text-editor> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="data.text">{{'save' | translate }}</button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class RichTextEditDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { text: string }) { } -} - -@Component({ - selector: 'app-player-edit-dialog', - template: ` - <mat-dialog-content fxLayout="row"> - <mat-tab-group> - <mat-tab label="{{ 'player.appearance' | translate }}"> - <div fxLayout="column"> - <mat-checkbox [checked]="newPlayerConfig.startControl || data.player.startControl" - (change)="newPlayerConfig.startControl = $event.checked"> - {{ 'player.startControl' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.pauseControl || data.player.pauseControl" - (change)="newPlayerConfig.pauseControl = $event.checked"> - {{ 'player.pauseControl' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.progressBar || data.player.progressBar" - (change)="newPlayerConfig.progressBar = $event.checked"> - {{ 'player.progressBar' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.interactiveProgressbar || data.player.interactiveProgressbar" - (change)="newPlayerConfig.interactiveProgressbar = $event.checked"> - {{ 'player.interactiveProgressbar' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.volumeControl || data.player.volumeControl" - (change)="newPlayerConfig.volumeControl = $event.checked"> - {{ 'player.volumeControl' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.showRestTime || data.player.showRestTime" - (change)="newPlayerConfig.showRestTime = $event.checked"> - {{ 'player.showRestTime' | translate }} - </mat-checkbox> - <mat-form-field appearance="fill"> - <mat-label>{{ 'player.hintLabel' | translate }}</mat-label> - <input matInput type="text" [value]="newPlayerConfig.hintLabel || data.player.hintLabel" - (input)="newPlayerConfig.hintLabel = $any($event.target).value"> - </mat-form-field> - <mat-form-field *ngIf="newPlayerConfig.hintLabel || data.player.hintLabel" - appearance="fill"> - <mat-label>{{ 'player.hintLabelDelay' | translate }}</mat-label> - <input matInput type="number" step="1000" min="0" - [ngModel]="newPlayerConfig.hintLabelDelay || data.player.hintLabelDelay" - (ngModelChange)="newPlayerConfig.hintLabelDelay = $event"> - </mat-form-field> - </div> - </mat-tab> - <mat-tab label="{{ 'player.behaviour' | translate }}"> - <div fxLayout="column"> - <mat-checkbox [checked]="newPlayerConfig.autostart || data.player.autostart" - (change)="newPlayerConfig.autostart = $event.checked"> - {{ 'player.autoStart' | translate }} - </mat-checkbox> - <mat-form-field *ngIf="newPlayerConfig.autostart || data.player.autostart" appearance="fill"> - <mat-label>{{ 'player.autoStartDelay' | translate }}</mat-label> - <input matInput type="number" step="1000" - [value]="newPlayerConfig.autostartDelay || data.player.autostartDelay" - (input)="newPlayerConfig.autostartDelay = $any($event.target).value"> - </mat-form-field> - <mat-checkbox [checked]="newPlayerConfig.loop || data.player.loop" - (change)="newPlayerConfig.loop = $event.checked"> - {{ 'player.loop' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.uninterruptible || data.player.uninterruptible" - (change)="newPlayerConfig.uninterruptible = $event.checked"> - {{ 'player.uninterruptible' | translate }} - </mat-checkbox> - <mat-checkbox [checked]="newPlayerConfig.hideOtherPages || data.player.hideOtherPages" - (change)="newPlayerConfig.hideOtherPages = $event.checked"> - {{ 'player.hideOtherPages' | translate }} - </mat-checkbox> - <mat-form-field appearance="fill"> - <mat-label>{{ 'player.activeAfterID' | translate }}</mat-label> - <input matInput type="text" [value]="newPlayerConfig.activeAfterID || data.player.activeAfterID" - (input)="newPlayerConfig.activeAfterID = $any($event.target).value"> - </mat-form-field> - <mat-form-field appearance="fill"> - <mat-label>{{ 'player.minRuns' | translate }}</mat-label> - <input matInput type="number" min="0" - [ngModel]="newPlayerConfig.minRuns || data.player.minRuns" - (ngModelChange)="newPlayerConfig.minRuns = $event"> - </mat-form-field> - <mat-form-field appearance="fill"> - <mat-label>{{ 'player.maxRuns' | translate }}</mat-label> - <input matInput type="number" min="0" - [ngModel]="newPlayerConfig.maxRuns || data.player.maxRuns" - (ngModelChange)="newPlayerConfig.maxRuns = $event"> - </mat-form-field> - <mat-checkbox [checked]="newPlayerConfig.showRestRuns || data.player.showRestRuns" - (change)="newPlayerConfig.showRestRuns = $event.checked"> - {{ 'player.showRestRuns' | translate }} - </mat-checkbox> - </div> - </mat-tab> - </mat-tab-group> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="newPlayerConfig">{{'save' | translate }}</button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class PlayerEditDialog { - newPlayerConfig: PlayerElement = {} as PlayerElement; - constructor(@Inject(MAT_DIALOG_DATA)public data: { player: PlayerElement }) { - } -} - -@Component({ - selector: 'app-likert-column-edit-dialog', - template: ` - <mat-dialog-content fxLayout="column"> - <mat-form-field> - <mat-label>{{'text' | translate }}</mat-label> - <input #textInput matInput type="text" [value]="data.column.text"> - </mat-form-field> - <input #imageUpload type="file" hidden (click)="loadImage()"> - <button mat-raised-button (click)="imageUpload.click()">{{ 'loadImage' | translate }}</button> - <button mat-raised-button (click)="data.column.imgSrc = null">{{ 'removeImage' | translate }}</button> - <img [src]="data.column.imgSrc" - [style.object-fit]="'scale-down'" - [width]="200"> - <mat-form-field appearance="fill"> - <mat-label>{{'position' | translate }}</mat-label> - <mat-select [value]="data.column.position" - (selectionChange)="this.data.column.position = $event.value"> - <mat-option *ngFor="let option of ['above', 'below']" - [value]="option"> - {{ option | translate }} - </mat-option> - </mat-select> - </mat-form-field> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button [mat-dialog-close]="{ - text: textInput.value, - imgSrc: data.column.imgSrc, - position: data.column.position }"> - {{'save' | translate }} - </button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class LikertColumnEditDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { column: LikertColumn }) { } - - async loadImage(): Promise<void> { - this.data.column.imgSrc = await FileService.loadImage(); - } -} - -@Component({ - selector: 'app-likert-row-edit-dialog', - template: ` - <mat-dialog-content fxLayout="column"> - <mat-form-field> - <mat-label>{{'text' | translate }}</mat-label> - <input #textField matInput type="text" [value]="data.row.text"> - </mat-form-field> - <mat-form-field> - <mat-label>{{'id' | translate }}</mat-label> - <input #idField matInput type="text" [value]="data.row.id"> - </mat-form-field> - {{'preset' | translate }} - <mat-select #valueField [value]="data.row.value"> - <mat-option [value]="null">{{'propertiesPanel.undefined' | translate }}</mat-option> - <mat-option *ngFor="let column of data.columns; let i = index" [value]="i"> - {{column.text}} - </mat-option> - </mat-select> - </mat-dialog-content> - <mat-dialog-actions> - <button mat-button - [mat-dialog-close]="{ text: textField.value, id: idField.value, value: valueField.value }"> - {{'save' | translate }} - </button> - <button mat-button mat-dialog-close>{{'cancel' | translate }}</button> - </mat-dialog-actions> - ` -}) -export class LikertRowEditDialog { - constructor(@Inject(MAT_DIALOG_DATA) public data: { row: LikertElementRow, columns: LikertColumn[] }) { } -} diff --git a/projects/editor/src/app/services/dialog.service.ts b/projects/editor/src/app/services/dialog.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..8b633a8b9f4e4a80b7b7eab0f6f0278c86b6ea4e --- /dev/null +++ b/projects/editor/src/app/services/dialog.service.ts @@ -0,0 +1,84 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { MatDialog } from '@angular/material/dialog'; +import { PlayerElement, LikertColumn } from '../../../../common/interfaces/UIElementInterfaces'; +import { LikertElementRow } from '../../../../common/models/compound-elements/likert-element-row'; +import { ConfirmationDialogComponent } from '../components/dialogs/confirmation-dialog.component'; +import { TextEditDialogComponent } from '../components/dialogs/text-edit-dialog.component'; +import { TextEditMultilineDialogComponent } from '../components/dialogs/text-edit-multiline-dialog.component'; +import { RichTextEditDialogComponent } from '../components/dialogs/rich-text-edit-dialog.component'; +import { PlayerEditDialogComponent } from '../components/dialogs/player-edit-dialog.component'; +import { LikertColumnEditDialogComponent } from '../components/dialogs/likert-column-edit-dialog.component'; +import { LikertRowEditDialogComponent } from '../components/dialogs/likert-row-edit-dialog.component'; + +@Injectable({ + providedIn: 'root' +}) +export class DialogService { + constructor(private dialog: MatDialog) { } + + showConfirmDialog(text: string): Observable<boolean> { + const dialogRef = this.dialog.open(ConfirmationDialogComponent, { + data: { + text: text + } + }); + return dialogRef.afterClosed(); + } + + showTextEditDialog(text: string): Observable<string> { + const dialogRef = this.dialog.open(TextEditDialogComponent, { + data: { + text: text + } + }); + return dialogRef.afterClosed(); + } + + showMultilineTextEditDialog(text: string): Observable<string> { + const dialogRef = this.dialog.open(TextEditMultilineDialogComponent, { + data: { + text: text + } + }); + return dialogRef.afterClosed(); + } + + showRichTextEditDialog(text: string): Observable<string> { + const dialogRef = this.dialog.open(RichTextEditDialogComponent, { + data: { + text: text + }, + autoFocus: false + }); + return dialogRef.afterClosed(); + } + + showPlayerEditDialog(player: PlayerElement): Observable<PlayerElement> { + const dialogRef = this.dialog.open(PlayerEditDialogComponent, { + data: { + player: player + } + }); + return dialogRef.afterClosed(); + } + + showLikertColumnEditDialog(column: LikertColumn): Observable<LikertColumn> { + const dialogRef = this.dialog.open(LikertColumnEditDialogComponent, { + data: { + column: column + } + }); + return dialogRef.afterClosed(); + } + + showLikertRowEditDialog(row: LikertElementRow, columns: LikertColumn[]): Observable<LikertElementRow> { + const dialogRef = this.dialog.open(LikertRowEditDialogComponent, { + data: { + row: row, + columns: columns + } + }); + return dialogRef.afterClosed(); + } +} diff --git a/projects/editor/src/app/selection.service.ts b/projects/editor/src/app/services/selection.service.ts similarity index 94% rename from projects/editor/src/app/selection.service.ts rename to projects/editor/src/app/services/selection.service.ts index 1f6ae279b02c1c15c6794000c9b23c4089d88fd7..2b0d6954575e4494c94e1f31f4a5689c7aa7565b 100644 --- a/projects/editor/src/app/selection.service.ts +++ b/projects/editor/src/app/services/selection.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; -import { UIElement } from '../../../common/models/uI-element'; +import { UIElement } from '../../../../common/models/uI-element'; @Injectable({ providedIn: 'root' diff --git a/projects/editor/src/app/unit.service.ts b/projects/editor/src/app/services/unit.service.ts similarity index 94% rename from projects/editor/src/app/unit.service.ts rename to projects/editor/src/app/services/unit.service.ts index 3c846c7839da8691448bc9783c3ed9f52cb3b0a0..8c5bbccef52b47049b0933362bee3b84b01dc888 100644 --- a/projects/editor/src/app/unit.service.ts +++ b/projects/editor/src/app/services/unit.service.ts @@ -2,21 +2,21 @@ import { Injectable } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { BehaviorSubject, Observable, Subject } from 'rxjs'; import { TranslateService } from '@ngx-translate/core'; -import { FileService } from '../../../common/file.service'; -import { MessageService } from '../../../common/message.service'; -import { IdService } from '../../../common/id.service'; +import { FileService } from '../../../../common/file.service'; +import { MessageService } from '../../../../common/message.service'; +import { IdService } from '../../../../common/id.service'; import { DialogService } from './dialog.service'; import { VeronaAPIService } from './verona-api.service'; -import { Unit } from '../../../common/models/unit'; -import { Page } from '../../../common/models/page'; -import { Section } from '../../../common/models/section'; -import { InputElement, UIElement, UIElementType } from '../../../common/models/uI-element'; -import { TextElement } from '../../../common/models/text-element'; -import { LikertElement } from '../../../common/models/compound-elements/likert-element'; -import { LikertElementRow } from '../../../common/models/compound-elements/likert-element-row'; -import { LikertColumn, LikertRow, PlayerElement } from '../../../common/interfaces/UIElementInterfaces'; +import { Unit } from '../../../../common/models/unit'; +import { Page } from '../../../../common/models/page'; +import { Section } from '../../../../common/models/section'; +import { InputElement, UIElement, UIElementType } from '../../../../common/models/uI-element'; +import { TextElement } from '../../../../common/models/text-element'; +import { LikertElement } from '../../../../common/models/compound-elements/likert-element'; +import { LikertElementRow } from '../../../../common/models/compound-elements/likert-element-row'; +import { LikertColumn, LikertRow, PlayerElement } from '../../../../common/interfaces/UIElementInterfaces'; import { SelectionService } from './selection.service'; -import * as ElementFactory from '../../../common/util/element.factory'; +import * as ElementFactory from '../../../../common/util/element.factory'; @Injectable({ providedIn: 'root' diff --git a/projects/editor/src/app/verona-api.service.ts b/projects/editor/src/app/services/verona-api.service.ts similarity index 100% rename from projects/editor/src/app/verona-api.service.ts rename to projects/editor/src/app/services/verona-api.service.ts