diff --git a/app/db/src/app/app.module.ts b/app/db/src/app/app.module.ts index 4a12cf40..1169c169 100644 --- a/app/db/src/app/app.module.ts +++ b/app/db/src/app/app.module.ts @@ -11,15 +11,18 @@ import { NgxMdModule } from 'ngx-md'; import { SearchPage } from './search/components/search-page/search.page'; import { PassageComponent } from './search/components/passage/passage.component'; -import { StrongsComponent } from './search/components/strongs/strongs.component'; import { WordsComponent } from './search/components/words/words.component'; import { NoteComponent } from './search/components/note/note.component'; import { SettingsComponent } from './common/components/settings/settings.component'; +import { StrongsComponent } from './search/components/strongs/strongs.component'; +import { StrongsCardComponent } from './search/components/strongs/card/strongs-card.component'; +import { StrongsModalComponent } from './search/components/strongs/modal/strongs-modal.component'; + import { AddToPageModalComponent } from './search/components/add-to-page-modal/add-to-page-modal.component'; import { PageEditModalComponent } from './search/components/page-edit-modal/page-edit-modal.component'; import { NoteEditModalComponent } from './search/components/note-edit-modal/note-edit-modal.component'; -import { VersePickerModalComponent } from './search/components/verse-picker/verse-picker-modal.component'; +import { VersePickerModalComponent } from './search/components/verse-picker-modal/verse-picker-modal.component'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatButtonModule } from '@angular/material/button'; @@ -64,6 +67,8 @@ import { ClipboardModule } from '@angular/cdk/clipboard'; SearchPage, PassageComponent, StrongsComponent, + StrongsCardComponent, + StrongsModalComponent, WordsComponent, NoteComponent, PageEditModalComponent, diff --git a/app/db/src/app/common/components/card.component.ts b/app/db/src/app/common/components/card.component.ts index e5056cab..3f382af1 100644 --- a/app/db/src/app/common/components/card.component.ts +++ b/app/db/src/app/common/components/card.component.ts @@ -6,15 +6,15 @@ import { Component, } from '@angular/core'; import { CardItem, OpenData } from '../../models/app-state'; -import { BibleReference } from '../bible-reference'; import { Observable } from 'rxjs'; import { MatDialog } from '@angular/material/dialog'; import { AddToPageModalComponent } from 'src/app/search/components/add-to-page-modal/add-to-page-modal.component'; +import { SubscriberComponent } from './subscriber.component'; @Component({ template: '', }) -export class CardComponent { +export class CardComponent extends SubscriberComponent { @Output() onItemClicked = new EventEmitter(); @@ -26,7 +26,9 @@ export class CardComponent { icon$: Observable; - constructor(protected elementRef: ElementRef, protected dialog: MatDialog) {} + constructor(protected elementRef: ElementRef, protected dialog: MatDialog) { + super(); + } protected copyToClip(text: string, html: string) { function listener(e: ClipboardEvent) { @@ -62,10 +64,6 @@ export class CardComponent { }, d); } - makePassage(p: string) { - return BibleReference.makePassageFromReferenceKey(p); - } - addToSavedPage() { this.dialog.open(AddToPageModalComponent, { data: this.cardItem, diff --git a/app/db/src/app/search/components/add-to-page-modal/add-to-page-modal.component.scss b/app/db/src/app/search/components/add-to-page-modal/add-to-page-modal.component.scss index e5aef938..0cbe52ca 100644 --- a/app/db/src/app/search/components/add-to-page-modal/add-to-page-modal.component.scss +++ b/app/db/src/app/search/components/add-to-page-modal/add-to-page-modal.component.scss @@ -13,7 +13,8 @@ .content { min-width: 60vw; - min-height: 60vh; + min-height: 50vh; + max-height: 80vh; } .add-page-form { diff --git a/app/db/src/app/search/components/passage/passage.component.html b/app/db/src/app/search/components/passage/passage.component.html index 24e49a60..1bec020c 100644 --- a/app/db/src/app/search/components/passage/passage.component.html +++ b/app/db/src/app/search/components/passage/passage.component.html @@ -13,36 +13,38 @@
-
-

Chapter {{ ch.ch }}

- -

- {{ para.p.h }} -

+ +
+

Chapter {{ ch.ch }}

+ +

+ {{ para.p.h }} +

-

- - {{ vs.v }}. - - {{ w.t }}{{ - w.t - }}
-
-

-
-
+

+ + {{ vs.v }}. + + {{ w.t }}{{ + w.t + }}
+
+

+
+
+
diff --git a/app/db/src/app/search/components/passage/passage.component.ts b/app/db/src/app/search/components/passage/passage.component.ts index 8f8e97d4..9fa91d2b 100644 --- a/app/db/src/app/search/components/passage/passage.component.ts +++ b/app/db/src/app/search/components/passage/passage.component.ts @@ -4,6 +4,8 @@ import { AppService } from '../../../services/app.service'; import { CardComponent } from '../../../common/components/card.component'; import { Paragraph } from '../../../models/app-state'; import { MatDialog } from '@angular/material/dialog'; +import { StrongsComponent } from '../strongs/strongs.component'; +import { StrongsModalComponent } from '../strongs/modal/strongs-modal.component'; @Component({ selector: 'app-passage', @@ -29,6 +31,8 @@ export class PassageComponent extends CardComponent implements OnInit { (state) => state.displaySettings.showVerseNumbers ); + displaySettings$ = this.appService.select((state) => state.displaySettings); + @ViewChild('passage') passageElement: ElementRef; constructor( @@ -151,11 +155,18 @@ export class PassageComponent extends CardComponent implements OnInit { this.appService.updatePassage(this.cardItem, this.ref); } - openStrongs(q: string) { + async openStrongs(q: string, asModal = false) { const dict = this.cardItem.dict === 'H' ? 'heb' : 'grk'; const numbers = q.split(' '); for (const sn of numbers) { - this.appService.getStrongs(sn, dict, this.cardItem); + if (asModal) { + const card = await this.appService.getStrongsCard(sn, dict); + this.dialog.open(StrongsModalComponent, { + data: card, + }); + } else { + this.appService.getStrongs(sn, dict, this.cardItem); + } } } diff --git a/app/db/src/app/search/components/search-page/search.page.html b/app/db/src/app/search/components/search-page/search.page.html index 3481e150..e3f8f82f 100644 --- a/app/db/src/app/search/components/search-page/search.page.html +++ b/app/db/src/app/search/components/search-page/search.page.html @@ -43,12 +43,12 @@ (onClose)="removeCard(item)" (onItemClicked)="getItemsNextToCard($event)" > - + > + {{ + icon$ | async + }} + {{ cardItem.qry }} + +
+
+ +
+
+ + + + + + + + + + +
diff --git a/app/db/src/app/search/components/strongs/strongs.component.scss b/app/db/src/app/search/components/strongs/card/strongs-card.component.scss similarity index 100% rename from app/db/src/app/search/components/strongs/strongs.component.scss rename to app/db/src/app/search/components/strongs/card/strongs-card.component.scss diff --git a/app/db/src/app/search/components/strongs/card/strongs-card.component.ts b/app/db/src/app/search/components/strongs/card/strongs-card.component.ts new file mode 100644 index 00000000..b6600b37 --- /dev/null +++ b/app/db/src/app/search/components/strongs/card/strongs-card.component.ts @@ -0,0 +1,55 @@ +import { Component, ElementRef, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { AppService } from '../../../../services/app.service'; +import { CardComponent } from '../../../../common/components/card.component'; +import { BibleReference } from '../../../../common/bible-reference'; +import { StrongsModalComponent } from '../modal/strongs-modal.component'; + +@Component({ + selector: 'app-strongs-card', + templateUrl: 'strongs-card.component.html', + styleUrls: ['./strongs-card.component.scss'], + preserveWhitespaces: true, +}) +export class StrongsCardComponent extends CardComponent { + asModal = false; + @ViewChild('strongs') strongsElement: ElementRef; + + constructor( + protected elementRef: ElementRef, + protected appService: AppService, + protected dialog: MatDialog + ) { + super(elementRef, dialog); + this.icon$ = appService.select((state) => state.cardIcons.strongs); + this.addSubscription( + this.appService.state$.subscribe((state) => { + this.asModal = state.displaySettings.showStrongsAsModal; + }) + ); + } + + copy() { + const html = this.strongsElement.nativeElement.innerHTML; + const text = this.strongsElement.nativeElement.innerText; + this.copyToClip(text, html); + } + + async openStrongs(q: string) { + const dict = q.substr(0, 1) === 'H' ? 'heb' : 'grk'; + const sn = q.substr(1); + if (this.asModal) { + const card = await this.appService.getStrongsCard(sn, dict); + this.dialog.open(StrongsModalComponent, { + data: card, + }); + } else { + this.appService.getStrongs(sn, dict, this.cardItem); + } + } + + openPassage(p: string) { + const ref = BibleReference.makePassageFromReferenceKey(p); + this.appService.getPassage(ref, this.cardItem); + } +} diff --git a/app/db/src/app/search/components/strongs/modal/strongs-modal.component.html b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.html new file mode 100644 index 00000000..3fa4b72a --- /dev/null +++ b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.html @@ -0,0 +1,23 @@ +
+ + {{ + icon$ | async + }} +
{{ cardItem.qry }}
+ + + +
+
+ + + diff --git a/app/db/src/app/search/components/strongs/modal/strongs-modal.component.scss b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.scss new file mode 100644 index 00000000..34922475 --- /dev/null +++ b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.scss @@ -0,0 +1,17 @@ +.close-button { + float: right; + mat-icon { + font-size: 2rem; + } +} + +.title { + width: 100%; + padding-left: 1rem; + font-size: 1.5rem; +} + +.content { + min-width: 75vw; + max-height: 75vh; +} diff --git a/app/db/src/app/search/components/strongs/modal/strongs-modal.component.ts b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.ts new file mode 100644 index 00000000..04ae5e1a --- /dev/null +++ b/app/db/src/app/search/components/strongs/modal/strongs-modal.component.ts @@ -0,0 +1,34 @@ +import { Component, Inject } from '@angular/core'; +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { AppService } from '../../../../services/app.service'; +import { CardItem } from '../../../../models/app-state'; +import { BibleReference } from '../../../../common/bible-reference'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'app-strongs-modal', + templateUrl: 'strongs-modal.component.html', + styleUrls: ['./strongs-modal.component.scss'], +}) +export class StrongsModalComponent { + icon$: Observable; + + constructor( + @Inject(MAT_DIALOG_DATA) public cardItem: CardItem, + public dialogRef: MatDialogRef, + private appService: AppService + ) { + console.log(cardItem); + + this.icon$ = appService.select((state) => state.cardIcons.strongs); + } + + cancel() { + this.dialogRef.close(); + } + + openPassage(p: string) { + const ref = BibleReference.makePassageFromReferenceKey(p); + this.appService.getPassage(ref, this.cardItem); + } +} diff --git a/app/db/src/app/search/components/strongs/strongs.component.html b/app/db/src/app/search/components/strongs/strongs.component.html index 44415f06..a773bf1f 100644 --- a/app/db/src/app/search/components/strongs/strongs.component.html +++ b/app/db/src/app/search/components/strongs/strongs.component.html @@ -1,50 +1,33 @@ -
- {{ - icon$ | async - }} - {{ cardItem.qry }} - -
-
+

- {{ cardItem.data.def.tr }} - - {{ cardItem.data.def.p }} - {{ cardItem.data.def.lemma }} - - {{ data.def.tr }} + - {{ data.def.p }} - {{ data.def.lemma }} - + {{ part.sn }}{{ part.sn }}

- +

RMAC

- {{ cardItem.data.rmac.id }} + {{ data.rmac.id }}
    -
  • +
  • {{ c }}
-
+

Cross References

   Translated as - {{ cardItem.data.crossrefs.ss.length }} word(s) + {{ data.crossrefs.ss.length }} word(s)
-
+
{{ wrd.w }}, {{ wrd.rs.length }}:
-
-
- - - - - - - - - - -
+
diff --git a/app/db/src/app/search/components/strongs/strongs.component.ts b/app/db/src/app/search/components/strongs/strongs.component.ts index 4b475239..f2d14bd8 100644 --- a/app/db/src/app/search/components/strongs/strongs.component.ts +++ b/app/db/src/app/search/components/strongs/strongs.component.ts @@ -1,42 +1,33 @@ -import { Component, ElementRef, ViewChild } from '@angular/core'; -import { AppService } from '../../../services/app.service'; -import { CardComponent } from '../../../common/components/card.component'; -import { MatDialog } from '@angular/material/dialog'; +import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { StrongsResult } from 'src/app/models/app-state'; +import { BibleReference } from 'src/app/common/bible-reference'; @Component({ selector: 'app-strongs', templateUrl: 'strongs.component.html', - styleUrls: ['./strongs.component.scss'], preserveWhitespaces: true, }) -export class StrongsComponent extends CardComponent { - @ViewChild('strongs') strongsElement: ElementRef; +export class StrongsComponent { + @Input() + data: StrongsResult; - constructor( - protected elementRef: ElementRef, - private appService: AppService, - public dialog: MatDialog - ) { - super(elementRef, dialog); - this.icon$ = appService.select((state) => state.cardIcons.strongs); - } + @Output() + onOpenPassage = new EventEmitter(); - copy() { - const html = this.strongsElement.nativeElement.innerHTML; - const text = this.strongsElement.nativeElement.innerText; - this.copyToClip(text, html); - } + @Output() + onOpenStrongs = new EventEmitter(); - openItem(p: string) { - this.onItemClicked.emit({ - card: this.cardItem, - qry: p, - from_search_bar: false, - }); - } + constructor() {} openPassage(p: string) { - const ref = this.makePassage(p); - this.appService.getPassage(ref, this.cardItem); + this.onOpenPassage.emit(p); + } + + openStrongs(q: string) { + this.onOpenStrongs.emit(q); + } + + makePassage(p: string) { + return BibleReference.makePassageFromReferenceKey(p); } } diff --git a/app/db/src/app/search/components/verse-picker/verse-picker-modal.component.html b/app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.html similarity index 100% rename from app/db/src/app/search/components/verse-picker/verse-picker-modal.component.html rename to app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.html diff --git a/app/db/src/app/search/components/verse-picker/verse-picker-modal.component.scss b/app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.scss similarity index 100% rename from app/db/src/app/search/components/verse-picker/verse-picker-modal.component.scss rename to app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.scss diff --git a/app/db/src/app/search/components/verse-picker/verse-picker-modal.component.ts b/app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.ts similarity index 100% rename from app/db/src/app/search/components/verse-picker/verse-picker-modal.component.ts rename to app/db/src/app/search/components/verse-picker-modal/verse-picker-modal.component.ts diff --git a/app/db/src/app/search/components/words/words.component.ts b/app/db/src/app/search/components/words/words.component.ts index 45b1a173..b16626b4 100644 --- a/app/db/src/app/search/components/words/words.component.ts +++ b/app/db/src/app/search/components/words/words.component.ts @@ -3,6 +3,7 @@ import { AppService } from '../../../services/app.service'; import { CardComponent } from '../../../common/components/card.component'; import { WordLookupResult } from 'src/app/models/app-state'; import { MatDialog } from '@angular/material/dialog'; +import { BibleReference } from 'src/app/common/bible-reference'; @Component({ selector: 'app-words', @@ -24,7 +25,7 @@ export class WordsComponent extends CardComponent { copy() { const refs = (this.cardItem.data as WordLookupResult).refs.map((ref) => - this.makePassage(ref) + BibleReference.makePassageFromReferenceKey(ref) ); const html = refs @@ -44,8 +45,12 @@ export class WordsComponent extends CardComponent { }); } + makePassage(p: string) { + return BibleReference.makePassageFromReferenceKey(p); + } + openPassage(p: string) { - const ref = this.makePassage(p); + const ref = BibleReference.makePassageFromReferenceKey(p); this.appService.getPassage(ref, this.cardItem); } } diff --git a/app/db/src/app/services/app.service.ts b/app/db/src/app/services/app.service.ts index 46c95447..09b10152 100644 --- a/app/db/src/app/services/app.service.ts +++ b/app/db/src/app/services/app.service.ts @@ -540,6 +540,16 @@ export class AppService extends createStateService(reducer, initialState) { dict: DictionaryType, nextToItem: CardItem = null ) { + const card = await this.getStrongsCard(strongsNumber, dict); + + this.dispatch({ + type: 'ADD_CARD', + card, + nextToItem, + }); + } + + async getStrongsCard(strongsNumber: string, dict: string) { const result = await this.getStrongsFromApi(strongsNumber, dict); const d = dict === 'grk' ? 'G' : 'H'; @@ -549,12 +559,7 @@ export class AppService extends createStateService(reducer, initialState) { type: 'Strongs', data: result, }; - - this.dispatch({ - type: 'ADD_CARD', - card, - nextToItem, - }); + return card; } private async getStrongsFromApi(strongsNumber: string, dict: string) {