mirror of
https://gitlab.com/walljm/dynamicbible.git
synced 2025-07-23 07:19:50 -04:00
* 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:
parent
b0b7b696e9
commit
4fa1040ea0
4
DynamicBibleIonic/.prettierrc
Normal file
4
DynamicBibleIonic/.prettierrc
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"printWidth": 120,
|
||||
"singleQuote": false
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -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"]
|
||||
|
@ -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"]
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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" />
|
||||
|
@ -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/
|
||||
|
4
DynamicBibleIonic/docker/build_apk.sh
Normal file
4
DynamicBibleIonic/docker/build_apk.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd /db/dynamicbible/DynamicBibleIonic
|
||||
ionic cordova build android
|
30
DynamicBibleIonic/package-lock.json
generated
30
DynamicBibleIonic/package-lock.json
generated
@ -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",
|
||||
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
33
DynamicBibleIonic/run.Dockerfile
Normal file
33
DynamicBibleIonic/run.Dockerfile
Normal 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"]
|
@ -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>
|
||||
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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>
|
||||
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>
|
||||
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>
|
||||
|
@ -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%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
@ -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
|
||||
});
|
||||
|
3
DynamicBibleIonic/typings/cordova-typings.d.ts
vendored
Normal file
3
DynamicBibleIonic/typings/cordova-typings.d.ts
vendored
Normal 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
@ -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
Loading…
x
Reference in New Issue
Block a user