Skip to content

Commit

Permalink
Merge pull request #237 from evt-project/feature/authorial_documental…
Browse files Browse the repository at this point in the history
…_mixed_view

Feature/authorial documental mixed view
  • Loading branch information
davivcu committed Jun 6, 2024
2 parents aaaf337 + 8f47327 commit 7fcaa80
Show file tree
Hide file tree
Showing 112 changed files with 1,890 additions and 170 deletions.
2 changes: 2 additions & 0 deletions src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CollationComponent } from './view-modes/collation/collation.component';
import { DocumentalMixedComponent } from './view-modes/documental-mixed/documental-mixed.component';
import { ImageTextComponent } from './view-modes/image-text/image-text.component';
import { ImageOnlyComponent } from './view-modes/image-only/image-only.component';
import { ReadingTextComponent } from './view-modes/reading-text/reading-text.component';
Expand All @@ -18,6 +19,7 @@ const appRoutes: Routes = [
{ path: 'collation', component: CollationComponent },
{ path: 'textSources', component: TextSourcesComponent },
{ path: 'textVersions', component: TextVersionsComponent },
{ path: 'documentalMixed', component: DocumentalMixedComponent },
];
@NgModule({
imports: [RouterModule.forRoot(appRoutes, { relativeLinkResolution: 'legacy' })],
Expand Down
35 changes: 28 additions & 7 deletions src/app/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class AppConfig {
]).pipe(
map(([ui, edition, editorialConventions]) => {
console.log(ui, edition, files);
this.updateStyleFromConfig(edition);
this.updateStyleFromConfig(edition, ui);
// Handle default values => TODO: Decide how to handle defaults!!
if (ui.defaultLocalization) {
if (ui.availableLanguages.find((l) => l.code === ui.defaultLocalization && l.enable)) {
Expand Down Expand Up @@ -61,12 +61,16 @@ export class AppConfig {
* this way we don't need to inject a style property in each element
* @param edition EditionConfig
*/
updateStyleFromConfig(edition: EditionConfig) {
updateStyleFromConfig(edition: EditionConfig, ui: UiConfig) {
const rules = [];
rules['.' + AnalogueClass + ' .opened'] = `background-color: ${edition.readingColorDark}`;
rules['.' + SourceClass + ' .opened'] = `background-color: ${edition.readingColorDark}`;
rules['.' + AnalogueClass + ':hover'] = `background-color: ${edition.readingColorLight}; cursor:pointer`;
rules['.' + SourceClass + ':hover'] = `background-color: ${edition.readingColorLight}; cursor:pointer`;
rules['.edition-font'] = `font-family: ${ui.mainFontFamily}; font-size: ${ui.mainFontSize};`;
rules['.app-detail-tabs .nav-link'] = `font-family: ${ui.secondaryFontFamily};`;
rules['.ui-font'] = `font-family: ${ui.secondaryFontFamily}; font-size: ${ui.secondaryFontSize};`;
rules['.app-detail-tabs'] = `font-family: ${ui.secondaryFontFamily};`;
rules['.' + AnalogueClass + ' .opened'] = `background-color: ${edition.readingColorDark};`;
rules['.' + SourceClass + ' .opened'] = `background-color: ${edition.readingColorDark};`;
rules['.' + AnalogueClass + ':hover'] = `background-color: ${edition.readingColorLight}; cursor:pointer;`;
rules['.' + SourceClass + ':hover'] = `background-color: ${edition.readingColorLight}; cursor:pointer;`;
Object.entries(rules).forEach(([selector,style]) => { updateCSS([[selector,style]]) });
}

Expand All @@ -92,6 +96,10 @@ export interface UiConfig {
initNavBarOpened: boolean;
thumbnailsButton: boolean;
viscollButton: boolean;
mainFontFamily: string;
mainFontSize: string;
secondaryFontFamily: string;
secondaryFontSize: string;
theme: 'neutral' | 'modern' | 'classic';
syncZonesHighlightButton: boolean;
}
Expand All @@ -101,6 +109,7 @@ export interface EditionConfig {
badge: string;
editionHome: string;
showLists: boolean;
downloadableXMLSource: boolean;
availableEditionLevels: EditionLevel[];
namedEntitiesLists: Partial<{
persons: NamedEntitiesListsConfig;
Expand Down Expand Up @@ -132,6 +141,17 @@ export interface EditionConfig {
}>;
analogueMarkers: string[];
sourcesExcludedFromListByParent: string[];
showChangeLayerMarkerInText: boolean;
showSeparatorBetweenChanges: boolean;
changeSequenceView: Partial<{
showVarSeqAttr: boolean;
showSeqAttr: boolean;
layerColors: string[];
}>;
startingFromDefinitiveLayer: boolean;
defaultImageZoomLevel: number;
showSubstitutionMarker: boolean;
multiPageEngineForCriticalEdition: boolean;
}

export type EditionImagesSources = 'manifest' | 'graphics';
Expand Down Expand Up @@ -162,12 +182,13 @@ export interface NamedEntitiesListsConfig {
defaultLabel: string;
enable: boolean;
}
export type EditionLevelType = 'diplomatic' | 'interpretative' | 'critical';
export type EditionLevelType = 'diplomatic' | 'interpretative' | 'critical' | 'changesView';
export interface EditionLevel {
id: EditionLevelType;
label: string;
title?: string;
enable?: boolean;
hidden?: boolean;
}

export interface EditorialConventionsConfig {
Expand Down
18 changes: 16 additions & 2 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@ import { ApparatusEntryDetailComponent } from './components/apparatus-entry/appa
import { ApparatusEntryReadingsComponent } from './components/apparatus-entry/apparatus-entry-readings/apparatus-entry-readings.component';
import { BiblioEntryComponent } from './components/biblio/biblio.component';
import { BiblioListComponent } from './components/biblioList/biblio-list.component';
import { ChangeLayerSelectorComponent } from './components/change-layer-selector/change-layer-selector.component';
import { CharComponent } from './components/char/char.component';
import { ChoiceComponent } from './components/choice/choice.component';
import { CollationComponent } from './view-modes/collation/collation.component';
import { ContentViewerComponent } from './components/content-viewer/content-viewer.component';
import { CriticalApparatusComponent } from './components/critical-apparatus/critical-apparatus.component';
import { DamageComponent } from './components/damage/damage.component';
import { DeletionComponent } from './components/deletion/deletion.component';
import { DocumentalMixedComponent } from './view-modes/documental-mixed/documental-mixed.component';
import { EditionLevelSelectorComponent } from './components/edition-level-selector/edition-level-selector.component';
import { EditionStmtComponent } from './components/edition-stmt/edition-stmt.component';
import { EditorialConventionLayoutDirective } from './directives/editorial-convention-layout.directive';
Expand Down Expand Up @@ -72,6 +74,10 @@ import { LbComponent } from './components/lb/lb.component';
import { MainHeaderComponent } from './main-header/main-header.component';
import { MainMenuComponent } from './main-menu/main-menu.component';
import { ManuscriptThumbnailsViewerComponent } from './components/manuscript-thumbnails-viewer/manuscript-thumbnails-viewer.component';
import { ModComponent } from './components/mod/mod.component';
import { ModDetailComponent } from './components/mod/mod-detail/mod-detail.component';
import { ModGroupComponent } from './components/mod/mod-group/mod-group.component';
import { ModSequenceComponent } from './components/mod/mod-sequence/mod-sequence.component';
import { MsContentsComponent } from './components/ms-contents/ms-contents.component';
import { MsDescComponent } from './components/ms-desc/ms-desc.component';
import { MsDescSectionComponent } from './ui-components/ms-desc-section/ms-desc-section.component';
Expand All @@ -88,6 +94,7 @@ import { NamedEntityRefComponent } from './components/named-entity-ref/named-ent
import { NamedEntityRelationComponent } from './components/named-entity-relation/named-entity-relation.component';
import { NamespaceComponent } from './components/namespace/namespace.component';
import { NavBarComponent } from './nav-bar/nav-bar.component';
import { NavBarImageComponent } from './nav-bar-image/nav-bar-image.component';
import { NoteComponent } from './components/note/note.component';
import { NotesStmtComponent } from './components/notes-stmt/notes-stmt.component';
import { OriginalEncodingViewerComponent } from './components/original-encoding-viewer/original-encoding-viewer.component';
Expand Down Expand Up @@ -117,6 +124,7 @@ import { SourceNoteComponent } from './components/sources/source-note/source-not
import { SourcesComponent } from './components/sources/sources.component';
import { SourcesPanelComponent } from './panels/sources-panel/sources-panel.component';
import { StartsWithPipe } from './pipes/starts-with.pipe';
import { SubstitutionComponent } from './components/substitution/substitution.component';
import { SuppliedComponent } from './components/supplied/supplied.component';
import { SurplusComponent } from './components/surplus/surplus.component';
import { TagsDeclComponent } from './components/tags-decl/tags-decl.component';
Expand All @@ -129,9 +137,8 @@ import { ThemesService } from './services/themes.service';
import { TitleStmtComponent } from './components/title-stmt/title-stmt.component';
import { VerseComponent } from './components/verse/verse.component';
import { VersesGroupComponent } from './components/verses-group/verses-group.component';
import { WordComponent } from './components/word/word.component';
import { NavBarImageComponent } from './nav-bar-image/nav-bar-image.component';
import { VersionPanelComponent } from './panels/version-panel/version-panel.component';
import { WordComponent } from './components/word/word.component';
import { WitnessPanelComponent } from './panels/witness-panel/witness-panel.component';
import { XmlBeautifyPipe } from './pipes/xml-beautify.pipe';
import { XMLParsers } from './services/xml-parsers/xml-parsers';
Expand Down Expand Up @@ -209,9 +216,11 @@ const DynamicComponents = [
AppComponent,
BiblioEntryComponent,
BiblioListComponent,
ChangeLayerSelectorComponent,
CollationComponent,
ContentViewerComponent,
CriticalApparatusComponent,
DocumentalMixedComponent,
EditionLevelSelectorComponent,
EditorialConventionLayoutDirective,
EntitiesSelectComponent,
Expand All @@ -230,6 +239,10 @@ const DynamicComponents = [
MainHeaderComponent,
MainMenuComponent,
ManuscriptThumbnailsViewerComponent,
ModComponent,
ModDetailComponent,
ModGroupComponent,
ModSequenceComponent,
MsDescSectionComponent,
MsDescSelectorComponent,
NamedEntityOccurrenceComponent,
Expand All @@ -250,6 +263,7 @@ const DynamicComponents = [
SourcesComponent,
SourcesPanelComponent,
StartsWithPipe,
SubstitutionComponent,
TextPanelComponent,
TextSourcesComponent,
TextTextComponent,
Expand Down
3 changes: 2 additions & 1 deletion src/app/components/addition/addition.component.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<span class="add" [attr.data-edition]="editionLevel" [attr.data-place]="data.place"
[evtHighlight]="highlightData" [evtEditorialConventionLayout]="editorialConventionData">
<evt-content-viewer *ngFor="let element of data.content" [content]="element"
[editionLevel]="editionLevel" [itemsToHighlight]="itemsToHighlight"></evt-content-viewer>
[editionLevel]="editionLevel" [itemsToHighlight]="itemsToHighlight"
[withDeletions]="withDeletions" [selectedLayer]="selectedLayer"></evt-content-viewer>
</span>
6 changes: 4 additions & 2 deletions src/app/components/addition/addition.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { EditorialConventionLayoutData } from '../../directives/editorial-conven
import { Addition } from '../../models/evt-models';
import { register } from '../../services/component-register.service';
import { EditorialConventionDefaults } from '../../services/editorial-conventions.service';
import { EditionlevelSusceptible, Highlightable } from '../components-mixins';
import { EditionlevelSusceptible, Highlightable, ShowDeletionsSusceptible } from '../components-mixins';

export interface AdditionComponent extends EditionlevelSusceptible, Highlightable { }
export interface AdditionComponent extends EditionlevelSusceptible, Highlightable, ShowDeletionsSusceptible { }

@register(Addition)
@Component({
Expand All @@ -16,6 +16,7 @@ export interface AdditionComponent extends EditionlevelSusceptible, Highlightabl
})
export class AdditionComponent {
@Input() data: Addition;
@Input() selectedLayer: string;

get editorialConventionData(): EditorialConventionLayoutData {
return {
Expand All @@ -30,6 +31,7 @@ export class AdditionComponent {
switch (this.data.place) {
case 'above':
case 'sup':
case 'superscript':
return 'additionAbove';
case 'below':
case 'under':
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Analogue } from 'src/app/models/evt-models';
import { BehaviorSubject } from 'rxjs';
import { Component, Input } from '@angular/core';
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { EditionLevelType } from 'src/app/app.config';

@Component({
selector: 'evt-analogue-detail',
templateUrl: './analogue-detail.component.html',
styleUrls: ['./analogue-detail.component.scss','../../sources/sources.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AnalogueDetailComponent {
private edLevel: EditionLevelType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,18 @@
</span>
</ng-template>
</li>

<li ngbNavItem="corrSeq" *ngIf="data.changes.length > 0">
<a class="source-detail-btn" ngbNavLink>{{'corrSeq' | translate}}</a>
<ng-template ngbNavContent>
<evt-mod-sequence
[data]="data.changes"
[orderedLayers]="orderedLayers"
[selectedLayer]="selectedLayer">
</evt-mod-sequence>
</ng-template>
</li>

<li ngbNavItem="info">
<a class="app-detail-btn" ngbNavLink>{{'info' | translate}}</a>
<ng-template ngbNavContent>
Expand Down Expand Up @@ -72,10 +84,11 @@
</div>
</ng-template>
</li>

<li ngbNavItem="xml">
<a class="app-detail-btn" ngbNavLink>{{'xml' | translate}}</a>
<ng-template ngbNavContent>
<pre>{{ data.originalEncoding | xmlBeautify }}</pre>
<evt-original-encoding-viewer [originalEncoding]="data.originalEncoding"></evt-original-encoding-viewer>
</ng-template>
</li>
</ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@
.app-detail-tabs {
background-color: transparent;
font-size: 1.063rem;
font-family: Junicode, Times, serif;
}

.app-detail-content {
display: flex;
justify-content: space-between;
padding: 0.313rem;
padding: 0.2em 0 0 0;
background-color: rgba(32, 66, 81, 0.18);
}

Expand All @@ -37,13 +36,17 @@

.app-detail-tabs {
font-size: 1rem;
margin: 0 0.313rem 0 0.313rem;
padding: 0.313rem 0 0 0;
margin: 0;
padding: 0 0.4em 0 0.4em;
border-top: 3px double #000 !important;
.nav-link {
font-size: 0.85em;
padding-top: 0.8em;
display:inline-block;
background-color: transparent;
color: #000000;
line-height: 1;
padding: 0.25rem 0.375rem;
padding: 0.6rem 0.375rem 0.25rem 0.5rem;
cursor: pointer;
border-radius: 0;
&.active {
Expand All @@ -62,7 +65,7 @@
}
}
.tab-content {
padding: 0.625rem 0.813rem;
padding: 0.4rem 0.813rem;
max-height: 12.5rem;
overflow: auto;
.info-lemma-wrapper {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
import { ApparatusEntry, GenericElement, Reading } from '../../../models/evt-models';
import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';
import { ApparatusEntry, ChangeLayerData, GenericElement, Reading } from '../../../models/evt-models';
import { register } from '../../../services/component-register.service';
import { EVTModelService } from '../../../services/evt-model.service';
import { distinctUntilChanged } from 'rxjs';
import { EVTStatusService } from 'src/app/services/evt-status.service';
@Component({
selector: 'evt-apparatus-entry-detail',
templateUrl: './apparatus-entry-detail.component.html',
Expand All @@ -10,11 +12,18 @@ import { EVTModelService } from '../../../services/evt-model.service';
})

@register(ApparatusEntryDetailComponent)
export class ApparatusEntryDetailComponent implements OnInit {
export class ApparatusEntryDetailComponent implements OnInit, OnDestroy {

private subscriptions;

@Input() data: ApparatusEntry;
nestedApps: ApparatusEntry[] = [];
rdgHasCounter = false;

@Input() selectedLayer: string;

public orderedLayers: string[];

get significantRdg(): Reading[] {
return this.data.readings.filter((rdg) => rdg?.significant);
}
Expand All @@ -35,15 +44,25 @@ export class ApparatusEntryDetailComponent implements OnInit {
}), {});
}

getLayerData(changeData: ChangeLayerData) {
this.orderedLayers = changeData?.layerOrder;
}

constructor(
public evtModelService: EVTModelService,
public evtStatusService: EVTStatusService,
) {
}

ngOnInit() {
if (this.data.nestedAppsIDs.length > 0) {
this.recoverNestedApps(this.data);
}
this.subscriptions = this.evtStatusService.currentChanges$.pipe(distinctUntilChanged()).subscribe(({ next: (data) => this.getLayerData(data) }));
}

ngOnDestroy() {
this.subscriptions.unsubscribe();
}

recoverNestedApps(app: ApparatusEntry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
It's necessary to handle both readings with and without nested apps, because nested apps inside app-entry-detail have different behaviour,
so we can't use apparatus-entry-component to render them.
-->
<evt-reading *ngIf="data.nestedAppsIDs.length === 0" [data]="data.lemma"></evt-reading>
<evt-reading *ngIf="data.nestedAppsIDs.length === 0" [data]="data.lemma" [selectedLayer]="selectedLayer"></evt-reading>
<ng-container *ngIf="data.nestedAppsIDs.length > 0">
<ng-container *ngTemplateOutlet="template context: { rdgHasCounter: rdgHasCounter }"></ng-container>
</ng-container>
Expand All @@ -13,7 +13,7 @@
<span>] </span>
</span>
<span class="app-entry-reading" *ngFor="let el of significantRdg">
<evt-reading *ngIf="el.content.length !== 0" [data]="el"></evt-reading>
<evt-reading *ngIf="el.content.length !== 0" [data]="el" [selectedLayer]="selectedLayer"></evt-reading>
<span class="font-italic" *ngIf="el.content.length === 0">omit.</span>
<!-- TODO: handle lacunastart and lacunaend -->
<ng-container *ngFor="let witID of el.witIDs">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export class ApparatusEntryReadingsComponent {
@Input() rdgHasCounter: boolean;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@Input() template: TemplateRef<any>;
@Input() selectedLayer: string;

groups$ = this.evtModelService.groups$;

Expand Down
Loading

0 comments on commit 7fcaa80

Please sign in to comment.