Compare commits

...

18 Commits

Author SHA1 Message Date
Jason Wall
c9534c3b30 Merge branch 'angular-18-upgrade' into 'main'
Angular 18 Upgrade

See merge request walljm/dynamicbible!35
2024-07-11 18:28:33 +00:00
Jason Wall
7dc029ec4e Angular 18 Upgrade 2024-07-11 18:28:33 +00:00
Jason Wall
b8bca83612 update gradle and some versions 2024-07-09 18:03:33 -05:00
Jason Wall
9781c1ff49 update sdk version 2024-07-08 16:06:29 -05:00
Jason Wall
4b41ba1048 Merge branch '6-edit-card-query-option-in-card-context-menu' into 'main'
Draft: Resolve "Edit card query option in card context menu"

Closes #6

See merge request walljm/dynamicbible!34
2024-07-08 12:07:22 +00:00
Jason Wall
0a9a147220 Draft: Resolve "Edit card query option in card context menu" 2024-07-08 12:07:22 +00:00
Jason Wall
9af7e31a70 Merge branch 'db-fix-search-index' into 'main'
Fix search index

See merge request walljm/dynamicbible!33
2024-04-17 13:00:13 +00:00
Jason Wall
646a9a9292 Fix search index 2024-04-17 08:50:26 -04:00
Jason Wall
49f67c5cff Merge branch 'bugs' into 'main'
fix niggling display issue with settings

See merge request walljm/dynamicbible!31
2024-03-25 16:42:39 +00:00
Jason Wall
8555191c45 fix niggling display issue with settings 2024-03-25 16:24:52 +00:00
Jason Wall
3fbb809cee Merge branch 'clean-up-utility' into 'main'
Update the data utility

See merge request walljm/dynamicbible!30
2024-03-25 16:14:17 +00:00
Jason Wall
dbd7f944f6 Update the data utility 2024-03-25 16:14:17 +00:00
Jason Wall
a2a6b4c28d Merge branch 'login-bug' into 'main'
Login bug

See merge request walljm/dynamicbible!29
2024-03-14 05:20:45 +00:00
Jason Wall
ec05d3c801 Login bug 2024-03-14 05:20:45 +00:00
Jason Wall
0991570c20 not sure what this is 2024-03-10 20:08:27 -04:00
Jason Wall
c3be044707 it builds! so that's something 2024-03-10 19:57:28 -04:00
Jason Wall
49616ba693 Merge branch 'bug-strongs-from-strong' into 'main'
Bug strongs from strong

See merge request walljm/dynamicbible!28
2024-03-10 23:00:54 +00:00
Jason Wall
1669bdc6bd Fix bug where strongs numbers in a strongs definition weren't rendering 2024-03-10 23:00:54 +00:00
577 changed files with 854457 additions and 13480 deletions

View File

@ -6,7 +6,7 @@ stages:
build-android:
stage: build
image: walljm/gradle_android:8.0.2-jdk17-33-node1
image: walljm/gradle_android:8.2.1-jdk17-android34-node22
before_script:
- cd ./src/android
- bash ./install-sdk.sh
@ -29,7 +29,7 @@ build-android:
test:
stage: test
image: walljm/node-chrome-headless:21.6
image: walljm/node-chrome-headless:22.4-bookworm
variables:
NODE_OPTIONS: "--max_old_space_size=2048"
script:
@ -68,7 +68,7 @@ deploy-prod-site:
deploy-android:
stage: prod
image: walljm/gradle_android:8.0.2-jdk17-33-node1
image: walljm/gradle_android:8.2.1-jdk17-android34-node22
needs:
- build-android
before_script:

View File

@ -1,4 +1,4 @@
FROM node:21.6.2-bookworm
FROM node:22.4-bookworm
RUN apt-get update -qqy \
&& apt-get -qqy install \

View File

@ -1,2 +1,2 @@
docker build -t walljm/node-chrome-headless:21.6 .
docker push walljm/node-chrome-headless:21.6
docker build -t walljm/node-chrome-headless:22.4-bookworm .
docker push walljm/node-chrome-headless:22.4-bookworm

View File

@ -1,5 +1,5 @@
FROM gradle:8.0.2-jdk17-focal
FROM gradle:8.2.1-jdk17-focal
# Install Git and dependencies
RUN apt-get update \
@ -7,7 +7,7 @@ RUN apt-get update \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists /var/cache/apt
RUN curl -L -o node.tar.gz "https://nodejs.org/dist/v21.6.2/node-v21.6.2-linux-x64.tar.gz" && \
RUN curl -L -o node.tar.gz "https://nodejs.org/dist/v22.4.1/node-v22.4.1-linux-x64.tar.gz" && \
tar -xzf node.tar.gz -C /usr/local --strip-components=1 && \
rm node.tar.gz && \
ln -s /usr/local/bin/node /usr/local/bin/nodejs
@ -42,7 +42,7 @@ RUN $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --update
RUN $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --verbose \
"build-tools;34.0.0" \
"build-tools;30.0.3" \
"platforms;android-33" \
"platforms;android-34" \
"platform-tools"

View File

@ -1,2 +1,2 @@
docker build -t walljm/gradle_android:8.0.2-jdk17-33-node1 .
docker push walljm/gradle_android:8.0.2-jdk17-33-node1
docker build -t walljm/gradle_android:8.2.1-jdk17-android34-node22 .
docker push walljm/gradle_android:8.2.1-jdk17-android34-node22

View File

@ -85,7 +85,7 @@ dependencies {
implementation 'com.google.firebase:firebase-auth'
// Also declare the dependency for the Google Play services library and specify its version
implementation 'com.google.android.gms:play-services-auth:21.0.0'
implementation 'com.google.android.gms:play-services-auth:21.2.0'
}

View File

@ -22,6 +22,14 @@
"certificate_hash": "61703efe57998735ca5d22fec522d099cea1e83c"
}
},
{
"client_id": "200739882604-h8r8otm9rlfseul40hd69k0jl6pf8g4h.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "walljm.dynamicbible",
"certificate_hash": "18dd331a0946bc10b985e31d1882b398ae9fd0d1"
}
},
{
"client_id": "200739882604-vl9sdm2o394c9v8dlnt6j41ng99bfdc4.apps.googleusercontent.com",
"client_type": 1,

View File

@ -12,9 +12,12 @@
"profile",
"email"
],
"serverClientId": "200739882604-i4mk6rp4mcb8n590j5kc8i6bncpm5bo1.apps.googleusercontent.com",
"clientId": "200739882604-i4mk6rp4mcb8n590j5kc8i6bncpm5bo1.apps.googleusercontent.com",
"forceCodeForRefreshToken": true
}
},
"cordova": {}
"cordova": {},
"ios": {
"contentInset": "always"
}
}

View File

@ -4,5 +4,4 @@
<string name="title_activity_main">Dynamic Bible</string>
<string name="package_name">walljm.dynamicbible</string>
<string name="custom_url_scheme">walljm.dynamicbible</string>
<string name="server_client_id">200739882604-i4mk6rp4mcb8n590j5kc8i6bncpm5bo1.apps.googleusercontent.com</string>
</resources>

