* update strongs cross references to pull from kjv source file. there were missing cross references that needed restoring

* fixed display of strongs when there were more than one sn for a given word.
* added ability to look up references in the b:ch:v format
This commit is contained in:
walljm 2019-08-05 14:46:30 -04:00
parent b0b7b696e9
commit 4fa1040ea0
173 changed files with 2791 additions and 230818 deletions

View File

@ -0,0 +1,4 @@
{
"printWidth": 120,
"singleQuote": false
}

File diff suppressed because one or more lines are too long

View File

@ -1,9 +1,14 @@
FROM ubuntu:16.04 FROM ubuntu:16.04
ENV DEBIAN_FRONTEND=noninteractive \ ENV DEBIAN_FRONTEND=noninteractive \
NODE_VERSION=10.13.0 \ ANDROID_HOME=/opt/android-sdk-linux \
NPM_VERSION=6.5.0 \ NODE_VERSION=10.13.0 \
IONIC_VERSION=4.6.0 NPM_VERSION=6.5.0 \
IONIC_VERSION=4.6.0 \
CORDOVA_VERSION=8.0.0 \
GRADLE_VERSION=4.10.2 \
SCMNAME="Jason Wall" \
SCMEMAIL="jason@walljm.com"
# Install basics # Install basics
RUN apt-get update RUN apt-get update
@ -16,11 +21,53 @@ RUN npm install -g cordova@"$CORDOVA_VERSION" ionic@"$IONIC_VERSION"
RUN npm cache clear --force RUN npm cache clear --force
RUN gem install sass RUN gem install sass
RUN git config --global user.email "${SCMEMAIL}" && \
git config --global user.name "${SCMNAME}"
RUN apt-get install software-properties-common -y RUN apt-get install software-properties-common -y
RUN add-apt-repository ppa:mercurial-ppa/releases RUN add-apt-repository ppa:mercurial-ppa/releases
RUN apt-get update RUN apt-get update
RUN apt-get install mercurial -y RUN apt-get install mercurial -y
# install python-software-properties (so you can do add-apt-repository)
RUN apt-get update && apt-get install -y -q python-software-properties software-properties-common && \
add-apt-repository ppa:webupd8team/java -y && \
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
apt-get update && apt-get -y install oracle-java8-installer
#ANDROID STUFF
RUN echo ANDROID_HOME="${ANDROID_HOME}" >> /etc/environment && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get install -y --force-yes expect ant wget zipalign libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 qemu-kvm kmod && \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Android SDK
RUN cd /opt && \
wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \
tar xzf android-sdk.tgz && \
rm -f android-sdk.tgz && \
chown -R root. /opt
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-"$GRADLE_VERSION"-bin.zip && \
mkdir /opt/gradle && \
unzip -d /opt/gradle gradle-"$GRADLE_VERSION"-bin.zip && \
rm -rf gradle-"$GRADLE_VERSION"-bin.zip
# Setup environment
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/tools:/opt/gradle/gradle-"$GRADLE_VERSION"/bin
# Install sdk elements
COPY docker /opt/tools
RUN ["/opt/tools/android-accept-licenses.sh", "android update sdk --all --no-ui --filter platform-tools,tools,build-tools-26.0.2,android-27,android-26,build-tools-25.0.0,android-25,extra-android-support,extra-android-m2repository,extra-google-m2repository"]
RUN unzip ${ANDROID_HOME}/temp/*.zip -d ${ANDROID_HOME}
# Test First Build so that it will be faster later # Test First Build so that it will be faster later
WORKDIR /db WORKDIR /db
RUN hg clone https://walljm@bitbucket.org/walljm/dynamicbible RUN hg clone https://walljm@bitbucket.org/walljm/dynamicbible
@ -28,6 +75,8 @@ WORKDIR /db/dynamicbible/DynamicBibleIonic
RUN hg update main RUN hg update main
RUN ls -laF RUN ls -laF
RUN npm install RUN npm install
RUN ionic cordova platform add android
COPY docker/build_apk.sh /build.sh
EXPOSE 8100 35729 EXPOSE 8100 35729
CMD ["build.sh"] CMD ["build.sh"]

View File

@ -1,82 +0,0 @@
FROM ubuntu:16.04
ENV DEBIAN_FRONTEND=noninteractive \
ANDROID_HOME=/opt/android-sdk-linux \
NODE_VERSION=10.13.0 \
NPM_VERSION=6.5.0 \
IONIC_VERSION=4.6.0 \
CORDOVA_VERSION=8.0.0 \
GRADLE_VERSION=4.10.2 \
SCMNAME="Jason Wall" \
SCMEMAIL="jason@walljm.com"
# Install basics
RUN apt-get update
RUN apt-get install -y git wget curl unzip build-essential ruby ruby-dev ruby-ffi gcc make
RUN curl --retry 3 -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz"
RUN tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1
RUN rm "node-v$NODE_VERSION-linux-x64.tar.gz"
RUN npm install -g npm@"$NPM_VERSION"
RUN npm install -g cordova@"$CORDOVA_VERSION" ionic@"$IONIC_VERSION"
RUN npm cache clear --force
RUN gem install sass
RUN git config --global user.email "${SCMEMAIL}" && \
git config --global user.name "${SCMNAME}"
RUN apt-get install software-properties-common -y
RUN add-apt-repository ppa:mercurial-ppa/releases
RUN apt-get update
RUN apt-get install mercurial -y
# install python-software-properties (so you can do add-apt-repository)
RUN apt-get update && apt-get install -y -q python-software-properties software-properties-common && \
add-apt-repository ppa:webupd8team/java -y && \
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
apt-get update && apt-get -y install oracle-java8-installer
#ANDROID STUFF
RUN echo ANDROID_HOME="${ANDROID_HOME}" >> /etc/environment && \
dpkg --add-architecture i386 && \
apt-get update && \
apt-get install -y --force-yes expect ant wget zipalign libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 qemu-kvm kmod && \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Install Android SDK
RUN cd /opt && \
wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \
tar xzf android-sdk.tgz && \
rm -f android-sdk.tgz && \
chown -R root. /opt
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-"$GRADLE_VERSION"-bin.zip && \
mkdir /opt/gradle && \
unzip -d /opt/gradle gradle-"$GRADLE_VERSION"-bin.zip && \
rm -rf gradle-"$GRADLE_VERSION"-bin.zip
# Setup environment
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/tools:/opt/gradle/gradle-"$GRADLE_VERSION"/bin
# Install sdk elements
COPY docker /opt/tools
RUN ["/opt/tools/android-accept-licenses.sh", "android update sdk --all --no-ui --filter platform-tools,tools,build-tools-26.0.2,android-27,android-26,build-tools-25.0.0,android-25,extra-android-support,extra-android-m2repository,extra-google-m2repository"]
RUN unzip ${ANDROID_HOME}/temp/*.zip -d ${ANDROID_HOME}
# Test First Build so that it will be faster later
WORKDIR /db
RUN hg clone https://walljm@bitbucket.org/walljm/dynamicbible
WORKDIR /db/dynamicbible/DynamicBibleIonic
RUN hg update main
RUN ls -laF
RUN npm install
RUN ionic cordova platform add android
COPY docker/build.sh /build.sh
EXPOSE 8100 35729
CMD ["build.sh"]

View File

@ -1,58 +1,54 @@
{ {
"project": { "project": {
"version": "3.2.0", "version": "3.2.1",
"name": "Dynamic Bible" "name": "Dynamic Bible"
}, },
"apps": [ "apps": [
{ {
"root": "src", "root": "src",
"outDir": "dist", "outDir": "dist",
"assets": [ "assets": ["assets"],
"assets" "index": "index.html",
], "main": "main.ts",
"index": "index.html", "test": "test.ts",
"main": "main.ts", "tsconfig": "tsconfig.test.json",
"test": "test.ts", "prefix": "app",
"tsconfig": "tsconfig.test.json", "mobile": false,
"prefix": "app", "styles": ["styles.css"],
"mobile": false, "scripts": [],
"styles": [ "environments": {
"styles.css" "source": "environments/environment.ts",
], "dev": "environments/environment.ts",
"scripts": [], "prod": "environments/environment.prod.ts"
"environments": { }
"source": "environments/environment.ts", }
"dev": "environments/environment.ts", ],
"prod": "environments/environment.prod.ts" "addons": [],
} "packages": [],
} "e2e": {
], "protractor": {
"addons": [], "config": "./protractor.conf.js"
"packages": [], }
"e2e": { },
"protractor": { "test": {
"config": "./protractor.conf.js" "karma": {
} "config": "./karma.conf.js"
}, }
"test": { },
"karma": { "defaults": {
"config": "./karma.conf.js" "styleExt": "css",
} "prefixInterfaces": false,
}, "inline": {
"defaults": { "style": false,
"styleExt": "css", "template": false
"prefixInterfaces": false, },
"inline": { "spec": {
"style": false, "class": false,
"template": false "component": true,
}, "directive": true,
"spec": { "module": false,
"class": false, "pipe": true,
"component": true, "service": true
"directive": true, }
"module": false, }
"pipe": true, }
"service": true
}
}
}

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="302003" id="walljm.dynamicbible" version="3.2.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget android-versionCode="302010" id="walljm.dynamicbible" version="3.2.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Dynamic Bible</name> <name>Dynamic Bible</name>
<description>A bible app designed for bible study</description> <description>A bible app designed for bible study</description>
<author email="jason@walljm.com" href="http://dynamicbible.com/">Jason Wall</author> <author email="jason@walljm.com" href="http://dynamicbible.com/">Jason Wall</author>
@ -54,6 +54,7 @@
<preference name="UIWebViewBounce" value="false" /> <preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" /> <preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="19" /> <preference name="android-minSdkVersion" value="19" />
<preference name="android-targetSdkVersion" value="28" />
<preference name="BackupWebStorage" value="none" /> <preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" /> <preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" /> <preference name="FadeSplashScreenDuration" value="300" />

View File

@ -1,7 +1,7 @@
version: "3" version: "3"
services: services:
web: web:
image: dynamicbible:3.2.0 image: dynamicbible:3.2.1
build: build:
context: ./ context: ./
dockerfile: ./Dockerfile dockerfile: ./Dockerfile
@ -9,4 +9,4 @@ services:
- 8100:8100 - 8100:8100
- 35729:35729 - 35729:35729
volumes: volumes:
- ./releases:/db/dynamicbible/DynamicBibleIonic/platforms/android/app/build/outputs/apk/release/ - ./releases:/db/dynamicbible/DynamicBibleIonic/platforms/android/app/build/outputs/apk/release/

View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
cd /db/dynamicbible/DynamicBibleIonic
ionic cordova build android

View File

@ -3060,9 +3060,9 @@
"integrity": "sha1-Hgf5hy4VRnpQ59FKc/79h0+u1ko=" "integrity": "sha1-Hgf5hy4VRnpQ59FKc/79h0+u1ko="
}, },
"cordova-plugin-buildinfo": { "cordova-plugin-buildinfo": {
"version": "2.0.2", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-2.0.2.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-2.0.3.tgz",
"integrity": "sha512-hrrNZxSiV2KoyJ3cNPkvy/GoaWZbLZuuJMDaEK3OJ4GXgtuqB1lxAUQqJG+L2P2Ak3xwRZizqH32U5gE32I96w==" "integrity": "sha512-98HkcBGdsHILxAbHRKsCkT6OLXNSj5xGmfA6i5GNruNzTbDvFAChngR+Z4hLQskjIjI5s1vx0UQdlLYaCZWdOw=="
}, },
"cordova-plugin-compat": { "cordova-plugin-compat": {
"version": "1.2.0", "version": "1.2.0",
@ -3075,9 +3075,9 @@
"integrity": "sha1-4vusECkBeeRMtyxf28QQpTHBzW0=" "integrity": "sha1-4vusECkBeeRMtyxf28QQpTHBzW0="
}, },
"cordova-plugin-customurlscheme": { "cordova-plugin-customurlscheme": {
"version": "4.3.0", "version": "4.4.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.3.0.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.4.0.tgz",
"integrity": "sha1-Avlod4tAk5kOsEB/P6GxRY1wX5Q=" "integrity": "sha512-7VPJnNfvfZQSU1IdhJX7BpDgvC7bEe+Kfg9Cj8guSoZDcTi378qQFb6VOwthT8hwGXx2bZzWf0qnTZdRlLQy+Q=="
}, },
"cordova-plugin-device": { "cordova-plugin-device": {
"version": "1.1.7", "version": "1.1.7",
@ -3095,14 +3095,14 @@
"integrity": "sha1-gQKKt2Q+YVWT0n8q0CRFYR8ZRrY=" "integrity": "sha1-gQKKt2Q+YVWT0n8q0CRFYR8ZRrY="
}, },
"cordova-plugin-statusbar": { "cordova-plugin-statusbar": {
"version": "2.4.2", "version": "2.4.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.3.tgz",
"integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY=" "integrity": "sha512-ThmXzl6QIKWFXf4wWw7Q/zpB+VKkz3VM958+5A0sXD4jmR++u7KnGttLksXshVwWr6lvGwUebLYtIyXwS4Ovcg=="
}, },
"cordova-plugin-whitelist": { "cordova-plugin-whitelist": {
"version": "1.3.3", "version": "1.3.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz", "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz",
"integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q=" "integrity": "sha512-EYC5eQFVkoYXq39l7tYKE6lEjHJ04mvTmKXxGL7quHLdFPfJMNzru/UYpn92AOfpl3PQaZmou78C7EgmFOwFQQ=="
}, },
"cordova-universal-links-plugin": { "cordova-universal-links-plugin": {
"version": "git+https://github.com/walteram/cordova-universal-links-plugin.git#c648d3025643731c244f615ff5bbf2e375dea544", "version": "git+https://github.com/walteram/cordova-universal-links-plugin.git#c648d3025643731c244f615ff5bbf2e375dea544",
@ -8252,9 +8252,9 @@
} }
}, },
"node-version-compare": { "node-version-compare": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.1.tgz", "resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.2.tgz",
"integrity": "sha1-2Fv9IPCsreM1d/VmgscQnDTFUM0=" "integrity": "sha512-OVcHSPS3nROlBQXcALptOR0j2lOabC9wE2S+y+Fvr7nSDqoO/LCNzRdVGVovipeHUXs5jAqq7GelWE1X4J1sEw=="
}, },
"nopt": { "nopt": {
"version": "4.0.1", "version": "4.0.1",

View File

@ -1,5 +1,5 @@
{ {
"version": "3.2.0", "version": "3.2.1",
"name": "dynamicbible", "name": "dynamicbible",
"author": "Jason Wall", "author": "Jason Wall",
"homepage": "http://dynamicbible.com/", "homepage": "http://dynamicbible.com/",
@ -38,15 +38,15 @@
"cordova-android-support-gradle-release": "^1.4.7", "cordova-android-support-gradle-release": "^1.4.7",
"cordova-ios": "4.5.5", "cordova-ios": "4.5.5",
"cordova-plugin-browsertab": "^0.2.0", "cordova-plugin-browsertab": "^0.2.0",
"cordova-plugin-buildinfo": "^2.0.2", "cordova-plugin-buildinfo": "^2.0.3",
"cordova-plugin-compat": "^1.2.0", "cordova-plugin-compat": "^1.2.0",
"cordova-plugin-console": "^1.1.0", "cordova-plugin-console": "^1.1.0",
"cordova-plugin-customurlscheme": "^4.3.0", "cordova-plugin-customurlscheme": "^4.4.0",
"cordova-plugin-device": "^1.1.7", "cordova-plugin-device": "^1.1.7",
"cordova-plugin-inappbrowser": "^2.0.2", "cordova-plugin-inappbrowser": "^2.0.2",
"cordova-plugin-splashscreen": "^4.1.0", "cordova-plugin-splashscreen": "^4.1.0",
"cordova-plugin-statusbar": "^2.4.2", "cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-whitelist": "^1.3.3", "cordova-plugin-whitelist": "^1.3.4",
"cordova-universal-links-plugin": "git+https://github.com/walteram/cordova-universal-links-plugin.git", "cordova-universal-links-plugin": "git+https://github.com/walteram/cordova-universal-links-plugin.git",
"firebase": "^4.8.0", "firebase": "^4.8.0",
"ionic-angular": "3.9.0", "ionic-angular": "3.9.0",
@ -119,11 +119,11 @@
}, },
"cordova-universal-links-plugin": {}, "cordova-universal-links-plugin": {},
"cordova-android-support-gradle-release": { "cordova-android-support-gradle-release": {
"ANDROID_SUPPORT_VERSION": "27.+" "ANDROID_SUPPORT_VERSION": "28.+"
} }
}, },
"platforms": [ "platforms": [
"android" "android"
] ]
} }
} }

View File

@ -0,0 +1,33 @@
FROM ubuntu:16.04
ENV DEBIAN_FRONTEND=noninteractive \
NODE_VERSION=10.13.0 \
NPM_VERSION=6.5.0 \
IONIC_VERSION=4.6.0
# Install basics
RUN apt-get update
RUN apt-get install -y git wget curl unzip build-essential ruby ruby-dev ruby-ffi gcc make
RUN curl --retry 3 -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz"
RUN tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1
RUN rm "node-v$NODE_VERSION-linux-x64.tar.gz"
RUN npm install -g npm@"$NPM_VERSION"
RUN npm install -g cordova@"$CORDOVA_VERSION" ionic@"$IONIC_VERSION"
RUN npm cache clear --force
RUN gem install sass
RUN apt-get install software-properties-common -y
RUN add-apt-repository ppa:mercurial-ppa/releases
RUN apt-get update
RUN apt-get install mercurial -y
# Test First Build so that it will be faster later
WORKDIR /db
RUN hg clone https://walljm@bitbucket.org/walljm/dynamicbible
WORKDIR /db/dynamicbible/DynamicBibleIonic
RUN hg update main
RUN ls -laF
RUN npm install
EXPOSE 8100 35729
CMD ["build.sh"]

View File

@ -1,53 +1,68 @@
<ion-item class="title passage-title" (swipe)="close($event)"> <ion-item class="title passage-title" (swipe)="close($event)">
<ion-icon name="book" item-left></ion-icon> <span *ngIf="data !== undefined"><span *ngIf="data.status === -1">Error:</span> {{data.ref}}</span> <ion-icon name="book" item-left></ion-icon>
<button ion-button icon-only item-end large clear (click)="close()"> <span *ngIf="data !== undefined"><span *ngIf="data.status === -1">Error:</span> {{ data.ref }}</span>
<ion-icon name="close-circle"></ion-icon> <button ion-button icon-only item-end large clear (click)="close()">
</button> <ion-icon name="close-circle"></ion-icon>
</ion-item> </button>
<ion-card-content *ngIf="data !== undefined && data.status === 0"> </ion-item>
<br> <ion-card-content *ngIf="data !== undefined && data.status === 0">
<ng-template [ngIf]="profileService.profile().show_paragraphs"><div class="passage-text" *ngFor="let ch of withParas"> <br />
<h2 *ngIf="data.cs.length > 1"> <ng-template [ngIf]="profileService.profile().show_paragraphs"
Chapter {{ch.ch}} ><div class="passage-text" *ngFor="let ch of withParas">
</h2> <h2 *ngIf="data.cs.length > 1">Chapter {{ ch.ch }}</h2>
<div *ngFor="let para of ch.paras"> <div *ngFor="let para of ch.paras">
<h3 *ngIf="profileService.profile().show_paragraph_headings && hasHeader(para.p)">{{para.p.h}}</h3> <h3 *ngIf="profileService.profile().show_paragraph_headings && hasHeader(para.p)">{{ para.p.h }}</h3>
<p> <p>
<ng-template ngFor let-vs [ngForOf]="para.vss"> <ng-template ngFor let-vs [ngForOf]="para.vss">
<b *ngIf="profileService.profile().show_verse_numbers">{{vs.v}}.</b> <ng-template ngFor let-w [ngForOf]="vs.w"> <b *ngIf="profileService.profile().show_verse_numbers">{{ vs.v }}.</b>
<ng-template [ngIf]="!isPunct(w.t)"> </ng-template><a *ngIf="w.s != null" (click)="openStrongs(w.s)" (press)="openMenu(w.s)">{{w.t}}</a> <ng-template ngFor let-w [ngForOf]="vs.w">
<ng-template [ngIf]="w.s == null">{{w.t}}</ng-template> <ng-template [ngIf]="!isPunct(w.t)"> </ng-template
</ng-template><br *ngIf="profileService.profile().verses_on_new_line"> ><a *ngIf="w.s != null" (click)="openStrongs(w.s)">{{ w.t }}</a>
</ng-template> <ng-template [ngIf]="w.s == null">{{ w.t }}</ng-template> </ng-template
</p> ><br *ngIf="profileService.profile().verses_on_new_line" />
</div> </ng-template>
</div></ng-template> </p>
<ng-template [ngIf]="!profileService.profile().show_paragraphs"><div class="passage-text" *ngFor="let ch of data.cs"> </div></div
<h2 *ngIf="data.cs.length > 1"> ></ng-template>
Chapter {{ch.ch}} <ng-template [ngIf]="!profileService.profile().show_paragraphs"
</h2> ><div class="passage-text" *ngFor="let ch of data.cs">
<ng-template ngFor let-vs [ngForOf]="ch.vss"> <h2 *ngIf="data.cs.length > 1">Chapter {{ ch.ch }}</h2>
<b *ngIf="profileService.profile().show_verse_numbers">{{vs.v}}.</b> <ng-template ngFor let-w [ngForOf]="vs.w"> <ng-template ngFor let-vs [ngForOf]="ch.vss">
<ng-template [ngIf]="!isPunct(w.t)"> </ng-template><a *ngIf="w.s != null" (click)="openStrongs(w.s)" (press)="openMenu(w.s)">{{w.t}}</a> <b *ngIf="profileService.profile().show_verse_numbers">{{ vs.v }}.</b>
<ng-template [ngIf]="w.s == null">{{w.t}}</ng-template> <ng-template ngFor let-w [ngForOf]="vs.w">
</ng-template><br *ngIf="profileService.profile().verses_on_new_line"> <ng-template [ngIf]="!isPunct(w.t)"> </ng-template
</ng-template> ><a *ngIf="w.s != null" (click)="openStrongs(w.s)">{{ w.t }}</a>
</div></ng-template> <ng-template [ngIf]="w.s == null">{{ w.t }}</ng-template> </ng-template
</ion-card-content> ><br *ngIf="profileService.profile().verses_on_new_line" />
<ion-card-content *ngIf="data !== undefined && data.status === -1"> </ng-template></div
<error-message [msg]="data.msg"></error-message> ></ng-template>
</ion-card-content> </ion-card-content>
<div style="float: right"> <ion-card-content *ngIf="data !== undefined && data.status === -1">
<button ion-button icon-center clear (click)="prev()" *ngIf="ref !== undefined && ref.Section.start.chapter !== '1'"> <error-message [msg]="data.msg"></error-message>
<ion-icon name="rewind"></ion-icon> </ion-card-content>
</button> <div style="float: right">
<button ion-button icon-center clear (click)="expand()"> <button
<ion-icon name="code-working"></ion-icon> ion-button
</button> icon-center
<button ion-button icon-center clear (click)="next()" *ngIf="ref !== undefined && ref.Section.end.chapter !== ref.Section.end.book.last_chapter.toString()"> clear
<ion-icon name="fastforward"></ion-icon> (click)="prev()"
</button> *ngIf="ref !== undefined && ref.Section.start.chapter !== '1'"
<button ion-button icon-center clear (click)="contextMenu()"> >
<ion-icon name="more"></ion-icon> <ion-icon name="rewind"></ion-icon>
</button> </button>
</div> <button ion-button icon-center clear (click)="expand()">
<ion-icon name="code-working"></ion-icon>
</button>
<button
ion-button
icon-center
clear
(click)="next()"
*ngIf="ref !== undefined && ref.Section.end.chapter !== ref.Section.end.book.last_chapter.toString()"
>
<ion-icon name="fastforward"></ion-icon>
</button>
<button ion-button icon-center clear (click)="contextMenu()">
<ion-icon name="more"></ion-icon>
</button>
</div>

View File

@ -1,43 +1,54 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title> <ion-title>
<ion-icon name="paper" item-left></ion-icon> <span *ngIf="item !== undefined"><span *ngIf="item.status === -1">Error:</span> Strongs: {{item.prefix}}{{item.sn}}</span> <ion-icon name="paper" item-left></ion-icon>
</ion-title> Strongs:
<ion-buttons start> <span *ngFor="let item of items"
<button ion-button (click)="dismiss()" large> ><span *ngIf="item.status === -1">Error:</span>{{ item.prefix }}{{ item.sn }}
<ion-icon name="md-close"></ion-icon> </span>
</button> </ion-title>
</ion-buttons> <ion-buttons start>
</ion-toolbar> <button ion-button (click)="dismiss()" large>
</ion-header> <ion-icon name="md-close"></ion-icon>
<ion-content padding *ngIf="item !== undefined && item.status === 0"> </button>
<br> </ion-buttons>
<h2>Strong's Definitition</h2> </ion-toolbar>
<p> </ion-header>
<b>{{item.def.tr}} <ng-template [ngIf]="item.def.sn != null">({{item.def.sn}})</ng-template></b> <ion-content padding>
- {{item.def.p}} - {{item.def.lemma}} - <div *ngFor="let item of items">
<span *ngFor="let part of item.def.de"><ng-template [ngIf]="part.sn != null"><a (click)="openItem(part.sn)">{{part.sn}}</a></ng-template><ng-template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></ng-template></span><br> <h2>Strong's Definitition: {{ item.prefix }}{{ item.sn }}</h2>
</p> <p>
<ng-template [ngIf]="item.rmac !== null"> <b>{{ item.def.tr }}</b>
<h2>RMAC</h2> - {{ item.def.p }} - {{ item.def.lemma }} -
<b>{{item.rmac.id}}</b> <span *ngFor="let part of item.def.de"
<br> ><ng-template [ngIf]="part.sn != null"
<ul> ><a (click)="openItem(part.sn)">{{ part.sn }}</a></ng-template
<li *ngFor="let c of item.rmac.d"> ><ng-template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></ng-template></span
{{c}} ><br />
</li> </p>
</ul> <ng-template [ngIf]="item.rmac !== null">
</ng-template> <h2>RMAC</h2>
<div class="strongs-cross" *ngIf="item.crossrefs != null && item.crossrefs.ss != null"> <b>{{ item.rmac.id }}</b>
<h2>Cross References</h2> <br />
&nbsp;&nbsp;&nbsp;Translated as {{item.crossrefs.ss.length}} words <ul>
<dl> <li *ngFor="let c of item.rmac.d">
<dd *ngFor="let wrd of item.crossrefs.ss"> {{ c }}
<strong>{{wrd.w}}:</strong> <span *ngFor="let p of wrd.rs"><a (click)="openPassage(p.r)">{{makePassage(p.r)}}</a>, </span> </li>
</dd> </ul>
</dl> </ng-template>
</div> <div class="strongs-cross" *ngIf="item.crossrefs != null && item.crossrefs.ss != null">
</ion-content> <h2>Cross References</h2>
<ion-content *ngIf="item !== undefined && item.status === -1"> &nbsp;&nbsp;&nbsp;Translated as {{ item.crossrefs.ss.length }} words
<error-message [msg]="item.msg"></error-message> <dl>
<dd *ngFor="let wrd of item.crossrefs.ss">
<strong>{{ wrd.w }}, {{ wrd.rs.length }}</strong
>:
<span *ngFor="let p of wrd.rs"
><a (click)="openPassage(p.r)">{{ makePassage(p.r) }}</a
>,
</span>
</dd>
</dl>
</div>
</div>
</ion-content> </ion-content>

View File

@ -1,18 +1,17 @@
import { EventEmitter, Component, Output, OnInit } from '@angular/core'; import { EventEmitter, Component, Output, OnInit } from "@angular/core";
import { NavParams, ViewController } from 'ionic-angular'; import { NavParams, ViewController } from "ionic-angular";
import { Reference } from '../../libs/Reference'; import { Reference } from "../../libs/Reference";
import { StrongsResult, StrongsService } from '../../services/strongs-service'; import { StrongsResult, StrongsService } from "../../services/strongs-service";
@Component({ @Component({
selector: 'strongs-modal', selector: "strongs-modal",
templateUrl: 'strongs-modal.html', templateUrl: "strongs-modal.html",
providers: [StrongsService] providers: [StrongsService]
}) })
export class StrongsModal implements OnInit export class StrongsModal implements OnInit {
{ sn: string;
sn: number;
dict: string; dict: string;
item: StrongsResult; items: StrongsResult[];
@Output() @Output()
onItemClicked = new EventEmitter<string>(); onItemClicked = new EventEmitter<string>();
@ -21,40 +20,38 @@ export class StrongsModal implements OnInit
private _strongsService: StrongsService, private _strongsService: StrongsService,
private _params: NavParams, private _params: NavParams,
private _viewCtrl: ViewController private _viewCtrl: ViewController
) ) {
{ this.sn = this._params.get("sn") as string;
this.sn = this._params.get('sn') as number; this.dict = this._params.get("dict") as string;
this.dict = this._params.get('dict') as string; this.onItemClicked.subscribe(item => {
this.onItemClicked.subscribe(item => let pg = this._params.get("onItemClicked");
{ pg.updateUIwithItems(item, false);
let pg = this._params.get('onItemClicked');
pg.updateUIwithItems(item, false);
}); });
} }
ngOnInit(): void async ngOnInit() {
{ this.items = [];
this._strongsService.getResultAsPromise(this.sn, this.dict).then(data => this.item = data); const numbers = this.sn.split(" ");
for (const sn of numbers) {
let data = await this._strongsService.getResultAsPromise(parseInt(sn), this.dict);
this.items.push(data);
}
} }
dismiss() dismiss() {
{
this._viewCtrl.dismiss(); this._viewCtrl.dismiss();
} }
openItem(p: string) openItem(p: string) {
{
this.onItemClicked.emit(p); this.onItemClicked.emit(p);
this.dismiss(); this.dismiss();
} }
makePassage(p: string) makePassage(p: string) {
{ return Reference.bookName(parseInt(p.split(";")[0])).name + " " + p.split(";")[1] + ":" + p.split(";")[2];
return Reference.bookName(parseInt(p.split(';')[0])).name + ' ' + p.split(';')[1] + ':' + p.split(';')[2];
} }
openPassage(p: string) openPassage(p: string) {
{
let ref = this.makePassage(p); let ref = this.makePassage(p);
this.onItemClicked.emit(ref); this.onItemClicked.emit(ref);
} }

View File

@ -1,48 +1,58 @@
<ion-item class="title strongs-title" padding (swipe)="close($event)"> <ion-item class="title strongs-title" padding (swipe)="close($event)">
<ion-icon name="paper" item-left></ion-icon> <span *ngIf="data !== undefined"><span *ngIf="data.status === -1">Error:</span> {{data.prefix}}{{data.sn}}</span> <ion-icon name="paper" item-left></ion-icon>
<button ion-button icon-only item-end large clear (click)="close()"> <span *ngFor="let data of items"> {{ data.prefix }}{{ data.sn }}</span>
<ion-icon name="close-circle"></ion-icon> <button ion-button icon-only item-end large clear (click)="close()">
</button> <ion-icon name="close-circle"></ion-icon>
</ion-item> </button>
<ion-card-content *ngIf="data !== undefined && data.status === 0"> </ion-item>
<br> <ion-card-content>
<div class="strongs-def"> <div *ngFor="let data of items">
<h2>Strong's Definitition</h2> <br />
<p > <div class="strongs-def">
<b>{{data.def.tr}} <ng-template [ngIf]="data.def.sn != null">({{data.def.sn}})</ng-template></b> <h2>Strong's Definitition: {{ data.prefix }}{{ data.sn }}</h2>
- {{data.def.p}} - {{data.def.lemma}} - <p>
<span *ngFor="let part of data.def.de"><ng-template [ngIf]="part.sn != null"><a (click)="openItem(part.sn)">{{part.sn}}</a></ng-template><ng-template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></ng-template></span><br> <b>{{ data.def.tr }}</b>
</p> - {{ data.def.p }} - {{ data.def.lemma }} -
<ng-template [ngIf]="data.rmac !== null"> <span *ngFor="let part of data.def.de"
<h2>RMAC</h2> ><ng-template [ngIf]="part.sn != null"
<b>{{data.rmac.id}}</b> ><a (click)="openItem(part.sn)">{{ part.sn }}</a></ng-template
<br> ><ng-template [ngIf]="part.w != null"><span [innerHTML]="part.w"></span></ng-template></span
<ul> ><br />
<li *ngFor="let c of data.rmac.d"> </p>
{{c}} <ng-template [ngIf]="data.rmac !== null">
</li> <h2>RMAC</h2>
</ul> <b>{{ data.rmac.id }}</b>
</ng-template> <br />
</div> <ul>
<div class="strongs-cross" *ngIf="data.crossrefs != null && data.crossrefs.ss != null"> <li *ngFor="let c of data.rmac.d">
<h2>Cross References</h2> {{ c }}
&nbsp;&nbsp;&nbsp;Translated as {{data.crossrefs.ss.length}} words </li>
<ion-scroll scrollY="true"> </ul>
<dl> </ng-template>
<dd *ngFor="let wrd of data.crossrefs.ss"> </div>
<strong>{{wrd.w}}</strong>: <span *ngFor="let p of wrd.rs"><a (click)="openPassage(p.r)">{{makePassage(p.r)}}</a>, </span> <div class="strongs-cross" *ngIf="data.crossrefs != null && data.crossrefs.ss != null">
</dd> <h2>Cross References</h2>
</dl> &nbsp;&nbsp;&nbsp;Translated as {{ data.crossrefs.ss.length }} words
</ion-scroll> <ion-scroll scrollY="true">
</div> <dl>
<br style="clear: both"> <!-- because you load with a promise, the height of the box doesn't get set properly--> <dd *ngFor="let wrd of data.crossrefs.ss">
</ion-card-content> <strong>{{ wrd.w }}, {{ wrd.rs.length }}</strong
<ion-card-content *ngIf="data !== undefined && data.status === -1"> >:
<error-message [msg]="data.msg"></error-message> <span *ngFor="let p of wrd.rs"
</ion-card-content> ><a (click)="openPassage(p.r)">{{ makePassage(p.r) }}</a
>,
<div style="float: right"> </span>
<button ion-button icon-center clear (click)="contextMenu()"> </dd>
<ion-icon name="more"></ion-icon> </dl>
</button> </ion-scroll>
</div> </div>
<br style="clear: both" />
<!-- because you load with a promise, the height of the box doesn't get set properly-->
</div>
</ion-card-content>
<div style="float: right">
<button ion-button icon-center clear (click)="contextMenu()">
<ion-icon name="more"></ion-icon>
</button>
</div>

View File

@ -1,76 +1,81 @@
strongs .button { strongs .button {
color: #307e4b; color: #307e4b;
} }
.strongs-title { .strongs-title {
background-color:#a7eebe; background-color: #a7eebe;
} }
strongs { strongs {
font-family: var(--card-font); a {
user-select: text !important;
ion-scroll { cursor: pointer;
height: 250px; }
}
font-family: var(--card-font);
.strongs-def {
float: left; ion-scroll {
} height: 250px;
}
.strongs-cross {
float: left; .strongs-def {
} float: left;
}
p {
padding-left: 1em; .strongs-cross {
} float: left;
}
.scroll-content {
padding: 0px !important; p {
} padding-left: 1em;
}
dd {
-webkit-margin-start: 12px; .scroll-content {
line-height: 1.7em; padding: 0px !important;
} }
::-webkit-scrollbar { dd {
width: 12px; -webkit-margin-start: 12px;
} line-height: 1.7em;
/* Track */ }
::-webkit-scrollbar-track {
-webkit-box-shadow: rgba(0,0,0,0.05) 12px 12px inset; ::-webkit-scrollbar {
} width: 12px;
/* Handle */ }
::-webkit-scrollbar-thumb { /* Track */
background: rgba(0,0,0,0.1); ::-webkit-scrollbar-track {
} -webkit-box-shadow: rgba(0, 0, 0, 0.05) 12px 12px inset;
} }
/* Handle */
@media screen and (max-width: 749px) { ::-webkit-scrollbar-thumb {
strongs { background: rgba(0, 0, 0, 0.1);
.strongs-def { }
width: 100%; }
}
@media screen and (max-width: 749px) {
.strongs-cross { strongs {
width: 100%; .strongs-def {
} width: 100%;
} }
}
.strongs-cross {
@media screen and (min-width: 750px) { width: 100%;
strongs { }
ion-scroll { }
height: 260px; }
}
@media screen and (min-width: 750px) {
.strongs-def { strongs {
width: 50%; ion-scroll {
padding-right: 12px; height: 260px;
} }
.strongs-cross { .strongs-def {
width: 50%; width: 50%;
} padding-right: 12px;
} }
}
.strongs-cross {
width: 50%;
}
}
}

