@myrmidon/cadmus-part-general-ui 14.0.2 → 14.0.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myrmidon-cadmus-part-general-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-date/asserted-historical-date.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-date/asserted-historical-date.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part/asserted-historical-dates-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part/asserted-historical-dates-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bib-authors-editor/bib-authors-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bib-authors-editor/bib-authors-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-entry/bibliography-entry.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-entry/bibliography-entry.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part/bibliography-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part/bibliography-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part/categories-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part/categories-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment/chronology-fragment.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment/chronology-fragment.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part/chronotopes-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part/chronotopes-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-editor/comment-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-editor/comment-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part/decorated-counts-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part/decorated-counts-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part/district-location-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part/district-location-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part/doc-references-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part/doc-references-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part/external-ids-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part/external-ids-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/related-entity/related-entity.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/related-entity/related-entity.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-event-editor/historical-event-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-event-editor/historical-event-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part/historical-date-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part/historical-date-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part/historical-events-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part/historical-events-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keyword/index-keyword.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keyword/index-keyword.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part/index-keywords-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part/index-keywords-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part/keywords-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part/keywords-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part/metadata-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part/metadata-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part/names-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part/names-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part/note-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part/note-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part/physical-measurements-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part/physical-measurements-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part/physical-states-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part/physical-states-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part/pin-links-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part/pin-links-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment/pin-links-fragment.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment/pin-links-fragment.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/text-tile/text-tile.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/text-tile/text-tile.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-data/tiled-data.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-data/tiled-data.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part/tiled-text-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part/tiled-text-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part/token-text-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part/token-text-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/myrmidon-cadmus-part-general-ui.ts"],"sourcesContent":["import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\n/**\r\n * The AssertedHistoricalDates part model.\r\n */\r\nexport interface AssertedHistoricalDatesPart extends Part {\r\n dates: AssertedDate[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the AssertedHistoricalDatesPart type.\r\n */\r\nexport const ASSERTED_HISTORICAL_DATES_PART_TYPEID =\r\n 'it.vedph.asserted-historical-dates';\r\n\r\n/**\r\n * JSON schema for the AssertedHistoricalDates part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const ASSERTED_HISTORICAL_DATES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'AssertedHistoricalDatesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'dates',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n dates: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","\r\nimport { Component, effect, input, model, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n HistoricalDateComponent,\r\n HistoricalDateModel,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n@Component({\r\n selector: 'cadmus-asserted-historical-date',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n HistoricalDateComponent,\r\n AssertionComponent\r\n],\r\n templateUrl: './asserted-historical-date.component.html',\r\n styleUrl: './asserted-historical-date.component.css',\r\n})\r\nexport class AssertedHistoricalDateComponent {\r\n public readonly date = model<AssertedDate>();\r\n public readonly dateCancel = output();\r\n\r\n public tag: FormControl<string | null>;\r\n public hd: FormControl<HistoricalDateModel | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-historical-dates-tags\r\n public tagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public assertionTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public docReferenceTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public docReferenceTagEntries = input<ThesaurusEntry[]>();\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.tag = formBuilder.control(null);\r\n this.hd = formBuilder.control(null, Validators.required);\r\n this.assertion = formBuilder.control(null);\r\n\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n hd: this.hd,\r\n assertion: this.assertion,\r\n });\r\n\r\n // when model changes, update form\r\n effect(() => {\r\n this.updateForm(this.date());\r\n });\r\n }\r\n\r\n private updateForm(date: AssertedDate | undefined | null): void {\r\n if (!date) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n this.tag.setValue(date.tag || null);\r\n this.hd.setValue(date ? { a: date.a, b: date.b } : null);\r\n this.assertion.setValue(date.assertion || null);\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getDate(): AssertedDate {\r\n return {\r\n tag: this.tag.value || undefined,\r\n a: this.hd.value!.a || undefined,\r\n b: this.hd.value?.b || undefined,\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n this.assertion.updateValueAndValidity();\r\n this.assertion.markAsDirty();\r\n }\r\n\r\n public onDateChange(date?: HistoricalDateModel): void {\r\n this.hd.setValue(date || null);\r\n this.hd.updateValueAndValidity();\r\n this.hd.markAsDirty();\r\n }\r\n\r\n public cancel(): void {\r\n this.dateCancel.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.date.set(this.getDate());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('max-length') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <div>\r\n <!-- date -->\r\n <cadmus-refs-historical-date\r\n [date]=\"hd.value || undefined\"\r\n (dateChange)=\"onDateChange($event)\"\r\n />\r\n <mat-expansion-panel>\r\n <!-- assertion -->\r\n <mat-expansion-panel-header>date assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assertionTagEntries()\"\r\n [refTypeEntries]=\"docReferenceTypeEntries()\"\r\n [refTagEntries]=\"docReferenceTagEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { FlatLookupPipe, NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n HistoricalDate,\r\n HistoricalDatePipe,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\nimport {\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID,\r\n AssertedHistoricalDatesPart,\r\n} from '../asserted-historical-dates-part';\r\nimport { AssertedHistoricalDateComponent } from '../asserted-historical-date/asserted-historical-date.component';\r\n\r\n/**\r\n * Asserted historical parts editor.\r\n * Thesauri: asserted-historical-dates-tags, assertion-tags,\r\n * doc-reference-types, doc-reference-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-asserted-historical-dates-part',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n // cadmus\r\n FlatLookupPipe,\r\n HistoricalDatePipe,\r\n AssertedHistoricalDateComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n templateUrl: './asserted-historical-dates-part.component.html',\r\n styleUrl: './asserted-historical-dates-part.component.css',\r\n})\r\nexport class AssertedHistoricalDatesPartComponent\r\n extends ModelEditorComponentBase<AssertedHistoricalDatesPart>\r\n implements OnInit\r\n{\r\n public maxDateCount = -1;\r\n public editedIndex: number;\r\n public edited: AssertedDate | undefined;\r\n\r\n // asserted-historical-dates-tags\r\n public tagEntries?: ThesaurusEntry[];\r\n // assertion-tags\r\n public assertionTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public docReferenceTypeEntries?: ThesaurusEntry[];\r\n // doc-reference-tags\r\n public docReferenceTagEntries?: ThesaurusEntry[];\r\n\r\n public dates: FormControl<AssertedDate[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.dates = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.dates,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'asserted-historical-dates-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assertionTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assertionTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.docReferenceTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.docReferenceTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.docReferenceTagEntries = thesauri[key].entries;\r\n } else {\r\n this.docReferenceTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: AssertedHistoricalDatesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this._appRepository\r\n ?.getSettingFor(part.typeId, part.roleId)\r\n .then((setting) => {\r\n this.maxDateCount = setting?.maxDateCount || -1;\r\n }) || -1;\r\n this.dates.setValue(part.dates || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<AssertedHistoricalDatesPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): AssertedHistoricalDatesPart {\r\n let part = this.getEditedPart(\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID\r\n ) as AssertedHistoricalDatesPart;\r\n part.dates = this.dates.value || [];\r\n return part;\r\n }\r\n\r\n public addDate(): void {\r\n // check max count if set\r\n if (this.maxDateCount > 0 && this.dates.value.length >= this.maxDateCount) {\r\n return;\r\n }\r\n\r\n const entry: AssertedDate = {\r\n a: { value: 0 },\r\n };\r\n this.editDate(entry, -1);\r\n }\r\n\r\n public editDate(entry: AssertedDate, index: number): void {\r\n this.editedIndex = index;\r\n this.edited = entry;\r\n }\r\n\r\n public closeDate(): void {\r\n this.editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveDate(entry: AssertedDate): void {\r\n // ensure that no date exists with the same value\r\n let newValue = new HistoricalDate(entry).getSortValue();\r\n if (\r\n this.dates.value\r\n .map((e) => new HistoricalDate(e).getSortValue())\r\n .includes(newValue)\r\n ) {\r\n return;\r\n }\r\n\r\n const entries = [...this.dates.value];\r\n if (this.editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this.editedIndex, 1, entry);\r\n }\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n this.closeDate();\r\n }\r\n\r\n public deleteDate(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete date?')\r\n .subscribe((yes: boolean | undefined) => {\r\n if (yes) {\r\n if (this.editedIndex === index) {\r\n this.closeDate();\r\n }\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n\r\n public moveDateUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.dates.value[index];\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n\r\n public moveDateDown(index: number): void {\r\n if (index + 1 >= this.dates.value.length) {\r\n return;\r\n }\r\n const entry = this.dates.value[index];\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Dates\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"maxDateCount > 0 && dates.value.length >= maxDateCount\"\r\n (click)=\"addDate()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> date\r\n </button>\r\n </div>\r\n @if (dates.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>date</th>\r\n <th>tag</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (date of dates.value; track date; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"date === edited\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this date\"\r\n (click)=\"editDate(date, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveDateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveDateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this date\"\r\n (click)=\"deleteDate(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ date | historicalDate }}</td>\r\n <td>{{ date.tag | flatLookup : tagEntries : \"id\" : \"value\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Date #</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-historical-date\r\n [date]=\"edited\"\r\n (dateChange)=\"saveDate($event!)\"\r\n [tagEntries]=\"tagEntries\"\r\n [assertionTagEntries]=\"assertionTagEntries\"\r\n [docReferenceTagEntries]=\"docReferenceTagEntries\"\r\n [docReferenceTypeEntries]=\"docReferenceTypeEntries\"\r\n (dateCancel)=\"closeDate()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Component, OnInit, input } from '@angular/core';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n FormGroup,\r\n FormArray,\r\n FormBuilder,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { BibAuthor } from '../bibliography-part';\r\n\r\n@Component({\r\n selector: 'cadmus-bib-authors-editor',\r\n templateUrl: './bib-authors-editor.component.html',\r\n styleUrls: ['./bib-authors-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButton,\r\n MatIcon,\r\n MatIconButton,\r\n MatTooltip,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n ],\r\n})\r\nexport class BibAuthorsEditorComponent implements OnInit {\r\n public readonly parentForm = input.required<FormGroup>();\r\n public readonly controlName = input<string>('authors');\r\n // bibliography-author-roles\r\n public readonly roleEntries = input<ThesaurusEntry[]>();\r\n\r\n public authors?: FormArray;\r\n\r\n constructor(private _formBuilder: FormBuilder) {}\r\n\r\n public ngOnInit(): void {\r\n this.authors = this.parentForm()?.controls[this.controlName()] as FormArray;\r\n }\r\n\r\n private getAuthorGroup(author?: BibAuthor): FormGroup {\r\n return this._formBuilder.group({\r\n lastName: this._formBuilder.control(author?.lastName, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n firstName: this._formBuilder.control(\r\n author?.firstName,\r\n Validators.maxLength(50)\r\n ),\r\n roleId: this._formBuilder.control(\r\n author?.roleId,\r\n Validators.maxLength(50)\r\n ),\r\n });\r\n }\r\n\r\n public addAuthor(item?: BibAuthor): void {\r\n this.authors!.push(this.getAuthorGroup(item));\r\n }\r\n\r\n public addAuthorBelow(index: number): void {\r\n this.authors!.insert(index + 1, this.getAuthorGroup());\r\n }\r\n\r\n public removeAuthor(index: number): void {\r\n this.authors!.removeAt(index);\r\n }\r\n\r\n public moveAuthorUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const item = this.authors!.controls[index];\r\n this.authors!.removeAt(index);\r\n this.authors!.insert(index - 1, item);\r\n }\r\n\r\n public moveAuthorDown(index: number): void {\r\n if (index + 1 >= this.authors!.length) {\r\n return;\r\n }\r\n const item = this.authors!.controls[index];\r\n this.authors!.removeAt(index);\r\n this.authors!.insert(index + 1, item);\r\n }\r\n\r\n public clearAuthors(): void {\r\n for (let i = this.authors!.length - 1; i > -1; i--) {\r\n this.authors!.removeAt(i);\r\n }\r\n }\r\n}\r\n","@if (parentForm()) {\n<form [formGroup]=\"parentForm()\">\n <div [formArrayName]=\"controlName()\">\n @if (!authors || !authors.length) {\n <div style=\"margin: 8px 0\">\n <button\n type=\"button\"\n mat-flat-button\n (click)=\"addAuthor()\"\n class=\"mat-primary\"\n >\n <mat-icon>add_circle</mat-icon>\n author\n </button>\n </div>\n } @for ( item of authors?.controls; track item; let i = $index; let first =\n $first; let last = $last) {\n <div>\n <!-- child form -->\n <div [formGroupName]=\"i\" class=\"form-row\">\n <!-- child actions -->\n <div>\n {{ i + 1 }}.\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this author\"\n (click)=\"removeAuthor(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Add author below\"\n (click)=\"addAuthorBelow(i)\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move author up\"\n (click)=\"moveAuthorUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move author down\"\n (click)=\"moveAuthorDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <!-- child controls -->\n <!-- last -->\n <mat-form-field>\n <mat-label>last name</mat-label>\n <input matInput formControlName=\"lastName\" spellcheck=\"false\" />\n @if ( item.get('lastName')?.hasError('required') &&\n (item.get('lastName')?.dirty || item.get('lastName')?.touched) ) {\n <mat-error>last name required</mat-error>\n } @if ( item.get('lastName')?.hasError('maxLength') &&\n (item.get('lastName')?.dirty || item.get('lastName')?.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <!-- first -->\n <mat-form-field>\n <mat-label>first name</mat-label>\n <input matInput formControlName=\"firstName\" spellcheck=\"false\" />\n <mat-error>too long</mat-error>\n </mat-form-field>\n <!-- roleId -->\n @if (roleEntries()?.length) {\n <mat-form-field>\n <mat-label>role</mat-label>\n <mat-select formControlName=\"roleId\">\n <mat-option [value]=\"null\">(no role)</mat-option>\n @for (e of roleEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field>\n <mat-label>role</mat-label>\n <input matInput formControlName=\"roleId\" spellcheck=\"false\" />\n <mat-error>too long</mat-error>\n </mat-form-field>\n }\n </div>\n </div>\n }\n </div>\n</form>\n}\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n model,\r\n effect,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n FormGroup,\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n FormArray,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatError,\r\n MatSuffix,\r\n} from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport {\r\n MatDatepickerInput,\r\n MatDatepickerToggle,\r\n MatDatepicker,\r\n} from '@angular/material/datepicker';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { Keyword } from '../keywords-part';\r\nimport { BibEntry, BibAuthor } from '../bibliography-part';\r\nimport { BibAuthorsEditorComponent } from '../bib-authors-editor/bib-authors-editor.component';\r\n\r\n/**\r\n * Bibliography entry editor used by BibliographyPartComponent to edit a single\r\n * entry in the bibliography part.\r\n */\r\n@Component({\r\n selector: 'cadmus-bibliography-entry',\r\n templateUrl: './bibliography-entry.component.html',\r\n styleUrls: ['./bibliography-entry.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n BibAuthorsEditorComponent,\r\n MatDatepickerInput,\r\n MatDatepickerToggle,\r\n MatSuffix,\r\n MatDatepicker,\r\n MatButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatIconButton,\r\n ],\r\n})\r\nexport class BibliographyEntryComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n\r\n public readonly entry = model<BibEntry>();\r\n\r\n // bibliography-languages\r\n public readonly langEntries = input<ThesaurusEntry[]>();\r\n // bibliography-types\r\n public readonly typeEntries = input<ThesaurusEntry[]>();\r\n // bibliography-tags\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n // bibliography-author-roles\r\n public readonly roleEntries = input<ThesaurusEntry[]>();\r\n\r\n public readonly editorClose = output();\r\n\r\n // form - general\r\n public key: FormControl<string | null>;\r\n public type: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public language: FormControl<string | null>;\r\n public authors: FormArray;\r\n public title: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n // form - container\r\n public contributors: FormArray;\r\n public container: FormControl<string | null>;\r\n public edition: FormControl<number | null>;\r\n public number: FormControl<string | null>;\r\n public publisher: FormControl<string | null>;\r\n public placePub: FormControl<string | null>;\r\n public yearPub: FormControl<number | null>;\r\n public location: FormControl<string | null>;\r\n public accessDate: FormControl<Date | null>;\r\n public firstPage: FormControl<number | null>;\r\n public lastPage: FormControl<number | null>;\r\n // form - keywords\r\n public keywords: Keyword[];\r\n public keyLanguage: FormControl<string | null>;\r\n public keyValue: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n\r\n public form: FormGroup;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n // form - general\r\n this.key = _formBuilder.control(null, Validators.maxLength(300));\r\n this.type = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.tag = _formBuilder.control(null, Validators.maxLength(50));\r\n this.language = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.authors = _formBuilder.array([], Validators.required);\r\n this.title = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.note = _formBuilder.control(null, Validators.maxLength(1000));\r\n // form - container\r\n this.contributors = _formBuilder.array([]);\r\n this.container = _formBuilder.control(null, Validators.maxLength(300));\r\n this.edition = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(100),\r\n ]);\r\n this.number = _formBuilder.control(null, Validators.maxLength(50));\r\n this.publisher = _formBuilder.control(null, Validators.maxLength(100));\r\n this.placePub = _formBuilder.control(null, Validators.maxLength(100));\r\n this.yearPub = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(new Date().getFullYear()),\r\n ]);\r\n this.location = _formBuilder.control(null, Validators.maxLength(500));\r\n this.accessDate = _formBuilder.control(new Date());\r\n this.firstPage = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(10000),\r\n ]);\r\n this.lastPage = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(10000),\r\n ]);\r\n // form - keywords\r\n this.keywords = [];\r\n this.keyLanguage = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.keyValue = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.keyForm = _formBuilder.group({\r\n keyLanguage: this.keyLanguage,\r\n keyValue: this.keyValue,\r\n });\r\n\r\n this.form = _formBuilder.group({\r\n key: this.key,\r\n type: this.type,\r\n tag: this.tag,\r\n language: this.language,\r\n authors: this.authors,\r\n title: this.title,\r\n note: this.note,\r\n contributors: this.contributors,\r\n container: this.container,\r\n edition: this.edition,\r\n number: this.number,\r\n publisher: this.publisher,\r\n placePub: this.placePub,\r\n yearPub: this.yearPub,\r\n location: this.location,\r\n accessDate: this.accessDate,\r\n firstPage: this.firstPage,\r\n lastPage: this.lastPage,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.entry());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n // automatically set last page when first is set to something > 0\r\n // and last is not set\r\n this._sub = this.firstPage.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((_) => {\r\n if (\r\n this.firstPage.value &&\r\n this.lastPage.value &&\r\n this.lastPage.value < this.firstPage.value\r\n ) {\r\n this.lastPage.setValue(this.firstPage.value);\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private getAuthorGroup(author?: BibAuthor): FormGroup {\r\n return this._formBuilder.group({\r\n lastName: this._formBuilder.control(author?.lastName, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n firstName: this._formBuilder.control(\r\n author?.firstName,\r\n Validators.maxLength(50)\r\n ),\r\n roleId: this._formBuilder.control(\r\n author?.roleId || null,\r\n Validators.maxLength(50)\r\n ),\r\n });\r\n }\r\n\r\n private setAuthors(authors: BibAuthor[], ctl: FormArray): void {\r\n if (!authors) {\r\n this.authors.reset();\r\n return;\r\n }\r\n for (let i = 0; i < authors.length; i++) {\r\n ctl.push(this.getAuthorGroup(authors[i]));\r\n }\r\n this.authors.markAsPristine();\r\n }\r\n\r\n private updateForm(entry?: BibEntry): void {\r\n if (!entry) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n this.key.setValue(entry.key || null);\r\n this.type.setValue(entry.typeId);\r\n this.tag.setValue(entry.tag || null);\r\n this.language.setValue(entry.language);\r\n this.setAuthors(entry.authors || [], this.authors);\r\n this.title.setValue(entry.title);\r\n this.note.setValue(entry.note || null);\r\n this.setAuthors(entry.contributors || [], this.contributors);\r\n this.container.setValue(entry.container || null);\r\n this.edition.setValue(entry.edition || null);\r\n this.number.setValue(entry.number || null);\r\n this.publisher.setValue(entry.publisher || null);\r\n this.placePub.setValue(entry.placePub || null);\r\n this.yearPub.setValue(entry.yearPub || null);\r\n this.location.setValue(entry.location || null);\r\n this.accessDate.setValue(entry.accessDate || null);\r\n this.firstPage.setValue(entry.firstPage || null);\r\n this.lastPage.setValue(entry.lastPage || null);\r\n this.keywords = entry?.keywords || [];\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getAuthors(ctl: FormArray): BibAuthor[] {\r\n const authors: BibAuthor[] = [];\r\n\r\n for (let i = 0; i < ctl.length; i++) {\r\n const g = ctl.at(i) as FormGroup;\r\n authors.push({\r\n lastName: g.controls['lastName'].value?.trim(),\r\n firstName: g.controls['firstName'].value?.trim(),\r\n roleId: g.controls['roleId'].value?.trim(),\r\n });\r\n }\r\n return authors.length ? authors : [];\r\n }\r\n\r\n private getEntry(): BibEntry {\r\n return {\r\n key: this.key.value?.trim(),\r\n typeId: this.type.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n language: this.language.value || '',\r\n authors: this.getAuthors(this.authors),\r\n title: this.title.value?.trim() || '',\r\n note: this.note.value?.trim(),\r\n contributors: this.getAuthors(this.contributors),\r\n container: this.container.value?.trim(),\r\n edition: this.edition.value || undefined,\r\n number: this.number.value?.trim(),\r\n publisher: this.publisher.value?.trim(),\r\n placePub: this.placePub.value?.trim(),\r\n yearPub: this.yearPub.value || undefined,\r\n location: this.location.value?.trim(),\r\n accessDate: this.accessDate.value || undefined,\r\n firstPage: this.firstPage.value || undefined,\r\n lastPage: this.lastPage.value || undefined,\r\n keywords: this.keywords.length ? this.keywords : undefined,\r\n };\r\n }\r\n\r\n public addKeyword(): void {\r\n if (this.keyForm.invalid) {\r\n return;\r\n }\r\n if (\r\n !this.keywords.some(\r\n (k) =>\r\n k.language === this.keyLanguage.value &&\r\n k.value === this.keyValue.value\r\n )\r\n ) {\r\n this.keywords.push({\r\n language: this.keyLanguage.value!,\r\n value: this.keyValue.value!,\r\n });\r\n this.keyValue.reset();\r\n this.form.markAsDirty();\r\n }\r\n }\r\n\r\n public deleteKeyword(index: number): void {\r\n this.keywords.splice(index, 1);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public moveKeywordUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const k = this.keywords[index];\r\n this.keywords.splice(index, 1);\r\n this.keywords.splice(index - 1, 0, k);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public moveKeywordDown(index: number): void {\r\n if (index + 1 >= this.keywords.length) {\r\n return;\r\n }\r\n const k = this.keywords[index];\r\n this.keywords.splice(index, 1);\r\n this.keywords.splice(index + 1, 0, k);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.entry.set(this.getEntry());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-tab-group>\n <!-- general -->\n <mat-tab label=\"General\">\n <!-- typeId -->\n <div class=\"form-row\">\n @if (typeEntries()?.length) {\n <mat-form-field>\n <mat-label>type</mat-label>\n <mat-select formControlName=\"type\">\n @for (e of typeEntries() || []; track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field>\n <mat-label>type</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"type\"\n />\n @if (type.hasError('required') && (type.dirty || type.touched)) {\n <mat-error>entry type required</mat-error>\n } @if (type.hasError('maxLength') && (type.dirty || type.touched)) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- language (bound) -->\n @if (langEntries()?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"language\">\n @for (e of langEntries() || []; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput [formControl]=\"language\" />\n @if ( language.hasError('required') && (language.dirty ||\n language.touched) ) {\n <mat-error>required</mat-error>\n } @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- key -->\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput [formControl]=\"key\" />\n @if (key.hasError('maxLength') && (key.dirty || key.touched)) {\n <mat-error>key too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- authors -->\n <fieldset>\n <legend>author(s)</legend>\n <cadmus-bib-authors-editor\n [parentForm]=\"form\"\n [controlName]=\"'authors'\"\n [roleEntries]=\"roleEntries()\"\n />\n </fieldset>\n\n <!-- title -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>title</mat-label>\n <input matInput type=\"text\" formControlName=\"title\" />\n @if (title.hasError('required') && (title.dirty || title.touched)) {\n <mat-error>title required</mat-error>\n } @if ( title.hasError('maxLength') && (title.dirty || title.touched)\n ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>note</mat-label>\n <textarea matInput formControlName=\"note\" rows=\"2\"></textarea>\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n </mat-tab>\n\n <!-- container -->\n <mat-tab label=\"Container\">\n <!-- contributors -->\n <cadmus-bib-authors-editor\n [parentForm]=\"form\"\n [controlName]=\"'contributors'\"\n [roleEntries]=\"roleEntries()\"\n />\n\n <!-- container -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>container</mat-label>\n <input matInput type=\"text\" formControlName=\"container\" />\n @if ( container.hasError('maxLength') && (container.dirty ||\n container.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- number -->\n <div>\n <mat-form-field>\n <mat-label>number</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"number\"\n />\n @if ( number.hasError('maxLength') && (number.dirty || number.touched)\n ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- firstPage -->\n \n <mat-form-field [style.width.em]=\"5\">\n <mat-label>from</mat-label>\n <input matInput type=\"number\" formControlName=\"firstPage\" />\n @if ( firstPage.hasError('min') && (firstPage.dirty ||\n firstPage.touched) ) {\n <mat-error>page less than 0</mat-error>\n } @if ( firstPage.hasError('max') && (firstPage.dirty ||\n firstPage.touched) ) {\n <mat-error>page number too big</mat-error>\n }\n </mat-form-field>\n -\n <!-- lastPage -->\n <mat-form-field [style.width.em]=\"5\">\n <mat-label>to</mat-label>\n <input matInput type=\"number\" formControlName=\"lastPage\" />\n @if ( lastPage.hasError('min') && (lastPage.dirty || lastPage.touched)\n ) {\n <mat-error>page less than 0</mat-error>\n } @if ( lastPage.hasError('max') && (lastPage.dirty ||\n lastPage.touched) ) {\n <mat-error>page number too big</mat-error>\n }\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <!-- publisher -->\n <mat-form-field>\n <mat-label>publisher</mat-label>\n <input matInput [formControl]=\"publisher\" />\n @if ( publisher.hasError('maxLength') && (publisher.dirty ||\n publisher.touched) ) {\n <mat-error>publisher too long</mat-error>\n }\n </mat-form-field>\n\n <!-- placePub -->\n <mat-form-field>\n <mat-label>place</mat-label>\n <input matInput type=\"text\" formControlName=\"placePub\" />\n @if ( placePub.hasError('maxLength') && (placePub.dirty ||\n placePub.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- yearPub -->\n <mat-form-field class=\"nr\">\n <mat-label>year</mat-label>\n <input matInput type=\"number\" formControlName=\"yearPub\" />\n @if ( yearPub.hasError('min') && (yearPub.dirty || yearPub.touched) )\n {\n <mat-error>year less than 0</mat-error>\n } @if ( yearPub.hasError('max') && (yearPub.dirty || yearPub.touched)\n ) {\n <mat-error>year past the current one</mat-error>\n }\n </mat-form-field>\n\n <!-- edition -->\n <mat-form-field class=\"nr\">\n <mat-label>ed.</mat-label>\n <input matInput type=\"number\" formControlName=\"edition\" />\n @if ( edition.hasError('min') && (edition.dirty || edition.touched) )\n {\n <mat-error>edition less than 0</mat-error>\n } @if ( edition.hasError('max') && (edition.dirty || edition.touched)\n ) {\n <mat-error>edition greater than 100</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- location -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label>location</mat-label>\n <input\n matInput\n type=\"text\"\n formControlName=\"location\"\n spellcheck=\"false\"\n />\n @if ( location.hasError('maxLength') && (location.dirty ||\n location.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- accessDate -->\n <mat-form-field>\n <mat-label>access date</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n formControlName=\"accessDate\"\n />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n ></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n </mat-tab>\n\n <!-- keywords -->\n <mat-tab label=\"Keywords\">\n <form [formGroup]=\"keyForm\" (submit)=\"addKeyword()\">\n <div class=\"form-row\">\n <!-- language (bound) -->\n @if (langEntries()?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"keyLanguage\">\n @for (e of langEntries() || []; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput [formControl]=\"keyLanguage\" />\n @if ( keyLanguage.hasError('required') && (keyLanguage.dirty ||\n keyLanguage.touched) ) {\n <mat-error>required</mat-error>\n } @if ( keyLanguage.hasError('pattern') && (keyLanguage.dirty ||\n keyLanguage.touched) ) {\n <mat-error>invalid</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"keyValue\" />\n @if ( keyValue.hasError('required') && (keyValue.dirty ||\n keyValue.touched) ) {\n <mat-error>required</mat-error>\n } @if ( keyValue.hasError('maxLength') && (keyValue.dirty ||\n keyValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n type=\"submit\"\n [disabled]=\"keyForm.invalid\"\n matTooltip=\"Add new keyword\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon> keyword\n </button>\n </div>\n </form>\n <!-- list -->\n @if (keywords.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>language</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( k of keywords; track k; let i = $index; let first = $first; let\n last = $last) {\n <tr>\n <td>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this keyword\"\n (click)=\"deleteKeyword(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword up\"\n (click)=\"moveKeywordUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword down\"\n (click)=\"moveKeywordDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </td>\n <td>{{ k.language }}</td>\n <td>{{ k.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </mat-tab>\n </mat-tab-group>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Cancel edit\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid\"\n mat-icon-button\n matTooltip=\"Save entry\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { Keyword } from './keywords-part';\r\n\r\nexport interface BibAuthor {\r\n firstName?: string;\r\n lastName: string;\r\n roleId?: string;\r\n}\r\n\r\nexport interface BibEntry {\r\n key?: string;\r\n typeId: string;\r\n tag?: string;\r\n authors?: BibAuthor[];\r\n title: string;\r\n language: string;\r\n container?: string;\r\n contributors?: BibAuthor[];\r\n edition?: number;\r\n number?: string;\r\n publisher?: string;\r\n yearPub?: number;\r\n placePub?: string;\r\n location?: string;\r\n accessDate?: Date;\r\n firstPage?: number;\r\n lastPage?: number;\r\n keywords?: Keyword[];\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The bibliography part model.\r\n */\r\nexport interface BibliographyPart extends Part {\r\n entries: BibEntry[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the BibliographyPart type.\r\n */\r\nexport const BIBLIOGRAPHY_PART_TYPEID = 'it.vedph.bibliography';\r\n\r\n/**\r\n * JSON schema for the Bibliography part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const BIBLIOGRAPHY_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n BIBLIOGRAPHY_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'BibliographyPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'entries',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n key: {\r\n type: 'string'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n tag: {\r\n type: 'string'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n entries: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['typeId', 'title', 'language'],\r\n properties: {\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n authors: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['lastName'],\r\n properties: {\r\n firstName: {\r\n type: 'string',\r\n },\r\n lastName: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n title: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n container: {\r\n type: 'string',\r\n },\r\n contributors: {\r\n type: ['array', 'null'],\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['lastName'],\r\n properties: {\r\n firstName: {\r\n type: 'string',\r\n },\r\n lastName: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n edition: {\r\n type: 'integer',\r\n },\r\n number: {\r\n type: 'string',\r\n },\r\n publisher: {\r\n type: 'string',\r\n },\r\n yearPub: {\r\n type: 'integer',\r\n },\r\n placePub: {\r\n type: 'string',\r\n },\r\n location: {\r\n type: 'string',\r\n },\r\n accessDate: {\r\n type: 'string',\r\n pattern:\r\n '^\\\\d{4}-\\\\d{2}-\\\\d{2}(?:T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z)$',\r\n },\r\n firstPage: {\r\n title: 'The firstPage schema',\r\n },\r\n lastPage: {\r\n type: 'integer',\r\n },\r\n keywords: {\r\n type: ['array', 'null'],\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['language', 'value'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport {\r\n BibliographyPart,\r\n BibEntry,\r\n BIBLIOGRAPHY_PART_TYPEID,\r\n BibAuthor,\r\n} from '../bibliography-part';\r\nimport { BibliographyEntryComponent } from '../bibliography-entry/bibliography-entry.component';\r\n\r\n/**\r\n * Bibliography part editor.\r\n * Thesauri: bibliography-languages, bibliography-types (optional),\r\n * bibliography-tags (optional), bibliography-author-roles (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-bibliography-part',\r\n templateUrl: './bibliography-part.component.html',\r\n styleUrls: ['./bibliography-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n BibliographyEntryComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class BibliographyPartComponent\r\n extends ModelEditorComponentBase<BibliographyPart>\r\n implements OnInit\r\n{\r\n private _editedEntryIndex: number;\r\n\r\n public editedEntry?: BibEntry;\r\n\r\n // thesauri\r\n // bibliography-languages\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-author-roles\r\n public roleEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-types\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // form\r\n public entries: FormControl<BibEntry[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this._editedEntryIndex = -1;\r\n // form\r\n this.entries = formBuilder.control<BibEntry[]>([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.entries,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'bibliography-languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-author-roles';\r\n if (this.hasThesaurus(key)) {\r\n this.roleEntries = thesauri[key].entries;\r\n } else {\r\n this.roleEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: BibliographyPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue([...part.entries]);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<BibliographyPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n public entryTypeToString(id?: string): string {\r\n if (!id || !this.typeEntries?.entries) {\r\n return '';\r\n }\r\n const entry = this.typeEntries.find((e) => e.id === id);\r\n return entry ? entry.value : id;\r\n }\r\n\r\n protected getValue(): BibliographyPart {\r\n let part = this.getEditedPart(BIBLIOGRAPHY_PART_TYPEID) as BibliographyPart;\r\n part.entries = this.entries.value;\r\n return part;\r\n }\r\n\r\n public addEntry(): void {\r\n const entry: BibEntry = {\r\n typeId: this.typeEntries ? this.typeEntries[0].id : '',\r\n title: '',\r\n language: this.langEntries ? this.langEntries[0].id : '',\r\n };\r\n this.editEntry(entry, -1);\r\n }\r\n\r\n public editEntry(entry: BibEntry, index: number): void {\r\n this._editedEntryIndex = index;\r\n this.editedEntry = entry;\r\n }\r\n\r\n public closeEntry(): void {\r\n this._editedEntryIndex = -1;\r\n this.editedEntry = undefined;\r\n }\r\n\r\n public saveEntry(entry: BibEntry): void {\r\n if (!this.editedEntry) {\r\n return;\r\n }\r\n if (this._editedEntryIndex === -1) {\r\n this.entries.setValue([...this.entries.value, entry]);\r\n } else {\r\n const entries = [...this.entries.value];\r\n entries.splice(this._editedEntryIndex, 1, entry);\r\n this.entries.setValue(entries);\r\n }\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n\r\n this.closeEntry();\r\n }\r\n\r\n public removeEntry(index: number): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', 'Delete entry?')\r\n .subscribe((result) => {\r\n if (!result) {\r\n return;\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n });\r\n }\r\n\r\n public moveEntryUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public moveEntryDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public getAuthors(authors: BibAuthor[]): string {\r\n const sb: string[] = [];\r\n for (let i = 0; i < authors?.length || 0; i++) {\r\n if (i) {\r\n sb.push('; ');\r\n }\r\n sb.push(authors[i].lastName);\r\n if (authors[i].firstName) {\r\n sb.push(', ');\r\n sb.push(authors[i].firstName!);\r\n }\r\n if (authors[i].roleId) {\r\n sb.push(` (${authors[i].roleId})`);\r\n }\r\n }\r\n return sb.join('');\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Bibliography Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addEntry()\"\n >\n <mat-icon>add_circle</mat-icon> entry\n </button>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>type</th>\n <th>author(s)</th>\n <th>title</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first\n = $first; let last = $last) {\n <tr [class.selected]=\"editedEntry === entry\">\n <td class=\"fit-width\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Edit entry\"\n (click)=\"editEntry(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move entry up\"\n [disabled]=\"first\"\n (click)=\"moveEntryUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move entry down\"\n [disabled]=\"last\"\n (click)=\"moveEntryDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this entry\"\n (click)=\"removeEntry(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entryTypeToString(entry.typeId) }}</td>\n <td>{{ getAuthors(entry.authors || []) }}</td>\n <td>{{ entry.title }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n <!-- entry editor -->\n <mat-expansion-panel\n id=\"editor\"\n [expanded]=\"editedEntry\"\n [disabled]=\"!editedEntry\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ editedEntry?.title || \"entry\" }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <fieldset>\n <cadmus-bibliography-entry\n [entry]=\"editedEntry\"\n [langEntries]=\"langEntries\"\n [typeEntries]=\"typeEntries\"\n [tagEntries]=\"tagEntries\"\n [roleEntries]=\"roleEntries\"\n (editorClose)=\"closeEntry()\"\n (entryChange)=\"saveEntry($event!)\"\n />\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The Categories part model.\r\n */\r\nexport interface CategoriesPart extends Part {\r\n categories: string[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the CategoriesPart type.\r\n */\r\nexport const CATEGORIES_PART_TYPEID = 'it.vedph.categories';\r\n\r\n/**\r\n * JSON schema for the Categories part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const CATEGORIES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + CATEGORIES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'CategoriesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'categories'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { ThesaurusEntry, EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { CategoriesPart, CATEGORIES_PART_TYPEID } from '../categories-part';\r\nimport { TitleCasePipe } from '@angular/common';\r\n\r\n/**\r\n * Categories component editor.\r\n * Thesaurus: categories (required).\r\n */\r\n@Component({\r\n selector: 'cadmus-categories-part',\r\n templateUrl: './categories-part.component.html',\r\n styleUrls: ['./categories-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ThesaurusTreeComponent,\r\n ],\r\n})\r\nexport class CategoriesPartComponent\r\n extends ModelEditorComponentBase<CategoriesPart>\r\n implements OnInit\r\n{\r\n public categories: FormControl<ThesaurusEntry[]>;\r\n public entries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form controls\r\n this.categories = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n categories: this.categories,\r\n });\r\n }\r\n\r\n private updateForm(part?: CategoriesPart | null): void {\r\n if (!part?.categories) {\r\n this.categories.reset();\r\n return;\r\n }\r\n\r\n // map the category IDs to the corresponding thesaurus\r\n // entries, if any -- else just use the IDs\r\n const entries: ThesaurusEntry[] = part.categories.map((id) => {\r\n const entry = this.entries!.find((e) => e.id === id);\r\n return entry\r\n ? entry\r\n : {\r\n id,\r\n value: id,\r\n };\r\n });\r\n\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n\r\n // assign them to the control\r\n this.categories.setValue(entries);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected getValue(): CategoriesPart {\r\n let part = this.getEditedPart(CATEGORIES_PART_TYPEID) as CategoriesPart;\r\n part.categories = this.categories.value.map((entry: ThesaurusEntry) => {\r\n return entry.id;\r\n });\r\n return part;\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<CategoriesPart>): void {\r\n // thesauri\r\n const key = 'categories';\r\n if (this.hasThesaurus(key)) {\r\n this.entries = data?.thesauri[key].entries || [];\r\n }\r\n // tree\r\n this.updateForm(data?.value);\r\n }\r\n\r\n public onEntryChange(entry: ThesaurusEntry): void {\r\n // add the new entry unless already present\r\n if (this.categories.value?.some((e: ThesaurusEntry) => e.id === entry.id)) {\r\n return;\r\n }\r\n const entries = [...this.categories.value];\r\n entries.push(entry);\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n this.categories.setValue(entries);\r\n this.categories.markAsDirty();\r\n this.categories.updateValueAndValidity();\r\n }\r\n\r\n public removeCategory(index: number): void {\r\n const entries = [...this.categories.value];\r\n entries.splice(index, 1);\r\n this.categories.setValue(entries);\r\n this.categories.markAsDirty();\r\n this.categories.updateValueAndValidity();\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title\n [matBadge]=\"categories.value.length\"\n matBadgeOverlap=\"false\"\n >\n {{ (modelName() | titlecase) || \"Categories Part\" }}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <div id=\"container\">\n <!-- available categories (from thesaurus) -->\n <fieldset id=\"picker\">\n <legend>available categories</legend>\n <cadmus-thesaurus-tree\n [entries]=\"entries\"\n rootLabel=\"categories\"\n [renderLabel]=\"renderLabel\"\n (entryChange)=\"onEntryChange($event)\"\n />\n </fieldset>\n\n <!-- categories -->\n @if (categories.value.length) {\n <fieldset id=\"list\">\n <legend>assigned categories</legend>\n <table>\n <tbody>\n @for (entry of categories.value; track entry; let i = $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this category\"\n (click)=\"removeCategory(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </fieldset>\n }\n </div>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { HistoricalDateModel } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n/**\r\n * The chronology layer fragment server model.\r\n */\r\nexport interface ChronologyFragment extends Fragment {\r\n date: HistoricalDateModel;\r\n label?: string;\r\n tag?: string;\r\n eventId?: string;\r\n}\r\n\r\nexport const CHRONOLOGY_FRAGMENT_TYPEID = 'fr.it.vedph.chronology';\r\n\r\nexport const CHRONOLOGY_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n CHRONOLOGY_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'ChronologyFragment',\r\n required: ['location', 'date'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string'\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string'\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer'\r\n },\r\n isCentury: {\r\n type: 'boolean'\r\n },\r\n isSpan: {\r\n type: 'boolean'\r\n },\r\n isApproximate: {\r\n type: 'boolean'\r\n },\r\n isDubious: {\r\n type: 'boolean'\r\n },\r\n day: {\r\n type: 'integer'\r\n },\r\n month: {\r\n type: 'integer'\r\n },\r\n hint: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer'\r\n },\r\n isCentury: {\r\n type: 'boolean'\r\n },\r\n isSpan: {\r\n type: 'boolean'\r\n },\r\n isApproximate: {\r\n type: 'boolean'\r\n },\r\n isDubious: {\r\n type: 'boolean'\r\n },\r\n day: {\r\n type: 'integer'\r\n },\r\n month: {\r\n type: 'integer'\r\n },\r\n hint: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n }\r\n },\r\n label: {\r\n type: 'string'\r\n },\r\n tag: {\r\n type: 'string'\r\n },\r\n eventId: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n UntypedFormGroup,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardSubtitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { ThesauriSet, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n HistoricalDateModel,\r\n HistoricalDateComponent,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\n\r\nimport { ChronologyFragment } from '../chronology-fragment';\r\n\r\n/**\r\n * Chronology fragment editor component.\r\n * Thesauri: \"chronology-tags\" when you want to use a closed set of tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-chronology-fragment',\r\n templateUrl: './chronology-fragment.component.html',\r\n styleUrls: ['./chronology-fragment.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardSubtitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n HistoricalDateComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ChronologyFragmentComponent\r\n extends ModelEditorComponentBase<ChronologyFragment>\r\n implements OnInit\r\n{\r\n public tagEntries?: ThesaurusEntry[];\r\n\r\n // the date being edited in its text form\r\n public initialDate: HistoricalDateModel | undefined;\r\n\r\n public date: FormControl<HistoricalDateModel | null>;\r\n public tag: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public eventId: FormControl<string | null>;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.date = formBuilder.control(null, Validators.required);\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.label = formBuilder.control(null, Validators.maxLength(150));\r\n this.eventId = formBuilder.control(null, Validators.maxLength(300));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n date: this.date,\r\n tag: this.tag,\r\n label: this.label,\r\n eventId: this.eventId,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'chronology-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(fragment?: ChronologyFragment | null): void {\r\n if (!fragment || !fragment.date) {\r\n this.form.reset();\r\n } else {\r\n // date\r\n this.initialDate = fragment.date;\r\n this.date.setValue(fragment.date);\r\n // label and tag\r\n this.label.setValue(fragment.label || null);\r\n this.tag.setValue(fragment.tag || null);\r\n this.eventId.setValue(fragment.eventId || null);\r\n this.form.markAsPristine();\r\n }\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ChronologyFragment>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value as ChronologyFragment);\r\n }\r\n\r\n public onDateChange(date: HistoricalDateModel): void {\r\n this.date.setValue(date);\r\n this.date.updateValueAndValidity();\r\n this.date.markAsDirty();\r\n }\r\n\r\n protected getValue(): ChronologyFragment {\r\n let fr = this.getEditedFragment() as ChronologyFragment;\r\n fr.date = this.date.value!;\r\n // label and tag\r\n fr.label = this.label.value?.trim();\r\n fr.eventId = this.eventId.value?.trim();\r\n fr.tag = this.tag.value || undefined;\r\n return fr;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>\n {{ (modelName() | titlecase) || \"Chronology Fragment\" }}\n {{ data()?.value?.location }}</mat-card-title\n >\n <mat-card-subtitle>\n {{ data()?.value?.baseText }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"form-row\">\n <!-- free tag -->\n @if (!tagEntries) {\n <div>\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input type=\"text\" matInput formControlName=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n </div>\n }\n <!-- bound tag -->\n @else {\n <div>\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select formControlName=\"tag\">\n @for (e of tagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n\n <!-- label -->\n <div>\n <mat-form-field>\n <mat-label>label</mat-label>\n <input matInput type=\"text\" formControlName=\"label\" />\n @if ( label.hasError('maxLength') && (label.dirty || label.touched)\n ) {\n <mat-error>label too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- event ID -->\n <div>\n <mat-form-field>\n <mat-label>event ID</mat-label>\n <input\n matInput\n type=\"text\"\n formControlName=\"eventId\"\n spellcheck=\"false\"\n />\n @if ( eventId.hasError('maxLength') && (eventId.dirty ||\n eventId.touched) ) {\n <mat-error>event ID too long</mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n\n <!-- date -->\n <div>\n <cadmus-refs-historical-date\n [date]=\"date.value || undefined\"\n (dateChange)=\"onDateChange($event!)\"\n />\n </div>\n </mat-card-content>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedChronotope } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\n/**\r\n * The chronotopes part model.\r\n */\r\nexport interface ChronotopesPart extends Part {\r\n chronotopes: AssertedChronotope[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the ChronotopesPart type.\r\n */\r\nexport const CHRONOTOPES_PART_TYPEID = 'it.vedph.chronotopes';\r\n\r\n/**\r\n * JSON schema for the Chronotopes part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const Chronotopes_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + CHRONOTOPES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'ChronotopesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'chronotopes',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n chronotopes: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n properties: {\r\n chronotope: {\r\n place: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n // TODO: add properties and fill the \"required\" array as needed\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedChronotope,\r\n AssertedChronotopeComponent,\r\n AssertedChronotopesPipe,\r\n} from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { HistoricalDatePipe } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { ChronotopesPart, CHRONOTOPES_PART_TYPEID } from '../chronotopes-part';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\n/**\r\n * Chronotopes part editor component.\r\n * Thesauri: chronotope-place-tags, chronotope-assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-chronotopes-part',\r\n templateUrl: './chronotopes-part.component.html',\r\n styleUrls: ['./chronotopes-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n AssertedChronotopeComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n HistoricalDatePipe,\r\n AssertedChronotopesPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ChronotopesPartComponent\r\n extends ModelEditorComponentBase<ChronotopesPart>\r\n implements OnInit\r\n{\r\n private _editedChronotopeIndex: number;\r\n\r\n public editedChronotope: AssertedChronotope | undefined;\r\n\r\n // chronotope-place-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n // chronotope-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public chronotopes: FormControl<AssertedChronotope[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this._editedChronotopeIndex = -1;\r\n // form\r\n this.chronotopes = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.chronotopes,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'chronotope-place-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'chronotope-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(model?: ChronotopesPart | null): void {\r\n if (!model) {\r\n this.form!.reset();\r\n return;\r\n }\r\n this.chronotopes.setValue(model.chronotopes || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ChronotopesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): ChronotopesPart {\r\n let part = this.getEditedPart(CHRONOTOPES_PART_TYPEID) as ChronotopesPart;\r\n part.chronotopes = this.chronotopes.value;\r\n return part;\r\n }\r\n\r\n public addChronotope(): void {\r\n this.editChronotope({}, -1);\r\n }\r\n\r\n public editChronotope(chronotope: AssertedChronotope, index: number): void {\r\n this._editedChronotopeIndex = index;\r\n this.editedChronotope = chronotope;\r\n }\r\n\r\n public onChronotopeChange(chronotope: AssertedChronotope): void {\r\n this.editedChronotope = chronotope;\r\n }\r\n\r\n public saveChronotope(): void {\r\n const chronotopes = [...this.chronotopes.value];\r\n if (this._editedChronotopeIndex === -1) {\r\n chronotopes.push(this.editedChronotope!);\r\n } else {\r\n chronotopes.splice(\r\n this._editedChronotopeIndex,\r\n 1,\r\n this.editedChronotope!\r\n );\r\n }\r\n this.chronotopes.setValue(chronotopes);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n this.closeChronotope();\r\n }\r\n\r\n public closeChronotope(): void {\r\n this.editedChronotope = undefined;\r\n this._editedChronotopeIndex = -1;\r\n }\r\n\r\n public deleteChronotope(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete chronotope?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveChronotopeUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.chronotopes.value[index];\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n\r\n public moveChronotopeDown(index: number): void {\r\n if (index + 1 >= this.chronotopes.value.length) {\r\n return;\r\n }\r\n const entry = this.chronotopes.value[index];\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Chronotopes Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addChronotope()\"\n >\n <mat-icon>add_circle</mat-icon> chronotope\n </button>\n </div>\n @if (chronotopes.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>place</th>\n <th>date</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of chronotopes.value; track entry; let i = $index; let\n first = $first; let last = $last) {\n <tr [class.selected]=\"entry === editedChronotope\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this chronotope\"\n (click)=\"editChronotope(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this chronotope up\"\n [disabled]=\"first\"\n (click)=\"moveChronotopeUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this chronotope down\"\n [disabled]=\"last\"\n (click)=\"moveChronotopeDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this chronotope\"\n (click)=\"deleteChronotope(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.place?.value }}</td>\n <td>{{ entry.date | historicalDate }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel\n [expanded]=\"editedChronotope\"\n [disabled]=\"!editedChronotope\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ (editedChronotope | assertedChronotopes) || \"chronotope\" }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <fieldset>\n <cadmus-refs-asserted-chronotope\n [tagEntries]=\"tagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [chronotope]=\"editedChronotope\"\n (chronotopeChange)=\"onChronotopeChange($event!)\"\n />\n <div class=\"form-row\">\n <button type=\"button\" (click)=\"closeChronotope()\" mat-icon-button>\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button type=\"button\" (click)=\"saveChronotope()\" mat-icon-button>\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n <span>chronotope</span>\n </div>\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport { IndexKeyword } from './index-keywords-part';\r\n\r\n/**\r\n * A comment.\r\n */\r\nexport interface Comment {\r\n tag?: string;\r\n text: string;\r\n references?: DocReference[];\r\n links?: AssertedCompositeId[];\r\n categories?: string[];\r\n keywords?: IndexKeyword[];\r\n}\r\n\r\n/**\r\n * The Comment part model.\r\n */\r\nexport interface CommentPart extends Part, Comment {}\r\n\r\n/**\r\n * The type ID used to identify the CommentPart type.\r\n */\r\nexport const COMMENT_PART_TYPEID = 'it.vedph.comment';\r\n\r\n/**\r\n * JSON schema for the Comment part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const COMMENT_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + COMMENT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'CommentPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'text',\r\n ],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n text: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: ['string', 'null'],\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { Comment } from './comment-part';\r\n\r\n/**\r\n * The comment layer fragment server model.\r\n */\r\nexport interface CommentFragment extends Fragment, Comment {\r\n}\r\n\r\nexport const COMMENT_FRAGMENT_TYPEID = 'fr.it.vedph.comment';\r\n\r\nexport const COMMENT_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n COMMENT_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'CommentFragment',\r\n required: ['location', 'text'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n text: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: ['string', 'null'],\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n externalIds: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormArray,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport {\r\n CADMUS_TEXT_ED_BINDINGS_TOKEN,\r\n CadmusTextEdBindings,\r\n CadmusTextEdService,\r\n} from '@myrmidon/cadmus-text-ed';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { Comment, CommentPart, COMMENT_PART_TYPEID } from '../comment-part';\r\n\r\nimport { NgeMarkdownModule } from '@cisstech/nge/markdown';\r\n\r\nimport { IndexKeyword } from '../index-keywords-part';\r\nimport { CommentFragment } from '../comment-fragment';\r\n\r\n/**\r\n * Comment part/fragment editor component.\r\n * Thesauri: comment-tags, doc-reference-tags, doc-reference-types, comment-categories,\r\n * languages, keyword-indexes, keyword-tags, comment-id-scopes, comment-id-tags,\r\n * assertion-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-comment-editor',\r\n templateUrl: './comment-editor.component.html',\r\n styleUrls: ['./comment-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n NgeMonacoModule,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n NgeMarkdownModule,\r\n DocReferencesComponent,\r\n AssertedCompositeIdsComponent,\r\n MatIconButton,\r\n MatTooltip,\r\n MatButton,\r\n MatCardActions,\r\n ThesaurusTreeComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n providers: [CadmusTextEdService],\r\n})\r\nexport class CommentEditorComponent\r\n extends ModelEditorComponentBase<CommentPart | CommentFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public tag: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n public references: FormControl<DocReference[]>;\r\n public links: FormControl<AssertedCompositeId[]>;\r\n public categories: FormControl<ThesaurusEntry[]>;\r\n public keywords: FormArray;\r\n\r\n // comment-tags\r\n public comTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // comment-categories\r\n public catEntries: ThesaurusEntry[] | undefined;\r\n // languages\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n // keyword-indexes\r\n public idxEntries: ThesaurusEntry[] | undefined;\r\n // keyword-tags\r\n public keyTagEntries: ThesaurusEntry[] | undefined;\r\n // comment-id-scopes\r\n public idScopeEntries: ThesaurusEntry[] | undefined;\r\n // comment-id-tags\r\n public idTagEntries: ThesaurusEntry[] | undefined;\r\n // assertion-tags\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _editService: CadmusTextEdService,\r\n @Inject(CADMUS_TEXT_ED_BINDINGS_TOKEN)\r\n @Optional()\r\n private _editorBindings?: CadmusTextEdBindings\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.text = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50000),\r\n ]);\r\n this.references = formBuilder.control([], { nonNullable: true });\r\n this.links = formBuilder.control([], { nonNullable: true });\r\n this.categories = formBuilder.control([], { nonNullable: true });\r\n this.keywords = formBuilder.array([]);\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n private async applyEdit(selector: string) {\r\n if (!this._editor) {\r\n return;\r\n }\r\n const selection = this._editor.getSelection();\r\n const text = selection\r\n ? this._editor.getModel()!.getValueInRange(selection)\r\n : '';\r\n\r\n const result = await this._editService.edit({\r\n selector,\r\n text: text,\r\n });\r\n\r\n this._editor.executeEdits('my-source', [\r\n {\r\n range: selection!,\r\n text: result.text,\r\n forceMoveMarkers: true,\r\n },\r\n ]);\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'markdown');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // plugins\r\n if (this._editorBindings) {\r\n Object.keys(this._editorBindings).forEach((key) => {\r\n const n = parseInt(key, 10);\r\n console.log(\r\n 'Binding ' + n + ' to ' + this._editorBindings![key as any]\r\n );\r\n this._editor!.addCommand(n, () => {\r\n this.applyEdit(this._editorBindings![key as any]);\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n tag: this.tag,\r\n text: this.text,\r\n references: this.references,\r\n ids: this.links,\r\n categories: this.categories,\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'comment-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.comTagEntries = thesauri[key].entries;\r\n } else {\r\n this.comTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'comment-categories';\r\n if (this.hasThesaurus(key)) {\r\n this.catEntries = thesauri[key].entries;\r\n } else {\r\n this.catEntries = undefined;\r\n }\r\n\r\n key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n\r\n key = 'keyword-indexes';\r\n if (this.hasThesaurus(key)) {\r\n this.idxEntries = thesauri[key].entries;\r\n } else {\r\n this.idxEntries = undefined;\r\n }\r\n\r\n key = 'keyword-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.keyTagEntries = thesauri[key].entries;\r\n } else {\r\n this.keyTagEntries = undefined;\r\n }\r\n\r\n key = 'comment-id-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n\r\n key = 'comment-id-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: CommentPart | CommentFragment | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.tag.setValue(part.tag || null);\r\n this.text.setValue(part.text);\r\n this._editorModel?.setValue(part.text || '');\r\n this.references.setValue(part.references || []);\r\n this.links.setValue(part.links || []);\r\n // keywords\r\n this.keywords.clear();\r\n if (part.keywords?.length) {\r\n for (let keyword of part.keywords) {\r\n this.keywords.controls.push(this.getKeywordGroup(keyword));\r\n }\r\n }\r\n // categories\r\n if (part.categories?.length) {\r\n // map the category IDs to the corresponding thesaurus\r\n // entries, if any -- else just use the IDs\r\n const entries: ThesaurusEntry[] = part.categories.map((id) => {\r\n const entry = this.catEntries?.find((e) => e.id === id);\r\n return entry\r\n ? entry\r\n : {\r\n id,\r\n value: id,\r\n };\r\n });\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n // assign them to the control\r\n this.categories.setValue(entries || []);\r\n } else {\r\n this.categories.setValue([]);\r\n }\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<CommentPart | CommentFragment>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n private updateComment(comment: Comment): void {\r\n comment.tag = this.tag.value?.trim();\r\n comment.text = this.text.value?.trim() || '';\r\n comment.references = this.references.value?.length\r\n ? this.references.value\r\n : undefined;\r\n comment.links = this.links.value?.length ? this.links.value : undefined;\r\n comment.categories = this.categories.value?.length\r\n ? this.categories.value.map((entry: ThesaurusEntry) => {\r\n return entry.id;\r\n })\r\n : undefined;\r\n comment.keywords = this.getKeywords();\r\n }\r\n\r\n protected getValue(): CommentPart | CommentFragment {\r\n if ((this.data()!.value as CommentFragment)?.location) {\r\n let fr = this.getEditedFragment() as CommentFragment;\r\n this.updateComment(fr);\r\n return fr;\r\n } else {\r\n let part = this.getEditedPart(COMMENT_PART_TYPEID) as CommentPart;\r\n this.updateComment(part);\r\n return part;\r\n }\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references || []);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n this.form.markAsDirty();\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids || []);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n this.form.markAsDirty();\r\n }\r\n\r\n //#region Categories\r\n public onCategoryChange(entry: ThesaurusEntry): void {\r\n // add the new entry unless already present\r\n if (this.categories.value?.some((e: ThesaurusEntry) => e.id === entry.id)) {\r\n return;\r\n }\r\n const entries: ThesaurusEntry[] = Object.assign(\r\n [],\r\n this.categories.value || []\r\n );\r\n entries.push(entry);\r\n\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n\r\n // assign to the categories control\r\n this.categories.setValue(entries);\r\n this.categories.updateValueAndValidity();\r\n this.categories.markAsDirty();\r\n }\r\n\r\n public removeCategory(index: number): void {\r\n const entries = Object.assign([], this.categories.value);\r\n entries.splice(index, 1);\r\n this.categories.setValue(entries);\r\n this.categories.updateValueAndValidity();\r\n this.categories.markAsDirty();\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n //#endregion\r\n\r\n //#region Keywords\r\n private getKeywordGroup(keyword?: IndexKeyword): FormGroup {\r\n return this.formBuilder.group({\r\n indexId: this.formBuilder.control(\r\n keyword?.indexId,\r\n Validators.maxLength(50)\r\n ),\r\n tag: this.formBuilder.control(keyword?.tag, Validators.maxLength(50)),\r\n language: this.formBuilder.control(keyword?.language, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n value: this.formBuilder.control(keyword?.value, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n note: this.formBuilder.control(keyword?.note, Validators.maxLength(500)),\r\n });\r\n }\r\n\r\n public addKeyword(keyword?: IndexKeyword): void {\r\n this.keywords.push(this.getKeywordGroup(keyword));\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public removeKeyword(index: number): void {\r\n this.keywords.removeAt(index);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public moveKeywordUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const keyword = this.keywords.controls[index];\r\n this.keywords.removeAt(index);\r\n this.keywords.insert(index - 1, keyword);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public moveKeywordDown(index: number): void {\r\n if (index + 1 >= this.keywords.length) {\r\n return;\r\n }\r\n const keyword = this.keywords.controls[index];\r\n this.keywords.removeAt(index);\r\n this.keywords.insert(index + 1, keyword);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n private getKeywords(): IndexKeyword[] | undefined {\r\n const entries: IndexKeyword[] = [];\r\n for (let i = 0; i < this.keywords.length; i++) {\r\n const g = this.keywords.at(i) as FormGroup;\r\n entries.push({\r\n indexId: g.controls['indexId'].value?.trim(),\r\n tag: g.controls['tag'].value?.trim(),\r\n language: g.controls['language'].value?.trim(),\r\n value: g.controls['value'].value?.trim(),\r\n note: g.controls['note'].value?.trim(),\r\n });\r\n }\r\n return entries.length ? entries : undefined;\r\n }\r\n //#endregion\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>Comment</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group>\n <mat-tab label=\"comment\">\n <!-- tag (bound) -->\n <div>\n @if (comTagEntries?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of comTagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n <!-- text -->\n <div>\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>text required</mat-error>\n }\n </div>\n <div id=\"pvw\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>preview</mat-expansion-panel-header>\n <nge-markdown [data]=\"text.value || undefined\" />\n </mat-expansion-panel>\n </div>\n </mat-tab>\n\n <mat-tab label=\"references\">\n <!-- references -->\n <fieldset>\n <legend>references</legend>\n <cadmus-refs-doc-references\n [references]=\"references.value\"\n [tagEntries]=\"refTagEntries\"\n [typeEntries]=\"refTypeEntries\"\n (referencesChange)=\"onReferencesChange($event)\"\n />\n </fieldset>\n\n <!-- links -->\n <fieldset>\n <legend>links</legend>\n <cadmus-refs-asserted-composite-ids\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [pinByTypeMode]=\"true\"\n [canSwitchMode]=\"true\"\n [canEditTarget]=\"true\"\n [ids]=\"links.value\"\n (idsChange)=\"onIdsChange($event)\"\n />\n </fieldset>\n </mat-tab>\n\n <!-- categories -->\n @if (catEntries?.length) {\n <mat-tab label=\"categories\">\n <div id=\"container\">\n <div id=\"picker\">\n <fieldset>\n <legend>available categories</legend>\n <cadmus-thesaurus-tree\n [entries]=\"catEntries\"\n rootLabel=\"categories\"\n [renderLabel]=\"renderLabel\"\n (entryChange)=\"onCategoryChange($event)\"\n />\n </fieldset>\n </div>\n @if (categories.value.length) {\n <div id=\"list\">\n <fieldset>\n <legend>assigned categories</legend>\n <table>\n <tbody>\n @for (entry of categories.value; track entry; let i =\n $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this category\"\n (click)=\"removeCategory(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </fieldset>\n </div>\n }\n </div>\n </mat-tab>\n }\n\n <!-- keywords -->\n <mat-tab label=\"keywords\">\n <div formArrayName=\"keywords\">\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addKeyword()\"\n >\n <mat-icon>add_circle</mat-icon>\n keyword\n </button>\n </div>\n <!-- keyword -->\n @for ( item of keywords.controls; track item; let i = $index; let\n first = $first; let last = $last) {\n <div>\n <!-- child form -->\n <div [formGroupName]=\"i\" class=\"form-row\">\n <!-- child actions -->\n <span>{{ i + 1 }}.</span>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this keyword\"\n (click)=\"removeKeyword(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword up\"\n (click)=\"moveKeywordUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword down\"\n (click)=\"moveKeywordDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <!-- child controls -->\n <!-- indexId (bound) -->\n @if (idxEntries?.length) {\n <mat-form-field>\n <mat-label>index</mat-label>\n <mat-select formControlName=\"indexId\">\n @for (e of idxEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- indexId (free) -->\n @else {\n <mat-form-field>\n <mat-label>index</mat-label>\n <input matInput formControlName=\"indexId\" />\n @if ( $any(item)['controls'].indexId.errors?.maxLength &&\n ($any(item)['controls'].indexId.dirty ||\n $any(item)['controls'].indexId.touched) ) {\n <mat-error>ID too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- tag (bound) -->\n @if (keyTagEntries?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select formControlName=\"tag\">\n @for (e of keyTagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput formControlName=\"tag\" />\n @if ( $any(item)['controls'].tag.errors?.maxLength &&\n ($any(item)['controls'].tag.dirty ||\n $any(item)['controls'].tag.touched) ) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- language (bound) -->\n @if (langEntries?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"language\">\n @for (e of langEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n @if ( $any(item)['controls'].language.errors?.required &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language required</mat-error>\n }\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput formControlName=\"language\" />\n @if ( $any(item)['controls'].language.errors?.required &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language required</mat-error>\n } @if ( $any(item)['controls'].language.errors?.maxLength &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput formControlName=\"value\" />\n @if ( $any(item)['controls'].value.errors?.required &&\n ($any(item)['controls'].value.dirty ||\n $any(item)['controls'].value.touched) ) {\n <mat-error>value required</mat-error>\n } @if ( $any(item)['controls'].value.errors?.maxLength &&\n ($any(item)['controls'].value.dirty ||\n $any(item)['controls'].value.touched) ) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n <!-- note -->\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput formControlName=\"note\" />\n @if ( $any(item)['controls'].note.errors?.maxLength &&\n ($any(item)['controls'].note.dirty ||\n $any(item)['controls'].note.touched) ) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DecoratedCount } from '@myrmidon/cadmus-refs-decorated-counts';\r\n\r\n/**\r\n * The DecoratedCounts part model.\r\n */\r\nexport interface DecoratedCountsPart extends Part {\r\n counts: DecoratedCount[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DecoratedCountsPart type.\r\n */\r\nexport const DECORATED_COUNTS_PART_TYPEID = 'it.vedph.decorated-counts';\r\n\r\n/**\r\n * JSON schema for the DecoratedCounts part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DECORATED_COUNTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n DECORATED_COUNTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DecoratedCountsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'counts',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n counts: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['id', 'value'],\r\n properties: {\r\n id: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport {\r\n DecoratedCount,\r\n DecoratedCountsComponent,\r\n} from '@myrmidon/cadmus-refs-decorated-counts';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DECORATED_COUNTS_PART_TYPEID,\r\n DecoratedCountsPart,\r\n} from '../decorated-counts-part';\r\n\r\n/**\r\n * Decorated counts part editor component.\r\n * Thesauri: decorated-count-ids, decorated-count-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-decorated-counts-part',\r\n templateUrl: './decorated-counts-part.component.html',\r\n styleUrl: './decorated-counts-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n DecoratedCountsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DecoratedCountsPartComponent\r\n extends ModelEditorComponentBase<DecoratedCountsPart>\r\n implements OnInit\r\n{\r\n public counts: FormControl<DecoratedCount[]>;\r\n\r\n // decorated-count-ids\r\n public idEntries: ThesaurusEntry[] | undefined;\r\n\r\n // decorated-count-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.counts = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n counts: this.counts,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'decorated-count-ids';\r\n if (this.hasThesaurus(key)) {\r\n this.idEntries = thesauri[key].entries;\r\n } else {\r\n this.idEntries = undefined;\r\n }\r\n key = 'decorated-count-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DecoratedCountsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.counts.setValue(part.counts || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<DecoratedCountsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DecoratedCountsPart {\r\n let part = this.getEditedPart(\r\n DECORATED_COUNTS_PART_TYPEID\r\n ) as DecoratedCountsPart;\r\n part.counts = this.counts.value || [];\r\n return part;\r\n }\r\n\r\n public onCountsChange(counts: DecoratedCount[]): void {\r\n this.counts.setValue(counts);\r\n this.counts.markAsDirty();\r\n this.counts.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Decorated Counts Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-decorated-counts\r\n [idEntries]=\"idEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n [counts]=\"counts.value\"\r\n (countsChange)=\"onCountsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { ProperName } from '@myrmidon/cadmus-refs-proper-name';\r\n\r\n/**\r\n * The DistrictLocation part model.\r\n */\r\nexport interface DistrictLocationPart extends Part {\r\n place: ProperName;\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DistrictLocationPart type.\r\n */\r\nexport const DISTRICT_LOCATION_PART_TYPEID = 'it.vedph.district-location';\r\n\r\n/**\r\n * JSON schema for the DistrictLocation part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DISTRICT_LOCATION_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/epigraphy/' +\r\n DISTRICT_LOCATION_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DistrictLocationPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'place',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n place: {\r\n type: 'object',\r\n required: ['language', 'tag', 'parts'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n pieces: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n ProperName,\r\n ProperNameComponent,\r\n} from '@myrmidon/cadmus-refs-proper-name';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DistrictLocationPart,\r\n DISTRICT_LOCATION_PART_TYPEID,\r\n} from '../district-location-part';\r\n\r\n/**\r\n * DistrictLocation part editor component.\r\n * Thesauri: district-name-piece-types (required), district-name-lang-entries.\r\n */\r\n@Component({\r\n selector: 'cadmus-district-location-part',\r\n templateUrl: './district-location-part.component.html',\r\n styleUrl: './district-location-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n ProperNameComponent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DistrictLocationPartComponent\r\n extends ModelEditorComponentBase<DistrictLocationPart>\r\n implements OnInit\r\n{\r\n public place: FormControl<ProperName | null>;\r\n public note: FormControl<string | null>;\r\n public initialName?: ProperName | null;\r\n\r\n // district-name-piece-types\r\n public typeEntries?: ThesaurusEntry[];\r\n // district-name-lang-entries\r\n public langEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.place = formBuilder.control(null, Validators.required);\r\n this.note = formBuilder.control(null, Validators.maxLength(5000));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n place: this.place,\r\n note: this.note,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'district-name-piece-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DistrictLocationPart | null): void {\r\n if (!part) {\r\n this.initialName = undefined;\r\n this.form.reset();\r\n return;\r\n }\r\n this.initialName = part.place;\r\n this.place.setValue(part.place || null);\r\n this.note.setValue(part.note || null);\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n public onNameChange(name: ProperName | undefined): void {\r\n this.place.setValue(name || null);\r\n this.place.updateValueAndValidity();\r\n this.place.markAsDirty();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<DistrictLocationPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DistrictLocationPart {\r\n let part = this.getEditedPart(\r\n DISTRICT_LOCATION_PART_TYPEID\r\n ) as DistrictLocationPart;\r\n\r\n part.place = this.place.value || { language: '', pieces: [] };\r\n part.note = this.note.value?.trim() || undefined;\r\n\r\n return part;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"District Location Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- place -->\r\n <div>\r\n <fieldset>\r\n <legend i18n>place</legend>\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries\"\r\n [typeEntries]=\"typeEntries\"\r\n [name]=\"initialName || undefined\"\r\n [hideAssertion]=\"true\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label i18n>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error i18n>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\n\r\n/**\r\n * The document references part model.\r\n */\r\nexport interface DocReferencesPart extends Part {\r\n references: DocReference[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DocReferencesPart type.\r\n */\r\nexport const DOC_REFERENCES_PART_TYPEID = 'it.vedph.doc-references';\r\n\r\n/**\r\n * JSON schema for the DocReferences part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DOC_REFERENCES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n DOC_REFERENCES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DocReferencesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'references',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DocReferencesPart,\r\n DOC_REFERENCES_PART_TYPEID,\r\n} from '../doc-references-part';\r\n\r\n/**\r\n * Document references part editor.\r\n * Thesauri: doc-reference-tags, doc-reference-types (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-doc-references-part',\r\n templateUrl: './doc-references-part.component.html',\r\n styleUrls: ['./doc-references-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n DocReferencesComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DocReferencesPartComponent\r\n extends ModelEditorComponentBase<DocReferencesPart>\r\n implements OnInit\r\n{\r\n public references: FormControl<DocReference[]>;\r\n\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.references = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n references: this.references,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DocReferencesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.references.setValue(part.references || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<DocReferencesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DocReferencesPart {\r\n let part = this.getEditedPart(\r\n DOC_REFERENCES_PART_TYPEID\r\n ) as DocReferencesPart;\r\n part.references = this.references.value;\r\n return part;\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Document References Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The external ids part model.\r\n */\r\nexport interface ExternalIdsPart extends Part {\r\n ids: AssertedId[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the ExternalIdsPart type.\r\n */\r\nexport const EXTERNAL_IDS_PART_TYPEID = 'it.vedph.external-ids';\r\n\r\n/**\r\n * JSON schema for the external IDs part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const EXTERNAL_IDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + EXTERNAL_IDS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'ExternalIdsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'ids',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n ids: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'string',\r\n },\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedId,\r\n AssertedIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesaurusEntry,\r\n ThesauriSet,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n ExternalIdsPart,\r\n EXTERNAL_IDS_PART_TYPEID,\r\n} from '../external-ids-part';\r\n\r\n/**\r\n * External IDs part editor component. This is just a collection of asserted\r\n * IDs.\r\n * Thesauri: external-id-types, external-id-tags, assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-external-ids-part',\r\n templateUrl: './external-ids-part.component.html',\r\n styleUrls: ['./external-ids-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n AssertedIdsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ExternalIdsPartComponent\r\n extends ModelEditorComponentBase<ExternalIdsPart>\r\n implements OnInit\r\n{\r\n public ids: FormControl<AssertedId[]>;\r\n\r\n // external-id-scopes\r\n public idScopeEntries: ThesaurusEntry[] | undefined;\r\n // external-id-tags\r\n public idTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions:\r\n // assertion-tags\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.ids = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n ids: this.ids,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n\r\n key = 'external-id-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n\r\n key = 'external-id-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: ExternalIdsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.ids.setValue(part.ids || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ExternalIdsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): ExternalIdsPart {\r\n let part = this.getEditedPart(EXTERNAL_IDS_PART_TYPEID) as ExternalIdsPart;\r\n part.ids = this.ids.value;\r\n return part;\r\n }\r\n\r\n public onIdsChange(ids: AssertedId[]): void {\r\n this.ids.setValue(ids);\r\n this.ids.markAsDirty();\r\n this.ids.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"External IDs Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-ids\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [ids]=\"ids.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedChronotope } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n/**\r\n * The historical events part model.\r\n */\r\nexport interface HistoricalEventsPart extends Part {\r\n events: HistoricalEvent[];\r\n}\r\n\r\n/**\r\n * Any entity related to an event in the EventsPart.\r\n */\r\nexport interface RelatedEntity {\r\n relation: string;\r\n id: AssertedCompositeId;\r\n}\r\n\r\n/**\r\n * An event in the EventsPart.\r\n */\r\nexport interface HistoricalEvent {\r\n eid: string;\r\n type: string;\r\n tag?: string;\r\n chronotopes?: AssertedChronotope[];\r\n assertion?: Assertion;\r\n description?: string;\r\n relatedEntities?: RelatedEntity[];\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the EventsPart type.\r\n */\r\nexport const HISTORICAL_EVENTS_PART_TYPEID = 'it.vedph.historical-events';\r\n\r\n/**\r\n * JSON schema for the Events part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const HISTORICAL_EVENTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n HISTORICAL_EVENTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'EventsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'events',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n events: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['eid', 'type'],\r\n properties: {\r\n eid: {\r\n type: 'string',\r\n },\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n chronotopes: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n place: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n description: {\r\n type: 'string',\r\n },\r\n relatedEntities: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['relation', 'id'],\r\n properties: {\r\n relation: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'object',\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, effect, input, model, output } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\n\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { MatInput } from '@angular/material/input';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport {\n AssertedCompositeId,\n AssertedCompositeIdComponent,\n} from '@myrmidon/cadmus-refs-asserted-ids';\n\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\n\nimport { RelatedEntity } from '../historical-events-part';\n\n/**\n * Related entity component to edit the entity related to a historical event.\n */\n@Component({\n selector: 'cadmus-related-entity',\n templateUrl: './related-entity.component.html',\n styleUrls: ['./related-entity.component.css'],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n MatError,\n MatInput,\n AssertedCompositeIdComponent,\n MatIconButton,\n MatIcon,\n MatTooltip,\n ],\n})\nexport class RelatedEntityComponent {\n public readonly entity = model<RelatedEntity>();\n\n // relation entries\n public readonly relationEntries = input<ThesaurusEntry[]>();\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus asserted-id-tags.\n */\n public readonly idTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus assertion-tags.\n */\n public readonly assTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus doc-reference-tags.\n */\n public readonly refTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus doc-reference-types.\n */\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\n\n public readonly editorClose = output();\n\n // form\n public relation: FormControl<string | null>;\n public id: FormControl<AssertedCompositeId | null>;\n public form: FormGroup;\n\n constructor(formBuilder: FormBuilder) {\n this.relation = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(500),\n ]);\n this.id = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(500),\n ]);\n this.form = formBuilder.group({\n relation: this.relation,\n id: this.id,\n });\n\n effect(() => {\n this.updateForm(this.entity());\n });\n }\n\n private updateForm(entity: RelatedEntity | undefined): void {\n if (!entity) {\n this.form.reset();\n return;\n }\n this.relation.setValue(entity.relation);\n this.id.setValue(entity.id);\n this.form.markAsPristine();\n }\n\n private getEntity(): RelatedEntity {\n return {\n relation: this.relation.value?.trim()!,\n id: this.id.value!,\n };\n }\n\n public onIdChange(id: AssertedCompositeId): void {\n this.id.setValue(id);\n this.id.updateValueAndValidity();\n this.id.markAsDirty();\n }\n\n public cancel(): void {\n this.editorClose.emit();\n }\n\n public save(): void {\n if (this.form.invalid) {\n return;\n }\n this.entity.set(this.getEntity());\n }\n}\n","<form [formGroup]=\"form\" class=\"form-row\" (submit)=\"save()\">\r\n <!-- relation (bound) -->\r\n @if (relationEntries()?.length) {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <mat-select [formControl]=\"relation\">\r\n @for (e of relationEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- relation (free) -->\r\n @else {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <input matInput [formControl]=\"relation\" />\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n } @if ( $any(relation).errors?.maxLength && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- id -->\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [id]=\"id.value || undefined\"\r\n (idChange)=\"onIdChange($event!)\"\r\n />\r\n\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" matTooltip=\"Save entity\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n</form>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport {\r\n AssertedChronotope,\r\n AssertedChronotopeSetComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { HistoricalEvent, RelatedEntity } from '../historical-events-part';\r\nimport { RelatedEntityComponent } from '../related-entity/related-entity.component';\r\n\r\nconst RELATION_SEP = ':';\r\n\r\n/**\r\n * Historical event editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-historical-event-editor',\r\n templateUrl: './historical-event-editor.component.html',\r\n styleUrls: ['./historical-event-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n AssertedChronotopeSetComponent,\r\n MatCheckbox,\r\n AssertionComponent,\r\n MatButton,\r\n MatIcon,\r\n MatIconButton,\r\n MatTooltip,\r\n RelatedEntityComponent,\r\n FlatLookupPipe,\r\n ThesaurusTreeComponent,\r\n ],\r\n})\r\nexport class HistoricalEventEditorComponent {\r\n private _editedEntityIndex: number;\r\n\r\n /**\r\n * The event being edited.\r\n */\r\n public readonly event = model<HistoricalEvent>();\r\n /**\r\n * Thesaurus event-types (hierarchical).\r\n */\r\n public readonly eventTypeEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus event-tags.\r\n */\r\n public readonly eventTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus event-relations (pseudo-hierarchical; the\r\n * separator used is : rather than .).\r\n */\r\n public readonly relationEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus chronotope-tags.\r\n */\r\n public readonly ctTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus asserted-id-scopes.\r\n */\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus asserted-id-tags.\r\n */\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus assertion-tags.\r\n */\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus doc-reference-tags.\r\n */\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus doc-reference-types.\r\n */\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The number of event type portions to cut from the event type ID when\r\n * building the prefix used to filter the corresponding relations IDs.\r\n * By default this is 0, i.e. the whole type ID (plus a final :) is\r\n * used as prefix. For instance, the ID \"person.birth\" generates prefix\r\n * \"person:birth:\". The portions of an ID are defined by splitting it at\r\n * each dot: so, should this property be 1, we would split the ID into\r\n * \"person\" and \"birth\", remove the last 1 tail(s), thus getting \"person\",\r\n * join back the portions and append a final colon, generating \"person:\".\r\n */\r\n public readonly eventTypeTailCut = input<number>(0);\r\n\r\n /**\r\n * True to disable ID lookup via scoped pin lookup.\r\n */\r\n public readonly noLookup = input<boolean>();\r\n\r\n public readonly editorClose = output();\r\n\r\n // event\r\n public eid: FormControl<string | null>;\r\n public type: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public description: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n public relatedEntities: FormControl<RelatedEntity[]>;\r\n public chronotopes: FormControl<AssertedChronotope[]>;\r\n public hasAssertion: FormControl<boolean>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // related entity\r\n // the prefix used to filter the relation entries\r\n public readonly typeEntryPrefix = signal<string | undefined>(undefined);\r\n\r\n // the current relation entries, filtered by the type prefix\r\n public readonly currentRelEntries = computed<ThesaurusEntry[]>(() => {\r\n if (!this.relationEntries()?.length) {\r\n return [];\r\n }\r\n const prefix = this.typeEntryPrefix();\r\n if (!prefix) {\r\n return this.relationEntries()!;\r\n }\r\n const filtered = this.relationEntries()!.filter((e) => e.id.startsWith(prefix));\r\n return filtered;\r\n });\r\n\r\n public editedEntity?: RelatedEntity;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this._editedEntityIndex = -1;\r\n // form\r\n this.eid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.type = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.description = formBuilder.control(null, Validators.maxLength(1000));\r\n this.note = formBuilder.control(null, Validators.maxLength(1000));\r\n this.relatedEntities = formBuilder.control([], { nonNullable: true });\r\n this.chronotopes = formBuilder.control([], { nonNullable: true });\r\n this.hasAssertion = formBuilder.control(false, { nonNullable: true });\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n eid: this.eid,\r\n type: this.type,\r\n tag: this.tag,\r\n description: this.description,\r\n note: this.note,\r\n relatedEntities: this.relatedEntities,\r\n chronotopes: this.chronotopes,\r\n hasAssertion: this.hasAssertion,\r\n assertion: this.assertion,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.event());\r\n });\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n\r\n private getTypeEntryPrefix(id: string): string {\r\n let p = id;\r\n\r\n // remove tail if any: by convention, an entry ID ending with \".-\"\r\n // is always treated as a tailed ID where the ending \"-\" should be removed.\r\n // This is because that's the convention for representing parent entries\r\n // like \"person.job.-\" with children like \"person.job.bishop\".\r\n const tailSize = p.endsWith('.-')\r\n ? 1 + this.eventTypeTailCut()\r\n : this.eventTypeTailCut();\r\n\r\n if (tailSize > 0) {\r\n // split the event type ID (truly hierarchical, e.g. \"person.birth\")\r\n const tokens = p.split('.');\r\n if (tokens.length >= tailSize) {\r\n tokens.splice(tokens.length - tailSize);\r\n }\r\n p = tokens.join(RELATION_SEP);\r\n return p + RELATION_SEP;\r\n }\r\n return p.replace('.', RELATION_SEP) + RELATION_SEP;\r\n }\r\n\r\n private updateTypeEntryPrefix(id: string): void {\r\n const prefix = this.getTypeEntryPrefix(id);\r\n this.typeEntryPrefix.set(prefix);\r\n }\r\n\r\n public onTypeEntryChange(entry: ThesaurusEntry): void {\r\n setTimeout(() => {\r\n this.type.setValue(entry.id);\r\n this.updateTypeEntryPrefix(entry.id);\r\n }, 0);\r\n }\r\n\r\n private updateForm(model: HistoricalEvent | undefined): void {\r\n if (!model) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.eid.setValue(model.eid, { emitEvent: false });\r\n this.type.setValue(model.type, { emitEvent: false });\r\n this.tag.setValue(model.tag || null, { emitEvent: false });\r\n this.description.setValue(model.description || null, { emitEvent: false });\r\n this.note.setValue(model.note || null, { emitEvent: false });\r\n this.chronotopes.setValue(model.chronotopes || [], { emitEvent: false });\r\n this.hasAssertion.setValue(model.assertion ? true : false, { emitEvent: false });\r\n this.assertion.setValue(model.assertion || null, { emitEvent: false });\r\n this.relatedEntities.setValue(model.relatedEntities || [], { emitEvent: false });\r\n\r\n this.form.markAsPristine();\r\n\r\n setTimeout(() => {\r\n this.updateTypeEntryPrefix(model.type);\r\n }, 0);\r\n }\r\n\r\n private getModel(): HistoricalEvent {\r\n return {\r\n eid: this.eid.value?.trim() || '',\r\n type: this.type.value?.trim() || '',\r\n tag: this.tag.value?.trim() || '',\r\n description: this.description.value?.trim() || undefined,\r\n note: this.note.value?.trim() || undefined,\r\n chronotopes: this.chronotopes.value.length\r\n ? this.chronotopes.value\r\n : undefined,\r\n assertion: this.hasAssertion.value\r\n ? this.assertion.value || undefined\r\n : undefined,\r\n relatedEntities: this.relatedEntities.value.length\r\n ? this.relatedEntities.value\r\n : undefined,\r\n };\r\n }\r\n\r\n public onChronotopesChange(chronotope: AssertedChronotope[]): void {\r\n this.chronotopes.setValue(chronotope);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n this.assertion.updateValueAndValidity();\r\n this.assertion.markAsDirty();\r\n }\r\n\r\n public addEntity(): void {\r\n this.editEntity(\r\n {\r\n id: { target: { gid: '', label: '' } },\r\n relation: this.currentRelEntries()?.length\r\n ? this.currentRelEntries()[0].id\r\n : '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editEntity(entity: RelatedEntity, index: number): void {\r\n this._editedEntityIndex = index;\r\n this.editedEntity = entity;\r\n }\r\n\r\n public onEntityChange(entity: RelatedEntity): void {\r\n // nope if already present\r\n if (\r\n this.relatedEntities.value.find(\r\n (e) => e.id === entity.id && e.relation === entity.relation\r\n )\r\n ) {\r\n this.closeEntity();\r\n return;\r\n }\r\n // add or replace\r\n const entities = [...this.relatedEntities.value];\r\n if (this._editedEntityIndex === -1) {\r\n entities.push(entity);\r\n } else {\r\n entities.splice(this._editedEntityIndex, 1, entity);\r\n }\r\n this.relatedEntities.setValue(entities);\r\n this.relatedEntities.updateValueAndValidity();\r\n this.relatedEntities.markAsDirty();\r\n this.closeEntity();\r\n }\r\n\r\n public closeEntity(): void {\r\n this._editedEntityIndex = -1;\r\n this.editedEntity = undefined;\r\n }\r\n\r\n public deleteEntity(index: number): void {\r\n if (this._editedEntityIndex === index) {\r\n this.closeEntity();\r\n }\r\n if (index > -1) {\r\n const entities = [...this.relatedEntities.value];\r\n entities.splice(index, 1);\r\n this.relatedEntities.setValue(entities);\r\n this.relatedEntities.updateValueAndValidity();\r\n this.relatedEntities.markAsDirty();\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.event.set(this.getModel());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <mat-tab label=\"general\">\r\n @if (eventTypeEntries()?.length) {\r\n <!-- bound type -->\r\n <div id=\"container\">\r\n <div id=\"ids\" class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- type (bound) -->\r\n <div id=\"type\">\r\n <fieldset>\r\n <legend>type</legend>\r\n @if (type.value) {\r\n <div class=\"sel-type\">\r\n {{\r\n type.value | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </div>\r\n } @else {\r\n <mat-error>no type</mat-error>\r\n }\r\n <cadmus-thesaurus-tree\r\n [entries]=\"eventTypeEntries()\"\r\n rootLabel=\"types\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onTypeEntryChange($event)\"\r\n />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </fieldset>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- free type -->\r\n <div class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- type (free) -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"type\" />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n } @if ($any(type).errors?.maxLength && (type.dirty || type.touched)) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <div>\r\n <!-- description -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>description</mat-label>\r\n <textarea matInput [formControl]=\"description\"></textarea>\r\n @if ( $any(description).errors?.maxLength && (description.dirty ||\r\n description.touched) ) {\r\n <mat-error>description too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>chronotopes</mat-expansion-panel-header>\r\n <fieldset>\r\n <legend>chronotopes</legend>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotopes]=\"chronotopes.value || undefined\"\r\n (chronotopesChange)=\"onChronotopesChange($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n\r\n <!-- assertion -->\r\n <mat-checkbox [formControl]=\"hasAssertion\">assertion</mat-checkbox>\r\n <mat-expansion-panel\r\n [expanded]=\"hasAssertion.value\"\r\n [disabled]=\"!hasAssertion.value\"\r\n >\r\n <fieldset>\r\n <legend>assertion</legend>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"related\">\r\n <!-- list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntity()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> related\r\n </button>\r\n </div>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>relation</th>\r\n <th>ID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (e of relatedEntities.value; track e.id; let i = $index) {\r\n <tr [class.selected]=\"editedEntity === e\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"editEntity(e, i)\"\r\n matTooltip=\"Edit this entity\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"deleteEntity(i)\"\r\n matTooltip=\"Delete this entity\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ e.relation | flatLookup : relationEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ e.id.target.label }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- entity editor -->\r\n <mat-expansion-panel [disabled]=\"!editedEntity\" [expanded]=\"editedEntity\">\r\n <mat-expansion-panel-header>entity</mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-related-entity\r\n [relationEntries]=\"currentRelEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [entity]=\"editedEntity\"\r\n (entityChange)=\"onEntityChange($event!)\"\r\n (editorClose)=\"closeEntity()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"button-row\">\r\n <button type=\"button\" mat-icon-button (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Save event\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>event</span>\r\n </div>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\nimport { HistoricalDateModel } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n/**\r\n * The HistoricalDate part model.\r\n */\r\nexport interface HistoricalDatePart extends Part {\r\n date: HistoricalDateModel;\r\n references?: DocReference[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the HistoricalDatePart type.\r\n */\r\nexport const HISTORICAL_DATE_PART_TYPEID = 'it.vedph.historical-date';\r\n\r\n/**\r\n * JSON schema for the HistoricalDate part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const HISTORICAL_DATE_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n HISTORICAL_DATE_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'HistoricalDatePart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'date',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n},\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n} from '@angular/material/expansion';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n HistoricalDate,\r\n HistoricalDateModel,\r\n HistoricalDateComponent,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n HistoricalDatePart,\r\n HISTORICAL_DATE_PART_TYPEID,\r\n} from '../historical-date-part';\r\n\r\n@Component({\r\n selector: 'cadmus-historical-date-part',\r\n templateUrl: './historical-date-part.component.html',\r\n styleUrls: ['./historical-date-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n HistoricalDateComponent,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n DocReferencesComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class HistoricalDatePartComponent\r\n extends ModelEditorComponentBase<HistoricalDatePart>\r\n implements OnInit\r\n{\r\n public references: FormControl<DocReference[]>;\r\n public date: FormControl<HistoricalDateModel>;\r\n\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.date = formBuilder.control(new HistoricalDate(), {\r\n nonNullable: true,\r\n });\r\n this.references = formBuilder.control([], { nonNullable: true });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n date: this.date,\r\n references: this.references,\r\n });\r\n }\r\n\r\n private updateForm(part?: HistoricalDatePart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.references.setValue(part.references || []);\r\n this.date.setValue(part.date);\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<HistoricalDatePart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): HistoricalDatePart {\r\n let part = this.getEditedPart(\r\n HISTORICAL_DATE_PART_TYPEID\r\n ) as HistoricalDatePart;\r\n part.date = this.date.value;\r\n part.references = this.references.value?.length\r\n ? this.references.value\r\n : undefined;\r\n return part;\r\n }\r\n\r\n public onDateChange(date: HistoricalDateModel): void {\r\n this.date.setValue(date);\r\n this.date.markAsDirty();\r\n this.date.updateValueAndValidity();\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Date Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>references</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators, FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { AssertedChronotopesPipe } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { HistoricalEventEditorComponent } from '../historical-event-editor/historical-event-editor.component';\r\n\r\nimport {\r\n HistoricalEvent,\r\n HistoricalEventsPart,\r\n HISTORICAL_EVENTS_PART_TYPEID,\r\n} from '../historical-events-part';\r\n\r\n/**\r\n * Historical events part.\r\n * Thesauri: event-types, event-tags, event-relations, chronotope-tags,\r\n * asserted-id-scopes, asserted-id-tags, assertion-tags, doc-reference-tags,\r\n * doc-reference-types, pin-link-scopes, pin-link-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-historical-events-part',\r\n templateUrl: './historical-events-part.component.html',\r\n styleUrls: ['./historical-events-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n HistoricalEventEditorComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n AssertedChronotopesPipe,\r\n FlatLookupPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class HistoricalEventsPartComponent\r\n extends ModelEditorComponentBase<HistoricalEventsPart>\r\n implements OnInit\r\n{\r\n public editedEventIndex: number;\r\n public editedEvent: HistoricalEvent | undefined;\r\n\r\n /**\r\n * Thesaurus event-types.\r\n */\r\n public eventTypeEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus event-tags.\r\n */\r\n public eventTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus event-relations.\r\n */\r\n public relationEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus chronotope-tags.\r\n */\r\n public ctTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus assertion-tags.\r\n */\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus doc-reference-tags.\r\n */\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus doc-reference-types.\r\n */\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n public events: FormControl<HistoricalEvent[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedEventIndex = -1;\r\n // form\r\n this.events = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n events: this.events,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'event-types';\r\n if (this.hasThesaurus(key)) {\r\n this.eventTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.eventTypeEntries = undefined;\r\n }\r\n key = 'event-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.eventTagEntries = thesauri[key].entries;\r\n } else {\r\n this.eventTagEntries = undefined;\r\n }\r\n key = 'event-relations';\r\n if (this.hasThesaurus(key)) {\r\n this.relationEntries = thesauri[key].entries;\r\n } else {\r\n this.relationEntries = undefined;\r\n }\r\n key = 'chronotope-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.ctTagEntries = thesauri[key].entries;\r\n } else {\r\n this.ctTagEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n // pin-link\r\n key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: HistoricalEventsPart | null): void {\r\n this.closeEvent();\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.events.setValue(part.events || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<HistoricalEventsPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): HistoricalEventsPart {\r\n let part = this.getEditedPart(\r\n HISTORICAL_EVENTS_PART_TYPEID\r\n ) as HistoricalEventsPart;\r\n part.events = this.events.value || [];\r\n return part;\r\n }\r\n\r\n public closeEvent(): void {\r\n this.editedEventIndex = -1;\r\n this.editedEvent = undefined;\r\n }\r\n\r\n public addEvent(): void {\r\n this.editEvent(\r\n {\r\n eid: '',\r\n type: this.eventTypeEntries?.length ? this.eventTypeEntries[0].id : '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editEvent(event: HistoricalEvent, index: number): void {\r\n this.editedEventIndex = index;\r\n this.editedEvent = event;\r\n }\r\n\r\n public onEventSave(event: HistoricalEvent): void {\r\n const events = [...this.events.value];\r\n if (this.editedEventIndex === -1) {\r\n events.push(event);\r\n } else {\r\n events[this.editedEventIndex] = event;\r\n }\r\n this.events.setValue(events);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n this.closeEvent();\r\n }\r\n\r\n public deleteEvent(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete event?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this.editedEventIndex === index) {\r\n this.closeEvent();\r\n }\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveEventUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.events.value[index];\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n\r\n public moveEventDown(index: number): void {\r\n if (index + 1 >= this.events.value.length) {\r\n return;\r\n }\r\n const entry = this.events.value[index];\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Events Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <!-- events list -->\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addEvent()\"\n >\n <mat-icon>add_circle</mat-icon> event\n </button>\n </div>\n @if (events.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>type</th>\n <th>tag</th>\n <th>ID</th>\n <th>place/date</th>\n <th>rel.</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of events.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"editedEvent === entry\">\n <td class=\"fit-width\">\n <span class=\"nr\">{{ i + 1 }}.</span>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this event\"\n (click)=\"editEvent(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this event up\"\n [disabled]=\"first\"\n (click)=\"moveEventUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this event down\"\n [disabled]=\"last\"\n (click)=\"moveEventDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this event\"\n (click)=\"deleteEvent(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>\n {{ entry.type | flatLookup : eventTypeEntries : \"id\" : \"value\" }}\n </td>\n <td>{{ entry.tag }}</td>\n <td>{{ entry.eid }}</td>\n <td>{{ entry.chronotopes | assertedChronotopes }}</td>\n <td>{{ entry.relatedEntities?.length || 0 }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- event editor -->\n <mat-expansion-panel [expanded]=\"editedEvent\" [disabled]=\"!editedEvent\">\n @if (editedEvent) {\n <mat-expansion-panel-header>\n <span class=\"edited-title\">event</span>\n <span class=\"nr\">{{ editedEventIndex + 1 }}</span>\n </mat-expansion-panel-header>\n }\n <fieldset>\n <cadmus-historical-event-editor\n [eventTagEntries]=\"eventTagEntries\"\n [eventTypeEntries]=\"eventTypeEntries\"\n [relationEntries]=\"relationEntries\"\n [ctTagEntries]=\"ctTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [event]=\"editedEvent\"\n (eventChange)=\"onEventSave($event!)\"\n (editorClose)=\"closeEvent()\"\n />\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Component, model, effect, output, input } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { IndexKeyword } from '../index-keywords-part';\r\n\r\n@Component({\r\n selector: 'cadmus-index-keyword',\r\n templateUrl: './index-keyword.component.html',\r\n styleUrls: ['./index-keyword.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n ],\r\n})\r\nexport class IndexKeywordComponent {\r\n public readonly keyword = model<IndexKeyword>();\r\n\r\n public readonly idxEntries = input<ThesaurusEntry[]>();\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n public readonly langEntries = input<ThesaurusEntry[]>();\r\n\r\n public readonly editorClose = output();\r\n\r\n public indexId: FormControl<string | null>;\r\n public language: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.indexId = formBuilder.control(null, [\r\n Validators.maxLength(50),\r\n Validators.pattern(/^[-.a-zA-Z0-9_]{0,50}$/),\r\n ]);\r\n this.language = formBuilder.control(null, [\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.note = formBuilder.control(null, Validators.maxLength(200));\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.form = formBuilder.group({\r\n indexId: this.indexId,\r\n language: this.language,\r\n value: this.value,\r\n note: this.note,\r\n tag: this.tag,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.keyword());\r\n });\r\n }\r\n\r\n private updateForm(keyword?: IndexKeyword): void {\r\n if (!keyword) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.indexId.setValue(keyword.indexId || null);\r\n this.language.setValue(keyword.language);\r\n this.value.setValue(keyword.value);\r\n this.note.setValue(keyword.note || null);\r\n this.tag.setValue(keyword.tag || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getKeyword(): IndexKeyword {\r\n return {\r\n indexId: this.indexId.value?.trim(),\r\n language: this.language.value?.trim() || '',\r\n value: this.value.value?.trim() || '',\r\n note: this.note.value?.trim(),\r\n tag: this.tag.value?.trim(),\r\n };\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public submit(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.keyword.set(this.getKeyword());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div class=\"form-row\">\n <!-- index ID -->\n @if (idxEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <mat-select [formControl]=\"indexId\">\n <mat-option [value]=\"''\">(default)</mat-option>\n @for (e of idxEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <input matInput type=\"text\" [formControl]=\"indexId\" />\n @if ( indexId.hasError('maxLength') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>index ID too long</mat-error>\n } @if ( indexId.hasError('pattern') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>invalid index ID</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- language -->\n @if (langEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"language\">\n <mat-option [value]=\"null\">(n/a)</mat-option>\n @for (e of langEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput type=\"text\" [formControl]=\"language\" />\n @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid language</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- value -->\n <div>\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" [formControl]=\"value\" autofocus />\n @if (value.hasError('maxLength') && (value.dirty || value.touched)) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- tag -->\n <div>\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput type=\"text\" [formControl]=\"note\" />\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close keyword\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid || form.pristine\"\n mat-icon-button\n matTooltip=\"Save keyword\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Index keyword.\r\n */\r\nexport interface IndexKeyword {\r\n indexId?: string;\r\n language: string;\r\n value: string;\r\n note?: string;\r\n tag?: string;\r\n}\r\n\r\n/**\r\n * Index keywords part.\r\n */\r\nexport interface IndexKeywordsPart extends Part {\r\n keywords: IndexKeyword[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the IndexKeywordsPart type.\r\n */\r\nexport const INDEX_KEYWORDS_PART_TYPEID = 'it.vedph.index-keywords';\r\n\r\n/**\r\n * JSON schema for the index keywords part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const INDEX_KEYWORDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n INDEX_KEYWORDS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'IndexKeywordsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'keywords'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n} from '@angular/material/expansion';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { FlatLookupPipe, NgxToolsValidators } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n IndexKeywordsPart,\r\n IndexKeyword,\r\n INDEX_KEYWORDS_PART_TYPEID,\r\n} from '../index-keywords-part';\r\nimport { IndexKeywordComponent } from '../index-keyword/index-keyword.component';\r\n\r\n/**\r\n * Index keywords part editor.\r\n * Thesauri: languages, keyword-indexes, keyword-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-index-keywords-part',\r\n templateUrl: './index-keywords-part.component.html',\r\n styleUrls: ['./index-keywords-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n TitleCasePipe,\r\n FlatLookupPipe,\r\n IndexKeywordComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class IndexKeywordsPartComponent\r\n extends ModelEditorComponentBase<IndexKeywordsPart>\r\n implements OnInit\r\n{\r\n public editedKeyword?: IndexKeyword;\r\n // thesaurus\r\n public idxEntries: ThesaurusEntry[] | undefined;\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public keywords: FormControl<IndexKeyword[]>;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.keywords = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n key = 'keyword-indexes';\r\n if (this.hasThesaurus(key)) {\r\n this.idxEntries = thesauri[key].entries;\r\n } else {\r\n this.idxEntries = undefined;\r\n }\r\n key = 'keyword-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private compareKeywords(a: IndexKeyword, b: IndexKeyword): number {\r\n if (!a) {\r\n if (!b) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n if (!b) {\r\n return 1;\r\n }\r\n // indexId\r\n if (!a.indexId && b.indexId) {\r\n return -1;\r\n }\r\n if (a.indexId && !b.indexId) {\r\n return 1;\r\n }\r\n let n: number;\r\n if (a.indexId && b.indexId) {\r\n n = a.indexId.localeCompare(b.indexId);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n }\r\n n = a.language.localeCompare(b.language);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n return a.value.localeCompare(b.value);\r\n }\r\n\r\n private updateForm(part?: IndexKeywordsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n const keywords: IndexKeyword[] = Object.assign([], part.keywords);\r\n keywords.sort(this.compareKeywords);\r\n this.keywords.setValue(keywords);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<IndexKeywordsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): IndexKeywordsPart {\r\n let part = this.getEditedPart(\r\n INDEX_KEYWORDS_PART_TYPEID\r\n ) as IndexKeywordsPart;\r\n part.keywords = [...this.keywords.value];\r\n return part;\r\n }\r\n\r\n private addKeyword(keyword: IndexKeyword): boolean {\r\n let i = 0;\r\n while (i < this.keywords.value.length) {\r\n const n = this.compareKeywords(keyword, this.keywords.value[i]);\r\n if (n === 0) {\r\n return false;\r\n }\r\n if (n <= 0) {\r\n const keywords: IndexKeyword[] = Object.assign([], this.keywords.value);\r\n keywords.splice(i, 0, keyword);\r\n this.keywords.setValue(keywords);\r\n break;\r\n }\r\n i++;\r\n }\r\n if (i === this.keywords.value.length) {\r\n const keywords: IndexKeyword[] = Object.assign([], this.keywords.value);\r\n keywords.push(keyword);\r\n this.keywords.setValue(keywords);\r\n }\r\n\r\n this.keywords.markAsDirty();\r\n this.keywords.updateValueAndValidity();\r\n\r\n return true;\r\n }\r\n\r\n public addNewKeyword(): void {\r\n const keyword: IndexKeyword = {\r\n indexId: this.idxEntries?.length ? this.idxEntries[0].id : undefined,\r\n language: this.langEntries?.length ? this.langEntries[0].id : 'eng',\r\n value: '',\r\n };\r\n this.editKeyword(keyword);\r\n }\r\n\r\n public deleteKeyword(keyword: IndexKeyword): void {\r\n const keywords: IndexKeyword[] = [...this.keywords.value];\r\n keywords.splice(keywords.indexOf(keyword), 1);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public editKeyword(keyword: IndexKeyword): void {\r\n this.editedKeyword = keyword;\r\n }\r\n\r\n public onKeywordClose(): void {\r\n this.editedKeyword = undefined;\r\n }\r\n\r\n public onKeywordChange(keyword: IndexKeyword): void {\r\n this.addKeyword(keyword);\r\n this.editedKeyword = undefined;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{\r\n (modelName() | titlecase) || \"Index Keywords Part\"\r\n }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addNewKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n\r\n @if (keywords.value.length) {\r\n <div id=\"list\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>index</th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr [class.selected]=\"editedKeyword === k\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit this keyword\"\r\n (click)=\"editKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.indexId }}</td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @if (editedKeyword) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [disabled]=\"!editedKeyword\"\r\n [expanded]=\"editedKeyword\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> keyword </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-index-keyword\r\n [keyword]=\"editedKeyword\"\r\n [idxEntries]=\"idxEntries\"\r\n [langEntries]=\"langEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (editorClose)=\"onKeywordClose()\"\r\n (keywordChange)=\"onKeywordChange($event!)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\nexport interface Keyword {\r\n language: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * The Keywords part model.\r\n */\r\nexport interface KeywordsPart extends Part {\r\n keywords: Keyword[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the KeywordsPart type.\r\n */\r\nexport const KEYWORDS_PART_TYPEID = 'it.vedph.keywords';\r\n\r\n/**\r\n * JSON schema for the Keywords part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const KEYWORDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + KEYWORDS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'KeywordsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'keywords'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['language', 'value'],\r\n properties: {\r\n language: {\r\n type: 'string'\r\n },\r\n value: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { KeywordsPart, Keyword, KEYWORDS_PART_TYPEID } from '../keywords-part';\r\n\r\n/**\r\n * Keywords editor component.\r\n * Thesauri: languages.\r\n */\r\n@Component({\r\n selector: 'cadmus-keywords-part',\r\n templateUrl: './keywords-part.component.html',\r\n styleUrls: ['./keywords-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatError,\r\n MatInput,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class KeywordsPartComponent\r\n extends ModelEditorComponentBase<KeywordsPart>\r\n implements OnInit\r\n{\r\n public keywords: FormControl<Keyword[]>;\r\n // new keyword form\r\n public newLanguage: FormControl<string | null>;\r\n public newValue: FormControl<string | null>;\r\n public newForm: FormGroup;\r\n // thesaurus\r\n public langEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.keywords = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n // new keyword form\r\n this.newLanguage = formBuilder.control('eng', Validators.required);\r\n this.newValue = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.newForm = formBuilder.group({\r\n newLanguage: this.newLanguage,\r\n newValue: this.newValue,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n }\r\n\r\n private compareKeywords(a: Keyword, b: Keyword): number {\r\n if (!a) {\r\n if (!b) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n if (!b) {\r\n return 1;\r\n }\r\n const n = a.language.localeCompare(b.language);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n return a.value.localeCompare(b.value);\r\n }\r\n\r\n private updateForm(part?: KeywordsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n const keywords = [...part.keywords];\r\n keywords.sort(this.compareKeywords);\r\n this.keywords.setValue(keywords);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<KeywordsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): KeywordsPart {\r\n let part = this.getEditedPart(KEYWORDS_PART_TYPEID) as KeywordsPart;\r\n part.keywords = [...this.keywords.value];\r\n return part;\r\n }\r\n\r\n public addKeyword(): void {\r\n if (this.newForm.invalid) {\r\n return;\r\n }\r\n const keyword: Keyword = {\r\n language: this.newLanguage.value!,\r\n value: this.newValue.value!,\r\n };\r\n let i = 0;\r\n while (i < this.keywords.value?.length || 0) {\r\n const n = this.compareKeywords(keyword, this.keywords.value[i]);\r\n if (n === 0) {\r\n return;\r\n }\r\n if (n <= 0) {\r\n const keywords = [...this.keywords.value];\r\n keywords.splice(i, 0, keyword);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n break;\r\n }\r\n i++;\r\n }\r\n if (i === this.keywords.value.length) {\r\n const keywords = [...this.keywords.value];\r\n keywords.push(keyword);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n }\r\n\r\n public deleteKeyword(keyword: Keyword): void {\r\n const keywords = [...this.keywords.value];\r\n keywords.splice(this.keywords.value.indexOf(keyword), 1);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title\n [matBadge]=\"keywords.value.length\"\n matBadgeOverlap=\"false\"\n >{{ (modelName() | titlecase) || \"Keywords Part\" }}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- language -->\n <form [formGroup]=\"newForm\" (ngSubmit)=\"addKeyword()\" class=\"form-row\">\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"newLanguage\">\n @for (t of langEntries; track t.id) {\n <mat-option [value]=\"t.id\">\n {{ t.value }}\n </mat-option>\n }\n </mat-select>\n <mat-error>select a language</mat-error>\n </mat-form-field>\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input\n matInput\n autofocus\n type=\"text\"\n id=\"value\"\n [formControl]=\"newValue\"\n />\n @if ( newValue.hasError('required') && (newValue.touched ||\n newValue.dirty) ) {\n <mat-error>enter a value</mat-error>\n } @if ( newValue.hasError('maxLength') && (newValue.touched ||\n newValue.dirty) ) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n type=\"submit\"\n class=\"mat-primary\"\n [disabled]=\"newForm.invalid\"\n >\n <mat-icon>add_circle</mat-icon> keyword\n </button>\n </form>\n <hr />\n @if (keywords.valid) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>lang.</th>\n <th>keyword</th>\n </tr>\n </thead>\n <tbody>\n @for (k of keywords.value; track k) {\n <tr>\n <td>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Delete this keyword\"\n (click)=\"deleteKeyword(k)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ k.language }}</td>\n <td>{{ k.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The metadata part model.\r\n */\r\nexport interface MetadataPart extends Part {\r\n metadata: Metadatum[];\r\n}\r\n\r\n/**\r\n * A metadata entry in MetadataPart.\r\n */\r\nexport interface Metadatum {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the MetadataPart type.\r\n */\r\nexport const METADATA_PART_TYPEID = 'it.vedph.metadata';\r\n\r\n/**\r\n * JSON schema for the metadata part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const METADATA_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + METADATA_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'MetadataPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'metadata',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n metadata: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['name', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n Validators,\r\n FormArray,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatError,\r\n MatHint,\r\n} from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n MetadataPart,\r\n METADATA_PART_TYPEID,\r\n Metadatum,\r\n} from '../metadata-part';\r\n\r\n/**\r\n * Metadata part editor component.\r\n * Thesauri: metadata-types (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-metadata-part',\r\n templateUrl: './metadata-part.component.html',\r\n styleUrls: ['./metadata-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatError,\r\n MatInput,\r\n MatHint,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class MetadataPartComponent\r\n extends ModelEditorComponentBase<MetadataPart>\r\n implements OnInit, OnDestroy\r\n{\r\n private _subs: Subscription[];\r\n public metadata: FormArray;\r\n\r\n /**\r\n * metadata-types thesaurus entries.\r\n */\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * metadata-names thesaurus entries.\r\n */\r\n public nameEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n this._subs = [];\r\n // form\r\n this.metadata = formBuilder.array(\r\n [],\r\n NgxToolsValidators.strictMinLengthValidator(1)\r\n );\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n metadata: this.metadata,\r\n });\r\n }\r\n\r\n private unsubscribe(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n this._subs.length = 0;\r\n }\r\n\r\n public override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.unsubscribe();\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'metadata-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n key = 'metadata-names';\r\n if (this.hasThesaurus(key)) {\r\n this.nameEntries = thesauri[key].entries;\r\n } else {\r\n this.nameEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: MetadataPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.metadata.clear();\r\n this.unsubscribe();\r\n if (part.metadata?.length) {\r\n for (let m of part.metadata) {\r\n const g = this.getMetadatumGroup(m);\r\n this._subs.push(\r\n g.valueChanges.subscribe((_) => {\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n })\r\n );\r\n this.metadata.controls.push(g);\r\n }\r\n }\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<MetadataPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): MetadataPart {\r\n let part = this.getEditedPart(METADATA_PART_TYPEID) as MetadataPart;\r\n part.metadata = this.getMetadata();\r\n return part;\r\n }\r\n\r\n private getMetadatumGroup(item?: Metadatum): FormGroup {\r\n return this.formBuilder.group({\r\n type: this.formBuilder.control(item?.type, Validators.maxLength(100)),\r\n name: this.formBuilder.control(item?.name, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n value: this.formBuilder.control(item?.value, [\r\n Validators.required,\r\n Validators.maxLength(1000),\r\n ]),\r\n });\r\n }\r\n\r\n public addMetadatum(item?: Metadatum): void {\r\n const g = this.getMetadatumGroup(item);\r\n this._subs.push(\r\n g.valueChanges.subscribe((_) => {\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n })\r\n );\r\n this.metadata.push(g);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public removeMetadatum(index: number): void {\r\n this._subs[index].unsubscribe();\r\n this._subs.splice(index, 1);\r\n this.metadata.removeAt(index);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public moveMetadatumUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const s = this._subs[index];\r\n this._subs.splice(index, 1);\r\n this._subs.splice(index - 1, 0, s);\r\n\r\n const item = this.metadata.controls[index];\r\n this.metadata.removeAt(index);\r\n this.metadata.insert(index - 1, item);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public moveMetadatumDown(index: number): void {\r\n if (index + 1 >= this.metadata.length) {\r\n return;\r\n }\r\n const s = this._subs[index];\r\n this._subs.splice(index, 1);\r\n this._subs.splice(index + 1, 0, s);\r\n\r\n const item = this.metadata.controls[index];\r\n this.metadata.removeAt(index);\r\n this.metadata.insert(index + 1, item);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n private getMetadata(): Metadatum[] {\r\n const entries: Metadatum[] = [];\r\n for (let i = 0; i < this.metadata.length; i++) {\r\n const g = this.metadata.at(i) as FormGroup;\r\n entries.push({\r\n type: g.controls['type'].value?.trim(),\r\n name: g.controls['name'].value?.trim(),\r\n value: g.controls['value'].value?.trim(),\r\n });\r\n }\r\n return entries;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Metadata Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div formArrayName=\"metadata\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addMetadatum()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> metadatum\r\n </button>\r\n </div>\r\n @for ( g of metadata.controls; track g; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span style=\"flex: 0 0 auto\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this metadatum\"\r\n (click)=\"removeMetadatum(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move metadatum up\"\r\n (click)=\"moveMetadatumUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move metadatum down\"\r\n (click)=\"moveMetadatumDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </span>\r\n <!-- child controls -->\r\n <!-- type (bound) -->\r\n @if (typeEntries?.length) {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- type (free) -->\r\n @else {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <input matInput formControlName=\"type\" />\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n } @if ( $any(g)['controls'].type.errors?.maxLength &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (nameEntries?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select formControlName=\"name\">\r\n @for (e of nameEntries; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput formControlName=\"name\" />\r\n <mat-hint>eid = entity ID</mat-hint>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n } @if ( $any(g)['controls'].name.errors?.maxLength &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(g)['controls'].value.errors?.required &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(g)['controls'].value.errors?.maxLength &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedProperName } from '@myrmidon/cadmus-refs-proper-name';\r\n\r\n/**\r\n * The names part model.\r\n */\r\nexport interface NamesPart extends Part {\r\n names: AssertedProperName[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the NamesPart type.\r\n */\r\nexport const NAMES_PART_TYPEID = 'it.vedph.names';\r\n\r\n/**\r\n * JSON schema for the names part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const NAMES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + NAMES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'NamesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'names',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n names: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['language', 'pieces'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n pieces: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedProperName,\r\n ProperNameComponent,\r\n CadmusProperNamePipe,\r\n} from '@myrmidon/cadmus-refs-proper-name';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { NamesPart, NAMES_PART_TYPEID } from '../names-part';\r\n\r\n/**\r\n * Names part editor component.\r\n * Thesauri: name-languages, name-tags, name-piece-types, assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-names-part',\r\n templateUrl: './names-part.component.html',\r\n styleUrls: ['./names-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionModule,\r\n ProperNameComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CadmusProperNamePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class NamesPartComponent\r\n extends ModelEditorComponentBase<NamesPart>\r\n implements OnInit\r\n{\r\n private _updatingForm?: boolean;\r\n\r\n public editedIndex: number;\r\n public editedName: AssertedProperName | undefined;\r\n\r\n /**\r\n * The optional thesaurus proper name languages entries (name-languages).\r\n */\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * The optional thesaurus name's tag entries (name-tags).\r\n */\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * The optional thesaurus name piece's type entries (name-piece-types).\r\n */\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n // thesauri for assertions:\r\n // assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public names: FormControl<AssertedProperName[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.names = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n names: this.names,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'name-languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n key = 'name-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n key = 'name-piece-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: NamesPart | null): void {\r\n this._updatingForm = true;\r\n if (!part) {\r\n this.form.reset();\r\n } else {\r\n this.names.setValue(part.names || []);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<NamesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): NamesPart {\r\n let part = this.getEditedPart(NAMES_PART_TYPEID) as NamesPart;\r\n part.names = this.names.value || [];\r\n return part;\r\n }\r\n\r\n public addName(): void {\r\n const name: AssertedProperName = {\r\n language: this.langEntries?.length ? this.langEntries[0].id : '',\r\n pieces: [],\r\n };\r\n this.names.setValue([...(this.names.value || []), name]);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n this.editName(this.names.value.length - 1);\r\n }\r\n\r\n public editName(index: number): void {\r\n if (index < 0) {\r\n this.editedIndex = -1;\r\n this.editedName = undefined;\r\n } else {\r\n this.editedIndex = index;\r\n this.editedName = this.names.value[index];\r\n }\r\n }\r\n\r\n public onNameChange(name: AssertedProperName | undefined): void {\r\n if (this._updatingForm) {\r\n return;\r\n }\r\n if (name) {\r\n // else update replacing the old with the new name\r\n this.names.setValue(\r\n this.names.value.map((n: AssertedProperName, i: number) =>\r\n i === this.editedIndex ? name : n\r\n )\r\n );\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n }\r\n\r\n public onNameClose(): void {\r\n this.editName(-1);\r\n }\r\n\r\n public deleteName(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete name?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveNameUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const name = this.names.value[index];\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n names.splice(index - 1, 0, name);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n\r\n public moveNameDown(index: number): void {\r\n if (index + 1 >= this.names.value.length) {\r\n return;\r\n }\r\n const name = this.names.value[index];\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n names.splice(index + 1, 0, name);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Names Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addName()\"\n >\n <mat-icon>add_circle</mat-icon> name\n </button>\n </div>\n @if (names.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>name</th>\n <th>rank</th>\n </tr>\n </thead>\n <tbody>\n @for ( name of names.value; track name; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"name === editedName\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this name\"\n (click)=\"editName(i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this name up\"\n [disabled]=\"first\"\n (click)=\"moveNameUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this name down\"\n [disabled]=\"last\"\n (click)=\"moveNameDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this name\"\n (click)=\"deleteName(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ name | cadmusProperName }}</td>\n <td>{{ name.assertion?.rank || 0 }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- name editor -->\n @if (editedName) {\n <fieldset>\n <mat-expansion-panel [expanded]=\"editedName\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ editedName | cadmusProperName }}</mat-panel-title\n ></mat-expansion-panel-header\n >\n <cadmus-refs-proper-name\n [langEntries]=\"langEntries\"\n [tagEntries]=\"tagEntries\"\n [typeEntries]=\"typeEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [name]=\"editedName\"\n (nameChange)=\"onNameChange($event)\"\n />\n </mat-expansion-panel>\n </fieldset>\n }\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Note part.\r\n */\r\nexport interface NotePart extends Part {\r\n text: string;\r\n tag?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the NotePart type.\r\n */\r\nexport const NOTE_PART_TYPEID = 'it.vedph.note';\r\n\r\n/**\r\n * JSON schema for the note part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const NOTE_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + NOTE_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'NotePart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'text'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n text: {\r\n type: 'string'\r\n },\r\n tag: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n};\r\n","import { Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\nimport { NgeMarkdownModule } from '@cisstech/nge/markdown';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n CadmusTextEdService,\r\n CADMUS_TEXT_ED_BINDINGS_TOKEN,\r\n CadmusTextEdBindings,\r\n} from '@myrmidon/cadmus-text-ed';\r\n\r\nimport { NotePart, NOTE_PART_TYPEID } from '../note-part';\r\n\r\n/**\r\n * Note part editor component.\r\n * Thesauri: optionally \"note-tags\", when you want to use a closed set of tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-note-part',\r\n templateUrl: './note-part.component.html',\r\n styleUrls: ['./note-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n TitleCasePipe,\r\n NgeMonacoModule,\r\n NgeMarkdownModule,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n providers: [CadmusTextEdService],\r\n})\r\nexport class NotePartComponent\r\n extends ModelEditorComponentBase<NotePart>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public tag: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n\r\n public tagEntries?: ThesaurusEntry[];\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _editService: CadmusTextEdService,\r\n @Inject(CADMUS_TEXT_ED_BINDINGS_TOKEN)\r\n @Optional()\r\n private _editorBindings?: CadmusTextEdBindings\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.text = formBuilder.control(null, Validators.required);\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n private async applyEdit(selector: string) {\r\n if (!this._editor) {\r\n return;\r\n }\r\n const selection = this._editor.getSelection();\r\n const text = selection\r\n ? this._editor.getModel()!.getValueInRange(selection)\r\n : '';\r\n\r\n const result = await this._editService.edit({\r\n selector,\r\n text: text,\r\n });\r\n\r\n this._editor.executeEdits('my-source', [\r\n {\r\n range: selection!,\r\n text: result.text,\r\n forceMoveMarkers: true,\r\n },\r\n ]);\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'markdown');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // plugins\r\n if (this._editorBindings) {\r\n Object.keys(this._editorBindings).forEach((key) => {\r\n const n = parseInt(key, 10);\r\n console.log(\r\n 'Binding ' + n + ' to ' + this._editorBindings![key as any]\r\n );\r\n this._editor!.addCommand(n, () => {\r\n this.applyEdit(this._editorBindings![key as any]);\r\n });\r\n });\r\n }\r\n }\r\n\r\n // @HostListener('window:resize', ['$event'])\r\n // public onResize(event: any) {\r\n // this._editor?.layout();\r\n // }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n tag: this.tag,\r\n text: this.text,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'note-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: NotePart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.tag.setValue(part.tag || null);\r\n this.text.setValue(part.text);\r\n this._editorModel?.setValue(part.text || '');\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<NotePart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): NotePart {\r\n let part = this.getEditedPart(NOTE_PART_TYPEID) as NotePart;\r\n part.tag = this.tag.value || undefined;\r\n part.text = this.text.value?.trim() || '';\r\n return part;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Note Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"tga\">\n @if (!tagEntries) {\n <!-- free tag -->\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"tag\"\n spellcheck=\"false\"\n />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n } @else {\n <!-- bound tag -->\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n\n <div id=\"content-wrapper\">\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor id=\"editor\" (ready)=\"onCreateEditor($event)\" />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n <!-- preview -->\n <div id=\"pvw\">\n <nge-markdown [data]=\"text.value || undefined\" />\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { PhysicalMeasurement } from '@myrmidon/cadmus-mat-physical-size';\r\n\r\n/**\r\n * The PhysicalMeasurements part model.\r\n */\r\nexport interface PhysicalMeasurementsPart extends Part {\r\n measurements: PhysicalMeasurement[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PhysicalMeasurementsPart type.\r\n */\r\nexport const PHYSICAL_MEASUREMENTS_PART_TYPEID =\r\n 'it.vedph.physical-measurements';\r\n\r\n/**\r\n * JSON schema for the PhysicalMeasurements part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PHYSICAL_MEASUREMENTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PhysicalMeasurementsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'measurements',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n measurements: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['name', 'value', 'unit'],\r\n properties: {\r\n name: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'number',\r\n },\r\n unit: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n PhysicalMeasurement,\r\n PhysicalMeasurementSetComponent,\r\n} from '@myrmidon/cadmus-mat-physical-size';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID,\r\n PhysicalMeasurementsPart,\r\n} from '../physical-measurements-part';\r\n\r\n/**\r\n * PhysicalMeasurements part editor component.\r\n * Thesauri: physical-size-units, physical-size-dim-tags, physical-size-set-names (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-physical-measurements-part',\r\n templateUrl: './physical-measurements-part.component.html',\r\n styleUrl: './physical-measurements-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n TitleCasePipe,\r\n PhysicalMeasurementSetComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PhysicalMeasurementsPartComponent\r\n extends ModelEditorComponentBase<PhysicalMeasurementsPart>\r\n implements OnInit\r\n{\r\n public measurements: FormControl<PhysicalMeasurement[]>;\r\n\r\n // physical-size-units\r\n public unitEntries?: ThesaurusEntry[];\r\n // physical-size-dim-tags\r\n public dimTagEntries?: ThesaurusEntry[];\r\n // physical-size-set-names\r\n public nameEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.measurements = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n measurements: this.measurements,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'physical-size-units';\r\n if (this.hasThesaurus(key)) {\r\n this.unitEntries = thesauri[key].entries;\r\n } else {\r\n this.unitEntries = undefined;\r\n }\r\n key = 'physical-size-dim-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.dimTagEntries = thesauri[key].entries;\r\n } else {\r\n this.dimTagEntries = undefined;\r\n }\r\n key = 'physical-size-set-names';\r\n if (this.hasThesaurus(key)) {\r\n this.nameEntries = thesauri[key].entries;\r\n } else {\r\n this.nameEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PhysicalMeasurementsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.measurements.setValue(part.measurements || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<PhysicalMeasurementsPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PhysicalMeasurementsPart {\r\n let part = this.getEditedPart(\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID\r\n ) as PhysicalMeasurementsPart;\r\n part.measurements = this.measurements.value || [];\r\n return part;\r\n }\r\n\r\n public onMeasurementsChange(measurements: PhysicalMeasurement[]): void {\r\n this.measurements.setValue(measurements || []);\r\n this.measurements.markAsDirty();\r\n this.measurements.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical Measurements Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"nameEntries\"\r\n [unitEntries]=\"unitEntries || []\"\r\n [dimTagEntries]=\"dimTagEntries\"\r\n [measurements]=\"measurements.value\"\r\n (measurementsChange)=\"onMeasurementsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { PhysicalState } from '@myrmidon/cadmus-mat-physical-state';\r\n\r\n/**\r\n * The PhysicalStates part model.\r\n */\r\nexport interface PhysicalStatesPart extends Part {\r\n states: PhysicalState[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PhysicalStatesPart type.\r\n */\r\nexport const PHYSICAL_STATES_PART_TYPEID = 'it.vedph.physical-states';\r\n\r\n/**\r\n * JSON schema for the PhysicalStates part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PHYSICAL_STATES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n PHYSICAL_STATES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PhysicalStatesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'states',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n states: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n features: {\r\n type: 'array',\r\n items: {\r\n type: 'string',\r\n },\r\n },\r\n date: {\r\n type: 'string',\r\n },\r\n reporter: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { DatePipe, TitleCasePipe } from '@angular/common';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators, FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n PhysicalState,\r\n PhysicalStateComponent,\r\n} from '@myrmidon/cadmus-mat-physical-state';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n PHYSICAL_STATES_PART_TYPEID,\r\n PhysicalStatesPart,\r\n} from '../physical-states-part';\r\n\r\n/**\r\n * PhysicalStatesPart editor component.\r\n * Thesauri: physical-states (optional), physical-state-features (optional),\r\n * physical-state-reporters (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-physical-states-part',\r\n templateUrl: './physical-states-part.component.html',\r\n styleUrl: './physical-states-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n PhysicalStateComponent,\r\n MatCardActions,\r\n DatePipe,\r\n TitleCasePipe,\r\n FlatLookupPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PhysicalStatesPartComponent\r\n extends ModelEditorComponentBase<PhysicalStatesPart>\r\n implements OnInit\r\n{\r\n public editedIndex: number;\r\n public edited: PhysicalState | undefined;\r\n\r\n // physical-states\r\n public stateEntries?: ThesaurusEntry[];\r\n // physical-state-features\r\n public featEntries?: ThesaurusEntry[];\r\n // physical-state-reporters\r\n public reporterEntries?: ThesaurusEntry[];\r\n\r\n public entries: FormControl<PhysicalState[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.entries = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.entries,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'physical-states';\r\n if (this.hasThesaurus(key)) {\r\n this.stateEntries = thesauri[key].entries;\r\n } else {\r\n this.stateEntries = undefined;\r\n }\r\n key = 'physical-state-features';\r\n if (this.hasThesaurus(key)) {\r\n this.featEntries = thesauri[key].entries;\r\n } else {\r\n this.featEntries = undefined;\r\n }\r\n key = 'physical-state-reporters';\r\n if (this.hasThesaurus(key)) {\r\n this.reporterEntries = thesauri[key].entries;\r\n } else {\r\n this.reporterEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PhysicalStatesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(part.states || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PhysicalStatesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PhysicalStatesPart {\r\n let part = this.getEditedPart(\r\n PHYSICAL_STATES_PART_TYPEID\r\n ) as PhysicalStatesPart;\r\n part.states = this.entries.value || [];\r\n return part;\r\n }\r\n\r\n public addState(): void {\r\n const state: PhysicalState = {\r\n type: this.stateEntries?.length ? this.stateEntries[0].id : '',\r\n };\r\n this.editState(state, -1);\r\n }\r\n\r\n public editState(entry: PhysicalState, index: number): void {\r\n this.editedIndex = index;\r\n this.edited = entry;\r\n }\r\n\r\n public closeState(): void {\r\n this.editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveState(entry: PhysicalState): void {\r\n const entries = [...this.entries.value];\r\n if (this.editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this.editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeState();\r\n }\r\n\r\n public deleteState(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete state?')\r\n .subscribe((yes: boolean | undefined) => {\r\n if (yes) {\r\n if (this.editedIndex === index) {\r\n this.closeState();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n\r\n public moveStateUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public moveStateDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical States Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addState()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> state\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"edited === entry\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this state\"\r\n (click)=\"editState(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveStateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveStateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this state\"\r\n (click)=\"deleteState(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.type | flatLookup : stateEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ entry.date | date : \"yyyy-MM-dd\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n @if (edited) {\r\n <fieldset>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"state-title\">state</span>\r\n <span class=\"nr\">{{ editedIndex + 1 }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-mat-physical-state\r\n [featEntries]=\"featEntries\"\r\n [stateEntries]=\"stateEntries\"\r\n [reporterEntries]=\"reporterEntries\"\r\n [state]=\"edited\"\r\n (stateChange)=\"saveState($event!)\"\r\n (stateCancel)=\"closeState()\"\r\n />\r\n </fieldset>\r\n }\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The PinLinks part model.\r\n */\r\nexport interface PinLinksPart extends Part {\r\n links: AssertedCompositeId[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PinLinksPart type.\r\n */\r\nexport const PIN_LINKS_PART_TYPEID = 'it.vedph.pin-links';\r\n\r\n/**\r\n * JSON schema for the PinLinks part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PIN_LINKS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + PIN_LINKS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'PinLinksPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'links',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { PinLinksPart, PIN_LINKS_PART_TYPEID } from '../pin-links-part';\r\n\r\n/**\r\n * PinLinksPart editor component.\r\n * Thesauri: pin-link-scopes, pin-link-tags, pin-link-assertion-tags,\r\n * pin-link-docref-types, pin-link-docref-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-links-part',\r\n templateUrl: './pin-links-part.component.html',\r\n styleUrls: ['./pin-links-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n TitleCasePipe,\r\n AssertedCompositeIdsComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PinLinksPartComponent\r\n extends ModelEditorComponentBase<PinLinksPart>\r\n implements OnInit\r\n{\r\n public links: FormControl<AssertedCompositeId[]>;\r\n\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n // pin-link-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // pin-link-docref-types\r\n public refTypeEntries?: ThesaurusEntry[];\r\n // pin-link-docref-tags\r\n public refTagEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.links = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n links: this.links,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'pin-link-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'pin-link-docref-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'pin-link-docref-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PinLinksPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.links.setValue(part.links || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PinLinksPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n } // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PinLinksPart {\r\n let part = this.getEditedPart(PIN_LINKS_PART_TYPEID) as PinLinksPart;\r\n part.links = this.links.value || [];\r\n return part;\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Pin Links Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The pin-based links layer fragment server model.\r\n */\r\nexport interface PinLinksFragment extends Fragment {\r\n links: AssertedCompositeId[];\r\n}\r\n\r\nexport const PIN_LINKS_FRAGMENT_TYPEID = 'fr.it.vedph.pin-links';\r\n\r\nexport const PIN_LINKS_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n PIN_LINKS_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PinLinksFragment',\r\n required: ['location', 'links'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { PinLinksFragment } from '../pin-links-fragment';\r\n\r\n/**\r\n * Pin-based links fragment editor component.\r\n * Thesauri: pin-link-scopes, pin-link-tags, pin-link-assertion-tags,\r\n * pin-link-docref-types, pin-link-docref-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-links-fragment',\r\n templateUrl: './pin-links-fragment.component.html',\r\n styleUrls: ['./pin-links-fragment.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n AssertedCompositeIdsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PinLinksFragmentComponent\r\n extends ModelEditorComponentBase<PinLinksFragment>\r\n implements OnInit\r\n{\r\n public links: FormControl<AssertedCompositeId[]>;\r\n\r\n // settings\r\n // by-type: true/false\r\n public pinByTypeMode?: boolean;\r\n // switch-mode: true/false\r\n public canSwitchMode?: boolean;\r\n // edit-target: true/false\r\n public canEditTarget?: boolean;\r\n\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n // pin-link-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // pin-link-docref-types\r\n public refTypeEntries?: ThesaurusEntry[];\r\n // pin-link-docref-tags\r\n public refTagEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.links = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n links: this.links,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'pin-link-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'pin-link-docref-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'pin-link-docref-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(fr?: PinLinksFragment | null): void {\r\n if (!fr) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.links.setValue(fr.links || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PinLinksFragment>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PinLinksFragment {\r\n const fr = this.getEditedFragment() as PinLinksFragment;\r\n fr.links = this.links.value || [];\r\n return fr;\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>textsms</mat-icon>\r\n </div>\r\n <mat-card-title\r\n >{{ (modelName() | titlecase) || \"Pin Links Fragment\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The name of the text tile part data representing its text.\r\n */\r\nexport const TEXT_TILE_TEXT_DATA_NAME = 'text';\r\n\r\n/**\r\n * A tile in a tiled text row.\r\n */\r\nexport interface TextTile {\r\n x: number;\r\n data?: { [key: string]: any };\r\n}\r\n\r\n/**\r\n * A row in the tiled text part.\r\n */\r\nexport interface TextTileRow {\r\n y: number;\r\n tiles: TextTile[];\r\n data?: { [key: string]: any };\r\n}\r\n\r\n/**\r\n * The tiled text part model.\r\n */\r\nexport interface TiledTextPart extends Part {\r\n citation?: string;\r\n rows: TextTileRow[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the TiledTextPart type.\r\n */\r\nexport const TILED_TEXT_PART_TYPEID = 'it.vedph.tiled-text';\r\n\r\n/**\r\n * JSON schema for the tiled text part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const TILEDTEXTPART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + TILED_TEXT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'TiledTextPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'rows'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n citation: {\r\n type: ['string', 'null']\r\n },\r\n rows: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['y', 'tiles'],\r\n properties: {\r\n y: {\r\n type: 'integer',\r\n minimum: 1\r\n },\r\n tiles: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['x', 'data'],\r\n properties: {\r\n x: {\r\n type: 'integer',\r\n minimum: 1\r\n },\r\n data: {\r\n type: 'object',\r\n patternProperties: {\r\n '^.*$': {\r\n anyOf: [\r\n {\r\n type: 'string'\r\n },\r\n {\r\n type: 'number'\r\n },\r\n {\r\n type: 'integer'\r\n },\r\n {\r\n type: 'boolean'\r\n },\r\n {\r\n type: 'null'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n data: {\r\n type: 'object',\r\n patternProperties: {\r\n '^.*$': {\r\n anyOf: [\r\n {\r\n type: 'string'\r\n },\r\n {\r\n type: 'number'\r\n },\r\n {\r\n type: 'integer'\r\n },\r\n {\r\n type: 'boolean'\r\n },\r\n {\r\n type: 'null'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import {\r\n Component,\r\n OnInit,\r\n ElementRef,\r\n ViewChild,\r\n OnDestroy,\r\n model,\r\n effect,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\n\r\nimport {\r\n FormControl,\r\n FormGroup,\r\n FormBuilder,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { TextTile, TEXT_TILE_TEXT_DATA_NAME } from '../tiled-text-part';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'cadmus-text-tile',\r\n templateUrl: './text-tile.component.html',\r\n styleUrls: ['./text-tile.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatCheckbox,\r\n ],\r\n})\r\nexport class TextTileComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n\r\n private _checkedChangeFrozen?: boolean;\r\n\r\n @ViewChild('textInput')\r\n public textElement?: ElementRef;\r\n\r\n public readonly selected = input<boolean>();\r\n public readonly checkable = input<boolean>();\r\n public readonly readonly = input<boolean>();\r\n public readonly color = input<string>();\r\n\r\n public readonly checked = model<boolean>(false);\r\n public readonly tile = model<TextTile>();\r\n\r\n public readonly editData = output<TextTile>();\r\n\r\n public editedText: FormControl<string | null>;\r\n public checker: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public text?: string;\r\n public editing?: boolean;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.editedText = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n Validators.pattern(/^[^\\s]+$/),\r\n ]);\r\n this.form = formBuilder.group({\r\n editedText: this.editedText,\r\n });\r\n\r\n this.checker = formBuilder.control(false, { nonNullable: true });\r\n\r\n effect(() => {\r\n this.updateForm(this.tile());\r\n });\r\n\r\n effect(() => {\r\n this._checkedChangeFrozen = true;\r\n this.checker.setValue(this.checked());\r\n this._checkedChangeFrozen = false;\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.checker.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((_) => {\r\n if (this._checkedChangeFrozen || !this.checkable) {\r\n return;\r\n }\r\n if (this.tile()) {\r\n this.checked.set(this.checker.value);\r\n // this.checkedChange.emit({\r\n // checked: this.checker.value,\r\n // tile: this.tile()!,\r\n // });\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private updateForm(tile?: TextTile): void {\r\n if (!tile) {\r\n this.form.reset();\r\n this.text = undefined;\r\n } else {\r\n this.text = tile.data ? tile.data[TEXT_TILE_TEXT_DATA_NAME] : undefined;\r\n this.editedText.setValue(this.text || null);\r\n this.form.markAsPristine();\r\n }\r\n }\r\n\r\n public requestDataEdit(): void {\r\n if (!this.readonly) {\r\n this.editData.emit(this.tile()!);\r\n }\r\n }\r\n\r\n public toggleCheckedNonEdit(): void {\r\n if (!this.editing && this.checkable()) {\r\n this.checked.set(!this.checked());\r\n }\r\n }\r\n\r\n public edit(): void {\r\n if (this.editing || this.readonly()) {\r\n return;\r\n }\r\n this.editing = true;\r\n setTimeout(() => {\r\n this.textElement?.nativeElement.focus();\r\n this.textElement?.nativeElement.select();\r\n }, 500);\r\n }\r\n\r\n public requestEditData(): void {\r\n if (this.editing || this.readonly()) {\r\n return;\r\n }\r\n this.editData.emit(this.tile()!);\r\n }\r\n\r\n public cancel(): void {\r\n this.editing = false;\r\n }\r\n\r\n private getTile(): TextTile {\r\n const tile: TextTile = { ...this.tile()!, data: {} };\r\n this.text = this.editedText.value?.trim() || undefined;\r\n tile.data![TEXT_TILE_TEXT_DATA_NAME] = this.text;\r\n return tile;\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid || this.readonly() || !this.tile()) {\r\n return;\r\n }\r\n this.tile.set(this.getTile());\r\n this.editing = false;\r\n }\r\n}\r\n","@if (tile()) {\n<div\n class=\"tile\"\n [class.checked]=\"checked\"\n [class.selected]=\"selected()\"\n [style.background-color]=\"color() || 'transparent'\"\n tabindex=\"1\"\n (keydown.F2)=\"edit()\"\n (keydown.F3)=\"requestEditData()\"\n (keydown.space)=\"toggleCheckedNonEdit()\"\n>\n @if (editing) {\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-form-field>\n <mat-label>text [{{ tile()!.x }}]</mat-label>\n <input\n #textInput\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"editedText\"\n (keydown.esc)=\"cancel()\"\n />\n @if ( editedText.hasError('required') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>enter a text</mat-error>\n } @if ( editedText.hasError('maxLength') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>text too long</mat-error>\n } @if ( editedText.hasError('pattern') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>no whitespaces allowed</mat-error>\n }\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Discard text\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid\"\n mat-icon-button\n matTooltip=\"Save text\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </form>\n } @if (!editing) {\n <ng-container style=\"display: flex; align-items: center\">\n <span class=\"text\">{{ text }}</span>\n @if (!readonly()) {\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit text (F2)\"\n (click)=\"edit()\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n } @if (checkable()) {\n <mat-checkbox\n [formControl]=\"checker\"\n matTooltip=\"Toggle check\"\n ></mat-checkbox>\n }\n </ng-container>\n }\n</div>\n}\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n input,\r\n model,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\r\n\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatSuffix,\r\n MatError,\r\n} from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { Subscription } from 'rxjs';\r\n\r\ninterface Data {\r\n [key: string]: any;\r\n}\r\ninterface DataKey {\r\n value: string;\r\n visible: boolean;\r\n}\r\n\r\n/**\r\n * The maximum allowed length for a datum value. This is just a reasonable\r\n * limit, having no other specifical reason.\r\n */\r\nconst VALUE_MAX_LEN = 100;\r\n\r\n@Component({\r\n selector: 'cadmus-tiled-data',\r\n templateUrl: './tiled-data.component.html',\r\n styleUrls: ['./tiled-data.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatButton,\r\n MatIconButton,\r\n MatSuffix,\r\n MatIcon,\r\n MatTooltip,\r\n MatError,\r\n ],\r\n})\r\nexport class TiledDataComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _hiddenData: Data;\r\n public keys: DataKey[];\r\n\r\n public readonly title = input<string>();\r\n\r\n public readonly data = model<Data>({});\r\n\r\n public readonly hiddenKeys = input<string[]>([]);\r\n\r\n public readonly cancel = output();\r\n\r\n public keyFilter: FormControl<string | null>;\r\n public filterForm: FormGroup;\r\n\r\n public newKey: FormControl<string | null>;\r\n public newValue: FormControl<string | null>;\r\n public newForm: FormGroup;\r\n\r\n public form: FormGroup;\r\n\r\n constructor(\r\n private _formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n this._hiddenData = {};\r\n this.keys = [];\r\n // filter form\r\n this.keyFilter = _formBuilder.control(null);\r\n this.filterForm = _formBuilder.group({\r\n keyFilter: this.keyFilter,\r\n });\r\n // new datum form\r\n this.newKey = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern('^[a-zA-Z_$][[a-zA-Z_$0-9]{0,49}$'),\r\n ]);\r\n this.newValue = _formBuilder.control(null, [\r\n Validators.maxLength(VALUE_MAX_LEN),\r\n ]);\r\n this.newForm = _formBuilder.group({\r\n newKey: this.newKey,\r\n newValue: this.newValue,\r\n });\r\n // editing form (controls are dynamically populated)\r\n this.form = _formBuilder.group({});\r\n\r\n effect(() => {\r\n this.updateForm(this.data(), this.hiddenKeys());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.keyFilter.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((_) => {\r\n this.updateDataVisibility();\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private matchesFilter(key: string): boolean {\r\n if (!this.keyFilter.value) {\r\n return true;\r\n }\r\n const filter = this.keyFilter.value.toLowerCase();\r\n return key.toLowerCase().indexOf(filter) > -1;\r\n }\r\n\r\n public isVisibleKey(key: string): boolean {\r\n const dataKey = this.keys.find((k) => {\r\n return k.value === key;\r\n });\r\n return dataKey ? dataKey.visible : false;\r\n }\r\n\r\n private updateForm(data?: Data, hiddenKeys?: string[]): void {\r\n // reset\r\n this.keys = [];\r\n this._hiddenData = {};\r\n this.form = this._formBuilder.group({});\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n // collect keys from data's own properties and sort the result\r\n const cache: DataKey[] = [];\r\n Object.getOwnPropertyNames(data).forEach((key: string) => {\r\n if (!hiddenKeys || hiddenKeys.indexOf(key) === -1) {\r\n cache.push({ value: key, visible: this.matchesFilter(key) });\r\n } else {\r\n this._hiddenData[key] = data[key];\r\n }\r\n });\r\n cache.sort();\r\n\r\n // add a control for each collected key\r\n for (let i = 0; i < cache.length; i++) {\r\n const key = cache[i];\r\n this.form.addControl(\r\n key.value,\r\n this._formBuilder.control(\r\n data[key.value],\r\n Validators.maxLength(VALUE_MAX_LEN)\r\n )\r\n );\r\n }\r\n this.keys = cache;\r\n }\r\n\r\n private updateDataVisibility(): void {\r\n for (let i = 0; i < this.keys.length; i++) {\r\n this.keys[i] = {\r\n value: this.keys[i].value,\r\n visible: this.matchesFilter(this.keys[i].value),\r\n };\r\n }\r\n }\r\n\r\n private getData(): Data {\r\n const data: Data = this._hiddenData ? { ...this._hiddenData } : {};\r\n\r\n for (let i = 0; i < this.keys.length; i++) {\r\n const keyValue = this.keys[i].value;\r\n data[keyValue] = this.form.controls[keyValue].value;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n public deleteDatum(key: DataKey): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete datum #\"${key.value}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (!ok) {\r\n return;\r\n }\r\n delete this.data()![key.value];\r\n this.updateForm();\r\n });\r\n }\r\n\r\n public addDatum(): void {\r\n if (this.newForm.invalid) {\r\n return;\r\n }\r\n this.data()![this.newKey.value!] = this.newValue.value;\r\n this.newForm.reset();\r\n this.updateForm(this.data());\r\n }\r\n\r\n public close(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.data.set(this.getData());\r\n }\r\n}\r\n","<div>\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>filter</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"keyFilter\"\n />\n @if (keyFilter.value) {\n <button\n type=\"button\"\n mat-button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"keyFilter.setValue('')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </form>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <table>\n <tbody>\n @for (key of keys; track key) {\n <tr>\n @if (key.visible) {\n <td>\n <button\n type=\"button\"\n (click)=\"deleteDatum(key)\"\n mat-icon-button\n matTooltip=\"Remove this datum\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"key-label\">\n {{ key.value }}\n </td>\n <td>\n <mat-form-field>\n <input\n matInput\n spellcheck=\"false\"\n [formControlName]=\"key.value\"\n />\n </mat-form-field>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <div>\n <form [formGroup]=\"newForm\" (submit)=\"addDatum()\">\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput type=\"text\" formControlName=\"newKey\" />\n @if ( newKey.hasError('required') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>enter a key</mat-error>\n } @if ( newKey.hasError('pattern') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>invalid key</mat-error>\n }\n </mat-form-field>\n \n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"newValue\" />\n @if ( newValue.hasError('maxLength') && (newValue.dirty ||\n newValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button type=\"submit\" matTooltip=\"Add new datum\" mat-icon-button>\n <mat-icon>add_circle</mat-icon>\n </button>\n </form>\n </div>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n matTooltip=\"Close without saving\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-button\n class=\"mat-primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save data\"\n >\n <mat-icon>check_circle</mat-icon>\n save data\n </button>\n </div>\n </form>\n</div>\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n CdkDragDrop,\r\n moveItemInArray,\r\n CdkDropListGroup,\r\n CdkDropList,\r\n CdkDrag,\r\n CdkDragPlaceholder,\r\n} from '@angular/cdk/drag-drop';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { TextTileComponent } from '../text-tile/text-tile.component';\r\nimport { TiledDataComponent } from '../tiled-data/tiled-data.component';\r\nimport {\r\n TiledTextPart,\r\n TextTileRow,\r\n TILED_TEXT_PART_TYPEID,\r\n TEXT_TILE_TEXT_DATA_NAME,\r\n TextTile,\r\n} from '../tiled-text-part';\r\n\r\ninterface Data {\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-tiled-text-part',\r\n templateUrl: './tiled-text-part.component.html',\r\n styleUrls: ['./tiled-text-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n CdkDropListGroup,\r\n CdkDropList,\r\n TextTileComponent,\r\n CdkDrag,\r\n CdkDragPlaceholder,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n TiledDataComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class TiledTextPartComponent\r\n extends ModelEditorComponentBase<TiledTextPart>\r\n implements OnInit\r\n{\r\n private _editedDataTile?: TextTile;\r\n private _editedDataRow?: TextTileRow;\r\n\r\n public selectedTile?: TextTile;\r\n public citation: FormControl<string | null>;\r\n public rows: FormControl<TextTileRow[]>;\r\n public editedData?: Data;\r\n public editedDataTitle?: string;\r\n public currentTabIndex: number;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.currentTabIndex = 0;\r\n // form\r\n this.rows = formBuilder.control([], { nonNullable: true });\r\n this.citation = formBuilder.control(null, Validators.maxLength(1000));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n citation: this.citation,\r\n rows: this.rows,\r\n });\r\n }\r\n\r\n private updateForm(part?: TiledTextPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.citation.setValue(part.citation || null);\r\n this.rows.setValue(part.rows || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<TiledTextPart>): void {\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n /**\r\n * Recalculate the coordinates of all the tiles in this set,\r\n * according to the tiles position.\r\n */\r\n private adjustCoords(): void {\r\n const rows = this.rows.value;\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i];\r\n row.y = i + 1;\r\n if (row.tiles) {\r\n for (let j = 0; j < row.tiles.length; j++) {\r\n row.tiles[j].x = j + 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getValue(): TiledTextPart {\r\n // ensure that form's coordinates are ok\r\n this.adjustCoords();\r\n\r\n let part = this.getEditedPart(TILED_TEXT_PART_TYPEID) as TiledTextPart;\r\n part.citation = this.citation.value\r\n ? this.citation.value.trim()\r\n : undefined;\r\n part.rows = this.rows.value;\r\n return part;\r\n }\r\n\r\n /**\r\n * Append a new row at the bottom.\r\n */\r\n public addRow(): void {\r\n const data: { [key: string]: any } = {};\r\n data[TEXT_TILE_TEXT_DATA_NAME] = 'text1';\r\n\r\n const rows = [...this.rows.value];\r\n rows.push({\r\n y: rows.length + 1,\r\n tiles: [\r\n {\r\n x: 1,\r\n data: data,\r\n },\r\n ],\r\n });\r\n this.rows.setValue(rows);\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Append a new tile at the end of the specified row.\r\n * @param row The row to add the tile to.\r\n */\r\n public addTile(row: TextTileRow): void {\r\n const x = row.tiles ? row.tiles.length + 1 : 1;\r\n const data: { [key: string]: any } = {};\r\n data[TEXT_TILE_TEXT_DATA_NAME] = 'text' + x;\r\n if (!row.tiles) {\r\n row.tiles = [];\r\n }\r\n row.tiles.push({\r\n x: x,\r\n data: data,\r\n });\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Delete the selected tile, if any.\r\n */\r\n public deleteSelectedTile(): void {\r\n if (!this.selectedTile) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.rows.value.length; i++) {\r\n const row = this.rows.value[i];\r\n if (row.tiles) {\r\n const index = row.tiles.indexOf(this.selectedTile);\r\n if (index > -1) {\r\n this.selectedTile =\r\n index + 1 < row.tiles.length\r\n ? row.tiles[index + 1]\r\n : row.tiles.length > 1\r\n ? row.tiles[index - 1]\r\n : undefined;\r\n row.tiles.splice(index, 1);\r\n this.adjustCoords();\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete the row at the specified index.\r\n * @param rowIndex The row's index.\r\n */\r\n public deleteRow(rowIndex: number): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete row #\"${rowIndex + 1}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (!ok) {\r\n return;\r\n }\r\n const rows = [...this.rows.value];\r\n rows.splice(rowIndex, 1);\r\n this.rows.setValue(rows);\r\n this.rows.markAsDirty();\r\n this.adjustCoords();\r\n this.rows.updateValueAndValidity();\r\n });\r\n }\r\n\r\n /**\r\n * Move the row at the specified index up.\r\n * @param rowIndex The row index.\r\n */\r\n public moveRowUp(rowIndex: number): void {\r\n if (rowIndex < 1) {\r\n return;\r\n }\r\n moveItemInArray(this.rows.value, rowIndex, rowIndex - 1);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n /**\r\n * Move the row at the specified index down.\r\n * @param rowIndex The row index.\r\n */\r\n public moveRowDown(rowIndex: number): void {\r\n if (rowIndex + 1 === this.rows.value.length) {\r\n return;\r\n }\r\n moveItemInArray(this.rows.value, rowIndex, rowIndex + 1);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public drop(event: CdkDragDrop<TextTile[]>, row: TextTileRow): void {\r\n // https://material.angular.io/cdk/drag-drop/overview\r\n moveItemInArray(row.tiles, event.previousIndex, event.currentIndex);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public onTileChange(tile: TextTile): void {\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public editRowData(row: TextTileRow): void {\r\n this._editedDataRow = row;\r\n this._editedDataTile = undefined;\r\n this.editedDataTitle = `Row ${row.y}`;\r\n this.editedData = row.data;\r\n this.currentTabIndex = 1;\r\n }\r\n\r\n public editTileData(tile: TextTile): void {\r\n this._editedDataTile = tile;\r\n this._editedDataRow = undefined;\r\n this.editedDataTitle = `Tile ${this.getTileCoords(tile)}`;\r\n this.editedData = tile.data;\r\n this.currentTabIndex = 1;\r\n }\r\n\r\n public closeDataEditor(): void {\r\n this.currentTabIndex = 0;\r\n this._editedDataRow = undefined;\r\n this.editedDataTitle = undefined;\r\n this.editedData = undefined;\r\n }\r\n\r\n public saveEditedData(data: Data): void {\r\n if (this._editedDataTile) {\r\n this._editedDataTile.data = data;\r\n } else {\r\n this._editedDataRow!.data = data;\r\n }\r\n this.form?.markAsDirty();\r\n this.closeDataEditor();\r\n }\r\n\r\n public getTileCoords(tile?: TextTile): string {\r\n if (!tile) {\r\n tile = this.selectedTile;\r\n }\r\n if (!tile) {\r\n return '';\r\n } else {\r\n let y = 0;\r\n for (let i = 0; i < this.rows.value.length; i++) {\r\n if (this.rows.value[i].tiles.indexOf(tile) > -1) {\r\n y = i + 1;\r\n break;\r\n }\r\n }\r\n return `${y},${tile.x}`;\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Tiled Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-tab-group [(selectedIndex)]=\"currentTabIndex\">\n <mat-tab label=\"Text\">\n <!-- citation -->\n <div>\n <mat-form-field style=\"min-width: 400px\">\n <mat-label>citation</mat-label>\n <input matInput formControlName=\"citation\" />\n @if ( citation.hasError('maxLength') && (citation.dirty ||\n citation.touched) ) {\n <mat-error></mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- rows -->\n @if (rows) {\n <div cdkDropListGroup>\n <!-- row -->\n @for ( row of rows.value; track row; let i = $index; let first =\n $first; let last = $last) {\n <div\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($any($event), row)\"\n style=\"display: flex; flex-flow: row wrap\"\n >\n <!-- nr -->\n <span class=\"row-nr\">{{ i + 1 }}</span>\n <!-- tile -->\n @for (tile of row.tiles || []; track tile) {\n <cadmus-text-tile\n [tile]=\"tile\"\n [selected]=\"tile === selectedTile\"\n cdkDrag\n style=\"flex: 0 0 auto\"\n (click)=\"selectedTile = tile\"\n (editData)=\"editTileData(tile)\"\n (tileChange)=\"onTileChange($event!)\"\n >\n <div class=\"tile-placeholder\" *cdkDragPlaceholder></div>\n </cadmus-text-tile>\n }\n <!-- row tail buttons -->\n <div class=\"unmuted-hovering\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"addTile(row)\"\n matTooltip=\"Append new tile\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"moveRowUp(i)\"\n [disabled]=\"first\"\n matTooltip=\"Move this row up\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"moveRowDown(i)\"\n [disabled]=\"last\"\n matTooltip=\"Move this row down\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete whole row\"\n (click)=\"deleteRow(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit row's data\"\n (click)=\"editRowData(row)\"\n >\n <mat-icon>list</mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n }\n <!-- bottom buttons -->\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Append new row\"\n (click)=\"addRow()\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n <span>{{ getTileCoords() }}</span>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit selected tile's data\"\n [disabled]=\"!selectedTile\"\n (click)=\"editTileData(selectedTile!)\"\n >\n <mat-icon>list</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete the selected tile\"\n (click)=\"deleteSelectedTile()\"\n [disabled]=\"!selectedTile\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-tab>\n\n @if (editedData) {\n <mat-tab label=\"Data\">\n <cadmus-tiled-data\n [data]=\"editedData\"\n [title]=\"editedDataTitle\"\n [hiddenKeys]=\"['text']\"\n (cancel)=\"closeDataEditor()\"\n (dataChange)=\"saveEditedData($event)\"\n />\n </mat-tab>\n }\n </mat-tab-group>\n </mat-card-content>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * A single line in a TokenTextPart.\r\n */\r\nexport interface TokenTextLine {\r\n y: number;\r\n text: string;\r\n}\r\n\r\n/**\r\n * Token-based text part.\r\n */\r\nexport interface TokenTextPart extends Part {\r\n citation?: string;\r\n lines: TokenTextLine[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the TokenTextPart type.\r\n */\r\nexport const TOKEN_TEXT_PART_TYPEID = 'it.vedph.token-text';\r\n\r\n/**\r\n * JSON schema for the TookenTextPart. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const TOKEN_TEXT_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + TOKEN_TEXT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'TokenTextPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'lines'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n citation: {\r\n type: ['string', 'null']\r\n },\r\n lines: {\r\n $id: '#/properties/lines',\r\n type: 'array',\r\n title: 'The Lines Schema',\r\n items: {\r\n $id: '#/properties/lines/items',\r\n type: 'object',\r\n required: ['y', 'text'],\r\n properties: {\r\n y: {\r\n $id: '#/properties/lines/items/properties/y',\r\n type: 'integer'\r\n },\r\n text: {\r\n $id: '#/properties/lines/items/properties/text',\r\n type: 'string'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n TokenTextPart,\r\n TOKEN_TEXT_PART_TYPEID,\r\n TokenTextLine,\r\n} from '../token-text-part';\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Editor component for base text, as referenced by token-based layers.\r\n * Thesauri: none.\r\n */\r\n@Component({\r\n selector: 'cadmus-token-text-part',\r\n templateUrl: './token-text-part.component.html',\r\n styleUrls: ['./token-text-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatSelect,\r\n MatOption,\r\n MatIconButton,\r\n MatTooltip,\r\n NgeMonacoModule,\r\n MatError,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class TokenTextPartComponent\r\n extends ModelEditorComponentBase<TokenTextPart>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public citation: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n\r\n public transform: FormControl<string | null>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.citation = formBuilder.control(null);\r\n this.text = formBuilder.control(null, Validators.required);\r\n this.transform = formBuilder.control('ws');\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'txt');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n citation: this.citation,\r\n text: this.text,\r\n });\r\n }\r\n\r\n private getTextFromModel(model: TokenTextPart): string | null {\r\n if (!model || !model.lines) {\r\n return null;\r\n }\r\n return model.lines.map((l) => l.text).join('\\n');\r\n }\r\n\r\n private getLinesFromText(text?: string | null): TokenTextLine[] {\r\n if (!text) {\r\n return [];\r\n }\r\n // ensure that we just have LF rather than CRLF\r\n text = text.replace('\\r\\n', '\\n');\r\n\r\n const lines: TokenTextLine[] = [];\r\n const textLines = text.split('\\n');\r\n let y = 1;\r\n for (const line of textLines) {\r\n lines.push({\r\n y,\r\n text: line,\r\n });\r\n y++;\r\n }\r\n return lines;\r\n }\r\n\r\n private updateForm(part?: TokenTextPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.citation.setValue(part.citation || null);\r\n this.text.setValue(this.getTextFromModel(part));\r\n this._editorModel?.setValue(this.text.value || '');\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<TokenTextPart>): void {\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): TokenTextPart {\r\n let part = this.getEditedPart(TOKEN_TEXT_PART_TYPEID) as TokenTextPart;\r\n part.citation = this.citation.value\r\n ? this.citation.value.trim()\r\n : undefined;\r\n part.lines = this.getLinesFromText(this.text.value);\r\n return part;\r\n }\r\n\r\n private normalizeWs(text: string): string {\r\n text = text.replace(/[ \\t]+/g, ' ').trim();\r\n text = text.replace(/[ \\t]+([\\r\\n])/g, '$1');\r\n text = text.replace(/([\\r\\n])[ \\t]+/g, '$1');\r\n return text;\r\n }\r\n\r\n private splitAtStops(text: string): string {\r\n const crLf = text.indexOf('\\r\\n') > -1;\r\n const r = new RegExp('([.?!]+)', 'g');\r\n const parts: string[] = [];\r\n let start = 0;\r\n let m: RegExpExecArray | null;\r\n\r\n while ((m = r.exec(text))) {\r\n console.log(m[1].length);\r\n const end = m.index + m[1].length;\r\n if (end < text.length) {\r\n parts.push(text.substring(start, end));\r\n start = end;\r\n }\r\n }\r\n if (start < text.length) {\r\n parts.push(text.substring(start));\r\n }\r\n return parts.map((s) => s.trim()).join(crLf ? '\\r\\n' : '\\n');\r\n }\r\n\r\n public applyTransform(): void {\r\n let name: string;\r\n switch (this.transform.value) {\r\n case 'ws':\r\n name = 'whitespace normalization';\r\n break;\r\n case 'split':\r\n name = 'text splitting';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this._dialogService\r\n .confirm('Transform Text', `Apply ${name}?`)\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n let text: string = this.text.value || '';\r\n\r\n switch (this.transform.value) {\r\n case 'ws':\r\n text = this.normalizeWs(text);\r\n break;\r\n case 'split':\r\n text = this.splitAtStops(text);\r\n break;\r\n }\r\n this.text.setValue(text);\r\n this.text.updateValueAndValidity();\r\n this.text.markAsDirty();\r\n }\r\n });\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Token Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"cit\">\n <!-- citation -->\n <mat-form-field>\n <mat-label>citation</mat-label>\n <input matInput [formControl]=\"citation\" />\n </mat-form-field>\n </div>\n\n <!-- transforms -->\n <div id=\"trs\">\n <mat-form-field>\n <mat-label>operation</mat-label>\n <mat-select [formControl]=\"transform\">\n <mat-option value=\"ws\">normalize ws</mat-option>\n <mat-option value=\"split\">split at stops</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Apply the selected text transformation\"\n (click)=\"applyTransform()\"\n >\n <mat-icon class=\"mat-warn\">find_replace</mat-icon>\n </button>\n </div>\n\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n </div>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card-content>\n </mat-card>\n</form>\n","/*\r\n * Public API Surface of cadmus-part-general-ui\r\n */\r\n\r\nexport * from './lib/asserted-historical-dates-part';\r\nexport * from './lib/asserted-historical-date/asserted-historical-date.component';\r\nexport * from './lib/asserted-historical-dates-part/asserted-historical-dates-part.component';\r\n\r\nexport * from './lib/bib-authors-editor/bib-authors-editor.component';\r\nexport * from './lib/bibliography-entry/bibliography-entry.component';\r\nexport * from './lib/bibliography-part';\r\nexport * from './lib/bibliography-part/bibliography-part.component';\r\n\r\nexport * from './lib/categories-part';\r\nexport * from './lib/categories-part/categories-part.component';\r\n\r\nexport * from './lib/chronology-fragment';\r\nexport * from './lib/chronology-fragment/chronology-fragment.component';\r\n\r\nexport * from './lib/chronotopes-part';\r\nexport * from './lib/chronotopes-part/chronotopes-part.component';\r\n\r\nexport * from './lib/comment-part';\r\nexport * from './lib/comment-fragment';\r\nexport * from './lib/comment-editor/comment-editor.component';\r\n\r\nexport * from './lib/decorated-counts-part';\r\nexport * from './lib/decorated-counts-part/decorated-counts-part.component';\r\n\r\nexport * from './lib/district-location-part';\r\nexport * from './lib/district-location-part/district-location-part.component';\r\n\r\nexport * from './lib/doc-references-part';\r\nexport * from './lib/doc-references-part/doc-references-part.component';\r\n\r\nexport * from './lib/external-ids-part';\r\nexport * from './lib/external-ids-part/external-ids-part.component';\r\n\r\nexport * from './lib/historical-events-part';\r\nexport * from './lib/historical-event-editor/historical-event-editor.component';\r\n\r\nexport * from './lib/historical-date-part';\r\nexport * from './lib/historical-date-part/historical-date-part.component';\r\nexport * from './lib/historical-events-part/historical-events-part.component';\r\nexport * from './lib/related-entity/related-entity.component';\r\n\r\nexport * from './lib/index-keyword/index-keyword.component';\r\nexport * from './lib/index-keywords-part';\r\nexport * from './lib/index-keywords-part/index-keywords-part.component';\r\n\r\nexport * from './lib/keywords-part';\r\nexport * from './lib/keywords-part/keywords-part.component';\r\n\r\nexport * from './lib/metadata-part';\r\nexport * from './lib/metadata-part/metadata-part.component';\r\n\r\nexport * from './lib/names-part';\r\nexport * from './lib/names-part/names-part.component';\r\n\r\nexport * from './lib/note-part';\r\nexport * from './lib/note-part/note-part.component';\r\n\r\nexport * from './lib/physical-measurements-part';\r\nexport * from './lib/physical-measurements-part/physical-measurements-part.component';\r\n\r\nexport * from './lib/physical-states-part';\r\nexport * from './lib/physical-states-part/physical-states-part.component';\r\n\r\nexport * from './lib/pin-links-part';\r\nexport * from './lib/pin-links-part/pin-links-part.component';\r\n\r\nexport * from './lib/pin-links-fragment';\r\nexport * from './lib/pin-links-fragment/pin-links-fragment.component';\r\n\r\nexport * from './lib/text-tile/text-tile.component';\r\nexport * from './lib/tiled-data/tiled-data.component';\r\nexport * from './lib/tiled-text-part';\r\nexport * from './lib/tiled-text-part/tiled-text-part.component';\r\n\r\nexport * from './lib/token-text-part';\r\nexport * from './lib/token-text-part/token-text-part.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"myrmidon-cadmus-part-general-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-date/asserted-historical-date.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-date/asserted-historical-date.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part/asserted-historical-dates-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/asserted-historical-dates-part/asserted-historical-dates-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bib-authors-editor/bib-authors-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bib-authors-editor/bib-authors-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-entry/bibliography-entry.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-entry/bibliography-entry.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part/bibliography-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/bibliography-part/bibliography-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part/categories-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/categories-part/categories-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment/chronology-fragment.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronology-fragment/chronology-fragment.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part/chronotopes-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/chronotopes-part/chronotopes-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-editor/comment-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/comment-editor/comment-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part/decorated-counts-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/decorated-counts-part/decorated-counts-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part/district-location-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/district-location-part/district-location-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part/doc-references-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/doc-references-part/doc-references-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part/external-ids-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/external-ids-part/external-ids-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/flags-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/flags-part/flags-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/flags-part/flags-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/related-entity/related-entity.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/related-entity/related-entity.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-event-editor/historical-event-editor.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-event-editor/historical-event-editor.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part/historical-date-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-date-part/historical-date-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part/historical-events-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/historical-events-part/historical-events-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keyword/index-keyword.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keyword/index-keyword.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part/index-keywords-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/index-keywords-part/index-keywords-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part/keywords-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/keywords-part/keywords-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part/metadata-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/metadata-part/metadata-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part/names-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/names-part/names-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part/note-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/note-part/note-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part/physical-measurements-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-measurements-part/physical-measurements-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part/physical-states-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/physical-states-part/physical-states-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part/pin-links-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-part/pin-links-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment/pin-links-fragment.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/pin-links-fragment/pin-links-fragment.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/text-tile/text-tile.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/text-tile/text-tile.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-data/tiled-data.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-data/tiled-data.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part/tiled-text-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/tiled-text-part/tiled-text-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part/token-text-part.component.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/lib/token-text-part/token-text-part.component.html","../../../../projects/myrmidon/cadmus-part-general-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-part-general-ui/src/myrmidon-cadmus-part-general-ui.ts"],"sourcesContent":["import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\n/**\r\n * The AssertedHistoricalDates part model.\r\n */\r\nexport interface AssertedHistoricalDatesPart extends Part {\r\n dates: AssertedDate[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the AssertedHistoricalDatesPart type.\r\n */\r\nexport const ASSERTED_HISTORICAL_DATES_PART_TYPEID =\r\n 'it.vedph.asserted-historical-dates';\r\n\r\n/**\r\n * JSON schema for the AssertedHistoricalDates part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const ASSERTED_HISTORICAL_DATES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'AssertedHistoricalDatesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'dates',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n dates: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","\r\nimport { Component, effect, input, model, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\nimport {\r\n HistoricalDateComponent,\r\n HistoricalDateModel,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n@Component({\r\n selector: 'cadmus-asserted-historical-date',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n HistoricalDateComponent,\r\n AssertionComponent\r\n],\r\n templateUrl: './asserted-historical-date.component.html',\r\n styleUrl: './asserted-historical-date.component.css',\r\n})\r\nexport class AssertedHistoricalDateComponent {\r\n public readonly date = model<AssertedDate>();\r\n public readonly dateCancel = output();\r\n\r\n public tag: FormControl<string | null>;\r\n public hd: FormControl<HistoricalDateModel | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // asserted-historical-dates-tags\r\n public tagEntries = input<ThesaurusEntry[]>();\r\n // assertion-tags\r\n public assertionTagEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-types\r\n public docReferenceTypeEntries = input<ThesaurusEntry[]>();\r\n // doc-reference-tags\r\n public docReferenceTagEntries = input<ThesaurusEntry[]>();\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.tag = formBuilder.control(null);\r\n this.hd = formBuilder.control(null, Validators.required);\r\n this.assertion = formBuilder.control(null);\r\n\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n hd: this.hd,\r\n assertion: this.assertion,\r\n });\r\n\r\n // when model changes, update form\r\n effect(() => {\r\n this.updateForm(this.date());\r\n });\r\n }\r\n\r\n private updateForm(date: AssertedDate | undefined | null): void {\r\n if (!date) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n this.tag.setValue(date.tag || null);\r\n this.hd.setValue(date ? { a: date.a, b: date.b } : null);\r\n this.assertion.setValue(date.assertion || null);\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getDate(): AssertedDate {\r\n return {\r\n tag: this.tag.value || undefined,\r\n a: this.hd.value!.a || undefined,\r\n b: this.hd.value?.b || undefined,\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n this.assertion.updateValueAndValidity();\r\n this.assertion.markAsDirty();\r\n }\r\n\r\n public onDateChange(date?: HistoricalDateModel): void {\r\n this.hd.setValue(date || null);\r\n this.hd.updateValueAndValidity();\r\n this.hd.markAsDirty();\r\n }\r\n\r\n public cancel(): void {\r\n this.dateCancel.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.date.set(this.getDate());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <!-- tag (bound) -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of tagEntries(); track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if (tag.hasError('max-length') && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <div>\r\n <!-- date -->\r\n <cadmus-refs-historical-date\r\n [date]=\"hd.value || undefined\"\r\n (dateChange)=\"onDateChange($event)\"\r\n />\r\n <mat-expansion-panel>\r\n <!-- assertion -->\r\n <mat-expansion-panel-header>date assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assertionTagEntries()\"\r\n [refTypeEntries]=\"docReferenceTypeEntries()\"\r\n [refTagEntries]=\"docReferenceTagEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Discard changes\"\r\n (click)=\"cancel()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Accept changes\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { FlatLookupPipe, NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n HistoricalDate,\r\n HistoricalDatePipe,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport { AssertedDate } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\nimport {\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID,\r\n AssertedHistoricalDatesPart,\r\n} from '../asserted-historical-dates-part';\r\nimport { AssertedHistoricalDateComponent } from '../asserted-historical-date/asserted-historical-date.component';\r\n\r\n/**\r\n * Asserted historical parts editor.\r\n * Thesauri: asserted-historical-dates-tags, assertion-tags,\r\n * doc-reference-types, doc-reference-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-asserted-historical-dates-part',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n // cadmus\r\n FlatLookupPipe,\r\n HistoricalDatePipe,\r\n AssertedHistoricalDateComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n templateUrl: './asserted-historical-dates-part.component.html',\r\n styleUrl: './asserted-historical-dates-part.component.css',\r\n})\r\nexport class AssertedHistoricalDatesPartComponent\r\n extends ModelEditorComponentBase<AssertedHistoricalDatesPart>\r\n implements OnInit\r\n{\r\n public maxDateCount = -1;\r\n public editedIndex: number;\r\n public edited: AssertedDate | undefined;\r\n\r\n // asserted-historical-dates-tags\r\n public tagEntries?: ThesaurusEntry[];\r\n // assertion-tags\r\n public assertionTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public docReferenceTypeEntries?: ThesaurusEntry[];\r\n // doc-reference-tags\r\n public docReferenceTagEntries?: ThesaurusEntry[];\r\n\r\n public dates: FormControl<AssertedDate[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.dates = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.dates,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'asserted-historical-dates-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assertionTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assertionTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.docReferenceTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.docReferenceTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.docReferenceTagEntries = thesauri[key].entries;\r\n } else {\r\n this.docReferenceTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: AssertedHistoricalDatesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this._appRepository\r\n ?.getSettingFor(part.typeId, part.roleId)\r\n .then((setting) => {\r\n this.maxDateCount = setting?.maxDateCount || -1;\r\n }) || -1;\r\n this.dates.setValue(part.dates || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<AssertedHistoricalDatesPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): AssertedHistoricalDatesPart {\r\n let part = this.getEditedPart(\r\n ASSERTED_HISTORICAL_DATES_PART_TYPEID\r\n ) as AssertedHistoricalDatesPart;\r\n part.dates = this.dates.value || [];\r\n return part;\r\n }\r\n\r\n public addDate(): void {\r\n // check max count if set\r\n if (this.maxDateCount > 0 && this.dates.value.length >= this.maxDateCount) {\r\n return;\r\n }\r\n\r\n const entry: AssertedDate = {\r\n a: { value: 0 },\r\n };\r\n this.editDate(entry, -1);\r\n }\r\n\r\n public editDate(entry: AssertedDate, index: number): void {\r\n this.editedIndex = index;\r\n this.edited = entry;\r\n }\r\n\r\n public closeDate(): void {\r\n this.editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveDate(entry: AssertedDate): void {\r\n // ensure that no date exists with the same value\r\n let newValue = new HistoricalDate(entry).getSortValue();\r\n if (\r\n this.dates.value\r\n .map((e) => new HistoricalDate(e).getSortValue())\r\n .includes(newValue)\r\n ) {\r\n return;\r\n }\r\n\r\n const entries = [...this.dates.value];\r\n if (this.editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this.editedIndex, 1, entry);\r\n }\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n this.closeDate();\r\n }\r\n\r\n public deleteDate(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete date?')\r\n .subscribe((yes: boolean | undefined) => {\r\n if (yes) {\r\n if (this.editedIndex === index) {\r\n this.closeDate();\r\n }\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n\r\n public moveDateUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.dates.value[index];\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n\r\n public moveDateDown(index: number): void {\r\n if (index + 1 >= this.dates.value.length) {\r\n return;\r\n }\r\n const entry = this.dates.value[index];\r\n const entries = [...this.dates.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.dates.setValue(entries);\r\n this.dates.markAsDirty();\r\n this.dates.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Dates\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n [disabled]=\"maxDateCount > 0 && dates.value.length >= maxDateCount\"\r\n (click)=\"addDate()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> date\r\n </button>\r\n </div>\r\n @if (dates.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>date</th>\r\n <th>tag</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (date of dates.value; track date; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"date === edited\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this date\"\r\n (click)=\"editDate(date, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveDateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this date down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveDateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this date\"\r\n (click)=\"deleteDate(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ date | historicalDate }}</td>\r\n <td>{{ date.tag | flatLookup : tagEntries : \"id\" : \"value\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n } @if (edited) {\r\n <fieldset>\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Date #</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-asserted-historical-date\r\n [date]=\"edited\"\r\n (dateChange)=\"saveDate($event!)\"\r\n [tagEntries]=\"tagEntries\"\r\n [assertionTagEntries]=\"assertionTagEntries\"\r\n [docReferenceTagEntries]=\"docReferenceTagEntries\"\r\n [docReferenceTypeEntries]=\"docReferenceTypeEntries\"\r\n (dateCancel)=\"closeDate()\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Component, OnInit, input } from '@angular/core';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n FormGroup,\r\n FormArray,\r\n FormBuilder,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { BibAuthor } from '../bibliography-part';\r\n\r\n@Component({\r\n selector: 'cadmus-bib-authors-editor',\r\n templateUrl: './bib-authors-editor.component.html',\r\n styleUrls: ['./bib-authors-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatButton,\r\n MatIcon,\r\n MatIconButton,\r\n MatTooltip,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n ],\r\n})\r\nexport class BibAuthorsEditorComponent implements OnInit {\r\n public readonly parentForm = input.required<FormGroup>();\r\n public readonly controlName = input<string>('authors');\r\n // bibliography-author-roles\r\n public readonly roleEntries = input<ThesaurusEntry[]>();\r\n\r\n public authors?: FormArray;\r\n\r\n constructor(private _formBuilder: FormBuilder) {}\r\n\r\n public ngOnInit(): void {\r\n this.authors = this.parentForm()?.controls[this.controlName()] as FormArray;\r\n }\r\n\r\n private getAuthorGroup(author?: BibAuthor): FormGroup {\r\n return this._formBuilder.group({\r\n lastName: this._formBuilder.control(author?.lastName, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n firstName: this._formBuilder.control(\r\n author?.firstName,\r\n Validators.maxLength(50)\r\n ),\r\n roleId: this._formBuilder.control(\r\n author?.roleId,\r\n Validators.maxLength(50)\r\n ),\r\n });\r\n }\r\n\r\n public addAuthor(item?: BibAuthor): void {\r\n this.authors!.push(this.getAuthorGroup(item));\r\n }\r\n\r\n public addAuthorBelow(index: number): void {\r\n this.authors!.insert(index + 1, this.getAuthorGroup());\r\n }\r\n\r\n public removeAuthor(index: number): void {\r\n this.authors!.removeAt(index);\r\n }\r\n\r\n public moveAuthorUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const item = this.authors!.controls[index];\r\n this.authors!.removeAt(index);\r\n this.authors!.insert(index - 1, item);\r\n }\r\n\r\n public moveAuthorDown(index: number): void {\r\n if (index + 1 >= this.authors!.length) {\r\n return;\r\n }\r\n const item = this.authors!.controls[index];\r\n this.authors!.removeAt(index);\r\n this.authors!.insert(index + 1, item);\r\n }\r\n\r\n public clearAuthors(): void {\r\n for (let i = this.authors!.length - 1; i > -1; i--) {\r\n this.authors!.removeAt(i);\r\n }\r\n }\r\n}\r\n","@if (parentForm()) {\n<form [formGroup]=\"parentForm()\">\n <div [formArrayName]=\"controlName()\">\n @if (!authors || !authors.length) {\n <div style=\"margin: 8px 0\">\n <button\n type=\"button\"\n mat-flat-button\n (click)=\"addAuthor()\"\n class=\"mat-primary\"\n >\n <mat-icon>add_circle</mat-icon>\n author\n </button>\n </div>\n } @for ( item of authors?.controls; track item; let i = $index; let first =\n $first; let last = $last) {\n <div>\n <!-- child form -->\n <div [formGroupName]=\"i\" class=\"form-row\">\n <!-- child actions -->\n <div>\n {{ i + 1 }}.\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this author\"\n (click)=\"removeAuthor(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Add author below\"\n (click)=\"addAuthorBelow(i)\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move author up\"\n (click)=\"moveAuthorUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move author down\"\n (click)=\"moveAuthorDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <!-- child controls -->\n <!-- last -->\n <mat-form-field>\n <mat-label>last name</mat-label>\n <input matInput formControlName=\"lastName\" spellcheck=\"false\" />\n @if ( item.get('lastName')?.hasError('required') &&\n (item.get('lastName')?.dirty || item.get('lastName')?.touched) ) {\n <mat-error>last name required</mat-error>\n } @if ( item.get('lastName')?.hasError('maxLength') &&\n (item.get('lastName')?.dirty || item.get('lastName')?.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <!-- first -->\n <mat-form-field>\n <mat-label>first name</mat-label>\n <input matInput formControlName=\"firstName\" spellcheck=\"false\" />\n <mat-error>too long</mat-error>\n </mat-form-field>\n <!-- roleId -->\n @if (roleEntries()?.length) {\n <mat-form-field>\n <mat-label>role</mat-label>\n <mat-select formControlName=\"roleId\">\n <mat-option [value]=\"null\">(no role)</mat-option>\n @for (e of roleEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field>\n <mat-label>role</mat-label>\n <input matInput formControlName=\"roleId\" spellcheck=\"false\" />\n <mat-error>too long</mat-error>\n </mat-form-field>\n }\n </div>\n </div>\n }\n </div>\n</form>\n}\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n model,\r\n effect,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n FormGroup,\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n FormArray,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatError,\r\n MatSuffix,\r\n} from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport {\r\n MatDatepickerInput,\r\n MatDatepickerToggle,\r\n MatDatepicker,\r\n} from '@angular/material/datepicker';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { Keyword } from '../keywords-part';\r\nimport { BibEntry, BibAuthor } from '../bibliography-part';\r\nimport { BibAuthorsEditorComponent } from '../bib-authors-editor/bib-authors-editor.component';\r\n\r\n/**\r\n * Bibliography entry editor used by BibliographyPartComponent to edit a single\r\n * entry in the bibliography part.\r\n */\r\n@Component({\r\n selector: 'cadmus-bibliography-entry',\r\n templateUrl: './bibliography-entry.component.html',\r\n styleUrls: ['./bibliography-entry.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n BibAuthorsEditorComponent,\r\n MatDatepickerInput,\r\n MatDatepickerToggle,\r\n MatSuffix,\r\n MatDatepicker,\r\n MatButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatIconButton,\r\n ],\r\n})\r\nexport class BibliographyEntryComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n\r\n public readonly entry = model<BibEntry>();\r\n\r\n // bibliography-languages\r\n public readonly langEntries = input<ThesaurusEntry[]>();\r\n // bibliography-types\r\n public readonly typeEntries = input<ThesaurusEntry[]>();\r\n // bibliography-tags\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n // bibliography-author-roles\r\n public readonly roleEntries = input<ThesaurusEntry[]>();\r\n\r\n public readonly editorClose = output();\r\n\r\n // form - general\r\n public key: FormControl<string | null>;\r\n public type: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public language: FormControl<string | null>;\r\n public authors: FormArray;\r\n public title: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n // form - container\r\n public contributors: FormArray;\r\n public container: FormControl<string | null>;\r\n public edition: FormControl<number | null>;\r\n public number: FormControl<string | null>;\r\n public publisher: FormControl<string | null>;\r\n public placePub: FormControl<string | null>;\r\n public yearPub: FormControl<number | null>;\r\n public location: FormControl<string | null>;\r\n public accessDate: FormControl<Date | null>;\r\n public firstPage: FormControl<number | null>;\r\n public lastPage: FormControl<number | null>;\r\n // form - keywords\r\n public keywords: Keyword[];\r\n public keyLanguage: FormControl<string | null>;\r\n public keyValue: FormControl<string | null>;\r\n public keyForm: FormGroup;\r\n\r\n public form: FormGroup;\r\n\r\n constructor(private _formBuilder: FormBuilder) {\r\n // form - general\r\n this.key = _formBuilder.control(null, Validators.maxLength(300));\r\n this.type = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]);\r\n this.tag = _formBuilder.control(null, Validators.maxLength(50));\r\n this.language = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.authors = _formBuilder.array([], Validators.required);\r\n this.title = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.note = _formBuilder.control(null, Validators.maxLength(1000));\r\n // form - container\r\n this.contributors = _formBuilder.array([]);\r\n this.container = _formBuilder.control(null, Validators.maxLength(300));\r\n this.edition = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(100),\r\n ]);\r\n this.number = _formBuilder.control(null, Validators.maxLength(50));\r\n this.publisher = _formBuilder.control(null, Validators.maxLength(100));\r\n this.placePub = _formBuilder.control(null, Validators.maxLength(100));\r\n this.yearPub = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(new Date().getFullYear()),\r\n ]);\r\n this.location = _formBuilder.control(null, Validators.maxLength(500));\r\n this.accessDate = _formBuilder.control(new Date());\r\n this.firstPage = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(10000),\r\n ]);\r\n this.lastPage = _formBuilder.control(null, [\r\n Validators.min(0),\r\n Validators.max(10000),\r\n ]);\r\n // form - keywords\r\n this.keywords = [];\r\n this.keyLanguage = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.keyValue = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.keyForm = _formBuilder.group({\r\n keyLanguage: this.keyLanguage,\r\n keyValue: this.keyValue,\r\n });\r\n\r\n this.form = _formBuilder.group({\r\n key: this.key,\r\n type: this.type,\r\n tag: this.tag,\r\n language: this.language,\r\n authors: this.authors,\r\n title: this.title,\r\n note: this.note,\r\n contributors: this.contributors,\r\n container: this.container,\r\n edition: this.edition,\r\n number: this.number,\r\n publisher: this.publisher,\r\n placePub: this.placePub,\r\n yearPub: this.yearPub,\r\n location: this.location,\r\n accessDate: this.accessDate,\r\n firstPage: this.firstPage,\r\n lastPage: this.lastPage,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.entry());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n // automatically set last page when first is set to something > 0\r\n // and last is not set\r\n this._sub = this.firstPage.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((_) => {\r\n if (\r\n this.firstPage.value &&\r\n this.lastPage.value &&\r\n this.lastPage.value < this.firstPage.value\r\n ) {\r\n this.lastPage.setValue(this.firstPage.value);\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private getAuthorGroup(author?: BibAuthor): FormGroup {\r\n return this._formBuilder.group({\r\n lastName: this._formBuilder.control(author?.lastName, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n firstName: this._formBuilder.control(\r\n author?.firstName,\r\n Validators.maxLength(50)\r\n ),\r\n roleId: this._formBuilder.control(\r\n author?.roleId || null,\r\n Validators.maxLength(50)\r\n ),\r\n });\r\n }\r\n\r\n private setAuthors(authors: BibAuthor[], ctl: FormArray): void {\r\n if (!authors) {\r\n this.authors.reset();\r\n return;\r\n }\r\n for (let i = 0; i < authors.length; i++) {\r\n ctl.push(this.getAuthorGroup(authors[i]));\r\n }\r\n this.authors.markAsPristine();\r\n }\r\n\r\n private updateForm(entry?: BibEntry): void {\r\n if (!entry) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n this.key.setValue(entry.key || null);\r\n this.type.setValue(entry.typeId);\r\n this.tag.setValue(entry.tag || null);\r\n this.language.setValue(entry.language);\r\n this.setAuthors(entry.authors || [], this.authors);\r\n this.title.setValue(entry.title);\r\n this.note.setValue(entry.note || null);\r\n this.setAuthors(entry.contributors || [], this.contributors);\r\n this.container.setValue(entry.container || null);\r\n this.edition.setValue(entry.edition || null);\r\n this.number.setValue(entry.number || null);\r\n this.publisher.setValue(entry.publisher || null);\r\n this.placePub.setValue(entry.placePub || null);\r\n this.yearPub.setValue(entry.yearPub || null);\r\n this.location.setValue(entry.location || null);\r\n this.accessDate.setValue(entry.accessDate || null);\r\n this.firstPage.setValue(entry.firstPage || null);\r\n this.lastPage.setValue(entry.lastPage || null);\r\n this.keywords = entry?.keywords || [];\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getAuthors(ctl: FormArray): BibAuthor[] {\r\n const authors: BibAuthor[] = [];\r\n\r\n for (let i = 0; i < ctl.length; i++) {\r\n const g = ctl.at(i) as FormGroup;\r\n authors.push({\r\n lastName: g.controls['lastName'].value?.trim(),\r\n firstName: g.controls['firstName'].value?.trim(),\r\n roleId: g.controls['roleId'].value?.trim(),\r\n });\r\n }\r\n return authors.length ? authors : [];\r\n }\r\n\r\n private getEntry(): BibEntry {\r\n return {\r\n key: this.key.value?.trim(),\r\n typeId: this.type.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n language: this.language.value || '',\r\n authors: this.getAuthors(this.authors),\r\n title: this.title.value?.trim() || '',\r\n note: this.note.value?.trim(),\r\n contributors: this.getAuthors(this.contributors),\r\n container: this.container.value?.trim(),\r\n edition: this.edition.value || undefined,\r\n number: this.number.value?.trim(),\r\n publisher: this.publisher.value?.trim(),\r\n placePub: this.placePub.value?.trim(),\r\n yearPub: this.yearPub.value || undefined,\r\n location: this.location.value?.trim(),\r\n accessDate: this.accessDate.value || undefined,\r\n firstPage: this.firstPage.value || undefined,\r\n lastPage: this.lastPage.value || undefined,\r\n keywords: this.keywords.length ? this.keywords : undefined,\r\n };\r\n }\r\n\r\n public addKeyword(): void {\r\n if (this.keyForm.invalid) {\r\n return;\r\n }\r\n if (\r\n !this.keywords.some(\r\n (k) =>\r\n k.language === this.keyLanguage.value &&\r\n k.value === this.keyValue.value\r\n )\r\n ) {\r\n this.keywords.push({\r\n language: this.keyLanguage.value!,\r\n value: this.keyValue.value!,\r\n });\r\n this.keyValue.reset();\r\n this.form.markAsDirty();\r\n }\r\n }\r\n\r\n public deleteKeyword(index: number): void {\r\n this.keywords.splice(index, 1);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public moveKeywordUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const k = this.keywords[index];\r\n this.keywords.splice(index, 1);\r\n this.keywords.splice(index - 1, 0, k);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public moveKeywordDown(index: number): void {\r\n if (index + 1 >= this.keywords.length) {\r\n return;\r\n }\r\n const k = this.keywords[index];\r\n this.keywords.splice(index, 1);\r\n this.keywords.splice(index + 1, 0, k);\r\n this.form.markAsDirty();\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.entry.set(this.getEntry());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-tab-group>\n <!-- general -->\n <mat-tab label=\"General\">\n <!-- typeId -->\n <div class=\"form-row\">\n @if (typeEntries()?.length) {\n <mat-form-field>\n <mat-label>type</mat-label>\n <mat-select formControlName=\"type\">\n @for (e of typeEntries() || []; track e) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <mat-form-field>\n <mat-label>type</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"type\"\n />\n @if (type.hasError('required') && (type.dirty || type.touched)) {\n <mat-error>entry type required</mat-error>\n } @if (type.hasError('maxLength') && (type.dirty || type.touched)) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- language (bound) -->\n @if (langEntries()?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"language\">\n @for (e of langEntries() || []; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput [formControl]=\"language\" />\n @if ( language.hasError('required') && (language.dirty ||\n language.touched) ) {\n <mat-error>required</mat-error>\n } @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- key -->\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput [formControl]=\"key\" />\n @if (key.hasError('maxLength') && (key.dirty || key.touched)) {\n <mat-error>key too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- authors -->\n <fieldset>\n <legend>author(s)</legend>\n <cadmus-bib-authors-editor\n [parentForm]=\"form\"\n [controlName]=\"'authors'\"\n [roleEntries]=\"roleEntries()\"\n />\n </fieldset>\n\n <!-- title -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>title</mat-label>\n <input matInput type=\"text\" formControlName=\"title\" />\n @if (title.hasError('required') && (title.dirty || title.touched)) {\n <mat-error>title required</mat-error>\n } @if ( title.hasError('maxLength') && (title.dirty || title.touched)\n ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>note</mat-label>\n <textarea matInput formControlName=\"note\" rows=\"2\"></textarea>\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n </mat-tab>\n\n <!-- container -->\n <mat-tab label=\"Container\">\n <!-- contributors -->\n <cadmus-bib-authors-editor\n [parentForm]=\"form\"\n [controlName]=\"'contributors'\"\n [roleEntries]=\"roleEntries()\"\n />\n\n <!-- container -->\n <div>\n <mat-form-field class=\"long-text\">\n <mat-label>container</mat-label>\n <input matInput type=\"text\" formControlName=\"container\" />\n @if ( container.hasError('maxLength') && (container.dirty ||\n container.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- number -->\n <div>\n <mat-form-field>\n <mat-label>number</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"number\"\n />\n @if ( number.hasError('maxLength') && (number.dirty || number.touched)\n ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- firstPage -->\n \n <mat-form-field [style.width.em]=\"5\">\n <mat-label>from</mat-label>\n <input matInput type=\"number\" formControlName=\"firstPage\" />\n @if ( firstPage.hasError('min') && (firstPage.dirty ||\n firstPage.touched) ) {\n <mat-error>page less than 0</mat-error>\n } @if ( firstPage.hasError('max') && (firstPage.dirty ||\n firstPage.touched) ) {\n <mat-error>page number too big</mat-error>\n }\n </mat-form-field>\n -\n <!-- lastPage -->\n <mat-form-field [style.width.em]=\"5\">\n <mat-label>to</mat-label>\n <input matInput type=\"number\" formControlName=\"lastPage\" />\n @if ( lastPage.hasError('min') && (lastPage.dirty || lastPage.touched)\n ) {\n <mat-error>page less than 0</mat-error>\n } @if ( lastPage.hasError('max') && (lastPage.dirty ||\n lastPage.touched) ) {\n <mat-error>page number too big</mat-error>\n }\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <!-- publisher -->\n <mat-form-field>\n <mat-label>publisher</mat-label>\n <input matInput [formControl]=\"publisher\" />\n @if ( publisher.hasError('maxLength') && (publisher.dirty ||\n publisher.touched) ) {\n <mat-error>publisher too long</mat-error>\n }\n </mat-form-field>\n\n <!-- placePub -->\n <mat-form-field>\n <mat-label>place</mat-label>\n <input matInput type=\"text\" formControlName=\"placePub\" />\n @if ( placePub.hasError('maxLength') && (placePub.dirty ||\n placePub.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- yearPub -->\n <mat-form-field class=\"nr\">\n <mat-label>year</mat-label>\n <input matInput type=\"number\" formControlName=\"yearPub\" />\n @if ( yearPub.hasError('min') && (yearPub.dirty || yearPub.touched) )\n {\n <mat-error>year less than 0</mat-error>\n } @if ( yearPub.hasError('max') && (yearPub.dirty || yearPub.touched)\n ) {\n <mat-error>year past the current one</mat-error>\n }\n </mat-form-field>\n\n <!-- edition -->\n <mat-form-field class=\"nr\">\n <mat-label>ed.</mat-label>\n <input matInput type=\"number\" formControlName=\"edition\" />\n @if ( edition.hasError('min') && (edition.dirty || edition.touched) )\n {\n <mat-error>edition less than 0</mat-error>\n } @if ( edition.hasError('max') && (edition.dirty || edition.touched)\n ) {\n <mat-error>edition greater than 100</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- location -->\n <div class=\"form-row\">\n <mat-form-field>\n <mat-label>location</mat-label>\n <input\n matInput\n type=\"text\"\n formControlName=\"location\"\n spellcheck=\"false\"\n />\n @if ( location.hasError('maxLength') && (location.dirty ||\n location.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n\n <!-- accessDate -->\n <mat-form-field>\n <mat-label>access date</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n formControlName=\"accessDate\"\n />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n ></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n </mat-tab>\n\n <!-- keywords -->\n <mat-tab label=\"Keywords\">\n <form [formGroup]=\"keyForm\" (submit)=\"addKeyword()\">\n <div class=\"form-row\">\n <!-- language (bound) -->\n @if (langEntries()?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"keyLanguage\">\n @for (e of langEntries() || []; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput [formControl]=\"keyLanguage\" />\n @if ( keyLanguage.hasError('required') && (keyLanguage.dirty ||\n keyLanguage.touched) ) {\n <mat-error>required</mat-error>\n } @if ( keyLanguage.hasError('pattern') && (keyLanguage.dirty ||\n keyLanguage.touched) ) {\n <mat-error>invalid</mat-error>\n }\n </mat-form-field>\n }\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"keyValue\" />\n @if ( keyValue.hasError('required') && (keyValue.dirty ||\n keyValue.touched) ) {\n <mat-error>required</mat-error>\n } @if ( keyValue.hasError('maxLength') && (keyValue.dirty ||\n keyValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n type=\"submit\"\n [disabled]=\"keyForm.invalid\"\n matTooltip=\"Add new keyword\"\n >\n <mat-icon class=\"mat-primary\">add_circle</mat-icon> keyword\n </button>\n </div>\n </form>\n <!-- list -->\n @if (keywords.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>language</th>\n <th>value</th>\n </tr>\n </thead>\n <tbody>\n @for ( k of keywords; track k; let i = $index; let first = $first; let\n last = $last) {\n <tr>\n <td>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this keyword\"\n (click)=\"deleteKeyword(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword up\"\n (click)=\"moveKeywordUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword down\"\n (click)=\"moveKeywordDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </td>\n <td>{{ k.language }}</td>\n <td>{{ k.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </mat-tab>\n </mat-tab-group>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Cancel edit\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid\"\n mat-icon-button\n matTooltip=\"Save entry\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { Keyword } from './keywords-part';\r\n\r\nexport interface BibAuthor {\r\n firstName?: string;\r\n lastName: string;\r\n roleId?: string;\r\n}\r\n\r\nexport interface BibEntry {\r\n key?: string;\r\n typeId: string;\r\n tag?: string;\r\n authors?: BibAuthor[];\r\n title: string;\r\n language: string;\r\n container?: string;\r\n contributors?: BibAuthor[];\r\n edition?: number;\r\n number?: string;\r\n publisher?: string;\r\n yearPub?: number;\r\n placePub?: string;\r\n location?: string;\r\n accessDate?: Date;\r\n firstPage?: number;\r\n lastPage?: number;\r\n keywords?: Keyword[];\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The bibliography part model.\r\n */\r\nexport interface BibliographyPart extends Part {\r\n entries: BibEntry[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the BibliographyPart type.\r\n */\r\nexport const BIBLIOGRAPHY_PART_TYPEID = 'it.vedph.bibliography';\r\n\r\n/**\r\n * JSON schema for the Bibliography part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const BIBLIOGRAPHY_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n BIBLIOGRAPHY_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'BibliographyPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'entries',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n key: {\r\n type: 'string'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n tag: {\r\n type: 'string'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n entries: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['typeId', 'title', 'language'],\r\n properties: {\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n authors: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['lastName'],\r\n properties: {\r\n firstName: {\r\n type: 'string',\r\n },\r\n lastName: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n title: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n container: {\r\n type: 'string',\r\n },\r\n contributors: {\r\n type: ['array', 'null'],\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['lastName'],\r\n properties: {\r\n firstName: {\r\n type: 'string',\r\n },\r\n lastName: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n edition: {\r\n type: 'integer',\r\n },\r\n number: {\r\n type: 'string',\r\n },\r\n publisher: {\r\n type: 'string',\r\n },\r\n yearPub: {\r\n type: 'integer',\r\n },\r\n placePub: {\r\n type: 'string',\r\n },\r\n location: {\r\n type: 'string',\r\n },\r\n accessDate: {\r\n type: 'string',\r\n pattern:\r\n '^\\\\d{4}-\\\\d{2}-\\\\d{2}(?:T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z)$',\r\n },\r\n firstPage: {\r\n title: 'The firstPage schema',\r\n },\r\n lastPage: {\r\n type: 'integer',\r\n },\r\n keywords: {\r\n type: ['array', 'null'],\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['language', 'value'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport {\r\n BibliographyPart,\r\n BibEntry,\r\n BIBLIOGRAPHY_PART_TYPEID,\r\n BibAuthor,\r\n} from '../bibliography-part';\r\nimport { BibliographyEntryComponent } from '../bibliography-entry/bibliography-entry.component';\r\n\r\n/**\r\n * Bibliography part editor.\r\n * Thesauri: bibliography-languages, bibliography-types (optional),\r\n * bibliography-tags (optional), bibliography-author-roles (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-bibliography-part',\r\n templateUrl: './bibliography-part.component.html',\r\n styleUrls: ['./bibliography-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n BibliographyEntryComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class BibliographyPartComponent\r\n extends ModelEditorComponentBase<BibliographyPart>\r\n implements OnInit\r\n{\r\n private _editedEntryIndex: number;\r\n\r\n public editedEntry?: BibEntry;\r\n\r\n // thesauri\r\n // bibliography-languages\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-author-roles\r\n public roleEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n // bibliography-types\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // form\r\n public entries: FormControl<BibEntry[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this._editedEntryIndex = -1;\r\n // form\r\n this.entries = formBuilder.control<BibEntry[]>([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.entries,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'bibliography-languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'bibliography-author-roles';\r\n if (this.hasThesaurus(key)) {\r\n this.roleEntries = thesauri[key].entries;\r\n } else {\r\n this.roleEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: BibliographyPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue([...part.entries]);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<BibliographyPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n public entryTypeToString(id?: string): string {\r\n if (!id || !this.typeEntries?.entries) {\r\n return '';\r\n }\r\n const entry = this.typeEntries.find((e) => e.id === id);\r\n return entry ? entry.value : id;\r\n }\r\n\r\n protected getValue(): BibliographyPart {\r\n let part = this.getEditedPart(BIBLIOGRAPHY_PART_TYPEID) as BibliographyPart;\r\n part.entries = this.entries.value;\r\n return part;\r\n }\r\n\r\n public addEntry(): void {\r\n const entry: BibEntry = {\r\n typeId: this.typeEntries ? this.typeEntries[0].id : '',\r\n title: '',\r\n language: this.langEntries ? this.langEntries[0].id : '',\r\n };\r\n this.editEntry(entry, -1);\r\n }\r\n\r\n public editEntry(entry: BibEntry, index: number): void {\r\n this._editedEntryIndex = index;\r\n this.editedEntry = entry;\r\n }\r\n\r\n public closeEntry(): void {\r\n this._editedEntryIndex = -1;\r\n this.editedEntry = undefined;\r\n }\r\n\r\n public saveEntry(entry: BibEntry): void {\r\n if (!this.editedEntry) {\r\n return;\r\n }\r\n if (this._editedEntryIndex === -1) {\r\n this.entries.setValue([...this.entries.value, entry]);\r\n } else {\r\n const entries = [...this.entries.value];\r\n entries.splice(this._editedEntryIndex, 1, entry);\r\n this.entries.setValue(entries);\r\n }\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n\r\n this.closeEntry();\r\n }\r\n\r\n public removeEntry(index: number): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', 'Delete entry?')\r\n .subscribe((result) => {\r\n if (!result) {\r\n return;\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n });\r\n }\r\n\r\n public moveEntryUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public moveEntryDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public getAuthors(authors: BibAuthor[]): string {\r\n const sb: string[] = [];\r\n for (let i = 0; i < authors?.length || 0; i++) {\r\n if (i) {\r\n sb.push('; ');\r\n }\r\n sb.push(authors[i].lastName);\r\n if (authors[i].firstName) {\r\n sb.push(', ');\r\n sb.push(authors[i].firstName!);\r\n }\r\n if (authors[i].roleId) {\r\n sb.push(` (${authors[i].roleId})`);\r\n }\r\n }\r\n return sb.join('');\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Bibliography Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addEntry()\"\n >\n <mat-icon>add_circle</mat-icon> entry\n </button>\n @if (entries.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>type</th>\n <th>author(s)</th>\n <th>title</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of entries.value; track entry; let i = $index; let first\n = $first; let last = $last) {\n <tr [class.selected]=\"editedEntry === entry\">\n <td class=\"fit-width\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Edit entry\"\n (click)=\"editEntry(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move entry up\"\n [disabled]=\"first\"\n (click)=\"moveEntryUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move entry down\"\n [disabled]=\"last\"\n (click)=\"moveEntryDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this entry\"\n (click)=\"removeEntry(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entryTypeToString(entry.typeId) }}</td>\n <td>{{ getAuthors(entry.authors || []) }}</td>\n <td>{{ entry.title }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n <!-- entry editor -->\n <mat-expansion-panel\n id=\"editor\"\n [expanded]=\"editedEntry\"\n [disabled]=\"!editedEntry\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ editedEntry?.title || \"entry\" }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <fieldset>\n <cadmus-bibliography-entry\n [entry]=\"editedEntry\"\n [langEntries]=\"langEntries\"\n [typeEntries]=\"typeEntries\"\n [tagEntries]=\"tagEntries\"\n [roleEntries]=\"roleEntries\"\n (editorClose)=\"closeEntry()\"\n (entryChange)=\"saveEntry($event!)\"\n />\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The Categories part model.\r\n */\r\nexport interface CategoriesPart extends Part {\r\n categories: string[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the CategoriesPart type.\r\n */\r\nexport const CATEGORIES_PART_TYPEID = 'it.vedph.categories';\r\n\r\n/**\r\n * JSON schema for the Categories part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const CATEGORIES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + CATEGORIES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'CategoriesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'categories'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { ThesaurusEntry, EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { CategoriesPart, CATEGORIES_PART_TYPEID } from '../categories-part';\r\nimport { TitleCasePipe } from '@angular/common';\r\n\r\n/**\r\n * Categories component editor.\r\n * Thesaurus: categories (required).\r\n */\r\n@Component({\r\n selector: 'cadmus-categories-part',\r\n templateUrl: './categories-part.component.html',\r\n styleUrls: ['./categories-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ThesaurusTreeComponent,\r\n ],\r\n})\r\nexport class CategoriesPartComponent\r\n extends ModelEditorComponentBase<CategoriesPart>\r\n implements OnInit\r\n{\r\n public categories: FormControl<ThesaurusEntry[]>;\r\n public entries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form controls\r\n this.categories = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n categories: this.categories,\r\n });\r\n }\r\n\r\n private updateForm(part?: CategoriesPart | null): void {\r\n if (!part?.categories) {\r\n this.categories.reset();\r\n return;\r\n }\r\n\r\n // map the category IDs to the corresponding thesaurus\r\n // entries, if any -- else just use the IDs\r\n const entries: ThesaurusEntry[] = part.categories.map((id) => {\r\n const entry = this.entries!.find((e) => e.id === id);\r\n return entry\r\n ? entry\r\n : {\r\n id,\r\n value: id,\r\n };\r\n });\r\n\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n\r\n // assign them to the control\r\n this.categories.setValue(entries);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected getValue(): CategoriesPart {\r\n let part = this.getEditedPart(CATEGORIES_PART_TYPEID) as CategoriesPart;\r\n part.categories = this.categories.value.map((entry: ThesaurusEntry) => {\r\n return entry.id;\r\n });\r\n return part;\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<CategoriesPart>): void {\r\n // thesauri\r\n const key = 'categories';\r\n if (this.hasThesaurus(key)) {\r\n this.entries = data?.thesauri[key].entries || [];\r\n }\r\n // tree\r\n this.updateForm(data?.value);\r\n }\r\n\r\n public onEntryChange(entry: ThesaurusEntry): void {\r\n // add the new entry unless already present\r\n if (this.categories.value?.some((e: ThesaurusEntry) => e.id === entry.id)) {\r\n return;\r\n }\r\n const entries = [...this.categories.value];\r\n entries.push(entry);\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n this.categories.setValue(entries);\r\n this.categories.markAsDirty();\r\n this.categories.updateValueAndValidity();\r\n }\r\n\r\n public removeCategory(index: number): void {\r\n const entries = [...this.categories.value];\r\n entries.splice(index, 1);\r\n this.categories.setValue(entries);\r\n this.categories.markAsDirty();\r\n this.categories.updateValueAndValidity();\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title\n [matBadge]=\"categories.value.length\"\n matBadgeOverlap=\"false\"\n >\n {{ (modelName() | titlecase) || \"Categories Part\" }}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <div id=\"container\">\n <!-- available categories (from thesaurus) -->\n <fieldset id=\"picker\">\n <legend>available categories</legend>\n <cadmus-thesaurus-tree\n [entries]=\"entries\"\n rootLabel=\"categories\"\n [renderLabel]=\"renderLabel\"\n (entryChange)=\"onEntryChange($event)\"\n />\n </fieldset>\n\n <!-- categories -->\n @if (categories.value.length) {\n <fieldset id=\"list\">\n <legend>assigned categories</legend>\n <table>\n <tbody>\n @for (entry of categories.value; track entry; let i = $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this category\"\n (click)=\"removeCategory(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </fieldset>\n }\n </div>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { HistoricalDateModel } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n/**\r\n * The chronology layer fragment server model.\r\n */\r\nexport interface ChronologyFragment extends Fragment {\r\n date: HistoricalDateModel;\r\n label?: string;\r\n tag?: string;\r\n eventId?: string;\r\n}\r\n\r\nexport const CHRONOLOGY_FRAGMENT_TYPEID = 'fr.it.vedph.chronology';\r\n\r\nexport const CHRONOLOGY_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n CHRONOLOGY_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'ChronologyFragment',\r\n required: ['location', 'date'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string'\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string'\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer'\r\n },\r\n isCentury: {\r\n type: 'boolean'\r\n },\r\n isSpan: {\r\n type: 'boolean'\r\n },\r\n isApproximate: {\r\n type: 'boolean'\r\n },\r\n isDubious: {\r\n type: 'boolean'\r\n },\r\n day: {\r\n type: 'integer'\r\n },\r\n month: {\r\n type: 'integer'\r\n },\r\n hint: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer'\r\n },\r\n isCentury: {\r\n type: 'boolean'\r\n },\r\n isSpan: {\r\n type: 'boolean'\r\n },\r\n isApproximate: {\r\n type: 'boolean'\r\n },\r\n isDubious: {\r\n type: 'boolean'\r\n },\r\n day: {\r\n type: 'integer'\r\n },\r\n month: {\r\n type: 'integer'\r\n },\r\n hint: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n }\r\n },\r\n label: {\r\n type: 'string'\r\n },\r\n tag: {\r\n type: 'string'\r\n },\r\n eventId: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n UntypedFormGroup,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardSubtitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { ThesauriSet, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n HistoricalDateModel,\r\n HistoricalDateComponent,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\n\r\nimport { ChronologyFragment } from '../chronology-fragment';\r\n\r\n/**\r\n * Chronology fragment editor component.\r\n * Thesauri: \"chronology-tags\" when you want to use a closed set of tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-chronology-fragment',\r\n templateUrl: './chronology-fragment.component.html',\r\n styleUrls: ['./chronology-fragment.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardSubtitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n HistoricalDateComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ChronologyFragmentComponent\r\n extends ModelEditorComponentBase<ChronologyFragment>\r\n implements OnInit\r\n{\r\n public tagEntries?: ThesaurusEntry[];\r\n\r\n // the date being edited in its text form\r\n public initialDate: HistoricalDateModel | undefined;\r\n\r\n public date: FormControl<HistoricalDateModel | null>;\r\n public tag: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public eventId: FormControl<string | null>;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.date = formBuilder.control(null, Validators.required);\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.label = formBuilder.control(null, Validators.maxLength(150));\r\n this.eventId = formBuilder.control(null, Validators.maxLength(300));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n date: this.date,\r\n tag: this.tag,\r\n label: this.label,\r\n eventId: this.eventId,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'chronology-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(fragment?: ChronologyFragment | null): void {\r\n if (!fragment || !fragment.date) {\r\n this.form.reset();\r\n } else {\r\n // date\r\n this.initialDate = fragment.date;\r\n this.date.setValue(fragment.date);\r\n // label and tag\r\n this.label.setValue(fragment.label || null);\r\n this.tag.setValue(fragment.tag || null);\r\n this.eventId.setValue(fragment.eventId || null);\r\n this.form.markAsPristine();\r\n }\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ChronologyFragment>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value as ChronologyFragment);\r\n }\r\n\r\n public onDateChange(date: HistoricalDateModel): void {\r\n this.date.setValue(date);\r\n this.date.updateValueAndValidity();\r\n this.date.markAsDirty();\r\n }\r\n\r\n protected getValue(): ChronologyFragment {\r\n let fr = this.getEditedFragment() as ChronologyFragment;\r\n fr.date = this.date.value!;\r\n // label and tag\r\n fr.label = this.label.value?.trim();\r\n fr.eventId = this.eventId.value?.trim();\r\n fr.tag = this.tag.value || undefined;\r\n return fr;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>\n {{ (modelName() | titlecase) || \"Chronology Fragment\" }}\n {{ data()?.value?.location }}</mat-card-title\n >\n <mat-card-subtitle>\n {{ data()?.value?.baseText }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"form-row\">\n <!-- free tag -->\n @if (!tagEntries) {\n <div>\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input type=\"text\" matInput formControlName=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n </div>\n }\n <!-- bound tag -->\n @else {\n <div>\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select formControlName=\"tag\">\n @for (e of tagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n }\n\n <!-- label -->\n <div>\n <mat-form-field>\n <mat-label>label</mat-label>\n <input matInput type=\"text\" formControlName=\"label\" />\n @if ( label.hasError('maxLength') && (label.dirty || label.touched)\n ) {\n <mat-error>label too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- event ID -->\n <div>\n <mat-form-field>\n <mat-label>event ID</mat-label>\n <input\n matInput\n type=\"text\"\n formControlName=\"eventId\"\n spellcheck=\"false\"\n />\n @if ( eventId.hasError('maxLength') && (eventId.dirty ||\n eventId.touched) ) {\n <mat-error>event ID too long</mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n\n <!-- date -->\n <div>\n <cadmus-refs-historical-date\n [date]=\"date.value || undefined\"\n (dateChange)=\"onDateChange($event!)\"\n />\n </div>\n </mat-card-content>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedChronotope } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\n/**\r\n * The chronotopes part model.\r\n */\r\nexport interface ChronotopesPart extends Part {\r\n chronotopes: AssertedChronotope[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the ChronotopesPart type.\r\n */\r\nexport const CHRONOTOPES_PART_TYPEID = 'it.vedph.chronotopes';\r\n\r\n/**\r\n * JSON schema for the Chronotopes part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const Chronotopes_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + CHRONOTOPES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'ChronotopesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'chronotopes',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n chronotopes: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n properties: {\r\n chronotope: {\r\n place: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n // TODO: add properties and fill the \"required\" array as needed\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedChronotope,\r\n AssertedChronotopeComponent,\r\n AssertedChronotopesPipe,\r\n} from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { HistoricalDatePipe } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { ChronotopesPart, CHRONOTOPES_PART_TYPEID } from '../chronotopes-part';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\n/**\r\n * Chronotopes part editor component.\r\n * Thesauri: chronotope-place-tags, chronotope-assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-chronotopes-part',\r\n templateUrl: './chronotopes-part.component.html',\r\n styleUrls: ['./chronotopes-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n AssertedChronotopeComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n HistoricalDatePipe,\r\n AssertedChronotopesPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ChronotopesPartComponent\r\n extends ModelEditorComponentBase<ChronotopesPart>\r\n implements OnInit\r\n{\r\n private _editedChronotopeIndex: number;\r\n\r\n public editedChronotope: AssertedChronotope | undefined;\r\n\r\n // chronotope-place-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n // chronotope-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public chronotopes: FormControl<AssertedChronotope[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this._editedChronotopeIndex = -1;\r\n // form\r\n this.chronotopes = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.chronotopes,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'chronotope-place-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'chronotope-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(model?: ChronotopesPart | null): void {\r\n if (!model) {\r\n this.form!.reset();\r\n return;\r\n }\r\n this.chronotopes.setValue(model.chronotopes || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ChronotopesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): ChronotopesPart {\r\n let part = this.getEditedPart(CHRONOTOPES_PART_TYPEID) as ChronotopesPart;\r\n part.chronotopes = this.chronotopes.value;\r\n return part;\r\n }\r\n\r\n public addChronotope(): void {\r\n this.editChronotope({}, -1);\r\n }\r\n\r\n public editChronotope(chronotope: AssertedChronotope, index: number): void {\r\n this._editedChronotopeIndex = index;\r\n this.editedChronotope = chronotope;\r\n }\r\n\r\n public onChronotopeChange(chronotope: AssertedChronotope): void {\r\n this.editedChronotope = chronotope;\r\n }\r\n\r\n public saveChronotope(): void {\r\n const chronotopes = [...this.chronotopes.value];\r\n if (this._editedChronotopeIndex === -1) {\r\n chronotopes.push(this.editedChronotope!);\r\n } else {\r\n chronotopes.splice(\r\n this._editedChronotopeIndex,\r\n 1,\r\n this.editedChronotope!\r\n );\r\n }\r\n this.chronotopes.setValue(chronotopes);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n this.closeChronotope();\r\n }\r\n\r\n public closeChronotope(): void {\r\n this.editedChronotope = undefined;\r\n this._editedChronotopeIndex = -1;\r\n }\r\n\r\n public deleteChronotope(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete chronotope?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveChronotopeUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.chronotopes.value[index];\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n\r\n public moveChronotopeDown(index: number): void {\r\n if (index + 1 >= this.chronotopes.value.length) {\r\n return;\r\n }\r\n const entry = this.chronotopes.value[index];\r\n const entries = [...this.chronotopes.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.chronotopes.setValue(entries);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Chronotopes Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addChronotope()\"\n >\n <mat-icon>add_circle</mat-icon> chronotope\n </button>\n </div>\n @if (chronotopes.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>place</th>\n <th>date</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of chronotopes.value; track entry; let i = $index; let\n first = $first; let last = $last) {\n <tr [class.selected]=\"entry === editedChronotope\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this chronotope\"\n (click)=\"editChronotope(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this chronotope up\"\n [disabled]=\"first\"\n (click)=\"moveChronotopeUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this chronotope down\"\n [disabled]=\"last\"\n (click)=\"moveChronotopeDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this chronotope\"\n (click)=\"deleteChronotope(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ entry.place?.value }}</td>\n <td>{{ entry.date | historicalDate }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <mat-expansion-panel\n [expanded]=\"editedChronotope\"\n [disabled]=\"!editedChronotope\"\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ (editedChronotope | assertedChronotopes) || \"chronotope\" }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <fieldset>\n <cadmus-refs-asserted-chronotope\n [tagEntries]=\"tagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [chronotope]=\"editedChronotope\"\n (chronotopeChange)=\"onChronotopeChange($event!)\"\n />\n <div class=\"form-row\">\n <button type=\"button\" (click)=\"closeChronotope()\" mat-icon-button>\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button type=\"button\" (click)=\"saveChronotope()\" mat-icon-button>\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n <span>chronotope</span>\n </div>\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport { IndexKeyword } from './index-keywords-part';\r\n\r\n/**\r\n * A comment.\r\n */\r\nexport interface Comment {\r\n tag?: string;\r\n text: string;\r\n references?: DocReference[];\r\n links?: AssertedCompositeId[];\r\n categories?: string[];\r\n keywords?: IndexKeyword[];\r\n}\r\n\r\n/**\r\n * The Comment part model.\r\n */\r\nexport interface CommentPart extends Part, Comment {}\r\n\r\n/**\r\n * The type ID used to identify the CommentPart type.\r\n */\r\nexport const COMMENT_PART_TYPEID = 'it.vedph.comment';\r\n\r\n/**\r\n * JSON schema for the Comment part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const COMMENT_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + COMMENT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'CommentPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'text',\r\n ],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n text: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: ['string', 'null'],\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { Comment } from './comment-part';\r\n\r\n/**\r\n * The comment layer fragment server model.\r\n */\r\nexport interface CommentFragment extends Fragment, Comment {\r\n}\r\n\r\nexport const COMMENT_FRAGMENT_TYPEID = 'fr.it.vedph.comment';\r\n\r\nexport const COMMENT_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n COMMENT_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'CommentFragment',\r\n required: ['location', 'text'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n text: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: ['string', 'null'],\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n externalIds: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n categories: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'string',\r\n },\r\n ],\r\n },\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormArray,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport {\r\n CADMUS_TEXT_ED_BINDINGS_TOKEN,\r\n CadmusTextEdBindings,\r\n CadmusTextEdService,\r\n} from '@myrmidon/cadmus-text-ed';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { Comment, CommentPart, COMMENT_PART_TYPEID } from '../comment-part';\r\n\r\nimport { NgeMarkdownModule } from '@cisstech/nge/markdown';\r\n\r\nimport { IndexKeyword } from '../index-keywords-part';\r\nimport { CommentFragment } from '../comment-fragment';\r\n\r\n/**\r\n * Comment part/fragment editor component.\r\n * Thesauri: comment-tags, doc-reference-tags, doc-reference-types, comment-categories,\r\n * languages, keyword-indexes, keyword-tags, comment-id-scopes, comment-id-tags,\r\n * assertion-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-comment-editor',\r\n templateUrl: './comment-editor.component.html',\r\n styleUrls: ['./comment-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n NgeMonacoModule,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n NgeMarkdownModule,\r\n DocReferencesComponent,\r\n AssertedCompositeIdsComponent,\r\n MatIconButton,\r\n MatTooltip,\r\n MatButton,\r\n MatCardActions,\r\n ThesaurusTreeComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n providers: [CadmusTextEdService],\r\n})\r\nexport class CommentEditorComponent\r\n extends ModelEditorComponentBase<CommentPart | CommentFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public tag: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n public references: FormControl<DocReference[]>;\r\n public links: FormControl<AssertedCompositeId[]>;\r\n public categories: FormControl<ThesaurusEntry[]>;\r\n public keywords: FormArray;\r\n\r\n // comment-tags\r\n public comTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // comment-categories\r\n public catEntries: ThesaurusEntry[] | undefined;\r\n // languages\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n // keyword-indexes\r\n public idxEntries: ThesaurusEntry[] | undefined;\r\n // keyword-tags\r\n public keyTagEntries: ThesaurusEntry[] | undefined;\r\n // comment-id-scopes\r\n public idScopeEntries: ThesaurusEntry[] | undefined;\r\n // comment-id-tags\r\n public idTagEntries: ThesaurusEntry[] | undefined;\r\n // assertion-tags\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _editService: CadmusTextEdService,\r\n @Inject(CADMUS_TEXT_ED_BINDINGS_TOKEN)\r\n @Optional()\r\n private _editorBindings?: CadmusTextEdBindings\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.text = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(50000),\r\n ]);\r\n this.references = formBuilder.control([], { nonNullable: true });\r\n this.links = formBuilder.control([], { nonNullable: true });\r\n this.categories = formBuilder.control([], { nonNullable: true });\r\n this.keywords = formBuilder.array([]);\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n private async applyEdit(selector: string) {\r\n if (!this._editor) {\r\n return;\r\n }\r\n const selection = this._editor.getSelection();\r\n const text = selection\r\n ? this._editor.getModel()!.getValueInRange(selection)\r\n : '';\r\n\r\n const result = await this._editService.edit({\r\n selector,\r\n text: text,\r\n });\r\n\r\n this._editor.executeEdits('my-source', [\r\n {\r\n range: selection!,\r\n text: result.text,\r\n forceMoveMarkers: true,\r\n },\r\n ]);\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'markdown');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // plugins\r\n if (this._editorBindings) {\r\n Object.keys(this._editorBindings).forEach((key) => {\r\n const n = parseInt(key, 10);\r\n console.log(\r\n 'Binding ' + n + ' to ' + this._editorBindings![key as any]\r\n );\r\n this._editor!.addCommand(n, () => {\r\n this.applyEdit(this._editorBindings![key as any]);\r\n });\r\n });\r\n }\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n tag: this.tag,\r\n text: this.text,\r\n references: this.references,\r\n ids: this.links,\r\n categories: this.categories,\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'comment-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.comTagEntries = thesauri[key].entries;\r\n } else {\r\n this.comTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'comment-categories';\r\n if (this.hasThesaurus(key)) {\r\n this.catEntries = thesauri[key].entries;\r\n } else {\r\n this.catEntries = undefined;\r\n }\r\n\r\n key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n\r\n key = 'keyword-indexes';\r\n if (this.hasThesaurus(key)) {\r\n this.idxEntries = thesauri[key].entries;\r\n } else {\r\n this.idxEntries = undefined;\r\n }\r\n\r\n key = 'keyword-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.keyTagEntries = thesauri[key].entries;\r\n } else {\r\n this.keyTagEntries = undefined;\r\n }\r\n\r\n key = 'comment-id-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n\r\n key = 'comment-id-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: CommentPart | CommentFragment | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.tag.setValue(part.tag || null);\r\n this.text.setValue(part.text);\r\n this._editorModel?.setValue(part.text || '');\r\n this.references.setValue(part.references || []);\r\n this.links.setValue(part.links || []);\r\n // keywords\r\n this.keywords.clear();\r\n if (part.keywords?.length) {\r\n for (let keyword of part.keywords) {\r\n this.keywords.controls.push(this.getKeywordGroup(keyword));\r\n }\r\n }\r\n // categories\r\n if (part.categories?.length) {\r\n // map the category IDs to the corresponding thesaurus\r\n // entries, if any -- else just use the IDs\r\n const entries: ThesaurusEntry[] = part.categories.map((id) => {\r\n const entry = this.catEntries?.find((e) => e.id === id);\r\n return entry\r\n ? entry\r\n : {\r\n id,\r\n value: id,\r\n };\r\n });\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n // assign them to the control\r\n this.categories.setValue(entries || []);\r\n } else {\r\n this.categories.setValue([]);\r\n }\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<CommentPart | CommentFragment>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n private updateComment(comment: Comment): void {\r\n comment.tag = this.tag.value?.trim();\r\n comment.text = this.text.value?.trim() || '';\r\n comment.references = this.references.value?.length\r\n ? this.references.value\r\n : undefined;\r\n comment.links = this.links.value?.length ? this.links.value : undefined;\r\n comment.categories = this.categories.value?.length\r\n ? this.categories.value.map((entry: ThesaurusEntry) => {\r\n return entry.id;\r\n })\r\n : undefined;\r\n comment.keywords = this.getKeywords();\r\n }\r\n\r\n protected getValue(): CommentPart | CommentFragment {\r\n if ((this.data()!.value as CommentFragment)?.location) {\r\n let fr = this.getEditedFragment() as CommentFragment;\r\n this.updateComment(fr);\r\n return fr;\r\n } else {\r\n let part = this.getEditedPart(COMMENT_PART_TYPEID) as CommentPart;\r\n this.updateComment(part);\r\n return part;\r\n }\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references || []);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n this.form.markAsDirty();\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids || []);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n this.form.markAsDirty();\r\n }\r\n\r\n //#region Categories\r\n public onCategoryChange(entry: ThesaurusEntry): void {\r\n // add the new entry unless already present\r\n if (this.categories.value?.some((e: ThesaurusEntry) => e.id === entry.id)) {\r\n return;\r\n }\r\n const entries: ThesaurusEntry[] = Object.assign(\r\n [],\r\n this.categories.value || []\r\n );\r\n entries.push(entry);\r\n\r\n // sort the entries by their display value\r\n entries.sort((a: ThesaurusEntry, b: ThesaurusEntry) => {\r\n return a.value.localeCompare(b.value);\r\n });\r\n\r\n // assign to the categories control\r\n this.categories.setValue(entries);\r\n this.categories.updateValueAndValidity();\r\n this.categories.markAsDirty();\r\n }\r\n\r\n public removeCategory(index: number): void {\r\n const entries = Object.assign([], this.categories.value);\r\n entries.splice(index, 1);\r\n this.categories.setValue(entries);\r\n this.categories.updateValueAndValidity();\r\n this.categories.markAsDirty();\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n //#endregion\r\n\r\n //#region Keywords\r\n private getKeywordGroup(keyword?: IndexKeyword): FormGroup {\r\n return this.formBuilder.group({\r\n indexId: this.formBuilder.control(\r\n keyword?.indexId,\r\n Validators.maxLength(50)\r\n ),\r\n tag: this.formBuilder.control(keyword?.tag, Validators.maxLength(50)),\r\n language: this.formBuilder.control(keyword?.language, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n value: this.formBuilder.control(keyword?.value, [\r\n Validators.required,\r\n Validators.maxLength(50),\r\n ]),\r\n note: this.formBuilder.control(keyword?.note, Validators.maxLength(500)),\r\n });\r\n }\r\n\r\n public addKeyword(keyword?: IndexKeyword): void {\r\n this.keywords.push(this.getKeywordGroup(keyword));\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public removeKeyword(index: number): void {\r\n this.keywords.removeAt(index);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public moveKeywordUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const keyword = this.keywords.controls[index];\r\n this.keywords.removeAt(index);\r\n this.keywords.insert(index - 1, keyword);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public moveKeywordDown(index: number): void {\r\n if (index + 1 >= this.keywords.length) {\r\n return;\r\n }\r\n const keyword = this.keywords.controls[index];\r\n this.keywords.removeAt(index);\r\n this.keywords.insert(index + 1, keyword);\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n private getKeywords(): IndexKeyword[] | undefined {\r\n const entries: IndexKeyword[] = [];\r\n for (let i = 0; i < this.keywords.length; i++) {\r\n const g = this.keywords.at(i) as FormGroup;\r\n entries.push({\r\n indexId: g.controls['indexId'].value?.trim(),\r\n tag: g.controls['tag'].value?.trim(),\r\n language: g.controls['language'].value?.trim(),\r\n value: g.controls['value'].value?.trim(),\r\n note: g.controls['note'].value?.trim(),\r\n });\r\n }\r\n return entries.length ? entries : undefined;\r\n }\r\n //#endregion\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>Comment</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group>\n <mat-tab label=\"comment\">\n <!-- tag (bound) -->\n <div>\n @if (comTagEntries?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of comTagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n <!-- text -->\n <div>\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>text required</mat-error>\n }\n </div>\n <div id=\"pvw\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>preview</mat-expansion-panel-header>\n <nge-markdown [data]=\"text.value || undefined\" />\n </mat-expansion-panel>\n </div>\n </mat-tab>\n\n <mat-tab label=\"references\">\n <!-- references -->\n <fieldset>\n <legend>references</legend>\n <cadmus-refs-doc-references\n [references]=\"references.value\"\n [tagEntries]=\"refTagEntries\"\n [typeEntries]=\"refTypeEntries\"\n (referencesChange)=\"onReferencesChange($event)\"\n />\n </fieldset>\n\n <!-- links -->\n <fieldset>\n <legend>links</legend>\n <cadmus-refs-asserted-composite-ids\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [pinByTypeMode]=\"true\"\n [canSwitchMode]=\"true\"\n [canEditTarget]=\"true\"\n [ids]=\"links.value\"\n (idsChange)=\"onIdsChange($event)\"\n />\n </fieldset>\n </mat-tab>\n\n <!-- categories -->\n @if (catEntries?.length) {\n <mat-tab label=\"categories\">\n <div id=\"container\">\n <div id=\"picker\">\n <fieldset>\n <legend>available categories</legend>\n <cadmus-thesaurus-tree\n [entries]=\"catEntries\"\n rootLabel=\"categories\"\n [renderLabel]=\"renderLabel\"\n (entryChange)=\"onCategoryChange($event)\"\n />\n </fieldset>\n </div>\n @if (categories.value.length) {\n <div id=\"list\">\n <fieldset>\n <legend>assigned categories</legend>\n <table>\n <tbody>\n @for (entry of categories.value; track entry; let i =\n $index) {\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this category\"\n (click)=\"removeCategory(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td [matTooltip]=\"entry.id\">{{ entry.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </fieldset>\n </div>\n }\n </div>\n </mat-tab>\n }\n\n <!-- keywords -->\n <mat-tab label=\"keywords\">\n <div formArrayName=\"keywords\">\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addKeyword()\"\n >\n <mat-icon>add_circle</mat-icon>\n keyword\n </button>\n </div>\n <!-- keyword -->\n @for ( item of keywords.controls; track item; let i = $index; let\n first = $first; let last = $last) {\n <div>\n <!-- child form -->\n <div [formGroupName]=\"i\" class=\"form-row\">\n <!-- child actions -->\n <span>{{ i + 1 }}.</span>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Remove this keyword\"\n (click)=\"removeKeyword(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n [disabled]=\"first\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword up\"\n (click)=\"moveKeywordUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n [disabled]=\"last\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Move keyword down\"\n (click)=\"moveKeywordDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <!-- child controls -->\n <!-- indexId (bound) -->\n @if (idxEntries?.length) {\n <mat-form-field>\n <mat-label>index</mat-label>\n <mat-select formControlName=\"indexId\">\n @for (e of idxEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- indexId (free) -->\n @else {\n <mat-form-field>\n <mat-label>index</mat-label>\n <input matInput formControlName=\"indexId\" />\n @if ( $any(item)['controls'].indexId.errors?.maxLength &&\n ($any(item)['controls'].indexId.dirty ||\n $any(item)['controls'].indexId.touched) ) {\n <mat-error>ID too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- tag (bound) -->\n @if (keyTagEntries?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select formControlName=\"tag\">\n @for (e of keyTagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput formControlName=\"tag\" />\n @if ( $any(item)['controls'].tag.errors?.maxLength &&\n ($any(item)['controls'].tag.dirty ||\n $any(item)['controls'].tag.touched) ) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- language (bound) -->\n @if (langEntries?.length) {\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select formControlName=\"language\">\n @for (e of langEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n @if ( $any(item)['controls'].language.errors?.required &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language required</mat-error>\n }\n </mat-form-field>\n }\n <!-- language (free) -->\n @else {\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput formControlName=\"language\" />\n @if ( $any(item)['controls'].language.errors?.required &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language required</mat-error>\n } @if ( $any(item)['controls'].language.errors?.maxLength &&\n ($any(item)['controls'].language.dirty ||\n $any(item)['controls'].language.touched) ) {\n <mat-error>language too long</mat-error>\n }\n </mat-form-field>\n }\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput formControlName=\"value\" />\n @if ( $any(item)['controls'].value.errors?.required &&\n ($any(item)['controls'].value.dirty ||\n $any(item)['controls'].value.touched) ) {\n <mat-error>value required</mat-error>\n } @if ( $any(item)['controls'].value.errors?.maxLength &&\n ($any(item)['controls'].value.dirty ||\n $any(item)['controls'].value.touched) ) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n <!-- note -->\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput formControlName=\"note\" />\n @if ( $any(item)['controls'].note.errors?.maxLength &&\n ($any(item)['controls'].note.dirty ||\n $any(item)['controls'].note.touched) ) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DecoratedCount } from '@myrmidon/cadmus-refs-decorated-counts';\r\n\r\n/**\r\n * The DecoratedCounts part model.\r\n */\r\nexport interface DecoratedCountsPart extends Part {\r\n counts: DecoratedCount[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DecoratedCountsPart type.\r\n */\r\nexport const DECORATED_COUNTS_PART_TYPEID = 'it.vedph.decorated-counts';\r\n\r\n/**\r\n * JSON schema for the DecoratedCounts part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DECORATED_COUNTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n DECORATED_COUNTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DecoratedCountsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'counts',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n counts: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['id', 'value'],\r\n properties: {\r\n id: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport {\r\n DecoratedCount,\r\n DecoratedCountsComponent,\r\n} from '@myrmidon/cadmus-refs-decorated-counts';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DECORATED_COUNTS_PART_TYPEID,\r\n DecoratedCountsPart,\r\n} from '../decorated-counts-part';\r\n\r\n/**\r\n * Decorated counts part editor component.\r\n * Thesauri: decorated-count-ids, decorated-count-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-decorated-counts-part',\r\n templateUrl: './decorated-counts-part.component.html',\r\n styleUrl: './decorated-counts-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n DecoratedCountsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DecoratedCountsPartComponent\r\n extends ModelEditorComponentBase<DecoratedCountsPart>\r\n implements OnInit\r\n{\r\n public counts: FormControl<DecoratedCount[]>;\r\n\r\n // decorated-count-ids\r\n public idEntries: ThesaurusEntry[] | undefined;\r\n\r\n // decorated-count-tags\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.counts = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n counts: this.counts,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'decorated-count-ids';\r\n if (this.hasThesaurus(key)) {\r\n this.idEntries = thesauri[key].entries;\r\n } else {\r\n this.idEntries = undefined;\r\n }\r\n key = 'decorated-count-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DecoratedCountsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.counts.setValue(part.counts || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<DecoratedCountsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DecoratedCountsPart {\r\n let part = this.getEditedPart(\r\n DECORATED_COUNTS_PART_TYPEID\r\n ) as DecoratedCountsPart;\r\n part.counts = this.counts.value || [];\r\n return part;\r\n }\r\n\r\n public onCountsChange(counts: DecoratedCount[]): void {\r\n this.counts.setValue(counts);\r\n this.counts.markAsDirty();\r\n this.counts.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Decorated Counts Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-decorated-counts\r\n [idEntries]=\"idEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n [counts]=\"counts.value\"\r\n (countsChange)=\"onCountsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { ProperName } from '@myrmidon/cadmus-refs-proper-name';\r\n\r\n/**\r\n * The DistrictLocation part model.\r\n */\r\nexport interface DistrictLocationPart extends Part {\r\n place: ProperName;\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DistrictLocationPart type.\r\n */\r\nexport const DISTRICT_LOCATION_PART_TYPEID = 'it.vedph.district-location';\r\n\r\n/**\r\n * JSON schema for the DistrictLocation part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DISTRICT_LOCATION_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/epigraphy/' +\r\n DISTRICT_LOCATION_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DistrictLocationPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'place',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n place: {\r\n type: 'object',\r\n required: ['language', 'tag', 'parts'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n pieces: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n ProperName,\r\n ProperNameComponent,\r\n} from '@myrmidon/cadmus-refs-proper-name';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DistrictLocationPart,\r\n DISTRICT_LOCATION_PART_TYPEID,\r\n} from '../district-location-part';\r\n\r\n/**\r\n * DistrictLocation part editor component.\r\n * Thesauri: district-name-piece-types (required), district-name-lang-entries.\r\n */\r\n@Component({\r\n selector: 'cadmus-district-location-part',\r\n templateUrl: './district-location-part.component.html',\r\n styleUrl: './district-location-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n ProperNameComponent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DistrictLocationPartComponent\r\n extends ModelEditorComponentBase<DistrictLocationPart>\r\n implements OnInit\r\n{\r\n public place: FormControl<ProperName | null>;\r\n public note: FormControl<string | null>;\r\n public initialName?: ProperName | null;\r\n\r\n // district-name-piece-types\r\n public typeEntries?: ThesaurusEntry[];\r\n // district-name-lang-entries\r\n public langEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.place = formBuilder.control(null, Validators.required);\r\n this.note = formBuilder.control(null, Validators.maxLength(5000));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n place: this.place,\r\n note: this.note,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'district-name-piece-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DistrictLocationPart | null): void {\r\n if (!part) {\r\n this.initialName = undefined;\r\n this.form.reset();\r\n return;\r\n }\r\n this.initialName = part.place;\r\n this.place.setValue(part.place || null);\r\n this.note.setValue(part.note || null);\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n public onNameChange(name: ProperName | undefined): void {\r\n this.place.setValue(name || null);\r\n this.place.updateValueAndValidity();\r\n this.place.markAsDirty();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<DistrictLocationPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DistrictLocationPart {\r\n let part = this.getEditedPart(\r\n DISTRICT_LOCATION_PART_TYPEID\r\n ) as DistrictLocationPart;\r\n\r\n part.place = this.place.value || { language: '', pieces: [] };\r\n part.note = this.note.value?.trim() || undefined;\r\n\r\n return part;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"District Location Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <!-- place -->\r\n <div>\r\n <fieldset>\r\n <legend i18n>place</legend>\r\n <cadmus-refs-proper-name\r\n [langEntries]=\"langEntries\"\r\n [typeEntries]=\"typeEntries\"\r\n [name]=\"initialName || undefined\"\r\n [hideAssertion]=\"true\"\r\n (nameChange)=\"onNameChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n\r\n <!-- note -->\r\n <div>\r\n <mat-form-field class=\"long-text\">\r\n <mat-label i18n>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error i18n>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\n\r\n/**\r\n * The document references part model.\r\n */\r\nexport interface DocReferencesPart extends Part {\r\n references: DocReference[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the DocReferencesPart type.\r\n */\r\nexport const DOC_REFERENCES_PART_TYPEID = 'it.vedph.doc-references';\r\n\r\n/**\r\n * JSON schema for the DocReferences part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const DOC_REFERENCES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n DOC_REFERENCES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'DocReferencesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'references',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n DocReferencesPart,\r\n DOC_REFERENCES_PART_TYPEID,\r\n} from '../doc-references-part';\r\n\r\n/**\r\n * Document references part editor.\r\n * Thesauri: doc-reference-tags, doc-reference-types (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-doc-references-part',\r\n templateUrl: './doc-references-part.component.html',\r\n styleUrls: ['./doc-references-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n DocReferencesComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class DocReferencesPartComponent\r\n extends ModelEditorComponentBase<DocReferencesPart>\r\n implements OnInit\r\n{\r\n public references: FormControl<DocReference[]>;\r\n\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.references = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n references: this.references,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: DocReferencesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.references.setValue(part.references || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<DocReferencesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): DocReferencesPart {\r\n let part = this.getEditedPart(\r\n DOC_REFERENCES_PART_TYPEID\r\n ) as DocReferencesPart;\r\n part.references = this.references.value;\r\n return part;\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Document References Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The external ids part model.\r\n */\r\nexport interface ExternalIdsPart extends Part {\r\n ids: AssertedId[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the ExternalIdsPart type.\r\n */\r\nexport const EXTERNAL_IDS_PART_TYPEID = 'it.vedph.external-ids';\r\n\r\n/**\r\n * JSON schema for the external IDs part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const EXTERNAL_IDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + EXTERNAL_IDS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'ExternalIdsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'ids',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n ids: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'string',\r\n },\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedId,\r\n AssertedIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesaurusEntry,\r\n ThesauriSet,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n ExternalIdsPart,\r\n EXTERNAL_IDS_PART_TYPEID,\r\n} from '../external-ids-part';\r\n\r\n/**\r\n * External IDs part editor component. This is just a collection of asserted\r\n * IDs.\r\n * Thesauri: external-id-types, external-id-tags, assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-external-ids-part',\r\n templateUrl: './external-ids-part.component.html',\r\n styleUrls: ['./external-ids-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n AssertedIdsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class ExternalIdsPartComponent\r\n extends ModelEditorComponentBase<ExternalIdsPart>\r\n implements OnInit\r\n{\r\n public ids: FormControl<AssertedId[]>;\r\n\r\n // external-id-scopes\r\n public idScopeEntries: ThesaurusEntry[] | undefined;\r\n // external-id-tags\r\n public idTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n // thesauri for assertions:\r\n // assertion-tags\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.ids = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n ids: this.ids,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n\r\n key = 'external-id-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n\r\n key = 'external-id-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: ExternalIdsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.ids.setValue(part.ids || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<ExternalIdsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): ExternalIdsPart {\r\n let part = this.getEditedPart(EXTERNAL_IDS_PART_TYPEID) as ExternalIdsPart;\r\n part.ids = this.ids.value;\r\n return part;\r\n }\r\n\r\n public onIdsChange(ids: AssertedId[]): void {\r\n this.ids.setValue(ids);\r\n this.ids.markAsDirty();\r\n this.ids.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"External IDs Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-ids\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [ids]=\"ids.value\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The flags part model.\r\n */\r\nexport interface FlagsPart extends Part {\r\n flags: string[];\r\n notes?: { [key: string]: string };\r\n}\r\n\r\n/**\r\n * The type ID used to identify the FlagsPart type.\r\n */\r\nexport const FLAGS_PART_TYPEID = 'it.vedph.flags';\r\n\r\n/**\r\n * JSON schema for the Flags part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const FLAGS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/__PRJ__/__LIB__/' + FLAGS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'FlagsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'flags',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n flags: {\r\n type: 'array',\r\n items: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n minItems: 1,\r\n },\r\n notes: {\r\n type: 'object',\r\n additionalProperties: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, computed, OnInit, signal } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { CommonModule, KeyValue } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { Flag, FlagSetComponent } from '@myrmidon/cadmus-ui-flag-set';\r\nimport { NoteSet, NoteSetComponent } from '@myrmidon/cadmus-ui-note-set';\r\nimport {\r\n EditedObject,\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\n\r\nimport { FLAGS_PART_TYPEID, FlagsPart } from '../flags-part';\r\n\r\nfunction entryToFlag(entry: ThesaurusEntry): Flag {\r\n return {\r\n id: entry.id,\r\n label: entry.value,\r\n };\r\n}\r\n\r\n/**\r\n * Flags part editor component.\r\n * Thesauri: flags.\r\n * Settings: note set definitions for this part type (and role). If not defined,\r\n * no notes will be available.\r\n * See https://github.com/vedph/cadmus-bricks-shell-v3/blob/master/projects/myrmidon/cadmus-ui-note-set/README.md.\r\n */\r\n@Component({\r\n selector: 'cadmus-flags-part',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatTooltipModule,\r\n // cadmus\r\n FlagSetComponent,\r\n NoteSetComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n templateUrl: './flags-part.component.html',\r\n styleUrl: './flags-part.component.css',\r\n})\r\nexport class FlagsPartComponent\r\n extends ModelEditorComponentBase<FlagsPart>\r\n implements OnInit\r\n{\r\n public flags: FormControl<string[]>;\r\n public notes: FormControl<NoteSet>;\r\n\r\n // note settings\r\n public readonly settings = signal<NoteSet | undefined>(undefined);\r\n\r\n // flags\r\n public readonly flagEntries = signal<ThesaurusEntry[]>([]);\r\n\r\n // flags mapped from thesaurus entries\r\n public featureFlags = computed<Flag[]>(\r\n () => this.flagEntries()?.map((e) => entryToFlag(e)) || []\r\n );\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.flags = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n this.notes = formBuilder.control<NoteSet>(\r\n { definitions: [], notes: {} },\r\n {\r\n nonNullable: true,\r\n }\r\n );\r\n }\r\n\r\n public override async ngOnInit(): Promise<void> {\r\n super.ngOnInit();\r\n\r\n // load settings for this part\r\n if (this._appRepository) {\r\n this.settings.set(await this._appRepository.getSettingFor(\r\n FLAGS_PART_TYPEID,\r\n this.identity()?.roleId || undefined\r\n ));\r\n console.log('Flags part settings:', this.settings);\r\n }\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n flags: this.flags,\r\n notes: this.notes,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'flags';\r\n if (this.hasThesaurus(key)) {\r\n this.flagEntries.set(thesauri[key].entries || []);\r\n } else {\r\n this.flagEntries.set([]);\r\n }\r\n }\r\n\r\n private getNoteSet(part: FlagsPart): NoteSet {\r\n // no notes if no settings defining them\r\n if (!this.settings()) {\r\n return { definitions: [], notes: {} };\r\n }\r\n\r\n // build a note set by merging definitions from settings with notes from part\r\n return { ...this.settings()!, notes: part.notes || {} };\r\n }\r\n\r\n private updateForm(part?: FlagsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n // flags\r\n this.flags.setValue(part.flags || []);\r\n // notes\r\n this.notes.setValue(this.getNoteSet(part));\r\n\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<FlagsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n public onFlagsCheckedIdsChange(ids: string[]): void {\r\n this.flags.setValue(ids);\r\n this.flags.markAsDirty();\r\n this.flags.updateValueAndValidity();\r\n }\r\n\r\n public onNoteChange(note: KeyValue<string, string | null>): void {\r\n console.log(`Note \"${note.key}\" changed to: ${note.value}`);\r\n }\r\n\r\n public onSetChange(set: NoteSet): void {\r\n console.log('Complete set updated:', set);\r\n this.notes.setValue(set);\r\n }\r\n\r\n protected getValue(): FlagsPart {\r\n let part = this.getEditedPart(FLAGS_PART_TYPEID) as FlagsPart;\r\n part.flags = this.flags.value || [];\r\n\r\n // remove keys with null/undefined values\r\n const notesObj = this.notes.value?.notes || {};\r\n const filteredNotes: { [key: string]: any } = {};\r\n for (const key of Object.keys(notesObj)) {\r\n if (notesObj[key] != null) {\r\n filteredNotes[key] = notesObj[key];\r\n }\r\n }\r\n part.notes =\r\n Object.keys(filteredNotes).length > 0 ? filteredNotes : undefined;\r\n\r\n return part;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>\r\n {{ (modelName() | titlecase) || \"Flags Part\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n @if (flagEntries().length) {\r\n <div>\r\n <cadmus-ui-flag-set\r\n [flags]=\"featureFlags()\"\r\n [checkedIds]=\"flags.value\"\r\n (checkedIdsChange)=\"onFlagsCheckedIdsChange($event)\"\r\n />\r\n </div>\r\n } @if (settings()) {\r\n <div>\r\n <fieldset>\r\n <legend>notes</legend>\r\n <cadmus-ui-note-set\r\n [(set)]=\"notes.value\"\r\n (noteChange)=\"onNoteChange($event)\"\r\n (setChange)=\"onSetChange($event)\"\r\n />\r\n </fieldset>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedChronotope } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\n/**\r\n * The historical events part model.\r\n */\r\nexport interface HistoricalEventsPart extends Part {\r\n events: HistoricalEvent[];\r\n}\r\n\r\n/**\r\n * Any entity related to an event in the EventsPart.\r\n */\r\nexport interface RelatedEntity {\r\n relation: string;\r\n id: AssertedCompositeId;\r\n}\r\n\r\n/**\r\n * An event in the EventsPart.\r\n */\r\nexport interface HistoricalEvent {\r\n eid: string;\r\n type: string;\r\n tag?: string;\r\n chronotopes?: AssertedChronotope[];\r\n assertion?: Assertion;\r\n description?: string;\r\n relatedEntities?: RelatedEntity[];\r\n note?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the EventsPart type.\r\n */\r\nexport const HISTORICAL_EVENTS_PART_TYPEID = 'it.vedph.historical-events';\r\n\r\n/**\r\n * JSON schema for the Events part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const HISTORICAL_EVENTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n HISTORICAL_EVENTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'EventsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'events',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n events: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['eid', 'type'],\r\n properties: {\r\n eid: {\r\n type: 'string',\r\n },\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n chronotopes: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n place: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n description: {\r\n type: 'string',\r\n },\r\n relatedEntities: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['relation', 'id'],\r\n properties: {\r\n relation: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'object',\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, effect, input, model, output } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n} from '@angular/forms';\n\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\nimport { MatOption } from '@angular/material/core';\nimport { MatInput } from '@angular/material/input';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nimport {\n AssertedCompositeId,\n AssertedCompositeIdComponent,\n} from '@myrmidon/cadmus-refs-asserted-ids';\n\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\n\nimport { RelatedEntity } from '../historical-events-part';\n\n/**\n * Related entity component to edit the entity related to a historical event.\n */\n@Component({\n selector: 'cadmus-related-entity',\n templateUrl: './related-entity.component.html',\n styleUrls: ['./related-entity.component.css'],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n MatError,\n MatInput,\n AssertedCompositeIdComponent,\n MatIconButton,\n MatIcon,\n MatTooltip,\n ],\n})\nexport class RelatedEntityComponent {\n public readonly entity = model<RelatedEntity>();\n\n // relation entries\n public readonly relationEntries = input<ThesaurusEntry[]>();\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus asserted-id-tags.\n */\n public readonly idTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus assertion-tags.\n */\n public readonly assTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus doc-reference-tags.\n */\n public readonly refTagEntries = input<ThesaurusEntry[]>();\n /**\n * Thesaurus doc-reference-types.\n */\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\n\n public readonly editorClose = output();\n\n // form\n public relation: FormControl<string | null>;\n public id: FormControl<AssertedCompositeId | null>;\n public form: FormGroup;\n\n constructor(formBuilder: FormBuilder) {\n this.relation = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(500),\n ]);\n this.id = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(500),\n ]);\n this.form = formBuilder.group({\n relation: this.relation,\n id: this.id,\n });\n\n effect(() => {\n this.updateForm(this.entity());\n });\n }\n\n private updateForm(entity: RelatedEntity | undefined): void {\n if (!entity) {\n this.form.reset();\n return;\n }\n this.relation.setValue(entity.relation);\n this.id.setValue(entity.id);\n this.form.markAsPristine();\n }\n\n private getEntity(): RelatedEntity {\n return {\n relation: this.relation.value?.trim()!,\n id: this.id.value!,\n };\n }\n\n public onIdChange(id: AssertedCompositeId): void {\n this.id.setValue(id);\n this.id.updateValueAndValidity();\n this.id.markAsDirty();\n }\n\n public cancel(): void {\n this.editorClose.emit();\n }\n\n public save(): void {\n if (this.form.invalid) {\n return;\n }\n this.entity.set(this.getEntity());\n }\n}\n","<form [formGroup]=\"form\" class=\"form-row\" (submit)=\"save()\">\r\n <!-- relation (bound) -->\r\n @if (relationEntries()?.length) {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <mat-select [formControl]=\"relation\">\r\n @for (e of relationEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- relation (free) -->\r\n @else {\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>relation</mat-label>\r\n <input matInput [formControl]=\"relation\" />\r\n @if ( $any(relation).errors?.required && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation required</mat-error>\r\n } @if ( $any(relation).errors?.maxLength && (relation.dirty ||\r\n relation.touched) ) {\r\n <mat-error>relation too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- id -->\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n [id]=\"id.value || undefined\"\r\n (idChange)=\"onIdChange($event!)\"\r\n />\r\n\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" matTooltip=\"Save entity\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n</form>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport {\r\n AssertedChronotope,\r\n AssertedChronotopeSetComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-chronotope';\r\nimport { Assertion, AssertionComponent } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport {\r\n renderLabelFromLastColon,\r\n ThesaurusTreeComponent,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { HistoricalEvent, RelatedEntity } from '../historical-events-part';\r\nimport { RelatedEntityComponent } from '../related-entity/related-entity.component';\r\n\r\nconst RELATION_SEP = ':';\r\n\r\n/**\r\n * Historical event editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-historical-event-editor',\r\n templateUrl: './historical-event-editor.component.html',\r\n styleUrls: ['./historical-event-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n AssertedChronotopeSetComponent,\r\n MatCheckbox,\r\n AssertionComponent,\r\n MatButton,\r\n MatIcon,\r\n MatIconButton,\r\n MatTooltip,\r\n RelatedEntityComponent,\r\n FlatLookupPipe,\r\n ThesaurusTreeComponent,\r\n ],\r\n})\r\nexport class HistoricalEventEditorComponent {\r\n private _editedEntityIndex: number;\r\n\r\n /**\r\n * The event being edited.\r\n */\r\n public readonly event = model<HistoricalEvent>();\r\n /**\r\n * Thesaurus event-types (hierarchical).\r\n */\r\n public readonly eventTypeEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus event-tags.\r\n */\r\n public readonly eventTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus event-relations (pseudo-hierarchical; the\r\n * separator used is : rather than .).\r\n */\r\n public readonly relationEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus chronotope-tags.\r\n */\r\n public readonly ctTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus asserted-id-scopes.\r\n */\r\n public readonly idScopeEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus asserted-id-tags.\r\n */\r\n public readonly idTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus assertion-tags.\r\n */\r\n public readonly assTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus doc-reference-tags.\r\n */\r\n public readonly refTagEntries = input<ThesaurusEntry[]>();\r\n /**\r\n * Thesaurus doc-reference-types.\r\n */\r\n public readonly refTypeEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * The number of event type portions to cut from the event type ID when\r\n * building the prefix used to filter the corresponding relations IDs.\r\n * By default this is 0, i.e. the whole type ID (plus a final :) is\r\n * used as prefix. For instance, the ID \"person.birth\" generates prefix\r\n * \"person:birth:\". The portions of an ID are defined by splitting it at\r\n * each dot: so, should this property be 1, we would split the ID into\r\n * \"person\" and \"birth\", remove the last 1 tail(s), thus getting \"person\",\r\n * join back the portions and append a final colon, generating \"person:\".\r\n */\r\n public readonly eventTypeTailCut = input<number>(0);\r\n\r\n /**\r\n * True to disable ID lookup via scoped pin lookup.\r\n */\r\n public readonly noLookup = input<boolean>();\r\n\r\n public readonly editorClose = output();\r\n\r\n // event\r\n public eid: FormControl<string | null>;\r\n public type: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public description: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n public relatedEntities: FormControl<RelatedEntity[]>;\r\n public chronotopes: FormControl<AssertedChronotope[]>;\r\n public hasAssertion: FormControl<boolean>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n // related entity\r\n // the prefix used to filter the relation entries\r\n public readonly typeEntryPrefix = signal<string | undefined>(undefined);\r\n\r\n // the current relation entries, filtered by the type prefix\r\n public readonly currentRelEntries = computed<ThesaurusEntry[]>(() => {\r\n if (!this.relationEntries()?.length) {\r\n return [];\r\n }\r\n const prefix = this.typeEntryPrefix();\r\n if (!prefix) {\r\n return this.relationEntries()!;\r\n }\r\n const filtered = this.relationEntries()!.filter((e) => e.id.startsWith(prefix));\r\n return filtered;\r\n });\r\n\r\n public editedEntity?: RelatedEntity;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this._editedEntityIndex = -1;\r\n // form\r\n this.eid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.type = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.description = formBuilder.control(null, Validators.maxLength(1000));\r\n this.note = formBuilder.control(null, Validators.maxLength(1000));\r\n this.relatedEntities = formBuilder.control([], { nonNullable: true });\r\n this.chronotopes = formBuilder.control([], { nonNullable: true });\r\n this.hasAssertion = formBuilder.control(false, { nonNullable: true });\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n eid: this.eid,\r\n type: this.type,\r\n tag: this.tag,\r\n description: this.description,\r\n note: this.note,\r\n relatedEntities: this.relatedEntities,\r\n chronotopes: this.chronotopes,\r\n hasAssertion: this.hasAssertion,\r\n assertion: this.assertion,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.event());\r\n });\r\n }\r\n\r\n public renderLabel(label: string): string {\r\n return renderLabelFromLastColon(label);\r\n }\r\n\r\n private getTypeEntryPrefix(id: string): string {\r\n let p = id;\r\n\r\n // remove tail if any: by convention, an entry ID ending with \".-\"\r\n // is always treated as a tailed ID where the ending \"-\" should be removed.\r\n // This is because that's the convention for representing parent entries\r\n // like \"person.job.-\" with children like \"person.job.bishop\".\r\n const tailSize = p.endsWith('.-')\r\n ? 1 + this.eventTypeTailCut()\r\n : this.eventTypeTailCut();\r\n\r\n if (tailSize > 0) {\r\n // split the event type ID (truly hierarchical, e.g. \"person.birth\")\r\n const tokens = p.split('.');\r\n if (tokens.length >= tailSize) {\r\n tokens.splice(tokens.length - tailSize);\r\n }\r\n p = tokens.join(RELATION_SEP);\r\n return p + RELATION_SEP;\r\n }\r\n return p.replace('.', RELATION_SEP) + RELATION_SEP;\r\n }\r\n\r\n private updateTypeEntryPrefix(id: string): void {\r\n const prefix = this.getTypeEntryPrefix(id);\r\n this.typeEntryPrefix.set(prefix);\r\n }\r\n\r\n public onTypeEntryChange(entry: ThesaurusEntry): void {\r\n setTimeout(() => {\r\n this.type.setValue(entry.id);\r\n this.updateTypeEntryPrefix(entry.id);\r\n }, 0);\r\n }\r\n\r\n private updateForm(model: HistoricalEvent | undefined): void {\r\n if (!model) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.eid.setValue(model.eid, { emitEvent: false });\r\n this.type.setValue(model.type, { emitEvent: false });\r\n this.tag.setValue(model.tag || null, { emitEvent: false });\r\n this.description.setValue(model.description || null, { emitEvent: false });\r\n this.note.setValue(model.note || null, { emitEvent: false });\r\n this.chronotopes.setValue(model.chronotopes || [], { emitEvent: false });\r\n this.hasAssertion.setValue(model.assertion ? true : false, { emitEvent: false });\r\n this.assertion.setValue(model.assertion || null, { emitEvent: false });\r\n this.relatedEntities.setValue(model.relatedEntities || [], { emitEvent: false });\r\n\r\n this.form.markAsPristine();\r\n\r\n setTimeout(() => {\r\n this.updateTypeEntryPrefix(model.type);\r\n }, 0);\r\n }\r\n\r\n private getModel(): HistoricalEvent {\r\n return {\r\n eid: this.eid.value?.trim() || '',\r\n type: this.type.value?.trim() || '',\r\n tag: this.tag.value?.trim() || '',\r\n description: this.description.value?.trim() || undefined,\r\n note: this.note.value?.trim() || undefined,\r\n chronotopes: this.chronotopes.value.length\r\n ? this.chronotopes.value\r\n : undefined,\r\n assertion: this.hasAssertion.value\r\n ? this.assertion.value || undefined\r\n : undefined,\r\n relatedEntities: this.relatedEntities.value.length\r\n ? this.relatedEntities.value\r\n : undefined,\r\n };\r\n }\r\n\r\n public onChronotopesChange(chronotope: AssertedChronotope[]): void {\r\n this.chronotopes.setValue(chronotope);\r\n this.chronotopes.updateValueAndValidity();\r\n this.chronotopes.markAsDirty();\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n this.assertion.updateValueAndValidity();\r\n this.assertion.markAsDirty();\r\n }\r\n\r\n public addEntity(): void {\r\n this.editEntity(\r\n {\r\n id: { target: { gid: '', label: '' } },\r\n relation: this.currentRelEntries()?.length\r\n ? this.currentRelEntries()[0].id\r\n : '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editEntity(entity: RelatedEntity, index: number): void {\r\n this._editedEntityIndex = index;\r\n this.editedEntity = entity;\r\n }\r\n\r\n public onEntityChange(entity: RelatedEntity): void {\r\n // nope if already present\r\n if (\r\n this.relatedEntities.value.find(\r\n (e) => e.id === entity.id && e.relation === entity.relation\r\n )\r\n ) {\r\n this.closeEntity();\r\n return;\r\n }\r\n // add or replace\r\n const entities = [...this.relatedEntities.value];\r\n if (this._editedEntityIndex === -1) {\r\n entities.push(entity);\r\n } else {\r\n entities.splice(this._editedEntityIndex, 1, entity);\r\n }\r\n this.relatedEntities.setValue(entities);\r\n this.relatedEntities.updateValueAndValidity();\r\n this.relatedEntities.markAsDirty();\r\n this.closeEntity();\r\n }\r\n\r\n public closeEntity(): void {\r\n this._editedEntityIndex = -1;\r\n this.editedEntity = undefined;\r\n }\r\n\r\n public deleteEntity(index: number): void {\r\n if (this._editedEntityIndex === index) {\r\n this.closeEntity();\r\n }\r\n if (index > -1) {\r\n const entities = [...this.relatedEntities.value];\r\n entities.splice(index, 1);\r\n this.relatedEntities.setValue(entities);\r\n this.relatedEntities.updateValueAndValidity();\r\n this.relatedEntities.markAsDirty();\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.event.set(this.getModel());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-tab-group>\r\n <mat-tab label=\"general\">\r\n @if (eventTypeEntries()?.length) {\r\n <!-- bound type -->\r\n <div id=\"container\">\r\n <div id=\"ids\" class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n <!-- type (bound) -->\r\n <div id=\"type\">\r\n <fieldset>\r\n <legend>type</legend>\r\n @if (type.value) {\r\n <div class=\"sel-type\">\r\n {{\r\n type.value | flatLookup : eventTypeEntries() : \"id\" : \"value\"\r\n }}\r\n </div>\r\n } @else {\r\n <mat-error>no type</mat-error>\r\n }\r\n <cadmus-thesaurus-tree\r\n [entries]=\"eventTypeEntries()\"\r\n rootLabel=\"types\"\r\n [renderLabel]=\"renderLabel\"\r\n (entryChange)=\"onTypeEntryChange($event)\"\r\n />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </fieldset>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- free type -->\r\n <div class=\"form-row\">\r\n <!-- eid -->\r\n <mat-form-field>\r\n <mat-label>EID</mat-label>\r\n <input matInput [formControl]=\"eid\" />\r\n @if ($any(eid).errors?.required && (eid.dirty || eid.touched)) {\r\n <mat-error>EID required</mat-error>\r\n } @if ($any(eid).errors?.maxLength && (eid.dirty || eid.touched)) {\r\n <mat-error>EID too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- type (free) -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"type\" />\r\n @if ($any(type).errors?.required && (type.dirty || type.touched)) {\r\n <mat-error>type required</mat-error>\r\n } @if ($any(type).errors?.maxLength && (type.dirty || type.touched)) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n <!-- tag (bound) -->\r\n @if (eventTagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of eventTagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n }\r\n <div>\r\n <!-- description -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>description</mat-label>\r\n <textarea matInput [formControl]=\"description\"></textarea>\r\n @if ( $any(description).errors?.maxLength && (description.dirty ||\r\n description.touched) ) {\r\n <mat-error>description too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <!-- note -->\r\n <mat-form-field class=\"long-text\">\r\n <mat-label>note</mat-label>\r\n <textarea matInput [formControl]=\"note\"></textarea>\r\n @if ($any(note).errors?.maxLength && (note.dirty || note.touched)) {\r\n <mat-error>note too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <!-- chronotopes -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>chronotopes</mat-expansion-panel-header>\r\n <fieldset>\r\n <legend>chronotopes</legend>\r\n <cadmus-asserted-chronotope-set\r\n [tagEntries]=\"ctTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [chronotopes]=\"chronotopes.value || undefined\"\r\n (chronotopesChange)=\"onChronotopesChange($event!)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n\r\n <!-- assertion -->\r\n <mat-checkbox [formControl]=\"hasAssertion\">assertion</mat-checkbox>\r\n <mat-expansion-panel\r\n [expanded]=\"hasAssertion.value\"\r\n [disabled]=\"!hasAssertion.value\"\r\n >\r\n <fieldset>\r\n <legend>assertion</legend>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [assertion]=\"assertion.value || undefined\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n\r\n <mat-tab label=\"related\">\r\n <!-- list -->\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addEntity()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> related\r\n </button>\r\n </div>\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>relation</th>\r\n <th>ID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (e of relatedEntities.value; track e.id; let i = $index) {\r\n <tr [class.selected]=\"editedEntity === e\">\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"editEntity(e, i)\"\r\n matTooltip=\"Edit this entity\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"deleteEntity(i)\"\r\n matTooltip=\"Delete this entity\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ e.relation | flatLookup : relationEntries() : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ e.id.target.label }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n\r\n <!-- entity editor -->\r\n <mat-expansion-panel [disabled]=\"!editedEntity\" [expanded]=\"editedEntity\">\r\n <mat-expansion-panel-header>entity</mat-expansion-panel-header>\r\n <fieldset>\r\n <cadmus-related-entity\r\n [relationEntries]=\"currentRelEntries()\"\r\n [idScopeEntries]=\"idScopeEntries()\"\r\n [idTagEntries]=\"idTagEntries()\"\r\n [assTagEntries]=\"assTagEntries()\"\r\n [refTagEntries]=\"refTagEntries()\"\r\n [refTypeEntries]=\"refTypeEntries()\"\r\n [entity]=\"editedEntity\"\r\n (entityChange)=\"onEntityChange($event!)\"\r\n (editorClose)=\"closeEntity()\"\r\n />\r\n </fieldset>\r\n </mat-expansion-panel>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- buttons -->\r\n <hr />\r\n <div class=\"button-row\">\r\n <button type=\"button\" mat-icon-button (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n matTooltip=\"Save event\"\r\n [disabled]=\"form.invalid || form.pristine\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n <span>event</span>\r\n </div>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { DocReference } from '@myrmidon/cadmus-refs-doc-references';\r\nimport { HistoricalDateModel } from '@myrmidon/cadmus-refs-historical-date';\r\n\r\n/**\r\n * The HistoricalDate part model.\r\n */\r\nexport interface HistoricalDatePart extends Part {\r\n date: HistoricalDateModel;\r\n references?: DocReference[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the HistoricalDatePart type.\r\n */\r\nexport const HISTORICAL_DATE_PART_TYPEID = 'it.vedph.historical-date';\r\n\r\n/**\r\n * JSON schema for the HistoricalDate part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const HISTORICAL_DATE_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n HISTORICAL_DATE_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'HistoricalDatePart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'date',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n date: {\r\n type: 'object',\r\n required: ['a'],\r\n properties: {\r\n a: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n b: {\r\n type: 'object',\r\n required: ['value'],\r\n properties: {\r\n value: {\r\n type: 'integer',\r\n },\r\n isCentury: {\r\n type: 'boolean',\r\n },\r\n isSpan: {\r\n type: 'boolean',\r\n },\r\n isApproximate: {\r\n type: 'boolean',\r\n },\r\n isDubious: {\r\n type: 'boolean',\r\n },\r\n day: {\r\n type: 'integer',\r\n },\r\n month: {\r\n type: 'integer',\r\n },\r\n hint: {\r\n type: ['string', 'null'],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n},\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n} from '@angular/material/expansion';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n HistoricalDate,\r\n HistoricalDateModel,\r\n HistoricalDateComponent,\r\n} from '@myrmidon/cadmus-refs-historical-date';\r\nimport {\r\n DocReference,\r\n DocReferencesComponent,\r\n} from '@myrmidon/cadmus-refs-doc-references';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n HistoricalDatePart,\r\n HISTORICAL_DATE_PART_TYPEID,\r\n} from '../historical-date-part';\r\n\r\n@Component({\r\n selector: 'cadmus-historical-date-part',\r\n templateUrl: './historical-date-part.component.html',\r\n styleUrls: ['./historical-date-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n HistoricalDateComponent,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n DocReferencesComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class HistoricalDatePartComponent\r\n extends ModelEditorComponentBase<HistoricalDatePart>\r\n implements OnInit\r\n{\r\n public references: FormControl<DocReference[]>;\r\n public date: FormControl<HistoricalDateModel>;\r\n\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.date = formBuilder.control(new HistoricalDate(), {\r\n nonNullable: true,\r\n });\r\n this.references = formBuilder.control([], { nonNullable: true });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n date: this.date,\r\n references: this.references,\r\n });\r\n }\r\n\r\n private updateForm(part?: HistoricalDatePart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.references.setValue(part.references || []);\r\n this.date.setValue(part.date);\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<HistoricalDatePart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): HistoricalDatePart {\r\n let part = this.getEditedPart(\r\n HISTORICAL_DATE_PART_TYPEID\r\n ) as HistoricalDatePart;\r\n part.date = this.date.value;\r\n part.references = this.references.value?.length\r\n ? this.references.value\r\n : undefined;\r\n return part;\r\n }\r\n\r\n public onDateChange(date: HistoricalDateModel): void {\r\n this.date.setValue(date);\r\n this.date.markAsDirty();\r\n this.date.updateValueAndValidity();\r\n }\r\n\r\n public onReferencesChange(references: DocReference[]): void {\r\n this.references.setValue(references);\r\n this.references.updateValueAndValidity();\r\n this.references.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Historical Date Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-historical-date\r\n [date]=\"date.value\"\r\n (dateChange)=\"onDateChange($event!)\"\r\n />\r\n <!-- references -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>references</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-refs-doc-references\r\n [references]=\"references.value\"\r\n [typeEntries]=\"typeEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (referencesChange)=\"onReferencesChange($event)\"\r\n />\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators, FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { AssertedChronotopesPipe } from '@myrmidon/cadmus-refs-asserted-chronotope';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { HistoricalEventEditorComponent } from '../historical-event-editor/historical-event-editor.component';\r\n\r\nimport {\r\n HistoricalEvent,\r\n HistoricalEventsPart,\r\n HISTORICAL_EVENTS_PART_TYPEID,\r\n} from '../historical-events-part';\r\n\r\n/**\r\n * Historical events part.\r\n * Thesauri: event-types, event-tags, event-relations, chronotope-tags,\r\n * asserted-id-scopes, asserted-id-tags, assertion-tags, doc-reference-tags,\r\n * doc-reference-types, pin-link-scopes, pin-link-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-historical-events-part',\r\n templateUrl: './historical-events-part.component.html',\r\n styleUrls: ['./historical-events-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n HistoricalEventEditorComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n AssertedChronotopesPipe,\r\n FlatLookupPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class HistoricalEventsPartComponent\r\n extends ModelEditorComponentBase<HistoricalEventsPart>\r\n implements OnInit\r\n{\r\n public editedEventIndex: number;\r\n public editedEvent: HistoricalEvent | undefined;\r\n\r\n /**\r\n * Thesaurus event-types.\r\n */\r\n public eventTypeEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus event-tags.\r\n */\r\n public eventTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus event-relations.\r\n */\r\n public relationEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus chronotope-tags.\r\n */\r\n public ctTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus assertion-tags.\r\n */\r\n public assTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus doc-reference-tags.\r\n */\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * Thesaurus doc-reference-types.\r\n */\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n public events: FormControl<HistoricalEvent[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedEventIndex = -1;\r\n // form\r\n this.events = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n events: this.events,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'event-types';\r\n if (this.hasThesaurus(key)) {\r\n this.eventTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.eventTypeEntries = undefined;\r\n }\r\n key = 'event-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.eventTagEntries = thesauri[key].entries;\r\n } else {\r\n this.eventTagEntries = undefined;\r\n }\r\n key = 'event-relations';\r\n if (this.hasThesaurus(key)) {\r\n this.relationEntries = thesauri[key].entries;\r\n } else {\r\n this.relationEntries = undefined;\r\n }\r\n key = 'chronotope-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.ctTagEntries = thesauri[key].entries;\r\n } else {\r\n this.ctTagEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n // pin-link\r\n key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: HistoricalEventsPart | null): void {\r\n this.closeEvent();\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.events.setValue(part.events || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<HistoricalEventsPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): HistoricalEventsPart {\r\n let part = this.getEditedPart(\r\n HISTORICAL_EVENTS_PART_TYPEID\r\n ) as HistoricalEventsPart;\r\n part.events = this.events.value || [];\r\n return part;\r\n }\r\n\r\n public closeEvent(): void {\r\n this.editedEventIndex = -1;\r\n this.editedEvent = undefined;\r\n }\r\n\r\n public addEvent(): void {\r\n this.editEvent(\r\n {\r\n eid: '',\r\n type: this.eventTypeEntries?.length ? this.eventTypeEntries[0].id : '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editEvent(event: HistoricalEvent, index: number): void {\r\n this.editedEventIndex = index;\r\n this.editedEvent = event;\r\n }\r\n\r\n public onEventSave(event: HistoricalEvent): void {\r\n const events = [...this.events.value];\r\n if (this.editedEventIndex === -1) {\r\n events.push(event);\r\n } else {\r\n events[this.editedEventIndex] = event;\r\n }\r\n this.events.setValue(events);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n this.closeEvent();\r\n }\r\n\r\n public deleteEvent(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete event?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this.editedEventIndex === index) {\r\n this.closeEvent();\r\n }\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveEventUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.events.value[index];\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n\r\n public moveEventDown(index: number): void {\r\n if (index + 1 >= this.events.value.length) {\r\n return;\r\n }\r\n const entry = this.events.value[index];\r\n const entries = [...this.events.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.events.setValue(entries);\r\n this.events.updateValueAndValidity();\r\n this.events.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Events Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <!-- events list -->\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addEvent()\"\n >\n <mat-icon>add_circle</mat-icon> event\n </button>\n </div>\n @if (events.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>type</th>\n <th>tag</th>\n <th>ID</th>\n <th>place/date</th>\n <th>rel.</th>\n </tr>\n </thead>\n <tbody>\n @for ( entry of events.value; track entry; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"editedEvent === entry\">\n <td class=\"fit-width\">\n <span class=\"nr\">{{ i + 1 }}.</span>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this event\"\n (click)=\"editEvent(entry, i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this event up\"\n [disabled]=\"first\"\n (click)=\"moveEventUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this event down\"\n [disabled]=\"last\"\n (click)=\"moveEventDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this event\"\n (click)=\"deleteEvent(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>\n {{ entry.type | flatLookup : eventTypeEntries : \"id\" : \"value\" }}\n </td>\n <td>{{ entry.tag }}</td>\n <td>{{ entry.eid }}</td>\n <td>{{ entry.chronotopes | assertedChronotopes }}</td>\n <td>{{ entry.relatedEntities?.length || 0 }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- event editor -->\n <mat-expansion-panel [expanded]=\"editedEvent\" [disabled]=\"!editedEvent\">\n @if (editedEvent) {\n <mat-expansion-panel-header>\n <span class=\"edited-title\">event</span>\n <span class=\"nr\">{{ editedEventIndex + 1 }}</span>\n </mat-expansion-panel-header>\n }\n <fieldset>\n <cadmus-historical-event-editor\n [eventTagEntries]=\"eventTagEntries\"\n [eventTypeEntries]=\"eventTypeEntries\"\n [relationEntries]=\"relationEntries\"\n [ctTagEntries]=\"ctTagEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [idScopeEntries]=\"idScopeEntries\"\n [idTagEntries]=\"idTagEntries\"\n [event]=\"editedEvent\"\n (eventChange)=\"onEventSave($event!)\"\n (editorClose)=\"closeEvent()\"\n />\n </fieldset>\n </mat-expansion-panel>\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Component, model, effect, output, input } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { IndexKeyword } from '../index-keywords-part';\r\n\r\n@Component({\r\n selector: 'cadmus-index-keyword',\r\n templateUrl: './index-keyword.component.html',\r\n styleUrls: ['./index-keyword.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatInput,\r\n MatError,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n ],\r\n})\r\nexport class IndexKeywordComponent {\r\n public readonly keyword = model<IndexKeyword>();\r\n\r\n public readonly idxEntries = input<ThesaurusEntry[]>();\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n public readonly langEntries = input<ThesaurusEntry[]>();\r\n\r\n public readonly editorClose = output();\r\n\r\n public indexId: FormControl<string | null>;\r\n public language: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public note: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.indexId = formBuilder.control(null, [\r\n Validators.maxLength(50),\r\n Validators.pattern(/^[-.a-zA-Z0-9_]{0,50}$/),\r\n ]);\r\n this.language = formBuilder.control(null, [\r\n Validators.pattern(/^[a-z]{3}$/),\r\n ]);\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.note = formBuilder.control(null, Validators.maxLength(200));\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.form = formBuilder.group({\r\n indexId: this.indexId,\r\n language: this.language,\r\n value: this.value,\r\n note: this.note,\r\n tag: this.tag,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.keyword());\r\n });\r\n }\r\n\r\n private updateForm(keyword?: IndexKeyword): void {\r\n if (!keyword) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.indexId.setValue(keyword.indexId || null);\r\n this.language.setValue(keyword.language);\r\n this.value.setValue(keyword.value);\r\n this.note.setValue(keyword.note || null);\r\n this.tag.setValue(keyword.tag || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getKeyword(): IndexKeyword {\r\n return {\r\n indexId: this.indexId.value?.trim(),\r\n language: this.language.value?.trim() || '',\r\n value: this.value.value?.trim() || '',\r\n note: this.note.value?.trim(),\r\n tag: this.tag.value?.trim(),\r\n };\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public submit(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.keyword.set(this.getKeyword());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div class=\"form-row\">\n <!-- index ID -->\n @if (idxEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <mat-select [formControl]=\"indexId\">\n <mat-option [value]=\"''\">(default)</mat-option>\n @for (e of idxEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>index ID</mat-label>\n <input matInput type=\"text\" [formControl]=\"indexId\" />\n @if ( indexId.hasError('maxLength') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>index ID too long</mat-error>\n } @if ( indexId.hasError('pattern') && (indexId.dirty ||\n indexId.touched) ) {\n <mat-error>invalid index ID</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- language -->\n @if (langEntries()?.length) {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"language\">\n <mat-option [value]=\"null\">(n/a)</mat-option>\n @for (e of langEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-form-field>\n <mat-label>language</mat-label>\n <input matInput type=\"text\" [formControl]=\"language\" />\n @if ( language.hasError('pattern') && (language.dirty ||\n language.touched) ) {\n <mat-error>invalid language</mat-error>\n }\n </mat-form-field>\n </div>\n }\n\n <!-- value -->\n <div>\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" [formControl]=\"value\" autofocus />\n @if (value.hasError('maxLength') && (value.dirty || value.touched)) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- tag -->\n <div>\n <!-- tag (bound) -->\n @if (tagEntries()?.length) {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries(); track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n <!-- tag (free) -->\n @else {\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n }\n </div>\n\n <!-- note -->\n <div>\n <mat-form-field>\n <mat-label>note</mat-label>\n <input matInput type=\"text\" [formControl]=\"note\" />\n @if (note.hasError('maxLength') && (note.dirty || note.touched)) {\n <mat-error>note too long</mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close keyword\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid || form.pristine\"\n mat-icon-button\n matTooltip=\"Save keyword\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Index keyword.\r\n */\r\nexport interface IndexKeyword {\r\n indexId?: string;\r\n language: string;\r\n value: string;\r\n note?: string;\r\n tag?: string;\r\n}\r\n\r\n/**\r\n * Index keywords part.\r\n */\r\nexport interface IndexKeywordsPart extends Part {\r\n keywords: IndexKeyword[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the IndexKeywordsPart type.\r\n */\r\nexport const INDEX_KEYWORDS_PART_TYPEID = 'it.vedph.index-keywords';\r\n\r\n/**\r\n * JSON schema for the index keywords part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const INDEX_KEYWORDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n INDEX_KEYWORDS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'IndexKeywordsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'keywords'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['indexId', 'language', 'value'],\r\n properties: {\r\n indexId: {\r\n type: 'string',\r\n },\r\n language: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n} from '@angular/material/expansion';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport { FlatLookupPipe, NgxToolsValidators } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n IndexKeywordsPart,\r\n IndexKeyword,\r\n INDEX_KEYWORDS_PART_TYPEID,\r\n} from '../index-keywords-part';\r\nimport { IndexKeywordComponent } from '../index-keyword/index-keyword.component';\r\n\r\n/**\r\n * Index keywords part editor.\r\n * Thesauri: languages, keyword-indexes, keyword-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-index-keywords-part',\r\n templateUrl: './index-keywords-part.component.html',\r\n styleUrls: ['./index-keywords-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n MatExpansionPanelTitle,\r\n TitleCasePipe,\r\n FlatLookupPipe,\r\n IndexKeywordComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class IndexKeywordsPartComponent\r\n extends ModelEditorComponentBase<IndexKeywordsPart>\r\n implements OnInit\r\n{\r\n public editedKeyword?: IndexKeyword;\r\n // thesaurus\r\n public idxEntries: ThesaurusEntry[] | undefined;\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public keywords: FormControl<IndexKeyword[]>;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.keywords = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n key = 'keyword-indexes';\r\n if (this.hasThesaurus(key)) {\r\n this.idxEntries = thesauri[key].entries;\r\n } else {\r\n this.idxEntries = undefined;\r\n }\r\n key = 'keyword-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private compareKeywords(a: IndexKeyword, b: IndexKeyword): number {\r\n if (!a) {\r\n if (!b) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n if (!b) {\r\n return 1;\r\n }\r\n // indexId\r\n if (!a.indexId && b.indexId) {\r\n return -1;\r\n }\r\n if (a.indexId && !b.indexId) {\r\n return 1;\r\n }\r\n let n: number;\r\n if (a.indexId && b.indexId) {\r\n n = a.indexId.localeCompare(b.indexId);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n }\r\n n = a.language.localeCompare(b.language);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n return a.value.localeCompare(b.value);\r\n }\r\n\r\n private updateForm(part?: IndexKeywordsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n const keywords: IndexKeyword[] = Object.assign([], part.keywords);\r\n keywords.sort(this.compareKeywords);\r\n this.keywords.setValue(keywords);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<IndexKeywordsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): IndexKeywordsPart {\r\n let part = this.getEditedPart(\r\n INDEX_KEYWORDS_PART_TYPEID\r\n ) as IndexKeywordsPart;\r\n part.keywords = [...this.keywords.value];\r\n return part;\r\n }\r\n\r\n private addKeyword(keyword: IndexKeyword): boolean {\r\n let i = 0;\r\n while (i < this.keywords.value.length) {\r\n const n = this.compareKeywords(keyword, this.keywords.value[i]);\r\n if (n === 0) {\r\n return false;\r\n }\r\n if (n <= 0) {\r\n const keywords: IndexKeyword[] = Object.assign([], this.keywords.value);\r\n keywords.splice(i, 0, keyword);\r\n this.keywords.setValue(keywords);\r\n break;\r\n }\r\n i++;\r\n }\r\n if (i === this.keywords.value.length) {\r\n const keywords: IndexKeyword[] = Object.assign([], this.keywords.value);\r\n keywords.push(keyword);\r\n this.keywords.setValue(keywords);\r\n }\r\n\r\n this.keywords.markAsDirty();\r\n this.keywords.updateValueAndValidity();\r\n\r\n return true;\r\n }\r\n\r\n public addNewKeyword(): void {\r\n const keyword: IndexKeyword = {\r\n indexId: this.idxEntries?.length ? this.idxEntries[0].id : undefined,\r\n language: this.langEntries?.length ? this.langEntries[0].id : 'eng',\r\n value: '',\r\n };\r\n this.editKeyword(keyword);\r\n }\r\n\r\n public deleteKeyword(keyword: IndexKeyword): void {\r\n const keywords: IndexKeyword[] = [...this.keywords.value];\r\n keywords.splice(keywords.indexOf(keyword), 1);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n\r\n public editKeyword(keyword: IndexKeyword): void {\r\n this.editedKeyword = keyword;\r\n }\r\n\r\n public onKeywordClose(): void {\r\n this.editedKeyword = undefined;\r\n }\r\n\r\n public onKeywordChange(keyword: IndexKeyword): void {\r\n this.addKeyword(keyword);\r\n this.editedKeyword = undefined;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title\r\n [matBadge]=\"keywords.value.length\"\r\n matBadgeOverlap=\"false\"\r\n >{{\r\n (modelName() | titlecase) || \"Index Keywords Part\"\r\n }}</mat-card-title\r\n >\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addNewKeyword()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> keyword\r\n </button>\r\n </div>\r\n\r\n @if (keywords.value.length) {\r\n <div id=\"list\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>index</th>\r\n <th>lang.</th>\r\n <th>keyword</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (k of keywords.value; track k) {\r\n <tr [class.selected]=\"editedKeyword === k\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit this keyword\"\r\n (click)=\"editKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete this keyword\"\r\n (click)=\"deleteKeyword(k)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ k.indexId }}</td>\r\n <td>\r\n {{ k.language | flatLookup : langEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ k.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @if (editedKeyword) {\r\n <fieldset>\r\n <mat-expansion-panel\r\n [disabled]=\"!editedKeyword\"\r\n [expanded]=\"editedKeyword\"\r\n >\r\n <mat-expansion-panel-header>\r\n <mat-panel-title> keyword </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-index-keyword\r\n [keyword]=\"editedKeyword\"\r\n [idxEntries]=\"idxEntries\"\r\n [langEntries]=\"langEntries\"\r\n [tagEntries]=\"tagEntries\"\r\n (editorClose)=\"onKeywordClose()\"\r\n (keywordChange)=\"onKeywordChange($event!)\"\r\n />\r\n </mat-expansion-panel>\r\n </fieldset>\r\n }\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\nexport interface Keyword {\r\n language: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * The Keywords part model.\r\n */\r\nexport interface KeywordsPart extends Part {\r\n keywords: Keyword[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the KeywordsPart type.\r\n */\r\nexport const KEYWORDS_PART_TYPEID = 'it.vedph.keywords';\r\n\r\n/**\r\n * JSON schema for the Keywords part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const KEYWORDS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + KEYWORDS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'KeywordsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'keywords'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n keywords: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['language', 'value'],\r\n properties: {\r\n language: {\r\n type: 'string'\r\n },\r\n value: {\r\n type: 'string'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n Validators,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n UntypedFormGroup,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { KeywordsPart, Keyword, KEYWORDS_PART_TYPEID } from '../keywords-part';\r\n\r\n/**\r\n * Keywords editor component.\r\n * Thesauri: languages.\r\n */\r\n@Component({\r\n selector: 'cadmus-keywords-part',\r\n templateUrl: './keywords-part.component.html',\r\n styleUrls: ['./keywords-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatBadge,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatError,\r\n MatInput,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class KeywordsPartComponent\r\n extends ModelEditorComponentBase<KeywordsPart>\r\n implements OnInit\r\n{\r\n public keywords: FormControl<Keyword[]>;\r\n // new keyword form\r\n public newLanguage: FormControl<string | null>;\r\n public newValue: FormControl<string | null>;\r\n public newForm: FormGroup;\r\n // thesaurus\r\n public langEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.keywords = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n // new keyword form\r\n this.newLanguage = formBuilder.control('eng', Validators.required);\r\n this.newValue = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n ]);\r\n this.newForm = formBuilder.group({\r\n newLanguage: this.newLanguage,\r\n newValue: this.newValue,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n keywords: this.keywords,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n }\r\n\r\n private compareKeywords(a: Keyword, b: Keyword): number {\r\n if (!a) {\r\n if (!b) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n if (!b) {\r\n return 1;\r\n }\r\n const n = a.language.localeCompare(b.language);\r\n if (n !== 0) {\r\n return n;\r\n }\r\n return a.value.localeCompare(b.value);\r\n }\r\n\r\n private updateForm(part?: KeywordsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n\r\n const keywords = [...part.keywords];\r\n keywords.sort(this.compareKeywords);\r\n this.keywords.setValue(keywords);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<KeywordsPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): KeywordsPart {\r\n let part = this.getEditedPart(KEYWORDS_PART_TYPEID) as KeywordsPart;\r\n part.keywords = [...this.keywords.value];\r\n return part;\r\n }\r\n\r\n public addKeyword(): void {\r\n if (this.newForm.invalid) {\r\n return;\r\n }\r\n const keyword: Keyword = {\r\n language: this.newLanguage.value!,\r\n value: this.newValue.value!,\r\n };\r\n let i = 0;\r\n while (i < this.keywords.value?.length || 0) {\r\n const n = this.compareKeywords(keyword, this.keywords.value[i]);\r\n if (n === 0) {\r\n return;\r\n }\r\n if (n <= 0) {\r\n const keywords = [...this.keywords.value];\r\n keywords.splice(i, 0, keyword);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n break;\r\n }\r\n i++;\r\n }\r\n if (i === this.keywords.value.length) {\r\n const keywords = [...this.keywords.value];\r\n keywords.push(keyword);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n }\r\n\r\n public deleteKeyword(keyword: Keyword): void {\r\n const keywords = [...this.keywords.value];\r\n keywords.splice(this.keywords.value.indexOf(keyword), 1);\r\n this.keywords.setValue(keywords);\r\n this.keywords.updateValueAndValidity();\r\n this.keywords.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title\n [matBadge]=\"keywords.value.length\"\n matBadgeOverlap=\"false\"\n >{{ (modelName() | titlecase) || \"Keywords Part\" }}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- language -->\n <form [formGroup]=\"newForm\" (ngSubmit)=\"addKeyword()\" class=\"form-row\">\n <mat-form-field>\n <mat-label>language</mat-label>\n <mat-select [formControl]=\"newLanguage\">\n @for (t of langEntries; track t.id) {\n <mat-option [value]=\"t.id\">\n {{ t.value }}\n </mat-option>\n }\n </mat-select>\n <mat-error>select a language</mat-error>\n </mat-form-field>\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input\n matInput\n autofocus\n type=\"text\"\n id=\"value\"\n [formControl]=\"newValue\"\n />\n @if ( newValue.hasError('required') && (newValue.touched ||\n newValue.dirty) ) {\n <mat-error>enter a value</mat-error>\n } @if ( newValue.hasError('maxLength') && (newValue.touched ||\n newValue.dirty) ) {\n <mat-error>value too long</mat-error>\n }\n </mat-form-field>\n <button\n mat-flat-button\n type=\"submit\"\n class=\"mat-primary\"\n [disabled]=\"newForm.invalid\"\n >\n <mat-icon>add_circle</mat-icon> keyword\n </button>\n </form>\n <hr />\n @if (keywords.valid) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>lang.</th>\n <th>keyword</th>\n </tr>\n </thead>\n <tbody>\n @for (k of keywords.value; track k) {\n <tr>\n <td>\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Delete this keyword\"\n (click)=\"deleteKeyword(k)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ k.language }}</td>\n <td>{{ k.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The metadata part model.\r\n */\r\nexport interface MetadataPart extends Part {\r\n metadata: Metadatum[];\r\n}\r\n\r\n/**\r\n * A metadata entry in MetadataPart.\r\n */\r\nexport interface Metadatum {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the MetadataPart type.\r\n */\r\nexport const METADATA_PART_TYPEID = 'it.vedph.metadata';\r\n\r\n/**\r\n * JSON schema for the metadata part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const METADATA_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + METADATA_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'MetadataPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'metadata',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n metadata: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['name', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n Validators,\r\n FormArray,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatError,\r\n MatHint,\r\n} from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n MetadataPart,\r\n METADATA_PART_TYPEID,\r\n Metadatum,\r\n} from '../metadata-part';\r\n\r\n/**\r\n * Metadata part editor component.\r\n * Thesauri: metadata-types (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-metadata-part',\r\n templateUrl: './metadata-part.component.html',\r\n styleUrls: ['./metadata-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatFormField,\r\n MatLabel,\r\n MatSelect,\r\n MatOption,\r\n MatError,\r\n MatInput,\r\n MatHint,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class MetadataPartComponent\r\n extends ModelEditorComponentBase<MetadataPart>\r\n implements OnInit, OnDestroy\r\n{\r\n private _subs: Subscription[];\r\n public metadata: FormArray;\r\n\r\n /**\r\n * metadata-types thesaurus entries.\r\n */\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * metadata-names thesaurus entries.\r\n */\r\n public nameEntries: ThesaurusEntry[] | undefined;\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n this._subs = [];\r\n // form\r\n this.metadata = formBuilder.array(\r\n [],\r\n NgxToolsValidators.strictMinLengthValidator(1)\r\n );\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n metadata: this.metadata,\r\n });\r\n }\r\n\r\n private unsubscribe(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n this._subs.length = 0;\r\n }\r\n\r\n public override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.unsubscribe();\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'metadata-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n key = 'metadata-names';\r\n if (this.hasThesaurus(key)) {\r\n this.nameEntries = thesauri[key].entries;\r\n } else {\r\n this.nameEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: MetadataPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.metadata.clear();\r\n this.unsubscribe();\r\n if (part.metadata?.length) {\r\n for (let m of part.metadata) {\r\n const g = this.getMetadatumGroup(m);\r\n this._subs.push(\r\n g.valueChanges.subscribe((_) => {\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n })\r\n );\r\n this.metadata.controls.push(g);\r\n }\r\n }\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<MetadataPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): MetadataPart {\r\n let part = this.getEditedPart(METADATA_PART_TYPEID) as MetadataPart;\r\n part.metadata = this.getMetadata();\r\n return part;\r\n }\r\n\r\n private getMetadatumGroup(item?: Metadatum): FormGroup {\r\n return this.formBuilder.group({\r\n type: this.formBuilder.control(item?.type, Validators.maxLength(100)),\r\n name: this.formBuilder.control(item?.name, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]),\r\n value: this.formBuilder.control(item?.value, [\r\n Validators.required,\r\n Validators.maxLength(1000),\r\n ]),\r\n });\r\n }\r\n\r\n public addMetadatum(item?: Metadatum): void {\r\n const g = this.getMetadatumGroup(item);\r\n this._subs.push(\r\n g.valueChanges.subscribe((_) => {\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n })\r\n );\r\n this.metadata.push(g);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public removeMetadatum(index: number): void {\r\n this._subs[index].unsubscribe();\r\n this._subs.splice(index, 1);\r\n this.metadata.removeAt(index);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public moveMetadatumUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const s = this._subs[index];\r\n this._subs.splice(index, 1);\r\n this._subs.splice(index - 1, 0, s);\r\n\r\n const item = this.metadata.controls[index];\r\n this.metadata.removeAt(index);\r\n this.metadata.insert(index - 1, item);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n public moveMetadatumDown(index: number): void {\r\n if (index + 1 >= this.metadata.length) {\r\n return;\r\n }\r\n const s = this._subs[index];\r\n this._subs.splice(index, 1);\r\n this._subs.splice(index + 1, 0, s);\r\n\r\n const item = this.metadata.controls[index];\r\n this.metadata.removeAt(index);\r\n this.metadata.insert(index + 1, item);\r\n this.metadata.updateValueAndValidity();\r\n this.metadata.markAsDirty();\r\n }\r\n\r\n private getMetadata(): Metadatum[] {\r\n const entries: Metadatum[] = [];\r\n for (let i = 0; i < this.metadata.length; i++) {\r\n const g = this.metadata.at(i) as FormGroup;\r\n entries.push({\r\n type: g.controls['type'].value?.trim(),\r\n name: g.controls['name'].value?.trim(),\r\n value: g.controls['value'].value?.trim(),\r\n });\r\n }\r\n return entries;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Metadata Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div formArrayName=\"metadata\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addMetadatum()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> metadatum\r\n </button>\r\n </div>\r\n @for ( g of metadata.controls; track g; let i = $index; let first =\r\n $first; let last = $last) {\r\n <div>\r\n <!-- child form -->\r\n <div [formGroupName]=\"i\" class=\"form-row\">\r\n <!-- child actions -->\r\n <span style=\"flex: 0 0 auto\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Remove this metadatum\"\r\n (click)=\"removeMetadatum(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"first\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move metadatum up\"\r\n (click)=\"moveMetadatumUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"last\"\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Move metadatum down\"\r\n (click)=\"moveMetadatumDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </span>\r\n <!-- child controls -->\r\n <!-- type (bound) -->\r\n @if (typeEntries?.length) {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <mat-select formControlName=\"type\">\r\n @for (e of typeEntries; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- type (free) -->\r\n @else {\r\n <mat-form-field class=\"type-col\">\r\n <mat-label>type</mat-label>\r\n <input matInput formControlName=\"type\" />\r\n @if ( $any(g)['controls'].type.errors?.required &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type required</mat-error>\r\n } @if ( $any(g)['controls'].type.errors?.maxLength &&\r\n ($any(g)['controls'].type.dirty ||\r\n $any(g)['controls'].type.touched) ) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (nameEntries?.length) {\r\n <!-- name (bound) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <mat-select formControlName=\"name\">\r\n @for (e of nameEntries; track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <!-- name (free) -->\r\n <mat-form-field>\r\n <mat-label>name</mat-label>\r\n <input matInput formControlName=\"name\" />\r\n <mat-hint>eid = entity ID</mat-hint>\r\n @if ( $any(g)['controls'].name.errors?.required &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name required</mat-error>\r\n } @if ( $any(g)['controls'].name.errors?.maxLength &&\r\n ($any(g)['controls'].name.dirty ||\r\n $any(g)['controls'].name.touched) ) {\r\n <mat-error>name too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput formControlName=\"value\" />\r\n @if ( $any(g)['controls'].value.errors?.required &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value required</mat-error>\r\n } @if ( $any(g)['controls'].value.errors?.maxLength &&\r\n ($any(g)['controls'].value.dirty ||\r\n $any(g)['controls'].value.touched) ) {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedProperName } from '@myrmidon/cadmus-refs-proper-name';\r\n\r\n/**\r\n * The names part model.\r\n */\r\nexport interface NamesPart extends Part {\r\n names: AssertedProperName[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the NamesPart type.\r\n */\r\nexport const NAMES_PART_TYPEID = 'it.vedph.names';\r\n\r\n/**\r\n * JSON schema for the names part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const NAMES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + NAMES_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'NamesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'names',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n names: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['language', 'pieces'],\r\n properties: {\r\n language: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n pieces: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type', 'value'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedProperName,\r\n ProperNameComponent,\r\n CadmusProperNamePipe,\r\n} from '@myrmidon/cadmus-refs-proper-name';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { NamesPart, NAMES_PART_TYPEID } from '../names-part';\r\n\r\n/**\r\n * Names part editor component.\r\n * Thesauri: name-languages, name-tags, name-piece-types, assertion-tags,\r\n * doc-reference-types, doc-reference-tags (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-names-part',\r\n templateUrl: './names-part.component.html',\r\n styleUrls: ['./names-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n MatExpansionModule,\r\n ProperNameComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CadmusProperNamePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class NamesPartComponent\r\n extends ModelEditorComponentBase<NamesPart>\r\n implements OnInit\r\n{\r\n private _updatingForm?: boolean;\r\n\r\n public editedIndex: number;\r\n public editedName: AssertedProperName | undefined;\r\n\r\n /**\r\n * The optional thesaurus proper name languages entries (name-languages).\r\n */\r\n public langEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * The optional thesaurus name's tag entries (name-tags).\r\n */\r\n public tagEntries: ThesaurusEntry[] | undefined;\r\n /**\r\n * The optional thesaurus name piece's type entries (name-piece-types).\r\n */\r\n public typeEntries: ThesaurusEntry[] | undefined;\r\n // thesauri for assertions:\r\n // assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // doc-reference-types\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n // doc-reference-tags\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n public names: FormControl<AssertedProperName[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.names = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n names: this.names,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'name-languages';\r\n if (this.hasThesaurus(key)) {\r\n this.langEntries = thesauri[key].entries;\r\n } else {\r\n this.langEntries = undefined;\r\n }\r\n key = 'name-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n key = 'name-piece-types';\r\n if (this.hasThesaurus(key)) {\r\n this.typeEntries = thesauri[key].entries;\r\n } else {\r\n this.typeEntries = undefined;\r\n }\r\n key = 'assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'doc-reference-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'doc-reference-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: NamesPart | null): void {\r\n this._updatingForm = true;\r\n if (!part) {\r\n this.form.reset();\r\n } else {\r\n this.names.setValue(part.names || []);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<NamesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): NamesPart {\r\n let part = this.getEditedPart(NAMES_PART_TYPEID) as NamesPart;\r\n part.names = this.names.value || [];\r\n return part;\r\n }\r\n\r\n public addName(): void {\r\n const name: AssertedProperName = {\r\n language: this.langEntries?.length ? this.langEntries[0].id : '',\r\n pieces: [],\r\n };\r\n this.names.setValue([...(this.names.value || []), name]);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n this.editName(this.names.value.length - 1);\r\n }\r\n\r\n public editName(index: number): void {\r\n if (index < 0) {\r\n this.editedIndex = -1;\r\n this.editedName = undefined;\r\n } else {\r\n this.editedIndex = index;\r\n this.editedName = this.names.value[index];\r\n }\r\n }\r\n\r\n public onNameChange(name: AssertedProperName | undefined): void {\r\n if (this._updatingForm) {\r\n return;\r\n }\r\n if (name) {\r\n // else update replacing the old with the new name\r\n this.names.setValue(\r\n this.names.value.map((n: AssertedProperName, i: number) =>\r\n i === this.editedIndex ? name : n\r\n )\r\n );\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n }\r\n\r\n public onNameClose(): void {\r\n this.editName(-1);\r\n }\r\n\r\n public deleteName(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete name?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n });\r\n }\r\n\r\n public moveNameUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const name = this.names.value[index];\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n names.splice(index - 1, 0, name);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n\r\n public moveNameDown(index: number): void {\r\n if (index + 1 >= this.names.value.length) {\r\n return;\r\n }\r\n const name = this.names.value[index];\r\n const names = [...this.names.value];\r\n names.splice(index, 1);\r\n names.splice(index + 1, 0, name);\r\n this.names.setValue(names);\r\n this.names.updateValueAndValidity();\r\n this.names.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Names Part\"\n }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <div>\n <button\n type=\"button\"\n mat-flat-button\n class=\"mat-primary\"\n (click)=\"addName()\"\n >\n <mat-icon>add_circle</mat-icon> name\n </button>\n </div>\n @if (names.value.length) {\n <table>\n <thead>\n <tr>\n <th></th>\n <th>name</th>\n <th>rank</th>\n </tr>\n </thead>\n <tbody>\n @for ( name of names.value; track name; let i = $index; let first =\n $first; let last = $last) {\n <tr [class.selected]=\"name === editedName\">\n <td class=\"fit-width\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit this name\"\n (click)=\"editName(i)\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this name up\"\n [disabled]=\"first\"\n (click)=\"moveNameUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Move this name down\"\n [disabled]=\"last\"\n (click)=\"moveNameDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete this name\"\n (click)=\"deleteName(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td>{{ name | cadmusProperName }}</td>\n <td>{{ name.assertion?.rank || 0 }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <!-- name editor -->\n @if (editedName) {\n <fieldset>\n <mat-expansion-panel [expanded]=\"editedName\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ editedName | cadmusProperName }}</mat-panel-title\n ></mat-expansion-panel-header\n >\n <cadmus-refs-proper-name\n [langEntries]=\"langEntries\"\n [tagEntries]=\"tagEntries\"\n [typeEntries]=\"typeEntries\"\n [assTagEntries]=\"assTagEntries\"\n [refTagEntries]=\"refTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [name]=\"editedName\"\n (nameChange)=\"onNameChange($event)\"\n />\n </mat-expansion-panel>\n </fieldset>\n }\n </mat-card-content>\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Note part.\r\n */\r\nexport interface NotePart extends Part {\r\n text: string;\r\n tag?: string;\r\n}\r\n\r\n/**\r\n * The type ID used to identify the NotePart type.\r\n */\r\nexport const NOTE_PART_TYPEID = 'it.vedph.note';\r\n\r\n/**\r\n * JSON schema for the note part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const NOTE_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + NOTE_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'NotePart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'text'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n text: {\r\n type: 'string'\r\n },\r\n tag: {\r\n type: ['string', 'null']\r\n }\r\n }\r\n};\r\n","import { Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\nimport { NgeMarkdownModule } from '@cisstech/nge/markdown';\r\n\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n CadmusTextEdService,\r\n CADMUS_TEXT_ED_BINDINGS_TOKEN,\r\n CadmusTextEdBindings,\r\n} from '@myrmidon/cadmus-text-ed';\r\n\r\nimport { NotePart, NOTE_PART_TYPEID } from '../note-part';\r\n\r\n/**\r\n * Note part editor component.\r\n * Thesauri: optionally \"note-tags\", when you want to use a closed set of tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-note-part',\r\n templateUrl: './note-part.component.html',\r\n styleUrls: ['./note-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatSelect,\r\n MatOption,\r\n TitleCasePipe,\r\n NgeMonacoModule,\r\n NgeMarkdownModule,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n providers: [CadmusTextEdService],\r\n})\r\nexport class NotePartComponent\r\n extends ModelEditorComponentBase<NotePart>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public tag: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n\r\n public tagEntries?: ThesaurusEntry[];\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _editService: CadmusTextEdService,\r\n @Inject(CADMUS_TEXT_ED_BINDINGS_TOKEN)\r\n @Optional()\r\n private _editorBindings?: CadmusTextEdBindings\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.tag = formBuilder.control(null, Validators.maxLength(100));\r\n this.text = formBuilder.control(null, Validators.required);\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n private async applyEdit(selector: string) {\r\n if (!this._editor) {\r\n return;\r\n }\r\n const selection = this._editor.getSelection();\r\n const text = selection\r\n ? this._editor.getModel()!.getValueInRange(selection)\r\n : '';\r\n\r\n const result = await this._editService.edit({\r\n selector,\r\n text: text,\r\n });\r\n\r\n this._editor.executeEdits('my-source', [\r\n {\r\n range: selection!,\r\n text: result.text,\r\n forceMoveMarkers: true,\r\n },\r\n ]);\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'markdown');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // plugins\r\n if (this._editorBindings) {\r\n Object.keys(this._editorBindings).forEach((key) => {\r\n const n = parseInt(key, 10);\r\n console.log(\r\n 'Binding ' + n + ' to ' + this._editorBindings![key as any]\r\n );\r\n this._editor!.addCommand(n, () => {\r\n this.applyEdit(this._editorBindings![key as any]);\r\n });\r\n });\r\n }\r\n }\r\n\r\n // @HostListener('window:resize', ['$event'])\r\n // public onResize(event: any) {\r\n // this._editor?.layout();\r\n // }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n tag: this.tag,\r\n text: this.text,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n const key = 'note-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.tagEntries = thesauri[key].entries;\r\n } else {\r\n this.tagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: NotePart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.tag.setValue(part.tag || null);\r\n this.text.setValue(part.text);\r\n this._editorModel?.setValue(part.text || '');\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<NotePart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): NotePart {\r\n let part = this.getEditedPart(NOTE_PART_TYPEID) as NotePart;\r\n part.tag = this.tag.value || undefined;\r\n part.text = this.text.value?.trim() || '';\r\n return part;\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Note Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"tga\">\n @if (!tagEntries) {\n <!-- free tag -->\n <mat-form-field>\n <mat-label>tag</mat-label>\n <input\n type=\"text\"\n matInput\n [formControl]=\"tag\"\n spellcheck=\"false\"\n />\n @if (tag.hasError('maxLength') && (tag.dirty || tag.touched)) {\n <mat-error>tag too long</mat-error>\n }\n </mat-form-field>\n } @else {\n <!-- bound tag -->\n <mat-form-field>\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n @for (e of tagEntries; track e.id) {\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </div>\n\n <div id=\"content-wrapper\">\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor id=\"editor\" (ready)=\"onCreateEditor($event)\" />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n <!-- preview -->\n <div id=\"pvw\">\n <nge-markdown [data]=\"text.value || undefined\" />\n </div>\n </div>\n </div>\n </mat-card-content>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { PhysicalMeasurement } from '@myrmidon/cadmus-mat-physical-size';\r\n\r\n/**\r\n * The PhysicalMeasurements part model.\r\n */\r\nexport interface PhysicalMeasurementsPart extends Part {\r\n measurements: PhysicalMeasurement[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PhysicalMeasurementsPart type.\r\n */\r\nexport const PHYSICAL_MEASUREMENTS_PART_TYPEID =\r\n 'it.vedph.physical-measurements';\r\n\r\n/**\r\n * JSON schema for the PhysicalMeasurements part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PHYSICAL_MEASUREMENTS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PhysicalMeasurementsPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'measurements',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n measurements: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['name', 'value', 'unit'],\r\n properties: {\r\n name: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'number',\r\n },\r\n unit: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n PhysicalMeasurement,\r\n PhysicalMeasurementSetComponent,\r\n} from '@myrmidon/cadmus-mat-physical-size';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID,\r\n PhysicalMeasurementsPart,\r\n} from '../physical-measurements-part';\r\n\r\n/**\r\n * PhysicalMeasurements part editor component.\r\n * Thesauri: physical-size-units, physical-size-dim-tags, physical-size-set-names (all optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-physical-measurements-part',\r\n templateUrl: './physical-measurements-part.component.html',\r\n styleUrl: './physical-measurements-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n TitleCasePipe,\r\n PhysicalMeasurementSetComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PhysicalMeasurementsPartComponent\r\n extends ModelEditorComponentBase<PhysicalMeasurementsPart>\r\n implements OnInit\r\n{\r\n public measurements: FormControl<PhysicalMeasurement[]>;\r\n\r\n // physical-size-units\r\n public unitEntries?: ThesaurusEntry[];\r\n // physical-size-dim-tags\r\n public dimTagEntries?: ThesaurusEntry[];\r\n // physical-size-set-names\r\n public nameEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.measurements = formBuilder.control([], {\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n measurements: this.measurements,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'physical-size-units';\r\n if (this.hasThesaurus(key)) {\r\n this.unitEntries = thesauri[key].entries;\r\n } else {\r\n this.unitEntries = undefined;\r\n }\r\n key = 'physical-size-dim-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.dimTagEntries = thesauri[key].entries;\r\n } else {\r\n this.dimTagEntries = undefined;\r\n }\r\n key = 'physical-size-set-names';\r\n if (this.hasThesaurus(key)) {\r\n this.nameEntries = thesauri[key].entries;\r\n } else {\r\n this.nameEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PhysicalMeasurementsPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.measurements.setValue(part.measurements || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(\r\n data?: EditedObject<PhysicalMeasurementsPart>\r\n ): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PhysicalMeasurementsPart {\r\n let part = this.getEditedPart(\r\n PHYSICAL_MEASUREMENTS_PART_TYPEID\r\n ) as PhysicalMeasurementsPart;\r\n part.measurements = this.measurements.value || [];\r\n return part;\r\n }\r\n\r\n public onMeasurementsChange(measurements: PhysicalMeasurement[]): void {\r\n this.measurements.setValue(measurements || []);\r\n this.measurements.markAsDirty();\r\n this.measurements.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical Measurements Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-mat-physical-measurement-set\r\n [nameEntries]=\"nameEntries\"\r\n [unitEntries]=\"unitEntries || []\"\r\n [dimTagEntries]=\"dimTagEntries\"\r\n [measurements]=\"measurements.value\"\r\n (measurementsChange)=\"onMeasurementsChange($event!)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { PhysicalState } from '@myrmidon/cadmus-mat-physical-state';\r\n\r\n/**\r\n * The PhysicalStates part model.\r\n */\r\nexport interface PhysicalStatesPart extends Part {\r\n states: PhysicalState[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PhysicalStatesPart type.\r\n */\r\nexport const PHYSICAL_STATES_PART_TYPEID = 'it.vedph.physical-states';\r\n\r\n/**\r\n * JSON schema for the PhysicalStates part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PHYSICAL_STATES_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' +\r\n PHYSICAL_STATES_PART_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PhysicalStatesPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'states',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n states: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['type'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n features: {\r\n type: 'array',\r\n items: {\r\n type: 'string',\r\n },\r\n },\r\n date: {\r\n type: 'string',\r\n },\r\n reporter: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { DatePipe, TitleCasePipe } from '@angular/common';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\n\r\nimport { NgxToolsValidators, FlatLookupPipe } from '@myrmidon/ngx-tools';\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n PhysicalState,\r\n PhysicalStateComponent,\r\n} from '@myrmidon/cadmus-mat-physical-state';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n PHYSICAL_STATES_PART_TYPEID,\r\n PhysicalStatesPart,\r\n} from '../physical-states-part';\r\n\r\n/**\r\n * PhysicalStatesPart editor component.\r\n * Thesauri: physical-states (optional), physical-state-features (optional),\r\n * physical-state-reporters (optional).\r\n */\r\n@Component({\r\n selector: 'cadmus-physical-states-part',\r\n templateUrl: './physical-states-part.component.html',\r\n styleUrl: './physical-states-part.component.scss',\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatExpansionModule,\r\n MatButton,\r\n MatIconButton,\r\n MatTooltip,\r\n PhysicalStateComponent,\r\n MatCardActions,\r\n DatePipe,\r\n TitleCasePipe,\r\n FlatLookupPipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PhysicalStatesPartComponent\r\n extends ModelEditorComponentBase<PhysicalStatesPart>\r\n implements OnInit\r\n{\r\n public editedIndex: number;\r\n public edited: PhysicalState | undefined;\r\n\r\n // physical-states\r\n public stateEntries?: ThesaurusEntry[];\r\n // physical-state-features\r\n public featEntries?: ThesaurusEntry[];\r\n // physical-state-reporters\r\n public reporterEntries?: ThesaurusEntry[];\r\n\r\n public entries: FormControl<PhysicalState[]>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.editedIndex = -1;\r\n // form\r\n this.entries = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n entries: this.entries,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'physical-states';\r\n if (this.hasThesaurus(key)) {\r\n this.stateEntries = thesauri[key].entries;\r\n } else {\r\n this.stateEntries = undefined;\r\n }\r\n key = 'physical-state-features';\r\n if (this.hasThesaurus(key)) {\r\n this.featEntries = thesauri[key].entries;\r\n } else {\r\n this.featEntries = undefined;\r\n }\r\n key = 'physical-state-reporters';\r\n if (this.hasThesaurus(key)) {\r\n this.reporterEntries = thesauri[key].entries;\r\n } else {\r\n this.reporterEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PhysicalStatesPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(part.states || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PhysicalStatesPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PhysicalStatesPart {\r\n let part = this.getEditedPart(\r\n PHYSICAL_STATES_PART_TYPEID\r\n ) as PhysicalStatesPart;\r\n part.states = this.entries.value || [];\r\n return part;\r\n }\r\n\r\n public addState(): void {\r\n const state: PhysicalState = {\r\n type: this.stateEntries?.length ? this.stateEntries[0].id : '',\r\n };\r\n this.editState(state, -1);\r\n }\r\n\r\n public editState(entry: PhysicalState, index: number): void {\r\n this.editedIndex = index;\r\n this.edited = entry;\r\n }\r\n\r\n public closeState(): void {\r\n this.editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveState(entry: PhysicalState): void {\r\n const entries = [...this.entries.value];\r\n if (this.editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this.editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeState();\r\n }\r\n\r\n public deleteState(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete state?')\r\n .subscribe((yes: boolean | undefined) => {\r\n if (yes) {\r\n if (this.editedIndex === index) {\r\n this.closeState();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n\r\n public moveStateUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n\r\n public moveStateDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Physical States Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n class=\"mat-primary\"\r\n (click)=\"addState()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> state\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>type</th>\r\n <th>date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr [class.selected]=\"edited === entry\">\r\n <td class=\"fit-width\">\r\n <span class=\"nr\">{{ i + 1 }}.</span>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Edit this state\"\r\n (click)=\"editState(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveStateUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this state down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveStateDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Delete this state\"\r\n (click)=\"deleteState(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>\r\n {{ entry.type | flatLookup : stateEntries : \"id\" : \"value\" }}\r\n </td>\r\n <td>{{ entry.date | date : \"yyyy-MM-dd\" }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n @if (edited) {\r\n <fieldset>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <span class=\"state-title\">state</span>\r\n <span class=\"nr\">{{ editedIndex + 1 }}</span>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <cadmus-mat-physical-state\r\n [featEntries]=\"featEntries\"\r\n [stateEntries]=\"stateEntries\"\r\n [reporterEntries]=\"reporterEntries\"\r\n [state]=\"edited\"\r\n (stateChange)=\"saveState($event!)\"\r\n (stateCancel)=\"closeState()\"\r\n />\r\n </fieldset>\r\n }\r\n </mat-expansion-panel>\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The PinLinks part model.\r\n */\r\nexport interface PinLinksPart extends Part {\r\n links: AssertedCompositeId[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the PinLinksPart type.\r\n */\r\nexport const PIN_LINKS_PART_TYPEID = 'it.vedph.pin-links';\r\n\r\n/**\r\n * JSON schema for the PinLinks part.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const PIN_LINKS_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id: 'www.vedph.it/cadmus/parts/general/' + PIN_LINKS_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'PinLinksPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'links',\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n creatorId: {\r\n type: 'string',\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$',\r\n },\r\n userId: {\r\n type: 'string',\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$',\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$',\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { PinLinksPart, PIN_LINKS_PART_TYPEID } from '../pin-links-part';\r\n\r\n/**\r\n * PinLinksPart editor component.\r\n * Thesauri: pin-link-scopes, pin-link-tags, pin-link-assertion-tags,\r\n * pin-link-docref-types, pin-link-docref-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-links-part',\r\n templateUrl: './pin-links-part.component.html',\r\n styleUrls: ['./pin-links-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n TitleCasePipe,\r\n AssertedCompositeIdsComponent,\r\n MatCardActions,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PinLinksPartComponent\r\n extends ModelEditorComponentBase<PinLinksPart>\r\n implements OnInit\r\n{\r\n public links: FormControl<AssertedCompositeId[]>;\r\n\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n // pin-link-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // pin-link-docref-types\r\n public refTypeEntries?: ThesaurusEntry[];\r\n // pin-link-docref-tags\r\n public refTagEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.links = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n links: this.links,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'pin-link-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'pin-link-docref-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'pin-link-docref-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(part?: PinLinksPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.links.setValue(part.links || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PinLinksPart>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n } // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PinLinksPart {\r\n let part = this.getEditedPart(PIN_LINKS_PART_TYPEID) as PinLinksPart;\r\n part.links = this.links.value || [];\r\n return part;\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>picture_in_picture</mat-icon>\r\n </div>\r\n <mat-card-title>{{\r\n (modelName() | titlecase) || \"Pin Links Part\"\r\n }}</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Fragment } from '@myrmidon/cadmus-core';\r\nimport { AssertedCompositeId } from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\n/**\r\n * The pin-based links layer fragment server model.\r\n */\r\nexport interface PinLinksFragment extends Fragment {\r\n links: AssertedCompositeId[];\r\n}\r\n\r\nexport const PIN_LINKS_FRAGMENT_TYPEID = 'fr.it.vedph.pin-links';\r\n\r\nexport const PIN_LINKS_FRAGMENT_SCHEMA = {\r\n definitions: {},\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/fragments/general/' +\r\n PIN_LINKS_FRAGMENT_TYPEID +\r\n '.json',\r\n type: 'object',\r\n title: 'PinLinksFragment',\r\n required: ['location', 'links'],\r\n properties: {\r\n location: {\r\n $id: '#/properties/location',\r\n type: 'string',\r\n },\r\n baseText: {\r\n $id: '#/properties/baseText',\r\n type: 'string',\r\n },\r\n links: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n default: {},\r\n required: ['target'],\r\n properties: {\r\n target: {\r\n type: 'object',\r\n required: ['gid', 'label'],\r\n properties: {\r\n gid: {\r\n type: 'string',\r\n },\r\n label: {\r\n type: 'string',\r\n },\r\n itemId: {\r\n type: 'string',\r\n },\r\n partId: {\r\n type: 'string',\r\n },\r\n partTypeId: {\r\n type: 'string',\r\n },\r\n roleId: {\r\n type: 'string',\r\n },\r\n name: {\r\n type: 'string',\r\n },\r\n value: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n scope: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n assertion: {\r\n type: 'object',\r\n required: ['rank'],\r\n properties: {\r\n tag: {\r\n type: 'string',\r\n },\r\n rank: {\r\n type: 'integer',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n references: {\r\n type: 'array',\r\n items: {\r\n anyOf: [\r\n {\r\n type: 'object',\r\n required: ['citation'],\r\n properties: {\r\n type: {\r\n type: 'string',\r\n },\r\n tag: {\r\n type: 'string',\r\n },\r\n citation: {\r\n type: 'string',\r\n },\r\n note: {\r\n type: 'string',\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\nimport {\r\n AssertedCompositeId,\r\n AssertedCompositeIdsComponent,\r\n} from '@myrmidon/cadmus-refs-asserted-ids';\r\n\r\nimport {\r\n ThesauriSet,\r\n ThesaurusEntry,\r\n EditedObject,\r\n} from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport { PinLinksFragment } from '../pin-links-fragment';\r\n\r\n/**\r\n * Pin-based links fragment editor component.\r\n * Thesauri: pin-link-scopes, pin-link-tags, pin-link-assertion-tags,\r\n * pin-link-docref-types, pin-link-docref-tags.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-links-fragment',\r\n templateUrl: './pin-links-fragment.component.html',\r\n styleUrls: ['./pin-links-fragment.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n AssertedCompositeIdsComponent,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class PinLinksFragmentComponent\r\n extends ModelEditorComponentBase<PinLinksFragment>\r\n implements OnInit\r\n{\r\n public links: FormControl<AssertedCompositeId[]>;\r\n\r\n // settings\r\n // by-type: true/false\r\n public pinByTypeMode?: boolean;\r\n // switch-mode: true/false\r\n public canSwitchMode?: boolean;\r\n // edit-target: true/false\r\n public canEditTarget?: boolean;\r\n\r\n // pin-link-scopes\r\n public idScopeEntries?: ThesaurusEntry[];\r\n // pin-link-tags\r\n public idTagEntries?: ThesaurusEntry[];\r\n // pin-link-assertion-tags\r\n public assTagEntries?: ThesaurusEntry[];\r\n // pin-link-docref-types\r\n public refTypeEntries?: ThesaurusEntry[];\r\n // pin-link-docref-tags\r\n public refTagEntries?: ThesaurusEntry[];\r\n\r\n constructor(authService: AuthJwtService, formBuilder: FormBuilder) {\r\n super(authService, formBuilder);\r\n // form\r\n this.links = formBuilder.control([], {\r\n // at least 1 entry\r\n validators: NgxToolsValidators.strictMinLengthValidator(1),\r\n nonNullable: true,\r\n });\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n links: this.links,\r\n });\r\n }\r\n\r\n private updateThesauri(thesauri: ThesauriSet): void {\r\n let key = 'pin-link-scopes';\r\n if (this.hasThesaurus(key)) {\r\n this.idScopeEntries = thesauri[key].entries;\r\n } else {\r\n this.idScopeEntries = undefined;\r\n }\r\n key = 'pin-link-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.idTagEntries = thesauri[key].entries;\r\n } else {\r\n this.idTagEntries = undefined;\r\n }\r\n key = 'pin-link-assertion-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.assTagEntries = thesauri[key].entries;\r\n } else {\r\n this.assTagEntries = undefined;\r\n }\r\n key = 'pin-link-docref-types';\r\n if (this.hasThesaurus(key)) {\r\n this.refTypeEntries = thesauri[key].entries;\r\n } else {\r\n this.refTypeEntries = undefined;\r\n }\r\n key = 'pin-link-docref-tags';\r\n if (this.hasThesaurus(key)) {\r\n this.refTagEntries = thesauri[key].entries;\r\n } else {\r\n this.refTagEntries = undefined;\r\n }\r\n }\r\n\r\n private updateForm(fr?: PinLinksFragment | null): void {\r\n if (!fr) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.links.setValue(fr.links || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<PinLinksFragment>): void {\r\n // thesauri\r\n if (data?.thesauri) {\r\n this.updateThesauri(data.thesauri);\r\n }\r\n\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): PinLinksFragment {\r\n const fr = this.getEditedFragment() as PinLinksFragment;\r\n fr.links = this.links.value || [];\r\n return fr;\r\n }\r\n\r\n public onIdsChange(ids: AssertedCompositeId[]): void {\r\n this.links.setValue(ids);\r\n this.links.updateValueAndValidity();\r\n this.links.markAsDirty();\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <mat-card>\r\n <mat-card-header>\r\n <div mat-card-avatar>\r\n <mat-icon>textsms</mat-icon>\r\n </div>\r\n <mat-card-title\r\n >{{ (modelName() | titlecase) || \"Pin Links Fragment\" }}\r\n </mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <cadmus-refs-asserted-composite-ids\r\n [ids]=\"links.value || []\"\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [pinByTypeMode]=\"true\"\r\n [canSwitchMode]=\"true\"\r\n [canEditTarget]=\"true\"\r\n (idsChange)=\"onIdsChange($event)\"\r\n />\r\n </mat-card-content>\r\n\r\n <mat-card-actions>\r\n <cadmus-close-save-buttons\r\n [form]=\"form\"\r\n [noSave]=\"userLevel < 2\"\r\n (closeRequest)=\"close()\"\r\n />\r\n </mat-card-actions>\r\n </mat-card>\r\n</form>\r\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * The name of the text tile part data representing its text.\r\n */\r\nexport const TEXT_TILE_TEXT_DATA_NAME = 'text';\r\n\r\n/**\r\n * A tile in a tiled text row.\r\n */\r\nexport interface TextTile {\r\n x: number;\r\n data?: { [key: string]: any };\r\n}\r\n\r\n/**\r\n * A row in the tiled text part.\r\n */\r\nexport interface TextTileRow {\r\n y: number;\r\n tiles: TextTile[];\r\n data?: { [key: string]: any };\r\n}\r\n\r\n/**\r\n * The tiled text part model.\r\n */\r\nexport interface TiledTextPart extends Part {\r\n citation?: string;\r\n rows: TextTileRow[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the TiledTextPart type.\r\n */\r\nexport const TILED_TEXT_PART_TYPEID = 'it.vedph.tiled-text';\r\n\r\n/**\r\n * JSON schema for the tiled text part. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const TILEDTEXTPART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + TILED_TEXT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'TiledTextPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'rows'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n citation: {\r\n type: ['string', 'null']\r\n },\r\n rows: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['y', 'tiles'],\r\n properties: {\r\n y: {\r\n type: 'integer',\r\n minimum: 1\r\n },\r\n tiles: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n required: ['x', 'data'],\r\n properties: {\r\n x: {\r\n type: 'integer',\r\n minimum: 1\r\n },\r\n data: {\r\n type: 'object',\r\n patternProperties: {\r\n '^.*$': {\r\n anyOf: [\r\n {\r\n type: 'string'\r\n },\r\n {\r\n type: 'number'\r\n },\r\n {\r\n type: 'integer'\r\n },\r\n {\r\n type: 'boolean'\r\n },\r\n {\r\n type: 'null'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n data: {\r\n type: 'object',\r\n patternProperties: {\r\n '^.*$': {\r\n anyOf: [\r\n {\r\n type: 'string'\r\n },\r\n {\r\n type: 'number'\r\n },\r\n {\r\n type: 'integer'\r\n },\r\n {\r\n type: 'boolean'\r\n },\r\n {\r\n type: 'null'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import {\r\n Component,\r\n OnInit,\r\n ElementRef,\r\n ViewChild,\r\n OnDestroy,\r\n model,\r\n effect,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\n\r\nimport {\r\n FormControl,\r\n FormGroup,\r\n FormBuilder,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { TextTile, TEXT_TILE_TEXT_DATA_NAME } from '../tiled-text-part';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'cadmus-text-tile',\r\n templateUrl: './text-tile.component.html',\r\n styleUrls: ['./text-tile.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatCheckbox,\r\n ],\r\n})\r\nexport class TextTileComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n\r\n private _checkedChangeFrozen?: boolean;\r\n\r\n @ViewChild('textInput')\r\n public textElement?: ElementRef;\r\n\r\n public readonly selected = input<boolean>();\r\n public readonly checkable = input<boolean>();\r\n public readonly readonly = input<boolean>();\r\n public readonly color = input<string>();\r\n\r\n public readonly checked = model<boolean>(false);\r\n public readonly tile = model<TextTile>();\r\n\r\n public readonly editData = output<TextTile>();\r\n\r\n public editedText: FormControl<string | null>;\r\n public checker: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public text?: string;\r\n public editing?: boolean;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n // form\r\n this.editedText = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(100),\r\n Validators.pattern(/^[^\\s]+$/),\r\n ]);\r\n this.form = formBuilder.group({\r\n editedText: this.editedText,\r\n });\r\n\r\n this.checker = formBuilder.control(false, { nonNullable: true });\r\n\r\n effect(() => {\r\n this.updateForm(this.tile());\r\n });\r\n\r\n effect(() => {\r\n this._checkedChangeFrozen = true;\r\n this.checker.setValue(this.checked());\r\n this._checkedChangeFrozen = false;\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.checker.valueChanges\r\n .pipe(distinctUntilChanged())\r\n .subscribe((_) => {\r\n if (this._checkedChangeFrozen || !this.checkable) {\r\n return;\r\n }\r\n if (this.tile()) {\r\n this.checked.set(this.checker.value);\r\n // this.checkedChange.emit({\r\n // checked: this.checker.value,\r\n // tile: this.tile()!,\r\n // });\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private updateForm(tile?: TextTile): void {\r\n if (!tile) {\r\n this.form.reset();\r\n this.text = undefined;\r\n } else {\r\n this.text = tile.data ? tile.data[TEXT_TILE_TEXT_DATA_NAME] : undefined;\r\n this.editedText.setValue(this.text || null);\r\n this.form.markAsPristine();\r\n }\r\n }\r\n\r\n public requestDataEdit(): void {\r\n if (!this.readonly) {\r\n this.editData.emit(this.tile()!);\r\n }\r\n }\r\n\r\n public toggleCheckedNonEdit(): void {\r\n if (!this.editing && this.checkable()) {\r\n this.checked.set(!this.checked());\r\n }\r\n }\r\n\r\n public edit(): void {\r\n if (this.editing || this.readonly()) {\r\n return;\r\n }\r\n this.editing = true;\r\n setTimeout(() => {\r\n this.textElement?.nativeElement.focus();\r\n this.textElement?.nativeElement.select();\r\n }, 500);\r\n }\r\n\r\n public requestEditData(): void {\r\n if (this.editing || this.readonly()) {\r\n return;\r\n }\r\n this.editData.emit(this.tile()!);\r\n }\r\n\r\n public cancel(): void {\r\n this.editing = false;\r\n }\r\n\r\n private getTile(): TextTile {\r\n const tile: TextTile = { ...this.tile()!, data: {} };\r\n this.text = this.editedText.value?.trim() || undefined;\r\n tile.data![TEXT_TILE_TEXT_DATA_NAME] = this.text;\r\n return tile;\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid || this.readonly() || !this.tile()) {\r\n return;\r\n }\r\n this.tile.set(this.getTile());\r\n this.editing = false;\r\n }\r\n}\r\n","@if (tile()) {\n<div\n class=\"tile\"\n [class.checked]=\"checked\"\n [class.selected]=\"selected()\"\n [style.background-color]=\"color() || 'transparent'\"\n tabindex=\"1\"\n (keydown.F2)=\"edit()\"\n (keydown.F3)=\"requestEditData()\"\n (keydown.space)=\"toggleCheckedNonEdit()\"\n>\n @if (editing) {\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-form-field>\n <mat-label>text [{{ tile()!.x }}]</mat-label>\n <input\n #textInput\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"editedText\"\n (keydown.esc)=\"cancel()\"\n />\n @if ( editedText.hasError('required') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>enter a text</mat-error>\n } @if ( editedText.hasError('maxLength') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>text too long</mat-error>\n } @if ( editedText.hasError('pattern') && (editedText.dirty ||\n editedText.touched) ) {\n <mat-error>no whitespaces allowed</mat-error>\n }\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Discard text\"\n (click)=\"cancel()\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n [disabled]=\"form.invalid\"\n mat-icon-button\n matTooltip=\"Save text\"\n >\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\n </button>\n </form>\n } @if (!editing) {\n <ng-container style=\"display: flex; align-items: center\">\n <span class=\"text\">{{ text }}</span>\n @if (!readonly()) {\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit text (F2)\"\n (click)=\"edit()\"\n >\n <mat-icon class=\"mat-primary\">edit</mat-icon>\n </button>\n } @if (checkable()) {\n <mat-checkbox\n [formControl]=\"checker\"\n matTooltip=\"Toggle check\"\n ></mat-checkbox>\n }\n </ng-container>\n }\n</div>\n}\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n input,\r\n model,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\r\n\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatSuffix,\r\n MatError,\r\n} from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatButton, MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { Subscription } from 'rxjs';\r\n\r\ninterface Data {\r\n [key: string]: any;\r\n}\r\ninterface DataKey {\r\n value: string;\r\n visible: boolean;\r\n}\r\n\r\n/**\r\n * The maximum allowed length for a datum value. This is just a reasonable\r\n * limit, having no other specifical reason.\r\n */\r\nconst VALUE_MAX_LEN = 100;\r\n\r\n@Component({\r\n selector: 'cadmus-tiled-data',\r\n templateUrl: './tiled-data.component.html',\r\n styleUrls: ['./tiled-data.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatButton,\r\n MatIconButton,\r\n MatSuffix,\r\n MatIcon,\r\n MatTooltip,\r\n MatError,\r\n ],\r\n})\r\nexport class TiledDataComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n private _hiddenData: Data;\r\n public keys: DataKey[];\r\n\r\n public readonly title = input<string>();\r\n\r\n public readonly data = model<Data>({});\r\n\r\n public readonly hiddenKeys = input<string[]>([]);\r\n\r\n public readonly cancel = output();\r\n\r\n public keyFilter: FormControl<string | null>;\r\n public filterForm: FormGroup;\r\n\r\n public newKey: FormControl<string | null>;\r\n public newValue: FormControl<string | null>;\r\n public newForm: FormGroup;\r\n\r\n public form: FormGroup;\r\n\r\n constructor(\r\n private _formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n this._hiddenData = {};\r\n this.keys = [];\r\n // filter form\r\n this.keyFilter = _formBuilder.control(null);\r\n this.filterForm = _formBuilder.group({\r\n keyFilter: this.keyFilter,\r\n });\r\n // new datum form\r\n this.newKey = _formBuilder.control(null, [\r\n Validators.required,\r\n Validators.pattern('^[a-zA-Z_$][[a-zA-Z_$0-9]{0,49}$'),\r\n ]);\r\n this.newValue = _formBuilder.control(null, [\r\n Validators.maxLength(VALUE_MAX_LEN),\r\n ]);\r\n this.newForm = _formBuilder.group({\r\n newKey: this.newKey,\r\n newValue: this.newValue,\r\n });\r\n // editing form (controls are dynamically populated)\r\n this.form = _formBuilder.group({});\r\n\r\n effect(() => {\r\n this.updateForm(this.data(), this.hiddenKeys());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.keyFilter.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((_) => {\r\n this.updateDataVisibility();\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private matchesFilter(key: string): boolean {\r\n if (!this.keyFilter.value) {\r\n return true;\r\n }\r\n const filter = this.keyFilter.value.toLowerCase();\r\n return key.toLowerCase().indexOf(filter) > -1;\r\n }\r\n\r\n public isVisibleKey(key: string): boolean {\r\n const dataKey = this.keys.find((k) => {\r\n return k.value === key;\r\n });\r\n return dataKey ? dataKey.visible : false;\r\n }\r\n\r\n private updateForm(data?: Data, hiddenKeys?: string[]): void {\r\n // reset\r\n this.keys = [];\r\n this._hiddenData = {};\r\n this.form = this._formBuilder.group({});\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n // collect keys from data's own properties and sort the result\r\n const cache: DataKey[] = [];\r\n Object.getOwnPropertyNames(data).forEach((key: string) => {\r\n if (!hiddenKeys || hiddenKeys.indexOf(key) === -1) {\r\n cache.push({ value: key, visible: this.matchesFilter(key) });\r\n } else {\r\n this._hiddenData[key] = data[key];\r\n }\r\n });\r\n cache.sort();\r\n\r\n // add a control for each collected key\r\n for (let i = 0; i < cache.length; i++) {\r\n const key = cache[i];\r\n this.form.addControl(\r\n key.value,\r\n this._formBuilder.control(\r\n data[key.value],\r\n Validators.maxLength(VALUE_MAX_LEN)\r\n )\r\n );\r\n }\r\n this.keys = cache;\r\n }\r\n\r\n private updateDataVisibility(): void {\r\n for (let i = 0; i < this.keys.length; i++) {\r\n this.keys[i] = {\r\n value: this.keys[i].value,\r\n visible: this.matchesFilter(this.keys[i].value),\r\n };\r\n }\r\n }\r\n\r\n private getData(): Data {\r\n const data: Data = this._hiddenData ? { ...this._hiddenData } : {};\r\n\r\n for (let i = 0; i < this.keys.length; i++) {\r\n const keyValue = this.keys[i].value;\r\n data[keyValue] = this.form.controls[keyValue].value;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n public deleteDatum(key: DataKey): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete datum #\"${key.value}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (!ok) {\r\n return;\r\n }\r\n delete this.data()![key.value];\r\n this.updateForm();\r\n });\r\n }\r\n\r\n public addDatum(): void {\r\n if (this.newForm.invalid) {\r\n return;\r\n }\r\n this.data()![this.newKey.value!] = this.newValue.value;\r\n this.newForm.reset();\r\n this.updateForm(this.data());\r\n }\r\n\r\n public close(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.data.set(this.getData());\r\n }\r\n}\r\n","<div>\n @if (title()) {\n <h3>{{ title() }}</h3>\n }\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>filter</mat-label>\n <input\n matInput\n type=\"text\"\n spellcheck=\"false\"\n formControlName=\"keyFilter\"\n />\n @if (keyFilter.value) {\n <button\n type=\"button\"\n mat-button\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"keyFilter.setValue('')\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </form>\n <form [formGroup]=\"form\" (submit)=\"save()\">\n <table>\n <tbody>\n @for (key of keys; track key) {\n <tr>\n @if (key.visible) {\n <td>\n <button\n type=\"button\"\n (click)=\"deleteDatum(key)\"\n mat-icon-button\n matTooltip=\"Remove this datum\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n </td>\n <td class=\"key-label\">\n {{ key.value }}\n </td>\n <td>\n <mat-form-field>\n <input\n matInput\n spellcheck=\"false\"\n [formControlName]=\"key.value\"\n />\n </mat-form-field>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <div>\n <form [formGroup]=\"newForm\" (submit)=\"addDatum()\">\n <mat-form-field>\n <mat-label>key</mat-label>\n <input matInput type=\"text\" formControlName=\"newKey\" />\n @if ( newKey.hasError('required') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>enter a key</mat-error>\n } @if ( newKey.hasError('pattern') && (newKey.dirty || newKey.touched)\n ) {\n <mat-error>invalid key</mat-error>\n }\n </mat-form-field>\n \n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput type=\"text\" formControlName=\"newValue\" />\n @if ( newValue.hasError('maxLength') && (newValue.dirty ||\n newValue.touched) ) {\n <mat-error>too long</mat-error>\n }\n </mat-form-field>\n <button type=\"submit\" matTooltip=\"Add new datum\" mat-icon-button>\n <mat-icon>add_circle</mat-icon>\n </button>\n </form>\n </div>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"close()\"\n matTooltip=\"Close without saving\"\n >\n <mat-icon class=\"mat-warn\">clear</mat-icon>\n </button>\n <button\n type=\"submit\"\n mat-button\n class=\"mat-primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save data\"\n >\n <mat-icon>check_circle</mat-icon>\n save data\n </button>\n </div>\n </form>\n</div>\n","import { Component, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport {\r\n CdkDragDrop,\r\n moveItemInArray,\r\n CdkDropListGroup,\r\n CdkDropList,\r\n CdkDrag,\r\n CdkDragPlaceholder,\r\n} from '@angular/cdk/drag-drop';\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTabGroup, MatTab } from '@angular/material/tabs';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport { TextTileComponent } from '../text-tile/text-tile.component';\r\nimport { TiledDataComponent } from '../tiled-data/tiled-data.component';\r\nimport {\r\n TiledTextPart,\r\n TextTileRow,\r\n TILED_TEXT_PART_TYPEID,\r\n TEXT_TILE_TEXT_DATA_NAME,\r\n TextTile,\r\n} from '../tiled-text-part';\r\n\r\ninterface Data {\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-tiled-text-part',\r\n templateUrl: './tiled-text-part.component.html',\r\n styleUrls: ['./tiled-text-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatTabGroup,\r\n MatTab,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n CdkDropListGroup,\r\n CdkDropList,\r\n TextTileComponent,\r\n CdkDrag,\r\n CdkDragPlaceholder,\r\n MatIconButton,\r\n MatTooltip,\r\n MatCardActions,\r\n TitleCasePipe,\r\n TiledDataComponent,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class TiledTextPartComponent\r\n extends ModelEditorComponentBase<TiledTextPart>\r\n implements OnInit\r\n{\r\n private _editedDataTile?: TextTile;\r\n private _editedDataRow?: TextTileRow;\r\n\r\n public selectedTile?: TextTile;\r\n public citation: FormControl<string | null>;\r\n public rows: FormControl<TextTileRow[]>;\r\n public editedData?: Data;\r\n public editedDataTitle?: string;\r\n public currentTabIndex: number;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n this.currentTabIndex = 0;\r\n // form\r\n this.rows = formBuilder.control([], { nonNullable: true });\r\n this.citation = formBuilder.control(null, Validators.maxLength(1000));\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n citation: this.citation,\r\n rows: this.rows,\r\n });\r\n }\r\n\r\n private updateForm(part?: TiledTextPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.citation.setValue(part.citation || null);\r\n this.rows.setValue(part.rows || []);\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<TiledTextPart>): void {\r\n // form\r\n this.updateForm(data?.value);\r\n }\r\n\r\n /**\r\n * Recalculate the coordinates of all the tiles in this set,\r\n * according to the tiles position.\r\n */\r\n private adjustCoords(): void {\r\n const rows = this.rows.value;\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i];\r\n row.y = i + 1;\r\n if (row.tiles) {\r\n for (let j = 0; j < row.tiles.length; j++) {\r\n row.tiles[j].x = j + 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected getValue(): TiledTextPart {\r\n // ensure that form's coordinates are ok\r\n this.adjustCoords();\r\n\r\n let part = this.getEditedPart(TILED_TEXT_PART_TYPEID) as TiledTextPart;\r\n part.citation = this.citation.value\r\n ? this.citation.value.trim()\r\n : undefined;\r\n part.rows = this.rows.value;\r\n return part;\r\n }\r\n\r\n /**\r\n * Append a new row at the bottom.\r\n */\r\n public addRow(): void {\r\n const data: { [key: string]: any } = {};\r\n data[TEXT_TILE_TEXT_DATA_NAME] = 'text1';\r\n\r\n const rows = [...this.rows.value];\r\n rows.push({\r\n y: rows.length + 1,\r\n tiles: [\r\n {\r\n x: 1,\r\n data: data,\r\n },\r\n ],\r\n });\r\n this.rows.setValue(rows);\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Append a new tile at the end of the specified row.\r\n * @param row The row to add the tile to.\r\n */\r\n public addTile(row: TextTileRow): void {\r\n const x = row.tiles ? row.tiles.length + 1 : 1;\r\n const data: { [key: string]: any } = {};\r\n data[TEXT_TILE_TEXT_DATA_NAME] = 'text' + x;\r\n if (!row.tiles) {\r\n row.tiles = [];\r\n }\r\n row.tiles.push({\r\n x: x,\r\n data: data,\r\n });\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Delete the selected tile, if any.\r\n */\r\n public deleteSelectedTile(): void {\r\n if (!this.selectedTile) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.rows.value.length; i++) {\r\n const row = this.rows.value[i];\r\n if (row.tiles) {\r\n const index = row.tiles.indexOf(this.selectedTile);\r\n if (index > -1) {\r\n this.selectedTile =\r\n index + 1 < row.tiles.length\r\n ? row.tiles[index + 1]\r\n : row.tiles.length > 1\r\n ? row.tiles[index - 1]\r\n : undefined;\r\n row.tiles.splice(index, 1);\r\n this.adjustCoords();\r\n this.rows.markAsDirty();\r\n this.rows.updateValueAndValidity();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete the row at the specified index.\r\n * @param rowIndex The row's index.\r\n */\r\n public deleteRow(rowIndex: number): void {\r\n this._dialogService\r\n .confirm('Confirm Deletion', `Delete row #\"${rowIndex + 1}\"?`)\r\n .subscribe((ok: boolean) => {\r\n if (!ok) {\r\n return;\r\n }\r\n const rows = [...this.rows.value];\r\n rows.splice(rowIndex, 1);\r\n this.rows.setValue(rows);\r\n this.rows.markAsDirty();\r\n this.adjustCoords();\r\n this.rows.updateValueAndValidity();\r\n });\r\n }\r\n\r\n /**\r\n * Move the row at the specified index up.\r\n * @param rowIndex The row index.\r\n */\r\n public moveRowUp(rowIndex: number): void {\r\n if (rowIndex < 1) {\r\n return;\r\n }\r\n moveItemInArray(this.rows.value, rowIndex, rowIndex - 1);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n /**\r\n * Move the row at the specified index down.\r\n * @param rowIndex The row index.\r\n */\r\n public moveRowDown(rowIndex: number): void {\r\n if (rowIndex + 1 === this.rows.value.length) {\r\n return;\r\n }\r\n moveItemInArray(this.rows.value, rowIndex, rowIndex + 1);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public drop(event: CdkDragDrop<TextTile[]>, row: TextTileRow): void {\r\n // https://material.angular.io/cdk/drag-drop/overview\r\n moveItemInArray(row.tiles, event.previousIndex, event.currentIndex);\r\n this.adjustCoords();\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public onTileChange(tile: TextTile): void {\r\n this.form?.markAsDirty();\r\n }\r\n\r\n public editRowData(row: TextTileRow): void {\r\n this._editedDataRow = row;\r\n this._editedDataTile = undefined;\r\n this.editedDataTitle = `Row ${row.y}`;\r\n this.editedData = row.data;\r\n this.currentTabIndex = 1;\r\n }\r\n\r\n public editTileData(tile: TextTile): void {\r\n this._editedDataTile = tile;\r\n this._editedDataRow = undefined;\r\n this.editedDataTitle = `Tile ${this.getTileCoords(tile)}`;\r\n this.editedData = tile.data;\r\n this.currentTabIndex = 1;\r\n }\r\n\r\n public closeDataEditor(): void {\r\n this.currentTabIndex = 0;\r\n this._editedDataRow = undefined;\r\n this.editedDataTitle = undefined;\r\n this.editedData = undefined;\r\n }\r\n\r\n public saveEditedData(data: Data): void {\r\n if (this._editedDataTile) {\r\n this._editedDataTile.data = data;\r\n } else {\r\n this._editedDataRow!.data = data;\r\n }\r\n this.form?.markAsDirty();\r\n this.closeDataEditor();\r\n }\r\n\r\n public getTileCoords(tile?: TextTile): string {\r\n if (!tile) {\r\n tile = this.selectedTile;\r\n }\r\n if (!tile) {\r\n return '';\r\n } else {\r\n let y = 0;\r\n for (let i = 0; i < this.rows.value.length; i++) {\r\n if (this.rows.value[i].tiles.indexOf(tile) > -1) {\r\n y = i + 1;\r\n break;\r\n }\r\n }\r\n return `${y},${tile.x}`;\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Tiled Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-tab-group [(selectedIndex)]=\"currentTabIndex\">\n <mat-tab label=\"Text\">\n <!-- citation -->\n <div>\n <mat-form-field style=\"min-width: 400px\">\n <mat-label>citation</mat-label>\n <input matInput formControlName=\"citation\" />\n @if ( citation.hasError('maxLength') && (citation.dirty ||\n citation.touched) ) {\n <mat-error></mat-error>\n }\n </mat-form-field>\n </div>\n\n <!-- rows -->\n @if (rows) {\n <div cdkDropListGroup>\n <!-- row -->\n @for ( row of rows.value; track row; let i = $index; let first =\n $first; let last = $last) {\n <div\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($any($event), row)\"\n style=\"display: flex; flex-flow: row wrap\"\n >\n <!-- nr -->\n <span class=\"row-nr\">{{ i + 1 }}</span>\n <!-- tile -->\n @for (tile of row.tiles || []; track tile) {\n <cadmus-text-tile\n [tile]=\"tile\"\n [selected]=\"tile === selectedTile\"\n cdkDrag\n style=\"flex: 0 0 auto\"\n (click)=\"selectedTile = tile\"\n (editData)=\"editTileData(tile)\"\n (tileChange)=\"onTileChange($event!)\"\n >\n <div class=\"tile-placeholder\" *cdkDragPlaceholder></div>\n </cadmus-text-tile>\n }\n <!-- row tail buttons -->\n <div class=\"unmuted-hovering\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"addTile(row)\"\n matTooltip=\"Append new tile\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"moveRowUp(i)\"\n [disabled]=\"first\"\n matTooltip=\"Move this row up\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"moveRowDown(i)\"\n [disabled]=\"last\"\n matTooltip=\"Move this row down\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete whole row\"\n (click)=\"deleteRow(i)\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit row's data\"\n (click)=\"editRowData(row)\"\n >\n <mat-icon>list</mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n }\n <!-- bottom buttons -->\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Append new row\"\n (click)=\"addRow()\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n <span>{{ getTileCoords() }}</span>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Edit selected tile's data\"\n [disabled]=\"!selectedTile\"\n (click)=\"editTileData(selectedTile!)\"\n >\n <mat-icon>list</mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Delete the selected tile\"\n (click)=\"deleteSelectedTile()\"\n [disabled]=\"!selectedTile\"\n >\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\n </button>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-tab>\n\n @if (editedData) {\n <mat-tab label=\"Data\">\n <cadmus-tiled-data\n [data]=\"editedData\"\n [title]=\"editedDataTitle\"\n [hiddenKeys]=\"['text']\"\n (cancel)=\"closeDataEditor()\"\n (dataChange)=\"saveEditedData($event)\"\n />\n </mat-tab>\n }\n </mat-tab-group>\n </mat-card-content>\n </mat-card>\n</form>\n","import { Part } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * A single line in a TokenTextPart.\r\n */\r\nexport interface TokenTextLine {\r\n y: number;\r\n text: string;\r\n}\r\n\r\n/**\r\n * Token-based text part.\r\n */\r\nexport interface TokenTextPart extends Part {\r\n citation?: string;\r\n lines: TokenTextLine[];\r\n}\r\n\r\n/**\r\n * The type ID used to identify the TokenTextPart type.\r\n */\r\nexport const TOKEN_TEXT_PART_TYPEID = 'it.vedph.token-text';\r\n\r\n/**\r\n * JSON schema for the TookenTextPart. This is used in the editor demo.\r\n * You can use the JSON schema tool at https://jsonschema.net/.\r\n */\r\nexport const TOKEN_TEXT_PART_SCHEMA = {\r\n $schema: 'http://json-schema.org/draft-07/schema#',\r\n $id:\r\n 'www.vedph.it/cadmus/parts/general/' + TOKEN_TEXT_PART_TYPEID + '.json',\r\n type: 'object',\r\n title: 'TokenTextPart',\r\n required: [\r\n 'id',\r\n 'itemId',\r\n 'typeId',\r\n 'timeCreated',\r\n 'creatorId',\r\n 'timeModified',\r\n 'userId',\r\n 'lines'\r\n ],\r\n properties: {\r\n timeCreated: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n creatorId: {\r\n type: 'string'\r\n },\r\n timeModified: {\r\n type: 'string',\r\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}.\\\\d+Z$'\r\n },\r\n userId: {\r\n type: 'string'\r\n },\r\n id: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n itemId: {\r\n type: 'string',\r\n pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'\r\n },\r\n typeId: {\r\n type: 'string',\r\n pattern: '^[a-z][-0-9a-z._]*$'\r\n },\r\n roleId: {\r\n type: ['string', 'null'],\r\n pattern: '^([a-z][-0-9a-z._]*)?$'\r\n },\r\n citation: {\r\n type: ['string', 'null']\r\n },\r\n lines: {\r\n $id: '#/properties/lines',\r\n type: 'array',\r\n title: 'The Lines Schema',\r\n items: {\r\n $id: '#/properties/lines/items',\r\n type: 'object',\r\n required: ['y', 'text'],\r\n properties: {\r\n y: {\r\n $id: '#/properties/lines/items/properties/y',\r\n type: 'integer'\r\n },\r\n text: {\r\n $id: '#/properties/lines/items/properties/text',\r\n type: 'string'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { TitleCasePipe } from '@angular/common';\r\nimport {\r\n FormControl,\r\n FormBuilder,\r\n Validators,\r\n FormGroup,\r\n UntypedFormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport {\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatCardActions,\r\n} from '@angular/material/card';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { NgeMonacoModule } from '@cisstech/nge/monaco';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { AuthJwtService } from '@myrmidon/auth-jwt-login';\r\n\r\nimport {\r\n CloseSaveButtonsComponent,\r\n ModelEditorComponentBase,\r\n} from '@myrmidon/cadmus-ui';\r\n\r\nimport {\r\n TokenTextPart,\r\n TOKEN_TEXT_PART_TYPEID,\r\n TokenTextLine,\r\n} from '../token-text-part';\r\nimport { EditedObject } from '@myrmidon/cadmus-core';\r\n\r\n/**\r\n * Editor component for base text, as referenced by token-based layers.\r\n * Thesauri: none.\r\n */\r\n@Component({\r\n selector: 'cadmus-token-text-part',\r\n templateUrl: './token-text-part.component.html',\r\n styleUrls: ['./token-text-part.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatCard,\r\n MatCardHeader,\r\n MatCardAvatar,\r\n MatIcon,\r\n MatCardTitle,\r\n MatCardContent,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatSelect,\r\n MatOption,\r\n MatIconButton,\r\n MatTooltip,\r\n NgeMonacoModule,\r\n MatError,\r\n MatCardActions,\r\n TitleCasePipe,\r\n CloseSaveButtonsComponent,\r\n ],\r\n})\r\nexport class TokenTextPartComponent\r\n extends ModelEditorComponentBase<TokenTextPart>\r\n implements OnInit, OnDestroy\r\n{\r\n // Monaco\r\n private readonly _disposables: monaco.IDisposable[] = [];\r\n private _editorModel?: monaco.editor.ITextModel;\r\n private _editor?: monaco.editor.IStandaloneCodeEditor;\r\n\r\n public citation: FormControl<string | null>;\r\n public text: FormControl<string | null>;\r\n\r\n public transform: FormControl<string | null>;\r\n\r\n constructor(\r\n authService: AuthJwtService,\r\n formBuilder: FormBuilder,\r\n private _dialogService: DialogService\r\n ) {\r\n super(authService, formBuilder);\r\n // form\r\n this.citation = formBuilder.control(null);\r\n this.text = formBuilder.control(null, Validators.required);\r\n this.transform = formBuilder.control('ws');\r\n }\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n public override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._disposables.forEach((d) => d.dispose());\r\n }\r\n\r\n public onCreateEditor(editor: monaco.editor.IEditor) {\r\n editor.updateOptions({\r\n minimap: {\r\n side: 'right',\r\n },\r\n wordWrap: 'on',\r\n automaticLayout: true,\r\n });\r\n this._editorModel =\r\n this._editorModel ||\r\n monaco.editor.createModel(this.text?.value || '', 'txt');\r\n editor.setModel(this._editorModel);\r\n this._editor = editor as monaco.editor.IStandaloneCodeEditor;\r\n\r\n this._disposables.push(\r\n this._editorModel.onDidChangeContent((e) => {\r\n this.text.setValue(this._editorModel!.getValue());\r\n this.text.markAsDirty();\r\n this.text.updateValueAndValidity();\r\n })\r\n );\r\n }\r\n\r\n protected buildForm(formBuilder: FormBuilder): FormGroup | UntypedFormGroup {\r\n return formBuilder.group({\r\n citation: this.citation,\r\n text: this.text,\r\n });\r\n }\r\n\r\n private getTextFromModel(model: TokenTextPart): string | null {\r\n if (!model || !model.lines) {\r\n return null;\r\n }\r\n return model.lines.map((l) => l.text).join('\\n');\r\n }\r\n\r\n private getLinesFromText(text?: string | null): TokenTextLine[] {\r\n if (!text) {\r\n return [];\r\n }\r\n // ensure that we just have LF rather than CRLF\r\n text = text.replace('\\r\\n', '\\n');\r\n\r\n const lines: TokenTextLine[] = [];\r\n const textLines = text.split('\\n');\r\n let y = 1;\r\n for (const line of textLines) {\r\n lines.push({\r\n y,\r\n text: line,\r\n });\r\n y++;\r\n }\r\n return lines;\r\n }\r\n\r\n private updateForm(part?: TokenTextPart | null): void {\r\n if (!part) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.citation.setValue(part.citation || null);\r\n this.text.setValue(this.getTextFromModel(part));\r\n this._editorModel?.setValue(this.text.value || '');\r\n this.form.markAsPristine();\r\n }\r\n\r\n protected override onDataSet(data?: EditedObject<TokenTextPart>): void {\r\n this.updateForm(data?.value);\r\n }\r\n\r\n protected getValue(): TokenTextPart {\r\n let part = this.getEditedPart(TOKEN_TEXT_PART_TYPEID) as TokenTextPart;\r\n part.citation = this.citation.value\r\n ? this.citation.value.trim()\r\n : undefined;\r\n part.lines = this.getLinesFromText(this.text.value);\r\n return part;\r\n }\r\n\r\n private normalizeWs(text: string): string {\r\n text = text.replace(/[ \\t]+/g, ' ').trim();\r\n text = text.replace(/[ \\t]+([\\r\\n])/g, '$1');\r\n text = text.replace(/([\\r\\n])[ \\t]+/g, '$1');\r\n return text;\r\n }\r\n\r\n private splitAtStops(text: string): string {\r\n const crLf = text.indexOf('\\r\\n') > -1;\r\n const r = new RegExp('([.?!]+)', 'g');\r\n const parts: string[] = [];\r\n let start = 0;\r\n let m: RegExpExecArray | null;\r\n\r\n while ((m = r.exec(text))) {\r\n console.log(m[1].length);\r\n const end = m.index + m[1].length;\r\n if (end < text.length) {\r\n parts.push(text.substring(start, end));\r\n start = end;\r\n }\r\n }\r\n if (start < text.length) {\r\n parts.push(text.substring(start));\r\n }\r\n return parts.map((s) => s.trim()).join(crLf ? '\\r\\n' : '\\n');\r\n }\r\n\r\n public applyTransform(): void {\r\n let name: string;\r\n switch (this.transform.value) {\r\n case 'ws':\r\n name = 'whitespace normalization';\r\n break;\r\n case 'split':\r\n name = 'text splitting';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this._dialogService\r\n .confirm('Transform Text', `Apply ${name}?`)\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n let text: string = this.text.value || '';\r\n\r\n switch (this.transform.value) {\r\n case 'ws':\r\n text = this.normalizeWs(text);\r\n break;\r\n case 'split':\r\n text = this.splitAtStops(text);\r\n break;\r\n }\r\n this.text.setValue(text);\r\n this.text.updateValueAndValidity();\r\n this.text.markAsDirty();\r\n }\r\n });\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>picture_in_picture</mat-icon>\n </div>\n <mat-card-title>{{\n (modelName() | titlecase) || \"Token Text Part\"\n }}</mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div id=\"container\">\n <div id=\"cit\">\n <!-- citation -->\n <mat-form-field>\n <mat-label>citation</mat-label>\n <input matInput [formControl]=\"citation\" />\n </mat-form-field>\n </div>\n\n <!-- transforms -->\n <div id=\"trs\">\n <mat-form-field>\n <mat-label>operation</mat-label>\n <mat-select [formControl]=\"transform\">\n <mat-option value=\"ws\">normalize ws</mat-option>\n <mat-option value=\"split\">split at stops</mat-option>\n </mat-select>\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Apply the selected text transformation\"\n (click)=\"applyTransform()\"\n >\n <mat-icon class=\"mat-warn\">find_replace</mat-icon>\n </button>\n </div>\n\n <!-- text -->\n <div id=\"txt\">\n <nge-monaco-editor\n style=\"--editor-height: 800px\"\n (ready)=\"onCreateEditor($event)\"\n />\n @if (text.hasError('required') && (text.touched || text.dirty)) {\n <mat-error>please enter some text</mat-error>\n }\n </div>\n </div>\n\n <mat-card-actions>\n <cadmus-close-save-buttons\n [form]=\"form\"\n [noSave]=\"userLevel < 2\"\n (closeRequest)=\"close()\"\n />\n </mat-card-actions>\n </mat-card-content>\n </mat-card>\n</form>\n","/*\r\n * Public API Surface of cadmus-part-general-ui\r\n */\r\n\r\nexport * from './lib/asserted-historical-dates-part';\r\nexport * from './lib/asserted-historical-date/asserted-historical-date.component';\r\nexport * from './lib/asserted-historical-dates-part/asserted-historical-dates-part.component';\r\n\r\nexport * from './lib/bib-authors-editor/bib-authors-editor.component';\r\nexport * from './lib/bibliography-entry/bibliography-entry.component';\r\nexport * from './lib/bibliography-part';\r\nexport * from './lib/bibliography-part/bibliography-part.component';\r\n\r\nexport * from './lib/categories-part';\r\nexport * from './lib/categories-part/categories-part.component';\r\n\r\nexport * from './lib/chronology-fragment';\r\nexport * from './lib/chronology-fragment/chronology-fragment.component';\r\n\r\nexport * from './lib/chronotopes-part';\r\nexport * from './lib/chronotopes-part/chronotopes-part.component';\r\n\r\nexport * from './lib/comment-part';\r\nexport * from './lib/comment-fragment';\r\nexport * from './lib/comment-editor/comment-editor.component';\r\n\r\nexport * from './lib/decorated-counts-part';\r\nexport * from './lib/decorated-counts-part/decorated-counts-part.component';\r\n\r\nexport * from './lib/district-location-part';\r\nexport * from './lib/district-location-part/district-location-part.component';\r\n\r\nexport * from './lib/doc-references-part';\r\nexport * from './lib/doc-references-part/doc-references-part.component';\r\n\r\nexport * from './lib/external-ids-part';\r\nexport * from './lib/external-ids-part/external-ids-part.component';\r\n\r\nexport * from './lib/flags-part';\r\nexport * from './lib/flags-part/flags-part.component';\r\n\r\nexport * from './lib/historical-events-part';\r\nexport * from './lib/historical-event-editor/historical-event-editor.component';\r\n\r\nexport * from './lib/historical-date-part';\r\nexport * from './lib/historical-date-part/historical-date-part.component';\r\nexport * from './lib/historical-events-part/historical-events-part.component';\r\nexport * from './lib/related-entity/related-entity.component';\r\n\r\nexport * from './lib/index-keyword/index-keyword.component';\r\nexport * from './lib/index-keywords-part';\r\nexport * from './lib/index-keywords-part/index-keywords-part.component';\r\n\r\nexport * from './lib/keywords-part';\r\nexport * from './lib/keywords-part/keywords-part.component';\r\n\r\nexport * from './lib/metadata-part';\r\nexport * from './lib/metadata-part/metadata-part.component';\r\n\r\nexport * from './lib/names-part';\r\nexport * from './lib/names-part/names-part.component';\r\n\r\nexport * from './lib/note-part';\r\nexport * from './lib/note-part/note-part.component';\r\n\r\nexport * from './lib/physical-measurements-part';\r\nexport * from './lib/physical-measurements-part/physical-measurements-part.component';\r\n\r\nexport * from './lib/physical-states-part';\r\nexport * from './lib/physical-states-part/physical-states-part.component';\r\n\r\nexport * from './lib/pin-links-part';\r\nexport * from './lib/pin-links-part/pin-links-part.component';\r\n\r\nexport * from './lib/pin-links-fragment';\r\nexport * from './lib/pin-links-fragment/pin-links-fragment.component';\r\n\r\nexport * from './lib/text-tile/text-tile.component';\r\nexport * from './lib/tiled-data/tiled-data.component';\r\nexport * from './lib/tiled-text-part';\r\nexport * from './lib/tiled-text-part/tiled-text-part.component';\r\n\r\nexport * from './lib/token-text-part';\r\nexport * from './lib/token-text-part/token-text-part.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i7"],"mappings":"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"}
|