View File

@ -7,8 +7,8 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.2'
classpath 'com.google.gms:google-services:4.4.1'
classpath 'com.android.tools.build:gradle:8.2.1'
classpath 'com.google.gms:google-services:4.4.2'
classpath "com.github.triplet.gradle:play-publisher:3.8.1"
// NOTE: Do not place your application dependencies here; they belong

View File

@ -9,7 +9,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
classpath 'com.android.tools.build:gradle:8.2.1'
}
}
@ -17,10 +17,10 @@ apply plugin: 'com.android.library'
android {
namespace "capacitor.cordova.android.plugins"
compileSdkVersion project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 33
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
defaultConfig {
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 33
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
versionCode 1
versionName "1.0"
}

View File

@ -1,15 +1,15 @@
ext {
minSdkVersion = 22
firebaseMessagingVersion = '23.0.5'
compileSdkVersion = 33
targetSdkVersion = 33
androidxActivityVersion = '1.7.0'
firebaseMessagingVersion = '23.3.1'
compileSdkVersion = 34
targetSdkVersion = 34
androidxActivityVersion = '1.8.0'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.10.0'
androidxFragmentVersion = '1.5.6'
androidxCoreVersion = '1.12.0'
androidxFragmentVersion = '1.6.2'
coreSplashScreenVersion = '1.0.1'
androidxWebkitVersion = '1.6.1'
androidxWebkitVersion = '1.9.0'
junitVersion = '4.13.2'
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'

View File

@ -9,9 +9,12 @@
},
"GoogleAuth": {
"scopes": ["profile", "email"],
"serverClientId": "200739882604-i4mk6rp4mcb8n590j5kc8i6bncpm5bo1.apps.googleusercontent.com",
"forceCodeForRefreshToken" : true
"clientId": "200739882604-i4mk6rp4mcb8n590j5kc8i6bncpm5bo1.apps.googleusercontent.com",
"forceCodeForRefreshToken": true
}
},
"cordova": {}
"cordova": {},
"ios": {
"contentInset": "always"
}
}

13
src/ios/.gitignore vendored Normal file
View File

@ -0,0 +1,13 @@
App/build
App/Pods
App/output
App/App/public
DerivedData
xcuserdata
# Cordova plugins for Capacitor
capacitor-cordova-ios-plugins
# Generated Config files
App/App/capacitor.config.json
App/App/config.xml

View File

