* 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
ENV DEBIAN_FRONTEND=noninteractive \
NODE_VERSION=10.13.0 \
NPM_VERSION=6.5.0 \
IONIC_VERSION=4.6.0
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
@ -16,11 +21,53 @@ 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
@ -28,6 +75,8 @@ WORKDIR /db/dynamicbible/DynamicBibleIonic
RUN hg update main
RUN ls -laF
RUN npm install
RUN ionic cordova platform add android
COPY docker/build_apk.sh /build.sh
EXPOSE 8100 35729
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": {
"version": "3.2.0",
"name": "Dynamic Bible"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets"
],
"index": "index.html",
"main": "main.ts",
"test": "test.ts",
"tsconfig": "tsconfig.test.json",
"prefix": "app",
"mobile": false,
"styles": [
"styles.css"
],
"scripts": [],
"environments": {
"source": "environments/environment.ts",
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"addons": [],
"packages": [],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"prefixInterfaces": false,
"inline": {
"style": false,
"template": false
},
"spec": {
"class": false,
"component": true,
"directive": true,
"module": false,
"pipe": true,
"service": true
}
}
}
{
"project": {
"version": "3.2.1",
"name": "Dynamic Bible"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": ["assets"],
"index": "index.html",
"main": "main.ts",
"test": "test.ts",
"tsconfig": "tsconfig.test.json",
"prefix": "app",
"mobile": false,
"styles": ["styles.css"],
"scripts": [],
"environments": {
"source": "environments/environment.ts",
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"addons": [],
"packages": [],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"prefixInterfaces": false,
"inline": {
"style": false,
"template": false
},
"spec": {
"class": false,
"component": true,
"directive": true,
"module": false,
"pipe": true,
"service": true
}
}
}

View File

@ -1,5 +1,5 @@
<?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>
<description>A bible app designed for bible study</description>
<author email="jason@walljm.com" href="http://dynamicbible.com/">Jason Wall</author>
@ -54,6 +54,7 @@
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="19" />
<preference name="android-targetSdkVersion" value="28" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />

View File

@ -1,7 +1,7 @@
version: "3"
services:
web:
image: dynamicbible:3.2.0
image: dynamicbible:3.2.1
build:
context: ./
dockerfile: ./Dockerfile
@ -9,4 +9,4 @@ services:
- 8100:8100
- 35729:35729
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="
},
"cordova-plugin-buildinfo": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-2.0.2.tgz",
"integrity": "sha512-hrrNZxSiV2KoyJ3cNPkvy/GoaWZbLZuuJMDaEK3OJ4GXgtuqB1lxAUQqJG+L2P2Ak3xwRZizqH32U5gE32I96w=="
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-2.0.3.tgz",
"integrity": "sha512-98HkcBGdsHILxAbHRKsCkT6OLXNSj5xGmfA6i5GNruNzTbDvFAChngR+Z4hLQskjIjI5s1vx0UQdlLYaCZWdOw=="
},
"cordova-plugin-compat": {
"version": "1.2.0",
@ -3075,9 +3075,9 @@
"integrity": "sha1-4vusECkBeeRMtyxf28QQpTHBzW0="
},
"cordova-plugin-customurlscheme": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.3.0.tgz",
"integrity": "sha1-Avlod4tAk5kOsEB/P6GxRY1wX5Q="
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-customurlscheme/-/cordova-plugin-customurlscheme-4.4.0.tgz",
"integrity": "sha512-7VPJnNfvfZQSU1IdhJX7BpDgvC7bEe+Kfg9Cj8guSoZDcTi378qQFb6VOwthT8hwGXx2bZzWf0qnTZdRlLQy+Q=="
},
"cordova-plugin-device": {
"version": "1.1.7",
@ -3095,14 +3095,14 @@
"integrity": "sha1-gQKKt2Q+YVWT0n8q0CRFYR8ZRrY="
},
"cordova-plugin-statusbar": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz",
"integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY="
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.3.tgz",
"integrity": "sha512-ThmXzl6QIKWFXf4wWw7Q/zpB+VKkz3VM958+5A0sXD4jmR++u7KnGttLksXshVwWr6lvGwUebLYtIyXwS4Ovcg=="
},
"cordova-plugin-whitelist": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz",
"integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q="
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz",
"integrity": "sha512-EYC5eQFVkoYXq39l7tYKE6lEjHJ04mvTmKXxGL7quHLdFPfJMNzru/UYpn92AOfpl3PQaZmou78C7EgmFOwFQQ=="
},
"cordova-universal-links-plugin": {
"version": "git+https://github.com/walteram/cordova-universal-links-plugin.git#c648d3025643731c244f615ff5bbf2e375dea544",
@ -8252,9 +8252,9 @@
}
},
"node-version-compare": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.1.tgz",
"integrity": "sha1-2Fv9IPCsreM1d/VmgscQnDTFUM0="
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.2.tgz",
"integrity": "sha512-OVcHSPS3nROlBQXcALptOR0j2lOabC9wE2S+y+Fvr7nSDqoO/LCNzRdVGVovipeHUXs5jAqq7GelWE1X4J1sEw=="
},
"nopt": {
"version": "4.0.1",

View File

@ -1,5 +1,5 @@
{
"version": "3.2.0",
"version": "3.2.1",
"name": "dynamicbible",
"author": "Jason Wall",
"homepage": "http://dynamicbible.com/",
@ -38,15 +38,15 @@
"cordova-android-support-gradle-release": "^1.4.7",
"cordova-ios": "4.5.5",
"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-console": "^1.1.0",
"cordova-plugin-customurlscheme": "^4.3.0",
"cordova-plugin-customurlscheme": "^4.4.0",
"cordova-plugin-device": "^1.1.7",
"cordova-plugin-inappbrowser": "^2.0.2",
"cordova-plugin-splashscreen": "^4.1.0",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-whitelist": "^1.3.4",
"cordova-universal-links-plugin": "git+https://github.com/walteram/cordova-universal-links-plugin.git",
"firebase": "^4.8.0",
"ionic-angular": "3.9.0",
@ -119,11 +119,11 @@
},
"cordova-universal-links-plugin": {},
"cordova-android-support-gradle-release": {
"ANDROID_SUPPORT_VERSION": "27.+"
"ANDROID_SUPPORT_VERSION": "28.+"
}
},
"platforms": [
"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-icon name="book" item-left></ion-icon> <span *ngIf="data !== undefined"><span *ngIf="data.status === -1">Error:</span> {{data.ref}}</span>
<button ion-button icon-only item-end large clear (click)="close()">
<ion-icon name="close-circle"></ion-icon>
</button>
</ion-item>
<ion-card-content *ngIf="data !== undefined && data.status === 0">
<br>
<ng-template [ngIf]="profileService.profile().show_paragraphs"><div class="passage-text" *ngFor="let ch of withParas">
<h2 *ngIf="data.cs.length > 1">
Chapter {{ch.ch}}
</h2>
<div *ngFor="let para of ch.paras">
<h3 *ngIf="profileService.profile().show_paragraph_headings && hasHeader(para.p)">{{para.p.h}}</h3>
<p>
<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">
<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 [ngIf]="w.s == null">{{w.t}}</ng-template>
</ng-template><br *ngIf="profileService.profile().verses_on_new_line">
</ng-template>
</p>
</div>
</div></ng-template>
<ng-template [ngIf]="!profileService.profile().show_paragraphs"><div class="passage-text" *ngFor="let ch of data.cs">
<h2 *ngIf="data.cs.length > 1">
Chapter {{ch.ch}}
</h2>
<ng-template ngFor let-vs [ngForOf]="ch.vss">
<b *ngIf="profileService.profile().show_verse_numbers">{{vs.v}}.</b> <ng-template ngFor let-w [ngForOf]="vs.w">
<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 [ngIf]="w.s == null">{{w.t}}</ng-template>
</ng-template><br *ngIf="profileService.profile().verses_on_new_line">
</ng-template>
</div></ng-template>
</ion-card-content>
<ion-card-content *ngIf="data !== undefined && data.status === -1">
<error-message [msg]="data.msg"></error-message>
</ion-card-content>
<div style="float: right">
<button ion-button icon-center clear (click)="prev()" *ngIf="ref !== undefined && ref.Section.start.chapter !== '1'">
<ion-icon name="rewind"></ion-icon>
</button>
<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>
<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>
<button ion-button icon-only item-end large clear (click)="close()">
<ion-icon name="close-circle"></ion-icon>
</button>
</ion-item>
<ion-card-content *ngIf="data !== undefined && data.status === 0">
<br />
<ng-template [ngIf]="profileService.profile().show_paragraphs"
><div class="passage-text" *ngFor="let ch of withParas">
<h2 *ngIf="data.cs.length > 1">Chapter {{ ch.ch }}</h2>
<div *ngFor="let para of ch.paras">
<h3 *ngIf="profileService.profile().show_paragraph_headings && hasHeader(para.p)">{{ para.p.h }}</h3>
<p>
<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">
<ng-template [ngIf]="!isPunct(w.t)"> </ng-template
><a *ngIf="w.s != null" (click)="openStrongs(w.s)">{{ w.t }}</a>
<ng-template [ngIf]="w.s == null">{{ w.t }}</ng-template> </ng-template
><br *ngIf="profileService.profile().verses_on_new_line" />
</ng-template>
</p>
</div></div
></ng-template>
<ng-template [ngIf]="!profileService.profile().show_paragraphs"
><div class="passage-text" *ngFor="let ch of data.cs">
<h2 *ngIf="data.cs.length > 1">Chapter {{ ch.ch }}</h2>
<ng-template ngFor let-vs [ngForOf]="ch.vss">
<b *ngIf="profileService.profile().show_verse_numbers">{{ vs.v }}.</b>
<ng-template ngFor let-w [ngForOf]="vs.w">
<ng-template [ngIf]="!isPunct(w.t)"> </ng-template
><a *ngIf="w.s != null" (click)="openStrongs(w.s)">{{ w.t }}</a>
<ng-template [ngIf]="w.s == null">{{ w.t }}</ng-template> </ng-template
><br *ngIf="profileService.profile().verses_on_new_line" />
</ng-template></div
></ng-template>
</ion-card-content>
<ion-card-content *ngIf="data !== undefined && data.status === -1">
<error-message [msg]="data.msg"></error-message>
</ion-card-content>
<div style="float: right">
<button
ion-button
icon-center
clear
(click)="prev()"
*ngIf="ref !== undefined && ref.Section.start.chapter !== '1'"
>
<ion-icon name="rewind"></ion-icon>
</button>
<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-toolbar>
<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-title>
<ion-buttons start>
<button ion-button (click)="dismiss()" large>
<ion-icon name="md-close"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding *ngIf="item !== undefined && item.status === 0">
<br>
<h2>Strong's Definitition</h2>
<p>
<b>{{item.def.tr}} <ng-template [ngIf]="item.def.sn != null">({{item.def.sn}})</ng-template></b>
- {{item.def.p}} - {{item.def.lemma}} -
<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>
</p>
<ng-template [ngIf]="item.rmac !== null">
<h2>RMAC</h2>
<b>{{item.rmac.id}}</b>
<br>
<ul>
<li *ngFor="let c of item.rmac.d">
{{c}}
</li>
</ul>
</ng-template>
<div class="strongs-cross" *ngIf="item.crossrefs != null && item.crossrefs.ss != null">
<h2>Cross References</h2>
&nbsp;&nbsp;&nbsp;Translated as {{item.crossrefs.ss.length}} words
<dl>
<dd *ngFor="let wrd of item.crossrefs.ss">
<strong>{{wrd.w}}:</strong> <span *ngFor="let p of wrd.rs"><a (click)="openPassage(p.r)">{{makePassage(p.r)}}</a>, </span>
</dd>
</dl>
</div>
</ion-content>
<ion-content *ngIf="item !== undefined && item.status === -1">
<error-message [msg]="item.msg"></error-message>
<ion-header>
<ion-toolbar>
<ion-title>
<ion-icon name="paper" item-left></ion-icon>
Strongs:
<span *ngFor="let item of items"
><span *ngIf="item.status === -1">Error:</span>{{ item.prefix }}{{ item.sn }}
</span>
</ion-title>
<ion-buttons start>
<button ion-button (click)="dismiss()" large>
<ion-icon name="md-close"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<div *ngFor="let item of items">
<h2>Strong's Definitition: {{ item.prefix }}{{ item.sn }}</h2>
<p>
<b>{{ item.def.tr }}</b>
- {{ item.def.p }} - {{ item.def.lemma }} -
<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 />
</p>
<ng-template [ngIf]="item.rmac !== null">
<h2>RMAC</h2>
<b>{{ item.rmac.id }}</b>
<br />
<ul>
<li *ngFor="let c of item.rmac.d">
{{ c }}
</li>
</ul>
</ng-template>
<div class="strongs-cross" *ngIf="item.crossrefs != null && item.crossrefs.ss != null">
<h2>Cross References</h2>
&nbsp;&nbsp;&nbsp;Translated as {{ item.crossrefs.ss.length }} words
<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>

View File

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

View File

@ -1,48 +1,58 @@
<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>
<button ion-button icon-only item-end large clear (click)="close()">
<ion-icon name="close-circle"></ion-icon>
</button>
</ion-item>
<ion-card-content *ngIf="data !== undefined && data.status === 0">
<br>
<div class="strongs-def">
<h2>Strong's Definitition</h2>
<p >
<b>{{data.def.tr}} <ng-template [ngIf]="data.def.sn != null">({{data.def.sn}})</ng-template></b>
- {{data.def.p}} - {{data.def.lemma}} -
<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>
</p>
<ng-template [ngIf]="data.rmac !== null">
<h2>RMAC</h2>
<b>{{data.rmac.id}}</b>
<br>
<ul>
<li *ngFor="let c of data.rmac.d">
{{c}}
</li>
</ul>
</ng-template>
</div>
<div class="strongs-cross" *ngIf="data.crossrefs != null && data.crossrefs.ss != null">
<h2>Cross References</h2>
&nbsp;&nbsp;&nbsp;Translated as {{data.crossrefs.ss.length}} words
<ion-scroll scrollY="true">
<dl>
<dd *ngFor="let wrd of data.crossrefs.ss">
<strong>{{wrd.w}}</strong>: <span *ngFor="let p of wrd.rs"><a (click)="openPassage(p.r)">{{makePassage(p.r)}}</a>, </span>
</dd>
</dl>
</ion-scroll>
</div>
<br style="clear: both"> <!-- because you load with a promise, the height of the box doesn't get set properly-->
</ion-card-content>
<ion-card-content *ngIf="data !== undefined && data.status === -1">
<error-message [msg]="data.msg"></error-message>
</ion-card-content>
<div style="float: right">
<button ion-button icon-center clear (click)="contextMenu()">
<ion-icon name="more"></ion-icon>
</button>
</div>
<ion-item class="title strongs-title" padding (swipe)="close($event)">
<ion-icon name="paper" item-left></ion-icon>
<span *ngFor="let data of items"> {{ data.prefix }}{{ data.sn }}</span>
<button ion-button icon-only item-end large clear (click)="close()">
<ion-icon name="close-circle"></ion-icon>
</button>
</ion-item>
<ion-card-content>
<div *ngFor="let data of items">
<br />
<div class="strongs-def">
<h2>Strong's Definitition: {{ data.prefix }}{{ data.sn }}</h2>
<p>
<b>{{ data.def.tr }}</b>
- {{ data.def.p }} - {{ data.def.lemma }} -
<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 />
</p>
<ng-template [ngIf]="data.rmac !== null">
<h2>RMAC</h2>
<b>{{ data.rmac.id }}</b>
<br />
<ul>
<li *ngFor="let c of data.rmac.d">
{{ c }}
</li>
</ul>
</ng-template>
</div>
<div class="strongs-cross" *ngIf="data.crossrefs != null && data.crossrefs.ss != null">
<h2>Cross References</h2>
&nbsp;&nbsp;&nbsp;Translated as {{ data.crossrefs.ss.length }} words
<ion-scroll scrollY="true">
<dl>
<dd *ngFor="let wrd of data.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>
</ion-scroll>
</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 {
color: #307e4b;
}
.strongs-title {
background-color:#a7eebe;
}
strongs {
font-family: var(--card-font);
ion-scroll {
height: 250px;
}
.strongs-def {
float: left;
}
.strongs-cross {
float: left;
}
p {
padding-left: 1em;
}
.scroll-content {
padding: 0px !important;
}
dd {
-webkit-margin-start: 12px;
line-height: 1.7em;
}
::-webkit-scrollbar {
width: 12px;
}
/* Track */
::-webkit-scrollbar-track {
-webkit-box-shadow: rgba(0,0,0,0.05) 12px 12px inset;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.1);
}
}
@media screen and (max-width: 749px) {
strongs {
.strongs-def {
width: 100%;
}
.strongs-cross {
width: 100%;
}
}
}
@media screen and (min-width: 750px) {
strongs {
ion-scroll {
height: 260px;
}
.strongs-def {
width: 50%;
padding-right: 12px;
}
.strongs-cross {
width: 50%;
}
}
}
strongs .button {
color: #307e4b;
}
.strongs-title {
background-color: #a7eebe;
}
strongs {
a {
user-select: text !important;
cursor: pointer;
}
font-family: var(--card-font);
ion-scroll {
height: 250px;
}
.strongs-def {
float: left;
}
.strongs-cross {
float: left;
}
p {
padding-left: 1em;
}
.scroll-content {
padding: 0px !important;
}
dd {
-webkit-margin-start: 12px;
line-height: 1.7em;
}
::-webkit-scrollbar {
width: 12px;
}
/* Track */
::-webkit-scrollbar-track {
-webkit-box-shadow: rgba(0, 0, 0, 0.05) 12px 12px inset;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.1);
}
}
@media screen and (max-width: 749px) {
strongs {
.strongs-def {
width: 100%;
}
.strongs-cross {
width: 100%;
}
}
}
@media screen and (min-width: 750px) {
strongs {
ion-scroll {
height: 260px;
}
.strongs-def {
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 { 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';
import {
HostListener,
EventEmitter,
Component,
Input,
Output,
OnInit,
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({
selector: 'strongs',
templateUrl: 'strongs.html',
selector: "strongs",
templateUrl: "strongs.html",
providers: [StrongsService]
})
export class Strongs implements AfterViewChecked, OnInit
{
export class Strongs implements AfterViewChecked, OnInit {
@Output()
onClose = new EventEmitter<CardItem>();
@ -23,81 +31,75 @@ export class Strongs implements AfterViewChecked, OnInit
@Input()
cardItem: CardItem;
data: StrongsResult;
items: StrongsResult[];
constructor(
private _elementRef: ElementRef,
private _strongsService: StrongsService,
private _strongsService: StrongsService,
private _profileService: ProfileService,
private _actionSheet: ActionSheetController,
private _pagesSvc: PagesService,
private _alertCtrl: AlertController)
{
}
private _alertCtrl: AlertController
) {}
contextMenu() {
cardContextMenu(this._profileService, this._actionSheet, this._pagesSvc, this._alertCtrl, this.cardItem);
}
@HostListener('window:resize', ['$event'])
onResize(evt)
{
$('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;
@HostListener("window:resize", ["$event"])
onResize(evt) {
$("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;
if (len < 20)
$(el).css('height', Math.ceil(len / 3) * 30 + 30);
if (len < 20) $(el).css("height", Math.ceil(len / 3) * 30 + 30);
});
}
ngAfterViewChecked(): void
{
ngAfterViewChecked(): void {
this.onResize(null);
}
ngOnInit(): void
{
this._strongsService.getResultAsPromise(parseInt(this.cardItem.qry), this.cardItem.dict)
.then(data =>
{
this.data = data;
}
);
async ngOnInit() {
this.items = [];
const numbers = this.cardItem.qry.split(" ");
for (const sn of numbers) {
let data = await this._strongsService.getResultAsPromise(parseInt(sn), this.cardItem.dict);
this.items.push(data);
}
}
close(ev) {
let translate = 'translate3d(110%, 0, 0)';
let translate = "translate3d(110%, 0, 0)";
if (ev != null && ev.direction === 2) {
translate = 'translate3d(-110%, 0, 0)';
translate = "translate3d(-110%, 0, 0)";
}
let d = 250;
this._elementRef.nativeElement.parentElement.animate({
transform: ['none', translate]
}, {
fill: 'forwards',
this._elementRef.nativeElement.parentElement.animate(
{
transform: ["none", translate]
},
{
fill: "forwards",
duration: d,
iterations: 1,
easing: 'ease-in-out'
});
easing: "ease-in-out"
}
);
setTimeout(() => {
this.onClose.emit(this.cardItem);
}, d);
}
openItem(p: string)
{
openItem(p: string) {
this.onItemClicked.emit({ card: this.cardItem, qry: p, from_search_bar: false });
}
makePassage(p: string)
{
return Reference.bookName(parseInt(p.split(';')[0])).name + ' ' + p.split(';')[1] + ':' + p.split(';')[2];
makePassage(p: string) {
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);
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 { 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 { StrongsModal } from "../../components/strongs-modal/strongs-modal";
@ -297,7 +306,7 @@ export class SearchPage implements OnInit {
for (let item of lst) {
if (item.type === "Strongs" && this.profileService.profile().strongs_modal && !from_search_bar) {
const modal = this.modalCtrl.create(StrongsModal, {
sn: parseInt(item.qry),
sn: item.qry,
dict: item.dict,
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