mirror of
https://gitlab.com/walljm/dynamicbible.git
synced 2025-07-24 16:00:11 -04:00
BUILD: Upgraded to Ionic 3 and Angular 4
This commit is contained in:
parent
13470939aa
commit
99036151f6
@ -32,5 +32,6 @@ DynamicBibleIonic/platforms/android/release-signing.properties
|
||||
DynamicBibleIonic/platforms/android/.gradle
|
||||
DynamicBibleIonic/platforms/android/build
|
||||
*.zip
|
||||
DynamicBibleIonic/platforms/android/CordovaLib/build
|
||||
syntax: regexp
|
||||
npm-debug.log.*
|
||||
|
@ -1,72 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<widget id="walljm.dynamicbible" version="3.0.0" 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>
|
||||
<content src="index.html"/>
|
||||
<access origin="*"/>
|
||||
<allow-intent href="http://*/*"/>
|
||||
<allow-intent href="https://*/*"/>
|
||||
<allow-intent href="tel:*"/>
|
||||
<allow-intent href="sms:*"/>
|
||||
<allow-intent href="mailto:*"/>
|
||||
<allow-intent href="geo:*"/>
|
||||
<platform name="android">
|
||||
<allow-intent href="market:*"/>
|
||||
<icon src="resources\android\icon\drawable-ldpi-icon.png" density="ldpi"/>
|
||||
<icon src="resources\android\icon\drawable-mdpi-icon.png" density="mdpi"/>
|
||||
<icon src="resources\android\icon\drawable-hdpi-icon.png" density="hdpi"/>
|
||||
<icon src="resources\android\icon\drawable-xhdpi-icon.png" density="xhdpi"/>
|
||||
<icon src="resources\android\icon\drawable-xxhdpi-icon.png" density="xxhdpi"/>
|
||||
<icon src="resources\android\icon\drawable-xxxhdpi-icon.png" density="xxxhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-ldpi-screen.png" density="land-ldpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-mdpi-screen.png" density="land-mdpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-hdpi-screen.png" density="land-hdpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-xhdpi-screen.png" density="land-xhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-xxhdpi-screen.png" density="land-xxhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-land-xxxhdpi-screen.png" density="land-xxxhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-ldpi-screen.png" density="port-ldpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-mdpi-screen.png" density="port-mdpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-hdpi-screen.png" density="port-hdpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-xhdpi-screen.png" density="port-xhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/>
|
||||
<splash src="resources\android\splash\drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/>
|
||||
</platform>
|
||||
<platform name="ios">
|
||||
<allow-intent href="itms:*"/>
|
||||
<allow-intent href="itms-apps:*"/>
|
||||
</platform>
|
||||
<preference name="webviewbounce" value="false"/>
|
||||
<preference name="UIWebViewBounce" value="false"/>
|
||||
<preference name="DisallowOverscroll" value="true"/>
|
||||
<preference name="android-minSdkVersion" value="16"/>
|
||||
<preference name="BackupWebStorage" value="none"/>
|
||||
<preference name="SplashMaintainAspectRatio" value="true"/>
|
||||
<preference name="FadeSplashScreenDuration" value="300"/>
|
||||
<preference name="SplashScreen" value="screen"/>
|
||||
<preference name="SplashScreenDelay" value="12000"/>
|
||||
<preference name="ShowSplashScreen" value="true"/>
|
||||
<preference name="AutoHideSplashScreen" value="false"/>
|
||||
<preference name="SplashShowOnlyFirstTime" value="false"/>
|
||||
<preference name="FadeSplashScreen" value="false"/>
|
||||
<feature name="SplashScreen">
|
||||
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/>
|
||||
</feature>
|
||||
<feature name="StatusBar">
|
||||
<param name="ios-package" onload="true" value="CDVStatusBar"/>
|
||||
</feature>
|
||||
<plugin name="ionic-plugin-keyboard" spec="~2.2.1"/>
|
||||
<plugin name="cordova-plugin-whitelist" spec="1.3.1"/>
|
||||
<plugin name="cordova-plugin-console" spec="1.0.5"/>
|
||||
<plugin name="cordova-plugin-statusbar" spec="2.2.1"/>
|
||||
<plugin name="cordova-plugin-device" spec="1.1.4"/>
|
||||
<plugin name="cordova-plugin-splashscreen" spec="~4.0.1"/>
|
||||
<plugin name="cordova-plugin-crosswalk-webview" spec="~2.2.0">
|
||||
<variable name="XWALK_VERSION" value="22+"/>
|
||||
<variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+"/>
|
||||
<variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect"/>
|
||||
<variable name="XWALK_MODE" value="embedded"/>
|
||||
<variable name="XWALK_MULTIPLEAPK" value="true"/>
|
||||
</plugin>
|
||||
<icon src="resources\android\icon\drawable-xhdpi-icon.png"/>
|
||||
</widget>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="walljm.dynamicbible" version="3.0.3" 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>
|
||||
<content src="index.html" />
|
||||
<access origin="*" />
|
||||
<allow-intent href="http://*/*" />
|
||||
<allow-intent href="https://*/*" />
|
||||
<allow-intent href="tel:*" />
|
||||
<allow-intent href="sms:*" />
|
||||
<allow-intent href="mailto:*" />
|
||||
<allow-intent href="geo:*" />
|
||||
<platform name="android">
|
||||
<allow-intent href="market:*" />
|
||||
<icon density="ldpi" src="resources\android\icon\drawable-ldpi-icon.png" />
|
||||
<icon density="mdpi" src="resources\android\icon\drawable-mdpi-icon.png" />
|
||||
<icon density="hdpi" src="resources\android\icon\drawable-hdpi-icon.png" />
|
||||
<icon density="xhdpi" src="resources\android\icon\drawable-xhdpi-icon.png" />
|
||||
<icon density="xxhdpi" src="resources\android\icon\drawable-xxhdpi-icon.png" />
|
||||
<icon density="xxxhdpi" src="resources\android\icon\drawable-xxxhdpi-icon.png" />
|
||||
<splash density="land-ldpi" src="resources\android\splash\drawable-land-ldpi-screen.png" />
|
||||
<splash density="land-mdpi" src="resources\android\splash\drawable-land-mdpi-screen.png" />
|
||||
<splash density="land-hdpi" src="resources\android\splash\drawable-land-hdpi-screen.png" />
|
||||
<splash density="land-xhdpi" src="resources\android\splash\drawable-land-xhdpi-screen.png" />
|
||||
<splash density="land-xxhdpi" src="resources\android\splash\drawable-land-xxhdpi-screen.png" />
|
||||
<splash density="land-xxxhdpi" src="resources\android\splash\drawable-land-xxxhdpi-screen.png" />
|
||||
<splash density="port-ldpi" src="resources\android\splash\drawable-port-ldpi-screen.png" />
|
||||
<splash density="port-mdpi" src="resources\android\splash\drawable-port-mdpi-screen.png" />
|
||||
<splash density="port-hdpi" src="resources\android\splash\drawable-port-hdpi-screen.png" />
|
||||
<splash density="port-xhdpi" src="resources\android\splash\drawable-port-xhdpi-screen.png" />
|
||||
<splash density="port-xxhdpi" src="resources\android\splash\drawable-port-xxhdpi-screen.png" />
|
||||
<splash density="port-xxxhdpi" src="resources\android\splash\drawable-port-xxxhdpi-screen.png" />
|
||||
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
|
||||
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
|
||||
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
|
||||
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
|
||||
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
|
||||
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
|
||||
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
|
||||
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
|
||||
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
|
||||
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
|
||||
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
|
||||
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
|
||||
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
|
||||
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
|
||||
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
|
||||
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
|
||||
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
|
||||
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
|
||||
</platform>
|
||||
<preference name="webviewbounce" value="false" />
|
||||
<preference name="UIWebViewBounce" value="false" />
|
||||
<preference name="DisallowOverscroll" value="true" />
|
||||
<preference name="android-minSdkVersion" value="16" />
|
||||
<preference name="BackupWebStorage" value="none" />
|
||||
<preference name="SplashMaintainAspectRatio" value="true" />
|
||||
<preference name="FadeSplashScreenDuration" value="300" />
|
||||
<preference name="SplashScreen" value="screen" />
|
||||
<preference name="SplashScreenDelay" value="12000" />
|
||||
<preference name="ShowSplashScreen" value="true" />
|
||||
<preference name="AutoHideSplashScreen" value="false" />
|
||||
<preference name="SplashShowOnlyFirstTime" value="false" />
|
||||
<preference name="FadeSplashScreen" value="false" />
|
||||
<feature name="SplashScreen">
|
||||
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
|
||||
</feature>
|
||||
<engine name="android" spec="^6.2.3" />
|
||||
<plugin name="cordova-plugin-console" spec="^1.0.5" />
|
||||
<plugin name="cordova-plugin-crosswalk-webview" spec="^2.3.0">
|
||||
<variable name="XWALK_VERSION" value="22+" />
|
||||
<variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+" />
|
||||
<variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect" />
|
||||
<variable name="XWALK_MODE" value="embedded" />
|
||||
<variable name="XWALK_MULTIPLEAPK" value="true" />
|
||||
</plugin>
|
||||
<plugin name="cordova-plugin-device" spec="^1.1.4" />
|
||||
<plugin name="cordova-plugin-splashscreen" spec="^4.0.3" />
|
||||
<plugin name="cordova-plugin-statusbar" spec="^2.2.3" />
|
||||
<plugin name="cordova-plugin-whitelist" spec="^1.3.1" />
|
||||
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
|
||||
</widget>
|
||||
|
@ -1,196 +0,0 @@
|
||||
<!--
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
-->
|
||||
# Cordova Hooks
|
||||
|
||||
Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. Hook scripts could be defined by adding them to the special predefined folder (`/hooks`) or via configuration files (`config.xml` and `plugin.xml`) and run serially in the following order:
|
||||
* Application hooks from `/hooks`;
|
||||
* Application hooks from `config.xml`;
|
||||
* Plugin hooks from `plugins/.../plugin.xml`.
|
||||
|
||||
__Remember__: Make your scripts executable.
|
||||
|
||||
__Note__: `.cordova/hooks` directory is also supported for backward compatibility, but we don't recommend using it as it is deprecated.
|
||||
|
||||
## Supported hook types
|
||||
The following hook types are supported:
|
||||
|
||||
after_build/
|
||||
after_compile/
|
||||
after_docs/
|
||||
after_emulate/
|
||||
after_platform_add/
|
||||
after_platform_rm/
|
||||
after_platform_ls/
|
||||
after_plugin_add/
|
||||
after_plugin_ls/
|
||||
after_plugin_rm/
|
||||
after_plugin_search/
|
||||
after_plugin_install/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being installed
|
||||
after_prepare/
|
||||
after_run/
|
||||
after_serve/
|
||||
before_build/
|
||||
before_compile/
|
||||
before_docs/
|
||||
before_emulate/
|
||||
before_platform_add/
|
||||
before_platform_rm/
|
||||
before_platform_ls/
|
||||
before_plugin_add/
|
||||
before_plugin_ls/
|
||||
before_plugin_rm/
|
||||
before_plugin_search/
|
||||
before_plugin_install/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being installed
|
||||
before_plugin_uninstall/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being uninstalled
|
||||
before_prepare/
|
||||
before_run/
|
||||
before_serve/
|
||||
pre_package/ <-- Windows 8 and Windows Phone only.
|
||||
|
||||
## Ways to define hooks
|
||||
### Via '/hooks' directory
|
||||
To execute custom action when corresponding hook type is fired, use hook type as a name for a subfolder inside 'hooks' directory and place you script file here, for example:
|
||||
|
||||
# script file will be automatically executed after each build
|
||||
hooks/after_build/after_build_custom_action.js
|
||||
|
||||
|
||||
### Config.xml
|
||||
|
||||
Hooks can be defined in project's `config.xml` using `<hook>` elements, for example:
|
||||
|
||||
<hook type="before_build" src="scripts/appBeforeBuild.bat" />
|
||||
<hook type="before_build" src="scripts/appBeforeBuild.js" />
|
||||
<hook type="before_plugin_install" src="scripts/appBeforePluginInstall.js" />
|
||||
|
||||
<platform name="wp8">
|
||||
<hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.bat" />
|
||||
<hook type="before_build" src="scripts/wp8/appWP8BeforeBuild.js" />
|
||||
<hook type="before_plugin_install" src="scripts/wp8/appWP8BeforePluginInstall.js" />
|
||||
...
|
||||
</platform>
|
||||
|
||||
<platform name="windows8">
|
||||
<hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.bat" />
|
||||
<hook type="before_build" src="scripts/windows8/appWin8BeforeBuild.js" />
|
||||
<hook type="before_plugin_install" src="scripts/windows8/appWin8BeforePluginInstall.js" />
|
||||
...
|
||||
</platform>
|
||||
|
||||
### Plugin hooks (plugin.xml)
|
||||
|
||||
As a plugin developer you can define hook scripts using `<hook>` elements in a `plugin.xml` like that:
|
||||
|
||||
<hook type="before_plugin_install" src="scripts/beforeInstall.js" />
|
||||
<hook type="after_build" src="scripts/afterBuild.js" />
|
||||
|
||||
<platform name="wp8">
|
||||
<hook type="before_plugin_install" src="scripts/wp8BeforeInstall.js" />
|
||||
<hook type="before_build" src="scripts/wp8BeforeBuild.js" />
|
||||
...
|
||||
</platform>
|
||||
|
||||
`before_plugin_install`, `after_plugin_install`, `before_plugin_uninstall` plugin hooks will be fired exclusively for the plugin being installed/uninstalled.
|
||||
|
||||
## Script Interface
|
||||
|
||||
### Javascript
|
||||
|
||||
If you are writing hooks in Javascript you should use the following module definition:
|
||||
```javascript
|
||||
module.exports = function(context) {
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
You can make your scipts async using Q:
|
||||
```javascript
|
||||
module.exports = function(context) {
|
||||
var Q = context.requireCordovaModule('q');
|
||||
var deferral = new Q.defer();
|
||||
|
||||
setTimeout(function(){
|
||||
console.log('hook.js>> end');
|
||||
deferral.resolve();
|
||||
}, 1000);
|
||||
|
||||
return deferral.promise;
|
||||
}
|
||||
```
|
||||
|
||||
`context` object contains hook type, executed script full path, hook options, command-line arguments passed to Cordova and top-level "cordova" object:
|
||||
```json
|
||||
{
|
||||
"hook": "before_plugin_install",
|
||||
"scriptLocation": "c:\\script\\full\\path\\appBeforePluginInstall.js",
|
||||
"cmdLine": "The\\exact\\command\\cordova\\run\\with arguments",
|
||||
"opts": {
|
||||
"projectRoot":"C:\\path\\to\\the\\project",
|
||||
"cordova": {
|
||||
"platforms": ["wp8"],
|
||||
"plugins": ["com.plugin.withhooks"],
|
||||
"version": "0.21.7-dev"
|
||||
},
|
||||
"plugin": {
|
||||
"id": "com.plugin.withhooks",
|
||||
"pluginInfo": {
|
||||
...
|
||||
},
|
||||
"platform": "wp8",
|
||||
"dir": "C:\\path\\to\\the\\project\\plugins\\com.plugin.withhooks"
|
||||
}
|
||||
},
|
||||
"cordova": {...}
|
||||
}
|
||||
|
||||
```
|
||||
`context.opts.plugin` object will only be passed to plugin hooks scripts.
|
||||
|
||||
You can also require additional Cordova modules in your script using `context.requireCordovaModule` in the following way:
|
||||
```javascript
|
||||
var Q = context.requireCordovaModule('q');
|
||||
```
|
||||
|
||||
__Note__: new module loader script interface is used for the `.js` files defined via `config.xml` or `plugin.xml` only.
|
||||
For compatibility reasons hook files specified via `/hooks` folders are run via Node child_process spawn, see 'Non-javascript' section below.
|
||||
|
||||
### Non-javascript
|
||||
|
||||
Non-javascript scripts are run via Node child_process spawn from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables:
|
||||
|
||||
* CORDOVA_VERSION - The version of the Cordova-CLI.
|
||||
* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios).
|
||||
* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer)
|
||||
* CORDOVA_HOOK - Path to the hook that is being executed.
|
||||
* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate)
|
||||
|
||||
If a script returns a non-zero exit code, then the parent cordova command will be aborted.
|
||||
|
||||
## Writing hooks
|
||||
|
||||
We highly recommend writing your hooks using Node.js so that they are
|
||||
cross-platform. Some good examples are shown here:
|
||||
|
||||
[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/)
|
||||
|
||||
Also, note that even if you are working on Windows, and in case your hook scripts aren't bat files (which is recommended, if you want your scripts to work in non-Windows operating systems) Cordova CLI will expect a shebang line as the first line for it to know the interpreter it needs to use to launch the script. The shebang line should match the following example:
|
||||
|
||||
#!/usr/bin/env [name_of_interpreter_executable]
|
20
DynamicBibleIonic/hooks/after_prepare/ionic-minify.js
Normal file
20
DynamicBibleIonic/hooks/after_prepare/ionic-minify.js
Normal file
@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
var path = require("path");
|
||||
var ionic_minify_1 = require("ionic-minify");
|
||||
var config = require("../minify-conf.json");
|
||||
var minify = config.alwaysRun;
|
||||
var cmd = process.env.CORDOVA_CMDLINE;
|
||||
var rootDir = process.argv[2];
|
||||
var platforms = process.env.CORDOVA_PLATFORMS.split(',');
|
||||
var platformPath = path.join(rootDir, "platforms");
|
||||
if (cmd.indexOf("--release") > -1 || cmd.indexOf("--minify") > -1) {
|
||||
minify = true;
|
||||
}
|
||||
config.showErrStack = (config.showErrStack || false);
|
||||
config.jsOptions.fromString = true;
|
||||
if (minify === true) {
|
||||
var ionicMinify = new ionic_minify_1.Minifier(config, platforms, platformPath);
|
||||
console.log("Starting minifying your files...");
|
||||
ionicMinify.run();
|
||||
}
|
19
DynamicBibleIonic/hooks/minify-conf.json
Normal file
19
DynamicBibleIonic/hooks/minify-conf.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"foldersToProcess": [
|
||||
"build",
|
||||
"img"
|
||||
],
|
||||
"jpgOptions":{
|
||||
"quality": 50
|
||||
},
|
||||
"jsOptions": {
|
||||
"compress": {
|
||||
"drop_console": true
|
||||
}
|
||||
},
|
||||
"cssOptions": {
|
||||
"keepSpecialComments": 0
|
||||
},
|
||||
"alwaysRun": true,
|
||||
"showErrStack": false
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
{
|
||||
"name": "DynamicBible",
|
||||
"app_id": "",
|
||||
"v2": true,
|
||||
"typescript": true
|
||||
"integrations": {
|
||||
"cordova": {}
|
||||
},
|
||||
"type": "ionic-angular"
|
||||
}
|
||||
|
@ -1,75 +1,109 @@
|
||||
{
|
||||
"version": "3.0.0",
|
||||
"name": "dynamicbible",
|
||||
"author": "Jason Wall",
|
||||
"homepage": "http://dynamicbible.com/",
|
||||
"private": true,
|
||||
"config": {
|
||||
"ionic_source_map": "source-map"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "ionic-app-scripts clean",
|
||||
"build": "ionic-app-scripts build",
|
||||
"ionic:build": "ionic-app-scripts build",
|
||||
"ionic:serve": "ionic-app-scripts serve",
|
||||
"start": "ionic serve",
|
||||
"lab": "ionic serve --lab",
|
||||
"test": "ng test",
|
||||
"test-coverage": "ng test --code-coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/common": "2.2.1",
|
||||
"@angular/compiler": "2.2.1",
|
||||
"@angular/compiler-cli": "2.2.1",
|
||||
"@angular/core": "2.2.1",
|
||||
"@angular/forms": "2.2.1",
|
||||
"@angular/http": "2.2.1",
|
||||
"@angular/platform-browser": "2.2.1",
|
||||
"@angular/platform-browser-dynamic": "2.2.1",
|
||||
"@angular/platform-server": "2.2.1",
|
||||
"@ionic/storage": "1.1.7",
|
||||
"@types/jasmine": "^2.5.38",
|
||||
"ionic-angular": "2.0.0",
|
||||
"ionic-native": "2.2.11",
|
||||
"ionicons": "3.0.0",
|
||||
"rxjs": "5.0.0-beta.12",
|
||||
"sw-toolbox": "3.4.0",
|
||||
"zone.js": "0.6.26"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ionic/app-scripts": "1.0.0",
|
||||
"@types/jasmine": "2.5.38",
|
||||
"@types/node": "6.0.42",
|
||||
"angular-cli": "1.0.0-beta.24",
|
||||
"codecov": "1.0.1",
|
||||
"jasmine-core": "2.5.2",
|
||||
"jasmine-spec-reporter": "2.7.0",
|
||||
"karma": "1.3.0",
|
||||
"karma-chrome-launcher": "2.0.0",
|
||||
"karma-cli": "1.0.1",
|
||||
"karma-jasmine": "1.1.0",
|
||||
"karma-mocha-reporter": "2.2.1",
|
||||
"karma-remap-istanbul": "0.2.2",
|
||||
"protractor": "4.0.13",
|
||||
"protractor-jasmine2-screenshot-reporter": "0.3.2",
|
||||
"ts-node": "1.7.2",
|
||||
"tslint": "4.1.1",
|
||||
"tslint-eslint-rules": "3.2.0",
|
||||
"typescript": "2.0.9"
|
||||
},
|
||||
"cordovaPlugins": [
|
||||
"cordova-plugin-whitelist",
|
||||
"cordova-plugin-statusbar",
|
||||
"cordova-plugin-console",
|
||||
"cordova-plugin-device",
|
||||
"cordova-plugin-splashscreen",
|
||||
"ionic-plugin-keyboard"
|
||||
],
|
||||
"cordovaPlatforms": [],
|
||||
"description": "Dynamic Bible: A bible made for studying scripture",
|
||||
"-vs-binding": {
|
||||
"AfterBuild": [
|
||||
"ionic:serve"
|
||||
]
|
||||
}
|
||||
}
|
||||
"version": "3.0.3",
|
||||
"name": "dynamicbible",
|
||||
"author": "Jason Wall",
|
||||
"homepage": "http://dynamicbible.com/",
|
||||
"private": true,
|
||||
"config": {
|
||||
"ionic_source_map": "source-map"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "ionic-app-scripts clean",
|
||||
"build": "ionic-app-scripts build",
|
||||
"lint": "ionic-app-scripts lint",
|
||||
"ionic:build": "ionic-app-scripts build",
|
||||
"ionic:serve": "ionic-app-scripts serve",
|
||||
"start": "ionic serve",
|
||||
"lab": "ionic serve --lab",
|
||||
"test": "ng test",
|
||||
"test-coverage": "ng test --code-coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/cli": "1.3.1",
|
||||
"@angular/common": "4.1.3",
|
||||
"@angular/compiler": "4.1.3",
|
||||
"@angular/compiler-cli": "4.1.3",
|
||||
"@angular/core": "4.1.3",
|
||||
"@angular/forms": "4.1.3",
|
||||
"@angular/http": "4.1.3",
|
||||
"@angular/platform-browser": "4.1.3",
|
||||
"@angular/platform-browser-dynamic": "4.1.3",
|
||||
"@ionic-native/core": "3.12.1",
|
||||
"@ionic-native/splash-screen": "3.12.1",
|
||||
"@ionic-native/status-bar": "3.12.1",
|
||||
"@ionic/storage": "2.0.1",
|
||||
"cordova-android": "^6.2.3",
|
||||
"cordova-plugin-console": "^1.0.5",
|
||||
"cordova-plugin-crosswalk-webview": "^2.3.0",
|
||||
"cordova-plugin-device": "^1.1.4",
|
||||
"cordova-plugin-splashscreen": "^4.0.3",
|
||||
"cordova-plugin-statusbar": "^2.2.3",
|
||||
"cordova-plugin-whitelist": "^1.3.1",
|
||||
"ionic-angular": "3.6.0",
|
||||
"ionic-plugin-keyboard": "^2.2.1",
|
||||
"ionicons": "3.0.0",
|
||||
"rxjs": "5.4.0",
|
||||
"sw-toolbox": "3.6.0",
|
||||
"zone.js": "0.8.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/cli": "1.1.2",
|
||||
"@ionic/app-scripts": "2.1.0",
|
||||
"@types/jasmine": "2.5.41",
|
||||
"@types/node": "7.0.4",
|
||||
"codecov": "2.2.0",
|
||||
"connect": "3.6.2",
|
||||
"ionic-minify": "^2.0.10",
|
||||
"ionic-mocks": "0.10.1",
|
||||
"jasmine-core": "2.6.2",
|
||||
"jasmine-reporters": "2.2.1",
|
||||
"karma": "1.7.0",
|
||||
"karma-chrome-launcher": "2.1.1",
|
||||
"karma-cli": "1.0.1",
|
||||
"karma-coverage-istanbul-reporter": "1.2.1",
|
||||
"karma-jasmine": "1.1.0",
|
||||
"karma-jasmine-html-reporter": "0.2.2",
|
||||
"karma-junit-reporter": "1.2.0",
|
||||
"protractor": "5.1.2",
|
||||
"serve-static": "1.12.3",
|
||||
"ts-node": "3.0.4",
|
||||
"tslint": "5.3.2",
|
||||
"tslint-eslint-rules": "4.1.1",
|
||||
"typescript": "2.3.4"
|
||||
},
|
||||
"cordovaPlugins": [
|
||||
"cordova-plugin-whitelist",
|
||||
"cordova-plugin-statusbar",
|
||||
"cordova-plugin-console",
|
||||
"cordova-plugin-device",
|
||||
"cordova-plugin-splashscreen",
|
||||
"ionic-plugin-keyboard"
|
||||
],
|
||||
"cordovaPlatforms": [],
|
||||
"description": "Dynamic Bible: A bible made for studying scripture",
|
||||
"-vs-binding": {
|
||||
"AfterBuild": [
|
||||
"ionic:serve"
|
||||
]
|
||||
},
|
||||
"cordova": {
|
||||
"plugins": {
|
||||
"cordova-plugin-crosswalk-webview": {
|
||||
"XWALK_VERSION": "22+",
|
||||
"XWALK_LITEVERSION": "xwalk_core_library_canary:17+",
|
||||
"XWALK_COMMANDLINE": "--disable-pull-to-refresh-effect",
|
||||
"XWALK_MODE": "embedded",
|
||||
"XWALK_MULTIPLEAPK": "true"
|
||||
},
|
||||
"cordova-plugin-console": {},
|
||||
"cordova-plugin-device": {},
|
||||
"cordova-plugin-splashscreen": {},
|
||||
"cordova-plugin-statusbar": {},
|
||||
"cordova-plugin-whitelist": {},
|
||||
"ionic-plugin-keyboard": {}
|
||||
},
|
||||
"platforms": [
|
||||
"android"
|
||||
]
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<manifest android:hardwareAccelerated="true" android:versionCode="30000" android:versionName="3.0.0" package="walljm.dynamicbible" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest android:hardwareAccelerated="true" android:versionCode="30003" android:versionName="3.0.3" package="walljm.dynamicbible" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
|
||||
@ -10,7 +10,7 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
|
||||
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="25" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
</manifest>
|
||||
|
@ -16,27 +16,32 @@
|
||||
under the License.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.1.0'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
ext {
|
||||
apply from: 'cordova.gradle'
|
||||
cdvCompileSdkVersion = privateHelpers.getProjectTarget()
|
||||
cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
|
||||
}
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.2.3'
|
||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
|
||||
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'com.github.dcendents.android-maven'
|
||||
apply plugin: 'com.jfrog.bintray'
|
||||
|
||||
group = 'org.apache.cordova'
|
||||
version = '6.2.3'
|
||||
|
||||
android {
|
||||
compileSdkVersion cdvCompileSdkVersion
|
||||
buildToolsVersion cdvBuildToolsVersion
|
||||
@ -58,4 +63,73 @@ android {
|
||||
assets.srcDirs = ['assets']
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/LICENSE.txt'
|
||||
exclude 'META-INF/DEPENDENCIES'
|
||||
exclude 'META-INF/NOTICE'
|
||||
}
|
||||
}
|
||||
|
||||
install {
|
||||
repositories.mavenInstaller {
|
||||
pom {
|
||||
project {
|
||||
packaging 'aar'
|
||||
name 'Cordova'
|
||||
url 'https://cordova.apache.org'
|
||||
licenses {
|
||||
license {
|
||||
name 'The Apache Software License, Version 2.0'
|
||||
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
||||
}
|
||||
}
|
||||
developers {
|
||||
developer {
|
||||
id 'stevengill'
|
||||
name 'Steve Gill'
|
||||
}
|
||||
}
|
||||
scm {
|
||||
connection 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
|
||||
developerConnection 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
|
||||
url 'https://git-wip-us.apache.org/repos/asf?p=cordova-android'
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from android.sourceSets.main.java.srcDirs
|
||||
classifier = 'sources'
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives sourcesJar
|
||||
}
|
||||
|
||||
bintray {
|
||||
user = System.getenv('BINTRAY_USER')
|
||||
key = System.getenv('BINTRAY_KEY')
|
||||
configurations = ['archives']
|
||||
pkg {
|
||||
repo = 'maven'
|
||||
name = 'cordova-android'
|
||||
userOrg = 'cordova'
|
||||
licenses = ['Apache-2.0']
|
||||
vcsUrl = 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
|
||||
websiteUrl = 'https://cordova.apache.org'
|
||||
issueTrackerUrl = 'https://issues.apache.org/jira/browse/CB'
|
||||
publicDownloadNumbers = true
|
||||
licenses = ['Apache-2.0']
|
||||
labels = ['android', 'cordova', 'phonegap']
|
||||
version {
|
||||
name = '6.2.3'
|
||||
released = new Date()
|
||||
vcsTag = '6.2.3'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1 +0,0 @@
|
||||
#Wed Jan 04 16:33:48 EST 2017
|
@ -1 +0,0 @@
|
||||
#Wed Jan 04 16:33:51 EST 2017
|
Binary file not shown.
Binary file not shown.
@ -10,7 +10,7 @@
|
||||
# Indicates whether an apk should be generated for each density.
|
||||
split.density=false
|
||||
# Project target.
|
||||
target=android-24
|
||||
target=android-25
|
||||
apk-configurations=
|
||||
renderscript.opt.level=O0
|
||||
android.library=true
|
||||
|
@ -31,7 +31,7 @@ import android.webkit.WebChromeClient.CustomViewCallback;
|
||||
* are not expected to implement it.
|
||||
*/
|
||||
public interface CordovaWebView {
|
||||
public static final String CORDOVA_VERSION = "6.0.0";
|
||||
public static final String CORDOVA_VERSION = "6.2.3";
|
||||
|
||||
void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences);
|
||||
|
||||
|
@ -488,6 +488,34 @@ public class NativeToJsMessageQueue {
|
||||
encodeAsMessageHelper(sb, pluginResult);
|
||||
}
|
||||
|
||||
void buildJsMessage(StringBuilder sb) {
|
||||
switch (pluginResult.getMessageType()) {
|
||||
case PluginResult.MESSAGE_TYPE_MULTIPART:
|
||||
int size = pluginResult.getMultipartMessagesSize();
|
||||
for (int i=0; i<size; i++) {
|
||||
PluginResult subresult = pluginResult.getMultipartMessage(i);
|
||||
JsMessage submessage = new JsMessage(subresult, jsPayloadOrCallbackId);
|
||||
submessage.buildJsMessage(sb);
|
||||
if (i < (size-1)) {
|
||||
sb.append(",");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PluginResult.MESSAGE_TYPE_BINARYSTRING:
|
||||
sb.append("atob('")
|
||||
.append(pluginResult.getMessage())
|
||||
.append("')");
|
||||
break;
|
||||
case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
|
||||
sb.append("cordova.require('cordova/base64').toArrayBuffer('")
|
||||
.append(pluginResult.getMessage())
|
||||
.append("')");
|
||||
break;
|
||||
default:
|
||||
sb.append(pluginResult.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
void encodeAsJsMessage(StringBuilder sb) {
|
||||
if (pluginResult == null) {
|
||||
sb.append(jsPayloadOrCallbackId);
|
||||
@ -495,29 +523,16 @@ public class NativeToJsMessageQueue {
|
||||
int status = pluginResult.getStatus();
|
||||
boolean success = (status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal());
|
||||
sb.append("cordova.callbackFromNative('")
|
||||
.append(jsPayloadOrCallbackId)
|
||||
.append("',")
|
||||
.append(success)
|
||||
.append(",")
|
||||
.append(status)
|
||||
.append(",[");
|
||||
switch (pluginResult.getMessageType()) {
|
||||
case PluginResult.MESSAGE_TYPE_BINARYSTRING:
|
||||
sb.append("atob('")
|
||||
.append(pluginResult.getMessage())
|
||||
.append("')");
|
||||
break;
|
||||
case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
|
||||
sb.append("cordova.require('cordova/base64').toArrayBuffer('")
|
||||
.append(pluginResult.getMessage())
|
||||
.append("')");
|
||||
break;
|
||||
default:
|
||||
sb.append(pluginResult.getMessage());
|
||||
}
|
||||
.append(jsPayloadOrCallbackId)
|
||||
.append("',")
|
||||
.append(success)
|
||||
.append(",")
|
||||
.append(status)
|
||||
.append(",[");
|
||||
buildJsMessage(sb);
|
||||
sb.append("],")
|
||||
.append(pluginResult.getKeepCallback())
|
||||
.append(");");
|
||||
.append(pluginResult.getKeepCallback())
|
||||
.append(");");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -210,6 +210,11 @@ public class SystemWebViewEngine implements CordovaWebViewEngine {
|
||||
settings.setAppCachePath(databasePath);
|
||||
settings.setAppCacheEnabled(true);
|
||||
|
||||
// Enable scaling
|
||||
// Fix for CB-12015
|
||||
settings.setUseWideViewPort(true);
|
||||
settings.setLoadWithOverviewMode(true);
|
||||
|
||||
// Fix for CB-1405
|
||||
// Google issue 4641
|
||||
String defaultUserAgent = settings.getUserAgentString();
|
||||
|
@ -37,11 +37,11 @@
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"io.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"xml": "<feature name=\"SplashScreen\"><param name=\"android-package\" value=\"org.apache.cordova.splashscreen.SplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
@ -49,11 +49,11 @@
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>",
|
||||
"xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"xml": "<feature name=\"SplashScreen\"><param name=\"android-package\" value=\"org.apache.cordova.splashscreen.SplashScreen\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"xml": "<feature name=\"Keyboard\"><param name=\"android-package\" value=\"io.ionic.keyboard.IonicKeyboard\" /><param name=\"onload\" value=\"true\" /></feature>",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
@ -76,52 +76,35 @@
|
||||
}
|
||||
},
|
||||
"installed_plugins": {
|
||||
"cordova-plugin-console": {
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-crosswalk-webview": {
|
||||
"XWALK_VERSION": "22+",
|
||||
"XWALK_LITEVERSION": "xwalk_core_library_canary:17+",
|
||||
"XWALK_COMMANDLINE": "--disable-pull-to-refresh-effect",
|
||||
"XWALK_MODE": "embedded",
|
||||
"XWALK_MULTIPLEAPK": "true",
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
},
|
||||
"ionic-plugin-keyboard": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-whitelist": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-console": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-statusbar": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-device": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-splashscreen": {
|
||||
"PACKAGE_NAME": "com.walljm.dynamicbible"
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-statusbar": {
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"cordova-plugin-whitelist": {
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
},
|
||||
"ionic-plugin-keyboard": {
|
||||
"PACKAGE_NAME": "walljm.dynamicbible"
|
||||
}
|
||||
},
|
||||
"dependent_plugins": {},
|
||||
"modules": [
|
||||
{
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-device.device",
|
||||
"file": "plugins/cordova-plugin-device/www/device.js",
|
||||
@ -137,15 +120,32 @@
|
||||
"clobbers": [
|
||||
"navigator.splashscreen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
}
|
||||
],
|
||||
"plugin_metadata": {
|
||||
"cordova-plugin-crosswalk-webview": "2.2.0",
|
||||
"ionic-plugin-keyboard": "2.2.1",
|
||||
"cordova-plugin-whitelist": "1.3.1",
|
||||
"cordova-plugin-console": "1.0.5",
|
||||
"cordova-plugin-statusbar": "2.2.1",
|
||||
"cordova-plugin-crosswalk-webview": "2.3.0",
|
||||
"cordova-plugin-device": "1.1.4",
|
||||
"cordova-plugin-splashscreen": "4.0.1"
|
||||
"cordova-plugin-splashscreen": "4.0.3",
|
||||
"cordova-plugin-statusbar": "2.2.3",
|
||||
"cordova-plugin-whitelist": "1.3.1",
|
||||
"ionic-plugin-keyboard": "2.2.1"
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ buildscript {
|
||||
// http://tools.android.com/tech-docs/new-build-system/version-compatibility
|
||||
// and https://issues.apache.org/jira/browse/CB-8143
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.2.0'
|
||||
classpath 'com.android.tools.build:gradle:2.2.3'
|
||||
}
|
||||
}
|
||||
|
||||
@ -267,7 +267,7 @@ def promptForReleaseKeyPassword() {
|
||||
|
||||
gradle.taskGraph.whenReady { taskGraph ->
|
||||
taskGraph.getAllTasks().each() { task ->
|
||||
if (task.name == 'validateReleaseSigning') {
|
||||
if (task.name == 'validateReleaseSigning' || task.name == 'validateSigningRelease') {
|
||||
promptForReleaseKeyPassword()
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ def SHARED_ARTIFACT_ID = "xwalk_shared_library:"
|
||||
def EMBEDD_ARTIFACT_ID = "xwalk_core_library:"
|
||||
def CANARY_ARTIFACT_ID = "xwalk_core_library_canary:"
|
||||
def BIT_64 = ":64bit@aar"
|
||||
def DEFAULT_MIN_SDK_VERSION = 14
|
||||
|
||||
def getConfigPreference(name) {
|
||||
name = name.toLowerCase()
|
||||
@ -56,9 +57,11 @@ if (cdvBuildMultipleApks == null) {
|
||||
ext.xwalkMultipleApk = cdvBuildMultipleApks.toBoolean();
|
||||
}
|
||||
|
||||
def minSdk = getConfigPreference("android-minSdkVersion");
|
||||
if (cdvMinSdkVersion == null) {
|
||||
def minSdk = getConfigPreference("android-minSdkVersion");
|
||||
ext.cdvMinSdkVersion = minSdk && minSdk.toInteger() > 14 ? minSdk : 14;
|
||||
ext.cdvMinSdkVersion = minSdk && Integer.parseInt(minSdk) > DEFAULT_MIN_SDK_VERSION ? minSdk : DEFAULT_MIN_SDK_VERSION;
|
||||
} else if (Integer.parseInt('' + cdvMinSdkVersion) < Integer.parseInt(minSdk)) {
|
||||
ext.cdvMinSdkVersion = minSdk;
|
||||
}
|
||||
|
||||
if (!project.hasProperty('xwalkMode')) {
|
||||
|
@ -66,12 +66,13 @@ function Api(platform, platformRootDir, events) {
|
||||
this.locations = {
|
||||
root: self.root,
|
||||
www: path.join(self.root, 'assets/www'),
|
||||
res: path.relative(self.root, path.join(self.root, 'res')),
|
||||
res: path.join(self.root, 'res'),
|
||||
platformWww: path.join(self.root, 'platform_www'),
|
||||
configXml: path.join(self.root, 'res/xml/config.xml'),
|
||||
defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
|
||||
strings: path.join(self.root, 'res/values/strings.xml'),
|
||||
manifest: path.join(self.root, 'AndroidManifest.xml'),
|
||||
build: path.join(self.root, 'build'),
|
||||
// NOTE: Due to platformApi spec we need to return relative paths here
|
||||
cordovaJs: 'bin/templates/project/assets/www/cordova.js',
|
||||
cordovaJsSrc: 'cordova-js-src'
|
||||
@ -85,7 +86,7 @@ function Api(platform, platformRootDir, events) {
|
||||
this.locations.strings = path.join(self.root, 'app/src/main/res/xml/strings.xml');
|
||||
this.locations.manifest = path.join(self.root, 'app/src/main/AndroidManifest.xml');
|
||||
this.locations.www = path.join(self.root, 'app/src/main/assets/www');
|
||||
this.locations.res = path.relative(self.root, path.join(self.root, 'app/src/main/res'));
|
||||
this.locations.res = path.join(self.root, 'app/src/main/res');
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,10 +242,12 @@ Api.prototype.addPlugin = function (plugin, installOptions) {
|
||||
// Do some basic argument parsing
|
||||
var opts = {};
|
||||
|
||||
// Skip cleaning prepared files when not invoking via cordova CLI.
|
||||
// Skip cleaning prepared files when not invoking via cordova CLI.
|
||||
opts.noPrepare = true;
|
||||
|
||||
return self.clean(opts);
|
||||
if(!AndroidStudio.isAndroidStudioProject(self.root) && !project.isClean()) {
|
||||
return self.clean(opts);
|
||||
}
|
||||
})
|
||||
.then(function () {
|
||||
return PluginManager.get(self.platform, self.locations, project)
|
||||
@ -395,6 +398,8 @@ Api.prototype.clean = function(cleanOptions) {
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Performs a requirements check for current platform. Each platform defines its
|
||||
* own set of requirements, which should be resolved before platform can be
|
||||
|
@ -19,10 +19,10 @@
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var android_sdk_version = require('./lib/android_sdk_version');
|
||||
var android_sdk = require('./lib/android_sdk');
|
||||
|
||||
android_sdk_version.run().done(null, function(err) {
|
||||
console.log(err);
|
||||
android_sdk.print_newest_available_sdk_target().done(null, function(err) {
|
||||
console.error(err);
|
||||
process.exit(2);
|
||||
});
|
||||
|
||||
|
@ -197,5 +197,14 @@ AndroidProject.prototype.getUninstaller = function (type) {
|
||||
return pluginHandlers.getUninstaller(type);
|
||||
};
|
||||
|
||||
/*
|
||||
* This checks if an Android project is clean or has old build artifacts
|
||||
*/
|
||||
|
||||
AndroidProject.prototype.isClean = function() {
|
||||
var build_path = path.join(this.projectDir, 'build');
|
||||
//If the build directory doesn't exist, it's clean
|
||||
return !(fs.existsSync(build_path));
|
||||
};
|
||||
|
||||
module.exports = AndroidProject;
|
||||
|
@ -4,26 +4,39 @@
|
||||
* @param {String} root Root folder of the project
|
||||
*/
|
||||
|
||||
/*jshint esversion: 6 */
|
||||
/*jshint esnext: false */
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var CordovaError = require('cordova-common').CordovaError;
|
||||
|
||||
function isAndroidStudioProject(root) {
|
||||
module.exports.isAndroidStudioProject = function isAndroidStudioProject(root) {
|
||||
var eclipseFiles = ['AndroidManifest.xml', 'libs', 'res', 'project.properties', 'platform_www'];
|
||||
var androidStudioFiles = ['app', 'gradle', 'build', 'app/src/main/assets'];
|
||||
var file;
|
||||
for(file of eclipseFiles) {
|
||||
if(fs.existsSync(path.join(root, file))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for(file of androidStudioFiles) {
|
||||
if(!fs.existsSync(path.join(root, file))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
var androidStudioFiles = ['app', 'gradle', 'app/src/main/res'];
|
||||
|
||||
module.exports.isAndroidStudioProject = isAndroidStudioProject;
|
||||
// assume it is an AS project and not an Eclipse project
|
||||
var isEclipse = false;
|
||||
var isAS = true;
|
||||
|
||||
if(!fs.existsSync(root)) {
|
||||
throw new CordovaError('AndroidStudio.js:inAndroidStudioProject root does not exist: ' + root);
|
||||
}
|
||||
|
||||
// if any of the following exists, then we are not an ASProj
|
||||
eclipseFiles.forEach(function(file) {
|
||||
if(fs.existsSync(path.join(root, file))) {
|
||||
isEclipse = true;
|
||||
}
|
||||
});
|
||||
|
||||
// if it is NOT an eclipse project, check that all required files exist
|
||||
if(!isEclipse) {
|
||||
androidStudioFiles.forEach(function(file){
|
||||
if(!fs.existsSync(path.join(root, file))) {
|
||||
console.log('missing file :: ' + file);
|
||||
isAS = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return (!isEclipse && isAS);
|
||||
};
|
||||
|
@ -1,64 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
var child_process = require('child_process'),
|
||||
Q = require('q');
|
||||
|
||||
var get_highest_sdk = function(results){
|
||||
var reg = /\d+/;
|
||||
var apiLevels = [];
|
||||
for(var i=0;i<results.length;i++){
|
||||
apiLevels[i] = parseInt(results[i].match(reg)[0]);
|
||||
}
|
||||
apiLevels.sort(function(a,b){return b-a;});
|
||||
console.log(apiLevels[0]);
|
||||
};
|
||||
|
||||
var get_sdks = function() {
|
||||
var d = Q.defer();
|
||||
child_process.exec('android list targets', function(err, stdout, stderr) {
|
||||
if (err) d.reject(stderr);
|
||||
else d.resolve(stdout);
|
||||
});
|
||||
|
||||
return d.promise.then(function(output) {
|
||||
var reg = /android-\d+/gi;
|
||||
var results = output.match(reg);
|
||||
if(results.length===0){
|
||||
return Q.reject(new Error('No android sdks installed.'));
|
||||
}else{
|
||||
get_highest_sdk(results);
|
||||
}
|
||||
|
||||
return Q();
|
||||
}, function(stderr) {
|
||||
if (stderr.match(/command\snot\sfound/) || stderr.match(/'android' is not recognized/)) {
|
||||
return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
|
||||
} else {
|
||||
return Q.reject(new Error('An error occurred while listing Android targets'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.run = function() {
|
||||
return Q.all([get_sdks()]);
|
||||
};
|
||||
|
@ -65,6 +65,21 @@ GradleBuilder.prototype.getArgs = function(cmd, opts) {
|
||||
return args;
|
||||
};
|
||||
|
||||
/*
|
||||
* This returns a promise
|
||||
*/
|
||||
|
||||
GradleBuilder.prototype.runGradleWrapper = function(gradle_cmd) {
|
||||
var gradlePath = path.join(this.root, 'gradlew');
|
||||
var wrapperGradle = path.join(this.root, 'wrapper.gradle');
|
||||
if(fs.existsSync(gradlePath)) {
|
||||
//Literally do nothing, for some reason this works, while !fs.existsSync didn't on Windows
|
||||
} else {
|
||||
return spawn(gradle_cmd, ['-p', this.root, 'wrapper', '-b', wrapperGradle], {stdio: 'inherit'});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Makes the project buildable, minus the gradle wrapper.
|
||||
GradleBuilder.prototype.prepBuildFiles = function() {
|
||||
// Update the version of build.gradle in each dependent library.
|
||||
@ -159,17 +174,15 @@ GradleBuilder.prototype.prepBuildFiles = function() {
|
||||
GradleBuilder.prototype.prepEnv = function(opts) {
|
||||
var self = this;
|
||||
return check_reqs.check_gradle()
|
||||
.then(function() {
|
||||
return self.prepBuildFiles();
|
||||
}).then(function() {
|
||||
// Copy the gradle wrapper on each build so that:
|
||||
// A) we don't require the Android SDK at project creation time, and
|
||||
// B) we always use the SDK's latest version of it.
|
||||
// check_reqs ensures that this is set.
|
||||
/*jshint -W069 */
|
||||
var sdkDir = process.env['ANDROID_HOME'];
|
||||
/*jshint +W069 */
|
||||
var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
|
||||
.then(function(gradlePath) {
|
||||
return self.runGradleWrapper(gradlePath);
|
||||
}).then(function() {
|
||||
return self.prepBuildFiles();
|
||||
}).then(function() {
|
||||
// We now copy the gradle out of the framework
|
||||
// This is a dirty patch to get the build working
|
||||
/*
|
||||
var wrapperDir = path.join(self.root, 'CordovaLib');
|
||||
if (process.platform == 'win32') {
|
||||
shell.rm('-f', path.join(self.root, 'gradlew.bat'));
|
||||
shell.cp(path.join(wrapperDir, 'gradlew.bat'), self.root);
|
||||
@ -180,13 +193,13 @@ GradleBuilder.prototype.prepEnv = function(opts) {
|
||||
shell.rm('-rf', path.join(self.root, 'gradle', 'wrapper'));
|
||||
shell.mkdir('-p', path.join(self.root, 'gradle'));
|
||||
shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(self.root, 'gradle'));
|
||||
|
||||
*/
|
||||
// If the gradle distribution URL is set, make sure it points to version we want.
|
||||
// If it's not set, do nothing, assuming that we're using a future version of gradle that we don't want to mess with.
|
||||
// For some reason, using ^ and $ don't work. This does the job, though.
|
||||
var distributionUrlRegex = /distributionUrl.*zip/;
|
||||
/*jshint -W069 */
|
||||
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip';
|
||||
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'https\\://services.gradle.org/distributions/gradle-3.3-all.zip';
|
||||
/*jshint +W069 */
|
||||
var gradleWrapperPropertiesPath = path.join(self.root, 'gradle', 'wrapper', 'gradle-wrapper.properties');
|
||||
shell.chmod('u+w', gradleWrapperPropertiesPath);
|
||||
|
@ -26,10 +26,12 @@ var shelljs = require('shelljs'),
|
||||
Q = require('q'),
|
||||
path = require('path'),
|
||||
fs = require('fs'),
|
||||
ROOT = path.join(__dirname, '..', '..');
|
||||
os = require('os'),
|
||||
REPO_ROOT = path.join(__dirname, '..', '..', '..', '..'),
|
||||
PROJECT_ROOT = path.join(__dirname, '..', '..');
|
||||
var CordovaError = require('cordova-common').CordovaError;
|
||||
|
||||
var isWindows = process.platform == 'win32';
|
||||
var superspawn = require('cordova-common').superspawn;
|
||||
var android_sdk = require('./android_sdk');
|
||||
|
||||
function forgivingWhichSync(cmd) {
|
||||
try {
|
||||
@ -50,7 +52,16 @@ function tryCommand(cmd, errMsg, catchStderr) {
|
||||
return d.promise;
|
||||
}
|
||||
|
||||
// Get valid target from framework/project.properties
|
||||
module.exports.isWindows = function() {
|
||||
return (os.platform() == 'win32');
|
||||
};
|
||||
|
||||
module.exports.isDarwin = function() {
|
||||
return (os.platform() == 'darwin');
|
||||
};
|
||||
|
||||
// Get valid target from framework/project.properties if run from this repo
|
||||
// Otherwise get target from project.properties file within a generated cordova-android project
|
||||
module.exports.get_target = function() {
|
||||
function extractFromFile(filePath) {
|
||||
var target = shelljs.grep(/\btarget=/, filePath);
|
||||
@ -59,38 +70,83 @@ module.exports.get_target = function() {
|
||||
}
|
||||
return target.split('=')[1].trim();
|
||||
}
|
||||
if (fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
|
||||
return extractFromFile(path.join(ROOT, 'framework', 'project.properties'));
|
||||
var repo_file = path.join(REPO_ROOT, 'framework', 'project.properties');
|
||||
if (fs.existsSync(repo_file)) {
|
||||
return extractFromFile(repo_file);
|
||||
}
|
||||
if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
|
||||
// if no target found, we're probably in a project and project.properties is in ROOT.
|
||||
return extractFromFile(path.join(ROOT, 'project.properties'));
|
||||
var project_file = path.join(PROJECT_ROOT, 'project.properties');
|
||||
if (fs.existsSync(project_file)) {
|
||||
// if no target found, we're probably in a project and project.properties is in PROJECT_ROOT.
|
||||
return extractFromFile(project_file);
|
||||
}
|
||||
throw new Error('Could not find android target. File missing: ' + path.join(ROOT, 'project.properties'));
|
||||
throw new Error('Could not find android target in either ' + repo_file + ' nor ' + project_file);
|
||||
};
|
||||
|
||||
// Returns a promise. Called only by build and clean commands.
|
||||
module.exports.check_ant = function() {
|
||||
return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.')
|
||||
.then(function (output) {
|
||||
return superspawn.spawn('ant', ['-version'])
|
||||
.then(function(output) {
|
||||
// Parse Ant version from command output
|
||||
return /version ((?:\d+\.)+(?:\d+))/i.exec(output)[1];
|
||||
}).catch(function(err) {
|
||||
throw new CordovaError('Failed to run `ant -version`. Make sure you have `ant` on your $PATH.');
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.get_gradle_wrapper = function() {
|
||||
var androidStudioPath;
|
||||
var i = 0;
|
||||
var foundStudio = false;
|
||||
var program_dir;
|
||||
if (module.exports.isDarwin()) {
|
||||
program_dir = fs.readdirSync('/Applications');
|
||||
while (i < program_dir.length && !foundStudio) {
|
||||
if (program_dir[i].startsWith('Android Studio')) {
|
||||
//TODO: Check for a specific Android Studio version, make sure it's not Canary
|
||||
androidStudioPath = path.join('/Applications', program_dir[i], 'Contents', 'gradle');
|
||||
foundStudio = true;
|
||||
} else { ++i; }
|
||||
}
|
||||
} else if (module.exports.isWindows()) {
|
||||
var androidPath = path.join(process.env['ProgramFiles'], 'Android') + '/';
|
||||
if (fs.existsSync(androidPath)) {
|
||||
program_dir = fs.readdirSync(androidPath);
|
||||
while (i < program_dir.length && !foundStudio) {
|
||||
if (program_dir[i].startsWith('Android Studio')) {
|
||||
foundStudio = true;
|
||||
androidStudioPath = path.join(process.env['ProgramFiles'], 'Android', program_dir[i], 'gradle');
|
||||
} else { ++i; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (androidStudioPath !== null && fs.existsSync(androidStudioPath)) {
|
||||
var dirs = fs.readdirSync(androidStudioPath);
|
||||
if(dirs[0].split('-')[0] == 'gradle') {
|
||||
return path.join(androidStudioPath, dirs[0], 'bin', 'gradle');
|
||||
}
|
||||
} else {
|
||||
//OK, let's try to check for Gradle!
|
||||
return forgivingWhichSync('gradle');
|
||||
}
|
||||
};
|
||||
|
||||
// Returns a promise. Called only by build and clean commands.
|
||||
module.exports.check_gradle = function() {
|
||||
var sdkDir = process.env['ANDROID_HOME'];
|
||||
var d = Q.defer();
|
||||
if (!sdkDir)
|
||||
return Q.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.\n' +
|
||||
'Might need to install Android SDK or set up \'ANDROID_HOME\' env variable.'));
|
||||
|
||||
var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
|
||||
if (!fs.existsSync(wrapperDir)) {
|
||||
return Q.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Might need to update your Android SDK.\n' +
|
||||
'Looked here: ' + wrapperDir));
|
||||
}
|
||||
return Q.when();
|
||||
var gradlePath = module.exports.get_gradle_wrapper();
|
||||
if (gradlePath.length !== 0)
|
||||
d.resolve(gradlePath);
|
||||
else
|
||||
d.reject(new CordovaError('Could not find an installed version of Gradle either in Android Studio,\n' +
|
||||
'or on your system to install the gradle wrapper. Please include gradle \n' +
|
||||
'in your path, or install Android Studio'));
|
||||
return d.promise;
|
||||
};
|
||||
|
||||
// Returns a promise.
|
||||
@ -105,12 +161,15 @@ module.exports.check_java = function() {
|
||||
}
|
||||
} else {
|
||||
if (javacPath) {
|
||||
var msg = 'Failed to find \'JAVA_HOME\' environment variable. Try setting setting it manually.';
|
||||
// OS X has a command for finding JAVA_HOME.
|
||||
if (fs.existsSync('/usr/libexec/java_home')) {
|
||||
return tryCommand('/usr/libexec/java_home', msg)
|
||||
var find_java = '/usr/libexec/java_home';
|
||||
var default_java_error_msg = 'Failed to find \'JAVA_HOME\' environment variable. Try setting setting it manually.';
|
||||
if (fs.existsSync(find_java)) {
|
||||
return superspawn.spawn(find_java)
|
||||
.then(function(stdout) {
|
||||
process.env['JAVA_HOME'] = stdout.trim();
|
||||
}).catch(function(err) {
|
||||
throw new CordovaError(default_java_error_msg);
|
||||
});
|
||||
} else {
|
||||
// See if we can derive it from javac's location.
|
||||
@ -119,10 +178,10 @@ module.exports.check_java = function() {
|
||||
if (fs.existsSync(path.join(maybeJavaHome, 'lib', 'tools.jar'))) {
|
||||
process.env['JAVA_HOME'] = maybeJavaHome;
|
||||
} else {
|
||||
throw new CordovaError(msg);
|
||||
throw new CordovaError(default_java_error_msg);
|
||||
}
|
||||
}
|
||||
} else if (isWindows) {
|
||||
} else if (module.exports.isWindows()) {
|
||||
// Try to auto-detect java in the default install paths.
|
||||
var oldSilent = shelljs.config.silent;
|
||||
shelljs.config.silent = true;
|
||||
@ -142,28 +201,29 @@ module.exports.check_java = function() {
|
||||
}
|
||||
}
|
||||
}).then(function() {
|
||||
var msg =
|
||||
'Failed to run "javac -version", make sure that you have a JDK installed.\n' +
|
||||
'You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.\n';
|
||||
if (process.env['JAVA_HOME']) {
|
||||
msg += 'Your JAVA_HOME is invalid: ' + process.env['JAVA_HOME'] + '\n';
|
||||
}
|
||||
// We use tryCommand with catchStderr = true, because
|
||||
// javac writes version info to stderr instead of stdout
|
||||
return tryCommand('javac -version', msg, true)
|
||||
.then(function (output) {
|
||||
//Let's check for at least Java 8, and keep it future proof so we can support Java 10
|
||||
var match = /javac ((?:1\.)(?:[8-9]\.)(?:\d+))|((?:1\.)(?:[1-9]\d+\.)(?:\d+))/i.exec(output);
|
||||
return match && match[1];
|
||||
});
|
||||
var msg =
|
||||
'Failed to run "javac -version", make sure that you have a JDK installed.\n' +
|
||||
'You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.\n';
|
||||
if (process.env['JAVA_HOME']) {
|
||||
msg += 'Your JAVA_HOME is invalid: ' + process.env['JAVA_HOME'] + '\n';
|
||||
}
|
||||
// We use tryCommand with catchStderr = true, because
|
||||
// javac writes version info to stderr instead of stdout
|
||||
return tryCommand('javac -version', msg, true)
|
||||
.then(function (output) {
|
||||
//Let's check for at least Java 8, and keep it future proof so we can support Java 10
|
||||
var match = /javac ((?:1\.)(?:[8-9]\.)(?:\d+))|((?:1\.)(?:[1-9]\d+\.)(?:\d+))/i.exec(output);
|
||||
return match && match[1];
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// Returns a promise.
|
||||
module.exports.check_android = function() {
|
||||
return Q().then(function() {
|
||||
var androidCmdPath = forgivingWhichSync('android');
|
||||
var adbInPath = !!forgivingWhichSync('adb');
|
||||
var adbInPath = forgivingWhichSync('adb');
|
||||
var avdmanagerInPath = forgivingWhichSync('avdmanager');
|
||||
var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
|
||||
function maybeSetAndroidHome(value) {
|
||||
if (!hasAndroidHome && fs.existsSync(value)) {
|
||||
@ -171,8 +231,10 @@ module.exports.check_android = function() {
|
||||
process.env['ANDROID_HOME'] = value;
|
||||
}
|
||||
}
|
||||
if (!hasAndroidHome && !androidCmdPath) {
|
||||
if (isWindows) {
|
||||
// First ensure ANDROID_HOME is set
|
||||
// If we have no hints (nothing in PATH), try a few default locations
|
||||
if (!hasAndroidHome && !androidCmdPath && !adbInPath && !avdmanagerInPath) {
|
||||
if (module.exports.isWindows()) {
|
||||
// Android Studio 1.0 installer
|
||||
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'sdk'));
|
||||
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'sdk'));
|
||||
@ -182,7 +244,7 @@ module.exports.check_android = function() {
|
||||
// Stand-alone installer
|
||||
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'android-sdk'));
|
||||
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'android-sdk'));
|
||||
} else if (process.platform == 'darwin') {
|
||||
} else if (module.exports.isDarwin()) {
|
||||
// Android Studio 1.0 installer
|
||||
maybeSetAndroidHome(path.join(process.env['HOME'], 'Library', 'Android', 'sdk'));
|
||||
// Android Studio pre-1.0 installer
|
||||
@ -197,26 +259,42 @@ module.exports.check_android = function() {
|
||||
maybeSetAndroidHome(path.join(process.env['HOME'], 'android-sdk'));
|
||||
}
|
||||
}
|
||||
if (hasAndroidHome && !androidCmdPath) {
|
||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
|
||||
}
|
||||
if (androidCmdPath && !hasAndroidHome) {
|
||||
var parentDir = path.dirname(androidCmdPath);
|
||||
var grandParentDir = path.dirname(parentDir);
|
||||
if (path.basename(parentDir) == 'tools') {
|
||||
process.env['ANDROID_HOME'] = path.dirname(parentDir);
|
||||
hasAndroidHome = true;
|
||||
} else if (fs.existsSync(path.join(grandParentDir, 'tools', 'android'))) {
|
||||
process.env['ANDROID_HOME'] = grandParentDir;
|
||||
hasAndroidHome = true;
|
||||
} else {
|
||||
throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' +
|
||||
'Detected \'android\' command at ' + parentDir + ' but no \'tools\' directory found near.\n' +
|
||||
'Try reinstall Android SDK or update your PATH to include path to valid SDK directory.');
|
||||
if (!hasAndroidHome) {
|
||||
// If we dont have ANDROID_HOME, but we do have some tools on the PATH, try to infer from the tooling PATH.
|
||||
var parentDir, grandParentDir;
|
||||
if (androidCmdPath) {
|
||||
parentDir = path.dirname(androidCmdPath);
|
||||
grandParentDir = path.dirname(parentDir);
|
||||
if (path.basename(parentDir) == 'tools' || fs.existsSync(path.join(grandParentDir, 'tools', 'android'))) {
|
||||
maybeSetAndroidHome(grandParentDir);
|
||||
} else {
|
||||
throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' +
|
||||
'Detected \'android\' command at ' + parentDir + ' but no \'tools\' directory found near.\n' +
|
||||
'Try reinstall Android SDK or update your PATH to include valid path to SDK' + path.sep + 'tools directory.');
|
||||
}
|
||||
}
|
||||
if (adbInPath) {
|
||||
parentDir = path.dirname(adbInPath);
|
||||
grandParentDir = path.dirname(parentDir);
|
||||
if (path.basename(parentDir) == 'platform-tools') {
|
||||
maybeSetAndroidHome(grandParentDir);
|
||||
} else {
|
||||
throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' +
|
||||
'Detected \'adb\' command at ' + parentDir + ' but no \'platform-tools\' directory found near.\n' +
|
||||
'Try reinstall Android SDK or update your PATH to include valid path to SDK' + path.sep + 'platform-tools directory.');
|
||||
}
|
||||
}
|
||||
if (avdmanagerInPath) {
|
||||
parentDir = path.dirname(avdmanagerInPath);
|
||||
grandParentDir = path.dirname(parentDir);
|
||||
if (path.basename(parentDir) == 'bin' && path.basename(grandParentDir) == 'tools') {
|
||||
maybeSetAndroidHome(path.dirname(grandParentDir));
|
||||
} else {
|
||||
throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' +
|
||||
'Detected \'avdmanager\' command at ' + parentDir + ' but no \'tools' + path.sep + 'bin\' directory found near.\n' +
|
||||
'Try reinstall Android SDK or update your PATH to include valid path to SDK' + path.sep + 'tools' + path.sep + 'bin directory.');
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasAndroidHome && !adbInPath) {
|
||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
|
||||
}
|
||||
if (!process.env['ANDROID_HOME']) {
|
||||
throw new CordovaError('Failed to find \'ANDROID_HOME\' environment variable. Try setting setting it manually.\n' +
|
||||
@ -226,13 +304,27 @@ module.exports.check_android = function() {
|
||||
throw new CordovaError('\'ANDROID_HOME\' environment variable is set to non-existent path: ' + process.env['ANDROID_HOME'] +
|
||||
'\nTry update it manually to point to valid SDK directory.');
|
||||
}
|
||||
// Next let's make sure relevant parts of the SDK tooling is in our PATH
|
||||
if (hasAndroidHome && !androidCmdPath) {
|
||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
|
||||
}
|
||||
if (hasAndroidHome && !adbInPath) {
|
||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
|
||||
}
|
||||
if (hasAndroidHome && !avdmanagerInPath) {
|
||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools', 'bin');
|
||||
}
|
||||
return hasAndroidHome;
|
||||
});
|
||||
};
|
||||
|
||||
// TODO: is this actually needed?
|
||||
module.exports.getAbsoluteAndroidCmd = function () {
|
||||
var cmd = forgivingWhichSync('android');
|
||||
if (process.platform === 'win32') {
|
||||
if (cmd.length === 0) {
|
||||
cmd = forgivingWhichSync('sdkmanager');
|
||||
}
|
||||
if (module.exports.isWindows()) {
|
||||
return '"' + cmd + '"';
|
||||
}
|
||||
return cmd.replace(/(\s)/g, '\\$1');
|
||||
@ -244,20 +336,17 @@ module.exports.check_android_target = function(originalError) {
|
||||
// android-L
|
||||
// Google Inc.:Google APIs:20
|
||||
// Google Inc.:Glass Development Kit Preview:20
|
||||
var valid_target = module.exports.get_target();
|
||||
var msg = 'Android SDK not found. Make sure that it is installed. If it is not at the default location, set the ANDROID_HOME environment variable.';
|
||||
return tryCommand('android list targets --compact', msg)
|
||||
.then(function(output) {
|
||||
var targets = output.split('\n');
|
||||
if (targets.indexOf(valid_target) >= 0) {
|
||||
var desired_api_level = module.exports.get_target();
|
||||
return android_sdk.list_targets()
|
||||
.then(function(targets) {
|
||||
if (targets.indexOf(desired_api_level) >= 0) {
|
||||
return targets;
|
||||
}
|
||||
|
||||
var androidCmd = module.exports.getAbsoluteAndroidCmd();
|
||||
var msg = 'Please install Android target: "' + valid_target + '".\n\n' +
|
||||
var msg = 'Please install Android target / API level: "' + desired_api_level + '".\n\n' +
|
||||
'Hint: Open the SDK manager by running: ' + androidCmd + '\n' +
|
||||
'You will require:\n' +
|
||||
'1. "SDK Platform" for ' + valid_target + '\n' +
|
||||
'1. "SDK Platform" for API level ' + desired_api_level + '\n' +
|
||||
'2. "Android SDK Platform-tools (latest)\n' +
|
||||
'3. "Android SDK Build-tools" (latest)';
|
||||
if (originalError) {
|
||||
@ -278,7 +367,6 @@ module.exports.run = function() {
|
||||
throw new CordovaError('Requirements check failed for JDK 1.8 or greater');
|
||||
}
|
||||
|
||||
|
||||
if (!values[1]) {
|
||||
throw new CordovaError('Requirements check failed for Android SDK');
|
||||
}
|
||||
|
@ -27,11 +27,15 @@ var path = require('path');
|
||||
var Adb = require('./Adb');
|
||||
var AndroidManifest = require('./AndroidManifest');
|
||||
var events = require('cordova-common').events;
|
||||
var spawn = require('cordova-common').superspawn.spawn;
|
||||
var superspawn = require('cordova-common').superspawn;
|
||||
var CordovaError = require('cordova-common').CordovaError;
|
||||
var shelljs = require('shelljs');
|
||||
var android_sdk = require('./android_sdk');
|
||||
var check_reqs = require('./check_reqs');
|
||||
|
||||
var Q = require('q');
|
||||
var os = require('os');
|
||||
var fs = require('fs');
|
||||
var child_process = require('child_process');
|
||||
|
||||
// constants
|
||||
@ -42,18 +46,77 @@ var NUM_INSTALL_RETRIES = 3;
|
||||
var CHECK_BOOTED_INTERVAL = 3 * ONE_SECOND; // in milliseconds
|
||||
var EXEC_KILL_SIGNAL = 'SIGKILL';
|
||||
|
||||
/**
|
||||
* Returns a Promise for a list of emulator images in the form of objects
|
||||
* {
|
||||
name : <emulator_name>,
|
||||
path : <path_to_emulator_image>,
|
||||
target : <api_target>,
|
||||
abi : <cpu>,
|
||||
skin : <skin>
|
||||
}
|
||||
*/
|
||||
module.exports.list_images = function() {
|
||||
return spawn('android', ['list', 'avds'])
|
||||
function forgivingWhichSync(cmd) {
|
||||
try {
|
||||
return fs.realpathSync(shelljs.which(cmd));
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.list_images_using_avdmanager = function () {
|
||||
return superspawn.spawn('avdmanager', ['list', 'avd'])
|
||||
.then(function(output) {
|
||||
var response = output.split('\n');
|
||||
var emulator_list = [];
|
||||
for (var i = 1; i < response.length; i++) {
|
||||
// To return more detailed information use img_obj
|
||||
var img_obj = {};
|
||||
if (response[i].match(/Name:\s/)) {
|
||||
img_obj['name'] = response[i].split('Name: ')[1].replace('\r', '');
|
||||
if (response[i + 1].match(/Device:\s/)) {
|
||||
i++;
|
||||
img_obj['device'] = response[i].split('Device: ')[1].replace('\r', '');
|
||||
}
|
||||
if (response[i + 1].match(/Path:\s/)) {
|
||||
i++;
|
||||
img_obj['path'] = response[i].split('Path: ')[1].replace('\r', '');
|
||||
}
|
||||
if (response[i + 1].match(/Target:\s/)) {
|
||||
i++;
|
||||
if (response[i + 1].match(/ABI:\s/)) {
|
||||
img_obj['abi'] = response[i + 1].split('ABI: ')[1].replace('\r', '');
|
||||
}
|
||||
// This next conditional just aims to match the old output of `android list avd`
|
||||
// We do so so that we don't have to change the logic when parsing for the
|
||||
// best emulator target to spawn (see below in `best_image`)
|
||||
// This allows us to transitionally support both `android` and `avdmanager` binaries,
|
||||
// depending on what SDK version the user has
|
||||
if (response[i + 1].match(/Based\son:\s/)) {
|
||||
img_obj['target'] = response[i + 1].split('Based on:')[1];
|
||||
if (img_obj['target'].match(/Tag\/ABI:\s/)) {
|
||||
img_obj['target'] = img_obj['target'].split('Tag/ABI:')[0].replace('\r', '').trim();
|
||||
if (img_obj['target'].indexOf('(') > -1) {
|
||||
img_obj['target'] = img_obj['target'].substr(0, img_obj['target'].indexOf('(') - 1).trim();
|
||||
}
|
||||
}
|
||||
var version_string = img_obj['target'].replace(/Android\s+/, '');
|
||||
|
||||
var api_level = android_sdk.version_string_to_api_level[version_string];
|
||||
if (api_level) {
|
||||
img_obj['target'] += ' (API level ' + api_level + ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (response[i + 1].match(/Skin:\s/)) {
|
||||
i++;
|
||||
img_obj['skin'] = response[i].split('Skin: ')[1].replace('\r', '');
|
||||
}
|
||||
|
||||
emulator_list.push(img_obj);
|
||||
}
|
||||
/* To just return a list of names use this
|
||||
if (response[i].match(/Name:\s/)) {
|
||||
emulator_list.push(response[i].split('Name: ')[1].replace('\r', '');
|
||||
}*/
|
||||
|
||||
}
|
||||
return emulator_list;
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.list_images_using_android = function() {
|
||||
return superspawn.spawn('android', ['list', 'avd'])
|
||||
.then(function(output) {
|
||||
var response = output.split('\n');
|
||||
var emulator_list = [];
|
||||
@ -96,6 +159,29 @@ module.exports.list_images = function() {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns a Promise for a list of emulator images in the form of objects
|
||||
* {
|
||||
name : <emulator_name>,
|
||||
device : <device>,
|
||||
path : <path_to_emulator_image>,
|
||||
target : <api_target>,
|
||||
abi : <cpu>,
|
||||
skin : <skin>
|
||||
}
|
||||
*/
|
||||
module.exports.list_images = function() {
|
||||
if (forgivingWhichSync('avdmanager')) {
|
||||
return module.exports.list_images_using_avdmanager();
|
||||
} else if (forgivingWhichSync('android')) {
|
||||
return module.exports.list_images_using_android();
|
||||
} else {
|
||||
return Q().then(function() {
|
||||
throw new CordovaError('Could not find either `android` or `avdmanager` on your $PATH! Are you sure the Android SDK is installed and available?');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Will return the closest avd to the projects target
|
||||
* or undefined if no avds exist.
|
||||
@ -109,8 +195,7 @@ module.exports.best_image = function() {
|
||||
|
||||
var closest = 9999;
|
||||
var best = images[0];
|
||||
// Loading check_reqs at run-time to avoid test-time vs run-time directory structure difference issue
|
||||
var project_target = require('./check_reqs').get_target().replace('android-', '');
|
||||
var project_target = check_reqs.get_target().replace('android-', '');
|
||||
for (var i in images) {
|
||||
var target = images[i].target;
|
||||
if(target) {
|
||||
@ -133,8 +218,9 @@ module.exports.list_started = function() {
|
||||
};
|
||||
|
||||
// Returns a promise.
|
||||
// TODO: we should remove this, there's a more robust method under android_sdk.js
|
||||
module.exports.list_targets = function() {
|
||||
return spawn('android', ['list', 'targets'], {cwd: os.tmpdir()})
|
||||
return superspawn.spawn('android', ['list', 'targets'], {cwd: os.tmpdir()})
|
||||
.then(function(output) {
|
||||
var target_out = output.split('\n');
|
||||
var targets = [];
|
||||
@ -189,8 +275,7 @@ module.exports.start = function(emulator_ID, boot_timeout) {
|
||||
return best.name;
|
||||
}
|
||||
|
||||
// Loading check_reqs at run-time to avoid test-time vs run-time directory structure difference issue
|
||||
var androidCmd = require('./check_reqs').getAbsoluteAndroidCmd();
|
||||
var androidCmd = check_reqs.getAbsoluteAndroidCmd();
|
||||
return Q.reject(new CordovaError('No emulator images (avds) found.\n' +
|
||||
'1. Download desired System Image by running: ' + androidCmd + ' sdk\n' +
|
||||
'2. Create an AVD by running: ' + androidCmd + ' avd\n' +
|
||||
@ -199,10 +284,13 @@ module.exports.start = function(emulator_ID, boot_timeout) {
|
||||
}).then(function(emulatorId) {
|
||||
return self.get_available_port()
|
||||
.then(function (port) {
|
||||
// Figure out the directory the emulator binary runs in, and set the cwd to that directory.
|
||||
// Workaround for https://code.google.com/p/android/issues/detail?id=235461
|
||||
var emulator_dir = path.dirname(shelljs.which('emulator'));
|
||||
var args = ['-avd', emulatorId, '-port', port];
|
||||
// Don't wait for it to finish, since the emulator will probably keep running for a long time.
|
||||
child_process
|
||||
.spawn('emulator', args, { stdio: 'inherit', detached: true })
|
||||
.spawn('emulator', args, { stdio: 'inherit', detached: true, cwd: emulator_dir })
|
||||
.unref();
|
||||
|
||||
// wait for emulator to start
|
||||
@ -294,7 +382,7 @@ module.exports.wait_for_boot = function(emulator_id, time_remaining) {
|
||||
module.exports.create_image = function(name, target) {
|
||||
console.log('Creating new avd named ' + name);
|
||||
if (target) {
|
||||
return spawn('android', ['create', 'avd', '--name', name, '--target', target])
|
||||
return superspawn.spawn('android', ['create', 'avd', '--name', name, '--target', target])
|
||||
.then(null, function(error) {
|
||||
console.error('ERROR : Failed to create emulator image : ');
|
||||
console.error(' Do you have the latest android targets including ' + target + '?');
|
||||
@ -302,7 +390,8 @@ module.exports.create_image = function(name, target) {
|
||||
});
|
||||
} else {
|
||||
console.log('WARNING : Project target not found, creating avd with a different target but the project may fail to install.');
|
||||
return spawn('android', ['create', 'avd', '--name', name, '--target', this.list_targets()[0]])
|
||||
// TODO: there's a more robust method for finding targets in android_sdk.js
|
||||
return superspawn.spawn('android', ['create', 'avd', '--name', name, '--target', this.list_targets()[0]])
|
||||
.then(function() {
|
||||
// TODO: This seems like another error case, even though it always happens.
|
||||
console.error('ERROR : Unable to create an avd emulator, no targets found.');
|
||||
|
@ -22,7 +22,7 @@
|
||||
var devices = require('./device');
|
||||
|
||||
// Usage support for when args are given
|
||||
require('../lib/check_reqs').check_android().then(function() {
|
||||
require('./check_reqs').check_android().then(function() {
|
||||
devices.list().done(function(device_list) {
|
||||
device_list && device_list.forEach(function(dev) {
|
||||
console.log(dev);
|
||||
|
@ -22,7 +22,7 @@
|
||||
var emulators = require('./emulator');
|
||||
|
||||
// Usage support for when args are given
|
||||
require('../lib/check_reqs').check_android().then(function() {
|
||||
require('./check_reqs').check_android().then(function() {
|
||||
emulators.list_images().done(function(emulator_list) {
|
||||
emulator_list && emulator_list.forEach(function(emu) {
|
||||
console.log(emu.name);
|
||||
|
@ -22,7 +22,7 @@
|
||||
var emulators = require('./emulator');
|
||||
|
||||
// Usage support for when args are given
|
||||
require('../lib/check_reqs').check_android().then(function() {
|
||||
require('./check_reqs').check_android().then(function() {
|
||||
emulators.list_started().done(function(emulator_list) {
|
||||
emulator_list && emulator_list.forEach(function(emu) {
|
||||
console.log(emu);
|
||||
|
@ -46,8 +46,9 @@ module.exports.prepare = function (cordovaProject, options) {
|
||||
return updateProjectAccordingTo(self._config, self.locations);
|
||||
})
|
||||
.then(function () {
|
||||
updateIcons(cordovaProject, self.locations.res);
|
||||
updateSplashes(cordovaProject, self.locations.res);
|
||||
updateIcons(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
|
||||
updateSplashes(cordovaProject, path.relative(cordovaProject.root, self.locations.res));
|
||||
updateFileResources(cordovaProject, path.relative(cordovaProject.root, self.locations.root));
|
||||
})
|
||||
.then(function () {
|
||||
events.emit('verbose', 'Prepared android project successfully');
|
||||
@ -70,8 +71,9 @@ module.exports.clean = function (options) {
|
||||
var self = this;
|
||||
return Q().then(function () {
|
||||
cleanWww(projectRoot, self.locations);
|
||||
cleanIcons(projectRoot, projectConfig, self.locations.res);
|
||||
cleanSplashes(projectRoot, projectConfig, self.locations.res);
|
||||
cleanIcons(projectRoot, projectConfig, path.relative(projectRoot, self.locations.res));
|
||||
cleanSplashes(projectRoot, projectConfig, path.relative(projectRoot, self.locations.res));
|
||||
cleanFileResources(projectRoot, projectConfig, path.relative(projectRoot, self.locations.root));
|
||||
});
|
||||
};
|
||||
|
||||
@ -401,6 +403,44 @@ function mapImageResources(rootDir, subDir, type, resourceName) {
|
||||
return pathMap;
|
||||
}
|
||||
|
||||
|
||||
function updateFileResources(cordovaProject, platformDir) {
|
||||
var files = cordovaProject.projectConfig.getFileResources('android');
|
||||
|
||||
// if there are resource-file elements in config.xml
|
||||
if (files.length === 0) {
|
||||
events.emit('verbose', 'This app does not have additional resource files defined');
|
||||
return;
|
||||
}
|
||||
|
||||
var resourceMap = {};
|
||||
files.forEach(function(res) {
|
||||
var targetPath = path.join(platformDir, res.target);
|
||||
resourceMap[targetPath] = res.src;
|
||||
});
|
||||
|
||||
events.emit('verbose', 'Updating resource files at ' + platformDir);
|
||||
FileUpdater.updatePaths(
|
||||
resourceMap, { rootDir: cordovaProject.root }, logFileOp);
|
||||
}
|
||||
|
||||
|
||||
function cleanFileResources(projectRoot, projectConfig, platformDir) {
|
||||
var files = projectConfig.getFileResources('android');
|
||||
if (files.length > 0) {
|
||||
events.emit('verbose', 'Cleaning resource files at ' + platformDir);
|
||||
|
||||
var resourceMap = {};
|
||||
files.forEach(function(res) {
|
||||
var filePath = path.join(platformDir, res.target);
|
||||
resourceMap[filePath] = null;
|
||||
});
|
||||
|
||||
FileUpdater.updatePaths(
|
||||
resourceMap, { rootDir: projectRoot, all: true}, logFileOp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets and validates 'AndroidLaunchMode' prepference from config.xml. Returns
|
||||
* preference value and warns if it doesn't seems to be valid
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
// Coho updates this line:
|
||||
var VERSION = "6.0.0";
|
||||
var VERSION = "6.2.3";
|
||||
|
||||
module.exports.version = VERSION;
|
||||
|
||||
|
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
#Wed Apr 10 15:27:10 PDT 2013
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=http\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||
#Tue Aug 22 17:22:32 EDT 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
|
||||
|
@ -8,14 +8,14 @@
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
@ -46,7 +46,7 @@ echo location of your Java installation.
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Platform: android
|
||||
// 53ea1913735222d326e65326e03391405df3cd4e
|
||||
// 7ef9f9c03167a4dde4372d869472241b6816fee9
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
@ -19,7 +19,7 @@
|
||||
under the License.
|
||||
*/
|
||||
;(function() {
|
||||
var PLATFORM_VERSION_BUILD_LABEL = '6.0.0';
|
||||
var PLATFORM_VERSION_BUILD_LABEL = '6.2.3';
|
||||
// file: src/scripts/require.js
|
||||
|
||||
/*jshint -W079 */
|
||||
@ -330,7 +330,7 @@ module.exports = cordova;
|
||||
|
||||
});
|
||||
|
||||
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js
|
||||
// file: /Users/maj/src/cordova-android/cordova-js-src/android/nativeapiprovider.js
|
||||
define("cordova/android/nativeapiprovider", function(require, exports, module) {
|
||||
|
||||
/**
|
||||
@ -353,7 +353,7 @@ module.exports = {
|
||||
|
||||
});
|
||||
|
||||
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js
|
||||
// file: /Users/maj/src/cordova-android/cordova-js-src/android/promptbasednativeapi.js
|
||||
define("cordova/android/promptbasednativeapi", function(require, exports, module) {
|
||||
|
||||
/**
|
||||
@ -886,7 +886,7 @@ module.exports = channel;
|
||||
|
||||
});
|
||||
|
||||
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/exec.js
|
||||
// file: /Users/maj/src/cordova-android/cordova-js-src/exec.js
|
||||
define("cordova/exec", function(require, exports, module) {
|
||||
|
||||
/**
|
||||
@ -1649,7 +1649,7 @@ exports.reset();
|
||||
|
||||
});
|
||||
|
||||
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/platform.js
|
||||
// file: /Users/maj/src/cordova-android/cordova-js-src/platform.js
|
||||
define("cordova/platform", function(require, exports, module) {
|
||||
|
||||
// The last resume event that was received that had the result of a plugin call.
|
||||
@ -1759,7 +1759,7 @@ function onMessageFromNative(msg) {
|
||||
|
||||
});
|
||||
|
||||
// file: /Users/jbowser/cordova/cordova-android/cordova-js-src/plugin/android/app.js
|
||||
// file: /Users/maj/src/cordova-android/cordova-js-src/plugin/android/app.js
|
||||
define("cordova/plugin/android/app", function(require, exports, module) {
|
||||
|
||||
var exec = require('cordova/exec');
|
||||
|
@ -1,22 +1,5 @@
|
||||
cordova.define('cordova/plugin_list', function(require, exports, module) {
|
||||
module.exports = [
|
||||
{
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-device.device",
|
||||
"file": "plugins/cordova-plugin-device/www/device.js",
|
||||
@ -32,18 +15,35 @@ module.exports = [
|
||||
"clobbers": [
|
||||
"navigator.splashscreen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
}
|
||||
];
|
||||
module.exports.metadata =
|
||||
// TOP OF METADATA
|
||||
{
|
||||
"cordova-plugin-crosswalk-webview": "2.2.0",
|
||||
"ionic-plugin-keyboard": "2.2.1",
|
||||
"cordova-plugin-whitelist": "1.3.1",
|
||||
"cordova-plugin-console": "1.0.5",
|
||||
"cordova-plugin-statusbar": "2.2.1",
|
||||
"cordova-plugin-crosswalk-webview": "2.3.0",
|
||||
"cordova-plugin-device": "1.1.4",
|
||||
"cordova-plugin-splashscreen": "4.0.1"
|
||||
"cordova-plugin-splashscreen": "4.0.3",
|
||||
"cordova-plugin-statusbar": "2.2.3",
|
||||
"cordova-plugin-whitelist": "1.3.1",
|
||||
"ionic-plugin-keyboard": "2.2.1"
|
||||
};
|
||||
// BOTTOM OF METADATA
|
||||
});
|
@ -10,6 +10,6 @@
|
||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||
# Project target.
|
||||
target=android-24
|
||||
target=android-25
|
||||
android.library.reference.1=CordovaLib
|
||||
cordova.gradle.include.1=cordova-plugin-crosswalk-webview/dynamicbible-xwalk.gradle
|
@ -1,22 +1,22 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="walljm.dynamicbible" version="3.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<feature name="Keyboard">
|
||||
<param name="android-package" value="io.ionic.keyboard.IonicKeyboard" />
|
||||
<param name="onload" value="true" />
|
||||
<widget id="walljm.dynamicbible" version="3.0.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<feature name="Device">
|
||||
<param name="android-package" value="org.apache.cordova.device.Device" />
|
||||
</feature>
|
||||
<feature name="Whitelist">
|
||||
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
|
||||
<feature name="SplashScreen">
|
||||
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
|
||||
<param name="onload" value="true" />
|
||||
</feature>
|
||||
<feature name="StatusBar">
|
||||
<param name="android-package" value="org.apache.cordova.statusbar.StatusBar" />
|
||||
<param name="onload" value="true" />
|
||||
</feature>
|
||||
<feature name="Device">
|
||||
<param name="android-package" value="org.apache.cordova.device.Device" />
|
||||
<feature name="Whitelist">
|
||||
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
|
||||
<param name="onload" value="true" />
|
||||
</feature>
|
||||
<feature name="SplashScreen">
|
||||
<param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
|
||||
<feature name="Keyboard">
|
||||
<param name="android-package" value="io.ionic.keyboard.IonicKeyboard" />
|
||||
<param name="onload" value="true" />
|
||||
</feature>
|
||||
<name>Dynamic Bible</name>
|
||||
@ -30,7 +30,6 @@
|
||||
<allow-intent href="sms:*" />
|
||||
<allow-intent href="mailto:*" />
|
||||
<allow-intent href="geo:*" />
|
||||
<icon src="resources\android\icon\drawable-xhdpi-icon.png" />
|
||||
<allow-intent href="market:*" />
|
||||
<icon density="ldpi" src="resources\android\icon\drawable-ldpi-icon.png" />
|
||||
<icon density="mdpi" src="resources\android\icon\drawable-mdpi-icon.png" />
|
||||
@ -50,6 +49,24 @@
|
||||
<splash density="port-xhdpi" src="resources\android\splash\drawable-port-xhdpi-screen.png" />
|
||||
<splash density="port-xxhdpi" src="resources\android\splash\drawable-port-xxhdpi-screen.png" />
|
||||
<splash density="port-xxxhdpi" src="resources\android\splash\drawable-port-xxxhdpi-screen.png" />
|
||||
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
|
||||
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
|
||||
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
|
||||
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
|
||||
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
|
||||
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
|
||||
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
|
||||
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
|
||||
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
|
||||
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
|
||||
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
|
||||
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
|
||||
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
|
||||
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
|
||||
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
|
||||
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
|
||||
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
|
||||
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
|
||||
<preference name="loglevel" value="DEBUG" />
|
||||
<preference name="webView" value="org.crosswalk.engine.XWalkWebViewEngine" />
|
||||
<preference name="xwalkVersion" value="22+" />
|
||||
|
@ -142,6 +142,23 @@ public class StatusBar extends CordovaPlugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ("overlaysWebView".equals(action)) {
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
this.cordova.getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
setStatusBarTransparent(args.getBoolean(0));
|
||||
} catch (JSONException ignore) {
|
||||
LOG.e(TAG, "Invalid boolean argument");
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
else return args.getBoolean(0) == false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -154,7 +171,7 @@ public class StatusBar extends CordovaPlugin {
|
||||
window.addFlags(0x80000000); // SDK 21: WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
||||
try {
|
||||
// Using reflection makes sure any 5.0+ device will work without having to compile with SDK level 21
|
||||
window.getClass().getDeclaredMethod("setStatusBarColor", int.class).invoke(window, Color.parseColor(colorPref));
|
||||
window.getClass().getMethod("setStatusBarColor", int.class).invoke(window, Color.parseColor(colorPref));
|
||||
} catch (IllegalArgumentException ignore) {
|
||||
LOG.e(TAG, "Invalid hexString argument, use f.i. '#999999'");
|
||||
} catch (Exception ignore) {
|
||||
@ -164,4 +181,21 @@ public class StatusBar extends CordovaPlugin {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setStatusBarTransparent(final boolean transparent) {
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
final Window window = cordova.getActivity().getWindow();
|
||||
if (transparent) {
|
||||
window.getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
}
|
||||
else {
|
||||
window.getDecorView().setSystemUiVisibility(
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
| View.SYSTEM_UI_FLAG_VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,11 +32,16 @@ import org.xwalk.core.XWalkJavascriptResult;
|
||||
import org.xwalk.core.XWalkUIClient;
|
||||
import org.xwalk.core.XWalkView;
|
||||
|
||||
import org.crosswalk.engine.XWalkWebViewEngine.PermissionRequestListener;
|
||||
|
||||
public class XWalkCordovaUiClient extends XWalkUIClient {
|
||||
private static final String TAG = "XWalkCordovaUiClient";
|
||||
protected final CordovaDialogsHelper dialogsHelper;
|
||||
protected final XWalkWebViewEngine parentEngine;
|
||||
|
||||
private XWalkFileChooser mFileChooser;
|
||||
private CordovaPlugin mFileChooserResultPlugin;
|
||||
|
||||
private static final int FILECHOOSER_RESULTCODE = 5173;
|
||||
|
||||
public XWalkCordovaUiClient(XWalkWebViewEngine parentEngine) {
|
||||
@ -171,14 +176,33 @@ public class XWalkCordovaUiClient extends XWalkUIClient {
|
||||
|
||||
// File Chooser
|
||||
@Override
|
||||
public void openFileChooser(XWalkView view, final ValueCallback<Uri> uploadFile, String acceptType, String capture) {
|
||||
uploadFile.onReceiveValue(null);
|
||||
public void openFileChooser(XWalkView view, final ValueCallback<Uri> uploadFile,
|
||||
final String acceptType, final String capture) {
|
||||
if (mFileChooser == null) {
|
||||
mFileChooser = new XWalkFileChooser(parentEngine.cordova.getActivity());
|
||||
mFileChooserResultPlugin = new CordovaPlugin() {
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
||||
mFileChooser.onActivityResult(requestCode, resultCode, intent);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
parentEngine.cordova.setActivityResultCallback(new CordovaPlugin() {
|
||||
PermissionRequestListener listener = new PermissionRequestListener() {
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
|
||||
parentEngine.webView.onActivityResult(requestCode, resultCode, intent);
|
||||
public void onRequestPermissionResult(int requestCode, String[] permissions,
|
||||
int[] grantResults) {
|
||||
for (int i = 0; i < permissions.length; ++i) {
|
||||
Log.d(TAG, "permission:" + permissions[i] + " result:" + grantResults[i]);
|
||||
}
|
||||
parentEngine.cordova.setActivityResultCallback(mFileChooserResultPlugin);
|
||||
mFileChooser.showFileChooser(uploadFile, acceptType, capture);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (!parentEngine.requestPermissionsForFileChooser(listener)) {
|
||||
parentEngine.cordova.setActivityResultCallback(mFileChooserResultPlugin);
|
||||
mFileChooser.showFileChooser(uploadFile, acceptType, capture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,17 +22,20 @@ package org.crosswalk.engine;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.AssetManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.Manifest;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.webkit.ValueCallback;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.apache.cordova.CordovaBridge;
|
||||
import org.apache.cordova.CordovaInterface;
|
||||
@ -61,6 +64,8 @@ public class XWalkWebViewEngine implements CordovaWebViewEngine {
|
||||
|
||||
private static final String XWALK_EXTENSIONS_FOLDER = "xwalk-extensions";
|
||||
|
||||
private static final int PERMISSION_REQUEST_CODE = 100;
|
||||
|
||||
protected final XWalkCordovaView webView;
|
||||
protected XWalkCordovaCookieManager cookieManager;
|
||||
protected CordovaBridge bridge;
|
||||
@ -317,4 +322,45 @@ public class XWalkWebViewEngine implements CordovaWebViewEngine {
|
||||
public boolean isXWalkReady() {
|
||||
return activityDelegate.isXWalkReady();
|
||||
}
|
||||
|
||||
public interface PermissionRequestListener {
|
||||
public void onRequestPermissionResult(int requestCode, String[] permissions,
|
||||
int[] grantResults);
|
||||
}
|
||||
|
||||
public boolean requestPermissionsForFileChooser(final PermissionRequestListener listener) {
|
||||
ArrayList<String> dangerous_permissions = new ArrayList<String>();
|
||||
try {
|
||||
PackageManager packageManager = cordova.getActivity().getPackageManager();
|
||||
PackageInfo packageInfo = packageManager.getPackageInfo(
|
||||
cordova.getActivity().getPackageName(), PackageManager.GET_PERMISSIONS);
|
||||
for (String permission : packageInfo.requestedPermissions) {
|
||||
if (permission.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
|| permission.equals(Manifest.permission.CAMERA)) {
|
||||
dangerous_permissions.add(permission);
|
||||
}
|
||||
}
|
||||
} catch (NameNotFoundException e) {
|
||||
}
|
||||
|
||||
if (dangerous_permissions.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CordovaPlugin permissionRequestPlugin = new CordovaPlugin() {
|
||||
@Override
|
||||
public void onRequestPermissionResult(int requestCode, String[] permissions,
|
||||
int[] grantResults) {
|
||||
if (requestCode != PERMISSION_REQUEST_CODE) return;
|
||||
listener.onRequestPermissionResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
};
|
||||
try {
|
||||
cordova.requestPermissions(permissionRequestPlugin, PERMISSION_REQUEST_CODE,
|
||||
dangerous_permissions.toArray(new String[dangerous_permissions.size()]));
|
||||
} catch (NoSuchMethodError e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { Component, ViewChild } from '@angular/core';
|
||||
import { Platform, MenuController, Nav } from 'ionic-angular';
|
||||
import { StatusBar, Splashscreen } from 'ionic-native';
|
||||
import { StatusBar } from '@ionic-native/status-bar';
|
||||
import { SplashScreen } from '@ionic-native/splash-screen';
|
||||
import { SearchPage } from "../pages/search/search";
|
||||
|
||||
import { PagesService } from "../services/pages-service";
|
||||
|
||||
@Component({
|
||||
@ -17,6 +19,8 @@ export class MyApp
|
||||
constructor(
|
||||
public platform: Platform,
|
||||
public menu: MenuController,
|
||||
private statusBar: StatusBar,
|
||||
private splash: SplashScreen,
|
||||
private pagesSvc: PagesService
|
||||
)
|
||||
{
|
||||
@ -29,8 +33,8 @@ export class MyApp
|
||||
{
|
||||
// Okay, so the platform is ready and our plugins are available.
|
||||
// Here you can do any higher level native things you might need.
|
||||
StatusBar.styleDefault();
|
||||
Splashscreen.hide();
|
||||
this.statusBar.styleDefault();
|
||||
this.splash.hide();
|
||||
});
|
||||
}
|
||||
|
||||
@ -48,9 +52,9 @@ export class MyApp
|
||||
// will get reregistered when SearchPage loads. Also, if you go to a non SearchPage, the actions
|
||||
// menu won't be there, but the unregister function doesn't fail if a non existent id is given,
|
||||
// so thats ok.
|
||||
this.menu.unregister(this.menu.get('actions'));
|
||||
this.menu._unregister(this.menu.get('actions'));
|
||||
|
||||
// navigate to the new page if it is not the current page
|
||||
this.nav.setRoot(page.component, page.params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<button ion-item *ngFor="let p of pagesSvc.getMainPages()" (click)="openPage(p)">
|
||||
<ion-icon name="{{p.icon}}" item-left></ion-icon> {{p.title}}
|
||||
<ion-icon name="{{p.icon}}" item-start></ion-icon> {{p.title}}
|
||||
</button>
|
||||
</ion-list>
|
||||
<ion-list>
|
||||
@ -15,10 +15,10 @@
|
||||
Saved Pages
|
||||
</ion-list-header>
|
||||
<button ion-item *ngFor="let p of pagesSvc.getSavedPages()" (click)="openPage(p)">
|
||||
<ion-icon name="bookmark" item-left></ion-icon> {{p.title}}
|
||||
<ion-icon name="bookmark" item-start></ion-icon> {{p.title}}
|
||||
</button>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
</ion-menu>
|
||||
|
||||
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>
|
||||
<ion-nav [root]="rootPage" #content swipeBackEnabled="false"></ion-nav>
|
||||
|
@ -1,8 +1,12 @@
|
||||
import { NgModule, ErrorHandler } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserModule} from '@angular/platform-browser';
|
||||
import { HttpModule } from '@angular/http';
|
||||
|
||||
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
|
||||
import { Storage } from '@ionic/storage';
|
||||
import { IonicStorageModule } from '@ionic/storage';
|
||||
|
||||
import { StatusBar } from '@ionic-native/status-bar';
|
||||
import { SplashScreen } from '@ionic-native/splash-screen';
|
||||
|
||||
import { MyApp } from './app.component';
|
||||
|
||||
@ -34,7 +38,9 @@ import { ErrorMessage } from '../components/error-message/error-message';
|
||||
],
|
||||
imports: [
|
||||
IonicModule.forRoot(MyApp),
|
||||
IonicStorageModule.forRoot(),
|
||||
BrowserModule,
|
||||
HttpModule
|
||||
],
|
||||
bootstrap: [IonicApp],
|
||||
entryComponents: [
|
||||
@ -49,6 +55,6 @@ import { ErrorMessage } from '../components/error-message/error-message';
|
||||
Error,
|
||||
ErrorMessage
|
||||
],
|
||||
providers: [{ provide: ErrorHandler, useClass: IonicErrorHandler }, Storage]
|
||||
providers: [{ provide: ErrorHandler, useClass: IonicErrorHandler }, StatusBar, SplashScreen]
|
||||
})
|
||||
export class AppModule { }
|
||||
export class AppModule { }
|
||||
|
@ -1,6 +1,6 @@
|
||||
<ion-item class="title error-title" padding (swipe)="close()">
|
||||
Error
|
||||
<button ion-button icon-only item-right large clear (click)="close()">
|
||||
<button ion-button icon-only item-end large clear (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
</button>
|
||||
</ion-item>
|
||||
@ -8,7 +8,7 @@
|
||||
<br>
|
||||
<p>{{cardItem.qry}}</p>
|
||||
</ion-card-content>
|
||||
<button ion-button icon-left clear small (click)="close()">
|
||||
<button ion-button icon-start clear small (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
<div>Close</div>
|
||||
</button>
|
||||
</button>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<ion-item class="title passage-title" (swipe)="close()">
|
||||
<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-right large clear (click)="close()">
|
||||
<button ion-button icon-only item-end large clear (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
</button>
|
||||
</ion-item>
|
||||
@ -22,7 +22,7 @@
|
||||
<error-message [msg]="data.msg"></error-message>
|
||||
</ion-card-content>
|
||||
<div style="float: left">
|
||||
<button ion-button icon-left clear (click)="close()">
|
||||
<button ion-button icon-start clear (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
<div>Close</div>
|
||||
</button>
|
||||
@ -37,4 +37,4 @@
|
||||
<button ion-button icon-center clear (click)="next()" *ngIf="ref !== undefined && ref.Section.end.chapter !== ref.Section.end.lastchapter.toString()">
|
||||
<ion-icon name="fastforward"></ion-icon>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<ion-item class="title strongs-title" padding (swipe)="close()">
|
||||
<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-right large clear (click)="close()">
|
||||
<button ion-button icon-only item-end large clear (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
</button>
|
||||
</ion-item>
|
||||
@ -40,7 +40,7 @@
|
||||
<ion-card-content *ngIf="data !== undefined && data.status === -1">
|
||||
<error-message [msg]="data.msg"></error-message>
|
||||
</ion-card-content>
|
||||
<button ion-button item-left icon-left clear small (click)="close()">
|
||||
<button ion-button item-left icon-start clear small (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
<div>Close</div>
|
||||
</button>
|
||||
</button>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<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-icon name="paper" item-start></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>
|
||||
@ -40,4 +40,4 @@
|
||||
</ion-content>
|
||||
<ion-content *ngIf="item !== undefined && item.status === -1">
|
||||
<error-message [msg]="item.msg"></error-message>
|
||||
</ion-content>
|
||||
</ion-content>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<ion-item class="title words-title" padding (swipe)="close()">
|
||||
<ion-icon name="grid" item-left></ion-icon> <span *ngIf="data !== undefined"><span *ngIf="data.status === -1">Error:</span> {{data.refs.length}} results for {{data.word}}</span>
|
||||
<button ion-button icon-only item-right large clear (click)="close()">
|
||||
<button ion-button icon-only item-end large clear (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
</button>
|
||||
</ion-item>
|
||||
@ -12,7 +12,7 @@
|
||||
<ion-card-content *ngIf="data !== undefined && data.status === -1">
|
||||
<error-message [msg]="data.msg"></error-message>
|
||||
</ion-card-content>
|
||||
<button ion-button icon-left clear small (click)="close()">
|
||||
<button ion-button icon-start clear small (click)="close()">
|
||||
<ion-icon name="close-circle"></ion-icon>
|
||||
<div>Close</div>
|
||||
</button>
|
||||
</button>
|
||||
|
@ -27,10 +27,12 @@
|
||||
<ion-app></ion-app>
|
||||
<!-- The polyfills js is generated during the build process -->
|
||||
<script src="build/polyfills.js"></script>
|
||||
<!-- all code from node_modules directory is here -->
|
||||
<script src="build/vendor.js"></script>
|
||||
<!-- The bundle js is generated during the build process -->
|
||||
<script src="build/main.js"></script>
|
||||
<script src="lib/math.min.js"></script>
|
||||
<script src="lib/jquery.min.js"></script>
|
||||
<script src="lib/web-animations.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -18,17 +18,23 @@ export class UserProfile
|
||||
public update(t: UserProfile, local: Storage)
|
||||
{
|
||||
let updated = false;
|
||||
for (var k in this.user)
|
||||
let k;
|
||||
const user = this.user;
|
||||
for (k in user)
|
||||
{
|
||||
if (t[k] === undefined)
|
||||
if (user.hasOwnProperty(k))
|
||||
{
|
||||
t[k] = this.user[k];
|
||||
updated = true;
|
||||
if (t[k] === undefined)
|
||||
{
|
||||
t[k] = user[k];
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var k in this.user)
|
||||
this.user[k] = t[k];
|
||||
for (k in user)
|
||||
if (user.hasOwnProperty(k))
|
||||
user[k] = t[k];
|
||||
|
||||
if (updated)
|
||||
this.save(local);
|
||||
@ -83,4 +89,4 @@ export type User = {
|
||||
export type SavedPage = {
|
||||
queries: CardItem[],
|
||||
title: string
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Ionic",
|
||||
"short_name": "Ionic",
|
||||
"name": "Dynamic Bible",
|
||||
"short_name": "DynamicBible",
|
||||
"start_url": "index.html",
|
||||
"display": "standalone",
|
||||
"icons": [{
|
||||
@ -10,4 +10,4 @@
|
||||
}],
|
||||
"background_color": "#4e8ef7",
|
||||
"theme_color": "#4e8ef7"
|
||||
}
|
||||
}
|
||||
|
@ -48,10 +48,10 @@
|
||||
<ion-list>
|
||||
<ion-item *ngFor="let p of userProfile.user.saved_pages">
|
||||
{{p.title}}
|
||||
<button ion-button item-right outline icon-right (click)="removePage(p)">
|
||||
<button ion-button item-end outline icon-end (click)="removePage(p)">
|
||||
Delete Page <ion-icon name="trash"></ion-icon>
|
||||
</button>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</template>
|
||||
</ion-content>
|
||||
</ion-content>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/// <reference path="../../typings/globals/jquery/index.d.ts" />
|
||||
/// <reference path="../../typings/globals/jquery/index.d.ts" />
|
||||
import { Injectable } from "@angular/core";
|
||||
import { Http } from "@angular/http";
|
||||
|
||||
@ -60,11 +60,11 @@ export class StrongsService
|
||||
type: "GET",
|
||||
url: "data/strongs/" + url,
|
||||
dataType: "json",
|
||||
success: function (d: StrongsDefinition[], t, x)
|
||||
success(d: StrongsDefinition[], t, x)
|
||||
{
|
||||
self.result.strongs = d;
|
||||
},
|
||||
error: function (request, status, error)
|
||||
error(request, status, error)
|
||||
{
|
||||
console.log(error);
|
||||
self.result.status = -1;
|
||||
@ -83,18 +83,18 @@ export class StrongsService
|
||||
type: "GET",
|
||||
url: "data/strongscr/cr" + url,
|
||||
dataType: "json",
|
||||
success: function (d: StrongsCrossReference[], t, x)
|
||||
success(d: StrongsCrossReference[], t, x)
|
||||
{
|
||||
for (let cr of d)
|
||||
{
|
||||
if (cr.id.toUpperCase() == self.result.prefix + self.result.sn)
|
||||
if (cr.id.toUpperCase() === self.result.prefix + self.result.sn)
|
||||
{
|
||||
self.result.crossrefs = cr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (request, status, error)
|
||||
error(request, status, error)
|
||||
{
|
||||
console.log(error);
|
||||
self.result.status = -1;
|
||||
@ -116,18 +116,18 @@ export class StrongsService
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function (d: RMACCrossReference[], t, x)
|
||||
success(d: RMACCrossReference[], t, x)
|
||||
{
|
||||
rmac_cross_references = d;
|
||||
},
|
||||
error: function (request, status, error)
|
||||
error(request, status, error)
|
||||
{
|
||||
console.log(error);
|
||||
}
|
||||
});
|
||||
|
||||
// deal with RMAC
|
||||
let tmp = $.grep<RMACCrossReference>(rmac_cross_references, (el, i) => { return el.i == sn + "" ? true : false; });
|
||||
let tmp = $.grep<RMACCrossReference>(rmac_cross_references, (el, i) => { return el.i === sn + "" ? true : false; });
|
||||
if (tmp.length == 0)
|
||||
return this.result;
|
||||
|
||||
@ -140,18 +140,18 @@ export class StrongsService
|
||||
type: "GET",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function (d: RMACDefinition[], t, x)
|
||||
success(d: RMACDefinition[], t, x)
|
||||
{
|
||||
for (let rmac of d)
|
||||
{
|
||||
if (rmac.id.toLowerCase() == self.result.rmaccode)
|
||||
if (rmac.id.toLowerCase() === self.result.rmaccode)
|
||||
{
|
||||
self.result.rmac = rmac;
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (request, status, error)
|
||||
error(request, status, error)
|
||||
{
|
||||
console.log(error);
|
||||
}
|
||||
@ -193,4 +193,4 @@ type StrongsCrossReference =
|
||||
|
||||
type RMACDefinition = { id: string, d: string[] }
|
||||
|
||||
type RMACCrossReference = { i: string, r: string }
|
||||
type RMACCrossReference = { i: string, r: string }
|
||||
|
@ -1,28 +1,28 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"declaration": false,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [
|
||||
"dom",
|
||||
"es2015"
|
||||
],
|
||||
"module": "es2015",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"target": "es5"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
{
|
||||
"compilerOptions": {
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"declaration": false,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [
|
||||
"dom",
|
||||
"es2015"
|
||||
],
|
||||
"module": "es2015",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"target": "es5"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"src/**/*.spec.ts",
|
||||
".tmp"
|
||||
],
|
||||
"compileOnSave": false,
|
||||
"atom": {
|
||||
"rewriteTsconfig": false
|
||||
}
|
||||
}
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"src/**/*.spec.ts",
|
||||
".tmp"
|
||||
],
|
||||
"compileOnSave": false,
|
||||
"atom": {
|
||||
"rewriteTsconfig": false
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"rules": {
|
||||
"no-duplicate-variable": true,
|
||||
"no-unused-variable": [
|
||||
true
|
||||
false
|
||||
]
|
||||
},
|
||||
"rulesDirectory": [
|
||||
|
Binary file not shown.
@ -1,35 +0,0 @@
|
||||
|
||||
// Ionicons Icon Font CSS
|
||||
// --------------------------
|
||||
// Ionicons CSS for Ionic's <ion-icon> element
|
||||
// ionicons-icons.scss has the icons and their unicode characters
|
||||
|
||||
$ionicons-font-path: $font-path !default;
|
||||
|
||||
@import "ionicons-icons";
|
||||
@import "ionicons-variables";
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: "Ionicons";
|
||||
src: url("#{$ionicons-font-path}/ionicons.woff2?v=#{$ionicons-version}") format("woff2"),
|
||||
url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"),
|
||||
url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
ion-icon {
|
||||
display: inline-block;
|
||||
|
||||
font-family: "Ionicons";
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-style: normal;
|
||||
font-variant: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
text-rendering: auto;
|
||||
text-transform: none;
|
||||
speak: none;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 391 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,34 +0,0 @@
|
||||
// Noto Sans Font
|
||||
// Google
|
||||
// Apache License, version 2.0
|
||||
// http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
$noto-sans-font-path: $font-path !default;
|
||||
|
||||
@font-face {
|
||||
font-family: "Noto Sans";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local("Noto Sans"), local("Noto-Sans-Regular"), url("#{$noto-sans-font-path}/noto-sans-regular.ttf") format("truetype");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Noto Sans";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local("Noto Sans"), local("Noto-Sans-Regular"), url("#{$noto-sans-font-path}/noto-sans-regular.ttf") format("truetype");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Noto Sans";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local("Noto Sans Bold"), local("Noto-Sans-Bold"), url("#{$noto-sans-font-path}/noto-sans-bold.ttf") format("truetype");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Noto Sans";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("Noto Sans Bold"), local("Noto-Sans-Bold"), url("#{$noto-sans-font-path}/noto-sans-bold.ttf") format("truetype");
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,34 +0,0 @@
|
||||
// Roboto Font
|
||||
// Google
|
||||
// Apache License, version 2.0
|
||||
// http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
$roboto-font-path: $font-path !default;
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local("Roboto Light"), local("Roboto-Light"), url("#{$roboto-font-path}/roboto-light.ttf") format("truetype"), url("#{$roboto-font-path}/roboto-light.woff") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local("Roboto"), local("Roboto-Regular"), url("#{$roboto-font-path}/roboto-regular.ttf") format("truetype"), url("#{$roboto-font-path}/roboto-regular.woff") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local("Roboto Medium"), local("Roboto-Medium"), url("#{$roboto-font-path}/roboto-medium.ttf") format("truetype"), url("#{$roboto-font-path}/roboto-medium.woff") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local("Roboto Bold"), local("Roboto-Bold"), url("#{$roboto-font-path}/roboto-bold.ttf") format("truetype"), url("#{$roboto-font-path}/roboto-bold.woff") format("woff");
|
||||
}
|
@ -1 +0,0 @@
|
||||
{"ch":1,"vss":[{"v":1,"w":[{"t":"In the beginning God created the heavens and the earth."}]},{"v":2,"w":[{"t":"And the earth was waste and void; and darkness was upon the face of the deep: and the Spirit of God moved upon the face of the waters"}]},{"v":3,"w":[{"t":"And God said, Let there be light: and there was light."}]},{"v":4,"w":[{"t":"And God saw the light, that it was good: and God divided the light from the darkness."}]},{"v":5,"w":[{"t":"And God called the light Day, and the darkness he called Night. And there was evening and there was morning, one day."}]},{"v":6,"w":[{"t":"And God said, Let there be a firmament in the midst of the waters, and let it divide the waters from the waters."}]},{"v":7,"w":[{"t":"And God made the firmament, and divided the waters which were under the firmament from the waters which were above the firmament: and it was so."}]},{"v":8,"w":[{"t":"And God called the firmament Heaven. And there was evening and there was morning, a second day."}]},{"v":9,"w":[{"t":"And God said, Let the waters under the heavens be gathered together unto one place, and let the dry land appear: and it was so."}]},{"v":10,"w":[{"t":"And God called the dry land Earth; and the gathering together of the waters called he Seas: and God saw that it was good."}]},{"v":11,"w":[{"t":"And God said, Let the earth put forth grass, herbs yielding seed, [and] fruit-trees bearing fruit after their kind, wherein is the seed thereof, upon the earth: and it was so."}]},{"v":12,"w":[{"t":"And the earth brought forth grass, herbs yielding seed after their kind, and trees bearing fruit, wherein is the seed thereof, after their kind: and God saw that it was good."}]},{"v":13,"w":[{"t":"And there was evening and there was morning, a third day."}]},{"v":14,"w":[{"t":"And God said, Let there be lights in the firmament of heaven to divide the day from the night; and let them be for signs, and for seasons, and for days and years:"}]},{"v":15,"w":[{"t":"and let them be for lights in the firmament of heaven to give light upon the earth: and it was so."}]},{"v":16,"w":[{"t":"And God made the two great lights; the greater light to rule the day, and the lesser light to rule the night: [he made] the stars also."}]},{"v":17,"w":[{"t":"And God set them in the firmament of heaven to give light upon the earth,"}]},{"v":18,"w":[{"t":"and to rule over the day and over the night, and to divide the light from the darkness: and God saw that it was good."}]},{"v":19,"w":[{"t":"And there was evening and there was morning, a fourth day."}]},{"v":20,"w":[{"t":"And God said, Let the waters swarm with swarms of living creatures, and let birds fly above the earth in the open firmament of heaven."}]},{"v":21,"w":[{"t":"And God created the great sea-monsters, and every living creature that moveth, wherewith the waters swarmed, after their kind, and every winged bird after its kind: and God saw that it was good."}]},{"v":22,"w":[{"t":"And God blessed them, saying, Be fruitful, and multiply, and fill the waters in the seas, and let birds multiply on the earth."}]},{"v":23,"w":[{"t":"And there was evening and there was morning, a fifth day."}]},{"v":24,"w":[{"t":"And God said, Let the earth bring forth living creatures after their kind, cattle, and creeping things, and beasts of the earth after their kind: and it was so."}]},{"v":25,"w":[{"t":"And God made the beasts of the earth after their kind, and the cattle after their kind, and everything that creepeth upon the ground after its kind: and God saw that it was good."}]},{"v":26,"w":[{"t":"And God said, Let us make man in our image, after our likeness: and let them have dominion over the fish of the sea, and over the birds of the heavens, and over the cattle, and over all the earth, and over every creeping thing that creepeth upon the earth."}]},{"v":27,"w":[{"t":"And God created man in his own image, in the image of God created he him; male and female created he them."}]},{"v":28,"w":[{"t":"And God blessed them: and God said unto them, Be fruitful, and multiply, and replenish the earth, and subdue it; and have dominion over the fish of the sea, and over the birds of the heavens, and over every living thing that moveth upon the earth."}]},{"v":29,"w":[{"t":"And God said, Behold, I have given you every herb yielding seed, which is upon the face of all the earth, and every tree, in which is the fruit of a tree yielding seed; to you it shall be for food:"}]},{"v":30,"w":[{"t":"and to every beast of the earth, and to every bird of the heavens, and to everything that creepeth upon the earth, wherein there is life, [I have given] every green herb for food: and it was so."}]},{"v":31,"w":[{"t":"And God saw everything that he had made, and, behold, it was very good. And there was evening and there was morning, the sixth day."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":10,"vss":[{"v":1,"w":[{"t":"Now these are the generations of the sons of Noah, [namely], of Shem, Ham, and Japheth: and unto them were sons born after the flood."}]},{"v":2,"w":[{"t":"The sons of Japheth: Gomer, and Magog, and Madai, and Javan, and Tubal, and Meshech, and Tiras."}]},{"v":3,"w":[{"t":"And the sons of Gomer: Ashkenaz, and Riphath, and Togarmah."}]},{"v":4,"w":[{"t":"And the sons of Javan: Elishah, and Tarshish, Kittim, and Dodanim."}]},{"v":5,"w":[{"t":"Of these were the isles of the nations divided in their lands, every one after his tongue, after their families, in their nations."}]},{"v":6,"w":[{"t":"And the sons of Ham: Cush, and Mizraim, and Put, and Canaan."}]},{"v":7,"w":[{"t":"And the sons of Cush: Seba, and Havilah, and Sabtah, and Raamah, and Sabteca; and the sons of Raamah: Sheba, and Dedan."}]},{"v":8,"w":[{"t":"And Cush begat Nimrod: he began to be a mighty one in the earth."}]},{"v":9,"w":[{"t":"He was a mighty hunter before Jehovah: wherefore it is said, Like Nimrod a mighty hunter before Jehovah."}]},{"v":10,"w":[{"t":"And the beginning of his kingdom was Babel, and Erech, and Accad, and Calneh, in the land of Shinar."}]},{"v":11,"w":[{"t":"Out of that land he went forth into Assyria, and builded Nineveh, and Rehoboth-ir, and Calah,"}]},{"v":12,"w":[{"t":"and Resen between Nineveh and Calah (the same is the great city)."}]},{"v":13,"w":[{"t":"And Mizraim begat Ludim, and Anamim, and Lehabim, and Naphtuhim,"}]},{"v":14,"w":[{"t":"and Pathrusim, and Casluhim (whence went forth the Philistines), and Caphtorim."}]},{"v":15,"w":[{"t":"And Canaan begat Sidon his first-born, and Heth,"}]},{"v":16,"w":[{"t":"and the Jebusite, and the Amorite, and the Girgashite,"}]},{"v":17,"w":[{"t":"and the Hivite, and the Arkite, and the Sinite,"}]},{"v":18,"w":[{"t":"and the Arvadite, and the Zemarite, and the Hamathite: and afterward were the families of the Canaanite spread abroad."}]},{"v":19,"w":[{"t":"And the border of the Canaanite was from Sidon, as thou goest toward Gerar, unto Gaza; as thou goest toward Sodom and Gomorrah and Admah and Zeboiim, unto Lasha."}]},{"v":20,"w":[{"t":"These are the sons of Ham, after their families, after their tongues, in their lands, in their nations."}]},{"v":21,"w":[{"t":"And unto Shem, the father of all the children of Eber, the elder brother of Japheth, to him also were children born."}]},{"v":22,"w":[{"t":"The sons of Shem: Elam, and Asshur, and Arpachshad, and Lud, and Aram."}]},{"v":23,"w":[{"t":"And the sons of Aram: Uz, and Hul, and Gether, and Mash."}]},{"v":24,"w":[{"t":"And Arpachshad begat Shelah; and Shelah begat Eber."}]},{"v":25,"w":[{"t":"And unto Eber were born two sons: The name of the one was Peleg. For in his days was the earth divided. And his brother`s name was Joktan."}]},{"v":26,"w":[{"t":"And Joktan begat Almodad, and Sheleph, and Hazarmaveth, and Jerah,"}]},{"v":27,"w":[{"t":"and Hadoram, and Uzal, and Diklah,"}]},{"v":28,"w":[{"t":"and Obal, and Abimael, and Sheba,"}]},{"v":29,"w":[{"t":"and Ophir, and Havilah, and Jobab: all these were the sons of Joktan."}]},{"v":30,"w":[{"t":"And their dwelling was from Mesha, as thou goest toward Sephar, the mountain of the east."}]},{"v":31,"w":[{"t":"These are the sons of Shem, after their families, after their tongues, in their lands, after their nations."}]},{"v":32,"w":[{"t":"These are the families of the sons of Noah, after their generations, in their nations: and of these were the nations divided in the earth after the flood."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":11,"vss":[{"v":1,"w":[{"t":"And the whole earth was of one language and of one speech."}]},{"v":2,"w":[{"t":"And it came to pass, as they journeyed east, that they found a plain in the land of Shinar; and they dwelt there."}]},{"v":3,"w":[{"t":"And they said one to another, Come, let us make brick, and burn them thoroughly. And they had brick for stone, and slime had they for mortar."}]},{"v":4,"w":[{"t":"And they said, Come, let us build us a city, and a tower, whose top [may reach] unto heaven, and let us make us a name; lest we be scattered abroad upon the face of the whole earth."}]},{"v":5,"w":[{"t":"And Jehovah came down to see the city and the tower, which the children of men builded."}]},{"v":6,"w":[{"t":"And Jehovah said, Behold, they are one people, and they have all one language; and this is what they begin to do: and now nothing will be withholden from them, which they purpose to do."}]},{"v":7,"w":[{"t":"Come, let us go down, and there confound their language, that they may not understand one another`s speech."}]},{"v":8,"w":[{"t":"So Jehovah scattered them abroad from thence upon the face of all the earth: and they left off building the city."}]},{"v":9,"w":[{"t":"Therefore was the name of it called Babel; because Jehovah did there confound the language of all the earth: and from thence did Jehovah scatter them abroad upon the face of all the earth."}]},{"v":10,"w":[{"t":"These are the generations of Shem. Shem was a hundred years old, and begat Arpachshad two years after the flood."}]},{"v":11,"w":[{"t":"and Shem lived after he begat Arpachshad five hundred years, and begat sons and daughters."}]},{"v":12,"w":[{"t":"And Arpachshad lived five and thirty years, and begat Shelah."}]},{"v":13,"w":[{"t":"and Arpachshad lived after he begat Shelah four hundred and three years, and begat sons and daughters."}]},{"v":14,"w":[{"t":"And Shelah lived thirty years, and begat Eber:"}]},{"v":15,"w":[{"t":"and Shelah lived after he begat Eber four hundred and three years, and begat sons and daughters."}]},{"v":16,"w":[{"t":"And Eber lived four and thirty years, and begat Peleg:"}]},{"v":17,"w":[{"t":"and Eber lived after he begat Peleg four hundred and thirty years, and begat sons and daughters."}]},{"v":18,"w":[{"t":"And Peleg lived thirty years, and begat Reu:"}]},{"v":19,"w":[{"t":"and Peleg lived after he begat Reu two hundred and nine years, and begat sons and daughters."}]},{"v":20,"w":[{"t":"And Reu lived two and thirty years, and begat Serug:"}]},{"v":21,"w":[{"t":"and Reu lived after he begat Serug two hundred and seven years, and begat sons and daughters."}]},{"v":22,"w":[{"t":"And Serug lived thirty years, and begat Nahor:"}]},{"v":23,"w":[{"t":"and Serug lived after he begat Nahor two hundred years, and begat sons and daughters."}]},{"v":24,"w":[{"t":"And Nahor lived nine and twenty years, and begat Terah:"}]},{"v":25,"w":[{"t":"and Nahor lived after he begat Terah a hundred and nineteen years, and begat sons and daughters."}]},{"v":26,"w":[{"t":"And Terah lived seventy years, and begat Abram, Nahor, and Haran."}]},{"v":27,"w":[{"t":"Now these are the generations of Terah. Terah begat Abram, Nahor, and Haran. And Haran begat Lot."}]},{"v":28,"w":[{"t":"And Haran died before his father Terah in the land of his nativity, in Ur of the Chaldees."}]},{"v":29,"w":[{"t":"And Abram and Nahor took them wives: The name of Abram`s wife was Sarai; and the name of Nahor`s wife, Milcah, the daughter of Haran, the father of Milcah, and the father of Iscah."}]},{"v":30,"w":[{"t":"And Sarai was barren; She had no child."}]},{"v":31,"w":[{"t":"And Terah took Abram his son, and Lot the son of Haran, his son`s son, and Sarai his daughter-in-law, his son Abram`s wife; and they went forth with them from Ur of the Chaldees, to go into the land of Canaan; and they came unto Haran, and dwelt there."}]},{"v":32,"w":[{"t":"And the days of Terah were two hundred and five years: and Terah died in Haran."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":12,"vss":[{"v":1,"w":[{"t":"Now Jehovah said unto Abram, Get thee out of thy country, and from thy kindred, and from thy father`s house, unto the land that I will show thee:"}]},{"v":2,"w":[{"t":"and I will make of thee a great nation, and I will bless thee, and make they name great; and be thou a blessing;"}]},{"v":3,"w":[{"t":"and I will bless them that bless thee, and him that curseth thee will I curse: and in thee shall all the families of the earth be blessed."}]},{"v":4,"w":[{"t":"So Abram went, as Jehovah had spoken unto him; and Lot went with him: and Abram was seventy and five years old when he departed out of Haran."}]},{"v":5,"w":[{"t":"And Abram took Sarai his wife, and Lot his brother`s son, and all their substance that they had gathered, and the souls that they had gotten in Haran; and they went forth to go into the land of Canaan; and into the land of Canaan they came."}]},{"v":6,"w":[{"t":"And Abram passed through the land unto the place of Shechem, unto the oak of Moreh. And the Canaanite was then in the land."}]},{"v":7,"w":[{"t":"And Jehovah appeared unto Abram, and said, Unto thy seed will I give this land: and there builded he an altar unto Jehovah, who appeared unto him."}]},{"v":8,"w":[{"t":"And he removed from thence unto the mountain on the east of Beth-el, and pitched his tent, having Beth-el on the west, and Ai on the east: and there he builded an altar unto Jehovah, and called upon the name of Jehovah."}]},{"v":9,"w":[{"t":"And Abram journeyed, going on still toward the South."}]},{"v":10,"w":[{"t":"And there was a famine in the land: and Abram went down into Egypt to sojourn there; for the famine was sore in the land."}]},{"v":11,"w":[{"t":"And it came to pass, when he was come near to enter into Egypt, that he said unto Sarai his wife, Behold now, I know that thou art a fair woman to look upon:"}]},{"v":12,"w":[{"t":"and it will come to pass, when the Egyptians shall see thee, that they will say, This is his wife: and they will kill me, but they will save thee alive."}]},{"v":13,"w":[{"t":"Say, I pray thee, thou art my sister; that it may be well with me for thy sake, and that my soul may live because of thee."}]},{"v":14,"w":[{"t":"And it came to pass, that, when Abram was come into Egypt, the Egyptians beheld the woman that she was very fair."}]},{"v":15,"w":[{"t":"And the princes of Pharaoh saw her, and praised her to Pharaoh: and the woman was taken into Pharaoh`s house."}]},{"v":16,"w":[{"t":"And he dealt well with Abram for her sake: and he had sheep, and oxen, and he-asses, and men-servants, and maid-servants, and she-asses, and camels."}]},{"v":17,"w":[{"t":"And Jehovah plagued Pharaoh and his house with great plagues because of Sarai, Abram`s wife."}]},{"v":18,"w":[{"t":"And Pharaoh called Abram, and said, What is this that thou hast done unto me? why didst thou not tell me that she was thy wife?"}]},{"v":19,"w":[{"t":"why saidst thou, She is my sister, so that I took her to be my wife? now therefore behold thy wife, take her, and go thy way."}]},{"v":20,"w":[{"t":"And Pharaoh gave men charge concerning him: and they brought him on the way, and his wife, and all that he had."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":13,"vss":[{"v":1,"w":[{"t":"And Abram went up out of Egypt, he, and his wife, and all that he had, and Lot with him, into the South."}]},{"v":2,"w":[{"t":"And Abram was very rich in cattle, in silver, and in gold."}]},{"v":3,"w":[{"t":"And he went on his journeys from the South even to Beth-el, unto the place where his tent had been at the beginning, between Beth-el and Ai,"}]},{"v":4,"w":[{"t":"unto the place of the altar, which he had made there at the first: and there Abram called on the name of Jehovah."}]},{"v":5,"w":[{"t":"And Lot also, who went with Abram, had flocks, and herds, and tents."}]},{"v":6,"w":[{"t":"And the land was not able to bear them, that they might dwell together: for their substance was great, so that they could not dwell together."}]},{"v":7,"w":[{"t":"And there was a strife between the herdsmen of Abram`s cattle and the herdsmen of Lot`s cattle: and the Canaanite and the Perizzite dwelt then in the land."}]},{"v":8,"w":[{"t":"And Abram said unto Lot, Let there be no strife, I pray thee, between me and thee, and between my herdsmen and thy herdsmen; for we are brethren."}]},{"v":9,"w":[{"t":"Is not the whole land before thee? separate thyself, I pray thee, from me. If [thou wilt take] the left hand, then I will go to the right. Or if [thou take] the right hand, then I will go to the left."}]},{"v":10,"w":[{"t":"And Lot lifted up his eyes, and beheld all the Plain of the Jordan, that it was well watered every where, before Jehovah destroyed Sodom and Gomorrah, like the garden of Jehovah, like the land of Egypt, as thou goest unto Zoar."}]},{"v":11,"w":[{"t":"So Lot chose him all the Plain of the Jordan; and Lot journeyed east: and they separated themselves the one from the other."}]},{"v":12,"w":[{"t":"Abram dwelt in the land of Canaan, and Lot dwelt in the cities of the Plain, and moved his tent as far as Sodom."}]},{"v":13,"w":[{"t":"Now the men of Sodom were wicked and sinners against Jehovah exceedingly."}]},{"v":14,"w":[{"t":"And Jehovah said unto Abram, after that Lot was separated from him, Lift up now thine eyes, and look from the place where thou art, northward and southward and eastward and westward:"}]},{"v":15,"w":[{"t":"for all the land which thou seest, to thee will I give it, and to thy seed for ever."}]},{"v":16,"w":[{"t":"And I will make thy seed as the dust of the earth: So that if a man can number the dust of the earth, then may thy seed also be numbered."}]},{"v":17,"w":[{"t":"Arise, walk through the land in the length of it and in the breadth of it; for unto thee will I give it."}]},{"v":18,"w":[{"t":"And Abram moved his tent, and came and dwelt by the oaks of Mamre, which are in Hebron, and built there an altar unto Jehovah."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":14,"vss":[{"v":1,"w":[{"t":"And it came to pass in the days of Amraphel king of Shinar, Arioch king of Ellasar, Chedorlaomer king of Elam, and Tidal king of Goiim,"}]},{"v":2,"w":[{"t":"that they made war with Bera king of Sodom, and with Birsha king of Gomorrah, Shinab king of Admah, and Shemeber king of Zeboiim, and the king of Bela (the same is Zoar)."}]},{"v":3,"w":[{"t":"All these joined together in the vale of Siddim (the same is the Salt Sea)."}]},{"v":4,"w":[{"t":"Twelve years they served Chedorlaomer, and in the thirteenth year they rebelled."}]},{"v":5,"w":[{"t":"And in the fourteenth year came Chedorlaomer, and the kings that were with him, and smote the Rephaim in Ashteroth-karnaim, and the Zuzim in Ham, and the Emim in Shaveh-kiriathaim,"}]},{"v":6,"w":[{"t":"and the Horites in their mount Seir, unto Elparan, which is by the wilderness."}]},{"v":7,"w":[{"t":"And they returned, and came to En-mishpat (the same is Kadesh), and smote all the country of the Amalekites, and also the Amorites, that dwelt in Hazazon-tamar."}]},{"v":8,"w":[{"t":"And there went out the king of Sodom, and the king of Gomorrah, and the king of Admah, and the king of Zeboiim, and the king of Bela (the same is Zoar); and they set the battle in array against them in the vale of Siddim;"}]},{"v":9,"w":[{"t":"against Chedorlaomer king of Elam, and Tidal king of Goiim, and Amraphel king of Shinar, and Arioch king of Ellasar; four kings against the five."}]},{"v":10,"w":[{"t":"Now the vale of Siddim was full of slime pits; and the kings of Sodom and Gomorrah fled, and they fell there, and they that remained fled to the mountain."}]},{"v":11,"w":[{"t":"And they took all the goods of Sodom and Gomorrah, and all their victuals, and went their way."}]},{"v":12,"w":[{"t":"And they took Lot, Abram`s brother`s son, who dwelt in Sodom, and his goods, and departed."}]},{"v":13,"w":[{"t":"And there came one that had escaped, and told Abram the Hebrew: now he dwelt by the oaks of Mamre, the Amorite, brother of Eshcol, and brother of Aner; and these were confederate with Abram."}]},{"v":14,"w":[{"t":"And when Abram heard that his brother was taken captive, he led forth his trained men, born in his house, three hundred and eighteen, and pursued as far as Dan."}]},{"v":15,"w":[{"t":"And he divided himself against them by night, he and his servants, and smote them, and pursued them unto Hobah, which is on the left hand of Damascus."}]},{"v":16,"w":[{"t":"And he brought back all the goods, and also brought back his brother Lot, and his goods, and the women also, and the people."}]},{"v":17,"w":[{"t":"And the king of Sodom went out to meet him, after his return from the slaughter of Chedorlaomer and the kings that were with him, at the vale of Shaveh (the same is the King`s Vale)."}]},{"v":18,"w":[{"t":"And Melchizedek king of Salem brought forth bread and wine: and he was priest of God Most High."}]},{"v":19,"w":[{"t":"And he blessed him, and said, Blessed be Abram of God Most High, possessor of heaven and earth:"}]},{"v":20,"w":[{"t":"and blessed be God Most High, who hath delivered thine enemies into thy hand. And he gave him a tenth of all."}]},{"v":21,"w":[{"t":"And the king of Sodom said unto Abram, Give me the persons, and take the goods to thyself."}]},{"v":22,"w":[{"t":"And Abram said to the king of Sodom, I have lifted up my hand unto Jehovah, God Most High, possessor of heaven and earth,"}]},{"v":23,"w":[{"t":"that I will not take a thread nor a shoe-latchet nor aught that is thine, lest thou shouldest say, I have made Abram rich:"}]},{"v":24,"w":[{"t":"save only that which the young men have eaten, and the portion of the men that went with me, Aner, Eshcol, and Mamre. Let them take their portion."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":15,"vss":[{"v":1,"w":[{"t":"After these things the word of Jehovah came unto Abram in a vision, saying, Fear not, Abram: I am thy shield, [and] thy exceeding great reward."}]},{"v":2,"w":[{"t":"And Abram said, O Lord Jehovah, what wilt thou give me, seeing I go childless, and he that shall be possessor of my house is Eliezer of Damascus?"}]},{"v":3,"w":[{"t":"And Abram said, Behold, to me thou hast given no seed: and, lo, one born in my house is mine heir."}]},{"v":4,"w":[{"t":"And, behold, the word of Jehovah came unto him, saying, This man shall not be thine heir; But he that shall come forth out of thine own bowels shall be thine heir."}]},{"v":5,"w":[{"t":"And he brought him forth abroad, and said, Look now toward heaven, and number the stars, if thou be able to number them: and he said unto him, So shall thy seed be."}]},{"v":6,"w":[{"t":"And he believed in Jehovah; and he reckoned it to him for righteousness."}]},{"v":7,"w":[{"t":"And he said unto him, I am Jehovah that brought thee out of Ur of the Chaldees, to give thee this land to inherit it."}]},{"v":8,"w":[{"t":"And he said, O Lord Jehovah, whereby shall I know that I shall inherit it?"}]},{"v":9,"w":[{"t":"And he said unto him, Take me a heifer three years old, and a she-goat three years old, and a ram three years old, and a turtle-dove, and a young pigeon."}]},{"v":10,"w":[{"t":"And he took him all these, and divided them in the midst, and laid each half over against the other: but the birds divided he not."}]},{"v":11,"w":[{"t":"And the birds of prey came down upon the carcasses, and Abram drove them away."}]},{"v":12,"w":[{"t":"And when the sun was going down, a deep sleep fell upon Abram; and, lo, a horror of great darkness fell upon him."}]},{"v":13,"w":[{"t":"And he said unto Abram, Know of a surety that thy seed shall be sojourners in a land that is not theirs, and shall serve them; and they shall afflict them four hundred years;"}]},{"v":14,"w":[{"t":"and also that nation, whom they shall serve, will I judge: and afterward shall they come out with great substance."}]},{"v":15,"w":[{"t":"But thou shalt go to thy fathers in peace; thou shalt be buried in a good old age."}]},{"v":16,"w":[{"t":"And in the fourth generation they shall come hither again; for the iniquity of the Amorite is not yet full."}]},{"v":17,"w":[{"t":"And it came to pass, that, when the sun went down, and it was dark, behold, a smoking furnace, and a flaming torch that passed between these pieces."}]},{"v":18,"w":[{"t":"In that day Jehovah made a covenant with Abram, saying, Unto thy seed have I given this land, from the river of Egypt unto the great river, the river Euphrates:"}]},{"v":19,"w":[{"t":"the Kenite, and the Kenizzite, and the Kadmonite,"}]},{"v":20,"w":[{"t":"and the Hittite, and the Perizzite, and the Rephaim,"}]},{"v":21,"w":[{"t":"and the Amorite, and the Canaanite, and the Girgashite, and the Jebusite."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":16,"vss":[{"v":1,"w":[{"t":"Now Sarai, Abram`s wife, bare him no children: and she had a handmaid, an Egyptian, whose name was Hagar."}]},{"v":2,"w":[{"t":"And Sarai said unto Abram, Behold now, Jehovah hath restrained me from bearing; go in, I pray thee, unto my handmaid; it may be that I shall obtain children by her. And Abram hearkened to the voice of Sarai."}]},{"v":3,"w":[{"t":"And Sarai, Abram`s wife, took Hagar the Egyptian, her handmaid, after Abram had dwelt ten years in the land of Canaan, and gave her to Abram her husband to be his wife."}]},{"v":4,"w":[{"t":"And he went in unto Hagar, and she conceived: and when she saw that she had conceived, her mistress was despised in her eyes."}]},{"v":5,"w":[{"t":"And Sarai said unto Abram, My wrong be upon thee: I gave my handmaid into they bosom; and when she saw that she had conceived, I was despised in her eyes: Jehovah judge between me and thee."}]},{"v":6,"w":[{"t":"But Abram said unto Sarai, Behold, thy maid is in thy hand; do to her that which is good in thine eyes. And Sarai dealt hardly with her, and she fled from her face."}]},{"v":7,"w":[{"t":"And the angel of Jehovah found her by a fountain of water in the wilderness, by the fountain in the way to Shur."}]},{"v":8,"w":[{"t":"And he said, Hagar, Sarai`s handmaid, whence camest thou? and whither goest thou? And she said, I am fleeing from the face of my mistress Sarai."}]},{"v":9,"w":[{"t":"And the angel of Jehovah said unto her, Return to thy mistress, and submit thyself under her hands."}]},{"v":10,"w":[{"t":"And the angel of Jehovah said unto her, I will greatly multiply thy seed, that it shall not be numbered for multitude."}]},{"v":11,"w":[{"t":"And the angel of Jehovah said unto her, Behold, thou art with child, and shalt bear a son; and thou shalt call his name Ishmael, because Jehovah hath heard thy affliction."}]},{"v":12,"w":[{"t":"And he shall be [as] a wild ass among men; his hand [shall be] against every man, and every man`s hand against him; and he shall dwell over against all his brethren."}]},{"v":13,"w":[{"t":"And she called the name of Jehovah that spake unto her, Thou art a God that seeth: for she said, Have I even here looked after him that seeth me?"}]},{"v":14,"w":[{"t":"Wherefore the well was called Beer-lahai-roi; behold, it is between Kadesh and Bered."}]},{"v":15,"w":[{"t":"And Hagar bare Abram a son: and Abram called the name of his son, whom Hagar bare, Ishmael."}]},{"v":16,"w":[{"t":"And Abram was fourscore and six years old, when Hagar bare Ishmael to Abram."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":17,"vss":[{"v":1,"w":[{"t":"And when Abram was ninety years old and nine, Jehovah appeared to Abram, and said unto him, I am God Almighty; walk before me, and be thou perfect."}]},{"v":2,"w":[{"t":"And I will make my covenant between me and thee, and will multiply thee exceedingly."}]},{"v":3,"w":[{"t":"And Abram fell on his face: and God talked with him, saying,"}]},{"v":4,"w":[{"t":"As for me, behold, my covenant is with thee, and thou shalt be the father of a multitude of nations."}]},{"v":5,"w":[{"t":"Neither shall thy name any more be called Abram, but thy name shall be Abraham; for the father of a multitude of nations have I made thee."}]},{"v":6,"w":[{"t":"And I will make thee exceeding fruitful, and I will make nations of thee, and kings shall come out of thee."}]},{"v":7,"w":[{"t":"And I will establish my covenant between me and thee and thy seed after thee throughout their generations for an everlasting covenant, to be a God unto thee and to thy seed after thee."}]},{"v":8,"w":[{"t":"And I will give unto thee, and to thy seed after thee, the land of thy sojournings, all the land of Canaan, for an everlasting possession; and I will be their God."}]},{"v":9,"w":[{"t":"And God said unto Abraham, And as for thee, thou shalt keep my covenant, thou, and thy seed after thee throughout their generations."}]},{"v":10,"w":[{"t":"This is my covenant, which ye shall keep, between me and you and thy seed after thee: every male among you shall be circumcised."}]},{"v":11,"w":[{"t":"And ye shall be circumcised in the flesh of your foreskin; and it shall be a token of a covenant betwixt me and you."}]},{"v":12,"w":[{"t":"And he that is eight days old shall be circumcised among you, every male throughout your generations, he that is born in the house, or bought with money of any foreigner that is not of thy seed."}]},{"v":13,"w":[{"t":"He that is born in thy house, and he that is bought with thy money, must needs be circumcised: and my covenant shall be in your flesh for an everlasting covenant."}]},{"v":14,"w":[{"t":"And the uncircumcised male who is not circumcised in the flesh of his foreskin, that soul shall be cut off from his people; he hath broken my covenant."}]},{"v":15,"w":[{"t":"And God said unto Abraham, As for Sarai thy wife, thou shalt not call her name Sarai, but Sarah shall her name be."}]},{"v":16,"w":[{"t":"And I will bless her, and moreover I will give thee a son of her: yea, I will bless her, and she shall be [a mother of] nations; kings of peoples shall be of her."}]},{"v":17,"w":[{"t":"Then Abraham fell upon his face, and laughed, and said in his heart, Shall a child be born unto him that is a hundred years old? and shall Sarah, that is ninety years old, bear?"}]},{"v":18,"w":[{"t":"And Abraham said unto God, Oh that Ishmael might live before thee!"}]},{"v":19,"w":[{"t":"And God said, Nay, but Sarah thy wife shall bear thee a son; and thou shalt call his name Isaac: and I will establish my covenant with him for an everlasting covenant for his seed after him."}]},{"v":20,"w":[{"t":"And as for Ishmael, I have heard thee: behold, I have blessed him, and will make him fruitful, and will multiply him exceedingly; twelve princes shall he beget, and I will make him a great nation."}]},{"v":21,"w":[{"t":"But my covenant will I establish with Isaac, whom Sarah shall bear unto thee at this set time in the next year."}]},{"v":22,"w":[{"t":"And he left off talking with him, and God went up from Abraham."}]},{"v":23,"w":[{"t":"And Abraham took Ishmael his son, and all that were born in his house, and all that were bought with his money, every male among the men of Abraham`s house, and circumcised the flesh of their foreskin in the selfsame day, as God had said unto him."}]},{"v":24,"w":[{"t":"And Abraham was ninety years old and nine, when he was circumcised in the flesh of his foreskin."}]},{"v":25,"w":[{"t":"And Ishmael his son was thirteen years old, when he was circumcised in the flesh of his foreskin."}]},{"v":26,"w":[{"t":"In the selfsame day was Abraham circumcised, and Ishmael his son."}]},{"v":27,"w":[{"t":"And all the men of his house, those born in the house, and those bought with money of a foreigner, were circumcised with him."}]}]}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"ch":2,"vss":[{"v":1,"w":[{"t":"And the heavens and the earth were finished, and all the host of them."}]},{"v":2,"w":[{"t":"And on the seventh day God finished his work which he had made; and he rested on the seventh day from all his work which he had made."}]},{"v":3,"w":[{"t":"And God blessed the seventh day, and hallowed it; because that in it he rested from all his work which God had created and made."}]},{"v":4,"w":[{"t":"These are the generations of the heavens and of the earth when they were created, in the day that Jehovah God made earth and heaven."}]},{"v":5,"w":[{"t":"And no plant of the field was yet in the earth, and no herb of the field had yet sprung up; for Jehovah God had not caused it to rain upon the earth: and there was not a man to till the ground;"}]},{"v":6,"w":[{"t":"but there went up a mist from the earth, and watered the whole face of the ground."}]},{"v":7,"w":[{"t":"And Jehovah God formed man of the dust of the ground, and breathed into his nostrils the breath of life; and man became a living soul."}]},{"v":8,"w":[{"t":"And Jehovah God planted a garden eastward, in Eden; and there he put the man whom he had formed."}]},{"v":9,"w":[{"t":"And out of the ground made Jehovah God to grow every tree that is pleasant to the sight, and good for food; the tree of life also in the midst of the garden, and the tree of the knowledge of good and evil."}]},{"v":10,"w":[{"t":"And a river went out of Eden to water the garden; and from thence it was parted, and became four heads."}]},{"v":11,"w":[{"t":"The name of the first is Pishon: that is it which compasseth the whole land of Havilah, where there is gold;"}]},{"v":12,"w":[{"t":"and the gold of that land is good: there is bdellium and the onyx stone."}]},{"v":13,"w":[{"t":"And the name of the second river is Gihon: the same is it that compasseth the whole land of Cush."}]},{"v":14,"w":[{"t":"And the name of the third river is Hiddekel: that is it which goeth in front of Assyria. And the fourth river is the Euphrates."}]},{"v":15,"w":[{"t":"And Jehovah God took the man, and put him into the garden of Eden to dress it and to keep it."}]},{"v":16,"w":[{"t":"And Jehovah God commanded the man, saying, Of every tree of the garden thou mayest freely eat:"}]},{"v":17,"w":[{"t":"but of the tree of the knowledge of good and evil, thou shalt not eat of it: for in the day that thou eatest thereof thou shalt surely die."}]},{"v":18,"w":[{"t":"And Jehovah God said, It is not good that the man should be alone; I will make him a help meet for him."}]},{"v":19,"w":[{"t":"And out of the ground Jehovah God formed every beast of the field, and every bird of the heavens; and brought them unto the man to see what he would call them: and whatsoever the man called every living creature, that was the name thereof."}]},{"v":20,"w":[{"t":"And the man gave names to all cattle, and to the birds of the heavens, and to every beast of the field; but for man there was not found a help meet for him."}]},{"v":21,"w":[{"t":"And Jehovah God caused a deep sleep to fall upon the man, and he slept; and he took one of his ribs, and closed up the flesh instead thereof:"}]},{"v":22,"w":[{"t":"and the rib, which Jehovah God had taken from the man, made he a woman, and brought her unto the man."}]},{"v":23,"w":[{"t":"And the man said, This is now bone of my bones, and flesh of my flesh: she shall be called Woman, because she was taken out of Man."}]},{"v":24,"w":[{"t":"Therefore shall a man leave his father and his mother, and shall cleave unto his wife: and they shall be one flesh."}]},{"v":25,"w":[{"t":"And they were both naked, the man and his wife, and were not ashamed."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":20,"vss":[{"v":1,"w":[{"t":"And Abraham journeyed from thence toward the land of the South, and dwelt between Kadesh and Shur. And he sojourned in Gerar."}]},{"v":2,"w":[{"t":"And Abraham said of Sarah his wife, She is my sister. And Abimelech king of Gerar sent, and took Sarah."}]},{"v":3,"w":[{"t":"But God came to Abimelech in a dream of the night, and said to him, Behold, thou art but a dead man, because of the woman whom thou hast taken. For she is a man`s wife."}]},{"v":4,"w":[{"t":"Now Abimelech had not come near her. And he said, Lord, wilt thou slay even a righteous nation?"}]},{"v":5,"w":[{"t":"Said he not himself unto me, She is my sister? And she, even she herself said, He is my brother. In the integrity of my heart and the innocency of my hands have I done this."}]},{"v":6,"w":[{"t":"And God said unto him in the dream, Yea, I know that in the integrity of thy heart thou has done this, and I also withheld thee from sinning against me. Therefore suffered I thee not to touch her."}]},{"v":7,"w":[{"t":"Now therefore restore the man`s wife. For he is a prophet, and he shall pray for thee, and thou shalt live. And if thou restore her not, know thou that thou shalt surely die, thou, and all that are thine."}]},{"v":8,"w":[{"t":"And Abimelech rose early in the morning, and called all his servants, and told all these things in their ear. And the men were sore afraid."}]},{"v":9,"w":[{"t":"Then Abimelech called Abraham, and said unto him, What hast thou done unto us? And wherein have I sinned against thee, that thou hast brought on me and on my kingdom a great sin? Thou hast done deeds unto me that ought not to be done."}]},{"v":10,"w":[{"t":"And Abimelech said unto Abraham, What sawest thou, that thou hast done this thing?"}]},{"v":11,"w":[{"t":"And Abraham said, Because I thought, Surely the fear of God is not in this place. And they will slay me for my wife`s sake."}]},{"v":12,"w":[{"t":"And moreover she is indeed my sister, the daughter of my father, but not the daughter of my mother; and she became my wife:"}]},{"v":13,"w":[{"t":"and it came to pass, when God caused me to wander from my father`s house, that I said unto her, This is thy kindness which thou shalt show unto me. At every place whither we shall come, say of me, He is my brother."}]},{"v":14,"w":[{"t":"And Abimelech took sheep and oxen, and men-servants and women-servants, and gave them unto Abraham, and restored him Sarah his wife."}]},{"v":15,"w":[{"t":"And Abimelech said, Behold, my land is before thee. Dwell where it pleaseth thee."}]},{"v":16,"w":[{"t":"And unto Sarah he said, Behold, I have given thy brother a thousand pieces of silver. Behold, it is for thee a covering of the eyes to all that are with thee. And in respect of all thou art righted."}]},{"v":17,"w":[{"t":"And Abraham prayed unto God. And God healed Abimelech, and his wife, and his maid-servants. And they bare children."}]},{"v":18,"w":[{"t":"For Jehovah had fast closed up all the wombs of the house of Abimelech, because of Sarah, Abraham`s wife."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":21,"vss":[{"v":1,"w":[{"t":"And Jehovah visited Sarah as he had said, and Jehovah did unto Sarah as he had spoken."}]},{"v":2,"w":[{"t":"And Sarah conceived, and bare Abraham a son in his old age, at the set time of which God had spoken to him."}]},{"v":3,"w":[{"t":"And Abraham called the name of his son that was born unto him, whom Sarah bare to him, Isaac."}]},{"v":4,"w":[{"t":"And Abraham circumcised his son Isaac when he was eight days old, as God had commanded him."}]},{"v":5,"w":[{"t":"And Abraham was a hundred years old, when his son Isaac was born unto him."}]},{"v":6,"w":[{"t":"And Sarah said, God hath made me to laugh. Every one that heareth will laugh with me."}]},{"v":7,"w":[{"t":"And she said, Who would have said unto Abraham, that Sarah should give children suck? For I have borne him a son in his old age."}]},{"v":8,"w":[{"t":"And the child grew, and was weaned. And Abraham made a great feast on the day that Isaac was weaned."}]},{"v":9,"w":[{"t":"And Sarah saw the son of Hagar the Egyptian, whom she had borne unto Abraham, mocking."}]},{"v":10,"w":[{"t":"Wherefore she said unto Abraham, Cast out this handmaid and her son. For the son of this handmaid shall not be heir with my son, even with Isaac."}]},{"v":11,"w":[{"t":"And the thing was very grievous in Abraham`s sight on account of his son."}]},{"v":12,"w":[{"t":"And God said unto Abraham, Let it not be grievous in thy sight because of the lad, and because of thy handmaid. In all that Sarah saith unto thee, hearken unto her voice. For in Isaac shall thy seed be called."}]},{"v":13,"w":[{"t":"And also of the son of the handmaid will I make a nation, because he is thy seed."}]},{"v":14,"w":[{"t":"And Abraham rose up early in the morning, and took bread and a bottle of water, and gave it unto Hagar, putting it on her shoulder, and [gave her] the child, and sent her away. And she departed, and wandered in the wilderness of Beer-sheba."}]},{"v":15,"w":[{"t":"And the water in the bottle was spent, and she cast the child under one of the shrubs."}]},{"v":16,"w":[{"t":"And she went, and sat her down over against him a good way off, as it were a bowshot. For she said, Let me not look upon the death of the child. And she sat over against him, and lifted up her voice, and wept."}]},{"v":17,"w":[{"t":"And God heard the voice of the lad. And the angel of God called to Hagar out of heaven, and said unto her, What aileth thee, Hagar? Fear not. For God hath heard the voice of the lad where he is."}]},{"v":18,"w":[{"t":"Arise, lift up the lad, and hold him in thy hand. For I will make him a great nation."}]},{"v":19,"w":[{"t":"And God opened her eyes, and she saw a well of water. And she went, and filled the bottle with water, and gave the lad drink."}]},{"v":20,"w":[{"t":"And God was with the lad, and he grew. And he dwelt in the wilderness, and became, as he grew up, an archer."}]},{"v":21,"w":[{"t":"And he dwelt in the wilderness of Paran. And his mother took him a wife out of the land of Egypt."}]},{"v":22,"w":[{"t":"And it came to pass at that time, that Abimelech and Phicol the captain of his host spake unto Abraham, saying, God is with thee in all that thou doest."}]},{"v":23,"w":[{"t":"Now therefore swear unto me here by God that thou wilt not deal falsely with me, nor with my son, nor with my son`s son. But according to the kindness that I have done unto thee, thou shalt do unto me, and to the land wherein thou hast sojourned."}]},{"v":24,"w":[{"t":"And Abraham said, I will swear."}]},{"v":25,"w":[{"t":"And Abraham reproved Abimelech because of the well of water, which Abimelech`s servants had violently taken away."}]},{"v":26,"w":[{"t":"And Abimelech said, I know not who hath done this thing. Neither didst thou tell me, neither yet heard I of it, but to-day."}]},{"v":27,"w":[{"t":"And Abraham took sheep and oxen, and gave them unto Abimelech. And they two made a covenant."}]},{"v":28,"w":[{"t":"And Abraham set seven ewe lambs of the flock by themselves."}]},{"v":29,"w":[{"t":"And Abimelech said unto Abraham, What mean these seven ewe lambs which thou hast set by themselves?"}]},{"v":30,"w":[{"t":"And he said, These seven ewe lambs shalt thou take of my hand, that it may be a witness unto me, that I have digged this well."}]},{"v":31,"w":[{"t":"Wherefore he called that place Beer-sheba. Because there they sware both of them."}]},{"v":32,"w":[{"t":"So they made a covenant at Beer-sheba. And Abimelech rose up, and Phicol the captain of his host, and they returned into the land of the Philistines."}]},{"v":33,"w":[{"t":"And [Abraham] planted a tamarisk tree in Beer-sheba, and called there on the name of Jehovah, the Everlasting God."}]},{"v":34,"w":[{"t":"And Abraham sojourned in the land of the Philistines many days."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":22,"vss":[{"v":1,"w":[{"t":"And it came to pass after these things, that God did prove Abraham, and said unto him, Abraham. And he said, Here am I."}]},{"v":2,"w":[{"t":"And he said, Take now thy son, thine only son, whom thou lovest, even Isaac, and get thee into the land of Moriah. And offer him there for a burnt-offering upon one of the mountains which I will tell thee of."}]},{"v":3,"w":[{"t":"And Abraham rose early in the morning, and saddled his ass, and took two of his young men with him, and Isaac his son. And he clave the wood for the burnt-offering, and rose up, and went unto the place of which God had told him."}]},{"v":4,"w":[{"t":"On the third day Abraham lifted up his eyes, and saw the place afar off."}]},{"v":5,"w":[{"t":"And Abraham said unto his young men, Abide ye here with the ass, and I and the lad will go yonder; and we will worship, and come again to you."}]},{"v":6,"w":[{"t":"And Abraham took the wood of the burnt-offering, and laid it upon Isaac his son. And he took in his hand the fire and the knife. And they went both of them together."}]},{"v":7,"w":[{"t":"And Isaac spake unto Abraham his father, and said, My father. And he said, Here am I, my son. And he said, Behold, the fire and the wood. But where is the lamb for a burnt-offering?"}]},{"v":8,"w":[{"t":"And Abraham said, God will provide himself the lamb for a burnt-offering, my son. So they went both of them together."}]},{"v":9,"w":[{"t":"And they came to the place which God had told him of. And Abraham built the altar there, and laid the wood in order, and bound Isaac his son, and laid him on the altar, upon the wood."}]},{"v":10,"w":[{"t":"And Abraham stretched forth his hand, and took the knife to slay his son."}]},{"v":11,"w":[{"t":"And the angel of Jehovah called unto him out of heaven, and said, Abraham, Abraham. And he said, Here I am."}]},{"v":12,"w":[{"t":"And he said, Lay not thy hand upon the lad, neither do thou anything unto him. For now I know that thou fearest God, seeing thou hast not withheld thy son, thine only son, from me."}]},{"v":13,"w":[{"t":"And Abraham lifted up his eyes, and looked, and behold, behind [him] a ram caught in the thicket by his horns. And Abraham went and took the ram, and offered him up for a burnt-offering in the stead of his son."}]},{"v":14,"w":[{"t":"And Abraham called the name of that place Jehovah-jireh. As it is said to this day, In the mount of Jehovah it shall be provided."}]},{"v":15,"w":[{"t":"And the angel of Jehovah called unto Abraham a second time out of heaven,"}]},{"v":16,"w":[{"t":"and said, By myself have I sworn, saith Jehovah, because thou hast done this thing, and hast not withheld thy son, thine only son,"}]},{"v":17,"w":[{"t":"that in blessing I will bless thee, and in multiplying I will multiply thy seed as the stars of the heavens, and as the sand which is upon the seashore. And thy seed shall possess the gate of his enemies."}]},{"v":18,"w":[{"t":"And in thy seed shall all the nations of the earth be blessed. Because thou hast obeyed my voice."}]},{"v":19,"w":[{"t":"So Abraham returned unto his young men, and they rose up and went together to Beer-sheba. And Abraham dwelt at Beer-sheba."}]},{"v":20,"w":[{"t":"And it came to pass after these things, that it was told Abraham, saying, Behold, Milcah, she also hath borne children unto they brother Nahor."}]},{"v":21,"w":[{"t":"Uz his first-born, and Buz his brother, and Kemuel the father of Aram."}]},{"v":22,"w":[{"t":"And Chesed, and Hazo, and Pildash, and Jidlaph, and Bethuel."}]},{"v":23,"w":[{"t":"And Bethuel begat Rebekah. These eight did Milcah bear to Nahor, Abraham`s brother."}]},{"v":24,"w":[{"t":"And his concubine, whose name was Reumah, she also bare Tebah, and Gaham, and Tahash, and Maacah."}]}]}
|
@ -1 +0,0 @@
|
||||
{"ch":23,"vss":[{"v":1,"w":[{"t":"And the life of Sarah was a hundred and seven and twenty years. These were the years of the life of Sarah."}]},{"v":2,"w":[{"t":"And Sarah died in Kiriath-arba (the same is Hebron), in the land of Canaan. And Abraham came to mourn for Sarah, and to weep for her."}]},{"v":3,"w":[{"t":"And Abraham rose up from before his dead, and spake unto the children of Heth, saying,"}]},{"v":4,"w":[{"t":"I am a stranger and a sojourner with you. Give me a possession of a burying-place with you, that I may bury my dead out of my sight."}]},{"v":5,"w":[{"t":"And the children of Heth answered Abraham, saying unto him,"}]},{"v":6,"w":[{"t":"Hear us, my lord. Thou art a prince of God among us. In the choice of our sepulchres bury thy dead. None of us shall withhold from thee his sepulchre, but that thou mayest bury thy dead."}]},{"v":7,"w":[{"t":"And Abraham rose up, and bowed himself to the people of the land, even to the children of Heth."}]},{"v":8,"w":[{"t":"And he communed with them, saying, If it be your mind that I should bury my dead out of my sight, hear me, and entreat for me to Ephron the son of Zohar,"}]},{"v":9,"w":[{"t":"that he may give me the cave of Machpelah, which he hath, which is in the end of his field. For the full price let him give it to me in the midst of you for a possession of a burying-place."}]},{"v":10,"w":[{"t":"Now Ephron was sitting in the midst of the children of Heth. And Ephron the Hittite answered Abraham in the audience of the children of Heth, even of all that went in at the gate of his city, saying,"}]},{"v":11,"w":[{"t":"Nay, my lord, hear me. The field give I thee, and the cave that is therein, I give it thee. In the presence of the children of my people give I it thee. Bury thy dead."}]},{"v":12,"w":[{"t":"And Abraham bowed himself down before the people of the land."}]},{"v":13,"w":[{"t":"And he spake unto Ephron in the audience of the people of the land, saying, But if thou wilt, I pray thee, hear me. I will give the price of the field. Take it of me, and I will bury my dead there."}]},{"v":14,"w":[{"t":"And Ephron answered Abraham, saying unto him,"}]},{"v":15,"w":[{"t":"My lord, hearken unto me. A piece of land worth four hundred shekels of silver, what is that betwixt me and thee? Bury therefore thy dead."}]},{"v":16,"w":[{"t":"And Abraham hearkened unto Ephron. And Abraham weighed to Ephron the silver which he had named in the audience of the children of Heth, four hundred shekels of silver, current [money] with the merchant."}]},{"v":17,"w":[{"t":"So the field of Ephron, which was in Machpelah, which was before Mamre, the field, and the cave which was therein, and all the trees that were in the field, that were in all the border thereof round about, were made sure"}]},{"v":18,"w":[{"t":"unto Abraham for a possession in the presence of the children of Heth, before all that went in at the gate of his city."}]},{"v":19,"w":[{"t":"And after this, Abraham buried Sarah his wife in the cave of the field of Machpelah before Mamre (the same is Hebron), in the land of Canaan."}]},{"v":20,"w":[{"t":"And the field, and the cave that is therein, were made sure unto Abraham for a possession of a burying-place by the children of Heth."}]}]}
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"ch":25,"vss":[{"v":1,"w":[{"t":"And Abraham took another wife, and her name was Keturah."}]},{"v":2,"w":[{"t":"And she bare him Zimran, and Jokshan, and Medan, and Midian, and Ishbak, and Shuah."}]},{"v":3,"w":[{"t":"And Jokshan begat Sheba, and Dedan. And the sons of Dedan were Asshurim, and Letushim, and Leummim."}]},{"v":4,"w":[{"t":"And the sons of Midian: Ephah, and Epher, and Hanoch, and Abida, and Eldaah. All these were the children of Keturah."}]},{"v":5,"w":[{"t":"And Abraham gave all that he had unto Isaac."}]},{"v":6,"w":[{"t":"But unto the sons of the concubines, that Abraham had, Abraham gave gifts. And he sent them away from Isaac his son, while he yet lived, eastward, unto the east country."}]},{"v":7,"w":[{"t":"And these are the days of the years of Abraham`s life which he lived, a hundred threescore and fifteen years."}]},{"v":8,"w":[{"t":"And Abraham gave up the ghost, and died in a good old age, an old man, and full [of years], and was gathered to his people."}]},{"v":9,"w":[{"t":"And Isaac and Ishmael his sons buried him in the cave of Machpelah, in the field of Ephron the son of Zohar the Hittite, which is before Mamre."}]},{"v":10,"w":[{"t":"The field which Abraham purchased of the children of Heth. There was Abraham buried, and Sarah his wife."}]},{"v":11,"w":[{"t":"And it came to pass after the death of Abraham, that God blessed Isaac his son. And Isaac dwelt by Beer-lahai-roi."}]},{"v":12,"w":[{"t":"Now these are the generations of Ishmael, Abraham`s son, whom Hagar the Egyptian, Sarah`s handmaid, bare unto Abraham."}]},{"v":13,"w":[{"t":"And these are the names of the sons of Ishmael, by their names, according to their generations: the first-born of Ishmael, Nebaioth, and Kedar, and Adbeel, and Mibsam,"}]},{"v":14,"w":[{"t":"and Mishma, and Dumah, and Massa,"}]},{"v":15,"w":[{"t":"Hadad, and Tema, Jetur, Naphish, and Kedemah."}]},{"v":16,"w":[{"t":"These are the sons of Ishmael, and these are their names, by their villages, and by their encampments. Twelve princes according to their nations."}]},{"v":17,"w":[{"t":"And these are the years of the life of Ishmael, a hundred and thirty and seven years. And he gave up the ghost and died, and was gathered unto his people."}]},{"v":18,"w":[{"t":"And they dwelt from Havilah unto Shur that is before Egypt, as thou goest toward Assyria. He abode over against all his brethren."}]},{"v":19,"w":[{"t":"And these are the generations of Isaac, Abraham`s son. Abraham begat Isaac."}]},{"v":20,"w":[{"t":"And Isaac was forty years old when he took Rebekah, the daughter of Bethuel the Syrian of Paddan-aram, the sister of Laban the Syrian, to be his wife."}]},{"v":21,"w":[{"t":"And Isaac entreated Jehovah for his wife, because she was barren. And Jehovah was entreated of him, and Rebekah his wife conceived."}]},{"v":22,"w":[{"t":"And the children struggled together within her. And she said, If it be so, wherefore do I live? And she went to inquire of Jehovah."}]},{"v":23,"w":[{"t":"And Jehovah said unto her, Two nations are in thy womb, And two peoples shall be separated from thy bowels. And the one people shall be stronger than the other people. And the elder shall serve the younger."}]},{"v":24,"w":[{"t":"And when her days to be delivered were fulfilled, behold, there were twins in her womb."}]},{"v":25,"w":[{"t":"And the first came forth red, all over like a hairy garment. And they called his name Esau."}]},{"v":26,"w":[{"t":"And after that came forth his brother, and his hand had hold on Esau`s heel. And his name was called Jacob. And Isaac was threescore years old when she bare them."}]},{"v":27,"w":[{"t":"And the boys grew. And Esau was a skilful hunter, a man of the field. And Jacob was a quiet man, dwelling in tents."}]},{"v":28,"w":[{"t":"Now Isaac loved Esau, because he did eat of his venison. And Rebekah loved Jacob."}]},{"v":29,"w":[{"t":"And Jacob boiled pottage. And Esau came in from the field, and he was faint."}]},{"v":30,"w":[{"t":"And Esau said to Jacob, Feed me, I pray thee, with that same red [pottage]. For I am faint. Therefore was his name called Edom."}]},{"v":31,"w":[{"t":"And Jacob said, Sell me first thy birthright."}]},{"v":32,"w":[{"t":"And Esau said, Behold, I am about to die. And what profit shall the birthright do to me?"}]},{"v":33,"w":[{"t":"And Jacob said, Swear to me first. And he sware unto him. And he sold his birthright unto Jacob."}]},{"v":34,"w":[{"t":"And Jacob gave Esau bread and pottage of lentils. And he did eat and drink, and rose up, and went his way. So Esau despised his birthright."}]}]}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"ch":28,"vss":[{"v":1,"w":[{"t":"And Isaac called Jacob, and blessed him, and charged him, and said unto him, Thou shalt not take a wife of the daughters of Canaan."}]},{"v":2,"w":[{"t":"Arise, go to Paddan-aram, to the house of Bethuel thy mother`s father. And take thee a wife from thence of the daughters of Laban thy mother`s brother."}]},{"v":3,"w":[{"t":"And God Almighty bless thee, and make thee fruitful, and multiply thee, that thou mayest be a company of peoples."}]},{"v":4,"w":[{"t":"And give thee the blessing of Abraham, to thee, and to thy seed with thee. That thou mayest inherit the land of thy sojournings, which God gave unto Abraham."}]},{"v":5,"w":[{"t":"And Isaac sent away Jacob. And he went to Paddan-aram unto Laban, son of Bethuel the Syrian, the brother of Rebekah, Jacob`s and Esau`s mother."}]},{"v":6,"w":[{"t":"Now Esau saw that Isaac had blessed Jacob and sent him away to Paddan-aram, to take him a wife from thence. And that as he blessed him he gave him a charge, saying, Thou shalt not take a wife of the daughters of Canaan."}]},{"v":7,"w":[{"t":"And that Jacob obeyed his father and his mother, and was gone to Paddan-aram."}]},{"v":8,"w":[{"t":"And Esau saw that the daughters of Canaan pleased not Isaac his father."}]},{"v":9,"w":[{"t":"And Esau went unto Ishmael, and took, besides the wives that he had, Mahalath the daughter of Ishmael Abraham`s son, the sister of Nebaioth, to be his wife."}]},{"v":10,"w":[{"t":"And Jacob went out from Beer-sheba, and went toward Haran."}]},{"v":11,"w":[{"t":"And he lighted upon a certain place, and tarried there all night, because the sun was set. And he took one of the stones of the place, and put it under his head, and lay down in that place to sleep."}]},{"v":12,"w":[{"t":"And he dreamed. And behold, a ladder set up on the earth, and the top of it reached to heaven. And behold, the angels of God ascending and descending on it."}]},{"v":13,"w":[{"t":"And, behold, Jehovah stood above it, and said, I am Jehovah, the God of Abraham thy father, and the God of Isaac. The land whereon thou liest, to thee will I give it, and to thy seed."}]},{"v":14,"w":[{"t":"And thy seed shall be as the dust of the earth, and thou shalt spread abroad to the west, and to the east, and to the north, and to the south. And in thee and in thy seed shall all the families of the earth be blessed."}]},{"v":15,"w":[{"t":"And, behold, I am with thee, and will keep thee, whithersoever thou goest, and will bring thee again into this land. For I will not leave thee, until I have done that which I have spoken to thee of."}]},{"v":16,"w":[{"t":"And Jacob awaked out of his sleep, and he said, Surely Jehovah is in this place. And I knew it not."}]},{"v":17,"w":[{"t":"And he was afraid, and said, How dreadful is this place! This is none other than the house of God, and this is the gate of heaven."}]},{"v":18,"w":[{"t":"And Jacob rose up early in the morning, and took the stone that he had put under his head, and set it up for a pillar, and poured oil upon the top of it."}]},{"v":19,"w":[{"t":"And he called the name of that place Beth-el. But the name of the city was Luz at the first."}]},{"v":20,"w":[{"t":"And Jacob vowed a vow, saying, If God will be with me, and will keep me in this way that I go, and will give me bread to eat, and raiment to put on,"}]},{"v":21,"w":[{"t":"so that I come again to my father`s house in peace, and Jehovah will be my God,"}]},{"v":22,"w":[{"t":"then this stone, which I have set up for a pillar, shall be God`s house. And of all that thou shalt give me I will surely give the tenth unto thee."}]}]}
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"ch":3,"vss":[{"v":1,"w":[{"t":"Now the serpent was more subtle than any beast of the field which Jehovah God had made. And he said unto the woman, Yea, hath God said, Ye shall not eat of any tree of the garden?"}]},{"v":2,"w":[{"t":"And the woman said unto the serpent, Of the fruit of the trees of the garden we may eat:"}]},{"v":3,"w":[{"t":"but of the fruit of the tree which is in the midst of the garden, God hath said, Ye shall not eat of it, neither shall ye touch it, lest ye die."}]},{"v":4,"w":[{"t":"And the serpent said unto the woman, Ye shall not surely die:"}]},{"v":5,"w":[{"t":"for God doth know that in the day ye eat thereof, then your eyes shall be opened, and ye shall be as God, knowing good and evil."}]},{"v":6,"w":[{"t":"And when the woman saw that the tree was good for food, and that it was a delight to the eyes, and that the tree was to be desired to make one wise, she took of the fruit thereof, and did eat; and she gave also unto her husband with her, and he did eat."}]},{"v":7,"w":[{"t":"And the eyes of them both were opened, and they knew that they were naked; and they sewed fig-leaves together, and made themselves aprons."}]},{"v":8,"w":[{"t":"And they heard the voice of Jehovah God walking in the garden in the cool of the day: and the man and his wife hid themselves from the presence of Jehovah God amongst the trees of the garden."}]},{"v":9,"w":[{"t":"And Jehovah God called unto the man, and said unto him, Where art thou?"}]},{"v":10,"w":[{"t":"And he said, I heard thy voice in the garden, and I was afraid, because I was naked; and I hid myself."}]},{"v":11,"w":[{"t":"And he said, Who told thee that thou wast naked? Hast thou eaten of the tree, whereof I commanded thee that thou shouldest not eat?"}]},{"v":12,"w":[{"t":"And the man said, The woman whom thou gavest to be with me, she gave me of the tree, and I did eat."}]},{"v":13,"w":[{"t":"And Jehovah God said unto the woman, What is this thou hast done? And the woman said, The serpent beguiled me, and I did eat."}]},{"v":14,"w":[{"t":"And Jehovah God said unto the serpent, Because thou hast done this, cursed art thou above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life:"}]},{"v":15,"w":[{"t":"and I will put enmity between thee and the woman, and between thy seed and her seed: he shall bruise thy head, and thou shalt bruise his heel."}]},{"v":16,"w":[{"t":"Unto the woman he said, I will greatly multiply thy pain and thy conception; in pain thou shalt bring forth children; and thy desire shall be to thy husband, and he shall rule over thee."}]},{"v":17,"w":[{"t":"And unto Adam he said, Because thou hast hearkened unto the voice of thy wife, and hast eaten of the tree, of which I commanded thee, saying, Thou shalt not eat of it: cursed is the ground for thy sake; in toil shalt thou eat of it all the days of thy life;"}]},{"v":18,"w":[{"t":"thorns also and thistles shall it bring forth to thee; and thou shalt eat the herb of the field;"}]},{"v":19,"w":[{"t":"in the sweat of thy face shalt thou eat bread, till thou return unto the ground; for out of it wast thou taken: for dust thou art, and unto dust shalt thou return."}]},{"v":20,"w":[{"t":"And the man called his wife`s name Eve; because she was the mother of all living."}]},{"v":21,"w":[{"t":"And Jehovah God made for Adam and for his wife coats of skins, and clothed them."}]},{"v":22,"w":[{"t":"And Jehovah God said, Behold, the man is become as one of us, to know good and evil; and now, lest he put forth his hand, and take also of the tree of life, and eat, and live for ever-"}]},{"v":23,"w":[{"t":"therefore Jehovah God sent him forth from the garden of Eden, to till the ground from whence he was taken."}]},{"v":24,"w":[{"t":"So he drove out the man; and he placed at the east of the garden of Eden the Cherubim, and the flame of a sword which turned every way, to keep the way of the tree of life."}]}]}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"ch":32,"vss":[{"v":1,"w":[{"t":"And Jacob went on his way, and the angels of God met him."}]},{"v":2,"w":[{"t":"And Jacob said when he saw them, This is God`s host: and he called the name of that place Mahanaim."}]},{"v":3,"w":[{"t":"And Jacob sent messengers before him to Esau his brother unto the land of Seir, the field of Edom."}]},{"v":4,"w":[{"t":"And he commanded them, saying, Thus shall ye say unto my lord Esau: Thus saith thy servant Jacob, I have sojourned with Laban, and stayed until now:"}]},{"v":5,"w":[{"t":"and I have oxen, and asses, [and] flocks, and men-servants, and maid-servants: and I have sent to tell my lord, that I may find favor in thy sight."}]},{"v":6,"w":[{"t":"And the messengers returned to Jacob, saying, We came to thy brother Esau, and moreover he cometh to meet thee, and four hundred men with him."}]},{"v":7,"w":[{"t":"Then Jacob was greatly afraid and was distressed: and he divided the people that were with him, and the flocks, and the herds, and the camels, into two companies;"}]},{"v":8,"w":[{"t":"and he said, If Esau come to the one company, and smite it, then the company which is left shall escape."}]},{"v":9,"w":[{"t":"And Jacob said, O God of my father Abraham, and God of my father Isaac, O Jehovah, who saidst unto me, Return unto thy country, and to thy kindred, and I will do thee good:"}]},{"v":10,"w":[{"t":"I am not worthy of the least of all the lovingkindnesses, and of all the truth, which thou hast showed unto thy servant; for with my staff I passed over this Jordan; and now I am become two companies."}]},{"v":11,"w":[{"t":"Deliver me, I pray thee, from the hand of my brother, from the hand of Esau: for I fear him, lest he come and smite me, the mother with the children."}]},{"v":12,"w":[{"t":"And thou saidst, I will surely do thee good, and make thy seed as the sand of the sea, which cannot be numbered for multitude."}]},{"v":13,"w":[{"t":"And he lodged there that night, and took of that which he had with him a present for Esau his brother:"}]},{"v":14,"w":[{"t":"two hundred she-goats and twenty he-goats, two hundred ewes and twenty rams,"}]},{"v":15,"w":[{"t":"thirty milch camels and their colts, forty cows and ten bulls, twenty she-asses and ten foals."}]},{"v":16,"w":[{"t":"And he delivered them into the hand of his servants, every drove by itself, and said unto his servants, Pass over before me, and put a space betwixt drove and drove."}]},{"v":17,"w":[{"t":"And he commanded the foremost, saying, When Esau my brother meeteth thee, and asketh thee, saying, Whose art thou? and whither goest thou? and whose are these before thee?"}]},{"v":18,"w":[{"t":"then thou shalt say [They are] thy servant Jacob`s; it is a present sent unto my lord Esau: and, behold, he also is behind us."}]},{"v":19,"w":[{"t":"And he commanded also the second, and the third, and all that followed the droves, saying, On this manner shall ye speak unto Esau, when ye find him;"}]},{"v":20,"w":[{"t":"and ye shall say, Moreover, behold, thy servant Jacob is behind us. For he said, I will appease him with the present that goeth before me, and afterward I will see his face; peradventure he will accept me."}]},{"v":21,"w":[{"t":"So the present passed over before him: and he himself lodged that night in the company."}]},{"v":22,"w":[{"t":"And he rose up that night, and took his two wives, and his two handmaids, and his eleven children, and passed over the ford of the Jabbok."}]},{"v":23,"w":[{"t":"And he took them, and sent them over the stream, and sent over that which he had."}]},{"v":24,"w":[{"t":"And Jacob was left alone; and there wrestled a man with him until the breaking of the day."}]},{"v":25,"w":[{"t":"And when he saw that he prevailed not against him, he touched the hollow of his thigh; and the hollow of Jacob`s thigh was strained, as he wrestled with him."}]},{"v":26,"w":[{"t":"And he said, Let me go, for the day breaketh. And he said, I will not let thee go, except thou bless me."}]},{"v":27,"w":[{"t":"And he said unto him, What is thy name? And he said, Jacob."}]},{"v":28,"w":[{"t":"And he said, Thy name shall be called no more Jacob, but Israel: for thou hast striven with God and with men, and hast prevailed."}]},{"v":29,"w":[{"t":"And Jacob asked him, and said, Tell me, I pray thee, thy name. And he said, Wherefore is it that thou dost ask after my name? And he blessed him there."}]},{"v":30,"w":[{"t":"And Jacob called the name of the place Peniel: for, [said he], I have seen God face to face, and my life is preserved."}]},{"v":31,"w":[{"t":"And the sun rose upon him as he passed over Penuel, and he limped upon his thigh."}]},{"v":32,"w":[{"t":"Therefore the children of Israel eat not the sinew of the hip which is upon the hollow of the thigh, unto this day: because he touched the hollow of Jacob`s thigh in the sinew of the hip."}]}]}
|
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