View File

@ -1,19 +1,27 @@
import { HostListener, EventEmitter, Component, Input, Output, OnInit, AfterViewChecked, ElementRef } from '@angular/core'; import {
import { Reference } from '../../libs/Reference'; HostListener,
import { OpenData, CardItem } from '../../pages/search/search'; EventEmitter,
import { StrongsResult, StrongsService } from '../../services/strongs-service'; Component,
import { cardContextMenu } from '../../libs/Common'; Input,
import { ProfileService } from '../../services/profile-service'; Output,
import { ActionSheetController, AlertController } from 'ionic-angular'; OnInit,
import { PagesService } from '../../services/pages-service'; AfterViewChecked,
ElementRef
} from "@angular/core";
import { Reference } from "../../libs/Reference";
import { OpenData, CardItem } from "../../pages/search/search";
import { StrongsResult, StrongsService } from "../../services/strongs-service";
import { cardContextMenu } from "../../libs/Common";
import { ProfileService } from "../../services/profile-service";
import { ActionSheetController, AlertController } from "ionic-angular";
import { PagesService } from "../../services/pages-service";
@Component({ @Component({
selector: 'strongs', selector: "strongs",
templateUrl: 'strongs.html', templateUrl: "strongs.html",
providers: [StrongsService] providers: [StrongsService]
}) })
export class Strongs implements AfterViewChecked, OnInit export class Strongs implements AfterViewChecked, OnInit {
{
@Output() @Output()
onClose = new EventEmitter<CardItem>(); onClose = new EventEmitter<CardItem>();
@ -23,81 +31,75 @@ export class Strongs implements AfterViewChecked, OnInit
@Input() @Input()
cardItem: CardItem; cardItem: CardItem;
data: StrongsResult; items: StrongsResult[];
constructor( constructor(
private _elementRef: ElementRef, private _elementRef: ElementRef,
private _strongsService: StrongsService, private _strongsService: StrongsService,
private _profileService: ProfileService, private _profileService: ProfileService,
private _actionSheet: ActionSheetController, private _actionSheet: ActionSheetController,
private _pagesSvc: PagesService, private _pagesSvc: PagesService,
private _alertCtrl: AlertController) private _alertCtrl: AlertController
{ ) {}
}
contextMenu() { contextMenu() {
cardContextMenu(this._profileService, this._actionSheet, this._pagesSvc, this._alertCtrl, this.cardItem); cardContextMenu(this._profileService, this._actionSheet, this._pagesSvc, this._alertCtrl, this.cardItem);
} }
@HostListener('window:resize', ['$event']) @HostListener("window:resize", ["$event"])
onResize(evt) onResize(evt) {
{ $("strongs ion-scroll").each((i, el) => {
$('strongs ion-scroll').each((i, el) => let len = $(el).find(".scroll-content .scroll-zoom-wrapper dl span").length;
{ len += $(el).find(".scroll-content .scroll-zoom-wrapper dl dd").length;
let len = $(el).find('.scroll-content .scroll-zoom-wrapper dl span').length;
len += $(el).find('.scroll-content .scroll-zoom-wrapper dl dd').length;
if (len < 20) if (len < 20) $(el).css("height", Math.ceil(len / 3) * 30 + 30);
$(el).css('height', Math.ceil(len / 3) * 30 + 30);
}); });
} }
ngAfterViewChecked(): void ngAfterViewChecked(): void {
{
this.onResize(null); this.onResize(null);
} }
ngOnInit(): void async ngOnInit() {
{ this.items = [];
this._strongsService.getResultAsPromise(parseInt(this.cardItem.qry), this.cardItem.dict) const numbers = this.cardItem.qry.split(" ");
.then(data => for (const sn of numbers) {
{ let data = await this._strongsService.getResultAsPromise(parseInt(sn), this.cardItem.dict);
this.data = data; this.items.push(data);
} }
);
} }
close(ev) { close(ev) {
let translate = 'translate3d(110%, 0, 0)'; let translate = "translate3d(110%, 0, 0)";
if (ev != null && ev.direction === 2) { if (ev != null && ev.direction === 2) {
translate = 'translate3d(-110%, 0, 0)'; translate = "translate3d(-110%, 0, 0)";
} }
let d = 250; let d = 250;
this._elementRef.nativeElement.parentElement.animate({ this._elementRef.nativeElement.parentElement.animate(
transform: ['none', translate] {
}, { transform: ["none", translate]
fill: 'forwards', },
{
fill: "forwards",
duration: d, duration: d,
iterations: 1, iterations: 1,
easing: 'ease-in-out' easing: "ease-in-out"
}); }
);
setTimeout(() => { setTimeout(() => {
this.onClose.emit(this.cardItem); this.onClose.emit(this.cardItem);
}, d); }, d);
} }
openItem(p: string) openItem(p: string) {
{
this.onItemClicked.emit({ card: this.cardItem, qry: p, from_search_bar: false }); this.onItemClicked.emit({ card: this.cardItem, qry: p, from_search_bar: false });
} }
makePassage(p: string) makePassage(p: string) {
{ return Reference.bookName(parseInt(p.split(";")[0])).name + " " + p.split(";")[1] + ":" + p.split(";")[2];
return Reference.bookName(parseInt(p.split(';')[0])).name + ' ' + p.split(';')[1] + ':' + p.split(';')[2];
} }
openPassage(p: string) openPassage(p: string) {
{
const ref = this.makePassage(p); const ref = this.makePassage(p);
this.onItemClicked.emit({ card: this.cardItem, qry: ref, from_search_bar: false }); this.onItemClicked.emit({ card: this.cardItem, qry: ref, from_search_bar: false });
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,14 @@
import { Type, Component, OnInit, ViewChild } from "@angular/core"; import { Type, Component, OnInit, ViewChild } from "@angular/core";
import { Loading, LoadingController, ModalController, NavParams, AlertController, MenuController, TextInput, Searchbar } from "ionic-angular"; import {
Loading,
LoadingController,
ModalController,
NavParams,
AlertController,
MenuController,
TextInput,
Searchbar
} from "ionic-angular";
import { AutoCompleteComponent } from "ionic2-auto-complete"; import { AutoCompleteComponent } from "ionic2-auto-complete";
import { StrongsModal } from "../../components/strongs-modal/strongs-modal"; import { StrongsModal } from "../../components/strongs-modal/strongs-modal";
@ -297,7 +306,7 @@ export class SearchPage implements OnInit {
for (let item of lst) { for (let item of lst) {
if (item.type === "Strongs" && this.profileService.profile().strongs_modal && !from_search_bar) { if (item.type === "Strongs" && this.profileService.profile().strongs_modal && !from_search_bar) {
const modal = this.modalCtrl.create(StrongsModal, { const modal = this.modalCtrl.create(StrongsModal, {
sn: parseInt(item.qry), sn: item.qry,
dict: item.dict, dict: item.dict,
onItemClicked: this onItemClicked: this
}); });

View File

@ -0,0 +1,3 @@
/// <reference path="..\.vscode\typings\cordova-ionic\plugins\keyboard.d.ts"/>
/// <reference path="..\.vscode\typings\jquery\jquery.d.ts"/>

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 @@
[{"id":"G3201","t":"grk","d":"memphomai {mem'-fom-ahee}","ss":[{"w":"fault, 3","rs":[{"r":"41;7;2"},{"r":"45;9;19"},{"r":"58;8;8"}]}]},{"id":"G3202","t":"grk","d":"mempsimoiros {mem-psim'-oy-ros}","ss":[{"w":"complainers, 1","rs":[{"r":"65;1;16"}]}]},{"id":"G3303","t":"grk","d":"men {men}","ss":[{"w":"And, 1","rs":[{"r":"44;17;30"}]},{"w":"as, 1","rs":[{"r":"45;11;13"}]},{"w":"behind, 1","rs":[{"r":"50;3;13"}]},{"w":"even, 1","rs":[{"r":"52;2;18"}]},{"w":"first, 2","rs":[{"r":"58;7;2"},{"r":"59;3;17"}]},{"w":"he, 1","rs":[{"r":"48;4;23"}]},{"w":"here, 1","rs":[{"r":"58;7;8"}]},{"w":"indeed, 14","rs":[{"r":"40;3;11"},{"r":"41;1;8"},{"r":"42;3;16"},{"r":"42;23;41"},{"r":"44;4;16"},{"r":"44;22;9"},{"r":"45;6;11"},{"r":"45;14;20"},{"r":"46;11;7"},{"r":"47;8;17"},{"r":"50;1;15"},{"r":"50;3;1"},{"r":"51;2;23"},{"r":"60;2;4"}]},{"w":"man, 1","rs":[{"r":"45;14;5"}]},{"w":"one, 9","rs":[{"r":"42;23;33"},{"r":"45;9;21"},{"r":"45;14;2"},{"r":"46;7;7"},{"r":"46;11;21"},{"r":"46;12;8"},{"r":"47;2;16"},{"r":"48;4;24"},{"r":"50;1;16"}]},{"w":"part, 1","rs":[{"r":"44;14;4"}]},{"w":"Partly, 1","rs":[{"r":"58;10;33"}]},{"w":"so, 1","rs":[{"r":"44;16;5"}]},{"w":"some, 7","rs":[{"r":"43;7;12"},{"r":"44;17;32"},{"r":"44;28;24"},{"r":"46;12;28"},{"r":"49;4;11"},{"r":"55;2;20"},{"r":"65;1;22"}]},{"w":"then, 1","rs":[{"r":"41;16;19"}]},{"w":"thing, 1","rs":[{"r":"44;19;32"}]},{"w":"truly, 6","rs":[{"r":"43;20;30"},{"r":"44;3;22"},{"r":"44;5;23"},{"r":"47;12;12"},{"r":"58;7;23"},{"r":"58;11;15"}]},{"w":"verily, 13","rs":[{"r":"44;19;4"},{"r":"44;22;3"},{"r":"44;26;9"},{"r":"45;2;25"},{"r":"46;5;3"},{"r":"46;14;17"},{"r":"58;3;5"},{"r":"58;6;16"},{"r":"58;7;5"},{"r":"58;7;18"},{"r":"58;9;1"},{"r":"58;12;10"},{"r":"60;1;20"}]}]}] [{"id":"G3201","t":"grk","d":"","ss":[{"w":"fault","rs":[{"r":"41;7;2"},{"r":"45;9;19"},{"r":"58;8;8"}]}]},{"id":"G3202","t":"grk","d":"","ss":[{"w":"complainers","rs":[{"r":"65;1;16"}]}]},{"id":"G3303","t":"grk","d":"","ss":[{"w":"a","rs":[{"r":"44;9;7"},{"r":"46;1;23"}]},{"w":"all","rs":[{"r":"46;9;24"}]},{"w":"am","rs":[{"r":"47;10;1"}]},{"w":"an","rs":[{"r":"50;1;28"}]},{"w":"and","rs":[{"r":"44;17;30"}]},{"w":"another","rs":[{"r":"40;22;5"}]},{"w":"are","rs":[{"r":"56;1;15"}]},{"w":"as","rs":[{"r":"44;28;22"},{"r":"45;11;13"}]},{"w":"barnabas","rs":[{"r":"44;14;12"}]},{"w":"behind","rs":[{"r":"50;3;13"}]},{"w":"being","rs":[{"r":"44;13;4"},{"r":"44;15;3"}]},{"w":"concerning","rs":[{"r":"45;11;28"}]},{"w":"desire","rs":[{"r":"45;10;1"}]},{"w":"even","rs":[{"r":"52;2;18"}]},{"w":"every","rs":[{"r":"58;10;11"}]},{"w":"first","rs":[{"r":"58;7;2"},{"r":"59;3;17"}]},{"w":"from","rs":[{"r":"55;4;4"}]},{"w":"have","rs":[{"r":"44;1;1"},{"r":"44;27;21"}]},{"w":"he","rs":[{"r":"44;13;36"},{"r":"44;17;17"},{"r":"44;23;18"},{"r":"48;4;23"},{"r":"58;8;4"},{"r":"60;4;14"}]},{"w":"here","rs":[{"r":"58;7;8"}]},{"w":"i","rs":[{"r":"44;25;11"},{"r":"45;1;8"},{"r":"46;1;12"},{"r":"46;3;4"}]},{"w":"indeed","rs":[{"r":"40;3;11"},{"r":"40;13;32"},{"r":"40;20;23"},{"r":"40;23;27"},{"r":"40;26;41"},{"r":"41;1;8"},{"r":"41;10;39"},{"r":"41;14;21"},{"r":"42;3;16"},{"r":"42;11;48"},{"r":"42;23;41"},{"r":"44;4;16"},{"r":"44;11;16"},{"r":"44;22;9"},{"r":"45;6;11"},{"r":"45;14;20"},{"r":"46;11;7"},{"r":"47;8;17"},{"r":"50;1;15"},{"r":"50;3;1"},{"r":"51;2;23"},{"r":"60;2;4"}]},{"w":"is","rs":[{"r":"45;8;10"},{"r":"46;15;40"}]},{"w":"it","rs":[{"r":"40;26;24"},{"r":"42;13;9"},{"r":"44;18;14"},{"r":"46;9;25"}]},{"w":"kind","rs":[{"r":"46;15;39"}]},{"w":"letters","rs":[{"r":"47;10;10"}]},{"w":"man","rs":[{"r":"45;14;5"}]},{"w":"myself","rs":[{"r":"45;7;25"}]},{"w":"obey","rs":[{"r":"45;2;8"}]},{"w":"of","rs":[{"r":"45;8;17"},{"r":"60;2;14"}]},{"w":"on","rs":[{"r":"45;11;22"}]},{"w":"one","rs":[{"r":"40;21;35"},{"r":"40;22;5"},{"r":"40;25;15"},{"r":"42;23;33"},{"r":"45;9;21"},{"r":"45;14;2"},{"r":"46;7;7"},{"r":"46;11;21"},{"r":"46;12;8"},{"r":"47;2;16"},{"r":"48;4;24"},{"r":"50;1;16"}]},{"w":"outwardly","rs":[{"r":"40;23;28"}]},{"w":"part","rs":[{"r":"44;14;4"}]},{"w":"partly","rs":[{"r":"58;10;33"}]},{"w":"say","rs":[{"r":"40;16;14"}]},{"w":"so","rs":[{"r":"44;16;5"}]},{"w":"some","rs":[{"r":"40;13;4"},{"r":"40;13;8"},{"r":"40;13;23"},{"r":"41;4;4"},{"r":"41;12;5"},{"r":"42;8;5"},{"r":"43;7;12"},{"r":"44;17;32"},{"r":"44;28;24"},{"r":"46;12;28"},{"r":"49;4;11"},{"r":"55;2;20"},{"r":"65;1;22"}]},{"w":"the","rs":[{"r":"40;16;3"},{"r":"44;23;8"},{"r":"45;5;16"},{"r":"60;3;18"}]},{"w":"then","rs":[{"r":"41;16;19"},{"r":"44;23;22"}]},{"w":"therefore","rs":[{"r":"43;16;22"}]},{"w":"they","rs":[{"r":"44;8;25"},{"r":"65;1;10"}]},{"w":"thing","rs":[{"r":"44;19;32"}]},{"w":"truly","rs":[{"r":"40;9;37"},{"r":"40;17;11"},{"r":"41;14;38"},{"r":"42;10;2"},{"r":"42;22;22"},{"r":"43;20;30"},{"r":"44;1;5"},{"r":"44;3;22"},{"r":"44;5;23"},{"r":"47;12;12"},{"r":"58;7;23"},{"r":"58;11;15"}]},{"w":"verily","rs":[{"r":"41;9;12"},{"r":"44;19;4"},{"r":"44;22;3"},{"r":"44;26;9"},{"r":"45;2;25"},{"r":"46;5;3"},{"r":"46;14;17"},{"r":"58;3;5"},{"r":"58;6;16"},{"r":"58;7;5"},{"r":"58;7;18"},{"r":"58;9;1"},{"r":"58;12;10"},{"r":"60;1;20"}]},{"w":"was","rs":[{"r":"44;12;5"}]},{"w":"wedding","rs":[{"r":"40;22;8"}]},{"w":"were","rs":[{"r":"44;15;30"}]},{"w":"when","rs":[{"r":"46;11;18"},{"r":"48;4;8"}]},{"w":"which","rs":[{"r":"44;21;39"}]},{"w":"who","rs":[{"r":"45;2;7"}]},{"w":"ye","rs":[{"r":"46;6;4"}]}]}]

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