(v8Context->GetIsolate());
+#ifdef ENABLE_NODE
if (v8InternalObject.IsJSObject() || v8InternalObject.IsPrimitive()
|| v8InternalObject.IsJSArray() || v8InternalObject.IsJSTypedArray()) {
auto v8LocalObject = v8::Utils::ToLocal(v8::internal::handle(v8InternalObject, v8InternalIsolate));
@@ -569,6 +570,28 @@ namespace Javet {
else if (v8InternalObject.IsCode()) {
LOG_DEBUG("Converter: Code is not supported.");
}
+#else
+ if (v8::internal::IsJSObject(v8InternalObject) || v8::internal::IsPrimitive(v8InternalObject)
+ || v8::internal::IsJSArray(v8InternalObject) || v8::internal::IsJSTypedArray(v8InternalObject)) {
+ auto v8LocalObject = v8::Utils::ToLocal(v8::internal::handle(v8InternalObject, v8InternalIsolate));
+ return ToExternalV8Value(jniEnv, v8Runtime, v8Context, v8LocalObject);
+ }
+ else if (v8::internal::IsContext(v8InternalObject)) {
+ auto v8InternalContext = V8InternalContext::cast(v8InternalObject);
+ auto v8LocalContext = v8::Utils::ToLocal(v8::internal::handle(v8InternalContext, v8InternalIsolate));
+ return ToExternalV8Context(jniEnv, v8Runtime, v8Context, v8LocalContext);
+ }
+ else if (v8::internal::IsModule(v8InternalObject)) {
+ auto v8LocalModule = v8::Utils::ToLocal(v8::internal::handle(V8InternalModule::cast(v8InternalObject), v8InternalIsolate));
+ return ToExternalV8Module(jniEnv, v8Runtime, v8Context, v8LocalModule);
+ }
+ else if (v8::internal::IsScript(v8InternalObject)) {
+ LOG_DEBUG("Converter: Script is not supported.");
+ }
+ else if (v8::internal::IsCode(v8InternalObject)) {
+ LOG_DEBUG("Converter: Code is not supported.");
+ }
+#endif
return ToExternalV8ValueUndefined(jniEnv, v8Runtime);
}
diff --git a/cpp/jni/javet_jni_function.cpp b/cpp/jni/javet_jni_function.cpp
index 0233e3eb2..888c4b57a 100644
--- a/cpp/jni/javet_jni_function.cpp
+++ b/cpp/jni/javet_jni_function.cpp
@@ -469,7 +469,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc
const int endPosition = jniEnv->CallIntMethod(mScriptSource, Javet::Converter::jmethodIDIV8ValueFunctionScriptGetEndPosition);
auto v8InternalScript = V8InternalScript::cast(v8InternalShared.script());
auto v8InternalSource = v8::Utils::OpenHandle(*umSourceCode);
+#ifdef ENABLE_NODE
bool sourceCodeEquals = v8InternalScript.source().StrictEquals(*v8InternalSource);
+#else
+ bool sourceCodeEquals = V8InternalObject::StrictEquals(v8InternalScript.source(), *v8InternalSource);
+#endif
bool positionEquals = startPosition == v8InternalShared.StartPosition() && endPosition == v8InternalShared.EndPosition();
if (!sourceCodeEquals || !positionEquals) {
if (v8InternalShared.CanDiscardCompiled()) {
@@ -482,10 +486,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSc
#ifdef ENABLE_NODE
auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle);
clonedV8InternalScript->set_source(*v8InternalSource, V8InternalWriteBarrierMode::UPDATE_WRITE_BARRIER);
+ v8InternalShared.set_script(*clonedV8InternalScript);
#else
auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle, v8InternalSource);
+ v8InternalShared.set_script(*clonedV8InternalScript, v8::kReleaseStore);
#endif
- v8InternalShared.set_script(*clonedV8InternalScript);
}
else {
#ifdef ENABLE_NODE
@@ -581,7 +586,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo
const int newEndPosition = startPosition + newSourceLength;
auto newV8InternalSource = v8::Utils::OpenHandle(*newSourceCode);
+#ifdef ENABLE_NODE
bool sourceCodeEquals = v8InternalSource.StrictEquals(*newV8InternalSource);
+#else
+ bool sourceCodeEquals = V8InternalObject::StrictEquals(v8InternalSource, *newV8InternalSource);
+#endif
bool positionEquals = newEndPosition == v8InternalShared.EndPosition();
if (!sourceCodeEquals || !positionEquals) {
@@ -596,10 +605,11 @@ JNIEXPORT jboolean JNICALL Java_com_caoccao_javet_interop_V8Native_functionSetSo
#ifdef ENABLE_NODE
auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle);
clonedV8InternalScript->set_source(*newV8InternalSource, V8InternalWriteBarrierMode::UPDATE_WRITE_BARRIER);
+ v8InternalShared.set_script(*clonedV8InternalScript);
#else
auto clonedV8InternalScript = v8InternalIsolate->factory()->CloneScript(v8InternalScriptHandle, newV8InternalSource);
+ v8InternalShared.set_script(*clonedV8InternalScript, v8::kReleaseStore);
#endif
- v8InternalShared.set_script(*clonedV8InternalScript);
}
else {
#ifdef ENABLE_NODE
diff --git a/cpp/jni/javet_resource_node.rc b/cpp/jni/javet_resource_node.rc
index 12092dbf1..d2057bb17 100644
--- a/cpp/jni/javet_resource_node.rc
+++ b/cpp/jni/javet_resource_node.rc
@@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,2,2,0
- PRODUCTVERSION 2,2,2,0
+ FILEVERSION 2,2,3,0
+ PRODUCTVERSION 2,2,3,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -79,12 +79,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "caoccao.com"
VALUE "FileDescription", "caoccao.com"
- VALUE "FileVersion", "2.2.2.0"
- VALUE "InternalName", "libjavet-node-windows-x86_64.v.2.2.2.dll"
+ VALUE "FileVersion", "2.2.3.0"
+ VALUE "InternalName", "libjavet-node-windows-x86_64.v.2.2.3.dll"
VALUE "LegalCopyright", "Copyright (C) 2021"
- VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.2.2.2.dll"
+ VALUE "OriginalFilename", "libjavet-node-windows-x86_64.v.2.2.3.dll"
VALUE "ProductName", "Javet Windows"
- VALUE "ProductVersion", "2.2.2.0"
+ VALUE "ProductVersion", "2.2.3.0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/jni/javet_resource_v8.rc b/cpp/jni/javet_resource_v8.rc
index e5396f1a8..bb83cc9a1 100644
--- a/cpp/jni/javet_resource_v8.rc
+++ b/cpp/jni/javet_resource_v8.rc
@@ -61,8 +61,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,2,2,0
- PRODUCTVERSION 2,2,2,0
+ FILEVERSION 2,2,3,0
+ PRODUCTVERSION 2,2,3,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -79,12 +79,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "caoccao.com"
VALUE "FileDescription", "caoccao.com"
- VALUE "FileVersion", "2.2.2.0"
- VALUE "InternalName", "libjavet-v8-windows-x86_64.v.2.2.2.dll"
+ VALUE "FileVersion", "2.2.3.0"
+ VALUE "InternalName", "libjavet-v8-windows-x86_64.v.2.2.3.dll"
VALUE "LegalCopyright", "Copyright (C) 2021"
- VALUE "OriginalFilename", "libjavet-v8-windows-x86_64.v.2.2.2.dll"
+ VALUE "OriginalFilename", "libjavet-v8-windows-x86_64.v.2.2.3.dll"
VALUE "ProductName", "Javet Windows"
- VALUE "ProductVersion", "2.2.2.0"
+ VALUE "ProductVersion", "2.2.3.0"
END
END
BLOCK "VarFileInfo"
diff --git a/docker/android/base.Dockerfile b/docker/android/base.Dockerfile
index a2f2630c5..f97a4a282 100644
--- a/docker/android/base.Dockerfile
+++ b/docker/android/base.Dockerfile
@@ -13,9 +13,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Usage: docker build -t sjtucaocao/javet-android:2.2.2 -f docker/android/base.Dockerfile .
+# Usage: docker build -t sjtucaocao/javet-android:2.2.3 -f docker/android/base.Dockerfile .
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
FROM ubuntu:20.04
WORKDIR /
diff --git a/docker/android/build.Dockerfile b/docker/android/build.Dockerfile
index f62a1f894..4bc73e5c2 100644
--- a/docker/android/build.Dockerfile
+++ b/docker/android/build.Dockerfile
@@ -15,7 +15,7 @@
# Usage: docker build -t javet-android:local -f docker/android/build.Dockerfile .
-FROM sjtucaocao/javet-android:2.2.2
+FROM sjtucaocao/javet-android:2.2.3
WORKDIR /
# Copy Javet
diff --git a/docker/linux-arm64/base_all_in_one.Dockerfile b/docker/linux-arm64/base_all_in_one.Dockerfile
index 4dd7a0404..e6164d937 100644
--- a/docker/linux-arm64/base_all_in_one.Dockerfile
+++ b/docker/linux-arm64/base_all_in_one.Dockerfile
@@ -13,10 +13,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Usage: docker build -t sjtucaocao/javet-arm64:2.2.2 -f docker/linux-arm64/base_all_in_one.Dockerfile .
+# Usage: docker build -t sjtucaocao/javet-arm64:2.2.3 -f docker/linux-arm64/base_all_in_one.Dockerfile .
ARG JAVET_NODE_VERSION=18.15.0
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
FROM ubuntu:20.04
WORKDIR /
diff --git a/docker/linux-arm64/base_gradle.Dockerfile b/docker/linux-arm64/base_gradle.Dockerfile
index 137a5bbb4..d9e9e34c6 100644
--- a/docker/linux-arm64/base_gradle.Dockerfile
+++ b/docker/linux-arm64/base_gradle.Dockerfile
@@ -14,7 +14,7 @@
# limitations under the License.
# Usage: docker build \
-# -t sjtucaocao/javet:arm64-2.2.2 \
+# -t sjtucaocao/javet:arm64-2.2.3 \
# --build-arg JAVET_REPO=sjtucaocao/javet \
# -f docker/linux-arm64/base_gradle.Dockerfile .
diff --git a/docker/linux-arm64/base_v8.Dockerfile b/docker/linux-arm64/base_v8.Dockerfile
index 2a530b804..a51def657 100644
--- a/docker/linux-arm64/base_v8.Dockerfile
+++ b/docker/linux-arm64/base_v8.Dockerfile
@@ -14,13 +14,13 @@
# limitations under the License.
# Usage: docker build \
-# -t sjtucaocao/javet:arm64-base-v8_11.6.189.18 \
+# -t sjtucaocao/javet:arm64-base-v8_11.7.439.16 \
# --build-arg JAVET_REPO=sjtucaocao/javet \
-# --build-arg JAVET_V8_VERSION=11.6.189.18 \
+# --build-arg JAVET_V8_VERSION=11.7.439.16 \
# -f docker/linux-arm64/base_v8.Dockerfile .
ARG JAVET_REPO=sjtucaocao/javet
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
FROM ${JAVET_REPO}:arm64-base-jvm
diff --git a/docker/linux-arm64/build_artifact.Dockerfile b/docker/linux-arm64/build_artifact.Dockerfile
index 9acf8842e..f57440243 100644
--- a/docker/linux-arm64/build_artifact.Dockerfile
+++ b/docker/linux-arm64/build_artifact.Dockerfile
@@ -18,13 +18,13 @@
# --build-arg JAVET_REPO=sjtucaocao/javet \
# --build-arg JAVET_NODE_VERSION=18.12.1 \
# --build-arg JAVET_V8_VERSION=10.8.168.20 \
-# --build-arg JAVET_VERSION=2.2.2 \
+# --build-arg JAVET_VERSION=2.2.3 \
# -f docker/linux-arm64/build_artifact.Dockerfile .
ARG JAVET_REPO=sjtucaocao/javet
ARG JAVET_NODE_VERSION=18.12.1
ARG JAVET_V8_VERSION=10.8.168.20
-ARG JAVET_VERSION=2.2.2
+ARG JAVET_VERSION=2.2.3
FROM ${JAVET_REPO}:arm64-base-node_${JAVET_NODE_VERSION} as base-node
diff --git a/docker/linux-x86_64/base_all_in_one.Dockerfile b/docker/linux-x86_64/base_all_in_one.Dockerfile
index 9f882393a..2864d60b1 100644
--- a/docker/linux-x86_64/base_all_in_one.Dockerfile
+++ b/docker/linux-x86_64/base_all_in_one.Dockerfile
@@ -13,10 +13,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Usage: docker build -t sjtucaocao/javet:2.2.2 -f docker/linux-x86_64/base_all_in_one.Dockerfile .
+# Usage: docker build -t sjtucaocao/javet:2.2.3 -f docker/linux-x86_64/base_all_in_one.Dockerfile .
ARG JAVET_NODE_VERSION=18.17.1
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
FROM ubuntu:20.04
WORKDIR /
diff --git a/docker/linux-x86_64/base_gradle.Dockerfile b/docker/linux-x86_64/base_gradle.Dockerfile
index 5f1761f46..ca502ceb9 100644
--- a/docker/linux-x86_64/base_gradle.Dockerfile
+++ b/docker/linux-x86_64/base_gradle.Dockerfile
@@ -14,7 +14,7 @@
# limitations under the License.
# Usage: docker build \
-# -t sjtucaocao/javet:x86_64-2.2.2 \
+# -t sjtucaocao/javet:x86_64-2.2.3 \
# --build-arg JAVET_REPO=sjtucaocao/javet \
# -f docker/linux-x86_64/base_gradle.Dockerfile .
diff --git a/docker/linux-x86_64/base_v8.Dockerfile b/docker/linux-x86_64/base_v8.Dockerfile
index 37229bb5c..b547ddd4a 100644
--- a/docker/linux-x86_64/base_v8.Dockerfile
+++ b/docker/linux-x86_64/base_v8.Dockerfile
@@ -14,13 +14,13 @@
# limitations under the License.
# Usage: docker build \
-# -t sjtucaocao/javet:x86_64-base-v8_11.6.189.18 \
+# -t sjtucaocao/javet:x86_64-base-v8_11.7.439.16 \
# --build-arg JAVET_REPO=sjtucaocao/javet \
-# --build-arg JAVET_V8_VERSION=11.6.189.18 \
+# --build-arg JAVET_V8_VERSION=11.7.439.16 \
# -f docker/linux-x86_64/base_v8.Dockerfile .
ARG JAVET_REPO=sjtucaocao/javet
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
FROM ${JAVET_REPO}:x86_64-base-jvm
diff --git a/docker/linux-x86_64/build_all_in_one.Dockerfile b/docker/linux-x86_64/build_all_in_one.Dockerfile
index 0a92bdbd8..ae9012fde 100644
--- a/docker/linux-x86_64/build_all_in_one.Dockerfile
+++ b/docker/linux-x86_64/build_all_in_one.Dockerfile
@@ -15,7 +15,7 @@
# Usage: docker build -t javet:local -f docker/linux-x86_64/build_all_in_one.Dockerfile .
-FROM sjtucaocao/javet:2.2.2
+FROM sjtucaocao/javet:2.2.3
WORKDIR /
# Copy Javet
diff --git a/docker/linux-x86_64/build_artifact.Dockerfile b/docker/linux-x86_64/build_artifact.Dockerfile
index 968df67d1..1533a48dd 100644
--- a/docker/linux-x86_64/build_artifact.Dockerfile
+++ b/docker/linux-x86_64/build_artifact.Dockerfile
@@ -18,13 +18,13 @@
# --build-arg JAVET_REPO=sjtucaocao/javet \
# --build-arg JAVET_NODE_VERSION=18.12.1 \
# --build-arg JAVET_V8_VERSION=10.8.168.20 \
-# --build-arg JAVET_VERSION=2.2.2 \
+# --build-arg JAVET_VERSION=2.2.3 \
# -f docker/linux-x86_64/build_artifact.Dockerfile .
ARG JAVET_REPO=sjtucaocao/javet
ARG JAVET_NODE_VERSION=18.12.1
ARG JAVET_V8_VERSION=10.8.168.20
-ARG JAVET_VERSION=2.2.2
+ARG JAVET_VERSION=2.2.3
FROM ${JAVET_REPO}:x86_64-base-node_${JAVET_NODE_VERSION} as base-v8
diff --git a/docker/windows-x86_64/base.Dockerfile b/docker/windows-x86_64/base.Dockerfile
index 5f6f0d94b..d34624aa8 100644
--- a/docker/windows-x86_64/base.Dockerfile
+++ b/docker/windows-x86_64/base.Dockerfile
@@ -29,10 +29,10 @@
# The following dockerfile has been out of date because it still uses
# Visual Studio 2019 Community. Please contact the maintainer if you want an upgrade.
-# Usage: docker build -t sjtucaocao/javet-windows:2.2.2 -m 4G -f docker/windows-x86_64/base.Dockerfile .
+# Usage: docker build -t sjtucaocao/javet-windows:2.2.3 -m 4G -f docker/windows-x86_64/base.Dockerfile .
ARG JAVET_NODE_VERSION=18.17.1
-ARG JAVET_V8_VERSION=11.6.189.18
+ARG JAVET_V8_VERSION=11.7.439.16
# https://hub.docker.com/_/microsoft-windows
FROM mcr.microsoft.com/windows:20H2-amd64
diff --git a/docker/windows-x86_64/build.Dockerfile b/docker/windows-x86_64/build.Dockerfile
index d2dddef46..85b8e5ea5 100644
--- a/docker/windows-x86_64/build.Dockerfile
+++ b/docker/windows-x86_64/build.Dockerfile
@@ -15,7 +15,7 @@
# Usage: docker build -t javet:local -f docker/windows-x86_64/build.Dockerfile .
-FROM sjtucaocao/javet-windows:2.2.2
+FROM sjtucaocao/javet-windows:2.2.3
SHELL ["cmd", "/S", "/C"]
WORKDIR /
diff --git a/docs/_static/basic.css b/docs/_static/basic.css
index acd4167e0..d1901937a 100644
--- a/docs/_static/basic.css
+++ b/docs/_static/basic.css
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -222,7 +222,7 @@ table.modindextable td {
/* -- general body styles --------------------------------------------------- */
div.body {
- min-width: 450px;
+ min-width: 360px;
max-width: 800px;
}
@@ -237,14 +237,8 @@ a.headerlink {
visibility: hidden;
}
-a.brackets:before,
-span.brackets > a:before{
- content: "[";
-}
-
-a.brackets:after,
-span.brackets > a:after {
- content: "]";
+a:visited {
+ color: #551A8B;
}
h1:hover > a.headerlink,
@@ -335,12 +329,16 @@ p.sidebar-title {
font-weight: bold;
}
+nav.contents,
+aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
+nav.contents,
+aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
@@ -379,6 +377,8 @@ div.body p.centered {
div.sidebar > :last-child,
aside.sidebar > :last-child,
+nav.contents > :last-child,
+aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
@@ -386,6 +386,8 @@ div.admonition > :last-child {
div.sidebar::after,
aside.sidebar::after,
+nav.contents::after,
+aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
@@ -428,10 +430,6 @@ table.docutils td, table.docutils th {
border-bottom: 1px solid #aaa;
}
-table.footnote td, table.footnote th {
- border: 0 !important;
-}
-
th {
text-align: left;
padding-right: 5px;
@@ -615,19 +613,26 @@ ul.simple p {
margin-bottom: 0;
}
-dl.footnote > dt,
-dl.citation > dt {
+aside.footnote > span,
+div.citation > span {
float: left;
- margin-right: 0.5em;
}
-
-dl.footnote > dd,
-dl.citation > dd {
+aside.footnote > span:last-of-type,
+div.citation > span:last-of-type {
+ padding-right: 0.5em;
+}
+aside.footnote > p {
+ margin-left: 2em;
+}
+div.citation > p {
+ margin-left: 4em;
+}
+aside.footnote > p:last-of-type,
+div.citation > p:last-of-type {
margin-bottom: 0em;
}
-
-dl.footnote > dd:after,
-dl.citation > dd:after {
+aside.footnote > p:last-of-type:after,
+div.citation > p:last-of-type:after {
content: "";
clear: both;
}
@@ -644,10 +649,6 @@ dl.field-list > dt {
padding-right: 5px;
}
-dl.field-list > dt:after {
- content: ":";
-}
-
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
@@ -673,6 +674,16 @@ dd {
margin-left: 30px;
}
+.sig dd {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.sig dl {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
@@ -731,8 +742,9 @@ dl.glossary dt {
.classifier:before {
font-style: normal;
- margin: 0.5em;
+ margin: 0 0.5em;
content: ":";
+ display: inline-block;
}
abbr, acronym {
@@ -740,6 +752,14 @@ abbr, acronym {
cursor: help;
}
+.translated {
+ background-color: rgba(207, 255, 207, 0.2)
+}
+
+.untranslated {
+ background-color: rgba(255, 207, 207, 0.2)
+}
+
/* -- code displays --------------------------------------------------------- */
pre {
@@ -756,6 +776,7 @@ span.pre {
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
+ white-space: nowrap;
}
div[class*="highlight-"] {
diff --git a/docs/_static/debug.css b/docs/_static/debug.css
new file mode 100644
index 000000000..74d4aec33
--- /dev/null
+++ b/docs/_static/debug.css
@@ -0,0 +1,69 @@
+/*
+ This CSS file should be overridden by the theme authors. It's
+ meant for debugging and developing the skeleton that this theme provides.
+*/
+body {
+ font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
+ "Apple Color Emoji", "Segoe UI Emoji";
+ background: lavender;
+}
+.sb-announcement {
+ background: rgb(131, 131, 131);
+}
+.sb-announcement__inner {
+ background: black;
+ color: white;
+}
+.sb-header {
+ background: lightskyblue;
+}
+.sb-header__inner {
+ background: royalblue;
+ color: white;
+}
+.sb-header-secondary {
+ background: lightcyan;
+}
+.sb-header-secondary__inner {
+ background: cornflowerblue;
+ color: white;
+}
+.sb-sidebar-primary {
+ background: lightgreen;
+}
+.sb-main {
+ background: blanchedalmond;
+}
+.sb-main__inner {
+ background: antiquewhite;
+}
+.sb-header-article {
+ background: lightsteelblue;
+}
+.sb-article-container {
+ background: snow;
+}
+.sb-article-main {
+ background: white;
+}
+.sb-footer-article {
+ background: lightpink;
+}
+.sb-sidebar-secondary {
+ background: lightgoldenrodyellow;
+}
+.sb-footer-content {
+ background: plum;
+}
+.sb-footer-content__inner {
+ background: palevioletred;
+}
+.sb-footer {
+ background: pink;
+}
+.sb-footer__inner {
+ background: salmon;
+}
+.sb-article {
+ background: white;
+}
diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js
index 8cbf1b161..d06a71d75 100644
--- a/docs/_static/doctools.js
+++ b/docs/_static/doctools.js
@@ -2,322 +2,155 @@
* doctools.js
* ~~~~~~~~~~~
*
- * Sphinx JavaScript utilities for all documentation.
+ * Base JavaScript utilities for all Sphinx HTML documentation.
*
- * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
-
-/**
- * select a different prefix for underscore
- */
-$u = _.noConflict();
-
-/**
- * make the code below compatible with browsers without
- * an installed firebug like debugger
-if (!window.console || !console.firebug) {
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
- "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
- "profile", "profileEnd"];
- window.console = {};
- for (var i = 0; i < names.length; ++i)
- window.console[names[i]] = function() {};
-}
- */
-
-/**
- * small helper function to urldecode strings
- *
- * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
- */
-jQuery.urldecode = function(x) {
- if (!x) {
- return x
- }
- return decodeURIComponent(x.replace(/\+/g, ' '));
-};
-
-/**
- * small helper function to urlencode strings
- */
-jQuery.urlencode = encodeURIComponent;
-
-/**
- * This function returns the parsed url parameters of the
- * current request. Multiple values per key are supported,
- * it will always return arrays of strings for the value parts.
- */
-jQuery.getQueryParameters = function(s) {
- if (typeof s === 'undefined')
- s = document.location.search;
- var parts = s.substr(s.indexOf('?') + 1).split('&');
- var result = {};
- for (var i = 0; i < parts.length; i++) {
- var tmp = parts[i].split('=', 2);
- var key = jQuery.urldecode(tmp[0]);
- var value = jQuery.urldecode(tmp[1]);
- if (key in result)
- result[key].push(value);
- else
- result[key] = [value];
+"use strict";
+
+const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
+ "TEXTAREA",
+ "INPUT",
+ "SELECT",
+ "BUTTON",
+]);
+
+const _ready = (callback) => {
+ if (document.readyState !== "loading") {
+ callback();
+ } else {
+ document.addEventListener("DOMContentLoaded", callback);
}
- return result;
};
-/**
- * highlight a given string on a jquery object by wrapping it in
- * span elements with the given class name.
- */
-jQuery.fn.highlightText = function(text, className) {
- function highlight(node, addItems) {
- if (node.nodeType === 3) {
- var val = node.nodeValue;
- var pos = val.toLowerCase().indexOf(text);
- if (pos >= 0 &&
- !jQuery(node.parentNode).hasClass(className) &&
- !jQuery(node.parentNode).hasClass("nohighlight")) {
- var span;
- var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
- if (isInSVG) {
- span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- } else {
- span = document.createElement("span");
- span.className = className;
- }
- span.appendChild(document.createTextNode(val.substr(pos, text.length)));
- node.parentNode.insertBefore(span, node.parentNode.insertBefore(
- document.createTextNode(val.substr(pos + text.length)),
- node.nextSibling));
- node.nodeValue = val.substr(0, pos);
- if (isInSVG) {
- var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
- var bbox = node.parentElement.getBBox();
- rect.x.baseVal.value = bbox.x;
- rect.y.baseVal.value = bbox.y;
- rect.width.baseVal.value = bbox.width;
- rect.height.baseVal.value = bbox.height;
- rect.setAttribute('class', className);
- addItems.push({
- "parent": node.parentNode,
- "target": rect});
- }
- }
- }
- else if (!jQuery(node).is("button, select, textarea")) {
- jQuery.each(node.childNodes, function() {
- highlight(this, addItems);
- });
- }
- }
- var addItems = [];
- var result = this.each(function() {
- highlight(this, addItems);
- });
- for (var i = 0; i < addItems.length; ++i) {
- jQuery(addItems[i].parent).before(addItems[i].target);
- }
- return result;
-};
-
-/*
- * backward compatibility for jQuery.browser
- * This will be supported until firefox bug is fixed.
- */
-if (!jQuery.browser) {
- jQuery.uaMatch = function(ua) {
- ua = ua.toLowerCase();
-
- var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
- /(webkit)[ \/]([\w.]+)/.exec(ua) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
- /(msie) ([\w.]+)/.exec(ua) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
- [];
-
- return {
- browser: match[ 1 ] || "",
- version: match[ 2 ] || "0"
- };
- };
- jQuery.browser = {};
- jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
-}
-
/**
* Small JavaScript module for the documentation.
*/
-var Documentation = {
-
- init : function() {
- this.fixFirefoxAnchorBug();
- this.highlightSearchWords();
- this.initIndexTable();
- if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
- this.initOnKeyListeners();
- }
+const Documentation = {
+ init: () => {
+ Documentation.initDomainIndexTable();
+ Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
- TRANSLATIONS : {},
- PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
- LOCALE : 'unknown',
+ TRANSLATIONS: {},
+ PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
+ LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
- gettext : function(string) {
- var translated = Documentation.TRANSLATIONS[string];
- if (typeof translated === 'undefined')
- return string;
- return (typeof translated === 'string') ? translated : translated[0];
+ gettext: (string) => {
+ const translated = Documentation.TRANSLATIONS[string];
+ switch (typeof translated) {
+ case "undefined":
+ return string; // no translation
+ case "string":
+ return translated; // translation exists
+ default:
+ return translated[0]; // (singular, plural) translation tuple exists
+ }
},
- ngettext : function(singular, plural, n) {
- var translated = Documentation.TRANSLATIONS[singular];
- if (typeof translated === 'undefined')
- return (n == 1) ? singular : plural;
- return translated[Documentation.PLURALEXPR(n)];
+ ngettext: (singular, plural, n) => {
+ const translated = Documentation.TRANSLATIONS[singular];
+ if (typeof translated !== "undefined")
+ return translated[Documentation.PLURAL_EXPR(n)];
+ return n === 1 ? singular : plural;
},
- addTranslations : function(catalog) {
- for (var key in catalog.messages)
- this.TRANSLATIONS[key] = catalog.messages[key];
- this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
- this.LOCALE = catalog.locale;
+ addTranslations: (catalog) => {
+ Object.assign(Documentation.TRANSLATIONS, catalog.messages);
+ Documentation.PLURAL_EXPR = new Function(
+ "n",
+ `return (${catalog.plural_expr})`
+ );
+ Documentation.LOCALE = catalog.locale;
},
/**
- * add context elements like header anchor links
+ * helper function to focus on search bar
*/
- addContextElements : function() {
- $('div[id] > :header:first').each(function() {
- $('').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this headline')).
- appendTo(this);
- });
- $('dt[id]').each(function() {
- $('').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this definition')).
- appendTo(this);
- });
+ focusSearchBar: () => {
+ document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
- * workaround a firefox stupidity
- * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+ * Initialise the domain index toggle buttons
*/
- fixFirefoxAnchorBug : function() {
- if (document.location.hash && $.browser.mozilla)
- window.setTimeout(function() {
- document.location.href += '';
- }, 10);
- },
-
- /**
- * highlight the search words provided in the url in the text
- */
- highlightSearchWords : function() {
- var params = $.getQueryParameters();
- var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
- if (terms.length) {
- var body = $('div.body');
- if (!body.length) {
- body = $('body');
+ initDomainIndexTable: () => {
+ const toggler = (el) => {
+ const idNumber = el.id.substr(7);
+ const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
+ if (el.src.substr(-9) === "minus.png") {
+ el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
+ toggledRows.forEach((el) => (el.style.display = "none"));
+ } else {
+ el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
+ toggledRows.forEach((el) => (el.style.display = ""));
}
- window.setTimeout(function() {
- $.each(terms, function() {
- body.highlightText(this.toLowerCase(), 'highlighted');
- });
- }, 10);
- $('' + _('Hide Search Matches') + '
')
- .appendTo($('#searchbox'));
- }
- },
-
- /**
- * init the domain index toggle buttons
- */
- initIndexTable : function() {
- var togglers = $('img.toggler').click(function() {
- var src = $(this).attr('src');
- var idnum = $(this).attr('id').substr(7);
- $('tr.cg-' + idnum).toggle();
- if (src.substr(-9) === 'minus.png')
- $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
- else
- $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
- }).css('display', '');
- if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
- togglers.click();
- }
- },
+ };
- /**
- * helper function to hide the search marks again
- */
- hideSearchWords : function() {
- $('#searchbox .highlight-link').fadeOut(300);
- $('span.highlighted').removeClass('highlighted');
+ const togglerElements = document.querySelectorAll("img.toggler");
+ togglerElements.forEach((el) =>
+ el.addEventListener("click", (event) => toggler(event.currentTarget))
+ );
+ togglerElements.forEach((el) => (el.style.display = ""));
+ if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
- /**
- * make the url absolute
- */
- makeURL : function(relativeURL) {
- return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
- },
-
- /**
- * get the current relative url
- */
- getCurrentURL : function() {
- var path = document.location.pathname;
- var parts = path.split(/\//);
- $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
- if (this === '..')
- parts.pop();
- });
- var url = parts.join('/');
- return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
- },
-
- initOnKeyListeners: function() {
- $(document).keydown(function(event) {
- var activeElementType = document.activeElement.tagName;
- // don't navigate when in search box, textarea, dropdown or button
- if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
- && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
- && !event.shiftKey) {
- switch (event.keyCode) {
- case 37: // left
- var prevHref = $('link[rel="prev"]').prop('href');
- if (prevHref) {
- window.location.href = prevHref;
- return false;
+ initOnKeyListeners: () => {
+ // only install a listener if it is really needed
+ if (
+ !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
+ !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
+ )
+ return;
+
+ document.addEventListener("keydown", (event) => {
+ // bail for input elements
+ if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+ // bail with special keys
+ if (event.altKey || event.ctrlKey || event.metaKey) return;
+
+ if (!event.shiftKey) {
+ switch (event.key) {
+ case "ArrowLeft":
+ if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+ const prevLink = document.querySelector('link[rel="prev"]');
+ if (prevLink && prevLink.href) {
+ window.location.href = prevLink.href;
+ event.preventDefault();
}
break;
- case 39: // right
- var nextHref = $('link[rel="next"]').prop('href');
- if (nextHref) {
- window.location.href = nextHref;
- return false;
+ case "ArrowRight":
+ if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
+
+ const nextLink = document.querySelector('link[rel="next"]');
+ if (nextLink && nextLink.href) {
+ window.location.href = nextLink.href;
+ event.preventDefault();
}
break;
}
}
+
+ // some keyboard layouts may need Shift to get /
+ switch (event.key) {
+ case "/":
+ if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
+ Documentation.focusSearchBar();
+ event.preventDefault();
+ }
});
- }
+ },
};
// quick alias for translations
-_ = Documentation.gettext;
+const _ = Documentation.gettext;
-$(document).ready(function() {
- Documentation.init();
-});
+_ready(Documentation.init);
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
index e11666a16..2bdb7310b 100644
--- a/docs/_static/documentation_options.js
+++ b/docs/_static/documentation_options.js
@@ -1,6 +1,5 @@
-var DOCUMENTATION_OPTIONS = {
- URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '2.2.2',
+const DOCUMENTATION_OPTIONS = {
+ VERSION: '2.2.3',
LANGUAGE: 'en, zh-CN',
COLLAPSE_INDEX: false,
BUILDER: 'html',
@@ -8,5 +7,7 @@ var DOCUMENTATION_OPTIONS = {
LINK_SUFFIX: '.html',
HAS_SOURCE: false,
SOURCELINK_SUFFIX: '.txt',
- NAVIGATION_WITH_KEYS: false
+ NAVIGATION_WITH_KEYS: false,
+ SHOW_SEARCH_SUMMARY: true,
+ ENABLE_SEARCH_SHORTCUTS: true,
};
\ No newline at end of file
diff --git a/docs/_static/jquery-3.5.1.js b/docs/_static/jquery-3.5.1.js
deleted file mode 100644
index 50937333b..000000000
--- a/docs/_static/jquery-3.5.1.js
+++ /dev/null
@@ -1,10872 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.5.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2020-05-04T22:49Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var flat = arr.flat ? function( array ) {
- return arr.flat.call( array );
-} : function( array ) {
- return arr.concat.apply( [], array );
-};
-
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML