FEATURE: Added links to strongs #s in strongs reference display

* cleaned up the code in the utility
  * added break in menu to dilineate saved pages
This commit is contained in:
walljm 2017-01-20 18:57:02 -05:00
parent 72207e327d
commit 1947ab51a2
174 changed files with 460 additions and 3382 deletions

View File

@ -40,3 +40,5 @@ DynamicBibleIonic/.idea
DynamicBibleIonic/nbproject
DynamicBibleIonic/obj
DynamicBibleIonic/bin
DynamicBibleIonic/.vscode
DynamicBibleUtility/.vs

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,23 @@
<ion-menu [content]="content">
<ion-header>
<ion-toolbar>
<ion-title>Pages</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<button ion-item *ngFor="let p of pagesSvc.getResult()" (click)="openPage(p)">
{{p.title}}
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>
<ion-menu [content]="content">
<ion-header>
<ion-toolbar>
<ion-title>Pages</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<button ion-item *ngFor="let p of pagesSvc.getMainPages()" (click)="openPage(p)">
{{p.title}}
</button>
</ion-list>
<ion-list>
<ion-list-header>
Saved Pages
</ion-list-header>
<button ion-item *ngFor="let p of pagesSvc.getSavedPages()" (click)="openPage(p)">
{{p.title}}
</button>
</ion-list>
</ion-content>
</ion-menu>
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>

View File

@ -18,4 +18,11 @@
.item-md {
padding: 0px !important;
padding-left: 16px !important;
}
ion-menu{
ion-list-header{
font-size: 1.4em !important;
margin-bottom: 0 !important;
}
}

View File

@ -13,11 +13,8 @@
</h2>
<span *ngFor="let vs of ch.vss">
<b>{{vs.v}}.</b> <span *ngFor="let w of vs.w">
<template [ngIf]="!isPunct(w.t)">
</template><a *ngIf="w.s != null" (click)="openStrongs(w.s)" (press)="openMenu(w.s)">{{w.t}}</a>
<template [ngIf]="!(w.s != null)">
{{w.t}}
</template>
<template [ngIf]="!isPunct(w.t)"> </template><a *ngIf="w.s != null" (click)="openStrongs(w.s)" (press)="openMenu(w.s)">{{w.t}}</a>
<template [ngIf]="w.s == null">{{w.t}}</template>
</span><br>
</span>
</div>

View File