@ -0,0 +1,412 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; };
AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; };
FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
504EC3011FED79650016851F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
isa = PBXGroup;
children = (
AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
504EC2FB1FED79650016851F = {
isa = PBXGroup;
children = (
504EC3061FED79650016851F /* App */,
504EC3051FED79650016851F /* Products */,
7F8756D8B27F46E3366F6CEA /* Pods */,
27E2DDA53C4D2A4D1A88CE4A /* Frameworks */,
);
sourceTree = "<group>";
};
504EC3051FED79650016851F /* Products */ = {
isa = PBXGroup;
children = (
504EC3041FED79650016851F /* App.app */,
);
name = Products;
sourceTree = "<group>";
};
504EC3061FED79650016851F /* App */ = {
isa = PBXGroup;
children = (
50379B222058CBB4000EE86E /* capacitor.config.json */,
504EC3071FED79650016851F /* AppDelegate.swift */,
504EC30B1FED79650016851F /* Main.storyboard */,
504EC30E1FED79650016851F /* Assets.xcassets */,
504EC3101FED79650016851F /* LaunchScreen.storyboard */,
504EC3131FED79650016851F /* Info.plist */,
2FAD9762203C412B000D30F8 /* config.xml */,
50B271D01FEDC1A000F3C39B /* public */,
);
path = App;
sourceTree = "<group>";
};
7F8756D8B27F46E3366F6CEA /* Pods */ = {
isa = PBXGroup;
children = (
FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */,
AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
504EC3031FED79650016851F /* App */ = {
isa = PBXNativeTarget;
buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
buildPhases = (
6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */,
504EC3001FED79650016851F /* Sources */,
504EC3011FED79650016851F /* Frameworks */,
504EC3021FED79650016851F /* Resources */,
9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = App;
productName = App;
productReference = 504EC3041FED79650016851F /* App.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
504EC2FC1FED79650016851F /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 0920;
TargetAttributes = {
504EC3031FED79650016851F = {
CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
compatibilityVersion = "Xcode 8.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 504EC2FB1FED79650016851F;
productRefGroup = 504EC3051FED79650016851F /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
504EC3031FED79650016851F /* App */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
504EC3021FED79650016851F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
50B271D11FEDC1A000F3C39B /* public in Resources */,
504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
504EC30D1FED79650016851F /* Main.storyboard in Resources */,
2FAD9763203C412B000D30F8 /* config.xml in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
504EC3001FED79650016851F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
504EC30B1FED79650016851F /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
504EC30C1FED79650016851F /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
504EC3111FED79650016851F /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
504EC3141FED79650016851F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
504EC3151FED79650016851F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
504EC3171FED79650016851F /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7WBJ6RDWEA;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Dynamic Bible";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 4.0.0;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = walljm.dynamicbible;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
504EC3181FED79650016851F /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7WBJ6RDWEA;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Dynamic Bible";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 4.0.0;
PRODUCT_BUNDLE_IDENTIFIER = walljm.dynamicbible;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
isa = XCConfigurationList;
buildConfigurations = (
504EC3141FED79650016851F /* Debug */,
504EC3151FED79650016851F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = {
isa = XCConfigurationList;
buildConfigurations = (
504EC3171FED79650016851F /* Debug */,
504EC3181FED79650016851F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 504EC2FC1FED79650016851F /* Project object */;
}

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:App.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,49 @@
import UIKit
import Capacitor
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
// Called when the app was launched with a url. Feel free to add additional processing here,
// but if you want the App API to support tracking app url opens, make sure to keep this call
return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Called when the app was launched with an activity, including Universal Links.
// Feel free to add additional processing here, but if you want the App API to support
// tracking app url opens, make sure to keep this call
return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -0,0 +1,14 @@
{
"images" : [
{
"filename" : "AppIcon-512@2x.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "splash-2732x2732-2.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "splash-2732x2732-1.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "splash-2732x2732.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17132" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17105"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<imageView key="view" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Splash" id="snD-IY-ifK">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
</imageView>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="Splash" width="1366" height="1366"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14111" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
</dependencies>
<scenes>
<!--Bridge View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="CAPBridgeViewController" customModule="Capacitor" sceneMemberID="viewController"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>dynamicbible</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
</dict>
</plist>

24
src/ios/App/Podfile Normal file
View File

@ -0,0 +1,24 @@
require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
platform :ios, '13.0'
use_frameworks!
# workaround to avoid Xcode caching of Pods that requires
# Product -> Clean Build Folder after new Cordova plugins installed
# Requires CocoaPods 1.6 or newer
install! 'cocoapods', :disable_input_output_paths => true
def capacitor_pods
pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
pod 'CodetrixStudioCapacitorGoogleAuth', :path => '../../node_modules/@codetrix-studio/capacitor-google-auth'
end
target 'App' do
capacitor_pods
# Add your Pods here
end
post_install do |installer|
assertDeploymentTarget(installer)
end

54
src/ios/App/Podfile.lock Normal file
View File

@ -0,0 +1,54 @@
PODS:
- AppAuth (1.7.1):
- AppAuth/Core (= 1.7.1)
- AppAuth/ExternalUserAgent (= 1.7.1)
- AppAuth/Core (1.7.1)
- AppAuth/ExternalUserAgent (1.7.1):
- AppAuth/Core
- Capacitor (6.1.0):
- CapacitorCordova
- CapacitorCordova (6.1.0)
- CodetrixStudioCapacitorGoogleAuth (0.0.1):
- Capacitor
- GoogleSignIn (~> 6.2.4)
- GoogleSignIn (6.2.4):
- AppAuth (~> 1.5)
- GTMAppAuth (~> 1.3)
- GTMSessionFetcher/Core (< 3.0, >= 1.1)
- GTMAppAuth (1.3.1):
- AppAuth/Core (~> 1.6)
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
- GTMSessionFetcher/Core (2.3.0)
DEPENDENCIES:
- "Capacitor (from `../../node_modules/@capacitor/ios`)"
- "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
- "CodetrixStudioCapacitorGoogleAuth (from `../../node_modules/@codetrix-studio/capacitor-google-auth`)"
SPEC REPOS:
trunk:
- AppAuth
- GoogleSignIn
- GTMAppAuth
- GTMSessionFetcher
EXTERNAL SOURCES:
Capacitor:
:path: "../../node_modules/@capacitor/ios"
CapacitorCordova:
:path: "../../node_modules/@capacitor/ios"
CodetrixStudioCapacitorGoogleAuth:
:path: "../../node_modules/@codetrix-studio/capacitor-google-auth"
SPEC CHECKSUMS:
AppAuth: e93b919be5dbcbba49555011ce94f7d716368574
Capacitor: 187bd7847b6f71467015a20200a1a071be3e5f14
CapacitorCordova: be703980ca797f847c3356f78fa175d21c8330c2
CodetrixStudioCapacitorGoogleAuth: fcce058390347c1ce5d8ac4764bdf1f5c1ee233b
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
PODFILE CHECKSUM: ef7e0fa555a35bc098cb53d9f170d080cea276c2
COCOAPODS: 1.15.2

12659
src/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,51 +16,51 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^17.2.3",
"@angular/cdk": "^17.2.1",
"@angular/common": "^17.2.3",
"@angular/compiler": "^17.2.3",
"@angular/core": "^17.2.3",
"@angular/fire": "^17.0.1",
"@angular/forms": "^17.2.3",
"@angular/material": "^17.2.1",
"@angular/platform-browser": "^17.2.3",
"@angular/platform-browser-dynamic": "^17.2.3",
"@angular/router": "^17.2.3",
"@capacitor/android": "^5.7.0",
"@capacitor/core": "^5.7.0",
"@capacitor/ios": "^5.7.0",
"@angular/animations": "^18.1.0",
"@angular/cdk": "^18.0.6",
"@angular/common": "^18.1.0",
"@angular/compiler": "^18.1.0",
"@angular/core": "^18.1.0",
"@angular/fire": "^18.0.1",
"@angular/forms": "^18.1.0",
"@angular/material": "^18.0.6",
"@angular/platform-browser": "^18.1.0",
"@angular/platform-browser-dynamic": "^18.1.0",
"@angular/router": "^18.1.0",
"@capacitor/android": "^6.0.0",
"@capacitor/core": "^6.0.0",
"@capacitor/ios": "^6.0.0",
"@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0",
"@ngx-pwa/local-storage": "^17.0.0",
"@ngx-pwa/local-storage": "^18.0.0",
"angular2-uuid": "^1.1.1",
"firebase": "^10.8.0",
"marked": "^9.0.0",
"ngx-markdown": "^17.1.1",
"ngx-markdown": "^18.0.0",
"reselect": "^5.1.0",
"rxjs": "^7.8.1",
"tslib": "^2.6.2",
"zone.js": "~0.14.4"
},
"devDependencies": {
"@angular-devkit/architect": "0.1702.1",
"@angular-devkit/build-angular": "^17.2.1",
"@angular-eslint/builder": "17.2.1",
"@angular-eslint/eslint-plugin": "17.2.1",
"@angular-eslint/eslint-plugin-template": "17.2.1",
"@angular-eslint/schematics": "17.2.1",
"@angular-eslint/template-parser": "17.2.1",
"@angular/cli": "^17.2.1",
"@angular/compiler-cli": "^17.2.1",
"@capacitor/cli": "^5.7.0",
"@angular-devkit/architect": "0.1800.7",
"@angular-devkit/build-angular": "^18.0.7",
"@angular-eslint/builder": "18.1.0",
"@angular-eslint/eslint-plugin": "18.1.0",
"@angular-eslint/eslint-plugin-template": "18.1.0",
"@angular-eslint/schematics": "18.1.0",
"@angular-eslint/template-parser": "18.1.0",
"@angular/cli": "^18.0.7",
"@angular/compiler-cli": "^18.1.0",
"@capacitor/cli": "^6.0.0",
"@cypress/schematic": "^2.5.1",
"@types/jasmine": "~5.1.4",
"@types/jasminewd2": "~2.0.13",
"@types/node": "^20.11.21",
"@typescript-eslint/eslint-plugin": "7.1.0",
"@typescript-eslint/parser": "^7.1.0",
"cypress": "latest",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"cypress": "13.6.6",
"eslint": "^8.57.0",
"eslint-plugin-deprecation": "^2.0.0",
"eslint-plugin-deprecation": "^3.0.0",
"eslint-plugin-optimize-regex": "^1.2.1",
"eslint-plugin-simple-import-sort": "^12.0.0",
"eslint-plugin-unused-imports": "^3.1.0",
@ -77,7 +77,7 @@
"karma-jasmine-html-reporter": "^2.1.0",
"open": "^10.0.4",
"ts-node": "~10.9.2",
"typescript": "~5.3.3"
"typescript": "~5.4.5"
},
"browserslist": [
"last 1 Chrome version",
@ -89,4 +89,4 @@
"not IE 9-10 ",
"not IE 11 "
]
}
}

View File

@ -1,6 +1,6 @@
import { ClipboardModule } from '@angular/cdk/clipboard';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { HttpClientModule } from '@angular/common/http';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { APP_ID, NgModule } from '@angular/core';
import { AngularFireModule } from '@angular/fire/compat';
import { AngularFireAuthModule } from '@angular/fire/compat/auth';
@ -41,6 +41,7 @@ import { MarkedOptions, MarkedRenderer } from 'ngx-markdown';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { AddToPageModalComponent } from './components/add-to-page-modal/add-to-page-modal.component';
import { CardEditModalComponent } from './components/card-edit-modal/card-edit-modal.component';
import { HelpModalComponent } from './components/help-modal/help-modal.component';
import { NoteEditModalComponent } from './components/note/edit-modal/note-edit-modal.component';
import { NoteCardComponent } from './components/note/note-card.component';
@ -75,79 +76,69 @@ export function markedOptionsFactory(): MarkedOptions {
};
}
@NgModule({
declarations: [
AppComponent,
NotesAdminPageComponent,
SavedPagesAdminPageComponent,
SavedPageCardComponent,
HelpModalComponent,
SearchPageComponent,
PassageCardComponent,
StrongsComponent,
StrongsCardComponent,
StrongsModalComponent,
WordsCardComponent,
NoteCardComponent,
PageEditModalComponent,
NoteEditModalComponent,
AddToPageModalComponent,
VersePickerModalComponent,
SettingsComponent,
OkCancelModalComponent,
],
imports: [
BrowserModule,
HttpClientModule,
ReactiveFormsModule,
FormsModule,
AppRoutingModule,
BrowserAnimationsModule,
MarkdownModule.forRoot({
markedOptions: {
provide: MARKED_OPTIONS,
useFactory: markedOptionsFactory,
},
}),
AngularFireModule.initializeApp(FirebaseConfig),
AngularFireAuthModule,
AngularFireDatabaseModule,
DragDropModule,
MatSidenavModule,
MatChipsModule,
MatToolbarModule,
MatIconModule,
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatStepperModule,
MatDialogModule,
MatDividerModule,
MatExpansionModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatTooltipModule,
MatFormFieldModule,
MatTabsModule,
ClipboardModule,
],
providers: [{ provide: APP_ID, useValue: 'ng-cli-universal' }],
bootstrap: [AppComponent],
})
@NgModule({ declarations: [
AppComponent,
NotesAdminPageComponent,
SavedPagesAdminPageComponent,
SavedPageCardComponent,
HelpModalComponent,
SearchPageComponent,
PassageCardComponent,
StrongsComponent,
StrongsCardComponent,
StrongsModalComponent,
WordsCardComponent,
NoteCardComponent,
PageEditModalComponent,
NoteEditModalComponent,
AddToPageModalComponent,
VersePickerModalComponent,
SettingsComponent,
OkCancelModalComponent,
CardEditModalComponent,
],
bootstrap: [AppComponent], imports: [BrowserModule,
ReactiveFormsModule,
FormsModule,
AppRoutingModule,
BrowserAnimationsModule,
MarkdownModule.forRoot({
markedOptions: {
provide: MARKED_OPTIONS,
useFactory: markedOptionsFactory,
},
}),
AngularFireModule.initializeApp(FirebaseConfig),
AngularFireAuthModule,
AngularFireDatabaseModule,
DragDropModule,
MatSidenavModule,
MatChipsModule,
MatToolbarModule,
MatIconModule,
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatStepperModule,
MatDialogModule,
MatDividerModule,
MatExpansionModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatTooltipModule,
MatFormFieldModule,
MatTabsModule,
ClipboardModule], providers: [{ provide: APP_ID, useValue: 'ng-cli-universal' }, provideHttpClient(withInterceptorsFromDi())] })
export class AppModule {}

View File

@ -0,0 +1,16 @@
<mat-toolbar>
<mat-icon>save</mat-icon>
</mat-toolbar>
<mat-dialog-content class="content">
<form [formGroup]="form">
<mat-form-field class="page-title">
<mat-label>Query</mat-label>
<input formControlName="qry" matInput />
</mat-form-field>
</form>
<div mat-dialog-actions>
<button mat-button (click)="save()">Save</button>
<button mat-button (click)="cancel()">Cancel</button>
</div>
</mat-dialog-content>

View File

@ -0,0 +1,25 @@
.close-button {
float: right;
}
.title {
width: 100%;
padding-left: 1rem;
font-size: 1.5rem;
overflow: hidden;
}
.mat-mdc-form-field {
display: block;
}
.page-title {
min-width: 50vw;
padding-top: 12px;
}
.mat-mdc-dialog-content {
min-width: 60vw;
min-height: 20vh;
max-height: 80vh;
}

View File

@ -0,0 +1,45 @@
import { Component, Inject } from '@angular/core';
import { FormGroup, UntypedFormBuilder } from '@angular/forms';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { CardItem } from 'src/app/models/card-state';
import { AppService } from 'src/app/services/app.service';
@Component({
selector: 'app-card-edit-modal',
templateUrl: 'card-edit-modal.component.html',
styleUrls: ['./card-edit-modal.component.scss'],
})
export class CardEditModalComponent {
form: FormGroup;
dialogTitle = 'Save Page using Current Cards';
oldCard: CardItem;
constructor(
@Inject(MAT_DIALOG_DATA) public data: CardEditModalData,
public dialogRef: MatDialogRef<CardEditModalComponent>,
private appService: AppService,
private fb: UntypedFormBuilder
) {
this.oldCard = data.card;
this.form = this.fb.group(data.card);
}
cancel() {
this.dialogRef.close();
}
save() {
this.appService.updateCard(
{
qry: this.form.get('qry').value,
type: this.form.get('type').value,
} as CardItem,
this.oldCard
);
this.dialogRef.close();
}
}
export interface CardEditModalData {
card: CardItem;
}

View File

@ -1,5 +1,5 @@
import { Clipboard } from '@angular/cdk/clipboard';
import { Component,ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { Observable } from 'rxjs';
@ -8,6 +8,7 @@ import { SubscriberBase } from '../common/subscriber-base';
import { AddToPageModalComponent } from '../components/add-to-page-modal/add-to-page-modal.component';
import { CardItem } from '../models/card-state';
import { AppService } from '../services/app.service';
import { CardEditModalComponent } from './card-edit-modal/card-edit-modal.component';
@Component({
template: '',
@ -83,4 +84,12 @@ export class CardComponent extends SubscriberBase {
moveCardUp() {
this.appService.moveCard(this.cardItem, MoveDirection.Up);
}
editReferenceModal() {
this.dialog.open(CardEditModalComponent, {
data: {
card: { ...this.cardItem } as CardItem,
},
});
}
}

View File

@ -14,21 +14,21 @@ export class PageEditModalComponent {
dialogTitle = 'Save Page using Current Cards';
constructor(
@Inject(MAT_DIALOG_DATA) public title: PageEditModalData,
@Inject(MAT_DIALOG_DATA) public data: PageEditModalData,
public dialogRef: MatDialogRef<PageEditModalComponent>,
private appService: AppService,
private fb: UntypedFormBuilder
) {
if (title) {
if (data) {
this.dialogTitle = 'Edit Page Name';
} else {
title = {
data = {
title: '',
savedPage: null,
};
}
this.form = this.fb.group(title);
this.form = this.fb.group(data);
}
cancel() {
@ -38,7 +38,7 @@ export class PageEditModalComponent {
save() {
if (this.dialogTitle === 'Edit Page Name') {
this.appService.updateSavedPage({
...this.title.savedPage,
...this.data.savedPage,
title: this.form.get('title').value,
});
} else {

View File

@ -102,6 +102,10 @@
<mat-icon>more_vert</mat-icon>
</button>
<mat-menu #moreMenu="matMenu">
<button mat-menu-item (click)="editReferenceModal()">
<mat-icon>edit</mat-icon>
<span>Edit Reference</span>
</button>
<button mat-menu-item (click)="copy()">
<mat-icon>content_copy</mat-icon>
<span>Copy Passage</span>

View File

@ -11,3 +11,7 @@
.auth-button {
width: 100%;
}
.mdc-slider__input {
padding: 0px !important;
}

View File

@ -52,7 +52,7 @@ export class StrongsCardComponent extends CardComponent {
if (this.asModal) {
const card = await this.appService.getStrongsCard(sn, dict);
this.dialog.open(StrongsModalComponent, {
data: card,
data: [card],
autoFocus: 'content',
});
} else {

View File

@ -14,19 +14,23 @@
</span>
</mat-toolbar>
<mat-dialog-content class="content">
<mat-tab-group *ngIf="strongsResults.length > 1">
<mat-tab *ngFor="let card of strongsResults">
<ng-template mat-tab-label>{{ card.prefix }}{{ card.sn }}</ng-template>
<app-strongs
[data]="card"
(openPassage)="openPassage($event)"
></app-strongs>
</mat-tab>
</mat-tab-group>
<ng-container *ngIf="strongsResults.length === 1">
<ng-container *ngIf="(results$ | async).length > 1; let strongs">
<mat-tab-group [(selectedIndex)]="selectedIndex">
<mat-tab *ngFor="let card of results$ | async; index as idx">
<ng-template mat-tab-label>{{ card.prefix }}{{ card.sn }}</ng-template>
<app-strongs
[data]="card"
(openPassage)="openPassage($event)"
(openStrongs)="openStrongs($event)"
></app-strongs>
</mat-tab>
</mat-tab-group>
</ng-container>
<ng-container *ngIf="(results$ | async).length === 1">
<app-strongs
[data]="strongsResults[0]"
[data]="(results$ | async)[0]"
(openPassage)="openPassage($event)"
(openStrongs)="openStrongs($event)"
></app-strongs>
</ng-container>
</mat-dialog-content>

View File

@ -1,7 +1,8 @@
import { ChangeDetectionStrategy,Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA,MatDialogRef } from '@angular/material/dialog';
import { Observable } from 'rxjs';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';
import { BehaviorSubject, Observable } from 'rxjs';
import { BibleReference } from 'src/app/common/bible-reference';
import { SubscriberBase } from 'src/app/common/subscriber-base';
import { CardItem } from 'src/app/models/card-state';
import { StrongsResult } from 'src/app/models/strongs-state';
import { AppService } from 'src/app/services/app.service';
@ -13,25 +14,56 @@ import { AppService } from 'src/app/services/app.service';
preserveWhitespaces: true,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class StrongsModalComponent {
export class StrongsModalComponent extends SubscriberBase {
icon$: Observable<string>;
strongsResults: StrongsResult[];
results$: BehaviorSubject<StrongsResult[]> = new BehaviorSubject([]);
selectedIndex = 0;
title: string;
asModal = false;
constructor(
@Inject(MAT_DIALOG_DATA) public cardItems: CardItem[],
public dialogRef: MatDialogRef<StrongsModalComponent>,
private appService: AppService
private appService: AppService,
protected dialog: MatDialog
) {
this.title = cardItems.map(o => o.qry).reduce((p, c) => `${p}, ${c}`);
this.strongsResults = cardItems.map(o => o.data as StrongsResult);
super();
this.title = cardItems.map((o) => o.qry).reduce((p, c) => `${p}, ${c}`);
this.results$.next(cardItems.map((o) => o.data as StrongsResult));
this.icon$ = appService.select((state) => state.settings.value.cardIcons.strongs);
this.addSubscription(
this.appService
.select((state) => state.settings.value.displaySettings.showStrongsAsModal)
.subscribe((asModal) => {
this.asModal = asModal;
})
);
}
cancel() {
this.dialogRef.close();
}
async openStrongs(q: string) {
const dict = q.substring(0, 1) === 'H' ? 'heb' : 'grk';
const sn = q.substring(1);
if (this.asModal) {
const currIdx = this.results$.value.findIndex((o) => o.sn.toString() === sn);
if (currIdx > -1) {
this.selectedIndex = currIdx;
return;
}
const card = await this.appService.getStrongsCard(sn, dict);
const strongs = card.data as StrongsResult;
const ordered = [...this.results$.value.filter((o) => `${o.prefix}${o.sn}` !== q), strongs];
this.results$.next(ordered);
this.selectedIndex = ordered.length - 1;
} else {
this.appService.getStrongs([sn], dict, this.cardItems[0]);
}
}
openPassage(p: string) {
const ref = BibleReference.makePassageFromReferenceKey(p);
this.appService.getPassage(ref, this.cardItems[0]);

View File

@ -4,14 +4,14 @@ import { UUID } from 'angular2-uuid';
import { lastValueFrom } from 'rxjs';
import { moveItem, moveItemUpOrDown } from '../common/array-operations';
import { BibleReference, Overlap,Section } from '../common/bible-reference';
import { getFromCardCache,removeFromCardCache, updateInCardCache } from '../common/card-cache-operations';
import { BibleReference, Overlap, Section } from '../common/bible-reference';
import { getFromCardCache, removeFromCardCache, updateInCardCache } from '../common/card-cache-operations';
import { mergeCardList } from '../common/card-operations';
import { HashTable } from '../common/hashtable';
import { MoveDirection } from '../common/move-direction';
import { createReducingService,IReducingAction } from '../common/state-service';
import { createReducingService, IReducingAction } from '../common/state-service';
import { IStorable, Storable, StorableType } from '../common/storable';
import { AppState, DisplaySettings, Error,PageSettings, Settings, User } from '../models/app-state';
import { AppState, DisplaySettings, Error, PageSettings, Settings, User } from '../models/app-state';
import { CardItem, CardType, DataReference } from '../models/card-state';
import { NoteItem } from '../models/note-state';
import { SavedPage } from '../models/page-state';
@ -31,7 +31,7 @@ import {
StrongsDictionary,
StrongsResult,
} from '../models/strongs-state';
import { IndexResult, WordLookupResult,WordToStem } from '../models/words-state';
import { IndexResult, WordLookupResult, WordToStem } from '../models/words-state';
const initialState: AppState = {
user: null,
@ -294,7 +294,7 @@ export const updateCardAction = (newCard: CardItem, oldCard: CardItem): AppActio
...state,
currentCards: new Storable(
state.currentCards.value.map((c) => {
if (c === oldCard) {
if (c.type === oldCard.type && c.qry === oldCard.qry) {
return newCard;
}
return c;
@ -824,6 +824,11 @@ export class AppService extends createReducingService(initialState) {
);
}
async updateCard(newCard: CardItem, oldCard: CardItem) {
const card = await this.getCardByQuery(newCard.qry.trim());
this.dispatch(updateCardAction(card, oldCard));
}
async clearCards() {
this.dispatch(clearCardsAction());
}
@ -1491,8 +1496,8 @@ export class AppService extends createReducingService(initialState) {
words.unshift('barbarian');
words.unshift('beard');
words.unshift('begettest');
words.unshift('benefactor');
words.unshift('bethel');
words.unshift('beneath');
words.unshift('bethabara');
words.unshift('bilshan');
words.unshift('blindeth');
words.unshift('booti');
@ -1506,152 +1511,152 @@ export class AppService extends createReducingService(initialState) {
words.unshift('chrysoprasus');
words.unshift('cloth');
words.unshift('common');
words.unshift('confess');
words.unshift('contendeth');
words.unshift('coucheth');
words.unshift('crept');
words.unshift('curseth');
words.unshift('darius');
words.unshift('decketh');
words.unshift('dema');
words.unshift('devil');
words.unshift('directeth');
words.unshift('disposit');
words.unshift('doth');
words.unshift('drowsi');
words.unshift('ebe');
words.unshift('elead');
words.unshift('elkoshit');
words.unshift('encourag');
words.unshift('entreat');
words.unshift('eschew');
words.unshift('ever');
words.unshift('expert');
words.unshift('fallest');
words.unshift('feedeth');
words.unshift('filthi');
words.unshift('fleeth');
words.unshift('forborn');
words.unshift('forsookest');
words.unshift('fretteth');
words.unshift('gahar');
words.unshift('gazzam');
words.unshift('gibea');
words.unshift('glister');
words.unshift('got');
words.unshift('grope');
words.unshift('hadlai');
words.unshift('hammon');
words.unshift('harbona');
words.unshift('hasrah');
words.unshift('hazezon');
words.unshift('heinous');
words.unshift('herebi');
words.unshift('highest');
words.unshift('holdeth');
words.unshift('hosanna');
words.unshift('huri');
words.unshift('ill');
words.unshift('inexcus');
words.unshift('intend');
words.unshift('ishui');
words.unshift('jaazaniah');
words.unshift('jaminit');
words.unshift('jecoliah');
words.unshift('jeopard');
words.unshift('jethro');
words.unshift('joiarib');
words.unshift('juda');
words.unshift('kelaiah');
words.unshift('kishion');
words.unshift('laden');
words.unshift('laughter');
words.unshift('lehi');
words.unshift('lift');
words.unshift('loatheth');
words.unshift('lucius');
words.unshift('madmen');
words.unshift('malachi');
words.unshift('march');
words.unshift('maul');
words.unshift('melchizedek');
words.unshift('merrili');
words.unshift('midianit');
words.unshift('miri');
words.unshift('modest');
words.unshift('move');
words.unshift('naashon');
words.unshift('nazareth');
words.unshift('nephishesim');
words.unshift('nisan');
words.unshift('obadiah');
words.unshift('oliveyard');
words.unshift('oren');
words.unshift('overrun');
words.unshift('pallu');
words.unshift('pas');
words.unshift('peel');
words.unshift('pernici');
words.unshift('philip');
words.unshift('pison');
words.unshift('plucketh');
words.unshift('pour');
words.unshift('price');
words.unshift('proport');
words.unshift('purg');
words.unshift('rabboni');
words.unshift('ravish');
words.unshift('redeemedst');
words.unshift('remainest');
words.unshift('reput');
words.unshift('revers');
words.unshift('rissah');
words.unshift('ruddi');
words.unshift('said');
words.unshift('sapphir');
words.unshift('scepter');
words.unshift('secundus');
words.unshift('separ');
words.unshift('shachia');
words.unshift('sharar');
words.unshift('sheepshear');
words.unshift('sheva');
words.unshift('shishak');
words.unshift('shroud');
words.unshift('signifi');
words.unshift('sittest');
words.unshift('slow');
words.unshift('soft');
words.unshift('sowedst');
words.unshift('spoil');
words.unshift('station');
words.unshift('stoop');
words.unshift('strongest');
words.unshift('sum');
words.unshift('sweep');
words.unshift('tahapan');
words.unshift('tast');
words.unshift('ten');
words.unshift('thereat');
words.unshift('threaten');
words.unshift('timbrel');
words.unshift('tongu');
words.unshift('travailest');
words.unshift('trust');
words.unshift('uncircumcis');
words.unshift('unprepar');
words.unshift('urg');
words.unshift('vat');
words.unshift('visiteth');
words.unshift('wash');
words.unshift('wed');
words.unshift('wherewith');
words.unshift('winepress');
words.unshift('won');
words.unshift('written');
words.unshift('zalmonah');
words.unshift('zenan');
words.unshift('ziphim');
words.unshift('confer');
words.unshift('contendest');
words.unshift('couch');
words.unshift('creepeth');
words.unshift('cursest');
words.unshift('dare');
words.unshift('deckest');
words.unshift('delus');
words.unshift('devic');
words.unshift('direct');
words.unshift('dispos');
words.unshift('dote');
words.unshift('drown');
words.unshift('ebal');
words.unshift('eldest');
words.unshift('elkanah');
words.unshift('encount');
words.unshift('entranc');
words.unshift('escapeth');
words.unshift('eventid');
words.unshift('experi');
words.unshift('fallen');
words.unshift('feedest');
words.unshift('filth');
words.unshift('fleec');
words.unshift('forbor');
words.unshift('forsook');
words.unshift('fret');
words.unshift('gaham');
words.unshift('gazit');
words.unshift('gibbethon');
words.unshift('glede');
words.unshift('gospel');
words.unshift('groaneth');
words.unshift('hadid');
words.unshift('hammoleketh');
words.unshift('haraseth');
words.unshift('hashupha');
words.unshift('hazeroth');
words.unshift('height');
words.unshift('hereaft');
words.unshift('higher');
words.unshift('holdest');
words.unshift('hosah');
words.unshift('huram');
words.unshift('ilai');
words.unshift('indit');
words.unshift('intellig');
words.unshift('ishuai');
words.unshift('jaasiel');
words.unshift('jamin');
words.unshift('jechoniah');
words.unshift('jemuel');
words.unshift('jethlah');
words.unshift('joiakim');
words.unshift('jucal');
words.unshift('keilah');
words.unshift('kishi');
words.unshift('lade');
words.unshift('laugheth');
words.unshift('lehem');
words.unshift('lifetim');
words.unshift('loath');
words.unshift('lucif');
words.unshift('madmannah');
words.unshift('maktesh');
words.unshift('marcaboth');
words.unshift('mattock');
words.unshift('melchiah');
words.unshift('merri');
words.unshift('midian');
words.unshift('mire');
words.unshift('moder');
words.unshift('movabl');
words.unshift('naarath');
words.unshift('nazaren');
words.unshift('nephish');
words.unshift('ninth');
words.unshift('oath');
words.unshift('olivet');
words.unshift('oregim');
words.unshift('overran');
words.unshift('palet');
words.unshift('parvaim');
words.unshift('pedigre');
words.unshift('permit');
words.unshift('philetus');
words.unshift('pisidia');
words.unshift('pluck');
words.unshift('pound');
words.unshift('prey');
words.unshift('propiti');
words.unshift('purer');
words.unshift('rabbith');
words.unshift('ravin');
words.unshift('redeem');
words.unshift('remaind');
words.unshift('reproveth');
words.unshift('reverend');
words.unshift('rishathaim');
words.unshift('rudder');
words.unshift('sahadutha');
words.unshift('saphir');
words.unshift('scent');
words.unshift('sect');
words.unshift('seorim');
words.unshift('shabbethai');
words.unshift('sharaim');
words.unshift('sheepmast');
words.unshift('shethar');
words.unshift('shisha');
words.unshift('shrine');
words.unshift('signif');
words.unshift('sitnah');
words.unshift('sloth');
words.unshift('soever');
words.unshift('sow');
words.unshift('spittl');
words.unshift('state');
words.unshift('stool');
words.unshift('stronger');
words.unshift('sukkiim');
words.unshift('sweat');
words.unshift('tahanit');
words.unshift('taskmast');
words.unshift('tempteth');
words.unshift('thereabout');
words.unshift('thread');
words.unshift('timber');
words.unshift('tong');
words.unshift('travail');
words.unshift('trumpet');
words.unshift('unchang');
words.unshift('unperfect');
words.unshift('urban');
words.unshift('vashti');
words.unshift('visitest');
words.unshift('warrior');
words.unshift('web');
words.unshift('whereupon');
words.unshift('winebibb');
words.unshift('womenserv');
words.unshift('writeth');
words.unshift('zalmon');
words.unshift('zena');
words.unshift('ziphah');
words.unshift('zuzim');
return words;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are 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

@ -0,0 +1 @@
[{"w":"elkoshit","r":["34:1:1"]},{"w":"ellasar","r":["1:14:1","1:14:9"]},{"w":"elm","r":["28:4:13"]},{"w":"elmodam","r":["42:3:28"]},{"w":"elnaam","r":["13:11:46"]},{"w":"elnathan","r":["12:24:8","15:8:16","24:26:22","24:36:12","24:36:25"]},{"w":"elohe-israel","r":["1:33:20"]},{"w":"eloi","r":["41:15:34"]},{"w":"elon","r":["1:26:34","1:36:2","1:46:14","4:26:26","6:19:43","7:12:11","7:12:12","11:4:9"]},{"w":"elonit","r":["4:26:26"]},{"w":"eloqu","r":["2:4:10","23:3:3","44:18:24"]},{"w":"eloth","r":["11:9:26","14:8:17","14:26:2"]},{"w":"elpaal","r":["13:8:11","13:8:12","13:8:18"]},{"w":"elpalet","r":["13:14:5"]},{"w":"els","r":["1:30:1","1:42:16","2:8:21","2:10:4","4:20:19","5:4:35","5:4:39","6:23:12","7:7:14","10:3:35","10:15:14","11:8:60","11:20:39","11:21:6","13:21:12","14:23:7","16:2:2","19:51:16","21:2:25","23:45:5","23:45:6","23:45:14","23:45:18","23:45:21","23:45:22","23:46:9","23:47:8","23:47:10","29:2:27","40:6:24","40:9:17","40:12:29","40:12:33","41:2:21","41:2:22","42:5:37","42:14:32","42:16:13","43:14:11","44:17:21","44:24:20","45:2:15","46:7:14","46:14:16","46:15:29","50:1:27","66:2:5","66:2:16"]},{"w":"eltekeh","r":["6:19:44","6:21:23"]},{"w":"eltekon","r":["6:15:59"]},{"w":"eltolad","r":["6:15:30","6:19:4"]},{"w":"elul","r":["16:6:15"]},{"w":"eluzai","r":["13:12:5"]},{"w":"elyma","r":["44:13:8"]},{"w":"elzabad","r":["13:12:12","13:26:7"]},{"w":"elzaphan","r":["2:6:22","3:10:4"]},{"w":"embalm","r":["1:50:2","1:50:3","1:50:26"]},{"w":"embolden","r":["46:8:10"]},{"w":"emboldeneth","r":["18:16:3"]},{"w":"embrac","r":["1:29:13","1:33:4","1:48:10","12:4:16","18:24:8","20:4:8","20:5:20","21:3:5","22:2:6","22:8:3","25:4:5","44:20:1","44:20:10","58:11:13"]},{"w":"embroid","r":["2:28:4","2:28:39","26:16:10","26:16:13","26:16:18","26:26:16","26:27:7","26:27:16","26:27:24"]},{"w":"embroider","r":["2:35:35","2:38:23"]},{"w":"emek","r":["6:19:27"]},{"w":"emerald","r":["2:28:18","2:39:11","26:27:16","26:28:13","66:4:3","66:21:19"]},{"w":"emerod","r":["5:28:27","9:5:6","9:5:9","9:5:12","9:6:4","9:6:5","9:6:11","9:6:17"]},{"w":"emim","r":["1:14:5","5:2:10","5:2:11"]},{"w":"emin","r":["26:16:24","26:16:31","26:16:39","26:17:22"]},{"w":"emmanuel","r":["40:1:23"]},{"w":"emmaus","r":["42:24:13"]},{"w":"empir","r":["17:1:20"]},{"w":"employ","r":["5:20:19","13:9:33","15:10:15","26:39:14"]},{"w":"empti","r":["1:24:20","1:31:42","1:37:24","1:41:27","1:42:35","2:3:21","2:23:15","2:34:20","3:14:36","5:15:13","5:16:16","7:7:16","8:1:21","8:3:17","9:6:3","9:20:18","9:20:25","9:20:27","10:1:22","12:4:3","14:24:11","16:5:13","18:22:9","18:26:7","21:11:3","23:19:6","23:24:1","23:24:3","23:29:8","23:32:6","23:34:11","24:14:3","24:48:11","24:48:12","24:51:2","24:51:34","26:24:11","28:10:1","34:2:2","34:2:10","35:1:17","38:4:12","40:12:44","41:12:3","42:1:53","42:20:10","42:20:11"]},{"w":"emptier","r":["34:2:2"]},{"w":"emul","r":["45:11:14","48:5:20"]},{"w":"en","r":["1:14:7","6:15:7","6:15:34","6:15:62","6:17:7","6:18:16","6:18:17","6:19:21","6:19:37","6:21:29","7:15:19","9:23:29","9:24:1","10:17:17","11:1:9","14:20:2","16:11:29","22:1:14","26:47:10"]},{"w":"enabl","r":["54:1:12"]},{"w":"enam","r":["6:15:34"]},{"w":"enan","r":["4:1:15","4:2:29","4:7:78","4:7:83","4:10:27","4:34:9","4:34:10","26:47:17","26:48:1"]},{"w":"encamp","r":["2:13:20","2:14:2","2:14:9","2:15:27","2:18:5","4:1:50","4:2:17","4:2:27","4:3:38","4:10:31","4:33:10","4:33:11","4:33:12","4:33:13","4:33:14","4:33:17","4:33:24","4:33:26","4:33:30","4:33:32","4:33:34","4:33:35","4:33:46","6:4:19","6:5:10","6:10:5","6:10:31","6:10:34","7:6:4","7:9:50","7:10:17","7:20:19","9:11:1","9:13:16","10:11:11","10:12:28","11:16:15","11:16:16","13:11:15","14:32:1","18:19:12","19:27:3","38:9:8"]},{"w":"encampeth","r":["19:34:7","19:53:5"]},{"w":"enchant","r":["2:7:11","2:7:22","2:8:7","2:8:18","3:19:26","4:23:23","4:24:1","5:18:10","12:17:17","12:21:6","14:33:6","21:10:11","23:47:9","23:47:12","24:27:9"]},{"w":"enclos","r":["2:28:20","2:39:6","2:39:13","7:20:43","19:17:10","19:22:16","22:4:12","22:8:9","25:3:9","42:5:6"]},{"w":"encount","r":["44:17:18"]}]

View File

@ -1 +0,0 @@
[{"w":"ellasar","r":["1:14:1","1:14:9"]},{"w":"elm","r":["28:4:13"]},{"w":"elmodam","r":["42:3:28"]},{"w":"elnaam","r":["13:11:46"]},{"w":"elnathan","r":["12:24:8","15:8:16","24:26:22","24:36:12","24:36:25"]},{"w":"elohe-israel","r":["1:33:20"]},{"w":"eloi","r":["41:15:34"]},{"w":"elon","r":["1:26:34","1:36:2","1:46:14","4:26:26","6:19:43","7:12:11","7:12:12","11:4:9"]},{"w":"elonit","r":["4:26:26"]},{"w":"eloqu","r":["2:4:10","23:3:3","44:18:24"]},{"w":"eloth","r":["11:9:26","14:8:17","14:26:2"]},{"w":"elpaal","r":["13:8:11","13:8:12","13:8:18"]},{"w":"elpalet","r":["13:14:5"]},{"w":"els","r":["1:30:1","1:42:16","2:8:21","2:10:4","4:20:19","5:4:35","5:4:39","6:23:12","7:7:14","10:3:35","10:15:14","11:8:60","11:20:39","11:21:6","13:21:12","14:23:7","16:2:2","19:51:16","21:2:25","23:45:5","23:45:6","23:45:14","23:45:18","23:45:21","23:45:22","23:46:9","23:47:8","23:47:10","29:2:27","40:6:24","40:9:17","40:12:29","40:12:33","41:2:21","41:2:22","42:5:37","42:14:32","42:16:13","43:14:11","44:17:21","44:24:20","45:2:15","46:7:14","46:14:16","46:15:29","50:1:27","66:2:5","66:2:16"]},{"w":"eltekeh","r":["6:19:44","6:21:23"]},{"w":"eltekon","r":["6:15:59"]},{"w":"eltolad","r":["6:15:30","6:19:4"]},{"w":"elul","r":["16:6:15"]},{"w":"eluzai","r":["13:12:5"]},{"w":"elyma","r":["44:13:8"]},{"w":"elzabad","r":["13:12:12","13:26:7"]},{"w":"elzaphan","r":["2:6:22","3:10:4"]},{"w":"embalm","r":["1:50:2","1:50:3","1:50:26"]},{"w":"embolden","r":["46:8:10"]},{"w":"emboldeneth","r":["18:16:3"]},{"w":"embrac","r":["1:29:13","1:33:4","1:48:10","12:4:16","18:24:8","20:4:8","20:5:20","21:3:5","22:2:6","22:8:3","25:4:5","44:20:1","44:20:10","58:11:13"]},{"w":"embroid","r":["2:28:4","2:28:39","26:16:10","26:16:13","26:16:18","26:26:16","26:27:7","26:27:16","26:27:24"]},{"w":"embroider","r":["2:35:35","2:38:23"]},{"w":"emek","r":["6:19:27"]},{"w":"emerald","r":["2:28:18","2:39:11","26:27:16","26:28:13","66:4:3","66:21:19"]},{"w":"emerod","r":["5:28:27","9:5:6","9:5:9","9:5:12","9:6:4","9:6:5","9:6:11","9:6:17"]},{"w":"emim","r":["1:14:5","5:2:10","5:2:11"]},{"w":"emin","r":["26:16:24","26:16:31","26:16:39","26:17:22"]},{"w":"emmanuel","r":["40:1:23"]},{"w":"emmaus","r":["42:24:13"]},{"w":"empir","r":["17:1:20"]},{"w":"employ","r":["5:20:19","13:9:33","15:10:15","26:39:14"]},{"w":"empti","r":["1:24:20","1:31:42","1:37:24","1:41:27","1:42:35","2:3:21","2:23:15","2:34:20","3:14:36","5:15:13","5:16:16","7:7:16","8:1:21","8:3:17","9:6:3","9:20:18","9:20:25","9:20:27","10:1:22","12:4:3","14:24:11","16:5:13","18:22:9","18:26:7","21:11:3","23:19:6","23:24:1","23:24:3","23:29:8","23:32:6","23:34:11","24:14:3","24:48:11","24:48:12","24:51:2","24:51:34","26:24:11","28:10:1","34:2:2","34:2:10","35:1:17","38:4:12","40:12:44","41:12:3","42:1:53","42:20:10","42:20:11"]},{"w":"emptier","r":["34:2:2"]},{"w":"emul","r":["45:11:14","48:5:20"]},{"w":"en","r":["1:14:7","6:15:7","6:15:34","6:15:62","6:17:7","6:18:16","6:18:17","6:19:21","6:19:37","6:21:29","7:15:19","9:23:29","9:24:1","10:17:17","11:1:9","14:20:2","16:11:29","22:1:14","26:47:10"]},{"w":"enabl","r":["54:1:12"]},{"w":"enam","r":["6:15:34"]},{"w":"enan","r":["4:1:15","4:2:29","4:7:78","4:7:83","4:10:27","4:34:9","4:34:10","26:47:17","26:48:1"]},{"w":"encamp","r":["2:13:20","2:14:2","2:14:9","2:15:27","2:18:5","4:1:50","4:2:17","4:2:27","4:3:38","4:10:31","4:33:10","4:33:11","4:33:12","4:33:13","4:33:14","4:33:17","4:33:24","4:33:26","4:33:30","4:33:32","4:33:34","4:33:35","4:33:46","6:4:19","6:5:10","6:10:5","6:10:31","6:10:34","7:6:4","7:9:50","7:10:17","7:20:19","9:11:1","9:13:16","10:11:11","10:12:28","11:16:15","11:16:16","13:11:15","14:32:1","18:19:12","19:27:3","38:9:8"]},{"w":"encampeth","r":["19:34:7","19:53:5"]},{"w":"enchant","r":["2:7:11","2:7:22","2:8:7","2:8:18","3:19:26","4:23:23","4:24:1","5:18:10","12:17:17","12:21:6","14:33:6","21:10:11","23:47:9","23:47:12","24:27:9"]},{"w":"enclos","r":["2:28:20","2:39:6","2:39:13","7:20:43","19:17:10","19:22:16","22:4:12","22:8:9","25:3:9","42:5:6"]},{"w":"encount","r":["44:17:18"]},{"w":"encourag","r":["5:1:38","5:3:28","7:20:22","9:30:6","10:11:25","14:31:4","14:35:2","19:64:5","23:41:7"]}]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are 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