@rolatech/angular-course 17.6.3 → 19.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/fesm2022/rolatech-angular-course-course-index.component-Ba8BsDP1.mjs +55 -0
  2. package/fesm2022/rolatech-angular-course-course-index.component-Ba8BsDP1.mjs.map +1 -0
  3. package/fesm2022/rolatech-angular-course.mjs +276 -301
  4. package/fesm2022/rolatech-angular-course.mjs.map +1 -1
  5. package/lib/components/index.d.ts +0 -1
  6. package/package.json +8 -6
  7. package/themes/_default.scss +1 -1
  8. package/esm2022/index.mjs +0 -7
  9. package/esm2022/lib/components/course-action/course-action.component.mjs +0 -29
  10. package/esm2022/lib/components/course-details/course-details.component.mjs +0 -28
  11. package/esm2022/lib/components/course-details-dialog/course-details-dialog.component.mjs +0 -92
  12. package/esm2022/lib/components/course-edit-dialog/course-edit-dialog.component.mjs +0 -233
  13. package/esm2022/lib/components/course-info/course-info.component.mjs +0 -23
  14. package/esm2022/lib/components/course-item/course-item.component.mjs +0 -18
  15. package/esm2022/lib/components/course-media/course-media.component.mjs +0 -34
  16. package/esm2022/lib/components/course-media-owner-renderer/course-media-owner-renderer.component.mjs +0 -20
  17. package/esm2022/lib/components/course-preview/course-preview.component.mjs +0 -11
  18. package/esm2022/lib/components/course-pricing/course-pricing.component.mjs +0 -14
  19. package/esm2022/lib/components/course-pricing-add-dialog/course-pricing-add-dialog.component.mjs +0 -25
  20. package/esm2022/lib/components/course-pricing-dialog/course-pricing-dialog.component.mjs +0 -59
  21. package/esm2022/lib/components/course-schedule/course-schedule.component.mjs +0 -20
  22. package/esm2022/lib/components/course-schedule-add-dialog/course-schedule-add-dialog.component.mjs +0 -26
  23. package/esm2022/lib/components/course-schedule-dialog/course-schedule-dialog.component.mjs +0 -56
  24. package/esm2022/lib/components/course-section-item/course-section-item.component.mjs +0 -52
  25. package/esm2022/lib/components/course-section-lecture-item/course-section-lecture-item.component.mjs +0 -112
  26. package/esm2022/lib/components/course-section-lecture-video-dialog/course-section-lecture-video-dialog.component.mjs +0 -111
  27. package/esm2022/lib/components/course-section-lecture-video-item/course-section-lecture-video-item.component.mjs +0 -11
  28. package/esm2022/lib/components/course-sections/course-sections.component.mjs +0 -28
  29. package/esm2022/lib/components/detail-item/detail-item.component.mjs +0 -72
  30. package/esm2022/lib/components/index.mjs +0 -24
  31. package/esm2022/lib/components/pricing-item/pricing-item.component.mjs +0 -44
  32. package/esm2022/lib/components/schedule-item/schedule-item.component.mjs +0 -127
  33. package/esm2022/lib/interfaces/category.mjs +0 -2
  34. package/esm2022/lib/interfaces/course.mjs +0 -146
  35. package/esm2022/lib/interfaces/index.mjs +0 -2
  36. package/esm2022/lib/interfaces/media.mjs +0 -2
  37. package/esm2022/lib/pages/course/course-category/course-category.component.mjs +0 -74
  38. package/esm2022/lib/pages/course/course-detail/course-detail.component.mjs +0 -148
  39. package/esm2022/lib/pages/course/course-index/course-index.component.mjs +0 -53
  40. package/esm2022/lib/pages/course/course-layout/course-layout.component.mjs +0 -49
  41. package/esm2022/lib/pages/course/course-section-content/course-section-content.component.mjs +0 -133
  42. package/esm2022/lib/pages/course/course.routes.mjs +0 -33
  43. package/esm2022/lib/pages/course-manage/course-manage-content/course-manage-content.component.mjs +0 -12
  44. package/esm2022/lib/pages/course-manage/course-manage-details/course-manage-details.component.mjs +0 -159
  45. package/esm2022/lib/pages/course-manage/course-manage-info/course-manage-info.component.mjs +0 -139
  46. package/esm2022/lib/pages/course-manage/course-manage-layout/course-manage-layout.component.mjs +0 -68
  47. package/esm2022/lib/pages/course-manage/course-manage-media/course-manage-media.component.mjs +0 -137
  48. package/esm2022/lib/pages/course-manage/course-manage-pricing/course-manage-pricing.component.mjs +0 -127
  49. package/esm2022/lib/pages/course-manage/course-manage-schedule/course-manage-schedule.component.mjs +0 -131
  50. package/esm2022/lib/pages/course-manage/course-manage-section/course-manage-section.component.mjs +0 -341
  51. package/esm2022/lib/pages/course-manage/course-manage.routes.mjs +0 -40
  52. package/esm2022/lib/services/booking.service.mjs +0 -24
  53. package/esm2022/lib/services/category.service.mjs +0 -38
  54. package/esm2022/lib/services/course-section.service.mjs +0 -26
  55. package/esm2022/lib/services/course.service.mjs +0 -280
  56. package/esm2022/lib/services/index.mjs +0 -6
  57. package/esm2022/lib/services/instructor.service.mjs +0 -24
  58. package/esm2022/provider.mjs +0 -13
  59. package/esm2022/rolatech-angular-course.mjs +0 -5
  60. package/fesm2022/rolatech-angular-course-course-index.component-Cy7RMzDZ.mjs +0 -78
  61. package/fesm2022/rolatech-angular-course-course-index.component-Cy7RMzDZ.mjs.map +0 -1
  62. package/lib/components/course-item/course-item.component.d.ts +0 -9