@ -13,7 +13,7 @@ passage .passage-text {
padding-top: 12px;
}
@media screen and (min-width: 700px) and (max-width: 949px) {
@media screen and (min-width: 800px) {
passage .passage-text {
-webkit-column-count: 2; /* Chrome, Safari, Opera */
-moz-column-count: 2; /* Firefox */
@ -29,20 +29,3 @@ passage .passage-text {
column-rule-width: 1px;
}
}
@media screen and (min-width: 950px) {
passage .passage-text {
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
-webkit-column-gap: 30px; /* Chrome, Safari, Opera */
-moz-column-gap: 30px; /* Firefox */
column-gap: 30px;
-webkit-column-rule-style: dotted; /* Chrome, Safari, Opera */
-moz-column-rule-style: dotted; /* Firefox */
column-rule-style: dotted;
-webkit-column-rule-width: 1px; /* Chrome, Safari, Opera */
-moz-column-rule-width: 1px; /* Firefox */
column-rule-width: 1px;
}
}

View File

@ -9,7 +9,7 @@ import { OpenData, CardItem } from "../../pages/search/search";
export class Passage
{
@Output()
onStrongsClicked = new EventEmitter<OpenData>();
onItemClicked = new EventEmitter<OpenData>();
@Output()
onClose = new EventEmitter<CardItem>();
@ -30,13 +30,16 @@ export class Passage
{
this.onClose.emit(this.cardItem);
}
openStrongs(strongs: string)
{
this.onStrongsClicked.emit({ card: this.cardItem, qry: this.dict + strongs });
this.onItemClicked.emit({ card: this.cardItem, qry: this.dict + strongs });
}
openMenu(strongs: string)
{
}
isPunct(c: string)
{
return new RegExp('^[\.\,\;\:\?\!]$').test(c)

View File

@ -14,7 +14,9 @@
<br>
<h2>Strongs Definitition</h2>
<p>
<b>{{item.def.tr}} ({{item.def.sn}})</b> - {{item.def.p}} - {{item.def.lemma}} - <span [innerHTML]="item.def.de"></span><br>
<b>{{item.def.tr}} <template [ngIf]="item.def.sn != null">({{item.def.sn}})</template></b>
- {{item.def.p}} - {{item.def.lemma}} -
<span *ngFor="let part of item.def.de"><template [ngIf]="part.sn != null"><a (click)="openItem(part.sn)">{{part.sn}}</a></template><template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></template></span><br>
</p>
<template [ngIf]="item.rmac !== null">
<h2>RMAC</h2>

View File

@ -0,0 +1,5 @@
strongs-modal {
a {
cursor: pointer !important;
}
}

View File

@ -12,7 +12,7 @@ export class StrongsModal
item: StrongsResult;
@Output()
onPassageClicked = new EventEmitter<string>();
onItemClicked = new EventEmitter<string>();
constructor(
public platform: Platform,
@ -21,8 +21,8 @@ export class StrongsModal
)
{
this.item = this.params.get('strongsid') as StrongsResult;
this.onPassageClicked.subscribe(item =>
this.params.get('onPassageClicked').getItems(item)
this.onItemClicked.subscribe(item =>
this.params.get('onItemClicked').getItems(item)
)
}
@ -30,13 +30,20 @@ export class StrongsModal
{
this.viewCtrl.dismiss();
}
openItem(p: string)
{
this.onItemClicked.emit(p);
}
makePassage(p: string)
{
return Reference.bookName(parseInt(p.split(";")[0])) + ' ' + p.split(";")[1] + ":" + p.split(";")[2];
}
openPassage(p: string)
{
let ref = this.makePassage(p);
this.onPassageClicked.emit(ref);
this.onItemClicked.emit(ref);
}
}

View File

@ -9,7 +9,9 @@
<div class="strongs-def">
<h2>Strongs Definitition</h2>
<p>
<b>{{item.def.tr}} ({{item.def.sn}})</b> - {{item.def.p}} - {{item.def.lemma}} - <span [innerHTML]="item.def.de"></span><br>
<b>{{item.def.tr}} <template [ngIf]="item.def.sn != null">({{item.def.sn}})</template></b>
- {{item.def.p}} - {{item.def.lemma}} -
<span *ngFor="let part of item.def.de"><template [ngIf]="part.sn != null"><a (click)="openItem(part.sn)">{{part.sn}}</a></template><template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></template></span><br>
</p>
<template [ngIf]="item.rmac !== null">
<h2>RMAC</h2>

View File

@ -8,7 +8,7 @@
strongs {
ion-scroll {
height: 250px;
height: 200px;
}
.strongs-def {

View File

@ -13,7 +13,7 @@ export class Strongs
onClose = new EventEmitter<CardItem>();
@Output()
onPassageClicked = new EventEmitter<OpenData>();
onItemClicked = new EventEmitter<OpenData>();
@Input()
item: StrongsResult;
@ -29,13 +29,21 @@ export class Strongs
{
this.onClose.emit(this.cardItem);
}
openItem(p: string)
{
this.onItemClicked.emit({ card: this.cardItem, qry: p });
}
makePassage(p: string)
{
return Reference.bookName(parseInt(p.split(";")[0])) + ' ' + p.split(";")[1] + ":" + p.split(";")[2];
}
openPassage(p: string)
{
let ref = this.makePassage(p);
this.onPassageClicked.emit({ card: this.cardItem, qry: ref });
this.onItemClicked.emit({ card: this.cardItem, qry: ref });
}
}

View File

@ -13,7 +13,7 @@ export class Words
onClose = new EventEmitter<CardItem>();
@Output()
onPassageClicked = new EventEmitter<OpenData>();
onItemClicked = new EventEmitter<OpenData>();
@Input()
item: WordLookupResult;
@ -34,9 +34,10 @@ export class Words
{
return Reference.bookName(parseInt(p.split(":")[0])) + ' ' + p.split(":")[1] + ":" + p.split(":")[2];
}
openPassage(p: string)
{
let ref = this.makePassage(p);
this.onPassageClicked.emit({ card: this.cardItem, qry: ref });
this.onItemClicked.emit({ card: this.cardItem, qry: ref });
}
}

View File

@ -28,8 +28,8 @@
<ion-card *ngFor="let item of userProfile.user.items">
<error *ngIf="isError(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)"></error>
<passage *ngIf="isPassage(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" [dict]="item.dict" (onStrongsClicked)="getItemsNextToCard($event)"></passage>
<strongs *ngIf="isStrongs(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" (onPassageClicked)="getItemsNextToCard($event)"></strongs>
<words *ngIf="isWords(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" (onPassageClicked)="getItemsNextToCard($event)"></words>
<passage *ngIf="isPassage(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" [dict]="item.dict" (onItemClicked)="getItemsNextToCard($event)"></passage>
<strongs *ngIf="isStrongs(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" (onItemClicked)="getItemsNextToCard($event)"></strongs>
<words *ngIf="isWords(item.type)" [cardItem]="item" [item]="item.data" (onClose)="removeItem($event)" (onItemClicked)="getItemsNextToCard($event)"></words>
</ion-card>
</ion-content>

View File

@ -1,5 +1,5 @@
import { Type, Component } from '@angular/core';
import { Loading, LoadingController, ModalController, NavController, MenuController, ViewController, App, NavParams, IonicApp } from 'ionic-angular';
import { Loading, LoadingController, ModalController, NavParams } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import { StrongsModal } from '../../components/strongs-modal/strongs-modal';
@ -26,16 +26,14 @@ export class SearchPage
saved_results_title: string = "";
constructor(
private strongsService: StrongsService
, private bibleService: BibleService
, private wordService: WordService
, private pagesService: PagesService
, public loadingCtrl: LoadingController
, public modalCtrl: ModalController
, public navCtl: NavController
, public menuCtl: MenuController
, public local: Storage
, public params: NavParams
private strongsService: StrongsService
,private bibleService: BibleService
,private wordService: WordService
,private pagesService: PagesService
,public loadingCtrl: LoadingController
,public modalCtrl: ModalController
,public local: Storage
,public params: NavParams
)
{
this.userProfile = new UserProfile(UserProfile.createDefaultUser());
@ -75,7 +73,7 @@ export class SearchPage
presentStrongsModal(strongs: StrongsResult)
{
let modal = this.modalCtrl.create(StrongsModal, { strongsid: strongs, onPassageClicked: this });
let modal = this.modalCtrl.create(StrongsModal, { strongsid: strongs, onItemClicked: this });
modal.present();
}

View File

@ -2,7 +2,7 @@ import {getTestBed, TestBed} from '@angular/core/testing';
import {BaseRequestOptions, HttpModule, Http,} from '@angular/http';
import {MockBackend} from '@angular/http/testing';
import {BibleService} from './bible-service';
import {Reference} from './Reference';
import {Reference} from '../libs/Reference';
describe('Bible Service', () =>
{

View File

@ -8,6 +8,7 @@ import { SavedPage } from "../libs/UserProfile";
export class PagesService
{
pages: Array<{ title: string, component: any, params: any }>;
savedPages: Array<{ title: string, component: any, params: any }>;
constructor(public local: Storage)
{
@ -15,16 +16,22 @@ export class PagesService
{ title: 'Search', component: SearchPage, params: { queries: []} },
{ title: 'Settings', component: SettingsPage, params: {} }
];
this.savedPages = [];
}
getResult(): Array<{ title: string, component: any }>
getMainPages(): Array<{ title: string, component: any }>
{
return this.pages;
}
getSavedPages(): Array<{ title: string, component: any }>
{
return this.savedPages;
}
addPage(page: SavedPage)
{
this.pages.push({ title: page.title, component: SearchPage, params: { queries: page.queries } });
this.savedPages.push({ title: page.title, component: SearchPage, params: { queries: page.queries } });
}
initializePages(page_array: SavedPage[])
@ -33,10 +40,11 @@ export class PagesService
{ title: 'Search', component: SearchPage, params: { queries: [] } },
{ title: 'Settings', component: SettingsPage, params: {} }
];
this.savedPages = [];
for (let p of page_array)
{
this.pages.push({ title: p.title, component: SearchPage, params: { queries: p.queries } });
this.savedPages.push({ title: p.title, component: SearchPage, params: { queries: p.queries } });
}
}
}

View File

@ -3,55 +3,62 @@ import { BaseRequestOptions, HttpModule, Http, } from '@angular/http';
import { MockBackend } from '@angular/http/testing';
import { StrongsService } from './strongs-service';
describe('Strongs Service', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpModule],
providers: [
StrongsService,
describe('Strongs Service', () =>
{
beforeEach(() =>
{
TestBed.configureTestingModule({
imports: [HttpModule],
providers: [
StrongsService,
{
provide: Http,
useFactory: function (backend, defaultOptions)
{
return new Http(backend, defaultOptions);
},
deps: [MockBackend, BaseRequestOptions]
},
MockBackend,
BaseRequestOptions
]
});
});
it('Should return an error status', () =>
{
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(6000, "grk");
});
it('Should get G2396', () =>
{
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(2396, "grk");
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
for (let j = 1; j <= 5624; j++)
{
it('Get G' + j, () =>
{
provide: Http,
useFactory: function (backend, defaultOptions) {
return new Http(backend, defaultOptions);
},
deps: [MockBackend, BaseRequestOptions]
},
MockBackend,
BaseRequestOptions
]
});
});
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(j, "grk");
it('Should return an error status', () => {
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(6000, "grk");
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
}
});
it('Should get G2396', () => {
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(2396, "grk");
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
for (let j = 1; j <= 5624; j++) {
it('Get G' + j, () => {
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(j, "grk");
for (let j = 1; j <= 8674; j++)
{
it('Get H' + j, () =>
{
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(j, "heb");
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
}
for (let j = 1; j <= 8674; j++) {
it('Get H' + j, () => {
let svc: StrongsService = getTestBed().get(StrongsService);
let r = svc.getResult(j, "heb");
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
}
});
expect(r.msg).toBe(':)');
expect(r.status).toBe(0);
});
}
});

View File

@ -169,8 +169,8 @@ export type StrongsResult =
msg: string
};
type StrongsDefinition = { n: number, i: string, tr: string, de: string, lemma: string, p: string }
type StrongsDefinition = { n: number, i: string, tr: string, de: StrongsDefinitionPart[], lemma: string, p: string }
type StrongsDefinitionPart = { sn: string, w: string }
type StrongsCrossReference =
{
id: string, // strongs id H1|G1

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
[{"n":3201,"i":"G3201","p":"mem'-fom-ahee","lemma":"μέμφομαι","tr":"memphomai","de":"Middle voice of an apparently primary verb; to <b><em>blame:</em></b> - find fault."},{"n":3202,"i":"G3202","p":"mem-psim'-oy-ros","lemma":"μεμψίμοιρος","tr":"mempsimoiros","de":"From a presumed derivative of G3201 and <greek>μοῖρα</greek> moira (<em>fate</em>; akin to the base of G3313);<br /><em>blaming fate</em> that is <em>querulous</em> (<em>discontented</em>): - complainer."},{"n":3303,"i":"G3303","p":"men","lemma":"μέν","tr":"men","de":"A primary particle; properly indicative of <em>affirmation</em> or <em>concession</em> (<em>in fact</em>); usually followed by a <em>contrasted</em> clause with G1161 (<em>this</em> one the <em>former</em><b>etc.:</b> - even indeed so some truly verily. Often compounded with other particles in an <em>intensive</em> or <em>asseverative</em> sense."}]
[{"n":3201,"i":"G3201","p":"mem'-fom-ahee","lemma":"μέμφομαι","tr":"memphomai","de":[{"w":"Middle voice of an apparently primary verb; to <b> <em>blame:</em> </b> - find fault."}]},{"n":3202,"i":"G3202","p":"mem-psim'-oy-ros","lemma":"μεμψίμοιρος","tr":"mempsimoiros","de":[{"w":"From a presumed derivative of "},{"sn":"G3201"},{"w":" and <greek>μοῖρα</greek> moira (<em>fate</em>; akin to the base of "},{"sn":"G3313"},{"w":"); <br /> <em>blaming fate</em> that is <em>querulous</em> (<em>discontented</em>): - complainer."}]},{"n":3303,"i":"G3303","p":"men","lemma":"μέν","tr":"men","de":[{"w":"A primary particle; properly indicative of <em>affirmation</em> or <em>concession</em> (<em>in fact</em>); usually followed by a <em>contrasted</em> clause with "},{"sn":"G1161"},{"w":" (<em>this</em> one the <em>former</em> <b>etc.:</b> - even indeed so some truly verily. Often compounded with other particles in an <em>intensive</em> or <em>asseverative</em> sense."}]}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More