@@ -1,59 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
3
- import { MatSnackBar } from '@angular/material/snack-bar';
4
- import { MatButtonModule } from '@angular/material/button';
5
- import { PricingItemComponent } from '../pricing-item/pricing-item.component';
6
- import { MatStepperModule } from '@angular/material/stepper';
7
- import { FormsModule } from '@angular/forms';
8
- import { MatDividerModule } from '@angular/material/divider';
9
- import { MatIconModule } from '@angular/material/icon';
10
- import { CourseService } from '../../services';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/material/dialog";
13
- import * as i2 from "../../services";
14
- import * as i3 from "@angular/material/snack-bar";
15
- import * as i4 from "@angular/material/icon";
16
- import * as i5 from "@angular/material/divider";
17
- import * as i6 from "@angular/forms";
18
- import * as i7 from "@angular/material/stepper";
19
- import * as i8 from "@angular/material/button";
20
- export class CoursePricingDialogComponent {
21
- constructor(dialogRef, data, courseService, snackBar, dialog) {
22
- this.dialogRef = dialogRef;
23
- this.data = data;
24
- this.courseService = courseService;
25
- this.snackBar = snackBar;
26
- this.dialog = dialog;
27
- this.pricing = [];
28
- this.courseId = data.courseId;
29
- this.pricing = data.pricing;
30
- }
31
- close() {
32
- this.dialogRef.close();
33
- }
34
- addPricing() {
35
- this.pricing.push({
36
- min: 0,
37
- max: 0,
38
- total: 0,
39
- });
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.CourseService }, { token: i3.MatSnackBar }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CoursePricingDialogComponent, isStandalone: true, selector: "rolatech-course-pricing-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i7.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: PricingItemComponent, selector: "rolatech-pricing-item", inputs: ["actions", "pricing"], outputs: ["pricingChange", "delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CoursePricingDialogComponent, decorators: [{
45
- type: Component,
46
- args: [{ selector: 'rolatech-course-pricing-dialog', standalone: true, imports: [
47
- MatIconModule,
48
- MatDividerModule,
49
- FormsModule,
50
- MatStepperModule,
51
- PricingItemComponent,
52
- MatButtonModule,
53
- MatDialogClose,
54
- ], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto w-2/3 max-h-[55vh]\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of pricing; track item) {\n <rolatech-pricing-item [pricing]=\"item\"> </rolatech-pricing-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addPricing()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u4EF7\u683C</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"pricing\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
55
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
56
- type: Inject,
57
- args: [MAT_DIALOG_DATA]
58
- }] }, { type: i2.CourseService }, { type: i3.MatSnackBar }, { type: i1.MatDialog }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXByaWNpbmctZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1wcmljaW5nLWRpYWxvZy9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXByaWNpbmctZGlhbG9nL2NvdXJzZS1wcmljaW5nLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQWlCL0MsTUFBTSxPQUFPLDRCQUE0QjtJQUd2QyxZQUNVLFNBQXFELEVBQzdCLElBQVMsRUFDakMsYUFBNEIsRUFDNUIsUUFBcUIsRUFDckIsTUFBaUI7UUFKakIsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDN0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFOM0IsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQVF0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdEJVLDRCQUE0Qiw4Q0FLN0IsZUFBZTtrR0FMZCw0QkFBNEIsMEZDM0J6Qyw2bENBNkJBLHlERFhJLGFBQWEsbUxBQ2IsZ0JBQWdCLGtJQUNoQixXQUFXLHVkQUNYLGdCQUFnQix5R0FDaEIsb0JBQW9CLCtJQUNwQixlQUFlLDROQUNmLGNBQWM7OzJGQUdMLDRCQUE0QjtrQkFmeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsY0FHOUIsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLGNBQWM7cUJBQ2Y7OzBCQU9FLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDbG9zZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgUHJpY2luZ0l0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9wcmljaW5nLWl0ZW0vcHJpY2luZy1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTdGVwcGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFByaWNpbmcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvdXJzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1wcmljaW5nLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2UtcHJpY2luZy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTdGVwcGVyTW9kdWxlLFxuICAgIFByaWNpbmdJdGVtQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlUHJpY2luZ0RpYWxvZ0NvbXBvbmVudCB7XG4gIGNvdXJzZUlkITogc3RyaW5nO1xuICBwcmljaW5nOiBQcmljaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VQcmljaW5nRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGNvdXJzZVNlcnZpY2U6IENvdXJzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5jb3Vyc2VJZCA9IGRhdGEuY291cnNlSWQ7XG4gICAgdGhpcy5wcmljaW5nID0gZGF0YS5wcmljaW5nO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYWRkUHJpY2luZygpIHtcbiAgICB0aGlzLnByaWNpbmcucHVzaCh7XG4gICAgICBtaW46IDAsXG4gICAgICBtYXg6IDAsXG4gICAgICB0b3RhbDogMCxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNVwiPlxuICAgIEBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1tZWRpdW1cIj57eyBkYXRhLnRpdGxlIH19PC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW4gbXQtMyBvdmVyZmxvdy15LWF1dG8gdy0yLzMgbWF4LWgtWzU1dmhdXCI+XG4gICAgPGZvcm0gI2RldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInAtM1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD7or6bmg4U8L25nLXRlbXBsYXRlPlxuICAgICAgQGZvciAoaXRlbSBvZiBwcmljaW5nOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxyb2xhdGVjaC1wcmljaW5nLWl0ZW0gW3ByaWNpbmddPVwiaXRlbVwiPiA8L3JvbGF0ZWNoLXByaWNpbmctaXRlbT5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiYWRkUHJpY2luZygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+5aKe5Yqg5Lu35qC8PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiaC0xNiBmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cInByaWNpbmdcIiBjZGtGb2N1c0luaXRpYWw+5L+d5a2YPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,20 +0,0 @@
1
- import { Component, input } from '@angular/core';
2
- import { MatIconModule } from '@angular/material/icon';
3
- import { AccordionComponent, PanelComponent } from '@rolatech/angular-components';
4
- import * as i0 from "@angular/core";
5
- export class CourseScheduleComponent {
6
- constructor() {
7
- this.schedule = input([]);
8
- }
9
- ngOnInit() {
10
- // this.formatSchedule();
11
- }
12
- formatSchedule() { }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleComponent, isStandalone: true, selector: "rolatech-course-schedule", inputs: { schedule: { classPropertyName: "schedule", publicName: "schedule", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: AccordionComponent, selector: "rolatech-accordion" }, { kind: "component", type: PanelComponent, selector: "rolatech-panel", inputs: ["border", "divider", "expanded", "title", "subtitle"], outputs: ["expandedChange"] }] }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleComponent, decorators: [{
17
- type: Component,
18
- args: [{ selector: 'rolatech-course-schedule', standalone: true, imports: [MatIconModule, AccordionComponent, PanelComponent], template: "@if (schedule()) {\n <div class=\"py-3\" id=\"schedule\">\n <div class=\"text-xl font-medium py-2\">\u8BFE\u8868</div>\n <rolatech-accordion>\n @for (item of schedule(); track $index) {\n <rolatech-panel [title]=\"item.title\" [expanded]=\"$index === 0\">\n <div>\n <div class=\"text-[--rt-text-secondary]pt-2 text-sm\">\n <span>{{ item.startAt }} - {{ item.endAt }}</span>\n </div>\n <div class=\"py-3\">\n <div>{{ item.content }}</div>\n </div>\n </div>\n </rolatech-panel>\n }\n </rolatech-accordion>\n </div>\n}\n" }]
19
- }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zY2hlZHVsZS9jb3Vyc2Utc2NoZWR1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlL2NvdXJzZS1zY2hlZHVsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVNsRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUUsYUFBUSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7S0FNeEM7SUFKQyxRQUFRO1FBQ04seUJBQXlCO0lBQzNCLENBQUM7SUFDRCxjQUFjLEtBQUksQ0FBQzs4R0FOUix1QkFBdUI7a0dBQXZCLHVCQUF1QixpT0NacEMsa29CQW1CQSx5RERUWSxhQUFhLCtCQUFFLGtCQUFrQiwrREFBRSxjQUFjOzsyRkFFaEQsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLDBCQUEwQixjQUd4QixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBDb3Vyc2VTY2hlZHVsZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWNjb3JkaW9uQ29tcG9uZW50LCBQYW5lbENvbXBvbmVudCB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2NoZWR1bGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNjaGVkdWxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRJY29uTW9kdWxlLCBBY2NvcmRpb25Db21wb25lbnQsIFBhbmVsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2NoZWR1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzY2hlZHVsZSA9IGlucHV0PENvdXJzZVNjaGVkdWxlW10+KFtdKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmZvcm1hdFNjaGVkdWxlKCk7XG4gIH1cbiAgZm9ybWF0U2NoZWR1bGUoKSB7fVxufVxuIiwiQGlmIChzY2hlZHVsZSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJweS0zXCIgaWQ9XCJzY2hlZHVsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtbWVkaXVtIHB5LTJcIj7or77ooag8L2Rpdj5cbiAgICA8cm9sYXRlY2gtYWNjb3JkaW9uPlxuICAgICAgQGZvciAoaXRlbSBvZiBzY2hlZHVsZSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHJvbGF0ZWNoLXBhbmVsIFt0aXRsZV09XCJpdGVtLnRpdGxlXCIgW2V4cGFuZGVkXT1cIiRpbmRleCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bLS1ydC10ZXh0LXNlY29uZGFyeV1wdC0yIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5zdGFydEF0IH19IC0ge3sgaXRlbS5lbmRBdCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBpdGVtLmNvbnRlbnQgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3JvbGF0ZWNoLXBhbmVsPlxuICAgICAgfVxuICAgIDwvcm9sYXRlY2gtYWNjb3JkaW9uPlxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -1,26 +0,0 @@
1
- import { Component, output } from '@angular/core';
2
- import { MatButtonModule } from '@angular/material/button';
3
- import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
4
- import { MatIconModule } from '@angular/material/icon';
5
- import * as i0 from "@angular/core";
6
- export class CourseScheduleAddDialogComponent {
7
- constructor() {
8
- this.output = output();
9
- this.schedule = {
10
- title: '',
11
- content: '',
12
- startAt: '',
13
- endAt: '',
14
- };
15
- }
16
- ngDoCheck() {
17
- this.output.emit(this.schedule);
18
- }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleAddDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: CourseScheduleAddDialogComponent, isStandalone: true, selector: "rolatech-course-schedule-add-dialog", outputs: { output: "output" }, ngImport: i0, template: "<rolatech-schedule-item [value]=\"schedule\"></rolatech-schedule-item>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions"], outputs: ["delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }] }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleAddDialogComponent, decorators: [{
23
- type: Component,
24
- args: [{ selector: 'rolatech-course-schedule-add-dialog', standalone: true, imports: [MatIconModule, ScheduleItemComponent, MatButtonModule], template: "<rolatech-schedule-item [value]=\"schedule\"></rolatech-schedule-item>\n" }]
25
- }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cvY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFVdkQsTUFBTSxPQUFPLGdDQUFnQztJQVA3QztRQVFFLFdBQU0sR0FBRyxNQUFNLEVBQU8sQ0FBQztRQUN2QixhQUFRLEdBQWE7WUFDbkIsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0tBSUg7SUFIQyxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBVlUsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0MsOEhDYjdDLDBFQUNBLHlERFVZLGFBQWEsK0JBQUUscUJBQXFCLDZIQUFFLGVBQWU7OzJGQUVwRCxnQ0FBZ0M7a0JBUDVDLFNBQVM7K0JBQ0UscUNBQXFDLGNBR25DLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERvQ2hlY2ssIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFNjaGVkdWxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NjaGVkdWxlLWl0ZW0vc2NoZWR1bGUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNjaGVkdWxlLWFkZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3Vyc2Utc2NoZWR1bGUtYWRkLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgU2NoZWR1bGVJdGVtQ29tcG9uZW50LCBNYXRCdXR0b25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTY2hlZHVsZUFkZERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBvdXRwdXQgPSBvdXRwdXQ8YW55PigpO1xuICBzY2hlZHVsZTogU2NoZWR1bGUgPSB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIHN0YXJ0QXQ6ICcnLFxuICAgIGVuZEF0OiAnJyxcbiAgfTtcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0LmVtaXQodGhpcy5zY2hlZHVsZSk7XG4gIH1cbn1cbiIsIjxyb2xhdGVjaC1zY2hlZHVsZS1pdGVtIFt2YWx1ZV09XCJzY2hlZHVsZVwiPjwvcm9sYXRlY2gtc2NoZWR1bGUtaXRlbT5cbiJdfQ==
@@ -1,56 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
5
- import { MatStepperModule } from '@angular/material/stepper';
6
- import { FormsModule } from '@angular/forms';
7
- import { MatDividerModule } from '@angular/material/divider';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/material/dialog";
11
- import * as i2 from "@angular/material/icon";
12
- import * as i3 from "@angular/material/divider";
13
- import * as i4 from "@angular/forms";
14
- import * as i5 from "@angular/material/stepper";
15
- import * as i6 from "@angular/material/button";
16
- export class CourseScheduleDialogComponent {
17
- constructor(dialogRef, data) {
18
- this.dialogRef = dialogRef;
19
- this.data = data;
20
- this.schedule = [];
21
- this.courseId = data.courseId;
22
- this.schedule = data.schedule;
23
- }
24
- close() {
25
- this.dialogRef.close();
26
- }
27
- addSchedule() {
28
- if (!this.schedule) {
29
- this.schedule = [];
30
- }
31
- this.schedule.push({
32
- title: '',
33
- content: '',
34
- startAt: '',
35
- endAt: '',
36
- });
37
- }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseScheduleDialogComponent, isStandalone: true, selector: "rolatech-course-schedule-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatStepperModule }, { kind: "directive", type: i5.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: ScheduleItemComponent, selector: "rolatech-schedule-item", inputs: ["value", "actions"], outputs: ["delete", "save"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] }); }
40
- }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseScheduleDialogComponent, decorators: [{
42
- type: Component,
43
- args: [{ selector: 'rolatech-course-schedule-dialog', standalone: true, imports: [
44
- MatIconModule,
45
- MatDividerModule,
46
- FormsModule,
47
- MatStepperModule,
48
- ScheduleItemComponent,
49
- MatButtonModule,
50
- MatDialogClose,
51
- ], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden mt-3 overflow-y-auto\">\n <form #detailForm=\"ngForm\" class=\"p-3\">\n <ng-template matStepLabel>\u8BE6\u60C5</ng-template>\n @for (item of schedule; track item) {\n <rolatech-schedule-item [value]=\"item\"></rolatech-schedule-item>\n }\n <div class=\"mb-6\">\n <button mat-button (click)=\"addSchedule()\">\n <mat-icon>add</mat-icon>\n <span>\u589E\u52A0\u8BFE\u8868</span>\n </button>\n </div>\n </form>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"schedule\" cdkFocusInitial>\u4FDD\u5B58</button>\n </div>\n</div>\n" }]
52
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
53
- type: Inject,
54
- args: [MAT_DIALOG_DATA]
55
- }] }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNjaGVkdWxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nL2NvdXJzZS1zY2hlZHVsZS1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNjaGVkdWxlLWRpYWxvZy9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQWtCdkQsTUFBTSxPQUFPLDZCQUE2QjtJQUd4QyxZQUNVLFNBQXNELEVBQzlCLElBQVM7UUFEakMsY0FBUyxHQUFULFNBQVMsQ0FBNkM7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBSztRQUgzQyxhQUFRLEdBQWUsRUFBRSxDQUFDO1FBS3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNELEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakIsS0FBSyxFQUFFLEVBQUU7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXZCVSw2QkFBNkIsOENBSzlCLGVBQWU7a0dBTGQsNkJBQTZCLDJGQ3pCMUMsNGtDQTZCQSx5RERiSSxhQUFhLG1MQUNiLGdCQUFnQixrSUFDaEIsV0FBVyx1ZEFDWCxnQkFBZ0IseUdBQ2hCLHFCQUFxQiw2SEFDckIsZUFBZSw0TkFDZixjQUFjOzsyRkFHTCw2QkFBNkI7a0JBZnpDLFNBQVM7K0JBQ0UsaUNBQWlDLGNBRy9CLElBQUksV0FDUDt3QkFDUCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixjQUFjO3FCQUNmOzswQkFPRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0Nsb3NlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBTY2hlZHVsZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zY2hlZHVsZS1pdGVtL3NjaGVkdWxlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFN0ZXBwZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncm9sYXRlY2gtY291cnNlLXNjaGVkdWxlLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2Utc2NoZWR1bGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNjaGVkdWxlLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFN0ZXBwZXJNb2R1bGUsXG4gICAgU2NoZWR1bGVJdGVtQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2NoZWR1bGVEaWFsb2dDb21wb25lbnQge1xuICBjb3Vyc2VJZCE6IHN0cmluZztcbiAgc2NoZWR1bGU6IFNjaGVkdWxlW10gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb3Vyc2VTY2hlZHVsZURpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICkge1xuICAgIHRoaXMuY291cnNlSWQgPSBkYXRhLmNvdXJzZUlkO1xuICAgIHRoaXMuc2NoZWR1bGUgPSBkYXRhLnNjaGVkdWxlO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYWRkU2NoZWR1bGUoKSB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlID0gW107XG4gICAgfVxuICAgIHRoaXMuc2NoZWR1bGUucHVzaCh7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBjb250ZW50OiAnJyxcbiAgICAgIHN0YXJ0QXQ6ICcnLFxuICAgICAgZW5kQXQ6ICcnLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBweC01XCI+XG4gICAgQGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LW1lZGl1bVwiPnt7IGRhdGEudGl0bGUgfX08L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LWhpZGRlbiBtdC0zIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxmb3JtICNkZXRhaWxGb3JtPVwibmdGb3JtXCIgY2xhc3M9XCJwLTNcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+6K+m5oOFPC9uZy10ZW1wbGF0ZT5cbiAgICAgIEBmb3IgKGl0ZW0gb2Ygc2NoZWR1bGU7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgPHJvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0gW3ZhbHVlXT1cIml0ZW1cIj48L3JvbGF0ZWNoLXNjaGVkdWxlLWl0ZW0+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImFkZFNjaGVkdWxlKClcIj5cbiAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj7lop7liqDor77ooag8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxkaXYgY2xhc3M9XCJoLTE2IGZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIHB4LTVcIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwic2NoZWR1bGVcIiBjZGtGb2N1c0luaXRpYWw+5L+d5a2YPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,52 +0,0 @@
1
- import { Component, model, output } from '@angular/core';
2
- import { MatButtonModule } from '@angular/material/button';
3
- import { FormsModule } from '@angular/forms';
4
- import { MatIconModule } from '@angular/material/icon';
5
- import { IconButtonComponent, InputComponent } from '@rolatech/angular-components';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/icon";
8
- import * as i2 from "@angular/material/button";
9
- export class CourseSectionItemComponent {
10
- constructor() {
11
- this.section = model.required();
12
- this.actions = model();
13
- this.hasUnsaved = model();
14
- this.editId = model();
15
- this.save = output();
16
- this.cancel = output();
17
- this.delete = output();
18
- this.edit = output();
19
- this.addLecture = output();
20
- this.editing = false;
21
- this.isExpand = false;
22
- }
23
- ngOnInit() { }
24
- onSave(section) {
25
- this.editing = false;
26
- this.editId.set(null);
27
- this.save.emit(section);
28
- }
29
- onCancel(section) {
30
- this.editing = false;
31
- this.editId.set(null);
32
- this.cancel.emit(section);
33
- }
34
- onDelete(section) {
35
- this.delete.emit(section);
36
- }
37
- onEdit(section) {
38
- this.editId.set(null);
39
- this.editing = true;
40
- this.edit.emit(section);
41
- }
42
- onAddLecture(section) {
43
- this.addLecture.emit(section);
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionItemComponent, isStandalone: true, selector: "rolatech-course-section-item", inputs: { section: { classPropertyName: "section", publicName: "section", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, hasUnsaved: { classPropertyName: "hasUnsaved", publicName: "hasUnsaved", isSignal: true, isRequired: false, transformFunction: null }, editId: { classPropertyName: "editId", publicName: "editId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { section: "sectionChange", actions: "actionsChange", hasUnsaved: "hasUnsavedChange", editId: "editIdChange", save: "save", cancel: "cancel", delete: "delete", edit: "edit", addLecture: "addLecture" }, ngImport: i0, template: "<div class=\"flex flex-col grow\">\n @if (section().id !== editId()) {\n <div>\n <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"isExpand = !isExpand\">\n <div class=\"w-full flex items-center gap-3 pl-3\">\n <span>{{ section().title }}</span>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\" (click)=\"onEdit(section()); $event.stopPropagation()\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\" (click)=\"onDelete(section()); $event.stopPropagation()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>{{ isExpand ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n @if (isExpand) {\n <div>\n <ng-content></ng-content>\n </div>\n }\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <rolatech-input [(title)]=\"section().title\" placeholder=\"\u6807\u9898\"></rolatech-input>\n <div class=\"w-full flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onCancel(section())\">\u53D6\u6D88</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: InputComponent, selector: "rolatech-input", inputs: ["title", "placeholder"], outputs: ["titleChange"] }] }); }
47
- }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionItemComponent, decorators: [{
49
- type: Component,
50
- args: [{ selector: 'rolatech-course-section-item', standalone: true, imports: [MatIconModule, FormsModule, MatButtonModule, IconButtonComponent, InputComponent], template: "<div class=\"flex flex-col grow\">\n @if (section().id !== editId()) {\n <div>\n <div class=\"flex justify-between items-center cursor-pointer\" (click)=\"isExpand = !isExpand\">\n <div class=\"w-full flex items-center gap-3 pl-3\">\n <span>{{ section().title }}</span>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\" (click)=\"onEdit(section()); $event.stopPropagation()\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\" (click)=\"onDelete(section()); $event.stopPropagation()\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <button mat-icon-button class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>{{ isExpand ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n @if (isExpand) {\n <div>\n <ng-content></ng-content>\n </div>\n }\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <rolatech-input [(title)]=\"section().title\" placeholder=\"\u6807\u9898\"></rolatech-input>\n <div class=\"w-full flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onCancel(section())\">\u53D6\u6D88</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(section())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n</div>\n" }]
51
- }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY291cnNlL3NyYy9saWIvY29tcG9uZW50cy9jb3Vyc2Utc2VjdGlvbi1pdGVtL2NvdXJzZS1zZWN0aW9uLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24taXRlbS9jb3Vyc2Utc2VjdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBVW5GLE1BQU0sT0FBTywwQkFBMEI7SUFQdkM7UUFRRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUMxQyxZQUFPLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDM0IsZUFBVSxHQUFHLEtBQUssRUFBYSxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxLQUFLLEVBQU8sQ0FBQztRQUN0QixTQUFJLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQy9CLFdBQU0sR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sRUFBaUIsQ0FBQztRQUNqQyxTQUFJLEdBQUcsTUFBTSxFQUFpQixDQUFDO1FBQy9CLGVBQVUsR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFDckMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsS0FBSyxDQUFDO0tBeUJsQjtJQXZCQyxRQUFRLEtBQVUsQ0FBQztJQUVuQixNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFFBQVEsQ0FBQyxPQUFzQjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQXNCO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxNQUFNLENBQUMsT0FBc0I7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFlBQVksQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQW5DVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixvekJDZHZDLG03Q0FpQ0EseUREckJZLGFBQWEsbUxBQUUsV0FBVyw4QkFBRSxlQUFlLHlVQUF1QixjQUFjOzsyRkFFL0UsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEljb25CdXR0b25Db21wb25lbnQsIElucHV0Q29tcG9uZW50IH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb3Vyc2VTZWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1zZWN0aW9uLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNlY3Rpb24taXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvdXJzZS1zZWN0aW9uLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIEljb25CdXR0b25Db21wb25lbnQsIElucHV0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ291cnNlU2VjdGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzZWN0aW9uID0gbW9kZWwucmVxdWlyZWQ8Q291cnNlU2VjdGlvbj4oKTtcbiAgYWN0aW9ucyA9IG1vZGVsPGJvb2xlYW4+KCk7XG4gIGhhc1Vuc2F2ZWQgPSBtb2RlbDxib29sZWFuW10+KCk7XG4gIGVkaXRJZCA9IG1vZGVsPGFueT4oKTtcbiAgc2F2ZSA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uPigpO1xuICBjYW5jZWwgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbj4oKTtcbiAgZGVsZXRlID0gb3V0cHV0PENvdXJzZVNlY3Rpb24+KCk7XG4gIGVkaXQgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbj4oKTtcbiAgYWRkTGVjdHVyZSA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uPigpO1xuICBlZGl0aW5nID0gZmFsc2U7XG4gIGlzRXhwYW5kID0gZmFsc2U7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIG9uU2F2ZShzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uKSB7XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0SWQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2F2ZS5lbWl0KHNlY3Rpb24pO1xuICB9XG4gIG9uQ2FuY2VsKHNlY3Rpb246IENvdXJzZVNlY3Rpb24pIHtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5jYW5jZWwuZW1pdChzZWN0aW9uKTtcbiAgfVxuICBvbkRlbGV0ZShzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uKSB7XG4gICAgdGhpcy5kZWxldGUuZW1pdChzZWN0aW9uKTtcbiAgfVxuICBvbkVkaXQoc2VjdGlvbjogQ291cnNlU2VjdGlvbikge1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZWRpdC5lbWl0KHNlY3Rpb24pO1xuICB9XG4gIG9uQWRkTGVjdHVyZShzZWN0aW9uOiBDb3Vyc2VTZWN0aW9uKSB7XG4gICAgdGhpcy5hZGRMZWN0dXJlLmVtaXQoc2VjdGlvbik7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3dcIj5cbiAgQGlmIChzZWN0aW9uKCkuaWQgIT09IGVkaXRJZCgpKSB7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiaXNFeHBhbmQgPSAhaXNFeHBhbmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0zXCI+XG4gICAgICAgICAgPHNwYW4+e3sgc2VjdGlvbigpLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibWF4LXctOCBtYXgtaC04ICFwLTFcIiAoY2xpY2spPVwib25FZGl0KHNlY3Rpb24oKSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibWF4LXctOCBtYXgtaC04ICFwLTFcIiAoY2xpY2spPVwib25EZWxldGUoc2VjdGlvbigpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibWF4LXctOCBtYXgtaC04ICFwLTFcIj5cbiAgICAgICAgICA8bWF0LWljb24+e3sgaXNFeHBhbmQgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9fTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGlzRXhwYW5kKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHJvbGF0ZWNoLWlucHV0IFsodGl0bGUpXT1cInNlY3Rpb24oKS50aXRsZVwiIHBsYWNlaG9sZGVyPVwi5qCH6aKYXCI+PC9yb2xhdGVjaC1pbnB1dD5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBwLTMgZ2FwLTNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWF4LWgtOFwiIChjbGljayk9XCJvbkNhbmNlbChzZWN0aW9uKCkpXCI+5Y+W5raIPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwibWF4LWgtOFwiIChjbGljayk9XCJvblNhdmUoc2VjdGlvbigpKVwiPuS/neWtmDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
@@ -1,112 +0,0 @@
1
- import { Component, ElementRef, PLATFORM_ID, inject, input, model, output, viewChild } from '@angular/core';
2
- import { MatDividerModule } from '@angular/material/divider';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import { FormsModule } from '@angular/forms';
5
- import { MatIconModule } from '@angular/material/icon';
6
- import { AngularComponentsModule, InputComponent } from '@rolatech/angular-components';
7
- import { AngularCommonModule, DurationPipe } from '@rolatech/angular-common';
8
- import { DialogService } from '@rolatech/angular-services';
9
- import { CourseSectionLectureVideoDialogComponent } from '../course-section-lecture-video-dialog/course-section-lecture-video-dialog.component';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/material/icon";
12
- import * as i2 from "@angular/material/button";
13
- import * as i3 from "@angular/material/progress-bar";
14
- export class CourseSectionLectureItemComponent {
15
- constructor() {
16
- this.platformId = inject(PLATFORM_ID);
17
- this.el = inject(ElementRef);
18
- this.dialogService = inject(DialogService);
19
- this.myVideo = viewChild('video');
20
- this.progress = input(0);
21
- this.lecture = input.required();
22
- this.actions = input(true);
23
- this.hasUnsaved = input(false);
24
- this.editId = model();
25
- this.save = output();
26
- this.cancel = output();
27
- this.delete = output();
28
- this.edit = output();
29
- this.mediaEdit = output();
30
- this.thumbnailUpload = output();
31
- this.upload = output();
32
- this.deleteMedia = output();
33
- this.editing = false;
34
- }
35
- ngOnInit() { }
36
- onSave(lecture) {
37
- this.editing = false;
38
- this.editId.set(null);
39
- this.save.emit(lecture);
40
- }
41
- onCancel(lecture) {
42
- this.editing = false;
43
- this.editId.set(null);
44
- this.cancel.emit(lecture);
45
- }
46
- onDelete(lecture) {
47
- this.delete.emit(lecture);
48
- }
49
- onEdit(lecture) {
50
- this.editId.set(lecture.id);
51
- this.editing = true;
52
- this.edit.emit(lecture);
53
- }
54
- onMediaEdit(lecture) {
55
- this.editId.set(lecture.id);
56
- this.editing = true;
57
- // this.mediaEdit.emit(lecture);
58
- const options = {
59
- title: '编辑视频',
60
- cancelText: '取消',
61
- confirmText: '确定',
62
- data: this.lecture(),
63
- width: '80vw',
64
- maxWidth: '80vw',
65
- height: '100%',
66
- component: CourseSectionLectureVideoDialogComponent,
67
- };
68
- this.dialogService.open(options);
69
- this.dialogService.confirmed().subscribe({
70
- next: (res) => {
71
- if (res) {
72
- const data = {
73
- name: res,
74
- };
75
- }
76
- },
77
- });
78
- }
79
- onVideoThumbnailUpload(video) {
80
- this.thumbnailUpload.emit(video);
81
- }
82
- onUpload(id, data) {
83
- this.lecture().isUploading = true;
84
- this.upload.emit({ id, data });
85
- }
86
- onDeleteMedia(data) {
87
- this.deleteMedia.emit(data);
88
- }
89
- onLoadedMetadata(event) {
90
- if (this.lecture().item.duration) {
91
- return;
92
- }
93
- const videoElement = event.target;
94
- this.lecture().item.duration = videoElement.duration;
95
- }
96
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionLectureItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionLectureItemComponent, isStandalone: true, selector: "rolatech-course-section-lecture-item", inputs: { progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, lecture: { classPropertyName: "lecture", publicName: "lecture", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, hasUnsaved: { classPropertyName: "hasUnsaved", publicName: "hasUnsaved", isSignal: true, isRequired: false, transformFunction: null }, editId: { classPropertyName: "editId", publicName: "editId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editId: "editIdChange", save: "save", cancel: "cancel", delete: "delete", edit: "edit", mediaEdit: "mediaEdit", thumbnailUpload: "thumbnailUpload", upload: "upload", deleteMedia: "deleteMedia" }, viewQueries: [{ propertyName: "myVideo", first: true, predicate: ["video"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col grow p-2\">\n @if (lecture().id !== editId()) {\n <div class=\"w-full flex gap-3 p-3 items-center\">\n <span>{{ lecture().title }}</span>\n <button mat-icon-button (click)=\"onEdit(lecture()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete(lecture()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <rolatech-input [(title)]=\"lecture().title\" placeholder=\"\u6807\u9898\"></rolatech-input>\n <div class=\"w-full flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onCancel(lecture())\">\u53D6\u6D88</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(lecture())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n\n <div>\n @if (lecture().item) {\n <div class=\"flex flex-row p-2 gap-3\">\n <div class=\"bg-black h-fit\">\n <video\n id=\"video\"\n #video\n [src]=\"lecture().item.url\"\n class=\"w-32 aspect-video\"\n (loadedmetadata)=\"onLoadedMetadata($event)\"\n [poster]=\"lecture().item.thumbnail\"\n ></video>\n </div>\n <div class=\"flex flex-col justify-between w-full\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center w-full px-2\">\n <span>\u89C6\u9891\u5185\u5BB9</span>\n </div>\n @if (lecture().isUploading) {\n <div>\n <span> {{ lecture().item.progress }}%</span>\n </div>\n }\n </div>\n <div class=\"flex justify-between items-center\">\n <div>\n <button mat-button class=\"max-h-8\" (click)=\"onMediaEdit(lecture().item); $event.stopPropagation()\">\n <mat-icon>edit</mat-icon>\n <span>\u7F16\u8F91</span>\n </button>\n <button mat-button class=\"max-h-8\" (click)=\"onDeleteMedia(lecture().item); $event.stopPropagation()\">\n <mat-icon>delete</mat-icon>\n <span>\u5220\u9664</span>\n </button>\n </div>\n <div>\n <span>{{ lecture().item.duration | duration }}</span>\n </div>\n </div>\n </div>\n </div>\n @if (lecture().isUploading) {\n <div class=\"p-2\">\n <mat-progress-bar color=\"primary\" mode=\"determinate\" [value]=\"lecture().item.progress\"> </mat-progress-bar>\n </div>\n }\n } @else {\n @if (lecture().id !== editId()) {\n <div class=\"px-3\">\n <input\n class=\"ud-sr-only\"\n type=\"file\"\n accept=\".avi,.mpg,.mpeg,.flv,.mov,.m2v,.m4v,.mp4,.rm,.ram,.vob,.ogv,.webm,.wmv\"\n (change)=\"onUpload(lecture().id, $event)\"\n #fileInput\n />\n <div class=\"flex justify-between items-center\">\n <div>\u65E0\u89C6\u9891\u6587\u4EF6</div>\n <button mat-flat-button class=\"max-h-8\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u89C6\u9891</button>\n </div>\n </div>\n }\n }\n </div>\n @if (!hasUnsaved) {\n <ng-content></ng-content>\n }\n</div>\n", styles: [".ud-sr-only{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: DurationPipe, name: "duration" }, { kind: "component", type: InputComponent, selector: "rolatech-input", inputs: ["title", "placeholder"], outputs: ["titleChange"] }] }); }
98
- }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionLectureItemComponent, decorators: [{
100
- type: Component,
101
- args: [{ selector: 'rolatech-course-section-lecture-item', standalone: true, imports: [
102
- MatIconModule,
103
- AngularCommonModule,
104
- FormsModule,
105
- MatButtonModule,
106
- MatDividerModule,
107
- AngularComponentsModule,
108
- DurationPipe,
109
- InputComponent,
110
- ], template: "<div class=\"flex flex-col grow p-2\">\n @if (lecture().id !== editId()) {\n <div class=\"w-full flex gap-3 p-3 items-center\">\n <span>{{ lecture().title }}</span>\n <button mat-icon-button (click)=\"onEdit(lecture()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button (click)=\"onDelete(lecture()); $event.stopPropagation()\" class=\"max-w-8 max-h-8 !p-1\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n } @else {\n <div class=\"flex flex-col justify-between items-center\">\n <rolatech-input [(title)]=\"lecture().title\" placeholder=\"\u6807\u9898\"></rolatech-input>\n <div class=\"w-full flex flex-row justify-end p-3 gap-3\">\n <button mat-button class=\"max-h-8\" (click)=\"onCancel(lecture())\">\u53D6\u6D88</button>\n <button mat-flat-button class=\"max-h-8\" (click)=\"onSave(lecture())\">\u4FDD\u5B58</button>\n </div>\n </div>\n }\n\n <div>\n @if (lecture().item) {\n <div class=\"flex flex-row p-2 gap-3\">\n <div class=\"bg-black h-fit\">\n <video\n id=\"video\"\n #video\n [src]=\"lecture().item.url\"\n class=\"w-32 aspect-video\"\n (loadedmetadata)=\"onLoadedMetadata($event)\"\n [poster]=\"lecture().item.thumbnail\"\n ></video>\n </div>\n <div class=\"flex flex-col justify-between w-full\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center w-full px-2\">\n <span>\u89C6\u9891\u5185\u5BB9</span>\n </div>\n @if (lecture().isUploading) {\n <div>\n <span> {{ lecture().item.progress }}%</span>\n </div>\n }\n </div>\n <div class=\"flex justify-between items-center\">\n <div>\n <button mat-button class=\"max-h-8\" (click)=\"onMediaEdit(lecture().item); $event.stopPropagation()\">\n <mat-icon>edit</mat-icon>\n <span>\u7F16\u8F91</span>\n </button>\n <button mat-button class=\"max-h-8\" (click)=\"onDeleteMedia(lecture().item); $event.stopPropagation()\">\n <mat-icon>delete</mat-icon>\n <span>\u5220\u9664</span>\n </button>\n </div>\n <div>\n <span>{{ lecture().item.duration | duration }}</span>\n </div>\n </div>\n </div>\n </div>\n @if (lecture().isUploading) {\n <div class=\"p-2\">\n <mat-progress-bar color=\"primary\" mode=\"determinate\" [value]=\"lecture().item.progress\"> </mat-progress-bar>\n </div>\n }\n } @else {\n @if (lecture().id !== editId()) {\n <div class=\"px-3\">\n <input\n class=\"ud-sr-only\"\n type=\"file\"\n accept=\".avi,.mpg,.mpeg,.flv,.mov,.m2v,.m4v,.mp4,.rm,.ram,.vob,.ogv,.webm,.wmv\"\n (change)=\"onUpload(lecture().id, $event)\"\n #fileInput\n />\n <div class=\"flex justify-between items-center\">\n <div>\u65E0\u89C6\u9891\u6587\u4EF6</div>\n <button mat-flat-button class=\"max-h-8\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u89C6\u9891</button>\n </div>\n </div>\n }\n }\n </div>\n @if (!hasUnsaved) {\n <ng-content></ng-content>\n }\n</div>\n", styles: [".ud-sr-only{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}\n"] }]
111
- }] });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb3Vyc2Uvc3JjL2xpYi9jb21wb25lbnRzL2NvdXJzZS1zZWN0aW9uLWxlY3R1cmUtaXRlbS9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtL2NvdXJzZS1zZWN0aW9uLWxlY3R1cmUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxzRkFBc0YsQ0FBQzs7Ozs7QUFtQmhKLE1BQU0sT0FBTyxpQ0FBaUM7SUFoQjlDO1FBaUJF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Qix1QkFBdUI7d0JBQ3ZCLFlBQVk7d0JBQ1osY0FBYztxQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBQTEFURk9STV9JRCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50c01vZHVsZSwgSW5wdXRDb21wb25lbnQgfSBmcm9tICdAcm9sYXRlY2gvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IEFuZ3VsYXJDb21tb25Nb2R1bGUsIER1cmF0aW9uUGlwZSB9IGZyb20gJ0Byb2xhdGVjaC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHJvbGF0ZWNoL2FuZ3VsYXItc2VydmljZXMnO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbkxlY3R1cmUsIENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbkxlY3R1cmVJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb3Vyc2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyb2xhdGVjaC1jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291cnNlLXNlY3Rpb24tbGVjdHVyZS1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIEFuZ3VsYXJDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUsXG4gICAgRHVyYXRpb25QaXBlLFxuICAgIElucHV0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vyc2VTZWN0aW9uTGVjdHVyZUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gIG15VmlkZW8gPSB2aWV3Q2hpbGQoJ3ZpZGVvJyk7XG4gIHByb2dyZXNzID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgbGVjdHVyZSA9IGlucHV0LnJlcXVpcmVkPENvdXJzZVNlY3Rpb25MZWN0dXJlPigpO1xuICBhY3Rpb25zID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIGhhc1Vuc2F2ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGVkaXRJZCA9IG1vZGVsPGFueT4oKTtcblxuICBzYXZlID0gb3V0cHV0PENvdXJzZVNlY3Rpb25MZWN0dXJlPigpO1xuICBjYW5jZWwgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbkxlY3R1cmU+KCk7XG4gIGRlbGV0ZSA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZT4oKTtcbiAgZWRpdCA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZT4oKTtcbiAgbWVkaWFFZGl0ID0gb3V0cHV0PENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW8+KCk7XG4gIHRodW1ibmFpbFVwbG9hZCA9IG91dHB1dDxDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvPigpO1xuICB1cGxvYWQgPSBvdXRwdXQ8eyBpZDogYW55OyBkYXRhOiBGb3JtRGF0YSB8IG51bGwgfT4oKTtcbiAgZGVsZXRlTWVkaWEgPSBvdXRwdXQ8Q291cnNlU2VjdGlvbkxlY3R1cmVJdGVtPigpO1xuXG4gIGVkaXRpbmcgPSBmYWxzZTtcbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIG9uU2F2ZShsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLnNhdmUuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbkNhbmNlbChsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZSkge1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KGxlY3R1cmUpO1xuICB9XG4gIG9uRGVsZXRlKGxlY3R1cmU6IENvdXJzZVNlY3Rpb25MZWN0dXJlKSB7XG4gICAgdGhpcy5kZWxldGUuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbkVkaXQobGVjdHVyZTogQ291cnNlU2VjdGlvbkxlY3R1cmUpIHtcbiAgICB0aGlzLmVkaXRJZC5zZXQobGVjdHVyZS5pZCk7XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXQuZW1pdChsZWN0dXJlKTtcbiAgfVxuICBvbk1lZGlhRWRpdChsZWN0dXJlOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvKSB7XG4gICAgdGhpcy5lZGl0SWQuc2V0KGxlY3R1cmUuaWQpO1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5tZWRpYUVkaXQuZW1pdChsZWN0dXJlKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgdGl0bGU6ICfnvJbovpHop4bpopEnLFxuICAgICAgY2FuY2VsVGV4dDogJ+WPlua2iCcsXG4gICAgICBjb25maXJtVGV4dDogJ+ehruWumicsXG4gICAgICBkYXRhOiB0aGlzLmxlY3R1cmUoKSxcbiAgICAgIHdpZHRoOiAnODB2dycsXG4gICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBjb21wb25lbnQ6IENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQsXG4gICAgfTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihvcHRpb25zKTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybWVkKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBuYW1lOiByZXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBvblZpZGVvVGh1bWJuYWlsVXBsb2FkKHZpZGVvOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZVZpZGVvKSB7XG4gICAgdGhpcy50aHVtYm5haWxVcGxvYWQuZW1pdCh2aWRlbyk7XG4gIH1cbiAgb25VcGxvYWQoaWQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgdGhpcy5sZWN0dXJlKCkuaXNVcGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy51cGxvYWQuZW1pdCh7IGlkLCBkYXRhIH0pO1xuICB9XG4gIG9uRGVsZXRlTWVkaWEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5kZWxldGVNZWRpYS5lbWl0KGRhdGEpO1xuICB9XG4gIG9uTG9hZGVkTWV0YWRhdGEoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVjdHVyZSgpLml0ZW0uZHVyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxWaWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5sZWN0dXJlKCkuaXRlbS5kdXJhdGlvbiA9IHZpZGVvRWxlbWVudC5kdXJhdGlvbjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ3JvdyBwLTJcIj5cbiAgQGlmIChsZWN0dXJlKCkuaWQgIT09IGVkaXRJZCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGdhcC0zIHAtMyBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuPnt7IGxlY3R1cmUoKS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkVkaXQobGVjdHVyZSgpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgY2xhc3M9XCJtYXgtdy04IG1heC1oLTggIXAtMVwiPlxuICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkRlbGV0ZShsZWN0dXJlKCkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjbGFzcz1cIm1heC13LTggbWF4LWgtOCAhcC0xXCI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxyb2xhdGVjaC1pbnB1dCBbKHRpdGxlKV09XCJsZWN0dXJlKCkudGl0bGVcIiBwbGFjZWhvbGRlcj1cIuagh+mimFwiPjwvcm9sYXRlY2gtaW5wdXQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgcC0zIGdhcC0zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cIm1heC1oLThcIiAoY2xpY2spPVwib25DYW5jZWwobGVjdHVyZSgpKVwiPuWPlua2iDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cIm1heC1oLThcIiAoY2xpY2spPVwib25TYXZlKGxlY3R1cmUoKSlcIj7kv53lrZg8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdj5cbiAgICBAaWYgKGxlY3R1cmUoKS5pdGVtKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBwLTIgZ2FwLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLWJsYWNrIGgtZml0XCI+XG4gICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICBpZD1cInZpZGVvXCJcbiAgICAgICAgICAgICN2aWRlb1xuICAgICAgICAgICAgW3NyY109XCJsZWN0dXJlKCkuaXRlbS51cmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LTMyIGFzcGVjdC12aWRlb1wiXG4gICAgICAgICAgICAobG9hZGVkbWV0YWRhdGEpPVwib25Mb2FkZWRNZXRhZGF0YSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwb3N0ZXJdPVwibGVjdHVyZSgpLml0ZW0udGh1bWJuYWlsXCJcbiAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciB3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICA8c3Bhbj7op4bpopHlhoXlrrk8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobGVjdHVyZSgpLmlzVXBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IGxlY3R1cmUoKS5pdGVtLnByb2dyZXNzIH19JTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWF4LWgtOFwiIChjbGljayk9XCJvbk1lZGlhRWRpdChsZWN0dXJlKCkuaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj7nvJbovpE8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJtYXgtaC04XCIgKGNsaWNrKT1cIm9uRGVsZXRlTWVkaWEobGVjdHVyZSgpLml0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj7liKDpmaQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3Bhbj57eyBsZWN0dXJlKCkuaXRlbS5kdXJhdGlvbiB8IGR1cmF0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGxlY3R1cmUoKS5pc1VwbG9hZGluZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImRldGVybWluYXRlXCIgW3ZhbHVlXT1cImxlY3R1cmUoKS5pdGVtLnByb2dyZXNzXCI+IDwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAaWYgKGxlY3R1cmUoKS5pZCAhPT0gZWRpdElkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInB4LTNcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwidWQtc3Itb25seVwiXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBhY2NlcHQ9XCIuYXZpLC5tcGcsLm1wZWcsLmZsdiwubW92LC5tMnYsLm00diwubXA0LC5ybSwucmFtLC52b2IsLm9ndiwud2VibSwud212XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQobGVjdHVyZSgpLmlkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+5peg6KeG6aKR5paH5Lu2PC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cIm1heC1oLThcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj7kuIrkvKDop4bpopE8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmICghaGFzVW5zYXZlZCkge1xuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -1,111 +0,0 @@
1
- import { Component, ElementRef, Inject, PLATFORM_ID, inject, output } from '@angular/core';
2
- import { FormsModule } from '@angular/forms';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import { MatDialogClose, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
5
- import { MatDividerModule } from '@angular/material/divider';
6
- import { MatIconModule } from '@angular/material/icon';
7
- import { MatStepperModule } from '@angular/material/stepper';
8
- import { ScheduleItemComponent } from '../schedule-item/schedule-item.component';
9
- import { isPlatformBrowser } from '@angular/common';
10
- import { MatSnackBar } from '@angular/material/snack-bar';
11
- import { MatCheckboxModule } from '@angular/material/checkbox';
12
- import { CourseSectionService, CourseService } from '../../services';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/material/dialog";
15
- import * as i2 from "@angular/material/icon";
16
- import * as i3 from "@angular/material/checkbox";
17
- export class CourseSectionLectureVideoDialogComponent {
18
- constructor(dialogRef, data) {
19
- this.dialogRef = dialogRef;
20
- this.data = data;
21
- this.thumbnailUpload = output();
22
- this.courseService = inject(CourseService);
23
- this.courseSectionService = inject(CourseSectionService);
24
- this.snackBar = inject(MatSnackBar);
25
- this.platformId = inject(PLATFORM_ID);
26
- this.el = inject(ElementRef);
27
- this.lecture = data.data;
28
- }
29
- ngAfterViewInit() {
30
- this.initPlayer(this.lecture.item.url, this.lecture.item.thumbnail);
31
- }
32
- close() {
33
- this.dialogRef.close();
34
- }
35
- initPlayer(url, thumbnail) {
36
- if (!isPlatformBrowser(this.platformId)) {
37
- return;
38
- }
39
- // 'https://cos-video-1258344699.cos.ap-guangzhou.tencentcos.cn/test.mp4',
40
- if (!this.player) {
41
- const playerContainer = this.el.nativeElement.querySelector('#dplayer');
42
- this.player = new DPlayer({
43
- container: playerContainer,
44
- screenshot: true,
45
- preload: 'metadata',
46
- video: {
47
- url: url,
48
- pic: thumbnail,
49
- },
50
- });
51
- // this.player.on('loadedmetadata', () => {
52
- // });
53
- }
54
- }
55
- ngOnInit() { }
56
- ngOnDestroy() {
57
- if (this.player) {
58
- this.player.destroy();
59
- }
60
- }
61
- onThumbnailUpload(event) {
62
- const file = event.target.files[0];
63
- if (file) {
64
- const reader = new FileReader();
65
- reader.readAsDataURL(file);
66
- reader.onload = () => {
67
- this.mediaSrc = reader.result;
68
- const formData = new FormData();
69
- formData.append('file', file);
70
- this.courseService.uploadLectureVideoThumbnail(this.lecture.item.id, formData).subscribe({
71
- next: (res) => {
72
- this.lecture.item = res.data;
73
- this.snackBar.open('上传成功');
74
- this.player.switchVideo({
75
- url: this.lecture.item.url,
76
- pic: res.data.thumbnail,
77
- });
78
- },
79
- });
80
- };
81
- reader.onerror = (error) => { };
82
- }
83
- }
84
- onPreviewChange(event) {
85
- this.courseSectionService.canBePreviewed(this.lecture.item.id, { canBePreviewed: event.checked }).subscribe({
86
- next: (res) => {
87
- this.lecture.item.canBePreviewed = res.data.canBePreviewed;
88
- // this.lecture = res.data;
89
- },
90
- });
91
- }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionLectureVideoDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: CourseSectionLectureVideoDialogComponent, isStandalone: true, selector: "rolatech-course-section-lecture-video-dialog", outputs: { thumbnailUpload: "thumbnailUpload" }, ngImport: i0, template: "<div class=\"flex flex-col-reverse md:flex-row justify-between h-full gap-3\">\n <div class=\"w-full md:w-1/2\">\n <div>\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u5C01\u9762 </span>\n <span class=\"text-sm\">\u4E00\u4E2A\u597D\u7684\u5C01\u9762\u53EF\u4EE5\u5F15\u8D77\u66F4\u591A\u7684\u5173\u6CE8</span>\n </div>\n\n <div class=\"flex gap-3\">\n <div\n class=\"p-3 w-36 flex flex-col items-center justify-center outline-dashed outline-1 rounded cursor-pointer\"\n (click)=\"fileInput.click()\"\n >\n <mat-icon>upload</mat-icon>\n <span class=\"text-sm\">\u4E0A\u4F20\u5C01\u9762</span>\n </div>\n <input type=\"file\" accept=\"image/*\" (change)=\"onThumbnailUpload($event)\" #fileInput style=\"display: none\" />\n @if (lecture.item.thumbnail) {\n <div class=\"aspect-video w-32 h-auto bg-black\">\n <img [src]=\"lecture.item.thumbnail\" class=\"aspect-video object-contain\" />\n </div>\n } @else {\n <div class=\"aspect-video w-32 h-auto\">\n <img [src]=\"mediaSrc\" class=\"aspect-video object-contain\" />\n </div>\n }\n </div>\n </div>\n <div class=\"mt-3\">\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u8BD5\u770B\u5185\u5BB9 </span>\n <span class=\"text-sm\">\u5C11\u91CF\u7684\u8BD5\u770B\u5185\u5BB9, \u53EF\u4EE5\u589E\u52A0\u8D2D\u4E70\u7387</span>\n </div>\n <mat-checkbox color=\"primary\" (change)=\"onPreviewChange($event)\" [checked]=\"lecture.item.canBePreviewed\"\n >\u5141\u8BB8\u8BD5\u770B</mat-checkbox\n >\n </div>\n </div>\n <div class=\"w-full md:w-1/2\">\n @if (lecture) {\n <div>\n <div id=\"dplayer\" class=\"w-full h-auto aspect-video md:rounded-xl\"></div>\n </div>\n }\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatStepperModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] }); }
94
- }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CourseSectionLectureVideoDialogComponent, decorators: [{
96
- type: Component,
97
- args: [{ selector: 'rolatech-course-section-lecture-video-dialog', standalone: true, imports: [
98
- MatIconModule,
99
- MatDividerModule,
100
- FormsModule,
101
- MatStepperModule,
102
- ScheduleItemComponent,
103
- MatButtonModule,
104
- MatDialogClose,
105
- MatCheckboxModule,
106
- ], template: "<div class=\"flex flex-col-reverse md:flex-row justify-between h-full gap-3\">\n <div class=\"w-full md:w-1/2\">\n <div>\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u5C01\u9762 </span>\n <span class=\"text-sm\">\u4E00\u4E2A\u597D\u7684\u5C01\u9762\u53EF\u4EE5\u5F15\u8D77\u66F4\u591A\u7684\u5173\u6CE8</span>\n </div>\n\n <div class=\"flex gap-3\">\n <div\n class=\"p-3 w-36 flex flex-col items-center justify-center outline-dashed outline-1 rounded cursor-pointer\"\n (click)=\"fileInput.click()\"\n >\n <mat-icon>upload</mat-icon>\n <span class=\"text-sm\">\u4E0A\u4F20\u5C01\u9762</span>\n </div>\n <input type=\"file\" accept=\"image/*\" (change)=\"onThumbnailUpload($event)\" #fileInput style=\"display: none\" />\n @if (lecture.item.thumbnail) {\n <div class=\"aspect-video w-32 h-auto bg-black\">\n <img [src]=\"lecture.item.thumbnail\" class=\"aspect-video object-contain\" />\n </div>\n } @else {\n <div class=\"aspect-video w-32 h-auto\">\n <img [src]=\"mediaSrc\" class=\"aspect-video object-contain\" />\n </div>\n }\n </div>\n </div>\n <div class=\"mt-3\">\n <div class=\"py-3 flex flex-col\">\n <span class=\"text-lg font-bold\"> \u8BD5\u770B\u5185\u5BB9 </span>\n <span class=\"text-sm\">\u5C11\u91CF\u7684\u8BD5\u770B\u5185\u5BB9, \u53EF\u4EE5\u589E\u52A0\u8D2D\u4E70\u7387</span>\n </div>\n <mat-checkbox color=\"primary\" (change)=\"onPreviewChange($event)\" [checked]=\"lecture.item.canBePreviewed\"\n >\u5141\u8BB8\u8BD5\u770B</mat-checkbox\n >\n </div>\n </div>\n <div class=\"w-full md:w-1/2\">\n @if (lecture) {\n <div>\n <div id=\"dplayer\" class=\"w-full h-auto aspect-video md:rounded-xl\"></div>\n </div>\n }\n </div>\n</div>\n" }]
107
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
108
- type: Inject,
109
- args: [MAT_DIALOG_DATA]
110
- }] }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvdXJzZS9zcmMvbGliL2NvbXBvbmVudHMvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cvY291cnNlLXNlY3Rpb24tbGVjdHVyZS12aWRlby1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdB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QUM1QyxJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxpQkFBaUI7cUJBQ2xCOzswQkFrQkUsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBQTEFURk9STV9JRCwgaW5qZWN0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRTdGVwcGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XG5pbXBvcnQgeyBTY2hlZHVsZUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zY2hlZHVsZS1pdGVtL3NjaGVkdWxlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgQ291cnNlU2VjdGlvbkxlY3R1cmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvdXJzZVNlY3Rpb25TZXJ2aWNlLCBDb3Vyc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZGVjbGFyZSBjb25zdCBEUGxheWVyOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JvbGF0ZWNoLWNvdXJzZS1zZWN0aW9uLWxlY3R1cmUtdmlkZW8tZGlhbG9nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRTdGVwcGVyTW9kdWxlLFxuICAgIFNjaGVkdWxlSXRlbUNvbXBvbmVudCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3Vyc2Utc2VjdGlvbi1sZWN0dXJlLXZpZGVvLWRpYWxvZy5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIGxlY3R1cmUhOiBDb3Vyc2VTZWN0aW9uTGVjdHVyZTtcbiAgdGh1bWJuYWlsVXBsb2FkID0gb3V0cHV0PGFueT4oKTtcbiAgY291cnNlU2VydmljZSA9IGluamVjdChDb3Vyc2VTZXJ2aWNlKTtcbiAgY291cnNlU2VjdGlvblNlcnZpY2UgPSBpbmplY3QoQ291cnNlU2VjdGlvblNlcnZpY2UpO1xuXG4gIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcbiAgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBtZWRpYVNyYzogYW55O1xuICBwbGF5ZXI6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvdXJzZVNlY3Rpb25MZWN0dXJlVmlkZW9EaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICApIHtcbiAgICB0aGlzLmxlY3R1cmUgPSBkYXRhLmRhdGE7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFBsYXllcih0aGlzLmxlY3R1cmUuaXRlbS51cmwsIHRoaXMubGVjdHVyZS5pdGVtLnRodW1ibmFpbCk7XG4gIH1cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuICBpbml0UGxheWVyKHVybDogc3RyaW5nLCB0aHVtYm5haWw/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gJ2h0dHBzOi8vY29zLXZpZGVvLTEyNTgzNDQ2OTkuY29zLmFwLWd1YW5nemhvdS50ZW5jZW50Y29zLmNuL3Rlc3QubXA0JyxcbiAgICBpZiAoIXRoaXMucGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJDb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2RwbGF5ZXInKTtcbiAgICAgIHRoaXMucGxheWVyID0gbmV3IERQbGF5ZXIoe1xuICAgICAgICBjb250YWluZXI6IHBsYXllckNvbnRhaW5lcixcbiAgICAgICAgc2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgcHJlbG9hZDogJ21ldGFkYXRhJyxcbiAgICAgICAgdmlkZW86IHtcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICBwaWM6IHRodW1ibmFpbCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcy5wbGF5ZXIub24oJ2xvYWRlZG1ldGFkYXRhJywgKCkgPT4ge1xuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge31cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGxheWVyKSB7XG4gICAgICB0aGlzLnBsYXllci5kZXN0cm95KCk7XG4gICAgfVxuICB9XG4gIG9uVGh1bWJuYWlsVXBsb2FkKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm1lZGlhU3JjID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG4gICAgICAgIHRoaXMuY291cnNlU2VydmljZS51cGxvYWRMZWN0dXJlVmlkZW9UaHVtYm5haWwodGhpcy5sZWN0dXJlLml0ZW0uaWQsIGZvcm1EYXRhKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGVjdHVyZS5pdGVtID0gcmVzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ+S4iuS8oOaIkOWKnycpO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuc3dpdGNoVmlkZW8oe1xuICAgICAgICAgICAgICB1cmw6IHRoaXMubGVjdHVyZS5pdGVtLnVybCxcbiAgICAgICAgICAgICAgcGljOiByZXMuZGF0YS50aHVtYm5haWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge307XG4gICAgfVxuICB9XG4gIG9uUHJldmlld0NoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jb3Vyc2VTZWN0aW9uU2VydmljZS5jYW5CZVByZXZpZXdlZCh0aGlzLmxlY3R1cmUuaXRlbS5pZCwgeyBjYW5CZVByZXZpZXdlZDogZXZlbnQuY2hlY2tlZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmxlY3R1cmUuaXRlbS5jYW5CZVByZXZpZXdlZCA9IHJlcy5kYXRhLmNhbkJlUHJldmlld2VkO1xuICAgICAgICAvLyB0aGlzLmxlY3R1cmUgPSByZXMuZGF0YTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sLXJldmVyc2UgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGgtZnVsbCBnYXAtM1wiPlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOnctMS8yXCI+XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweS0zIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPiDlsIHpnaIgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc21cIj7kuIDkuKrlpb3nmoTlsIHpnaLlj6/ku6XlvJXotbfmm7TlpJrnmoTlhbPms6g8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicC0zIHctMzYgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3V0bGluZS1kYXNoZWQgb3V0bGluZS0xIHJvdW5kZWQgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24+dXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc21cIj7kuIrkvKDlsIHpnaI8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgKGNoYW5nZSk9XCJvblRodW1ibmFpbFVwbG9hZCgkZXZlbnQpXCIgI2ZpbGVJbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiAvPlxuICAgICAgICBAaWYgKGxlY3R1cmUuaXRlbS50aHVtYm5haWwpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNwZWN0LXZpZGVvIHctMzIgaC1hdXRvIGJnLWJsYWNrXCI+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwibGVjdHVyZS5pdGVtLnRodW1ibmFpbFwiIGNsYXNzPVwiYXNwZWN0LXZpZGVvIG9iamVjdC1jb250YWluXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFzcGVjdC12aWRlbyB3LTMyIGgtYXV0b1wiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhU3JjXCIgY2xhc3M9XCJhc3BlY3QtdmlkZW8gb2JqZWN0LWNvbnRhaW5cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInB5LTMgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1ib2xkXCI+IOivleeci+WGheWuuSA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPuWwkemHj+eahOivleeci+WGheWuuSwg5Y+v5Lul5aKe5Yqg6LSt5Lmw546HPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiIChjaGFuZ2UpPVwib25QcmV2aWV3Q2hhbmdlKCRldmVudClcIiBbY2hlY2tlZF09XCJsZWN0dXJlLml0ZW0uY2FuQmVQcmV2aWV3ZWRcIlxuICAgICAgICA+5YWB6K646K+V55yLPC9tYXQtY2hlY2tib3hcbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWQ6dy0xLzJcIj5cbiAgICBAaWYgKGxlY3R1cmUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJkcGxheWVyXCIgY2xhc3M9XCJ3LWZ1bGwgaC1hdXRvIGFzcGVjdC12aWRlbyBtZDpyb3VuZGVkLXhsXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=