diff --git a/README.md b/README.md index 5bf8cdd6..0c423eab 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Add the following artifact to your `pom.xml`: com.spotify voyager - 2.0.4 + 2.1.0 ``` You can find the latest version on [Voyager's Releases page](https://github.com/spotify/voyager/releases). @@ -43,7 +43,7 @@ You can find the latest version on [Voyager's Releases page](https://github.com/ Add the following artifact to your `build.sbt`: ```sbt -"com.spotify" % "voyager" % "2.0.4" +"com.spotify" % "voyager" % "2.1.0" ``` You can find the latest version on [Voyager's Releases page](https://github.com/spotify/voyager/releases). diff --git a/docs/java/allclasses-frame.html b/docs/java/allclasses-frame.html new file mode 100644 index 00000000..83e1a6c9 --- /dev/null +++ b/docs/java/allclasses-frame.html @@ -0,0 +1,28 @@ + + + + + + +All Classes (voyager 2.1.0 API) + + + + + +

All Classes

+
+ +
+ + diff --git a/docs/java/allclasses-index.html b/docs/java/allclasses-index.html index c9bd72ac..15f7744d 100644 --- a/docs/java/allclasses-index.html +++ b/docs/java/allclasses-index.html @@ -1,217 +1,112 @@ - - + - -All Classes (voyager 2.0.9 API) + +All Classes and Interfaces (voyager 2.1.0 API) + - + + + - + - - - - - + + - - -
+
+ +
-

All Classes

-
-
- +
+
+
- - - -

Copyright © 2024. All rights reserved.

- diff --git a/docs/java/allclasses.html b/docs/java/allclasses-noframe.html similarity index 62% rename from docs/java/allclasses.html rename to docs/java/allclasses-noframe.html index dfd02a61..f4f9f0f7 100644 --- a/docs/java/allclasses.html +++ b/docs/java/allclasses-noframe.html @@ -1,25 +1,15 @@ - + - + - -All Classes (voyager 2.0.9 API) + - +All Classes (voyager 2.1.0 API) + - - - - - - - -

All Classes

-
diff --git a/docs/java/allpackages-index.html b/docs/java/allpackages-index.html index be18550c..4bc16f7f 100644 --- a/docs/java/allpackages-index.html +++ b/docs/java/allpackages-index.html @@ -1,181 +1,80 @@ - - + - -All Packages (voyager 2.0.9 API) + +All Packages (voyager 2.1.0 API) + - + + + - + - - - - - + + - - -
+
+ +

All Packages

-
- +
+ +
 
+ +
 
- - - -

Copyright © 2024. All rights reserved.

- diff --git a/docs/java/apidocs/allclasses-index.html b/docs/java/apidocs/allclasses-index.html deleted file mode 100644 index 7c6dea9d..00000000 --- a/docs/java/apidocs/allclasses-index.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -All Classes and Interfaces (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

All Classes and Interfaces

-
-
-
-
-
-
Class
-
Description
- -
-
A Voyager index, providing storage of floating-point vectors and the ability to efficiently - search among those vectors.
-
- -
-
A container for query results, returned by Index.
-
- -
-
The space, also known as distance metric, to use when searching.
-
- -
-
The datatype used to use when storing vectors on disk.
-
- -
 
- -
-
An exception indicating that the desired recall of a query cannot be achieved
-
- -
-
Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID - to a provided String.
-
- -
-
A wrapper class for nearest neighbor query results.
-
- -
-
A dependency-free, super tiny JSON serde class that only supports reading and writing lists of - strings.
-
-
-
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/allpackages-index.html b/docs/java/apidocs/allpackages-index.html deleted file mode 100644 index a2421b14..00000000 --- a/docs/java/apidocs/allpackages-index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - -All Packages (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

All Packages

-
-
Package Summary
-
-
Package
-
Description
- -
-
Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data.
-
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
- -
 
- -
 
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/Index.QueryResults.html b/docs/java/apidocs/com/spotify/voyager/jni/Index.QueryResults.html deleted file mode 100644 index 1c450f9a..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/Index.QueryResults.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - -Index.QueryResults (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class Index.QueryResults

-
-
java.lang.Object -
com.spotify.voyager.jni.Index.QueryResults
-
-
-
-
Enclosing class:
-
Index
-
-
-
public static class Index.QueryResults -extends Object
-
A container for query results, returned by Index. Note that this class is instantiated from - C++, and as such, any changes to its location, visibility, or constructor will need to include - corresponding C++ changes.
-
-
-
    - -
  • -
    -

    Field Summary

    -
    Fields
    -
    -
    Modifier and Type
    -
    Field
    -
    Description
    -
    final float[]
    - -
    -
    A list of distances from each item ID to the query vector for this query.
    -
    -
    final long[]
    - -
    -
    A list of item IDs ("labels").
    -
    -
    -
    -
  • - -
  • -
    -

    Constructor Summary

    -
    Constructors
    -
    -
    Constructor
    -
    Description
    -
    QueryResults(long[] labels, - float[] distances)
    -
    -
    Instantiates a new QueryResults object, provided two identical-length arrays of labels and - their corresponding distances.
    -
    -
    -
    -
  • - -
  • -
    -

    Method Summary

    -
    -
    -
    -
    -
    Modifier and Type
    -
    Method
    -
    Description
    -
    float[]
    - -
    -
    Retrieve the list of distances between query vectors and item vectors for the results of this - query.
    -
    -
    long[]
    - -
    -
    Retrieve the list of item IDs ("labels") returned by this query.
    -
    - - -
     
    -
    -
    -
    -
    -

    Methods inherited from class java.lang.Object

    -clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    -
    -
  • -
-
-
-
    - -
  • -
    -

    Field Details

    -
      -
    • -
      -

      labels

      -
      public final long[] labels
      -
      A list of item IDs ("labels").
      -
      -
    • -
    • -
      -

      distances

      -
      public final float[] distances
      -
      A list of distances from each item ID to the query vector for this query.
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      QueryResults

      -
      public QueryResults(long[] labels, - float[] distances)
      -
      Instantiates a new QueryResults object, provided two identical-length arrays of labels and - their corresponding distances. This method should probably not be used directly, as this - class is primarily used as a return type from the query method on Index.
      -
      -
      Throws:
      -
      IllegalArgumentException - if the length of the labels and distances arrays vary
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class Object
      -
      -
      -
    • -
    • -
      -

      getLabels

      -
      public long[] getLabels()
      -
      Retrieve the list of item IDs ("labels") returned by this query. This array is sorted by - distance: the first item is the closest to the query vector, the second is second-closest, - and so on. The items in this array correspond 1:1 with the distances returned by - getDistances().
      -
      -
    • -
    • -
      -

      getDistances

      -
      public float[] getDistances()
      -
      Retrieve the list of distances between query vectors and item vectors for the results of this - query. This array is sorted by distance: the first distance corresponds with the item the - closest to the query vector, the second is second-closest, and so on. The items in this array - correspond 1:1 with the labels returned by getLabels().
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/Index.SpaceType.html b/docs/java/apidocs/com/spotify/voyager/jni/Index.SpaceType.html deleted file mode 100644 index bd7299ba..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/Index.SpaceType.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - -Index.SpaceType (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Enum Index.SpaceType

-
-
java.lang.Object -
java.lang.Enum<Index.SpaceType> -
com.spotify.voyager.jni.Index.SpaceType
-
-
-
-
-
All Implemented Interfaces:
-
Serializable, Comparable<Index.SpaceType>
-
-
-
Enclosing class:
-
Index
-
-
-
public static enum Index.SpaceType -extends Enum<Index.SpaceType>
-
The space, also known as distance metric, to use when searching. - -

SpaceType is a property of an Index, and cannot be changed after instantiation. Loading an - index with a different SpaceType than it was created with may result in nonsensical results - being returned.

-
-
- -
-
-
    - -
  • -
    -

    Enum Constant Details

    -
      -
    • -
      -

      Euclidean

      -
      public static final Index.SpaceType Euclidean
      -
      Euclidean distance, also known as L2 distance. Computed by taking the square root of - the sum of squared differences between each element of each vector.
      -
      -
    • -
    • -
      -

      InnerProduct

      -
      public static final Index.SpaceType InnerProduct
      -
      Inner (dot) product. Computed by taking the sum of the products of each element of each - vector. Since v2.0, this is implemented using the order preserving transform defined in this - paper from Microsoft: - https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/XboxInnerProduct.pdf
      -
      -
    • -
    • -
      -

      Cosine

      -
      public static final Index.SpaceType Cosine
      -
      Cosine distance; i.e. normalized dot product. Computed by taking the sum of the products of - each element of each vector, divided by the product of the magnitudes of each vector.
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      values

      -
      public static Index.SpaceType[] values()
      -
      Returns an array containing the constants of this enum type, in -the order they are declared.
      -
      -
      Returns:
      -
      an array containing the constants of this enum type, in the order they are declared
      -
      -
      -
    • -
    • -
      -

      valueOf

      -
      public static Index.SpaceType valueOf(String name)
      -
      Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
      -
      -
      Parameters:
      -
      name - the name of the enum constant to be returned.
      -
      Returns:
      -
      the enum constant with the specified name
      -
      Throws:
      -
      IllegalArgumentException - if this enum type has no constant with the specified name
      -
      NullPointerException - if the argument is null
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/Index.StorageDataType.html b/docs/java/apidocs/com/spotify/voyager/jni/Index.StorageDataType.html deleted file mode 100644 index c9ee9d21..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/Index.StorageDataType.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - -Index.StorageDataType (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Enum Index.StorageDataType

-
-
java.lang.Object -
java.lang.Enum<Index.StorageDataType> -
com.spotify.voyager.jni.Index.StorageDataType
-
-
-
-
-
All Implemented Interfaces:
-
Serializable, Comparable<Index.StorageDataType>
-
-
-
Enclosing class:
-
Index
-
-
-
public static enum Index.StorageDataType -extends Enum<Index.StorageDataType>
-
The datatype used to use when storing vectors on disk. Affects both precision and memory usage.
-
-
- -
-
-
    - -
  • -
    -

    Enum Constant Details

    -
      -
    • -
      -

      Float8

      -
      public static final Index.StorageDataType Float8
      -
      An 8-bit floating point data type that expects all values to be on [-1, 1]. This data type - provides adequate precision for many use cases, but cuts down memory usage bu a factor of 4x - compared to Float32, while also increasing query speed. - -

      Float8 provides 8 bits of resolution; i.e.: the distance between successive values is - 1/127, or 0.00787. For a variable-precision (i.e.: _actually_ floating point) representation, - use E4M3.

      -
      -
    • -
    • -
      -

      Float32

      -
      public static final Index.StorageDataType Float32
      -
      A 32-bit floating point ("Float") data type. The default.
      -
      -
    • -
    • -
      -

      E4M3

      -
      public static final Index.StorageDataType E4M3
      -
      A custom 8-bit floating point data type with range [-448, 448] and variable precision. Use - this data type to get 4x less memory usage compared to Float32, but when the values of - vectors to be stored in an Index may exceed [-1, 1]. - -

      E4M3 uses a 4-bit exponent and 3-bit mantissa field, and was inspired by the paper "FP8 - Formats for Deep Learning" by Micikevicus et al (arXiv:2209.05433). - -

      Note that using E4M3 with the Cosine space may result in negative distances at query time - due to reduced floating-point precision. While confusing, the query results are still - correctly ordered.

      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      values

      -
      public static Index.StorageDataType[] values()
      -
      Returns an array containing the constants of this enum type, in -the order they are declared.
      -
      -
      Returns:
      -
      an array containing the constants of this enum type, in the order they are declared
      -
      -
      -
    • -
    • -
      -

      valueOf

      -
      public static Index.StorageDataType valueOf(String name)
      -
      Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
      -
      -
      Parameters:
      -
      name - the name of the enum constant to be returned.
      -
      Returns:
      -
      the enum constant with the specified name
      -
      Throws:
      -
      IllegalArgumentException - if this enum type has no constant with the specified name
      -
      NullPointerException - if the argument is null
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/Index.html b/docs/java/apidocs/com/spotify/voyager/jni/Index.html deleted file mode 100644 index 4de185d9..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/Index.html +++ /dev/null @@ -1,1035 +0,0 @@ - - - - -Index (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class Index

-
-
java.lang.Object -
com.spotify.voyager.jni.Index
-
-
-
-
All Implemented Interfaces:
-
Closeable, AutoCloseable
-
-
-
public class Index -extends Object -implements Closeable
-
A Voyager index, providing storage of floating-point vectors and the ability to efficiently - search among those vectors. - -

A brief example of how to use Index: - -

-   // Create a new Index that compares 4-dimensional vectors via Euclidean distance:
-   Index index = new Index(Index.SpaceType.Euclidean, 4);
-
-   // Add some data to the index:
-   index.addItem(new float[]{1.0f, 2.0f, 3.0f, 4.0f});
-   index.addItem(new float[]{2.0f, 3.0f, 4.0f, 5.0f});
-
-   // Query the index to return the `k` nearest neighbors of a given vector:
-   Index.QueryResults results = index.query(new float[]{3.0f, 4.0f, 5.0f, 6.0f}, 1);
-
-   // Our query will return the 1th (second) item that was added, as it's the closest:
-   assert(results.getLabels()[0] == 1);
-
-   // Serialize this index to use it again later:
-   index.saveIndex("my_tiny_index.voy");
- 
-
-
-
    - -
  • -
    -

    Nested Class Summary

    -
    Nested Classes
    -
    -
    Modifier and Type
    -
    Class
    -
    Description
    -
    static class 
    - -
    -
    A container for query results, returned by Index.
    -
    -
    static enum 
    - -
    -
    The space, also known as distance metric, to use when searching.
    -
    -
    static enum 
    - -
    -
    The datatype used to use when storing vectors on disk.
    -
    -
    -
    -
  • - -
  • -
    -

    Constructor Summary

    -
    Constructors
    -
    -
    Constructor
    -
    Description
    -
    Index(Index.SpaceType space, - int numDimensions)
    -
    -
    Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
    -
    -
    Index(Index.SpaceType space, - int numDimensions, - long indexM, - long efConstruction, - long randomSeed, - long maxElements, - Index.StorageDataType storageDataType)
    -
    -
    Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
    -
    -
    -
    -
  • - -
  • -
    -

    Method Summary

    -
    -
    -
    -
    -
    Modifier and Type
    -
    Method
    -
    Description
    -
    long
    -
    addItem(float[] vector)
    -
    -
    Add an item (a vector) to this Index.
    -
    -
    long
    -
    addItem(float[] vector, - long id)
    -
    -
    Add an item (a vector) to this Index with the provided identifier.
    -
    -
    long[]
    -
    addItems(float[][] vectors, - int numThreads)
    -
    -
    Add multiple items (vectors) to this Index.
    -
    -
    long[]
    -
    addItems(float[][] vectors, - long[] ids, - int numThreads)
    -
    -
    Add multiple items (vectors) to this Index with the provided identifiers.
    -
    -
    byte[]
    - -
    -
    Returns the contents of this index as an array of bytes.
    -
    -
    void
    - -
    -
    Close this Index and release any memory held by it.
    -
    -
    protected void
    - -
     
    -
    int
    - -
    -
    Get the default EF ("query search depth") that will be uses when query(float[], int) is called.
    -
    -
    long
    - -
    -
    Get the EF Construction value used when adding new elements to this Index.
    -
    -
    long[]
    - -
    -
    Get the list of identifiers currently stored by this index.
    -
    -
    long
    - -
    -
    Get the M value used when adding new elements to this Index.
    -
    -
    long
    - -
    -
    Get the maximum number of elements currently storable by this Index.
    -
    -
    int
    - -
    -
    Get the number of dimensions used in this Index.
    -
    -
    long
    - -
    -
    Get the number of elements currently in this Index.
    -
    -
    int
    - -
    -
    Get the default number of threads used when adding multiple vectors in bulk oor when querying - for multiple vectors simultaneously.
    -
    - - -
    -
    Get the Index.SpaceType that this Index uses to store and compare vectors.
    -
    -
    float[]
    -
    getVector(long id)
    -
    -
    Get the vector for the provided identifier.
    -
    -
    float[][]
    -
    getVectors(long[] ids)
    -
    -
    Get the vectors for a provided array of identifiers.
    -
    -
    static Index
    -
    load(InputStream inputStream)
    -
    -
    Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
    -
    -
    static Index
    -
    load(InputStream inputStream, - Index.SpaceType space, - int numDimensions, - Index.StorageDataType storageDataType)
    -
    -
    Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
    -
    -
    static Index
    -
    load(String filename)
    -
    -
    Load a Voyager index file and create a new Index initialized with the data in that - file.
    -
    -
    static Index
    -
    load(String filename, - Index.SpaceType space, - int numDimensions, - Index.StorageDataType storageDataType)
    -
    -
    Load a Voyager index file and create a new Index initialized with the data in that - file.
    -
    -
    void
    -
    markDeleted(long label)
    -
    -
    Mark an element of the index as deleted.
    -
    - -
    query(float[][] queryVectors, - int k, - int numThreads)
    -
    -
    Query this Index for approximate nearest neighbors of multiple query vectors.
    -
    - -
    query(float[][] queryVectors, - int k, - int numThreads, - long queryEf)
    -
    -
    Query this Index for approximate nearest neighbors of multiple query vectors.
    -
    - -
    query(float[] queryVector, - int k)
    -
    -
    Query this Index for approximate nearest neighbors of a single query vector.
    -
    - -
    query(float[] queryVector, - int k, - long queryEf)
    -
    -
    Query this Index for approximate nearest neighbors of a single query vector.
    -
    -
    void
    -
    resizeIndex(long newSize)
    -
    -
    Change the maximum number of elements currently storable by this Index.
    -
    -
    void
    -
    saveIndex(OutputStream outputStream)
    -
    -
    Save this Index to the provided output stream.
    -
    -
    void
    -
    saveIndex(String pathToIndex)
    -
    -
    Save this Index to a file at the provided filename.
    -
    -
    void
    -
    setEf(long ef)
    -
    -
    Set the default EF ("query search depth") to use when query(float[], int) is called.
    -
    -
    void
    -
    setNumThreads(int numThreads)
    -
    -
    Set the default number of threads to use when adding multiple vectors in bulk, or when querying - for multiple vectors simultaneously.
    -
    -
    void
    -
    unmarkDeleted(long label)
    -
    -
    Un-mark an element of the index as deleted, making it available again.
    -
    -
    -
    -
    -
    -

    Methods inherited from class java.lang.Object

    -clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -
    -
  • -
-
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      Index

      -
      public Index(Index.SpaceType space, - int numDimensions)
      -
      Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
      -
      -
      Parameters:
      -
      space - the space type to use when storing and comparing vectors.
      -
      numDimensions - the number of dimensions per vector.
      -
      -
      -
    • -
    • -
      -

      Index

      -
      public Index(Index.SpaceType space, - int numDimensions, - long indexM, - long efConstruction, - long randomSeed, - long maxElements, - Index.StorageDataType storageDataType)
      -
      Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
      -
      -
      Parameters:
      -
      space - The space type to use when storing and comparing vectors.
      -
      numDimensions - The number of dimensions per vector.
      -
      indexM - Controls the degree of interconnectedness between vectors. Higher values of - M provide better recall (i.e. higher quality) but use more memory.
      -
      efConstruction - Controls index quality, affecting the speed of addItem calls. - Does not affect memory usage or size of the index.
      -
      randomSeed - A random seed to use when initializing the index's internal data structures.
      -
      maxElements - The maximum number of elements that this index can hold. This is a - performance optimization; if the index contains this number of elements and addItem(float[]) or addItems(float[][], int) is called, the index's capacity will automatically - expanded to fit the new elements. Setting maxElements in advance helps avoid these - expensive resize operations if the number of elements to be added is already known.
      -
      storageDataType - The datatype to use under-the-hood when storing vectors. Different data - type options trade off precision for memory usage and query speed; see Index.StorageDataType for available data types.
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      load

      -
      public static Index load(String filename, - Index.SpaceType space, - int numDimensions, - Index.StorageDataType storageDataType)
      -
      Load a Voyager index file and create a new Index initialized with the data in that - file.
      -
      -
      Parameters:
      -
      filename - A filename to load.
      -
      space - The Index.SpaceType to use when loading the index.
      -
      numDimensions - The number of dimensions per vector.
      -
      storageDataType - The Index.StorageDataType used by the index being loaded.
      -
      Returns:
      -
      An Index whose contents have been initialized with the data provided by the - file.
      -
      Throws:
      -
      RuntimeException - if the index cannot be loaded from the file, or the file contains - invalid data.
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static Index load(String filename)
      -
      Load a Voyager index file and create a new Index initialized with the data in that - file.
      -
      -
      Parameters:
      -
      filename - A filename to load.
      -
      Returns:
      -
      An Index whose contents have been initialized with the data provided by the - file.
      -
      Throws:
      -
      RuntimeException - if the index cannot be loaded from the file, the file contains invalid - data, or the file contains an older version of the Voyager file format that requires - additional arguments to be provided.
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static Index load(InputStream inputStream, - Index.SpaceType space, - int numDimensions, - Index.StorageDataType storageDataType)
      -
      Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
      -
      -
      Parameters:
      -
      inputStream - A InputStream that will provide the contents of a Voyager - index.
      -
      space - The Index.SpaceType to use when loading the index.
      -
      numDimensions - The number of dimensions per vector.
      -
      storageDataType - The Index.StorageDataType used by the index being loaded.
      -
      Returns:
      -
      An Index whose contents have been initialized with the data provided by the - input stream.
      -
      Throws:
      -
      RuntimeException - if the index cannot be loaded from the stream, or the stream contains - invalid data.
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static Index load(InputStream inputStream)
      -
      Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
      -
      -
      Parameters:
      -
      inputStream - A InputStream that will provide the contents of a Voyager - index.
      -
      Returns:
      -
      An Index whose contents have been initialized with the data provided by the - input stream.
      -
      Throws:
      -
      RuntimeException - if the index cannot be loaded from the stream, or the stream contains - invalid data, or the file contains an older version of the Voyager file format that - requires additional arguments to be provided.
      -
      -
      -
    • -
    • -
      -

      close

      -
      public void close() - throws IOException
      -
      Close this Index and release any memory held by it. Note that this method must be - called to release the memory backing this Index; failing to do so may cause a memory - leak. - -

      Any calls to methods after close() is called will fail, as the underlying - native C++ object will have been deallocated.

      -
      -
      Specified by:
      -
      close in interface AutoCloseable
      -
      Specified by:
      -
      close in interface Closeable
      -
      Throws:
      -
      IOException - if the C++ destructor fails.
      -
      -
      -
    • -
    • -
      -

      finalize

      -
      protected void finalize() - throws Throwable
      -
      -
      Overrides:
      -
      finalize in class Object
      -
      Throws:
      -
      Throwable
      -
      -
      -
    • -
    • -
      -

      setEf

      -
      public void setEf(long ef)
      -
      Set the default EF ("query search depth") to use when query(float[], int) is called.
      -
      -
      Parameters:
      -
      ef - The new default EF value to use. This value can be overridden on a per-query basis at - query time.
      -
      -
      -
    • -
    • -
      -

      getEf

      -
      public int getEf()
      -
      Get the default EF ("query search depth") that will be uses when query(float[], int) is called.
      -
      -
      Returns:
      -
      The current default EF value, used by the Index if no value is provided at - query time.
      -
      -
      -
    • -
    • -
      -

      getSpace

      -
      public Index.SpaceType getSpace()
      -
      Get the Index.SpaceType that this Index uses to store and compare vectors.
      -
      -
      Returns:
      -
      The Index.SpaceType that is currently used by this Index.
      -
      -
      -
    • -
    • -
      -

      getNumDimensions

      -
      public int getNumDimensions()
      -
      Get the number of dimensions used in this Index.
      -
      -
      Returns:
      -
      The number of dimensions used by this Index, and which all vectors within this - Index must have.
      -
      -
      -
    • -
    • -
      -

      setNumThreads

      -
      public void setNumThreads(int numThreads)
      -
      Set the default number of threads to use when adding multiple vectors in bulk, or when querying - for multiple vectors simultaneously.
      -
      -
      Parameters:
      -
      numThreads - The default number of threads used for bulk-add or bulk-query methods if not - overridden in each method call. Note that this affects the number of threads started for - each method call - Voyager keeps no long-lived thread pool. For maximum efficiency, pass as - much data as possible to each bulk-add or bulk-query method call to minimize overhead.
      -
      -
      -
    • -
    • -
      -

      getNumThreads

      -
      public int getNumThreads()
      -
      Get the default number of threads used when adding multiple vectors in bulk oor when querying - for multiple vectors simultaneously.
      -
      -
      Returns:
      -
      The default number of threads used for bulk-add or bulk-query methods if not overridden - in each method call.
      -
      -
      -
    • -
    • -
      -

      saveIndex

      -
      public void saveIndex(String pathToIndex)
      -
      Save this Index to a file at the provided filename. This file can be reloaded by using - Index.load(...).
      -
      -
      Parameters:
      -
      pathToIndex - The output filename to write to.
      -
      -
      -
    • -
    • -
      -

      saveIndex

      -
      public void saveIndex(OutputStream outputStream)
      -
      Save this Index to the provided output stream. The stream will not be closed automatically - be - sure to close the stream saveIndex has completed. The data written to the stream can be - reloaded by using Index.load(...).
      -
      -
      Parameters:
      -
      outputStream - The output stream to write to. This stream will not be closed - automatically.
      -
      -
      -
    • -
    • -
      -

      asBytes

      -
      public byte[] asBytes()
      -
      Returns the contents of this index as an array of bytes. The resulting bytes will contain the - same data as if this index was serialized to disk and then read back into memory again.
      -
      -
      Returns:
      -
      A -
      -invalid reference -
      byte
      -
      - array representing the contents of the index
      -
      -
      -
    • -
    • -
      -

      addItem

      -
      public long addItem(float[] vector)
      -
      Add an item (a vector) to this Index. The item will automatically be given an - identifier equal to the return value of getNumElements().
      -
      -
      Parameters:
      -
      vector - The vector to add to the index.
      -
      Returns:
      -
      The -
      -invalid reference -
      long
      -
      - ID that was assigned to this vector.
      -
      Throws:
      -
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
      -
      -
      -
    • -
    • -
      -

      addItem

      -
      public long addItem(float[] vector, - long id)
      -
      Add an item (a vector) to this Index with the provided identifier.
      -
      -
      Parameters:
      -
      vector - The vector to add to the index.
      -
      id - The 64-bit integer denoting the identifier of this vector.
      -
      Returns:
      -
      The -
      -invalid reference -
      long
      -
      - ID that was assigned to this vector.
      -
      Throws:
      -
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
      -
      -
      -
    • -
    • -
      -

      addItems

      -
      public long[] addItems(float[][] vectors, - int numThreads)
      -
      Add multiple items (vectors) to this Index.
      -
      -
      Parameters:
      -
      vectors - The vectors to add to the index.
      -
      numThreads - The number of threads to use when adding the provided vectors. If -1 (the - default), the number of CPUs available on the current machine will be used.
      -
      Returns:
      -
      The auto-generated -
      -invalid reference -
      long
      -
      - IDs that were assigned to the provided vectors, in the - same order as the provided vectors.
      -
      Throws:
      -
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
      -
      -
      -
    • -
    • -
      -

      addItems

      -
      public long[] addItems(float[][] vectors, - long[] ids, - int numThreads)
      -
      Add multiple items (vectors) to this Index with the provided identifiers.
      -
      -
      Parameters:
      -
      vectors - The vectors to add to the index.
      -
      ids - The 64-bit identifiers that correspond with each of the provided vectors.
      -
      numThreads - The number of threads to use when adding the provided vectors. If -1 (the - default), the number of CPUs available on the current machine will be used. Note that this - causes a temporary C++ thread pool to be used. Instead of calling addItems(float[][],int) in a - tight loop, consider passing more data to each addItems(float[][],int) call instead to reduce - overhead.
      -
      Returns:
      -
      The -
      -invalid reference -
      long
      -
      - IDs that were assigned to the provided vectors, in the same order as - the provided vectors.
      -
      Throws:
      -
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
      -
      RuntimeException - If the list of IDs does not have the same length as the list of - provided vectors.
      -
      -
      -
    • -
    • -
      -

      getVector

      -
      public float[] getVector(long id)
      -
      Get the vector for the provided identifier.
      -
      -
      Parameters:
      -
      id - The identifier whose vector will be fetched.
      -
      Returns:
      -
      A -
      -invalid reference -
      float
      -
      - array representing the values of the vector.
      -
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      -
      -
      -
    • -
    • -
      -

      getVectors

      -
      public float[][] getVectors(long[] ids)
      -
      Get the vectors for a provided array of identifiers.
      -
      -
      Parameters:
      -
      ids - The identifiers whose vector will be fetched.
      -
      Returns:
      -
      A nested -
      -invalid reference -
      float
      -
      - array representing the values of the vectors corresponding with - each ID.
      -
      Throws:
      -
      RuntimeException - If any of the provided identifiers are not present in the Index.
      -
      -
      -
    • -
    • -
      -

      getIDs

      -
      public long[] getIDs()
      -
      Get the list of identifiers currently stored by this index.
      -
      -
      Returns:
      -
      a -
      -invalid reference -
      long
      -
      - array of identifiers.
      -
      -
      -
    • -
    • -
      -

      query

      -
      public Index.QueryResults query(float[] queryVector, - int k)
      -
      Query this Index for approximate nearest neighbors of a single query vector.
      -
      -
      Parameters:
      -
      queryVector - A query vector to use for searching.
      -
      k - The number of nearest neighbors to return.
      -
      Returns:
      -
      A Index.QueryResults object, containing the neighbors found that are (approximately) - nearest to the query vector.
      -
      Throws:
      -
      RecallException - if fewer than k results can be found in the index.
      -
      -
      -
    • -
    • -
      -

      query

      -
      public Index.QueryResults[] query(float[][] queryVectors, - int k, - int numThreads)
      -
      Query this Index for approximate nearest neighbors of multiple query vectors.
      -
      -
      Parameters:
      -
      queryVectors - The query vectors to use for searching.
      -
      k - The number of nearest neighbors to return for each query vector
      -
      numThreads - The number of threads to use when searching. If -1, all available CPU cores - will be used. Note that passing a number of threads other than 1 will cause a temporary C++ - thread pool to be used. Instead of calling query(float[],int) in a tight loop, consider passing - more data to each call instead to reduce overhead.
      -
      Returns:
      -
      An array of Index.QueryResults objects, each containing the neighbors found that are - (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      -
      Throws:
      -
      RecallException - if fewer than k results can be found in the index for one or - more queries.
      -
      -
      -
    • -
    • -
      -

      query

      -
      public Index.QueryResults query(float[] queryVector, - int k, - long queryEf)
      -
      Query this Index for approximate nearest neighbors of a single query vector.
      -
      -
      Parameters:
      -
      queryVector - A query vector to use for searching.
      -
      k - The number of nearest neighbors to return.
      -
      queryEf - The per-query "ef" value to use. Larger values produce more accurate results at - the expense of query time.
      -
      Returns:
      -
      A Index.QueryResults object, containing the neighbors found that are (approximately) - nearest to the query vector.
      -
      Throws:
      -
      RecallException - if fewer than k results can be found in the index.
      -
      -
      -
    • -
    • -
      -

      query

      -
      public Index.QueryResults[] query(float[][] queryVectors, - int k, - int numThreads, - long queryEf)
      -
      Query this Index for approximate nearest neighbors of multiple query vectors.
      -
      -
      Parameters:
      -
      queryVectors - The query vectors to use for searching.
      -
      k - The number of nearest neighbors to return for each query vector
      -
      numThreads - The number of threads to use when searching. If -1, all available CPU cores - will be used. Note that passing a number of threads other than 1 will cause a temporary C++ - thread pool to be used. Instead of calling query(float[],int) in a tight loop, consider passing - more data to each call instead to reduce overhead.
      -
      queryEf - The per-query "ef" value to use. Larger values produce more accurate results at - the expense of query time.
      -
      Returns:
      -
      An array of Index.QueryResults objects, each containing the neighbors found that are - (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      -
      Throws:
      -
      RecallException - if fewer than k results can be found in the index for one or - more queries.
      -
      -
      -
    • -
    • -
      -

      markDeleted

      -
      public void markDeleted(long label)
      -
      Mark an element of the index as deleted. Deleted elements will be skipped when querying, but - will still be present in the index.
      -
      -
      Parameters:
      -
      label - The ID of the element to mark as deleted.
      -
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      -
      -
      -
    • -
    • -
      -

      unmarkDeleted

      -
      public void unmarkDeleted(long label)
      -
      Un-mark an element of the index as deleted, making it available again.
      -
      -
      Parameters:
      -
      label - The ID of the element to unmark as deleted.
      -
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      -
      -
      -
    • -
    • -
      -

      resizeIndex

      -
      public void resizeIndex(long newSize)
      -
      Change the maximum number of elements currently storable by this Index. This operation - reallocates the memory used by the index and can be quite slow, so it may be useful to set the - maximum number of elements in advance if that number is known.
      -
      -
      Parameters:
      -
      newSize - The new number of maximum elements to resize this Index to.
      -
      -
      -
    • -
    • -
      -

      getMaxElements

      -
      public long getMaxElements()
      -
      Get the maximum number of elements currently storable by this Index. If more elements - are added than getMaxElements(), the index will be automatically (but slowly) resized.
      -
      -
      Returns:
      -
      The number of elements (vectors) that are currently storable in this Index.
      -
      -
      -
    • -
    • -
      -

      getNumElements

      -
      public long getNumElements()
      -
      Get the number of elements currently in this Index.
      -
      -
      Returns:
      -
      The number of elements (vectors) in this Index. This count includes any deleted - elements.
      -
      -
      -
    • -
    • -
      -

      getEfConstruction

      -
      public long getEfConstruction()
      -
      Get the EF Construction value used when adding new elements to this Index.
      -
      -
      Returns:
      -
      The current EF Construction value (i.e.: the number of neighbors to search for when - adding new elements).
      -
      -
      -
    • -
    • -
      -

      getM

      -
      public long getM()
      -
      Get the M value used when adding new elements to this Index.
      -
      -
      Returns:
      -
      The current M value (i.e.: the number of links between adjacent vectors to create when - adding elements).
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.QueryResults.html b/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.QueryResults.html deleted file mode 100644 index b95aae63..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.QueryResults.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - -StringIndex.QueryResults (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class StringIndex.QueryResults

-
-
java.lang.Object -
com.spotify.voyager.jni.StringIndex.QueryResults
-
-
-
-
Enclosing class:
-
StringIndex
-
-
-
public static class StringIndex.QueryResults -extends Object
-
A wrapper class for nearest neighbor query results.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      QueryResults

      -
      public QueryResults(String[] names, - float[] distances)
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      getNames

      -
      public String[] getNames()
      -
      -
    • -
    • -
      -

      getDistances

      -
      public float[] getDistances()
      -
      -
    • -
    • -
      -

      getName

      -
      public String getName(int index)
      -
      -
    • -
    • -
      -

      getDistance

      -
      public float getDistance(int index)
      -
      -
    • -
    • -
      -

      getNumResults

      -
      public int getNumResults()
      -
      -
    • -
    • -
      -

      toString

      -
      public String toString()
      -
      -
      Overrides:
      -
      toString in class Object
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.html b/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.html deleted file mode 100644 index 5fc48a18..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/StringIndex.html +++ /dev/null @@ -1,569 +0,0 @@ - - - - -StringIndex (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class StringIndex

-
-
java.lang.Object -
com.spotify.voyager.jni.StringIndex
-
-
-
-
All Implemented Interfaces:
-
Closeable, AutoCloseable
-
-
-
public class StringIndex -extends Object -implements Closeable
-
Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID - to a provided String. - -

StringIndex can only accommodate up to 2^31 - 1 (2.1B) items, despite typical Voyager indices - allowing up to 2^63 - 1 (9e18) items.

-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      StringIndex

      -
      public StringIndex(Index.SpaceType spaceType, - int numDimensions)
      -
      Instantiate a new empty index with the specified space type and dimensionality
      -
      -
      Parameters:
      -
      spaceType - Type of space and distance calculation used when determining distance between - embeddings in the index, @see com.spotify.voyager.jni.Index.SpaceType
      -
      numDimensions - Number of dimensions of each embedding stored in the underlying HNSW index
      -
      -
      -
    • -
    • -
      -

      StringIndex

      -
      public StringIndex(Index.SpaceType spaceType, - int numDimensions, - long indexM, - long efConstruction, - long randomSeed, - long maxElements, - Index.StorageDataType storageDataType)
      -
      Instantiate an empty index with the specified index parameters
      -
      -
      Parameters:
      -
      spaceType - Type of space and distance calculation used when determining distance between - embeddings in the index, @see com.spotify.voyager.jni.Index.SpaceType
      -
      numDimensions - Number of dimensions of each embedding stored in the underlying HNSW index
      -
      indexM - Number of connections made between nodes when inserting an element into the - index. Increasing this value can improve recall at the expense of higher memory usage
      -
      efConstruction - Search depth when inserting elements into the index. Increasing this - value can improve recall (up to a point) at the cost of increased indexing time
      -
      randomSeed - Random seed used during indexing
      -
      maxElements - Initial size of the underlying HNSW index
      -
      storageDataType - Type to store the embedding values as, @see - com.spotify.voyager.jni.StorageDataType
      -
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      load

      -
      public static StringIndex load(String indexFilename, - String nameListFilename, - Index.SpaceType spaceType, - int numDimensions, - Index.StorageDataType storageDataType)
      -
      Load a previously constructed index from the provided file location. It is important that the - dimensions, space type, and storage data type provided are the same that the index was - constructed with.
      -
      -
      Parameters:
      -
      indexFilename - Filename of the underlying HNSW index
      -
      nameListFilename - Filename of the JSON encoded names list
      -
      spaceType - @see com.spotify.voyager.jni.Index.SpaceType
      -
      numDimensions - Number of dimensions of each embedding stored in the underlying HNSW index
      -
      storageDataType - @see com.spotify.voyager.jni.Index.StorageDataType
      -
      Returns:
      -
      reference to the loaded StringIndex
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static StringIndex load(InputStream indexInputStream, - InputStream nameListInputStream, - Index.SpaceType spaceType, - int numDimensions, - Index.StorageDataType storageDataType)
      -
      Load a previously constructed index from the provided input streams. It is important that the - dimensions, space type, and storage data type provided are the same that the index was - constructed with.
      -
      -
      Parameters:
      -
      indexInputStream - input stream pointing to the underlying HNSW index
      -
      nameListInputStream - input stream pointing to the JSON encoded names list
      -
      spaceType - @see com.spotify.voyager.jni.Index.SpaceType
      -
      numDimensions - Number of dimensions of each embedding stored in the underlying HNSW index
      -
      storageDataType - @see com.spotify.voyager.jni.Index.StorageDataType
      -
      Returns:
      -
      reference to the loaded StringIndex
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static StringIndex load(String indexFilename, - String nameListFilename)
      -
      Load a previously constructed index from the provided file location. The space type, - dimensions, and storage data type are read from the file metadata.
      -
      -
      Parameters:
      -
      indexFilename - Filename of the underlying HNSW index
      -
      nameListFilename - Filename of the JSON encoded names list
      -
      Returns:
      -
      reference to the loaded StringIndex
      -
      -
      -
    • -
    • -
      -

      load

      -
      public static StringIndex load(InputStream indexInputStream, - InputStream nameListInputStream)
      -
      Load a previously constructed index from the provided input stream. The space type, dimensions, - and storage data type are read from the file metadata.
      -
      -
      Parameters:
      -
      indexInputStream - input stream pointing to the underlying HNSW index
      -
      nameListInputStream - input stream pointing to the JSON encoded names list
      -
      Returns:
      -
      reference to the loaded StringIndex
      -
      -
      -
    • -
    • -
      -

      saveIndex

      -
      public void saveIndex(String outputDirectory) - throws IOException
      -
      Save the underlying index and JSON encoded name list to the provided output directory
      -
      -
      Parameters:
      -
      outputDirectory - directory to output files to
      -
      Throws:
      -
      IOException - when there is an error writing to JSON or saving to disk
      -
      -
      -
    • -
    • -
      -

      saveIndex

      -
      public void saveIndex(String outputDirectory, - String indexFilename, - String nameListFilename) - throws IOException
      -
      -
      Throws:
      -
      IOException
      -
      -
      -
    • -
    • -
      -

      saveIndex

      -
      public void saveIndex(OutputStream indexOutputStream, - OutputStream namesListOutputStream) - throws IOException
      -
      Save the underlying HNSW index and JSON encoded names list to the provided output streams
      -
      -
      Parameters:
      -
      indexOutputStream - output stream pointing to the location to save the HNSW index
      -
      namesListOutputStream - output stream pointing to the location to save the JSON names list
      -
      Throws:
      -
      IOException - when there is an error writing to JSON or the output streams
      -
      -
      -
    • -
    • -
      -

      addItem

      -
      public void addItem(String name, - float[] vector)
      -
      -
    • -
    • -
      -

      addItem

      -
      public void addItem(String name, - List<Float> vector)
      -
      -
    • -
    • -
      -

      addItems

      -
      public void addItems(Map<String,List<Float>> vectors)
      -
      -
    • -
    • -
      -

      getNumElements

      -
      public long getNumElements()
      -
      -
    • -
    • -
      -

      getVector

      -
      public float[] getVector(String name)
      -
      -
    • -
    • -
      -

      query

      -
      public StringIndex.QueryResults query(float[] queryVector, - int numNeighbors, - int ef)
      -
      Find the nearest neighbors of the provided embedding.
      -
      -
      Parameters:
      -
      queryVector - The vector to center the search around.
      -
      numNeighbors - The number of neighbors to return. The number of results returned may be - smaller than this value if the index does not contain enough items.
      -
      ef - How many neighbors to explore during search when looking for nearest neighbors. - Increasing this value can improve recall (up to a point) at the cost of increased search - latency. The minimum value of this parameter is the requested number of neighbors, and the - maximum value is the number of items in the index.
      -
      Returns:
      -
      a QueryResults object, containing the names of the neighbors and each neighbor's - distance from the query vector, sorted in ascending order of distance
      -
      -
      -
    • -
    • -
      -

      query

      -
      public StringIndex.QueryResults[] query(float[][] queryVectors, - int numNeighbors, - int numThreads, - int ef)
      -
      Query for multiple target vectors in parallel.
      -
      -
      Parameters:
      -
      queryVectors - Array of query vectors to search around
      -
      numNeighbors - Number of neighbors to get for each target
      -
      numThreads - Number of threads to use for the underlying index search. -1 uses all - available CPU cores
      -
      ef - Search depth in the graph
      -
      Returns:
      -
      Array of QueryResults, one for each target vector
      -
      -
      -
    • -
    • -
      -

      close

      -
      public void close() - throws IOException
      -
      -
      Specified by:
      -
      close in interface AutoCloseable
      -
      Specified by:
      -
      close in interface Closeable
      -
      Throws:
      -
      IOException
      -
      -
      -
    • -
    • -
      -

      resizeIndex

      -
      public void resizeIndex(long newSize)
      -
      Change the maximum number of elements currently storable by this Index. This operation - reallocates the memory used by the index and can be quite slow, so it may be useful to set the - maximum number of elements in advance if that number is known.
      -
      -
      Parameters:
      -
      newSize - The new number of maximum elements to resize this Index to.
      -
      -
      -
    • -
    • -
      -

      getMaxElements

      -
      public long getMaxElements()
      -
      Get the maximum number of elements currently storable by this Index. If more elements - are added than getMaxElements(), the index will be automatically (but slowly) resized.
      -
      -
      Returns:
      -
      The number of elements (vectors) that are currently storable in this Index.
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.QueryResults.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.QueryResults.html deleted file mode 100644 index b8d54702..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.QueryResults.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.Index.QueryResults (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.Index.QueryResults

-
-
Packages that use Index.QueryResults
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.SpaceType.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.SpaceType.html deleted file mode 100644 index ec10303c..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.SpaceType.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - -Uses of Enum com.spotify.voyager.jni.Index.SpaceType (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Enum
com.spotify.voyager.jni.Index.SpaceType

-
-
Packages that use Index.SpaceType
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.StorageDataType.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.StorageDataType.html deleted file mode 100644 index e4a11ecd..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.StorageDataType.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - -Uses of Enum com.spotify.voyager.jni.Index.StorageDataType (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Enum
com.spotify.voyager.jni.Index.StorageDataType

-
-
Packages that use Index.StorageDataType
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.html deleted file mode 100644 index d0e8fa9f..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/Index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.Index (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.Index

-
-
Packages that use Index
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html deleted file mode 100644 index d546ccd7..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.StringIndex.QueryResults (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.StringIndex.QueryResults

-
-
Packages that use StringIndex.QueryResults
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.html b/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.html deleted file mode 100644 index 7af37326..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/class-use/StringIndex.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.StringIndex (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.StringIndex

-
-
Packages that use StringIndex
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/exception/RecallException.html b/docs/java/apidocs/com/spotify/voyager/jni/exception/RecallException.html deleted file mode 100644 index a8ef384d..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/exception/RecallException.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - -RecallException (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class RecallException

-
-
java.lang.Object -
java.lang.Throwable -
java.lang.Exception -
java.lang.RuntimeException -
com.spotify.voyager.jni.exception.RecallException
-
-
-
-
-
-
-
All Implemented Interfaces:
-
Serializable
-
-
-
public class RecallException -extends RuntimeException
-
An exception indicating that the desired recall of a query cannot be achieved
-
-
See Also:
-
- -
-
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      RecallException

      -
      public RecallException(String message)
      -
      Constructs a new RecallException with the specified detail message.
      -
      -
      Parameters:
      -
      message - the detail message
      -
      -
      -
    • -
    • -
      -

      RecallException

      -
      public RecallException(String message, - Throwable cause)
      -
      Constructs a new RecallException with the specified detail message and cause.
      -
      -
      Parameters:
      -
      message - the detail message
      -
      cause - the cause of the exception
      -
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/exception/class-use/RecallException.html b/docs/java/apidocs/com/spotify/voyager/jni/exception/class-use/RecallException.html deleted file mode 100644 index d91c1e3e..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/exception/class-use/RecallException.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.exception.RecallException (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.exception.RecallException

-
-No usage of com.spotify.voyager.jni.exception.RecallException
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-summary.html b/docs/java/apidocs/com/spotify/voyager/jni/exception/package-summary.html deleted file mode 100644 index 6f75a88f..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-summary.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - -com.spotify.voyager.jni.exception (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Package com.spotify.voyager.jni.exception

-
-
-
package com.spotify.voyager.jni.exception
-
-
    -
  • - -
  • -
  • -
    -
    Exception Classes
    -
    -
    Class
    -
    Description
    - -
    -
    An exception indicating that the desired recall of a query cannot be achieved
    -
    -
    -
    -
  • -
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-tree.html b/docs/java/apidocs/com/spotify/voyager/jni/exception/package-tree.html deleted file mode 100644 index 96a8cb1e..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-tree.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - -com.spotify.voyager.jni.exception Class Hierarchy (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package com.spotify.voyager.jni.exception

-
-Package Hierarchies: - -
-

Class Hierarchy

- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-use.html b/docs/java/apidocs/com/spotify/voyager/jni/exception/package-use.html deleted file mode 100644 index f968fcc1..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/exception/package-use.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Package com.spotify.voyager.jni.exception (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Package
com.spotify.voyager.jni.exception

-
-No usage of com.spotify.voyager.jni.exception
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/package-summary.html b/docs/java/apidocs/com/spotify/voyager/jni/package-summary.html deleted file mode 100644 index e298608c..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/package-summary.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - -com.spotify.voyager.jni (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Package com.spotify.voyager.jni

-
-
-
package com.spotify.voyager.jni
-
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
    -
  • - -
  • -
  • -
    -
    -
    -
    -
    Class
    -
    Description
    - -
    -
    A Voyager index, providing storage of floating-point vectors and the ability to efficiently - search among those vectors.
    -
    - -
    -
    A container for query results, returned by Index.
    -
    - -
    -
    The space, also known as distance metric, to use when searching.
    -
    - -
    -
    The datatype used to use when storing vectors on disk.
    -
    - -
    -
    Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID - to a provided String.
    -
    - -
    -
    A wrapper class for nearest neighbor query results.
    -
    -
    -
    -
    -
  • -
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/package-tree.html b/docs/java/apidocs/com/spotify/voyager/jni/package-tree.html deleted file mode 100644 index 9762ebec..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/package-tree.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - -com.spotify.voyager.jni Class Hierarchy (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package com.spotify.voyager.jni

-
-Package Hierarchies: - -
-

Class Hierarchy

- -
-
-

Enum Hierarchy

- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/package-use.html b/docs/java/apidocs/com/spotify/voyager/jni/package-use.html deleted file mode 100644 index 41cfa0ac..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/package-use.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - -Uses of Package com.spotify.voyager.jni (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Package
com.spotify.voyager.jni

-
-
Packages that use com.spotify.voyager.jni
-
-
Package
-
Description
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
-
-
    -
  • -
    - -
    -
    Class
    -
    Description
    - -
    -
    A Voyager index, providing storage of floating-point vectors and the ability to efficiently - search among those vectors.
    -
    - -
    -
    A container for query results, returned by Index.
    -
    - -
    -
    The space, also known as distance metric, to use when searching.
    -
    - -
    -
    The datatype used to use when storing vectors on disk.
    -
    - -
    -
    Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID - to a provided String.
    -
    - -
    -
    A wrapper class for nearest neighbor query results.
    -
    -
    -
    -
  • -
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/JniLibExtractor.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/JniLibExtractor.html deleted file mode 100644 index ff3f1983..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/JniLibExtractor.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - -JniLibExtractor (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class JniLibExtractor

-
-
java.lang.Object -
com.spotify.voyager.jni.utils.JniLibExtractor
-
-
-
-
public class JniLibExtractor -extends Object
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      JniLibExtractor

      -
      public JniLibExtractor()
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    -
      -
    • -
      -

      extractBinaries

      -
      public static String extractBinaries(String libname)
      -
      -
    • -
    -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/TinyJson.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/TinyJson.html deleted file mode 100644 index dfebf934..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/TinyJson.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - -TinyJson (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
- -
- -

Class TinyJson

-
-
java.lang.Object -
com.spotify.voyager.jni.utils.TinyJson
-
-
-
-
public class TinyJson -extends Object
-
A dependency-free, super tiny JSON serde class that only supports reading and writing lists of - strings.
-
-
- -
-
-
    - -
  • -
    -

    Constructor Details

    -
      -
    • -
      -

      TinyJson

      -
      public TinyJson()
      -
      -
    • -
    -
    -
  • - -
  • -
    -

    Method Details

    - -
    -
  • -
-
- -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html deleted file mode 100644 index fac59763..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.utils.JniLibExtractor (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.utils.JniLibExtractor

-
-No usage of com.spotify.voyager.jni.utils.JniLibExtractor
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/TinyJson.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/TinyJson.html deleted file mode 100644 index 2191a872..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/class-use/TinyJson.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Class com.spotify.voyager.jni.utils.TinyJson (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Class
com.spotify.voyager.jni.utils.TinyJson

-
-No usage of com.spotify.voyager.jni.utils.TinyJson
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-summary.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/package-summary.html deleted file mode 100644 index 9ef36f01..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-summary.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -com.spotify.voyager.jni.utils (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Package com.spotify.voyager.jni.utils

-
-
-
package com.spotify.voyager.jni.utils
-
-
    -
  • - -
  • -
  • -
    -
    Classes
    -
    -
    Class
    -
    Description
    - -
     
    - -
    -
    A dependency-free, super tiny JSON serde class that only supports reading and writing lists of - strings.
    -
    -
    -
    -
  • -
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-tree.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/package-tree.html deleted file mode 100644 index 0494c213..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-tree.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -com.spotify.voyager.jni.utils Class Hierarchy (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package com.spotify.voyager.jni.utils

-
-Package Hierarchies: - -
-

Class Hierarchy

- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-use.html b/docs/java/apidocs/com/spotify/voyager/jni/utils/package-use.html deleted file mode 100644 index 4c128fdc..00000000 --- a/docs/java/apidocs/com/spotify/voyager/jni/utils/package-use.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Package com.spotify.voyager.jni.utils (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Package
com.spotify.voyager.jni.utils

-
-No usage of com.spotify.voyager.jni.utils
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/package-summary.html b/docs/java/apidocs/com/spotify/voyager/package-summary.html deleted file mode 100644 index 608957b9..00000000 --- a/docs/java/apidocs/com/spotify/voyager/package-summary.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -com.spotify.voyager (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Package com.spotify.voyager

-
-
-
package com.spotify.voyager
-
-
Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data. For most use cases, Index will be the primary interface to - Voyager's functionality. - -
-   // Import `Index`, the basic class that implements Voyager's functionality:
-   import com.spotify.voyager.jni.Index;
-
-   // Create a new Index that compares 4-dimensional vectors via Euclidean distance:
-   Index index = new Index(Index.SpaceType.Euclidean, 4);
-
-   // Add some data to the index:
-   index.addItem(new float[]{1.0f, 2.0f, 3.0f, 4.0f});
-   index.addItem(new float[]{2.0f, 3.0f, 4.0f, 5.0f});
-
-   // Query the index to return the `k` nearest neighbors of a given vector:
-   Index.QueryResults results = index.query(new float[]{3.0f, 4.0f, 5.0f, 6.0f}, 1);
-
-   // Our query will return the 1th (second) item that was added, as it's the closest:
-   assert(results.getLabels()[0] == 1);
-
-   // Serialize this index to use it again later:
-   index.saveIndex("my_tiny_index.voy");
- 
-
-
-
    -
  • - -
  • -
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/package-tree.html b/docs/java/apidocs/com/spotify/voyager/package-tree.html deleted file mode 100644 index 716af221..00000000 --- a/docs/java/apidocs/com/spotify/voyager/package-tree.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - -com.spotify.voyager Class Hierarchy (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For Package com.spotify.voyager

-
-Package Hierarchies: - -
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/com/spotify/voyager/package-use.html b/docs/java/apidocs/com/spotify/voyager/package-use.html deleted file mode 100644 index 8924c393..00000000 --- a/docs/java/apidocs/com/spotify/voyager/package-use.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - -Uses of Package com.spotify.voyager (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Uses of Package
com.spotify.voyager

-
-No usage of com.spotify.voyager
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/copy.svg b/docs/java/apidocs/copy.svg deleted file mode 100644 index 7c46ab15..00000000 --- a/docs/java/apidocs/copy.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/docs/java/apidocs/help-doc.html b/docs/java/apidocs/help-doc.html deleted file mode 100644 index 6e3d88ce..00000000 --- a/docs/java/apidocs/help-doc.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - -API Help (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-

JavaDoc Help

- -
-
-

Navigation

-Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces - -
-
-
-

Kinds of Pages

-The following sections describe the different kinds of pages in this collection. -
-

Overview

-

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-
-
-

Package

-

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

-
    -
  • Interfaces
  • -
  • Classes
  • -
  • Enums
  • -
  • Exception Classes
  • -
  • Annotation Types
  • -
-
-
-

Class or Interface

-

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

-
    -
  • Class Inheritance Diagram
  • -
  • Direct Subclasses
  • -
  • All Known Subinterfaces
  • -
  • All Known Implementing Classes
  • -
  • Class or Interface Declaration
  • -
  • Class or Interface Description
  • -
-
-
    -
  • Nested Class Summary
  • -
  • Enum Constant Summary
  • -
  • Field Summary
  • -
  • Property Summary
  • -
  • Constructor Summary
  • -
  • Method Summary
  • -
  • Required Element Summary
  • -
  • Optional Element Summary
  • -
-
-
    -
  • Enum Constant Details
  • -
  • Field Details
  • -
  • Property Details
  • -
  • Constructor Details
  • -
  • Method Details
  • -
  • Element Details
  • -
-

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

-

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

-
-
-

Other Files

-

Packages and modules may contain pages with additional information related to the declarations nearby.

-
-
-

Use

-

Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.

-
-
-

Tree (Class Hierarchy)

-

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

-
    -
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • -
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • -
-
-
-

Serialized Form

-

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

-
-
-

All Packages

-

The All Packages page contains an alphabetic index of all packages contained in the documentation.

-
-
-

All Classes and Interfaces

-

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

-
-
-

Index

-

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

-
-
-
-This help file applies to API documentation generated by the standard doclet.
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/index-all.html b/docs/java/apidocs/index-all.html deleted file mode 100644 index 87990ddf..00000000 --- a/docs/java/apidocs/index-all.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - -Index (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Index

-
-A C D E F G I J L M Q R S T U V W 
All Classes and Interfaces|All Packages|Serialized Form -

A

-
-
addItem(float[]) - Method in class com.spotify.voyager.jni.Index
-
-
Add an item (a vector) to this Index.
-
-
addItem(float[], long) - Method in class com.spotify.voyager.jni.Index
-
-
Add an item (a vector) to this Index with the provided identifier.
-
-
addItem(String, float[]) - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
addItem(String, List<Float>) - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
addItems(float[][], int) - Method in class com.spotify.voyager.jni.Index
-
-
Add multiple items (vectors) to this Index.
-
-
addItems(float[][], long[], int) - Method in class com.spotify.voyager.jni.Index
-
-
Add multiple items (vectors) to this Index with the provided identifiers.
-
-
addItems(Map<String, List<Float>>) - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
asBytes() - Method in class com.spotify.voyager.jni.Index
-
-
Returns the contents of this index as an array of bytes.
-
-
-

C

-
-
close() - Method in class com.spotify.voyager.jni.Index
-
-
Close this Index and release any memory held by it.
-
-
close() - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
com.spotify.voyager - package com.spotify.voyager
-
-
Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data.
-
-
com.spotify.voyager.jni - package com.spotify.voyager.jni
-
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
-
com.spotify.voyager.jni.exception - package com.spotify.voyager.jni.exception
-
 
-
com.spotify.voyager.jni.utils - package com.spotify.voyager.jni.utils
-
 
-
Cosine - Enum constant in enum com.spotify.voyager.jni.Index.SpaceType
-
-
Cosine distance; i.e. normalized dot product.
-
-
-

D

-
-
distances - Variable in class com.spotify.voyager.jni.Index.QueryResults
-
-
A list of distances from each item ID to the query vector for this query.
-
-
-

E

-
-
E4M3 - Enum constant in enum com.spotify.voyager.jni.Index.StorageDataType
-
-
A custom 8-bit floating point data type with range [-448, 448] and variable precision.
-
-
Euclidean - Enum constant in enum com.spotify.voyager.jni.Index.SpaceType
-
-
Euclidean distance, also known as L2 distance.
-
-
extractBinaries(String) - Static method in class com.spotify.voyager.jni.utils.JniLibExtractor
-
 
-
-

F

-
-
finalize() - Method in class com.spotify.voyager.jni.Index
-
 
-
Float32 - Enum constant in enum com.spotify.voyager.jni.Index.StorageDataType
-
-
A 32-bit floating point ("Float") data type.
-
-
Float8 - Enum constant in enum com.spotify.voyager.jni.Index.StorageDataType
-
-
An 8-bit floating point data type that expects all values to be on [-1, 1].
-
-
-

G

-
-
getDistance(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
getDistances() - Method in class com.spotify.voyager.jni.Index.QueryResults
-
-
Retrieve the list of distances between query vectors and item vectors for the results of this - query.
-
-
getDistances() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
getEf() - Method in class com.spotify.voyager.jni.Index
-
-
Get the default EF ("query search depth") that will be uses when Index.query(float[], int) is called.
-
-
getEfConstruction() - Method in class com.spotify.voyager.jni.Index
-
-
Get the EF Construction value used when adding new elements to this Index.
-
-
getIDs() - Method in class com.spotify.voyager.jni.Index
-
-
Get the list of identifiers currently stored by this index.
-
-
getLabels() - Method in class com.spotify.voyager.jni.Index.QueryResults
-
-
Retrieve the list of item IDs ("labels") returned by this query.
-
-
getM() - Method in class com.spotify.voyager.jni.Index
-
-
Get the M value used when adding new elements to this Index.
-
-
getMaxElements() - Method in class com.spotify.voyager.jni.Index
-
-
Get the maximum number of elements currently storable by this Index.
-
-
getMaxElements() - Method in class com.spotify.voyager.jni.StringIndex
-
-
Get the maximum number of elements currently storable by this Index.
-
-
getName(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
getNames() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
getNumDimensions() - Method in class com.spotify.voyager.jni.Index
-
-
Get the number of dimensions used in this Index.
-
-
getNumElements() - Method in class com.spotify.voyager.jni.Index
-
-
Get the number of elements currently in this Index.
-
-
getNumElements() - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
getNumResults() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
getNumThreads() - Method in class com.spotify.voyager.jni.Index
-
-
Get the default number of threads used when adding multiple vectors in bulk oor when querying - for multiple vectors simultaneously.
-
-
getSpace() - Method in class com.spotify.voyager.jni.Index
-
-
Get the Index.SpaceType that this Index uses to store and compare vectors.
-
-
getVector(long) - Method in class com.spotify.voyager.jni.Index
-
-
Get the vector for the provided identifier.
-
-
getVector(String) - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
getVectors(long[]) - Method in class com.spotify.voyager.jni.Index
-
-
Get the vectors for a provided array of identifiers.
-
-
-

I

-
-
Index - Class in com.spotify.voyager.jni
-
-
A Voyager index, providing storage of floating-point vectors and the ability to efficiently - search among those vectors.
-
-
Index(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.Index
-
-
Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
-
-
Index(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.Index
-
-
Create a new Index that uses the given Index.SpaceType to store and compare - numDimensions-dimensional vectors.
-
-
Index.QueryResults - Class in com.spotify.voyager.jni
-
-
A container for query results, returned by Index.
-
-
Index.SpaceType - Enum in com.spotify.voyager.jni
-
-
The space, also known as distance metric, to use when searching.
-
-
Index.StorageDataType - Enum in com.spotify.voyager.jni
-
-
The datatype used to use when storing vectors on disk.
-
-
InnerProduct - Enum constant in enum com.spotify.voyager.jni.Index.SpaceType
-
-
Inner (dot) product.
-
-
-

J

-
-
JniLibExtractor - Class in com.spotify.voyager.jni.utils
-
 
-
JniLibExtractor() - Constructor for class com.spotify.voyager.jni.utils.JniLibExtractor
-
 
-
-

L

-
-
labels - Variable in class com.spotify.voyager.jni.Index.QueryResults
-
-
A list of item IDs ("labels").
-
-
load(InputStream) - Static method in class com.spotify.voyager.jni.Index
-
-
Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
-
-
load(InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
-
-
Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
-
-
load(InputStream, InputStream) - Static method in class com.spotify.voyager.jni.StringIndex
-
-
Load a previously constructed index from the provided input stream.
-
-
load(InputStream, InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
-
-
Load a previously constructed index from the provided input streams.
-
-
load(String) - Static method in class com.spotify.voyager.jni.Index
-
-
Load a Voyager index file and create a new Index initialized with the data in that - file.
-
-
load(String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
-
-
Load a Voyager index file and create a new Index initialized with the data in that - file.
-
-
load(String, String) - Static method in class com.spotify.voyager.jni.StringIndex
-
-
Load a previously constructed index from the provided file location.
-
-
load(String, String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
-
-
Load a previously constructed index from the provided file location.
-
-
-

M

-
-
markDeleted(long) - Method in class com.spotify.voyager.jni.Index
-
-
Mark an element of the index as deleted.
-
-
-

Q

-
-
query(float[][], int, int) - Method in class com.spotify.voyager.jni.Index
-
-
Query this Index for approximate nearest neighbors of multiple query vectors.
-
-
query(float[][], int, int, int) - Method in class com.spotify.voyager.jni.StringIndex
-
-
Query for multiple target vectors in parallel.
-
-
query(float[][], int, int, long) - Method in class com.spotify.voyager.jni.Index
-
-
Query this Index for approximate nearest neighbors of multiple query vectors.
-
-
query(float[], int) - Method in class com.spotify.voyager.jni.Index
-
-
Query this Index for approximate nearest neighbors of a single query vector.
-
-
query(float[], int, int) - Method in class com.spotify.voyager.jni.StringIndex
-
-
Find the nearest neighbors of the provided embedding.
-
-
query(float[], int, long) - Method in class com.spotify.voyager.jni.Index
-
-
Query this Index for approximate nearest neighbors of a single query vector.
-
-
QueryResults(long[], float[]) - Constructor for class com.spotify.voyager.jni.Index.QueryResults
-
-
Instantiates a new QueryResults object, provided two identical-length arrays of labels and - their corresponding distances.
-
-
QueryResults(String[], float[]) - Constructor for class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
-

R

-
-
readStringList(InputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
-
 
-
RecallException - Exception Class in com.spotify.voyager.jni.exception
-
-
An exception indicating that the desired recall of a query cannot be achieved
-
-
RecallException(String) - Constructor for exception class com.spotify.voyager.jni.exception.RecallException
-
-
Constructs a new RecallException with the specified detail message.
-
-
RecallException(String, Throwable) - Constructor for exception class com.spotify.voyager.jni.exception.RecallException
-
-
Constructs a new RecallException with the specified detail message and cause.
-
-
resizeIndex(long) - Method in class com.spotify.voyager.jni.Index
-
-
Change the maximum number of elements currently storable by this Index.
-
-
resizeIndex(long) - Method in class com.spotify.voyager.jni.StringIndex
-
-
Change the maximum number of elements currently storable by this Index.
-
-
-

S

-
-
saveIndex(OutputStream) - Method in class com.spotify.voyager.jni.Index
-
-
Save this Index to the provided output stream.
-
-
saveIndex(OutputStream, OutputStream) - Method in class com.spotify.voyager.jni.StringIndex
-
-
Save the underlying HNSW index and JSON encoded names list to the provided output streams
-
-
saveIndex(String) - Method in class com.spotify.voyager.jni.Index
-
-
Save this Index to a file at the provided filename.
-
-
saveIndex(String) - Method in class com.spotify.voyager.jni.StringIndex
-
-
Save the underlying index and JSON encoded name list to the provided output directory
-
-
saveIndex(String, String, String) - Method in class com.spotify.voyager.jni.StringIndex
-
 
-
setEf(long) - Method in class com.spotify.voyager.jni.Index
-
-
Set the default EF ("query search depth") to use when Index.query(float[], int) is called.
-
-
setNumThreads(int) - Method in class com.spotify.voyager.jni.Index
-
-
Set the default number of threads to use when adding multiple vectors in bulk, or when querying - for multiple vectors simultaneously.
-
-
StringIndex - Class in com.spotify.voyager.jni
-
-
Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID - to a provided String.
-
-
StringIndex(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.StringIndex
-
-
Instantiate a new empty index with the specified space type and dimensionality
-
-
StringIndex(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.StringIndex
-
-
Instantiate an empty index with the specified index parameters
-
-
StringIndex.QueryResults - Class in com.spotify.voyager.jni
-
-
A wrapper class for nearest neighbor query results.
-
-
-

T

-
-
TinyJson - Class in com.spotify.voyager.jni.utils
-
-
A dependency-free, super tiny JSON serde class that only supports reading and writing lists of - strings.
-
-
TinyJson() - Constructor for class com.spotify.voyager.jni.utils.TinyJson
-
 
-
toString() - Method in class com.spotify.voyager.jni.Index.QueryResults
-
 
-
toString() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
-
 
-
-

U

-
-
unmarkDeleted(long) - Method in class com.spotify.voyager.jni.Index
-
-
Un-mark an element of the index as deleted, making it available again.
-
-
-

V

-
-
valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.SpaceType
-
-
Returns the enum constant of this type with the specified name.
-
-
valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
-
-
Returns the enum constant of this type with the specified name.
-
-
values() - Static method in enum com.spotify.voyager.jni.Index.SpaceType
-
-
Returns an array containing the constants of this enum type, in -the order they are declared.
-
-
values() - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
-
-
Returns an array containing the constants of this enum type, in -the order they are declared.
-
-
-

W

-
-
writeStringList(Iterable<String>, OutputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
-
 
-
-A C D E F G I J L M Q R S T U V W 
All Classes and Interfaces|All Packages|Serialized Form
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/index.html b/docs/java/apidocs/index.html deleted file mode 100644 index 13c21a3c..00000000 --- a/docs/java/apidocs/index.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -Overview (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

voyager 2.1.0 API

-
-
-
Packages
-
-
Package
-
Description
- -
-
Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data.
-
- -
-
Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
-
- -
 
- -
 
-
-
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/jquery-ui.overrides.css b/docs/java/apidocs/jquery-ui.overrides.css deleted file mode 100644 index facf852c..00000000 --- a/docs/java/apidocs/jquery-ui.overrides.css +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - /* Overrides the color of selection used in jQuery UI */ - background: #F8981D; - border: 1px solid #F8981D; -} diff --git a/docs/java/apidocs/legal/ADDITIONAL_LICENSE_INFO b/docs/java/apidocs/legal/ADDITIONAL_LICENSE_INFO deleted file mode 100644 index ff700cd0..00000000 --- a/docs/java/apidocs/legal/ADDITIONAL_LICENSE_INFO +++ /dev/null @@ -1,37 +0,0 @@ - ADDITIONAL INFORMATION ABOUT LICENSING - -Certain files distributed by Oracle America, Inc. and/or its affiliates are -subject to the following clarification and special exception to the GPLv2, -based on the GNU Project exception for its Classpath libraries, known as the -GNU Classpath Exception. - -Note that Oracle includes multiple, independent programs in this software -package. Some of those programs are provided under licenses deemed -incompatible with the GPLv2 by the Free Software Foundation and others. -For example, the package includes programs licensed under the Apache -License, Version 2.0 and may include FreeType. Such programs are licensed -to you under their original licenses. - -Oracle facilitates your further distribution of this package by adding the -Classpath Exception to the necessary parts of its GPLv2 code, which permits -you to use that code in combination with other independent modules not -licensed under the GPLv2. However, note that this would not permit you to -commingle code under an incompatible license with Oracle's GPLv2 licensed -code by, for example, cutting and pasting such code into a file also -containing Oracle's GPLv2 licensed code and then distributing the result. - -Additionally, if you were to remove the Classpath Exception from any of the -files to which it applies and distribute the result, you would likely be -required to license some or all of the other code in that distribution under -the GPLv2 as well, and since the GPLv2 is incompatible with the license terms -of some items included in the distribution by Oracle, removing the Classpath -Exception could therefore effectively compromise your ability to further -distribute the package. - -Failing to distribute notices associated with some files may also create -unexpected legal consequences. - -Proceed with caution and we recommend that you obtain the advice of a lawyer -skilled in open source matters before removing the Classpath Exception or -making modifications to this package which may subsequently be redistributed -and/or involve the use of third party software. diff --git a/docs/java/apidocs/legal/ASSEMBLY_EXCEPTION b/docs/java/apidocs/legal/ASSEMBLY_EXCEPTION deleted file mode 100644 index 42966666..00000000 --- a/docs/java/apidocs/legal/ASSEMBLY_EXCEPTION +++ /dev/null @@ -1,27 +0,0 @@ - -OPENJDK ASSEMBLY EXCEPTION - -The OpenJDK source code made available by Oracle America, Inc. (Oracle) at -openjdk.org ("OpenJDK Code") is distributed under the terms of the GNU -General Public License version 2 -only ("GPL2"), with the following clarification and special exception. - - Linking this OpenJDK Code statically or dynamically with other code - is making a combined work based on this library. Thus, the terms - and conditions of GPL2 cover the whole combination. - - As a special exception, Oracle gives you permission to link this - OpenJDK Code with certain code licensed by Oracle as indicated at - https://openjdk.org/legal/exception-modules-2007-05-08.html - ("Designated Exception Modules") to produce an executable, - regardless of the license terms of the Designated Exception Modules, - and to copy and distribute the resulting executable under GPL2, - provided that the Designated Exception Modules continue to be - governed by the licenses under which they were offered by Oracle. - -As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code -to build an executable that includes those portions of necessary code that -Oracle could not provide under GPL2 (or that Oracle has provided under GPL2 -with the Classpath exception). If you modify or add to the OpenJDK code, -that new GPL2 code may still be combined with Designated Exception Modules -if the new code is made subject to this exception by its copyright holder. diff --git a/docs/java/apidocs/legal/LICENSE b/docs/java/apidocs/legal/LICENSE deleted file mode 100644 index 8b400c7a..00000000 --- a/docs/java/apidocs/legal/LICENSE +++ /dev/null @@ -1,347 +0,0 @@ -The GNU General Public License (GPL) - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Library General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you -can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny -you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of the -software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for -a fee, you must give the recipients all the rights that you have. You must -make sure that they, too, receive or can get the source code. And you must -show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program proprietary. -To prevent this, we have made it clear that any patent must be licensed for -everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included -without limitation in the term "modification".) Each licensee is addressed as -"you". - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running the Program is -not restricted, and the output from the Program is covered only if its contents -constitute a work based on the Program (independent of having been made by -running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as -you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and give any other recipients of the -Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may -at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - - a) You must cause the modified files to carry prominent notices stating - that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole or - in part contains or is derived from the Program or any part thereof, to be - licensed as a whole at no charge to all third parties under the terms of - this License. - - c) If the modified program normally reads commands interactively when run, - you must cause it, when started running for such interactive use in the - most ordinary way, to print or display an announcement including an - appropriate copyright notice and a notice that there is no warranty (or - else, saying that you provide a warranty) and that users may redistribute - the program under these conditions, and telling the user how to view a copy - of this License. (Exception: if the Program itself is interactive but does - not normally print such an announcement, your work based on the Program is - not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Program, the distribution of the whole must be on the terms -of this License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Program. - -In addition, mere aggregation of another work not based on the Program with the -Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 and -2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source - code, which must be distributed under the terms of Sections 1 and 2 above - on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to - give any third party, for a charge no more than your cost of physically - performing source distribution, a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of Sections 1 - and 2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to - distribute corresponding source code. (This alternative is allowed only - for noncommercial distribution and only if you received the program in - object code or executable form with such an offer, in accord with - Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the source -code from the same place counts as distribution of the source code, even though -third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or -any work based on the Program), you indicate your acceptance of this License to -do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor to -copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of the -rights granted herein. You are not responsible for enforcing compliance by -third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), conditions -are imposed on you (whether by court order, agreement or otherwise) that -contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Program at all. -For example, if a patent license would not permit royalty-free redistribution -of the Program by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the -General Public License from time to time. Such new versions will be similar in -spirit to the present version, but may differ in detail to address new problems -or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software Foundation. -If the Program does not specify a version number of this License, you may -choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status of -all derivatives of our free software and of promoting the sharing and reuse of -software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA -BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER -OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - - Copyright (C) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it -starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author Gnomovision comes - with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free - software, and you are welcome to redistribute it under certain conditions; - type 'show c' for details. - -The hypothetical commands 'show w' and 'show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than 'show w' and 'show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here -is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - 'Gnomovision' (which makes passes at compilers) written by James Hacker. - - signature of Ty Coon, 1 April 1989 - - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General Public -License instead of this License. - - -"CLASSPATH" EXCEPTION TO THE GPL - -Certain source files distributed by Oracle America and/or its affiliates are -subject to the following clarification and special exception to the GPL, but -only where Oracle has expressly included in the particular source file's header -the words "Oracle designates this particular file as subject to the "Classpath" -exception as provided by Oracle in the LICENSE file that accompanied this code." - - Linking this library statically or dynamically with other modules is making - a combined work based on this library. Thus, the terms and conditions of - the GNU General Public License cover the whole combination. - - As a special exception, the copyright holders of this library give you - permission to link this library with independent modules to produce an - executable, regardless of the license terms of these independent modules, - and to copy and distribute the resulting executable under terms of your - choice, provided that you also meet, for each linked independent module, - the terms and conditions of the license of that module. An independent - module is a module which is not derived from or based on this library. If - you modify this library, you may extend this exception to your version of - the library, but you are not obligated to do so. If you do not wish to do - so, delete this exception statement from your version. diff --git a/docs/java/apidocs/legal/jquery.md b/docs/java/apidocs/legal/jquery.md deleted file mode 100644 index d468b318..00000000 --- a/docs/java/apidocs/legal/jquery.md +++ /dev/null @@ -1,72 +0,0 @@ -## jQuery v3.6.1 - -### jQuery License -``` -jQuery v 3.6.1 -Copyright OpenJS Foundation and other contributors, https://openjsf.org/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -****************************************** - -The jQuery JavaScript Library v3.6.1 also includes Sizzle.js - -Sizzle.js includes the following license: - -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/sizzle - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -********************* - -``` diff --git a/docs/java/apidocs/legal/jqueryUI.md b/docs/java/apidocs/legal/jqueryUI.md deleted file mode 100644 index 8bda9d7a..00000000 --- a/docs/java/apidocs/legal/jqueryUI.md +++ /dev/null @@ -1,49 +0,0 @@ -## jQuery UI v1.13.2 - -### jQuery UI License -``` -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery-ui - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code contained within the demos directory. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -``` diff --git a/docs/java/apidocs/link.svg b/docs/java/apidocs/link.svg deleted file mode 100644 index 7ccc5ed0..00000000 --- a/docs/java/apidocs/link.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - diff --git a/docs/java/apidocs/member-search-index.js b/docs/java/apidocs/member-search-index.js deleted file mode 100644 index 507052b5..00000000 --- a/docs/java/apidocs/member-search-index.js +++ /dev/null @@ -1 +0,0 @@ -memberSearchIndex = [{"p":"com.spotify.voyager.jni","c":"Index","l":"addItem(float[])"},{"p":"com.spotify.voyager.jni","c":"Index","l":"addItem(float[], long)","u":"addItem(float[],long)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"addItem(String, float[])","u":"addItem(java.lang.String,float[])"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"addItem(String, List)","u":"addItem(java.lang.String,java.util.List)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"addItems(float[][], int)","u":"addItems(float[][],int)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"addItems(float[][], long[], int)","u":"addItems(float[][],long[],int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"addItems(Map>)","u":"addItems(java.util.Map)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"asBytes()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"close()"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"close()"},{"p":"com.spotify.voyager.jni","c":"Index.SpaceType","l":"Cosine"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"distances"},{"p":"com.spotify.voyager.jni","c":"Index.StorageDataType","l":"E4M3"},{"p":"com.spotify.voyager.jni","c":"Index.SpaceType","l":"Euclidean"},{"p":"com.spotify.voyager.jni.utils","c":"JniLibExtractor","l":"extractBinaries(String)","u":"extractBinaries(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"finalize()"},{"p":"com.spotify.voyager.jni","c":"Index.StorageDataType","l":"Float32"},{"p":"com.spotify.voyager.jni","c":"Index.StorageDataType","l":"Float8"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"getDistance(int)"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"getDistances()"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"getDistances()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getEf()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getEfConstruction()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getIDs()"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"getLabels()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getM()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getMaxElements()"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"getMaxElements()"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"getName(int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"getNames()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getNumDimensions()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getNumElements()"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"getNumElements()"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"getNumResults()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getNumThreads()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getSpace()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getVector(long)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"getVector(String)","u":"getVector(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"getVectors(long[])"},{"p":"com.spotify.voyager.jni","c":"Index","l":"Index(Index.SpaceType, int)","u":"%3Cinit%3E(com.spotify.voyager.jni.Index.SpaceType,int)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"Index(Index.SpaceType, int, long, long, long, long, Index.StorageDataType)","u":"%3Cinit%3E(com.spotify.voyager.jni.Index.SpaceType,int,long,long,long,long,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni","c":"Index.SpaceType","l":"InnerProduct"},{"p":"com.spotify.voyager.jni.utils","c":"JniLibExtractor","l":"JniLibExtractor()","u":"%3Cinit%3E()"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"labels"},{"p":"com.spotify.voyager.jni","c":"Index","l":"load(InputStream)","u":"load(java.io.InputStream)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"load(InputStream, Index.SpaceType, int, Index.StorageDataType)","u":"load(java.io.InputStream,com.spotify.voyager.jni.Index.SpaceType,int,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"load(InputStream, InputStream)","u":"load(java.io.InputStream,java.io.InputStream)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"load(InputStream, InputStream, Index.SpaceType, int, Index.StorageDataType)","u":"load(java.io.InputStream,java.io.InputStream,com.spotify.voyager.jni.Index.SpaceType,int,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"load(String)","u":"load(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"load(String, Index.SpaceType, int, Index.StorageDataType)","u":"load(java.lang.String,com.spotify.voyager.jni.Index.SpaceType,int,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"load(String, String)","u":"load(java.lang.String,java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"load(String, String, Index.SpaceType, int, Index.StorageDataType)","u":"load(java.lang.String,java.lang.String,com.spotify.voyager.jni.Index.SpaceType,int,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"markDeleted(long)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"query(float[], int)","u":"query(float[],int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"query(float[], int, int)","u":"query(float[],int,int)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"query(float[], int, long)","u":"query(float[],int,long)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"query(float[][], int, int)","u":"query(float[][],int,int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"query(float[][], int, int, int)","u":"query(float[][],int,int,int)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"query(float[][], int, int, long)","u":"query(float[][],int,int,long)"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"QueryResults(long[], float[])","u":"%3Cinit%3E(long[],float[])"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"QueryResults(String[], float[])","u":"%3Cinit%3E(java.lang.String[],float[])"},{"p":"com.spotify.voyager.jni.utils","c":"TinyJson","l":"readStringList(InputStream)","u":"readStringList(java.io.InputStream)"},{"p":"com.spotify.voyager.jni.exception","c":"RecallException","l":"RecallException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.spotify.voyager.jni.exception","c":"RecallException","l":"RecallException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"resizeIndex(long)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"resizeIndex(long)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"saveIndex(OutputStream)","u":"saveIndex(java.io.OutputStream)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"saveIndex(OutputStream, OutputStream)","u":"saveIndex(java.io.OutputStream,java.io.OutputStream)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"saveIndex(String)","u":"saveIndex(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"saveIndex(String)","u":"saveIndex(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"saveIndex(String, String, String)","u":"saveIndex(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"setEf(long)"},{"p":"com.spotify.voyager.jni","c":"Index","l":"setNumThreads(int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"StringIndex(Index.SpaceType, int)","u":"%3Cinit%3E(com.spotify.voyager.jni.Index.SpaceType,int)"},{"p":"com.spotify.voyager.jni","c":"StringIndex","l":"StringIndex(Index.SpaceType, int, long, long, long, long, Index.StorageDataType)","u":"%3Cinit%3E(com.spotify.voyager.jni.Index.SpaceType,int,long,long,long,long,com.spotify.voyager.jni.Index.StorageDataType)"},{"p":"com.spotify.voyager.jni.utils","c":"TinyJson","l":"TinyJson()","u":"%3Cinit%3E()"},{"p":"com.spotify.voyager.jni","c":"Index.QueryResults","l":"toString()"},{"p":"com.spotify.voyager.jni","c":"StringIndex.QueryResults","l":"toString()"},{"p":"com.spotify.voyager.jni","c":"Index","l":"unmarkDeleted(long)"},{"p":"com.spotify.voyager.jni","c":"Index.SpaceType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index.StorageDataType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.spotify.voyager.jni","c":"Index.SpaceType","l":"values()"},{"p":"com.spotify.voyager.jni","c":"Index.StorageDataType","l":"values()"},{"p":"com.spotify.voyager.jni.utils","c":"TinyJson","l":"writeStringList(Iterable, OutputStream)","u":"writeStringList(java.lang.Iterable,java.io.OutputStream)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/apidocs/module-search-index.js b/docs/java/apidocs/module-search-index.js deleted file mode 100644 index 0d59754f..00000000 --- a/docs/java/apidocs/module-search-index.js +++ /dev/null @@ -1 +0,0 @@ -moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/apidocs/overview-summary.html b/docs/java/apidocs/overview-summary.html deleted file mode 100644 index 88e6d932..00000000 --- a/docs/java/apidocs/overview-summary.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - -voyager 2.1.0 API - - - - - - - - - - - -
- -

index.html

-
- - diff --git a/docs/java/apidocs/overview-tree.html b/docs/java/apidocs/overview-tree.html deleted file mode 100644 index 3a6a979a..00000000 --- a/docs/java/apidocs/overview-tree.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - -Class Hierarchy (voyager 2.1.0 API) - - - - - - - - - - - - - - -
- -
-
-
-

Hierarchy For All Packages

-
-Package Hierarchies: - -
-

Class Hierarchy

- -
-
-

Enum Hierarchy

- -
-
-
-
- -
-
-
- - diff --git a/docs/java/apidocs/package-search-index.js b/docs/java/apidocs/package-search-index.js deleted file mode 100644 index 87e7f704..00000000 --- a/docs/java/apidocs/package-search-index.js +++ /dev/null @@ -1 +0,0 @@ -packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.spotify.voyager"},{"l":"com.spotify.voyager.jni"},{"l":"com.spotify.voyager.jni.exception"},{"l":"com.spotify.voyager.jni.utils"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/apidocs/resources/glass.png b/docs/java/apidocs/resources/glass.png deleted file mode 100644 index a7f591f4..00000000 Binary files a/docs/java/apidocs/resources/glass.png and /dev/null differ diff --git a/docs/java/apidocs/resources/x.png b/docs/java/apidocs/resources/x.png deleted file mode 100644 index 30548a75..00000000 Binary files a/docs/java/apidocs/resources/x.png and /dev/null differ diff --git a/docs/java/apidocs/script-dir/jquery-3.6.1.min.js b/docs/java/apidocs/script-dir/jquery-3.6.1.min.js deleted file mode 100644 index 2c69bc90..00000000 --- a/docs/java/apidocs/script-dir/jquery-3.6.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
    ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
    ").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
    ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}});x.ui.autocomplete}); \ No newline at end of file diff --git a/docs/java/apidocs/script.js b/docs/java/apidocs/script.js deleted file mode 100644 index bb9c8a24..00000000 --- a/docs/java/apidocs/script.js +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var moduleSearchIndex; -var packageSearchIndex; -var typeSearchIndex; -var memberSearchIndex; -var tagSearchIndex; - -var oddRowColor = "odd-row-color"; -var evenRowColor = "even-row-color"; -var sortAsc = "sort-asc"; -var sortDesc = "sort-desc"; -var tableTab = "table-tab"; -var activeTableTab = "active-table-tab"; - -function loadScripts(doc, tag) { - createElem(doc, tag, 'search.js'); - - createElem(doc, tag, 'module-search-index.js'); - createElem(doc, tag, 'package-search-index.js'); - createElem(doc, tag, 'type-search-index.js'); - createElem(doc, tag, 'member-search-index.js'); - createElem(doc, tag, 'tag-search-index.js'); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -// Helper for making content containing release names comparable lexicographically -function makeComparable(s) { - return s.toLowerCase().replace(/(\d+)/g, - function(n, m) { - return ("000" + m).slice(-4); - }); -} - -// Switches between two styles depending on a condition -function toggleStyle(classList, condition, trueStyle, falseStyle) { - if (condition) { - classList.remove(falseStyle); - classList.add(trueStyle); - } else { - classList.remove(trueStyle); - classList.add(falseStyle); - } -} - -// Sorts the rows in a table lexicographically by the content of a specific column -function sortTable(header, columnIndex, columns) { - var container = header.parentElement; - var descending = header.classList.contains(sortAsc); - container.querySelectorAll("div.table-header").forEach( - function(header) { - header.classList.remove(sortAsc); - header.classList.remove(sortDesc); - } - ) - var cells = container.children; - var rows = []; - for (var i = columns; i < cells.length; i += columns) { - rows.push(Array.prototype.slice.call(cells, i, i + columns)); - } - var comparator = function(a, b) { - var ka = makeComparable(a[columnIndex].textContent); - var kb = makeComparable(b[columnIndex].textContent); - if (ka < kb) - return descending ? 1 : -1; - if (ka > kb) - return descending ? -1 : 1; - return 0; - }; - var sorted = rows.sort(comparator); - var visible = 0; - sorted.forEach(function(row) { - if (row[0].style.display !== 'none') { - var isEvenRow = visible++ % 2 === 0; - } - row.forEach(function(cell) { - toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); - container.appendChild(cell); - }) - }); - toggleStyle(header.classList, descending, sortDesc, sortAsc); -} - -// Toggles the visibility of a table category in all tables in a page -function toggleGlobal(checkbox, selected, columns) { - var display = checkbox.checked ? '' : 'none'; - document.querySelectorAll("div.table-tabs").forEach(function(t) { - var id = t.parentElement.getAttribute("id"); - var selectedClass = id + "-tab" + selected; - // if selected is empty string it selects all uncategorized entries - var selectUncategorized = !Boolean(selected); - var visible = 0; - document.querySelectorAll('div.' + id) - .forEach(function(elem) { - if (selectUncategorized) { - if (elem.className.indexOf(selectedClass) === -1) { - elem.style.display = display; - } - } else if (elem.classList.contains(selectedClass)) { - elem.style.display = display; - } - if (elem.style.display === '') { - var isEvenRow = visible++ % (columns * 2) < columns; - toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); - } - }); - var displaySection = visible === 0 ? 'none' : ''; - t.parentElement.style.display = displaySection; - document.querySelector("li#contents-" + id).style.display = displaySection; - }) -} - -// Shows the elements of a table belonging to a specific category -function show(tableId, selected, columns) { - if (tableId !== selected) { - document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') - .forEach(function(elem) { - elem.style.display = 'none'; - }); - } - document.querySelectorAll('div.' + selected) - .forEach(function(elem, index) { - elem.style.display = ''; - var isEvenRow = index % (columns * 2) < columns; - toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); - }); - updateTabs(tableId, selected); -} - -function updateTabs(tableId, selected) { - document.getElementById(tableId + '.tabpanel') - .setAttribute('aria-labelledby', selected); - document.querySelectorAll('button[id^="' + tableId + '"]') - .forEach(function(tab, index) { - if (selected === tab.id || (tableId === selected && index === 0)) { - tab.className = activeTableTab; - tab.setAttribute('aria-selected', true); - tab.setAttribute('tabindex',0); - } else { - tab.className = tableTab; - tab.setAttribute('aria-selected', false); - tab.setAttribute('tabindex',-1); - } - }); -} - -function switchTab(e) { - var selected = document.querySelector('[aria-selected=true]'); - if (selected) { - if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { - // left or up arrow key pressed: move focus to previous tab - selected.previousSibling.click(); - selected.previousSibling.focus(); - e.preventDefault(); - } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { - // right or down arrow key pressed: move focus to next tab - selected.nextSibling.click(); - selected.nextSibling.focus(); - e.preventDefault(); - } - } -} - -var updateSearchResults = function() {}; - -function indexFilesLoaded() { - return moduleSearchIndex - && packageSearchIndex - && typeSearchIndex - && memberSearchIndex - && tagSearchIndex; -} -// Copy the contents of the local snippet to the clipboard -function copySnippet(button) { - copyToClipboard(button.nextElementSibling.innerText); - switchCopyLabel(button, button.firstElementChild); -} -function copyToClipboard(content) { - var textarea = document.createElement("textarea"); - textarea.style.height = 0; - document.body.appendChild(textarea); - textarea.value = content; - textarea.select(); - document.execCommand("copy"); - document.body.removeChild(textarea); -} -function switchCopyLabel(button, span) { - var copied = span.getAttribute("data-copied"); - button.classList.add("visible"); - var initialLabel = span.innerHTML; - span.innerHTML = copied; - setTimeout(function() { - button.classList.remove("visible"); - setTimeout(function() { - if (initialLabel !== copied) { - span.innerHTML = initialLabel; - } - }, 100); - }, 1900); -} -// Workaround for scroll position not being included in browser history (8249133) -document.addEventListener("DOMContentLoaded", function(e) { - var contentDiv = document.querySelector("div.flex-content"); - window.addEventListener("popstate", function(e) { - if (e.state !== null) { - contentDiv.scrollTop = e.state; - } - }); - window.addEventListener("hashchange", function(e) { - history.replaceState(contentDiv.scrollTop, document.title); - }); - var timeoutId; - contentDiv.addEventListener("scroll", function(e) { - if (timeoutId) { - clearTimeout(timeoutId); - } - timeoutId = setTimeout(function() { - history.replaceState(contentDiv.scrollTop, document.title); - }, 100); - }); - if (!location.hash) { - history.replaceState(contentDiv.scrollTop, document.title); - } -}); diff --git a/docs/java/apidocs/search-page.js b/docs/java/apidocs/search-page.js deleted file mode 100644 index 540c90f5..00000000 --- a/docs/java/apidocs/search-page.js +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -"use strict"; -$(function() { - var copy = $("#page-search-copy"); - var expand = $("#page-search-expand"); - var searchLink = $("span#page-search-link"); - var redirect = $("input#search-redirect"); - function setSearchUrlTemplate() { - var href = document.location.href.split(/[#?]/)[0]; - href += "?q=" + "%s"; - if (redirect.is(":checked")) { - href += "&r=1"; - } - searchLink.html(href); - copy[0].onmouseenter(); - } - function copyLink(e) { - copyToClipboard(this.previousSibling.innerText); - switchCopyLabel(this, this.lastElementChild); - } - copy.click(copyLink); - copy[0].onmouseenter = function() {}; - redirect.click(setSearchUrlTemplate); - setSearchUrlTemplate(); - copy.prop("disabled", false); - redirect.prop("disabled", false); - expand.click(function (e) { - var searchInfo = $("div.page-search-info"); - if(this.parentElement.hasAttribute("open")) { - searchInfo.attr("style", "border-width: 0;"); - } else { - searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); - } - }); -}); -$(window).on("load", function() { - var input = $("#page-search-input"); - var reset = $("#page-search-reset"); - var notify = $("#page-search-notify"); - var resultSection = $("div#result-section"); - var resultContainer = $("div#result-container"); - var searchTerm = ""; - var activeTab = ""; - var fixedTab = false; - var visibleTabs = []; - var feelingLucky = false; - function renderResults(result) { - if (!result.length) { - notify.html(messages.noResult); - } else if (result.length === 1) { - notify.html(messages.oneResult); - } else { - notify.html(messages.manyResults.replace("{0}", result.length)); - } - resultContainer.empty(); - var r = { - "types": [], - "members": [], - "packages": [], - "modules": [], - "searchTags": [] - }; - for (var i in result) { - var item = result[i]; - var arr = r[item.category]; - arr.push(item); - } - if (!activeTab || r[activeTab].length === 0 || !fixedTab) { - Object.keys(r).reduce(function(prev, curr) { - if (r[curr].length > 0 && r[curr][0].score > prev) { - activeTab = curr; - return r[curr][0].score; - } - return prev; - }, 0); - } - if (feelingLucky && activeTab) { - notify.html(messages.redirecting) - var firstItem = r[activeTab][0]; - window.location = getURL(firstItem.indexItem, firstItem.category); - return; - } - if (result.length > 20) { - if (searchTerm[searchTerm.length - 1] === ".") { - if (activeTab === "types" && r["members"].length > r["types"].length) { - activeTab = "members"; - } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { - activeTab = "types"; - } - } - } - var categoryCount = Object.keys(r).reduce(function(prev, curr) { - return prev + (r[curr].length > 0 ? 1 : 0); - }, 0); - visibleTabs = []; - var tabContainer = $("
    ").appendTo(resultContainer); - for (var key in r) { - var id = "#result-tab-" + key.replace("searchTags", "search_tags"); - if (r[key].length) { - var count = r[key].length >= 1000 ? "999+" : r[key].length; - if (result.length > 20 && categoryCount > 1) { - var button = $("").appendTo(tabContainer); - button.click(key, function(e) { - fixedTab = true; - renderResult(e.data, $(this)); - }); - visibleTabs.push(key); - } else { - $("" + categories[key] - + " (" + count + ")").appendTo(tabContainer); - renderTable(key, r[key]).appendTo(resultContainer); - tabContainer = $("
    ").appendTo(resultContainer); - - } - } - } - if (activeTab && result.length > 20 && categoryCount > 1) { - $("button#result-tab-" + activeTab).addClass("active-table-tab"); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - } - resultSection.show(); - function renderResult(category, button) { - activeTab = category; - setSearchUrl(); - resultContainer.find("div.summary-table").remove(); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - button.siblings().removeClass("active-table-tab"); - button.addClass("active-table-tab"); - } - } - function selectTab(category) { - $("button#result-tab-" + category).click(); - } - function renderTable(category, items) { - var table = $("
    ") - .addClass(category === "modules" - ? "one-column-search-results" - : "two-column-search-results"); - var col1, col2; - if (category === "modules") { - col1 = "Module"; - } else if (category === "packages") { - col1 = "Module"; - col2 = "Package"; - } else if (category === "types") { - col1 = "Package"; - col2 = "Class" - } else if (category === "members") { - col1 = "Class"; - col2 = "Member"; - } else if (category === "searchTags") { - col1 = "Location"; - col2 = "Name"; - } - $("
    " + col1 + "
    ").appendTo(table); - if (category !== "modules") { - $("
    " + col2 + "
    ").appendTo(table); - } - $.each(items, function(index, item) { - var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; - renderItem(item, table, rowColor); - }); - return table; - } - function renderItem(item, table, rowColor) { - var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); - var link = $("") - .attr("href", getURL(item.indexItem, item.category)) - .attr("tabindex", "0") - .addClass("search-result-link") - .html(label); - var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); - if (item.category === "searchTags") { - container = item.indexItem.h || ""; - } - if (item.category !== "modules") { - $("
    ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); - } - $("
    ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); - } - var timeout; - function schedulePageSearch() { - if (timeout) { - clearTimeout(timeout); - } - timeout = setTimeout(function () { - doPageSearch() - }, 100); - } - function doPageSearch() { - setSearchUrl(); - var term = searchTerm = input.val().trim(); - if (term === "") { - notify.html(messages.enterTerm); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - resultSection.hide(); - } else { - notify.html(messages.searching); - doSearch({ term: term, maxResults: 1200 }, renderResults); - } - } - function setSearchUrl() { - var query = input.val().trim(); - var url = document.location.pathname; - if (query) { - url += "?q=" + encodeURI(query); - if (activeTab && fixedTab) { - url += "&c=" + activeTab; - } - } - history.replaceState({query: query}, "", url); - } - input.on("input", function(e) { - feelingLucky = false; - schedulePageSearch(); - }); - $(document).keydown(function(e) { - if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { - if (activeTab && visibleTabs.length > 1) { - var idx = visibleTabs.indexOf(activeTab); - idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; - selectTab(visibleTabs[idx % visibleTabs.length]); - return false; - } - } - }); - reset.click(function() { - notify.html(messages.enterTerm); - resultSection.hide(); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - input.val('').focus(); - setSearchUrl(); - }); - input.prop("disabled", false); - reset.prop("disabled", false); - - var urlParams = new URLSearchParams(window.location.search); - if (urlParams.has("q")) { - input.val(urlParams.get("q")) - } - if (urlParams.has("c")) { - activeTab = urlParams.get("c"); - fixedTab = true; - } - if (urlParams.get("r")) { - feelingLucky = true; - } - if (input.val()) { - doPageSearch(); - } else { - notify.html(messages.enterTerm); - } - input.select().focus(); -}); diff --git a/docs/java/apidocs/search.html b/docs/java/apidocs/search.html deleted file mode 100644 index 3b0c2cd5..00000000 --- a/docs/java/apidocs/search.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -Search (voyager 2.1.0 API) - - - - - - - - - - - - - - -
    - -
    -
    -

    Search

    -
    - - -
    -Additional resources -
    -
    -
    -

    The help page provides an introduction to the scope and syntax of JavaDoc search.

    -

    You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.

    -

    The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.

    -link -

    - -

    -
    -

    Loading search index...

    - -
    -
    -
    - -
    -
    -
    - - diff --git a/docs/java/apidocs/search.js b/docs/java/apidocs/search.js deleted file mode 100644 index 7673397e..00000000 --- a/docs/java/apidocs/search.js +++ /dev/null @@ -1,458 +0,0 @@ -/* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -"use strict"; -const messages = { - enterTerm: "Enter a search term", - noResult: "No results found", - oneResult: "Found one result", - manyResults: "Found {0} results", - loading: "Loading search index...", - searching: "Searching...", - redirecting: "Redirecting to first result...", - linkIcon: "Link icon", - linkToSection: "Link to this section" -} -const categories = { - modules: "Modules", - packages: "Packages", - types: "Types", - members: "Members", - searchTags: "Search Tags" -}; -const highlight = "$&"; -const NO_MATCH = {}; -const MAX_RESULTS = 300; -function checkUnnamed(name, separator) { - return name === "" || !name ? "" : name + separator; -} -function escapeHtml(str) { - return str.replace(//g, ">"); -} -function getHighlightedText(str, boundaries, from, to) { - var start = from; - var text = ""; - for (var i = 0; i < boundaries.length; i += 2) { - var b0 = boundaries[i]; - var b1 = boundaries[i + 1]; - if (b0 >= to || b1 <= from) { - continue; - } - text += escapeHtml(str.slice(start, Math.max(start, b0))); - text += ""; - text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); - text += ""; - start = Math.min(to, b1); - } - text += escapeHtml(str.slice(start, to)); - return text; -} -function getURLPrefix(item, category) { - var urlPrefix = ""; - var slash = "/"; - if (category === "modules") { - return item.l + slash; - } else if (category === "packages" && item.m) { - return item.m + slash; - } else if (category === "types" || category === "members") { - if (item.m) { - urlPrefix = item.m + slash; - } else { - $.each(packageSearchIndex, function(index, it) { - if (it.m && item.p === it.l) { - urlPrefix = it.m + slash; - } - }); - } - } - return urlPrefix; -} -function getURL(item, category) { - if (item.url) { - return item.url; - } - var url = getURLPrefix(item, category); - if (category === "modules") { - url += "module-summary.html"; - } else if (category === "packages") { - if (item.u) { - url = item.u; - } else { - url += item.l.replace(/\./g, '/') + "/package-summary.html"; - } - } else if (category === "types") { - if (item.u) { - url = item.u; - } else { - url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; - } - } else if (category === "members") { - url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; - if (item.u) { - url += item.u; - } else { - url += item.l; - } - } else if (category === "searchTags") { - url += item.u; - } - item.url = url; - return url; -} -function createMatcher(term, camelCase) { - if (camelCase && !isUpperCase(term)) { - return null; // no need for camel-case matcher for lower case query - } - var pattern = ""; - var upperCase = []; - term.trim().split(/\s+/).forEach(function(w, index, array) { - var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); - for (var i = 0; i < tokens.length; i++) { - var s = tokens[i]; - // ',' and '?' are the only delimiters commonly followed by space in java signatures - pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; - upperCase.push(false); - var isWordToken = /\w$/.test(s); - if (isWordToken) { - if (i === tokens.length - 1 && index < array.length - 1) { - // space in query string matches all delimiters - pattern += "(.*?)"; - upperCase.push(isUpperCase(s[0])); - } else { - if (!camelCase && isUpperCase(s) && s.length === 1) { - pattern += "()"; - } else { - pattern += "([a-z0-9$<>?[\\]]*?)"; - } - upperCase.push(isUpperCase(s[0])); - } - } else { - pattern += "()"; - upperCase.push(false); - } - } - }); - var re = new RegExp(pattern, "gi"); - re.upperCase = upperCase; - return re; -} -function findMatch(matcher, input, startOfName, endOfName) { - var from = startOfName; - matcher.lastIndex = from; - var match = matcher.exec(input); - // Expand search area until we get a valid result or reach the beginning of the string - while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { - if (from === 0) { - return NO_MATCH; - } - from = input.lastIndexOf(".", from - 2) + 1; - matcher.lastIndex = from; - match = matcher.exec(input); - } - var boundaries = []; - var matchEnd = match.index + match[0].length; - var score = 5; - var start = match.index; - var prevEnd = -1; - for (var i = 1; i < match.length; i += 2) { - var isUpper = isUpperCase(input[start]); - var isMatcherUpper = matcher.upperCase[i]; - // capturing groups come in pairs, match and non-match - boundaries.push(start, start + match[i].length); - // make sure groups are anchored on a left word boundary - var prevChar = input[start - 1] || ""; - var nextChar = input[start + 1] || ""; - if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { - if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { - score -= 0.1; - } else if (isMatcherUpper && start === prevEnd) { - score -= isUpper ? 0.1 : 1.0; - } else { - return NO_MATCH; - } - } - prevEnd = start + match[i].length; - start += match[i].length + match[i + 1].length; - - // lower score for parts of the name that are missing - if (match[i + 1] && prevEnd < endOfName) { - score -= rateNoise(match[i + 1]); - } - } - // lower score if a type name contains unmatched camel-case parts - if (input[matchEnd - 1] !== "." && endOfName > matchEnd) - score -= rateNoise(input.slice(matchEnd, endOfName)); - score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); - - if (score <= 0) { - return NO_MATCH; - } - return { - input: input, - score: score, - boundaries: boundaries - }; -} -function isUpperCase(s) { - return s !== s.toLowerCase(); -} -function isLowerCase(s) { - return s !== s.toUpperCase(); -} -function rateNoise(str) { - return (str.match(/([.(])/g) || []).length / 5 - + (str.match(/([A-Z]+)/g) || []).length / 10 - + str.length / 20; -} -function doSearch(request, response) { - var term = request.term.trim(); - var maxResults = request.maxResults || MAX_RESULTS; - if (term.length === 0) { - return this.close(); - } - var matcher = { - plainMatcher: createMatcher(term, false), - camelCaseMatcher: createMatcher(term, true) - } - var indexLoaded = indexFilesLoaded(); - - function getPrefix(item, category) { - switch (category) { - case "packages": - return checkUnnamed(item.m, "/"); - case "types": - return checkUnnamed(item.p, "."); - case "members": - return checkUnnamed(item.p, ".") + item.c + "."; - default: - return ""; - } - } - function useQualifiedName(category) { - switch (category) { - case "packages": - return /[\s/]/.test(term); - case "types": - case "members": - return /[\s.]/.test(term); - default: - return false; - } - } - function searchIndex(indexArray, category) { - var matches = []; - if (!indexArray) { - if (!indexLoaded) { - matches.push({ l: messages.loading, category: category }); - } - return matches; - } - $.each(indexArray, function (i, item) { - var prefix = getPrefix(item, category); - var simpleName = item.l; - var qualifiedName = prefix + simpleName; - var useQualified = useQualifiedName(category); - var input = useQualified ? qualifiedName : simpleName; - var startOfName = useQualified ? prefix.length : 0; - var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 - ? input.indexOf("(", startOfName) : input.length; - var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); - if (m === NO_MATCH && matcher.camelCaseMatcher) { - m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); - } - if (m !== NO_MATCH) { - m.indexItem = item; - m.prefix = prefix; - m.category = category; - if (!useQualified) { - m.input = qualifiedName; - m.boundaries = m.boundaries.map(function(b) { - return b + prefix.length; - }); - } - matches.push(m); - } - return true; - }); - return matches.sort(function(e1, e2) { - return e2.score - e1.score; - }).slice(0, maxResults); - } - - var result = searchIndex(moduleSearchIndex, "modules") - .concat(searchIndex(packageSearchIndex, "packages")) - .concat(searchIndex(typeSearchIndex, "types")) - .concat(searchIndex(memberSearchIndex, "members")) - .concat(searchIndex(tagSearchIndex, "searchTags")); - - if (!indexLoaded) { - updateSearchResults = function() { - doSearch(request, response); - } - } else { - updateSearchResults = function() {}; - } - response(result); -} -// JQuery search menu implementation -$.widget("custom.catcomplete", $.ui.autocomplete, { - _create: function() { - this._super(); - this.widget().menu("option", "items", "> .result-item"); - // workaround for search result scrolling - this.menu._scrollIntoView = function _scrollIntoView( item ) { - var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; - if ( this._hasScroll() ) { - borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; - paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; - offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; - scroll = this.activeMenu.scrollTop(); - elementHeight = this.activeMenu.height() - 26; - itemHeight = item.outerHeight(); - - if ( offset < 0 ) { - this.activeMenu.scrollTop( scroll + offset ); - } else if ( offset + itemHeight > elementHeight ) { - this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); - } - } - }; - }, - _renderMenu: function(ul, items) { - var currentCategory = ""; - var widget = this; - widget.menu.bindings = $(); - $.each(items, function(index, item) { - if (item.category && item.category !== currentCategory) { - ul.append("
  • " + categories[item.category] + "
  • "); - currentCategory = item.category; - } - var li = widget._renderItemData(ul, item); - if (item.category) { - li.attr("aria-label", categories[item.category] + " : " + item.l); - } else { - li.attr("aria-label", item.l); - } - li.attr("class", "result-item"); - }); - ul.append(""); - }, - _renderItem: function(ul, item) { - var li = $("
  • ").appendTo(ul); - var div = $("
    ").appendTo(li); - var label = item.l - ? item.l - : getHighlightedText(item.input, item.boundaries, 0, item.input.length); - var idx = item.indexItem; - if (item.category === "searchTags" && idx && idx.h) { - if (idx.d) { - div.html(label + " (" + idx.h + ")
    " - + idx.d + "
    "); - } else { - div.html(label + " (" + idx.h + ")"); - } - } else { - div.html(label); - } - return li; - } -}); -$(function() { - var expanded = false; - var windowWidth; - function collapse() { - if (expanded) { - $("div#navbar-top").removeAttr("style"); - $("button#navbar-toggle-button") - .removeClass("expanded") - .attr("aria-expanded", "false"); - expanded = false; - } - } - $("button#navbar-toggle-button").click(function (e) { - if (expanded) { - collapse(); - } else { - var navbar = $("div#navbar-top"); - navbar.height(navbar.prop("scrollHeight")); - $("button#navbar-toggle-button") - .addClass("expanded") - .attr("aria-expanded", "true"); - expanded = true; - windowWidth = window.innerWidth; - } - }); - $("ul.sub-nav-list-small li a").click(collapse); - $("input#search-input").focus(collapse); - $("main").click(collapse); - $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { - // Create anchor links for headers with an associated id attribute - var hdr = $(el); - var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); - if (id) { - hdr.append(" " + messages.linkIcon +""); - } - }); - $(window).on("orientationchange", collapse).on("resize", function(e) { - if (expanded && windowWidth !== window.innerWidth) collapse(); - }); - var search = $("#search-input"); - var reset = $("#reset-button"); - search.catcomplete({ - minLength: 1, - delay: 200, - source: doSearch, - response: function(event, ui) { - if (!ui.content.length) { - ui.content.push({ l: messages.noResult }); - } else { - $("#search-input").empty(); - } - }, - autoFocus: true, - focus: function(event, ui) { - return false; - }, - position: { - collision: "flip" - }, - select: function(event, ui) { - if (ui.item.indexItem) { - var url = getURL(ui.item.indexItem, ui.item.category); - window.location.href = pathtoroot + url; - $("#search-input").focus(); - } - } - }); - search.val(''); - search.prop("disabled", false); - reset.prop("disabled", false); - reset.click(function() { - search.val('').focus(); - }); - search.focus(); -}); diff --git a/docs/java/apidocs/serialized-form.html b/docs/java/apidocs/serialized-form.html deleted file mode 100644 index e3379b94..00000000 --- a/docs/java/apidocs/serialized-form.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -Serialized Form (voyager 2.1.0 API) - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Serialized Form

    -
    - -
    -
    -
    - -
    -
    -
    - - diff --git a/docs/java/apidocs/stylesheet.css b/docs/java/apidocs/stylesheet.css deleted file mode 100644 index f71489f8..00000000 --- a/docs/java/apidocs/stylesheet.css +++ /dev/null @@ -1,1272 +0,0 @@ -/* - * Javadoc style sheet - */ - -@import url('resources/fonts/dejavu.css'); - -/* - * These CSS custom properties (variables) define the core color and font - * properties used in this stylesheet. - */ -:root { - /* body, block and code fonts */ - --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - --code-font-family: 'DejaVu Sans Mono', monospace; - /* Base font sizes for body and code elements */ - --body-font-size: 14px; - --code-font-size: 14px; - /* Text colors for body and block elements */ - --body-text-color: #353833; - --block-text-color: #474747; - /* Background colors for various structural elements */ - --body-background-color: #ffffff; - --section-background-color: #f8f8f8; - --detail-background-color: #ffffff; - /* Colors for navigation bar and table captions */ - --navbar-background-color: #4D7A97; - --navbar-text-color: #ffffff; - /* Background color for subnavigation and various headers */ - --subnav-background-color: #dee3e9; - /* Background and text colors for selected tabs and navigation items */ - --selected-background-color: #f8981d; - --selected-text-color: #253441; - --selected-link-color: #1f389c; - /* Background colors for generated tables */ - --even-row-color: #ffffff; - --odd-row-color: #eeeeef; - /* Text color for page title */ - --title-color: #2c4557; - /* Text colors for links */ - --link-color: #4A6782; - --link-color-active: #bb7a2a; - /* Snippet colors */ - --snippet-background-color: #ebecee; - --snippet-text-color: var(--block-text-color); - --snippet-highlight-color: #f7c590; - /* Border colors for structural elements and user defined tables */ - --border-color: #ededed; - --table-border-color: #000000; - /* Search input colors */ - --search-input-background-color: #ffffff; - --search-input-text-color: #000000; - --search-input-placeholder-color: #909090; - /* Highlight color for active search tag target */ - --search-tag-highlight-color: #ffff00; - /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ - --copy-icon-brightness: 100%; - --copy-button-background-color-active: rgba(168, 168, 176, 0.3); - /* Colors for invalid tag notifications */ - --invalid-tag-background-color: #ffe6e6; - --invalid-tag-text-color: #000000; -} -/* - * Styles for individual HTML elements. - * - * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular - * HTML element throughout the page. - */ -body { - background-color:var(--body-background-color); - color:var(--body-text-color); - font-family:var(--body-font-family); - font-size:var(--body-font-size); - margin:0; - padding:0; - height:100%; - width:100%; -} -iframe { - margin:0; - padding:0; - height:100%; - width:100%; - overflow-y:scroll; - border:none; -} -a:link, a:visited { - text-decoration:none; - color:var(--link-color); -} -a[href]:hover, a[href]:focus { - text-decoration:none; - color:var(--link-color-active); -} -pre { - font-family:var(--code-font-family); - font-size:1em; -} -h1 { - font-size:1.428em; -} -h2 { - font-size:1.285em; -} -h3 { - font-size:1.14em; -} -h4 { - font-size:1.072em; -} -h5 { - font-size:1.001em; -} -h6 { - font-size:0.93em; -} -/* Disable font boosting for selected elements */ -h1, h2, h3, h4, h5, h6, div.member-signature { - max-height: 1000em; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:var(--code-font-family); -} -:not(h1, h2, h3, h4, h5, h6) > code, -:not(h1, h2, h3, h4, h5, h6) > tt { - font-size:var(--code-font-size); - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:var(--code-font-family); - font-size:1em; - padding-top:4px; -} -.summary-table dt code { - font-family:var(--code-font-family); - font-size:1em; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -button { - font-family: var(--body-font-family); - font-size: 1em; -} -/* - * Styles for HTML generated by javadoc. - * - * These are style classes that are used by the standard doclet to generate HTML documentation. - */ - -/* - * Styles for document title and copyright. - */ -.about-language { - float:right; - padding:0 21px 8px 8px; - font-size:0.915em; - margin-top:-9px; - height:2.9em; -} -.legal-copy { - margin-left:.5em; -} -/* - * Styles for navigation bar. - */ -@media screen { - div.flex-box { - position:fixed; - display:flex; - flex-direction:column; - height: 100%; - width: 100%; - } - header.flex-header { - flex: 0 0 auto; - } - div.flex-content { - flex: 1 1 auto; - overflow-y: auto; - } -} -.top-nav { - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); - float:left; - width:100%; - clear:right; - min-height:2.8em; - padding:10px 0 0 0; - overflow:hidden; - font-size:0.857em; -} -button#navbar-toggle-button { - display:none; -} -ul.sub-nav-list-small { - display: none; -} -.sub-nav { - background-color:var(--subnav-background-color); - float:left; - width:100%; - overflow:hidden; - font-size:0.857em; -} -.sub-nav div { - clear:left; - float:left; - padding:6px; - text-transform:uppercase; -} -.sub-nav .sub-nav-list { - padding-top:4px; -} -ul.nav-list { - display:block; - margin:0 25px 0 0; - padding:0; -} -ul.sub-nav-list { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.nav-list li { - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list-search { - float:right; - margin:0; - padding:6px; - clear:none; - text-align:right; - position:relative; -} -ul.sub-nav-list li { - list-style:none; - float:left; -} -.top-nav a:link, .top-nav a:active, .top-nav a:visited { - color:var(--navbar-text-color); - text-decoration:none; - text-transform:uppercase; -} -.top-nav a:hover { - color:var(--link-color-active); -} -.nav-bar-cell1-rev { - background-color:var(--selected-background-color); - color:var(--selected-text-color); - margin: auto 5px; -} -.skip-nav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* - * Hide navigation links and search box in print layout - */ -@media print { - ul.nav-list, div.sub-nav { - display:none; - } -} -/* - * Styles for page header. - */ -.title { - color:var(--title-color); - margin:10px 0; -} -.sub-title { - margin:5px 0 0 0; -} -ul.contents-list { - margin: 0 0 15px 0; - padding: 0; - list-style: none; -} -ul.contents-list li { - font-size:0.93em; -} -/* - * Styles for headings. - */ -body.class-declaration-page .summary h2, -body.class-declaration-page .details h2, -body.class-use-page h2, -body.module-declaration-page .block-list h2 { - font-style: italic; - padding:0; - margin:15px 0; -} -body.class-declaration-page .summary h3, -body.class-declaration-page .details h3, -body.class-declaration-page .summary .inherited-list h2 { - background-color:var(--subnav-background-color); - border:1px solid var(--border-color); - margin:0 0 6px -8px; - padding:7px 5px; -} -/* - * Styles for page layout containers. - */ -main { - clear:both; - padding:10px 20px; - position:relative; -} -dl.notes > dt { - font-family: var(--body-font-family); - font-size:0.856em; - font-weight:bold; - margin:10px 0 0 0; - color:var(--body-text-color); -} -dl.notes > dd { - margin:5px 10px 10px 0; - font-size:1em; - font-family:var(--block-font-family) -} -dl.name-value > dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -dl.name-value > dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* - * Styles for lists. - */ -li.circle { - list-style:circle; -} -ul.horizontal li { - display:inline; - font-size:0.9em; -} -div.inheritance { - margin:0; - padding:0; -} -div.inheritance div.inheritance { - margin-left:2em; -} -ul.block-list, -ul.details-list, -ul.member-list, -ul.summary-list { - margin:10px 0 10px 0; - padding:0; -} -ul.block-list > li, -ul.details-list > li, -ul.member-list > li, -ul.summary-list > li { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -ul.ref-list { - padding:0; - margin:0; -} -ul.ref-list > li { - list-style:none; -} -.summary-table dl, .summary-table dl dt, .summary-table dl dd { - margin-top:0; - margin-bottom:1px; -} -ul.tag-list, ul.tag-list-long { - padding-left: 0; - list-style: none; -} -ul.tag-list li { - display: inline; -} -ul.tag-list li:not(:last-child):after, -ul.tag-list-long li:not(:last-child):after -{ - content: ", "; - white-space: pre-wrap; -} -ul.preview-feature-list { - list-style: none; - margin:0; - padding:0.1em; - line-height: 1.6em; -} -/* - * Styles for tables. - */ -.summary-table, .details-table { - width:100%; - border-spacing:0; - border:1px solid var(--border-color); - border-top:0; - padding:0; -} -.caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:var(--selected-text-color); - clear:none; - overflow:hidden; - padding: 10px 0 0 1px; - margin:0; -} -.caption a:link, .caption a:visited { - color:var(--selected-link-color); -} -.caption a:hover, -.caption a:active { - color:var(--navbar-text-color); -} -.caption span { - font-weight:bold; - white-space:nowrap; - padding:5px 12px 7px 12px; - display:inline-block; - float:left; - background-color:var(--selected-background-color); - border: none; - height:16px; -} -div.table-tabs { - padding:10px 0 0 1px; - margin:10px 0 0 0; -} -div.table-tabs > button { - border: none; - cursor: pointer; - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 8px; -} -div.table-tabs > .active-table-tab { - background: var(--selected-background-color); - color: var(--selected-text-color); -} -div.table-tabs > button.table-tab { - background: var(--navbar-background-color); - color: var(--navbar-text-color); -} -.two-column-search-results { - display: grid; - grid-template-columns: minmax(400px, max-content) minmax(400px, auto); -} -div.checkboxes { - line-height: 2em; -} -div.checkboxes > span { - margin-left: 10px; -} -div.checkboxes > label { - margin-left: 8px; - white-space: nowrap; -} -div.checkboxes > label > input { - margin: 0 2px; -} -.two-column-summary { - display: grid; - grid-template-columns: minmax(25%, max-content) minmax(25%, auto); -} -.three-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); -} -.three-column-release-summary { - display: grid; - grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); -} -.four-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); -} -@media screen and (max-width: 1000px) { - .four-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); - } -} -@media screen and (max-width: 800px) { - .two-column-search-results { - display: grid; - grid-template-columns: minmax(40%, max-content) minmax(40%, auto); - } - .three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(25%, auto); - } - .three-column-release-summary { - display: grid; - grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) - } - .three-column-summary .col-last, - .three-column-release-summary .col-last{ - grid-column-end: span 2; - } -} -@media screen and (max-width: 600px) { - .two-column-summary { - display: grid; - grid-template-columns: 1fr; - } -} -.summary-table > div, .details-table > div { - text-align:left; - padding: 8px 3px 3px 7px; - overflow-x: auto; - scrollbar-width: thin; -} -.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { - vertical-align:top; - padding-right:0; - padding-top:8px; - padding-bottom:3px; -} -.table-header { - background:var(--subnav-background-color); - font-weight: bold; -} -/* Sortable table columns */ -.table-header[onclick] { - cursor: pointer; -} -.table-header[onclick]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - '); - background-size:100% 100%; - width:9px; - height:14px; - margin-left:4px; - margin-bottom:-3px; -} -.table-header[onclick].sort-asc::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - -} -.table-header[onclick].sort-desc::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} -.col-first, .col-first { - font-size:0.93em; -} -.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { - font-size:0.93em; -} -.col-first, .col-second, .col-constructor-name { - vertical-align:top; - overflow: auto; -} -.col-last { - white-space:normal; -} -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-constructor-name a:link, .col-constructor-name a:visited, -.col-summary-item-name a:link, .col-summary-item-name a:visited { - font-weight:bold; -} -.even-row-color, .even-row-color .table-header { - background-color:var(--even-row-color); -} -.odd-row-color, .odd-row-color .table-header { - background-color:var(--odd-row-color); -} -/* - * Styles for contents. - */ -div.block { - font-size:var(--body-font-size); - font-family:var(--block-font-family); -} -.col-last div { - padding-top:0; -} -.col-last a { - padding-bottom:3px; -} -.module-signature, -.package-signature, -.type-signature, -.member-signature { - font-family:var(--code-font-family); - font-size:1em; - margin:14px 0; - white-space: pre-wrap; -} -.module-signature, -.package-signature, -.type-signature { - margin-top: 0; -} -.member-signature .type-parameters-long, -.member-signature .parameters, -.member-signature .exceptions { - display: inline-block; - vertical-align: top; - white-space: pre; -} -.member-signature .type-parameters { - white-space: normal; -} -/* - * Styles for formatting effect. - */ -.source-line-no { - /* Color of line numbers in source pages can be set via custom property below */ - color:var(--source-linenumber-color, green); - padding:0 30px 0 0; -} -.block { - display:block; - margin:0 10px 5px 0; - color:var(--block-text-color); -} -.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, -.module-label-in-package, .module-label-in-type, .package-label-in-type, -.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { - font-weight:bold; -} -.deprecation-comment, .help-footnote, .preview-comment { - font-style:italic; -} -.deprecation-block { - font-size:1em; - font-family:var(--block-font-family); - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -.preview-block { - font-size:1em; - font-family:var(--block-font-family); - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -div.block div.deprecation-comment { - font-style:normal; -} -details.invalid-tag, span.invalid-tag { - font-size:1em; - font-family:var(--block-font-family); - color: var(--invalid-tag-text-color); - background: var(--invalid-tag-background-color); - border: thin solid var(--table-border-color); - border-radius:2px; - padding: 2px 4px; - display:inline-block; -} -details summary { - cursor: pointer; -} -/* - * Styles specific to HTML5 elements. - */ -main, nav, header, footer, section { - display:block; -} -/* - * Styles for javadoc search. - */ -.ui-state-active { - /* Overrides the color of selection used in jQuery UI */ - background: var(--selected-background-color); - border: 1px solid var(--selected-background-color); - color: var(--selected-text-color); -} -.ui-autocomplete-category { - font-weight:bold; - font-size:15px; - padding:7px 0 7px 3px; - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); -} -.ui-autocomplete { - max-height:85%; - max-width:65%; - overflow-y:auto; - overflow-x:auto; - scrollbar-width: thin; - white-space:nowrap; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -ul.ui-autocomplete { - position:fixed; - z-index:1; - background-color: var(--body-background-color); -} -ul.ui-autocomplete li { - float:left; - clear:both; - min-width:100%; -} -ul.ui-autocomplete li.ui-static-link { - position:sticky; - bottom:0; - left:0; - background: var(--subnav-background-color); - padding: 5px 0; - font-family: var(--body-font-family); - font-size: 0.93em; - font-weight: bolder; - z-index: 2; -} -li.ui-static-link a, li.ui-static-link a:visited { - text-decoration:none; - color:var(--link-color); - float:right; - margin-right:20px; -} -.ui-autocomplete .result-item { - font-size: inherit; -} -.ui-autocomplete .result-highlight { - font-weight:bold; -} -#search-input, #page-search-input { - background-image:url('resources/glass.png'); - background-size:13px; - background-repeat:no-repeat; - background-position:2px 3px; - background-color: var(--search-input-background-color); - color: var(--search-input-text-color); - border-color: var(--border-color); - padding-left:20px; - width: 250px; - margin: 0; -} -#search-input { - margin-left: 4px; -} -#reset-button { - background-color: transparent; - background-image:url('resources/x.png'); - background-repeat:no-repeat; - background-size:contain; - border:0; - border-radius:0; - width:12px; - height:12px; - position:absolute; - right:12px; - top:10px; - font-size:0; -} -::placeholder { - color:var(--search-input-placeholder-color); - opacity: 1; -} -.search-tag-desc-result { - font-style:italic; - font-size:11px; -} -.search-tag-holder-result { - font-style:italic; - font-size:12px; -} -.search-tag-result:target { - background-color:var(--search-tag-highlight-color); -} -details.page-search-details { - display: inline-block; -} -div#result-container { - font-size: 1em; -} -div#result-container a.search-result-link { - padding: 0; - margin: 4px 0; - width: 100%; -} -#result-container .result-highlight { - font-weight:bolder; -} -.page-search-info { - background-color: var(--subnav-background-color); - border-radius: 3px; - border: 0 solid var(--border-color); - padding: 0 8px; - overflow: hidden; - height: 0; - transition: all 0.2s ease; -} -div.table-tabs > button.table-tab { - background: var(--navbar-background-color); - color: var(--navbar-text-color); -} -.page-search-header { - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 3px; - background-color:var(--navbar-background-color); - color:var(--navbar-text-color); - display: inline-block; -} -button.page-search-header { - border: none; - cursor: pointer; -} -span#page-search-link { - text-decoration: underline; -} -.module-graph span, .sealed-graph span { - display:none; - position:absolute; -} -.module-graph:hover span, .sealed-graph:hover span { - display:block; - margin: -100px 0 0 100px; - z-index: 1; -} -.inherited-list { - margin: 10px 0 10px 0; -} -section.class-description { - line-height: 1.4; -} -.summary section[class$="-summary"], .details section[class$="-details"], -.class-uses .detail, .serialized-class-details { - padding: 0 20px 5px 10px; - border: 1px solid var(--border-color); - background-color: var(--section-background-color); -} -.inherited-list, section[class$="-details"] .detail { - padding:0 0 5px 8px; - background-color:var(--detail-background-color); - border:none; -} -.vertical-separator { - padding: 0 5px; -} -ul.help-section-list { - margin: 0; -} -ul.help-subtoc > li { - display: inline-block; - padding-right: 5px; - font-size: smaller; -} -ul.help-subtoc > li::before { - content: "\2022" ; - padding-right:2px; -} -.help-note { - font-style: italic; -} -/* - * Indicator icon for external links. - */ -main a[href*="://"]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - background-size:100% 100%; - width:7px; - height:7px; - margin-left:2px; - margin-bottom:4px; -} -main a[href*="://"]:hover::after, -main a[href*="://"]:focus::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} -/* - * Styles for header/section anchor links - */ -a.anchor-link { - opacity: 0; - transition: opacity 0.1s; -} -:hover > a.anchor-link { - opacity: 80%; -} -a.anchor-link:hover, -a.anchor-link:focus-visible, -a.anchor-link.visible { - opacity: 100%; -} -a.anchor-link > img { - width: 0.9em; - height: 0.9em; -} -/* - * Styles for copy-to-clipboard buttons - */ -button.copy { - opacity: 70%; - border: none; - border-radius: 3px; - position: relative; - background:none; - transition: opacity 0.3s; - cursor: pointer; -} -:hover > button.copy { - opacity: 80%; -} -button.copy:hover, -button.copy:active, -button.copy:focus-visible, -button.copy.visible { - opacity: 100%; -} -button.copy img { - position: relative; - background: none; - filter: brightness(var(--copy-icon-brightness)); -} -button.copy:active { - background-color: var(--copy-button-background-color-active); -} -button.copy span { - color: var(--body-text-color); - position: relative; - top: -0.1em; - transition: all 0.1s; - font-size: 0.76rem; - line-height: 1.2em; - opacity: 0; -} -button.copy:hover span, -button.copy:focus-visible span, -button.copy.visible span { - opacity: 100%; -} -/* search page copy button */ -button#page-search-copy { - margin-left: 0.4em; - padding:0.3em; - top:0.13em; -} -button#page-search-copy img { - width: 1.2em; - height: 1.2em; - padding: 0.01em 0; - top: 0.15em; -} -button#page-search-copy span { - color: var(--body-text-color); - line-height: 1.2em; - padding: 0.2em; - top: -0.18em; -} -div.page-search-info:hover button#page-search-copy span { - opacity: 100%; -} -/* snippet copy button */ -button.snippet-copy { - position: absolute; - top: 6px; - right: 6px; - height: 1.7em; - padding: 2px; -} -button.snippet-copy img { - width: 18px; - height: 18px; - padding: 0.05em 0; -} -button.snippet-copy span { - line-height: 1.2em; - padding: 0.2em; - position: relative; - top: -0.5em; -} -div.snippet-container:hover button.snippet-copy span { - opacity: 100%; -} -/* - * Styles for user-provided tables. - * - * borderless: - * No borders, vertical margins, styled caption. - * This style is provided for use with existing doc comments. - * In general, borderless tables should not be used for layout purposes. - * - * plain: - * Plain borders around table and cells, vertical margins, styled caption. - * Best for small tables or for complex tables for tables with cells that span - * rows and columns, when the "striped" style does not work well. - * - * striped: - * Borders around the table and vertical borders between cells, striped rows, - * vertical margins, styled caption. - * Best for tables that have a header row, and a body containing a series of simple rows. - */ - -table.borderless, -table.plain, -table.striped { - margin-top: 10px; - margin-bottom: 10px; -} -table.borderless > caption, -table.plain > caption, -table.striped > caption { - font-weight: bold; - font-size: smaller; -} -table.borderless th, table.borderless td, -table.plain th, table.plain td, -table.striped th, table.striped td { - padding: 2px 5px; -} -table.borderless, -table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, -table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { - border: none; -} -table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { - background-color: transparent; -} -table.plain { - border-collapse: collapse; - border: 1px solid var(--table-border-color); -} -table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { - background-color: transparent; -} -table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, -table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { - border: 1px solid var(--table-border-color); -} -table.striped { - border-collapse: collapse; - border: 1px solid var(--table-border-color); -} -table.striped > thead { - background-color: var(--subnav-background-color); -} -table.striped > thead > tr > th, table.striped > thead > tr > td { - border: 1px solid var(--table-border-color); -} -table.striped > tbody > tr:nth-child(even) { - background-color: var(--odd-row-color) -} -table.striped > tbody > tr:nth-child(odd) { - background-color: var(--even-row-color) -} -table.striped > tbody > tr > th, table.striped > tbody > tr > td { - border-left: 1px solid var(--table-border-color); - border-right: 1px solid var(--table-border-color); -} -table.striped > tbody > tr > th { - font-weight: normal; -} -/** - * Tweak style for small screens. - */ -@media screen and (max-width: 920px) { - header.flex-header { - max-height: 100vh; - overflow-y: auto; - } - div#navbar-top { - height: 2.8em; - transition: height 0.35s ease; - } - ul.nav-list { - display: block; - width: 40%; - float:left; - clear: left; - margin: 10px 0 0 0; - padding: 0; - } - ul.nav-list li { - float: none; - padding: 6px; - margin-left: 10px; - margin-top: 2px; - } - ul.sub-nav-list-small { - display:block; - height: 100%; - width: 50%; - float: right; - clear: right; - background-color: var(--subnav-background-color); - color: var(--body-text-color); - margin: 6px 0 0 0; - padding: 0; - } - ul.sub-nav-list-small ul { - padding-left: 20px; - } - ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { - color:var(--link-color); - } - ul.sub-nav-list-small a:hover { - color:var(--link-color-active); - } - ul.sub-nav-list-small li { - list-style:none; - float:none; - padding: 6px; - margin-top: 1px; - text-transform:uppercase; - } - ul.sub-nav-list-small > li { - margin-left: 10px; - } - ul.sub-nav-list-small li p { - margin: 5px 0; - } - div#navbar-sub-list { - display: none; - } - .top-nav a:link, .top-nav a:active, .top-nav a:visited { - display: block; - } - button#navbar-toggle-button { - width: 3.4em; - height: 2.8em; - background-color: transparent; - display: block; - float: left; - border: 0; - margin: 0 10px; - cursor: pointer; - font-size: 10px; - } - button#navbar-toggle-button .nav-bar-toggle-icon { - display: block; - width: 24px; - height: 3px; - margin: 1px 0 4px 0; - border-radius: 2px; - transition: all 0.1s; - background-color: var(--navbar-text-color); - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { - transform: rotate(45deg); - transform-origin: 10% 10%; - width: 26px; - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { - opacity: 0; - } - button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { - transform: rotate(-45deg); - transform-origin: 10% 90%; - width: 26px; - } -} -@media screen and (max-width: 800px) { - .about-language { - padding-right: 16px; - } - ul.nav-list li { - margin-left: 5px; - } - ul.sub-nav-list-small > li { - margin-left: 5px; - } - main { - padding: 10px; - } - .summary section[class$="-summary"], .details section[class$="-details"], - .class-uses .detail, .serialized-class-details { - padding: 0 8px 5px 8px; - } - body { - -webkit-text-size-adjust: none; - } -} -@media screen and (max-width: 400px) { - .about-language { - font-size: 10px; - padding-right: 12px; - } -} -@media screen and (max-width: 400px) { - .nav-list-search { - width: 94%; - } - #search-input, #page-search-input { - width: 70%; - } -} -@media screen and (max-width: 320px) { - .nav-list-search > label { - display: none; - } - .nav-list-search { - width: 90%; - } - #search-input, #page-search-input { - width: 80%; - } -} - -pre.snippet { - background-color: var(--snippet-background-color); - color: var(--snippet-text-color); - padding: 10px; - margin: 12px 0; - overflow: auto; - white-space: pre; -} -div.snippet-container { - position: relative; -} -@media screen and (max-width: 800px) { - pre.snippet { - padding-top: 26px; - } - button.snippet-copy { - top: 4px; - right: 4px; - } -} -pre.snippet .italic { - font-style: italic; -} -pre.snippet .bold { - font-weight: bold; -} -pre.snippet .highlighted { - background-color: var(--snippet-highlight-color); - border-radius: 10%; -} diff --git a/docs/java/apidocs/tag-search-index.js b/docs/java/apidocs/tag-search-index.js deleted file mode 100644 index f38b3cb3..00000000 --- a/docs/java/apidocs/tag-search-index.js +++ /dev/null @@ -1 +0,0 @@ -tagSearchIndex = [{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/apidocs/type-search-index.js b/docs/java/apidocs/type-search-index.js deleted file mode 100644 index 6822b52e..00000000 --- a/docs/java/apidocs/type-search-index.js +++ /dev/null @@ -1 +0,0 @@ -typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.spotify.voyager.jni","l":"Index"},{"p":"com.spotify.voyager.jni.utils","l":"JniLibExtractor"},{"p":"com.spotify.voyager.jni","l":"Index.QueryResults"},{"p":"com.spotify.voyager.jni","l":"StringIndex.QueryResults"},{"p":"com.spotify.voyager.jni.exception","l":"RecallException"},{"p":"com.spotify.voyager.jni","l":"Index.SpaceType"},{"p":"com.spotify.voyager.jni","l":"Index.StorageDataType"},{"p":"com.spotify.voyager.jni","l":"StringIndex"},{"p":"com.spotify.voyager.jni.utils","l":"TinyJson"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/com/spotify/voyager/jni/Index.QueryResults.html b/docs/java/com/spotify/voyager/jni/Index.QueryResults.html index b08120e3..1f277121 100644 --- a/docs/java/com/spotify/voyager/jni/Index.QueryResults.html +++ b/docs/java/com/spotify/voyager/jni/Index.QueryResults.html @@ -1,58 +1,44 @@ - + - + - -Index.QueryResults (voyager 2.0.9 API) + - +Index.QueryResults (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -
    - +
    com.spotify.voyager.jni

    Class Index.QueryResults

      -
    • java.lang.Object
    • +
    • java.lang.Object
      • com.spotify.voyager.jni.Index.QueryResults
      • @@ -134,11 +110,12 @@

        Class Index.QueryResults

      • Enclosing class:
        -
        Index
        +
        Index

        +
        public static class Index.QueryResults
        -extends Object
        +extends Object
        A container for query results, returned by Index. Note that this class is instantiated from C++, and as such, any changes to its location, visibility, or constructor will need to include corresponding C++ changes.
        @@ -149,54 +126,46 @@

        Class Index.QueryResults

    @@ -257,13 +219,12 @@

    Methods inherited from class java.lang.
  • -
      -
    • +
    • Field Detail

      - +
        @@ -273,7 +234,7 @@

        labels

        A list of item IDs ("labels").
      - +
        @@ -285,74 +246,70 @@

        distances

    -
    -
      -
    • +
    • Constructor Detail

      - +
      • QueryResults

        -
        public QueryResults​(long[] labels,
        +
        public QueryResults(long[] labels,
                             float[] distances)
        Instantiates a new QueryResults object, provided two identical-length arrays of labels and their corresponding distances. This method should probably not be used directly, as this class is primarily used as a return type from the query method on Index.
        Throws:
        -
        IllegalArgumentException - if the length of the labels and distances arrays vary
        +
        IllegalArgumentException - if the length of the labels and distances arrays vary
    -
    -
      -
    • +
    • Method Detail

      - + - +
      • getLabels

        -
        public long[] getLabels()
        +
        public long[] getLabels()
        Retrieve the list of item IDs ("labels") returned by this query. This array is sorted by distance: the first item is the closest to the query vector, the second is second-closest, and so on. The items in this array correspond 1:1 with the distances returned by getDistances().
      - +
      • getDistances

        -
        public float[] getDistances()
        +
        public float[] getDistances()
        Retrieve the list of distances between query vectors and item vectors for the results of this query. This array is sorted by distance: the first distance corresponds with the item the closest to the query vector, the second is second-closest, and so on. The items in this array @@ -361,25 +318,21 @@

        getDistances

    -
- - diff --git a/docs/java/com/spotify/voyager/jni/Index.SpaceType.html b/docs/java/com/spotify/voyager/jni/Index.SpaceType.html index 9c7ca202..f90156e8 100644 --- a/docs/java/com/spotify/voyager/jni/Index.SpaceType.html +++ b/docs/java/com/spotify/voyager/jni/Index.SpaceType.html @@ -1,58 +1,44 @@ - + - + - -Index.SpaceType (voyager 2.0.9 API) + - +Index.SpaceType (voyager 2.1.0 API) + - - - - - - - + -
- -
-
- +
com.spotify.voyager.jni

Enum Index.SpaceType

-
- diff --git a/docs/java/com/spotify/voyager/jni/Index.StorageDataType.html b/docs/java/com/spotify/voyager/jni/Index.StorageDataType.html index 71682d01..55a1665f 100644 --- a/docs/java/com/spotify/voyager/jni/Index.StorageDataType.html +++ b/docs/java/com/spotify/voyager/jni/Index.StorageDataType.html @@ -1,58 +1,44 @@ - + - + - -Index.StorageDataType (voyager 2.0.9 API) + - +Index.StorageDataType (voyager 2.1.0 API) + - - - - - - - + -
- -
-
- +
com.spotify.voyager.jni

Enum Index.StorageDataType

@@ -244,19 +210,18 @@

Methods inherited from class java.lang.
  • -
      -
    • +
    • Enum Constant Detail

      - +
      • Float8

        -
        public static final Index.StorageDataType Float8
        +
        public static final Index.StorageDataType Float8
        An 8-bit floating point data type that expects all values to be on [-1, 1]. This data type provides adequate precision for many use cases, but cuts down memory usage bu a factor of 4x compared to Float32, while also increasing query speed. @@ -266,23 +231,23 @@

        Float8

        use E4M3.
      - + - +
      • E4M3

        -
        public static final Index.StorageDataType E4M3
        +
        public static final Index.StorageDataType E4M3
        A custom 8-bit floating point data type with range [-448, 448] and variable precision. Use this data type to get 4x less memory usage compared to Float32, but when the values of vectors to be stored in an Index may exceed [-1, 1]. @@ -297,23 +262,21 @@

        E4M3

    -
    -
      -
    • +
    • Method Detail

      - +
      • values

        -
        public static Index.StorageDataType[] values()
        +
        public static Index.StorageDataType[] values()
        Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate +the order they are declared. This method may be used to iterate over the constants as follows:
         for (Index.StorageDataType c : Index.StorageDataType.values())
        @@ -325,13 +288,13 @@ 

        values

      - +
    -
  • -

    - diff --git a/docs/java/com/spotify/voyager/jni/Index.html b/docs/java/com/spotify/voyager/jni/Index.html index d4f14a29..8e8133cf 100644 --- a/docs/java/com/spotify/voyager/jni/Index.html +++ b/docs/java/com/spotify/voyager/jni/Index.html @@ -1,58 +1,44 @@ - + - + - -Index (voyager 2.0.9 API) + - +Index (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -
    - +
    com.spotify.voyager.jni

    Class Index

      -
    • java.lang.Object
    • +
    • java.lang.Object
      • com.spotify.voyager.jni.Index
      • @@ -134,12 +110,13 @@

        Class Index

      • All Implemented Interfaces:
        -
        Closeable, AutoCloseable
        +
        Closeable, AutoCloseable

        +
        public class Index
        -extends Object
        -implements Closeable
        +extends Object +implements Closeable
        A Voyager index, providing storage of floating-point vectors and the ability to efficiently search among those vectors. @@ -169,360 +146,313 @@

        Class Index

        @@ -530,21 +460,20 @@

        Methods inherited from class java.lang.
      • -
          -
        • +
        • Constructor Detail

          - + - +
          • Index

            -
            public Index​(Index.SpaceType space,
            +
            public Index(Index.SpaceType space,
                          int numDimensions,
                          long indexM,
                          long efConstruction,
                          long randomSeed,
                          long maxElements,
            -             Index.StorageDataType storageDataType)
            -
            Create a new Index that uses the given Index.SpaceType to store and compare + Index.StorageDataType storageDataType)
            +
            Create a new Index that uses the given Index.SpaceType to store and compare numDimensions-dimensional vectors.
            Parameters:
            @@ -578,172 +507,170 @@

            Index

            Does not affect memory usage or size of the index.
            randomSeed - A random seed to use when initializing the index's internal data structures.
            maxElements - The maximum number of elements that this index can hold. This is a - performance optimization; if the index contains this number of elements and addItem(float[]) or addItems(float[][], int) is called, the index's capacity will automatically + performance optimization; if the index contains this number of elements and addItem(float[]) or addItems(float[][], int) is called, the index's capacity will automatically expanded to fit the new elements. Setting maxElements in advance helps avoid these expensive resize operations if the number of elements to be added is already known.
            storageDataType - The datatype to use under-the-hood when storing vectors. Different data - type options trade off precision for memory usage and query speed; see Index.StorageDataType for available data types.
            + type options trade off precision for memory usage and query speed; see Index.StorageDataType for available data types.
        -
        -
          -
        • +
        • Method Detail

          - +
          • load

            -
            public static Index load​(String filename,
            -                         Index.SpaceType space,
            +
            public static Index load(String filename,
            +                         Index.SpaceType space,
                                      int numDimensions,
            -                         Index.StorageDataType storageDataType)
            -
            Load a Voyager index file and create a new Index initialized with the data in that + Index.StorageDataType storageDataType)
            +
            Load a Voyager index file and create a new Index initialized with the data in that file.
            Parameters:
            filename - A filename to load.
            -
            space - The Index.SpaceType to use when loading the index.
            +
            space - The Index.SpaceType to use when loading the index.
            numDimensions - The number of dimensions per vector.
            -
            storageDataType - The Index.StorageDataType used by the index being loaded.
            +
            storageDataType - The Index.StorageDataType used by the index being loaded.
            Returns:
            -
            An Index whose contents have been initialized with the data provided by the +
            An Index whose contents have been initialized with the data provided by the file.
            Throws:
            -
            RuntimeException - if the index cannot be loaded from the file, or the file contains +
            RuntimeException - if the index cannot be loaded from the file, or the file contains invalid data.
          - +
          • load

            -
            public static Index load​(String filename)
            -
            Load a Voyager index file and create a new Index initialized with the data in that +
            public static Index load(String filename)
            +
            Load a Voyager index file and create a new Index initialized with the data in that file.
            Parameters:
            filename - A filename to load.
            Returns:
            -
            An Index whose contents have been initialized with the data provided by the +
            An Index whose contents have been initialized with the data provided by the file.
            Throws:
            -
            RuntimeException - if the index cannot be loaded from the file, the file contains invalid +
            RuntimeException - if the index cannot be loaded from the file, the file contains invalid data, or the file contains an older version of the Voyager file format that requires additional arguments to be provided.
          - +
    Parameters:
    -
    inputStream - A InputStream that will provide the contents of a Voyager +
    inputStream - A InputStream that will provide the contents of a Voyager index.
    -
    space - The Index.SpaceType to use when loading the index.
    +
    space - The Index.SpaceType to use when loading the index.
    numDimensions - The number of dimensions per vector.
    -
    storageDataType - The Index.StorageDataType used by the index being loaded.
    +
    storageDataType - The Index.StorageDataType used by the index being loaded.
    Returns:
    -
    An Index whose contents have been initialized with the data provided by the +
    An Index whose contents have been initialized with the data provided by the input stream.
    Throws:
    -
    RuntimeException - if the index cannot be loaded from the stream, or the stream contains +
    RuntimeException - if the index cannot be loaded from the stream, or the stream contains invalid data.
    - +
    • load

      -
      public static Index load​(InputStream inputStream)
      +
      public static Index load(InputStream inputStream)
      Interpret the contents of a java.io.InputStream as the contents of a Voyager index file - and create a new Index initialized with the data provided by that stream.
      + and create a new Index initialized with the data provided by that stream.
      Parameters:
      -
      inputStream - A InputStream that will provide the contents of a Voyager +
      inputStream - A InputStream that will provide the contents of a Voyager index.
      Returns:
      -
      An Index whose contents have been initialized with the data provided by the +
      An Index whose contents have been initialized with the data provided by the input stream.
      Throws:
      -
      RuntimeException - if the index cannot be loaded from the stream, or the stream contains +
      RuntimeException - if the index cannot be loaded from the stream, or the stream contains invalid data, or the file contains an older version of the Voyager file format that requires additional arguments to be provided.
    - +
    • close

      -
      public void close()
      -           throws IOException
      -
      Close this Index and release any memory held by it. Note that this method must be - called to release the memory backing this Index; failing to do so may cause a memory +
      public void close()
      +           throws IOException
      +
      Close this Index and release any memory held by it. Note that this method must be + called to release the memory backing this Index; failing to do so may cause a memory leak. -

      Any calls to methods after close() is called will fail, as the underlying +

      Any calls to methods after close() is called will fail, as the underlying native C++ object will have been deallocated.

      Specified by:
      -
      close in interface AutoCloseable
      +
      close in interface Closeable
      Specified by:
      -
      close in interface Closeable
      +
      close in interface AutoCloseable
      Throws:
      -
      IOException - if the C++ destructor fails.
      +
      IOException - if the C++ destructor fails.
    - + - +
    • setEf

      -
      public void setEf​(long ef)
      -
      Set the default EF ("query search depth") to use when query(float[], int) is called.
      +
      public void setEf(long ef)
      +
      Set the default EF ("query search depth") to use when query(float[], int) is called.
      Parameters:
      ef - The new default EF value to use. This value can be overridden on a per-query basis at @@ -751,57 +678,57 @@

      setEf

    - +
    • getEf

      -
      public int getEf()
      -
      Get the default EF ("query search depth") that will be uses when query(float[], int) is called.
      +
      public int getEf()
      +
      Get the default EF ("query search depth") that will be uses when query(float[], int) is called.
      Returns:
      -
      The current default EF value, used by the Index if no value is provided at +
      The current default EF value, used by the Index if no value is provided at query time.
    - + - +
    • getNumDimensions

      -
      public int getNumDimensions()
      -
      Get the number of dimensions used in this Index.
      +
      public int getNumDimensions()
      +
      Get the number of dimensions used in this Index.
      Returns:
      -
      The number of dimensions used by this Index, and which all vectors within this - Index must have.
      +
      The number of dimensions used by this Index, and which all vectors within this + Index must have.
    - +
    • setNumThreads

      -
      public void setNumThreads​(int numThreads)
      +
      public void setNumThreads(int numThreads)
      Set the default number of threads to use when adding multiple vectors in bulk, or when querying for multiple vectors simultaneously.
      @@ -813,13 +740,13 @@

      setNumThreads

    - +
    • getNumThreads

      -
      public int getNumThreads()
      +
      public int getNumThreads()
      Get the default number of threads used when adding multiple vectors in bulk oor when querying for multiple vectors simultaneously.
      @@ -829,28 +756,27 @@

      getNumThreads

    - +
    • saveIndex

      -
      public void saveIndex​(String pathToIndex)
      -
      Save this Index to a file at the provided filename. This file can be reloaded by using - Index.load(...).
      +
      public void saveIndex(String pathToIndex)
      +
      Save this Index to a file at the provided filename. This file can be reloaded by using Index.load(...).
      Parameters:
      pathToIndex - The output filename to write to.
    - +
    • saveIndex

      -
      public void saveIndex​(OutputStream outputStream)
      +
      public void saveIndex(OutputStream outputStream)
      Save this Index to the provided output stream. The stream will not be closed automatically - be sure to close the stream saveIndex has completed. The data written to the stream can be reloaded by using Index.load(...).
      @@ -861,13 +787,13 @@

      saveIndex

    - +
    • asBytes

      -
      public byte[] asBytes()
      +
      public byte[] asBytes()
      Returns the contents of this index as an array of bytes. The resulting bytes will contain the same data as if this index was serialized to disk and then read back into memory again.
      @@ -876,93 +802,103 @@

      asBytes

    - +
    • addItem

      -
      public void addItem​(float[] vector)
      -
      Add an item (a vector) to this Index. The item will automatically be given an - identifier equal to the return value of getNumElements().
      +
      public long addItem(float[] vector)
      +
      Add an item (a vector) to this Index. The item will automatically be given an + identifier equal to the return value of getNumElements().
      Parameters:
      vector - The vector to add to the index.
      +
      Returns:
      +
      The long ID that was assigned to this vector.
      Throws:
      -
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
      +
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
    - +
    • addItem

      -
      public void addItem​(float[] vector,
      +
      public long addItem(float[] vector,
                           long id)
      -
      Add an item (a vector) to this Index with the provided identifier.
      +
      Add an item (a vector) to this Index with the provided identifier.
      Parameters:
      vector - The vector to add to the index.
      id - The 64-bit integer denoting the identifier of this vector.
      +
      Returns:
      +
      The long ID that was assigned to this vector.
      Throws:
      -
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
      +
      RuntimeException - If the provided vector does not contain exactly getNumDimensions() dimensions.
    - +
    • addItems

      -
      public void addItems​(float[][] vectors,
      -                     int numThreads)
      -
      Add multiple items (vectors) to this Index.
      +
      public long[] addItems(float[][] vectors,
      +                       int numThreads)
      +
      Add multiple items (vectors) to this Index.
      Parameters:
      vectors - The vectors to add to the index.
      numThreads - The number of threads to use when adding the provided vectors. If -1 (the default), the number of CPUs available on the current machine will be used.
      +
      Returns:
      +
      The auto-generated long IDs that were assigned to the provided vectors, in the + same order as the provided vectors.
      Throws:
      -
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
      +
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
    - +
    • addItems

      -
      public void addItems​(float[][] vectors,
      -                     long[] ids,
      -                     int numThreads)
      -
      Add multiple items (vectors) to this Index.
      +
      public long[] addItems(float[][] vectors,
      +                       long[] ids,
      +                       int numThreads)
      +
      Add multiple items (vectors) to this Index with the provided identifiers.
      Parameters:
      vectors - The vectors to add to the index.
      ids - The 64-bit identifiers that correspond with each of the provided vectors.
      numThreads - The number of threads to use when adding the provided vectors. If -1 (the default), the number of CPUs available on the current machine will be used. Note that this - causes a temporary C++ thread pool to be used. Instead of calling addItems(float[][],int) in a - tight loop, consider passing more data to each addItems(float[][],int) call instead to reduce + causes a temporary C++ thread pool to be used. Instead of calling addItems in a + tight loop, consider passing more data to each addItems call instead to reduce overhead.
      +
      Returns:
      +
      The long IDs that were assigned to the provided vectors, in the same order as + the provided vectors.
      Throws:
      -
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
      -
      RuntimeException - If the list of IDs does not have the same length as the list of +
      RuntimeException - If any of the provided vectors do not contain exactly getNumDimensions() dimensions.
      +
      RuntimeException - If the list of IDs does not have the same length as the list of provided vectors.
    - +
    • getVector

      -
      public float[] getVector​(long id)
      +
      public float[] getVector(long id)
      Get the vector for the provided identifier.
      Parameters:
      @@ -970,17 +906,17 @@

      getVector

      Returns:
      A float array representing the values of the vector.
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      +
      RuntimeException - If the provided identifier is not present in the Index.
    - +
    • getVectors

      -
      public float[][] getVectors​(long[] ids)
      +
      public float[][] getVectors(long[] ids)
      Get the vectors for a provided array of identifiers.
      Parameters:
      @@ -989,17 +925,17 @@

      getVectors

      A nested float array representing the values of the vectors corresponding with each ID.
      Throws:
      -
      RuntimeException - If any of the provided identifiers are not present in the Index.
      +
      RuntimeException - If any of the provided identifiers are not present in the Index.
    - +
    • getIDs

      -
      public long[] getIDs()
      +
      public long[] getIDs()
      Get the list of identifiers currently stored by this index.
      Returns:
      @@ -1007,64 +943,64 @@

      getIDs

    - +
    • query

      -
      public Index.QueryResults query​(float[] queryVector,
      +
      public Index.QueryResults query(float[] queryVector,
                                       int k)
      -
      Query this Index for approximate nearest neighbors of a single query vector.
      +
      Query this Index for approximate nearest neighbors of a single query vector.
      Parameters:
      queryVector - A query vector to use for searching.
      k - The number of nearest neighbors to return.
      Returns:
      -
      A Index.QueryResults object, containing the neighbors found that are (approximately) +
      A Index.QueryResults object, containing the neighbors found that are (approximately) nearest to the query vector.
      Throws:
      -
      RuntimeException - if fewer than k results can be found in the index.
      +
      RecallException - if fewer than k results can be found in the index.
    - +
    • query

      -
      public Index.QueryResults[] query​(float[][] queryVectors,
      +
      public Index.QueryResults[] query(float[][] queryVectors,
                                         int k,
                                         int numThreads)
      -
      Query this Index for approximate nearest neighbors of multiple query vectors.
      +
      Query this Index for approximate nearest neighbors of multiple query vectors.
      Parameters:
      queryVectors - The query vectors to use for searching.
      k - The number of nearest neighbors to return for each query vector
      numThreads - The number of threads to use when searching. If -1, all available CPU cores will be used. Note that passing a number of threads other than 1 will cause a temporary C++ - thread pool to be used. Instead of calling query(float[],int) in a tight loop, consider passing + thread pool to be used. Instead of calling query in a tight loop, consider passing more data to each call instead to reduce overhead.
      Returns:
      -
      An array of Index.QueryResults objects, each containing the neighbors found that are - (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      +
      An array of Index.QueryResults objects, each containing the neighbors found that are + (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      Throws:
      -
      RuntimeException - if fewer than k results can be found in the index for one or +
      RecallException - if fewer than k results can be found in the index for one or more queries.
    - +
    • query

      -
      public Index.QueryResults query​(float[] queryVector,
      +
      public Index.QueryResults query(float[] queryVector,
                                       int k,
                                       long queryEf)
      -
      Query this Index for approximate nearest neighbors of a single query vector.
      +
      Query this Index for approximate nearest neighbors of a single query vector.
      Parameters:
      queryVector - A query vector to use for searching.
      @@ -1072,130 +1008,130 @@

      query

      queryEf - The per-query "ef" value to use. Larger values produce more accurate results at the expense of query time.
      Returns:
      -
      A Index.QueryResults object, containing the neighbors found that are (approximately) +
      A Index.QueryResults object, containing the neighbors found that are (approximately) nearest to the query vector.
      Throws:
      -
      RuntimeException - if fewer than k results can be found in the index.
      +
      RecallException - if fewer than k results can be found in the index.
    - +
    • query

      -
      public Index.QueryResults[] query​(float[][] queryVectors,
      +
      public Index.QueryResults[] query(float[][] queryVectors,
                                         int k,
                                         int numThreads,
                                         long queryEf)
      -
      Query this Index for approximate nearest neighbors of multiple query vectors.
      +
      Query this Index for approximate nearest neighbors of multiple query vectors.
      Parameters:
      queryVectors - The query vectors to use for searching.
      k - The number of nearest neighbors to return for each query vector
      numThreads - The number of threads to use when searching. If -1, all available CPU cores will be used. Note that passing a number of threads other than 1 will cause a temporary C++ - thread pool to be used. Instead of calling query(float[],int) in a tight loop, consider passing + thread pool to be used. Instead of calling query in a tight loop, consider passing more data to each call instead to reduce overhead.
      queryEf - The per-query "ef" value to use. Larger values produce more accurate results at the expense of query time.
      Returns:
      -
      An array of Index.QueryResults objects, each containing the neighbors found that are - (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      +
      An array of Index.QueryResults objects, each containing the neighbors found that are + (approximately) nearest to the corresponding query vector. The returned list of Index.QueryResults will contain the same number of elements as queryVectors.
      Throws:
      -
      RuntimeException - if fewer than k results can be found in the index for one or +
      RecallException - if fewer than k results can be found in the index for one or more queries.
    - +
    • markDeleted

      -
      public void markDeleted​(long label)
      +
      public void markDeleted(long label)
      Mark an element of the index as deleted. Deleted elements will be skipped when querying, but will still be present in the index.
      Parameters:
      label - The ID of the element to mark as deleted.
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      +
      RuntimeException - If the provided identifier is not present in the Index.
    - +
    • unmarkDeleted

      -
      public void unmarkDeleted​(long label)
      +
      public void unmarkDeleted(long label)
      Un-mark an element of the index as deleted, making it available again.
      Parameters:
      label - The ID of the element to unmark as deleted.
      Throws:
      -
      RuntimeException - If the provided identifier is not present in the Index.
      +
      RuntimeException - If the provided identifier is not present in the Index.
    - +
    • resizeIndex

      -
      public void resizeIndex​(long newSize)
      -
      Change the maximum number of elements currently storable by this Index. This operation +
      public void resizeIndex(long newSize)
      +
      Change the maximum number of elements currently storable by this Index. This operation reallocates the memory used by the index and can be quite slow, so it may be useful to set the maximum number of elements in advance if that number is known.
      Parameters:
      -
      newSize - The new number of maximum elements to resize this Index to.
      +
      newSize - The new number of maximum elements to resize this Index to.
    - +
    • getMaxElements

      -
      public long getMaxElements()
      -
      Get the maximum number of elements currently storable by this Index. If more elements +
      public long getMaxElements()
      +
      Get the maximum number of elements currently storable by this Index. If more elements are added than getMaxElements(), the index will be automatically (but slowly) resized.
      Returns:
      -
      The number of elements (vectors) that are currently storable in this Index.
      +
      The number of elements (vectors) that are currently storable in this Index.
    - +
    • getNumElements

      -
      public long getNumElements()
      -
      Get the number of elements currently in this Index.
      +
      public long getNumElements()
      +
      Get the number of elements currently in this Index.
      Returns:
      -
      The number of elements (vectors) in this Index. This count includes any deleted +
      The number of elements (vectors) in this Index. This count includes any deleted elements.
    - +
    • getEfConstruction

      -
      public long getEfConstruction()
      -
      Get the EF Construction value used when adding new elements to this Index.
      +
      public long getEfConstruction()
      +
      Get the EF Construction value used when adding new elements to this Index.
      Returns:
      The current EF Construction value (i.e.: the number of neighbors to search for when @@ -1203,14 +1139,14 @@

      getEfConstruction

    - +
    • getM

      -
      public long getM()
      -
      Get the M value used when adding new elements to this Index.
      +
      public long getM()
      +
      Get the M value used when adding new elements to this Index.
      Returns:
      The current M value (i.e.: the number of links between adjacent vectors to create when @@ -1220,25 +1156,21 @@

      getM

    - -
    - diff --git a/docs/java/com/spotify/voyager/jni/StringIndex.QueryResults.html b/docs/java/com/spotify/voyager/jni/StringIndex.QueryResults.html index 6cc79d66..ace70f40 100644 --- a/docs/java/com/spotify/voyager/jni/StringIndex.QueryResults.html +++ b/docs/java/com/spotify/voyager/jni/StringIndex.QueryResults.html @@ -1,58 +1,44 @@ - + - + - -StringIndex.QueryResults (voyager 2.0.9 API) + - +StringIndex.QueryResults (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -
    - +
    com.spotify.voyager.jni

    Class StringIndex.QueryResults

    @@ -230,111 +194,104 @@

    Methods inherited from class java.lang.
  • -
      -
    • +
    • Constructor Detail

      - +
      • QueryResults

        -
        public QueryResults​(String[] names,
        +
        public QueryResults(String[] names,
                             float[] distances)
    -
    -
      -
    • +
    • Method Detail

      - +
      • getNames

        -
        public String[] getNames()
        +
        public String[] getNames()
      - +
      • getDistances

        -
        public float[] getDistances()
        +
        public float[] getDistances()
      - +
      • getName

        -
        public String getName​(int index)
        +
        public String getName(int index)
      - +
      • getDistance

        -
        public float getDistance​(int index)
        +
        public float getDistance(int index)
      - +
      • getNumResults

        -
        public int getNumResults()
        +
        public int getNumResults()
      - +
    -
  • -

    - diff --git a/docs/java/com/spotify/voyager/jni/StringIndex.html b/docs/java/com/spotify/voyager/jni/StringIndex.html index 91f3b81c..4bfa5b25 100644 --- a/docs/java/com/spotify/voyager/jni/StringIndex.html +++ b/docs/java/com/spotify/voyager/jni/StringIndex.html @@ -1,58 +1,44 @@ - + - + - -StringIndex (voyager 2.0.9 API) + - +StringIndex (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -
    - +
    com.spotify.voyager.jni

    Class StringIndex

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/Index.QueryResults.html b/docs/java/com/spotify/voyager/jni/class-use/Index.QueryResults.html index 014e9654..8f1fd7f7 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/Index.QueryResults.html +++ b/docs/java/com/spotify/voyager/jni/class-use/Index.QueryResults.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.Index.QueryResults (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.Index.QueryResults (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.Index.QueryResults

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/Index.SpaceType.html b/docs/java/com/spotify/voyager/jni/class-use/Index.SpaceType.html index df6c8a94..14174f01 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/Index.SpaceType.html +++ b/docs/java/com/spotify/voyager/jni/class-use/Index.SpaceType.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.Index.SpaceType (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.Index.SpaceType (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.Index.SpaceType

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/Index.StorageDataType.html b/docs/java/com/spotify/voyager/jni/class-use/Index.StorageDataType.html index 8842bfe8..da4f6d3b 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/Index.StorageDataType.html +++ b/docs/java/com/spotify/voyager/jni/class-use/Index.StorageDataType.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.Index.StorageDataType (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.Index.StorageDataType (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.Index.StorageDataType

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/Index.html b/docs/java/com/spotify/voyager/jni/class-use/Index.html index 5ff1d36f..19015b62 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/Index.html +++ b/docs/java/com/spotify/voyager/jni/class-use/Index.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.Index (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.Index (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.Index

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html b/docs/java/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html index ee165f1a..b05f2858 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html +++ b/docs/java/com/spotify/voyager/jni/class-use/StringIndex.QueryResults.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.StringIndex.QueryResults (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.StringIndex.QueryResults (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.StringIndex.QueryResults

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/class-use/StringIndex.html b/docs/java/com/spotify/voyager/jni/class-use/StringIndex.html index e29c3576..92757384 100644 --- a/docs/java/com/spotify/voyager/jni/class-use/StringIndex.html +++ b/docs/java/com/spotify/voyager/jni/class-use/StringIndex.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.StringIndex (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.StringIndex (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.StringIndex

    -
    - diff --git a/docs/java/com/spotify/voyager/jni/exception/RecallException.html b/docs/java/com/spotify/voyager/jni/exception/RecallException.html new file mode 100644 index 00000000..ccfe1d61 --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/RecallException.html @@ -0,0 +1,299 @@ + + + + + + +RecallException (voyager 2.1.0 API) + + + + + + + + + + + + +
    +
    com.spotify.voyager.jni.exception
    +

    Class RecallException

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable
      +
      +
      +
      +
      public class RecallException
      +extends RuntimeException
      +
      An exception indicating that the desired recall of a query cannot be achieved
      +
      +
      See Also:
      +
      Serialized Form
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RecallException

          +
          public RecallException(String message)
          +
          Constructs a new RecallException with the specified detail message.
          +
          +
          Parameters:
          +
          message - the detail message
          +
          +
        • +
        + + + +
          +
        • +

          RecallException

          +
          public RecallException(String message,
          +                       Throwable cause)
          +
          Constructs a new RecallException with the specified detail message and cause.
          +
          +
          Parameters:
          +
          message - the detail message
          +
          cause - the cause of the exception
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + +

    Copyright © 2024. All rights reserved.

    + + diff --git a/docs/java/com/spotify/voyager/jni/exception/class-use/RecallException.html b/docs/java/com/spotify/voyager/jni/exception/class-use/RecallException.html new file mode 100644 index 00000000..3418111b --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/class-use/RecallException.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.spotify.voyager.jni.exception.RecallException (voyager 2.1.0 API) + + + + + + + + + + + +
    +

    Uses of Class
    com.spotify.voyager.jni.exception.RecallException

    +
    +
    No usage of com.spotify.voyager.jni.exception.RecallException
    + + + + +

    Copyright © 2024. All rights reserved.

    + + diff --git a/docs/java/com/spotify/voyager/jni/exception/package-frame.html b/docs/java/com/spotify/voyager/jni/exception/package-frame.html new file mode 100644 index 00000000..414dc065 --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.spotify.voyager.jni.exception (voyager 2.1.0 API) + + + + + +

    com.spotify.voyager.jni.exception

    +
    +

    Exceptions

    + +
    + + diff --git a/docs/java/com/spotify/voyager/jni/exception/package-summary.html b/docs/java/com/spotify/voyager/jni/exception/package-summary.html new file mode 100644 index 00000000..9aec16b0 --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/package-summary.html @@ -0,0 +1,146 @@ + + + + + + +com.spotify.voyager.jni.exception (voyager 2.1.0 API) + + + + + + + + + + + +
    +

    Package com.spotify.voyager.jni.exception

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Exception Summary 
      ExceptionDescription
      RecallException +
      An exception indicating that the desired recall of a query cannot be achieved
      +
      +
    • +
    +
    + + + + +

    Copyright © 2024. All rights reserved.

    + + diff --git a/docs/java/com/spotify/voyager/jni/exception/package-tree.html b/docs/java/com/spotify/voyager/jni/exception/package-tree.html new file mode 100644 index 00000000..9d099fc0 --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/package-tree.html @@ -0,0 +1,151 @@ + + + + + + +com.spotify.voyager.jni.exception Class Hierarchy (voyager 2.1.0 API) + + + + + + + + + + + +
    +

    Hierarchy For Package com.spotify.voyager.jni.exception

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    + +
    + + + + +

    Copyright © 2024. All rights reserved.

    + + diff --git a/docs/java/com/spotify/voyager/jni/exception/package-use.html b/docs/java/com/spotify/voyager/jni/exception/package-use.html new file mode 100644 index 00000000..1acaed8b --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/exception/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package com.spotify.voyager.jni.exception (voyager 2.1.0 API) + + + + + + + + + + + +
    +

    Uses of Package
    com.spotify.voyager.jni.exception

    +
    +
    No usage of com.spotify.voyager.jni.exception
    + + + + +

    Copyright © 2024. All rights reserved.

    + + diff --git a/docs/java/com/spotify/voyager/jni/package-frame.html b/docs/java/com/spotify/voyager/jni/package-frame.html new file mode 100644 index 00000000..841732c7 --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/package-frame.html @@ -0,0 +1,29 @@ + + + + + + +com.spotify.voyager.jni (voyager 2.1.0 API) + + + + + +

    com.spotify.voyager.jni

    + + + diff --git a/docs/java/com/spotify/voyager/jni/package-summary.html b/docs/java/com/spotify/voyager/jni/package-summary.html index a420875e..24eb3a2c 100644 --- a/docs/java/com/spotify/voyager/jni/package-summary.html +++ b/docs/java/com/spotify/voyager/jni/package-summary.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager.jni (voyager 2.0.9 API) + - +com.spotify.voyager.jni (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Package com.spotify.voyager.jni

    +
    +
    Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
    +
    +

    See: Description

    -
    - - -
    Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
    -
    • - +
      @@ -113,27 +88,27 @@

      Package com.spotify.voyager.jni

      - + - + - + - + @@ -142,7 +117,7 @@

      Package com.spotify.voyager.jni

      Class Summary 
      Class
      IndexIndex
      A Voyager index, providing storage of floating-point vectors and the ability to efficiently search among those vectors.
      Index.QueryResultsIndex.QueryResults
      A container for query results, returned by Index.
      StringIndexStringIndex
      Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID to a provided String.
      StringIndex.QueryResultsStringIndex.QueryResults
      A wrapper class for nearest neighbor query results.
    • - +
      @@ -150,13 +125,13 @@

      Package com.spotify.voyager.jni

      - + - + @@ -165,20 +140,22 @@

      Package com.spotify.voyager.jni

      Enum Summary 
      Enum
      Index.SpaceTypeIndex.SpaceType
      The space, also known as distance metric, to use when searching.
      Index.StorageDataTypeIndex.StorageDataType
      The datatype used to use when storing vectors on disk.
    + + + +

    Package com.spotify.voyager.jni Description

    +
    Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
    -
    - diff --git a/docs/java/com/spotify/voyager/jni/package-tree.html b/docs/java/com/spotify/voyager/jni/package-tree.html index 3e6d292c..a92b5a8f 100644 --- a/docs/java/com/spotify/voyager/jni/package-tree.html +++ b/docs/java/com/spotify/voyager/jni/package-tree.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager.jni Class Hierarchy (voyager 2.0.9 API) + - +com.spotify.voyager.jni Class Hierarchy (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Hierarchy For Package com.spotify.voyager.jni

    Package Hierarchies: @@ -102,48 +78,41 @@

    Hierarchy For Package com.spotify.voyager.jni

    -

    Class Hierarchy

    -
    -

    Enum Hierarchy

    -
    -
    - diff --git a/docs/java/com/spotify/voyager/jni/package-use.html b/docs/java/com/spotify/voyager/jni/package-use.html index 0d826eb4..a5d65609 100644 --- a/docs/java/com/spotify/voyager/jni/package-use.html +++ b/docs/java/com/spotify/voyager/jni/package-use.html @@ -1,52 +1,38 @@ - + - + - -Uses of Package com.spotify.voyager.jni (voyager 2.0.9 API) + - +Uses of Package com.spotify.voyager.jni (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Package
    com.spotify.voyager.jni

    • - - +
      Packages that use com.spotify.voyager.jni 
      + - + @@ -116,51 +92,44 @@

      Uses of Packag

      Packages that use com.spotify.voyager.jni 
      Package Description
      com.spotify.voyager.jnicom.spotify.voyager.jni
      Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
    • -
    • +
    • - - +
      Classes in com.spotify.voyager.jni used by com.spotify.voyager.jni 
      + - - + - - - - - - - - - - - - @@ -169,19 +138,16 @@

      Uses of Packag - - diff --git a/docs/java/com/spotify/voyager/jni/utils/JniLibExtractor.html b/docs/java/com/spotify/voyager/jni/utils/JniLibExtractor.html index 30fd9d01..6827eb7a 100644 --- a/docs/java/com/spotify/voyager/jni/utils/JniLibExtractor.html +++ b/docs/java/com/spotify/voyager/jni/utils/JniLibExtractor.html @@ -1,58 +1,44 @@ - + - + - -JniLibExtractor (voyager 2.0.9 API) + - +JniLibExtractor (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -
      - +
      com.spotify.voyager.jni.utils

      Class JniLibExtractor

      @@ -142,56 +119,48 @@

      Class JniLibExtractor

      • -
          -
        • +
        • Constructor Summary

          -

      Classes in com.spotify.voyager.jni used by com.spotify.voyager.jni 
      ClassDescriptionClass and Description
      Index +Index
      A Voyager index, providing storage of floating-point vectors and the ability to efficiently search among those vectors.
      Index.QueryResults +Index.QueryResults
      A container for query results, returned by Index.
      Index.SpaceType +Index.SpaceType
      The space, also known as distance metric, to use when searching.
      Index.StorageDataType +Index.StorageDataType
      The datatype used to use when storing vectors on disk.
      StringIndex +StringIndex
      Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID to a provided String.
      StringIndex.QueryResults +StringIndex.QueryResults
      A wrapper class for nearest neighbor query results.
      +
      - - + - - +
      Constructors 
      ConstructorDescriptionConstructor and Description
      JniLibExtractor() JniLibExtractor() 
    - -
    -
    @@ -199,13 +168,12 @@

    Methods inherited from class java.lang.
  • -
      -
    • +
    • Constructor Detail

      - +
        @@ -216,44 +184,38 @@

        JniLibExtractor

    -
    -
      -
    • +
    • Method Detail

      - +
      • extractBinaries

        -
        public static String extractBinaries​(String libname)
        +
        public static String extractBinaries(String libname)
    -
  • -

    - diff --git a/docs/java/com/spotify/voyager/jni/utils/TinyJson.html b/docs/java/com/spotify/voyager/jni/utils/TinyJson.html index cc6b836a..292f3d42 100644 --- a/docs/java/com/spotify/voyager/jni/utils/TinyJson.html +++ b/docs/java/com/spotify/voyager/jni/utils/TinyJson.html @@ -1,58 +1,44 @@ - + - + - -TinyJson (voyager 2.0.9 API) + - +TinyJson (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -
    - +
    com.spotify.voyager.jni.utils

    Class TinyJson

    @@ -207,13 +175,12 @@

    Methods inherited from class java.lang.
  • -
      -
    • +
    • Constructor Detail

      - +
        @@ -224,59 +191,53 @@

        TinyJson

    -
    -
    -
  • -

    - diff --git a/docs/java/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html b/docs/java/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html index c0e94a31..2ae4f74d 100644 --- a/docs/java/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html +++ b/docs/java/com/spotify/voyager/jni/utils/class-use/JniLibExtractor.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.utils.JniLibExtractor (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.utils.JniLibExtractor (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.utils.JniLibExtractor

    No usage of com.spotify.voyager.jni.utils.JniLibExtractor
    -
    - diff --git a/docs/java/com/spotify/voyager/jni/utils/class-use/TinyJson.html b/docs/java/com/spotify/voyager/jni/utils/class-use/TinyJson.html index 1008ee1e..7a29bff5 100644 --- a/docs/java/com/spotify/voyager/jni/utils/class-use/TinyJson.html +++ b/docs/java/com/spotify/voyager/jni/utils/class-use/TinyJson.html @@ -1,54 +1,40 @@ - + - + - -Uses of Class com.spotify.voyager.jni.utils.TinyJson (voyager 2.0.9 API) + - +Uses of Class com.spotify.voyager.jni.utils.TinyJson (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Uses of Class
    com.spotify.voyager.jni.utils.TinyJson

    No usage of com.spotify.voyager.jni.utils.TinyJson
    -
    - diff --git a/docs/java/com/spotify/voyager/jni/utils/package-frame.html b/docs/java/com/spotify/voyager/jni/utils/package-frame.html new file mode 100644 index 00000000..e612463c --- /dev/null +++ b/docs/java/com/spotify/voyager/jni/utils/package-frame.html @@ -0,0 +1,22 @@ + + + + + + +com.spotify.voyager.jni.utils (voyager 2.1.0 API) + + + + + +

    com.spotify.voyager.jni.utils

    +
    +

    Classes

    + +
    + + diff --git a/docs/java/com/spotify/voyager/jni/utils/package-summary.html b/docs/java/com/spotify/voyager/jni/utils/package-summary.html index 1a95c40c..57556547 100644 --- a/docs/java/com/spotify/voyager/jni/utils/package-summary.html +++ b/docs/java/com/spotify/voyager/jni/utils/package-summary.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager.jni.utils (voyager 2.0.9 API) + - +com.spotify.voyager.jni.utils (voyager 2.1.0 API) + - - - - - - - + -
    - -
    -

    Package com.spotify.voyager.jni.utils

    • - +
      @@ -108,11 +84,11 @@

      Package com.spotify.voyager.jni.utils

      - + - + or other required elements. - thead: [ 1, "
      Class Summary 
      Class
      JniLibExtractorJniLibExtractor  
      TinyJsonTinyJson
      A dependency-free, super tiny JSON serde class that only supports reading and writing lists of strings.
      @@ -123,19 +99,16 @@

      Package com.spotify.voyager.jni.utils

      - - diff --git a/docs/java/com/spotify/voyager/jni/utils/package-tree.html b/docs/java/com/spotify/voyager/jni/utils/package-tree.html index d3de1d94..3de2b956 100644 --- a/docs/java/com/spotify/voyager/jni/utils/package-tree.html +++ b/docs/java/com/spotify/voyager/jni/utils/package-tree.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager.jni.utils Class Hierarchy (voyager 2.0.9 API) + - +com.spotify.voyager.jni.utils Class Hierarchy (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Hierarchy For Package com.spotify.voyager.jni.utils

      Package Hierarchies: @@ -102,31 +78,26 @@

      Hierarchy For Package com.spotify.voyager.jni.utils

      -

      Class Hierarchy

      -
      -
      - diff --git a/docs/java/com/spotify/voyager/jni/utils/package-use.html b/docs/java/com/spotify/voyager/jni/utils/package-use.html index a47b1e2d..e263c973 100644 --- a/docs/java/com/spotify/voyager/jni/utils/package-use.html +++ b/docs/java/com/spotify/voyager/jni/utils/package-use.html @@ -1,52 +1,38 @@ - + - + - -Uses of Package com.spotify.voyager.jni.utils (voyager 2.0.9 API) + - +Uses of Package com.spotify.voyager.jni.utils (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Uses of Package
      com.spotify.voyager.jni.utils

      No usage of com.spotify.voyager.jni.utils
      -
      - diff --git a/docs/java/com/spotify/voyager/package-frame.html b/docs/java/com/spotify/voyager/package-frame.html new file mode 100644 index 00000000..0c15215c --- /dev/null +++ b/docs/java/com/spotify/voyager/package-frame.html @@ -0,0 +1,15 @@ + + + + + + +com.spotify.voyager (voyager 2.1.0 API) + + + + + +

      com.spotify.voyager

      + + diff --git a/docs/java/com/spotify/voyager/package-summary.html b/docs/java/com/spotify/voyager/package-summary.html index 3393d377..af796a81 100644 --- a/docs/java/com/spotify/voyager/package-summary.html +++ b/docs/java/com/spotify/voyager/package-summary.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager (voyager 2.0.9 API) + - +com.spotify.voyager (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Package com.spotify.voyager

      +
      +
      Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector + data.
      - +
      +

      Package com.spotify.voyager Description

      Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data. For most use cases, Index will be the primary interface to + data. For most use cases, Index will be the primary interface to Voyager's functionality.
      @@ -125,21 +106,17 @@ 

      Package com.spotify.voyager

      // Serialize this index to use it again later: index.saveIndex("my_tiny_index.voy");
      -
      -
      - diff --git a/docs/java/com/spotify/voyager/package-tree.html b/docs/java/com/spotify/voyager/package-tree.html index 632020bf..3673a565 100644 --- a/docs/java/com/spotify/voyager/package-tree.html +++ b/docs/java/com/spotify/voyager/package-tree.html @@ -1,52 +1,38 @@ - + - + - -com.spotify.voyager Class Hierarchy (voyager 2.0.9 API) + - +com.spotify.voyager Class Hierarchy (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Hierarchy For Package com.spotify.voyager

      Package Hierarchies: @@ -101,19 +77,16 @@

      Hierarchy For Package com.spotify.voyager

    • All Packages
    • -
      - diff --git a/docs/java/com/spotify/voyager/package-use.html b/docs/java/com/spotify/voyager/package-use.html index b8e9a581..fd0db02c 100644 --- a/docs/java/com/spotify/voyager/package-use.html +++ b/docs/java/com/spotify/voyager/package-use.html @@ -1,52 +1,38 @@ - + - + - -Uses of Package com.spotify.voyager (voyager 2.0.9 API) + - +Uses of Package com.spotify.voyager (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Uses of Package
      com.spotify.voyager

      No usage of com.spotify.voyager
      -
      - diff --git a/docs/java/constant-values.html b/docs/java/constant-values.html index 66cb4e69..32f847ff 100644 --- a/docs/java/constant-values.html +++ b/docs/java/constant-values.html @@ -1,52 +1,38 @@ - + - + - -Constant Field Values (voyager 2.0.9 API) + - +Constant Field Values (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Constant Field Values

      -

      Contents

      -
      -
      - diff --git a/docs/java/copy.svg b/docs/java/copy.svg deleted file mode 100644 index 7c46ab15..00000000 --- a/docs/java/copy.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/docs/java/deprecated-list.html b/docs/java/deprecated-list.html index 75b9dce3..fb03644c 100644 --- a/docs/java/deprecated-list.html +++ b/docs/java/deprecated-list.html @@ -1,52 +1,38 @@ - + - + - -Deprecated List (voyager 2.0.9 API) + - +Deprecated List (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      Deprecated API

      Contents

      -
      - diff --git a/docs/java/element-list b/docs/java/element-list index 69afde0b..46ced86b 100644 --- a/docs/java/element-list +++ b/docs/java/element-list @@ -1,3 +1,4 @@ com.spotify.voyager com.spotify.voyager.jni +com.spotify.voyager.jni.exception com.spotify.voyager.jni.utils diff --git a/docs/java/help-doc.html b/docs/java/help-doc.html index 5b04da64..2f8a1ebf 100644 --- a/docs/java/help-doc.html +++ b/docs/java/help-doc.html @@ -1,52 +1,38 @@ - + - + - -API Help (voyager 2.0.9 API) + - +API Help (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -

      How This API Document Is Organized

      This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
      @@ -101,148 +77,118 @@

      How This API Document Is Organized

      • -

        Overview

        -

        The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

        -
        +

        The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      • -

        Package

        -

        Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

        +

        Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

          -
        • Interfaces
        • +
        • Interfaces (italic)
        • Classes
        • Enums
        • Exceptions
        • Errors
        • Annotation Types
        -
      • -
        -

        Class or Interface

        +

        Class/Interface

        Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

          -
        • Class Inheritance Diagram
        • +
        • Class inheritance diagram
        • Direct Subclasses
        • All Known Subinterfaces
        • All Known Implementing Classes
        • -
        • Class or Interface Declaration
        • -
        • Class or Interface Description
        • +
        • Class/interface declaration
        • +
        • Class/interface description
        -
        • Nested Class Summary
        • Field Summary
        • -
        • Property Summary
        • Constructor Summary
        • Method Summary
        -
        • Field Detail
        • -
        • Property Detail
        • Constructor Detail
        • Method Detail

        Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

        -
      • -

        Annotation Type

        Each annotation type has its own separate page with the following sections:

          -
        • Annotation Type Declaration
        • -
        • Annotation Type Description
        • +
        • Annotation Type declaration
        • +
        • Annotation Type description
        • Required Element Summary
        • Optional Element Summary
        • Element Detail
        -
      • -

        Enum

        Each enum has its own separate page with the following sections:

          -
        • Enum Declaration
        • -
        • Enum Description
        • +
        • Enum declaration
        • +
        • Enum description
        • Enum Constant Summary
        • Enum Constant Detail
        -
      • -

        Use

        -

        Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

        -
        +

        Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      • -

        Tree (Class Hierarchy)

        -

        There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

        +

        There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

        • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
        • -
        • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
        • +
        • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
        -
      • -

        Deprecated API

        The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

        -
      • -

        Index

        -

        The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

        -
        +

        The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

      • -
        -

        All Classes

        -

        The All Classes link shows all classes and interfaces except non-static nested types.

        -
        +

        Prev/Next

        +

        These links take you to the next or previous class, interface, package, or related page.

        +
      • +
      • +

        Frames/No Frames

        +

        These links show and hide the HTML frames. All pages are available with or without frames.

        +
      • +
      • +

        All Classes

        +

        The All Classes link shows all classes and interfaces except non-static nested types.

      • -

        Serialized Form

        Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

        -
      • -

        Constant Field Values

        The Constant Field Values page lists the static final fields and their values.

        -
        -
      • -
      • -
        -

        Search

        -

        You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

        -
      -
      -This help file applies to API documentation generated by the standard doclet.
      -
      - diff --git a/docs/java/index-all.html b/docs/java/index-all.html index 5fd89dc9..f46f9837 100644 --- a/docs/java/index-all.html +++ b/docs/java/index-all.html @@ -1,52 +1,38 @@ - + - + - -Index (voyager 2.0.9 API) + - +Index (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -
      -
      A C D E F G I J L M Q R S T U V W 
      All Classes All Packages +
      A C D E F G I J L M Q R S T U V W 

      A

      -
      addItem(float[]) - Method in class com.spotify.voyager.jni.Index
      +
      addItem(float[]) - Method in class com.spotify.voyager.jni.Index
      Add an item (a vector) to this Index.
      -
      addItem(float[], long) - Method in class com.spotify.voyager.jni.Index
      +
      addItem(float[], long) - Method in class com.spotify.voyager.jni.Index
      Add an item (a vector) to this Index with the provided identifier.
      -
      addItem(String, float[]) - Method in class com.spotify.voyager.jni.StringIndex
      +
      addItem(String, float[]) - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      addItem(String, List<Float>) - Method in class com.spotify.voyager.jni.StringIndex
      +
      addItem(String, List<Float>) - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      addItems(float[][], int) - Method in class com.spotify.voyager.jni.Index
      +
      addItems(float[][], int) - Method in class com.spotify.voyager.jni.Index
      Add multiple items (vectors) to this Index.
      -
      addItems(float[][], long[], int) - Method in class com.spotify.voyager.jni.Index
      +
      addItems(float[][], long[], int) - Method in class com.spotify.voyager.jni.Index
      -
      Add multiple items (vectors) to this Index.
      +
      Add multiple items (vectors) to this Index with the provided identifiers.
      -
      addItems(Map<String, List<Float>>) - Method in class com.spotify.voyager.jni.StringIndex
      +
      addItems(Map<String, List<Float>>) - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      asBytes() - Method in class com.spotify.voyager.jni.Index
      +
      asBytes() - Method in class com.spotify.voyager.jni.Index
      Returns the contents of this index as an array of bytes.
      - +

      C

      -
      close() - Method in class com.spotify.voyager.jni.Index
      +
      close() - Method in class com.spotify.voyager.jni.Index
      Close this Index and release any memory held by it.
      -
      close() - Method in class com.spotify.voyager.jni.StringIndex
      +
      close() - Method in class com.spotify.voyager.jni.StringIndex
       
      com.spotify.voyager - package com.spotify.voyager
      @@ -146,14 +122,12 @@

      C

      Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
      +
      com.spotify.voyager.jni.exception - package com.spotify.voyager.jni.exception
      +
       
      com.spotify.voyager.jni.utils - package com.spotify.voyager.jni.utils
       
      -
      Cosine - com.spotify.voyager.jni.Index.SpaceType
      -
      -
      Cosine distance; i.e. normalized dot product.
      -
      - +

      D

      @@ -163,117 +137,101 @@

      D

      A list of distances from each item ID to the query vector for this query.
      - +

      E

      -
      E4M3 - com.spotify.voyager.jni.Index.StorageDataType
      -
      -
      A custom 8-bit floating point data type with range [-448, 448] and variable precision.
      -
      -
      Euclidean - com.spotify.voyager.jni.Index.SpaceType
      -
      -
      Euclidean distance, also known as L2 distance.
      -
      -
      extractBinaries(String) - Static method in class com.spotify.voyager.jni.utils.JniLibExtractor
      +
      extractBinaries(String) - Static method in class com.spotify.voyager.jni.utils.JniLibExtractor
       
      - +

      F

      -
      finalize() - Method in class com.spotify.voyager.jni.Index
      +
      finalize() - Method in class com.spotify.voyager.jni.Index
       
      -
      Float32 - com.spotify.voyager.jni.Index.StorageDataType
      -
      -
      A 32-bit floating point ("Float") data type.
      -
      -
      Float8 - com.spotify.voyager.jni.Index.StorageDataType
      -
      -
      An 8-bit floating point data type that expects all values to be on [-1, 1].
      -
      - +

      G

      -
      getDistance(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      getDistance(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      -
      getDistances() - Method in class com.spotify.voyager.jni.Index.QueryResults
      +
      getDistances() - Method in class com.spotify.voyager.jni.Index.QueryResults
      Retrieve the list of distances between query vectors and item vectors for the results of this query.
      -
      getDistances() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      getDistances() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      -
      getEf() - Method in class com.spotify.voyager.jni.Index
      +
      getEf() - Method in class com.spotify.voyager.jni.Index
      -
      Get the default EF ("query search depth") that will be uses when Index.query(float[], int) is called.
      +
      Get the default EF ("query search depth") that will be uses when Index.query(float[], int) is called.
      -
      getEfConstruction() - Method in class com.spotify.voyager.jni.Index
      +
      getEfConstruction() - Method in class com.spotify.voyager.jni.Index
      Get the EF Construction value used when adding new elements to this Index.
      -
      getIDs() - Method in class com.spotify.voyager.jni.Index
      +
      getIDs() - Method in class com.spotify.voyager.jni.Index
      Get the list of identifiers currently stored by this index.
      -
      getLabels() - Method in class com.spotify.voyager.jni.Index.QueryResults
      +
      getLabels() - Method in class com.spotify.voyager.jni.Index.QueryResults
      Retrieve the list of item IDs ("labels") returned by this query.
      -
      getM() - Method in class com.spotify.voyager.jni.Index
      +
      getM() - Method in class com.spotify.voyager.jni.Index
      Get the M value used when adding new elements to this Index.
      -
      getMaxElements() - Method in class com.spotify.voyager.jni.Index
      +
      getMaxElements() - Method in class com.spotify.voyager.jni.Index
      Get the maximum number of elements currently storable by this Index.
      -
      getMaxElements() - Method in class com.spotify.voyager.jni.StringIndex
      +
      getMaxElements() - Method in class com.spotify.voyager.jni.StringIndex
      Get the maximum number of elements currently storable by this Index.
      -
      getName(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      getName(int) - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      -
      getNames() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      getNames() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      -
      getNumDimensions() - Method in class com.spotify.voyager.jni.Index
      +
      getNumDimensions() - Method in class com.spotify.voyager.jni.Index
      Get the number of dimensions used in this Index.
      -
      getNumElements() - Method in class com.spotify.voyager.jni.Index
      +
      getNumElements() - Method in class com.spotify.voyager.jni.Index
      Get the number of elements currently in this Index.
      -
      getNumElements() - Method in class com.spotify.voyager.jni.StringIndex
      +
      getNumElements() - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      getNumResults() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      getNumResults() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      -
      getNumThreads() - Method in class com.spotify.voyager.jni.Index
      +
      getNumThreads() - Method in class com.spotify.voyager.jni.Index
      Get the default number of threads used when adding multiple vectors in bulk oor when querying for multiple vectors simultaneously.
      -
      getSpace() - Method in class com.spotify.voyager.jni.Index
      +
      getSpace() - Method in class com.spotify.voyager.jni.Index
      Get the Index.SpaceType that this Index uses to store and compare vectors.
      -
      getVector(long) - Method in class com.spotify.voyager.jni.Index
      +
      getVector(long) - Method in class com.spotify.voyager.jni.Index
      Get the vector for the provided identifier.
      -
      getVector(String) - Method in class com.spotify.voyager.jni.StringIndex
      +
      getVector(String) - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      getVectors(long[]) - Method in class com.spotify.voyager.jni.Index
      +
      getVectors(long[]) - Method in class com.spotify.voyager.jni.Index
      Get the vectors for a provided array of identifiers.
      - +

      I

      @@ -283,12 +241,12 @@

      I

      A Voyager index, providing storage of floating-point vectors and the ability to efficiently search among those vectors.
      -
      Index(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.Index
      +
      Index(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.Index
      Create a new Index that uses the given Index.SpaceType to store and compare numDimensions-dimensional vectors.
      -
      Index(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.Index
      +
      Index(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.Index
      Create a new Index that uses the given Index.SpaceType to store and compare numDimensions-dimensional vectors.
      @@ -305,22 +263,18 @@

      I

      The datatype used to use when storing vectors on disk.
      -
      InnerProduct - com.spotify.voyager.jni.Index.SpaceType
      -
      -
      Inner (dot) product.
      -
      - +

      J

      JniLibExtractor - Class in com.spotify.voyager.jni.utils
       
      -
      JniLibExtractor() - Constructor for class com.spotify.voyager.jni.utils.JniLibExtractor
      +
      JniLibExtractor() - Constructor for class com.spotify.voyager.jni.utils.JniLibExtractor
       
      - +

      L

      @@ -329,134 +283,146 @@

      L

      A list of item IDs ("labels").
      -
      load(InputStream) - Static method in class com.spotify.voyager.jni.Index
      +
      load(String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
      +
      +
      Load a Voyager index file and create a new Index initialized with the data in that + file.
      +
      +
      load(String) - Static method in class com.spotify.voyager.jni.Index
      +
      +
      Load a Voyager index file and create a new Index initialized with the data in that + file.
      +
      +
      load(InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
      Interpret the contents of a java.io.InputStream as the contents of a Voyager index file and create a new Index initialized with the data provided by that stream.
      -
      load(InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
      +
      load(InputStream) - Static method in class com.spotify.voyager.jni.Index
      Interpret the contents of a java.io.InputStream as the contents of a Voyager index file and create a new Index initialized with the data provided by that stream.
      -
      load(InputStream, InputStream) - Static method in class com.spotify.voyager.jni.StringIndex
      +
      load(String, String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
      -
      Load a previously constructed index from the provided input stream.
      +
      Load a previously constructed index from the provided file location.
      -
      load(InputStream, InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
      +
      load(InputStream, InputStream, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
      Load a previously constructed index from the provided input streams.
      -
      load(String) - Static method in class com.spotify.voyager.jni.Index
      -
      -
      Load a Voyager index file and create a new Index initialized with the data in that - file.
      -
      -
      load(String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.Index
      -
      -
      Load a Voyager index file and create a new Index initialized with the data in that - file.
      -
      -
      load(String, String) - Static method in class com.spotify.voyager.jni.StringIndex
      +
      load(String, String) - Static method in class com.spotify.voyager.jni.StringIndex
      Load a previously constructed index from the provided file location.
      -
      load(String, String, Index.SpaceType, int, Index.StorageDataType) - Static method in class com.spotify.voyager.jni.StringIndex
      +
      load(InputStream, InputStream) - Static method in class com.spotify.voyager.jni.StringIndex
      -
      Load a previously constructed index from the provided file location.
      +
      Load a previously constructed index from the provided input stream.
      - +

      M

      -
      markDeleted(long) - Method in class com.spotify.voyager.jni.Index
      +
      markDeleted(long) - Method in class com.spotify.voyager.jni.Index
      Mark an element of the index as deleted.
      - +

      Q

      -
      query(float[][], int, int) - Method in class com.spotify.voyager.jni.Index
      -
      -
      Query this Index for approximate nearest neighbors of multiple query vectors.
      -
      -
      query(float[][], int, int, int) - Method in class com.spotify.voyager.jni.StringIndex
      +
      query(float[], int) - Method in class com.spotify.voyager.jni.Index
      -
      Query for multiple target vectors in parallel.
      +
      Query this Index for approximate nearest neighbors of a single query vector.
      -
      query(float[][], int, int, long) - Method in class com.spotify.voyager.jni.Index
      +
      query(float[][], int, int) - Method in class com.spotify.voyager.jni.Index
      Query this Index for approximate nearest neighbors of multiple query vectors.
      -
      query(float[], int) - Method in class com.spotify.voyager.jni.Index
      +
      query(float[], int, long) - Method in class com.spotify.voyager.jni.Index
      Query this Index for approximate nearest neighbors of a single query vector.
      -
      query(float[], int, int) - Method in class com.spotify.voyager.jni.StringIndex
      +
      query(float[][], int, int, long) - Method in class com.spotify.voyager.jni.Index
      +
      +
      Query this Index for approximate nearest neighbors of multiple query vectors.
      +
      +
      query(float[], int, int) - Method in class com.spotify.voyager.jni.StringIndex
      Find the nearest neighbors of the provided embedding.
      -
      query(float[], int, long) - Method in class com.spotify.voyager.jni.Index
      +
      query(float[][], int, int, int) - Method in class com.spotify.voyager.jni.StringIndex
      -
      Query this Index for approximate nearest neighbors of a single query vector.
      +
      Query for multiple target vectors in parallel.
      -
      QueryResults(long[], float[]) - Constructor for class com.spotify.voyager.jni.Index.QueryResults
      +
      QueryResults(long[], float[]) - Constructor for class com.spotify.voyager.jni.Index.QueryResults
      Instantiates a new QueryResults object, provided two identical-length arrays of labels and their corresponding distances.
      -
      QueryResults(String[], float[]) - Constructor for class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      QueryResults(String[], float[]) - Constructor for class com.spotify.voyager.jni.StringIndex.QueryResults
       
      - +

      R

      -
      readStringList(InputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
      +
      readStringList(InputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
       
      -
      resizeIndex(long) - Method in class com.spotify.voyager.jni.Index
      +
      RecallException - Exception in com.spotify.voyager.jni.exception
      +
      +
      An exception indicating that the desired recall of a query cannot be achieved
      +
      +
      RecallException(String) - Constructor for exception com.spotify.voyager.jni.exception.RecallException
      +
      +
      Constructs a new RecallException with the specified detail message.
      +
      +
      RecallException(String, Throwable) - Constructor for exception com.spotify.voyager.jni.exception.RecallException
      +
      +
      Constructs a new RecallException with the specified detail message and cause.
      +
      +
      resizeIndex(long) - Method in class com.spotify.voyager.jni.Index
      Change the maximum number of elements currently storable by this Index.
      -
      resizeIndex(long) - Method in class com.spotify.voyager.jni.StringIndex
      +
      resizeIndex(long) - Method in class com.spotify.voyager.jni.StringIndex
      Change the maximum number of elements currently storable by this Index.
      - +

      S

      -
      saveIndex(OutputStream) - Method in class com.spotify.voyager.jni.Index
      -
      -
      Save this Index to the provided output stream.
      -
      -
      saveIndex(OutputStream, OutputStream) - Method in class com.spotify.voyager.jni.StringIndex
      +
      saveIndex(String) - Method in class com.spotify.voyager.jni.Index
      -
      Save the underlying HNSW index and JSON encoded names list to the provided output streams
      +
      Save this Index to a file at the provided filename.
      -
      saveIndex(String) - Method in class com.spotify.voyager.jni.Index
      +
      saveIndex(OutputStream) - Method in class com.spotify.voyager.jni.Index
      -
      Save this Index to a file at the provided filename.
      +
      Save this Index to the provided output stream.
      -
      saveIndex(String) - Method in class com.spotify.voyager.jni.StringIndex
      +
      saveIndex(String) - Method in class com.spotify.voyager.jni.StringIndex
      Save the underlying index and JSON encoded name list to the provided output directory
      -
      saveIndex(String, String, String) - Method in class com.spotify.voyager.jni.StringIndex
      +
      saveIndex(String, String, String) - Method in class com.spotify.voyager.jni.StringIndex
       
      -
      setEf(long) - Method in class com.spotify.voyager.jni.Index
      +
      saveIndex(OutputStream, OutputStream) - Method in class com.spotify.voyager.jni.StringIndex
      -
      Set the default EF ("query search depth") to use when Index.query(float[], int) is called.
      +
      Save the underlying HNSW index and JSON encoded names list to the provided output streams
      -
      setNumThreads(int) - Method in class com.spotify.voyager.jni.Index
      +
      setEf(long) - Method in class com.spotify.voyager.jni.Index
      +
      +
      Set the default EF ("query search depth") to use when Index.query(float[], int) is called.
      +
      +
      setNumThreads(int) - Method in class com.spotify.voyager.jni.Index
      Set the default number of threads to use when adding multiple vectors in bulk, or when querying for multiple vectors simultaneously.
      @@ -466,11 +432,11 @@

      S

      Wrapper around com.spotify.voyager.jni.Index with a simplified interface which maps the index ID to a provided String.
      -
      StringIndex(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.StringIndex
      +
      StringIndex(Index.SpaceType, int) - Constructor for class com.spotify.voyager.jni.StringIndex
      Instantiate a new empty index with the specified space type and dimensionality
      -
      StringIndex(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.StringIndex
      +
      StringIndex(Index.SpaceType, int, long, long, long, long, Index.StorageDataType) - Constructor for class com.spotify.voyager.jni.StringIndex
      Instantiate an empty index with the specified index parameters
      @@ -479,7 +445,7 @@

      S

      A wrapper class for nearest neighbor query results.
      - +

      T

      @@ -489,69 +455,66 @@

      T

      A dependency-free, super tiny JSON serde class that only supports reading and writing lists of strings.
      -
      TinyJson() - Constructor for class com.spotify.voyager.jni.utils.TinyJson
      +
      TinyJson() - Constructor for class com.spotify.voyager.jni.utils.TinyJson
       
      -
      toString() - Method in class com.spotify.voyager.jni.Index.QueryResults
      +
      toString() - Method in class com.spotify.voyager.jni.Index.QueryResults
       
      -
      toString() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
      +
      toString() - Method in class com.spotify.voyager.jni.StringIndex.QueryResults
       
      - +

      U

      -
      unmarkDeleted(long) - Method in class com.spotify.voyager.jni.Index
      +
      unmarkDeleted(long) - Method in class com.spotify.voyager.jni.Index
      Un-mark an element of the index as deleted, making it available again.
      - +

      V

      -
      valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.SpaceType
      +
      valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.SpaceType
      Returns the enum constant of this type with the specified name.
      -
      valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
      +
      valueOf(String) - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
      Returns the enum constant of this type with the specified name.
      -
      values() - Static method in enum com.spotify.voyager.jni.Index.SpaceType
      +
      values() - Static method in enum com.spotify.voyager.jni.Index.SpaceType
      Returns an array containing the constants of this enum type, in the order they are declared.
      -
      values() - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
      +
      values() - Static method in enum com.spotify.voyager.jni.Index.StorageDataType
      Returns an array containing the constants of this enum type, in the order they are declared.
      - +

      W

      -
      writeStringList(Iterable<String>, OutputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
      +
      writeStringList(Iterable<String>, OutputStream) - Static method in class com.spotify.voyager.jni.utils.TinyJson
       
      -A C D E F G I J L M Q R S T U V W 
      All Classes All Packages
      -
      - diff --git a/docs/java/index.html b/docs/java/index.html index dc66bcd5..3e657bb7 100644 --- a/docs/java/index.html +++ b/docs/java/index.html @@ -1,177 +1,76 @@ - + - + - -Overview (voyager 2.0.9 API) + - - - - - - - - - - - - - - -
      - -
      -
      -
      -

      voyager 2.0.9 API

      -
      -
      - - - - - - - - - - - - - - - - - - - - -
      Packages 
      PackageDescription
      com.spotify.voyager -
      Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector - data.
      -
      com.spotify.voyager.jni -
      Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
      -
      com.spotify.voyager.jni.utils 
      -
      -
      -
      -
      ", "
      " ], - col: [ 2, "", "
      " ], - tr: [ 2, "", "
      " ], - td: [ 3, "", "
      " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " + + + + +

       

      + + diff --git a/docs/java/overview-summary.html b/docs/java/overview-summary.html index 929e37b5..e07c0f5b 100644 --- a/docs/java/overview-summary.html +++ b/docs/java/overview-summary.html @@ -1,23 +1,157 @@ - + - + - -voyager 2.0.9 API + - - - +Overview (voyager 2.1.0 API) + + -
      + -

      index.html

      -
      + +
      + + + + + + + +
      + + +
      +

      voyager 2.1.0 API

      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + +
      Packages 
      PackageDescription
      com.spotify.voyager +
      Voyager is a Java and Python library that provides approximate nearest-neighbor search of vector + data.
      +
      com.spotify.voyager.jni +
      Java Native Interface (JNI) bindings to expose functionality from Voyager's C++ code into Java.
      +
      com.spotify.voyager.jni.exception 
      com.spotify.voyager.jni.utils 
      +
      + +
      + + + + + + + +
      + + +

      Copyright © 2024. All rights reserved.

      diff --git a/docs/java/overview-tree.html b/docs/java/overview-tree.html index 6d455947..430eeec6 100644 --- a/docs/java/overview-tree.html +++ b/docs/java/overview-tree.html @@ -1,52 +1,38 @@ - + - + - -Class Hierarchy (voyager 2.0.9 API) + - +Class Hierarchy (voyager 2.1.0 API) + - - - - - - - + -
      - -
      -
      -

      Class Hierarchy

      -
      -

      Enum Hierarchy

      -
      -
      - diff --git a/docs/java/apidocs/element-list b/docs/java/package-list similarity index 100% rename from docs/java/apidocs/element-list rename to docs/java/package-list diff --git a/docs/java/package-search-index.js b/docs/java/package-search-index.js index 41002eac..87e7f704 100644 --- a/docs/java/package-search-index.js +++ b/docs/java/package-search-index.js @@ -1 +1 @@ -packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"com.spotify.voyager"},{"l":"com.spotify.voyager.jni"},{"l":"com.spotify.voyager.jni.utils"}] \ No newline at end of file +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.spotify.voyager"},{"l":"com.spotify.voyager.jni"},{"l":"com.spotify.voyager.jni.exception"},{"l":"com.spotify.voyager.jni.utils"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/package-search-index.zip b/docs/java/package-search-index.zip deleted file mode 100644 index b9df3b2c..00000000 Binary files a/docs/java/package-search-index.zip and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png b/docs/java/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100644 index 34abd18f..00000000 Binary files a/docs/java/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_glass_65_dadada_1x400.png b/docs/java/script-dir/images/ui-bg_glass_65_dadada_1x400.png deleted file mode 100644 index f058a938..00000000 Binary files a/docs/java/script-dir/images/ui-bg_glass_65_dadada_1x400.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_glass_75_dadada_1x400.png b/docs/java/script-dir/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100644 index 2ce04c16..00000000 Binary files a/docs/java/script-dir/images/ui-bg_glass_75_dadada_1x400.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png b/docs/java/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index a90afb8b..00000000 Binary files a/docs/java/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png b/docs/java/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index dbe091f6..00000000 Binary files a/docs/java/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/docs/java/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100644 index 5dc3593e..00000000 Binary files a/docs/java/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-icons_222222_256x240.png b/docs/java/script-dir/images/ui-icons_222222_256x240.png deleted file mode 100644 index e723e17c..00000000 Binary files a/docs/java/script-dir/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-icons_2e83ff_256x240.png b/docs/java/script-dir/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index 1f5f4975..00000000 Binary files a/docs/java/script-dir/images/ui-icons_2e83ff_256x240.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-icons_454545_256x240.png b/docs/java/script-dir/images/ui-icons_454545_256x240.png deleted file mode 100644 index 618f5b0c..00000000 Binary files a/docs/java/script-dir/images/ui-icons_454545_256x240.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-icons_888888_256x240.png b/docs/java/script-dir/images/ui-icons_888888_256x240.png deleted file mode 100644 index ee5e33f2..00000000 Binary files a/docs/java/script-dir/images/ui-icons_888888_256x240.png and /dev/null differ diff --git a/docs/java/script-dir/images/ui-icons_cd0a0a_256x240.png b/docs/java/script-dir/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 7e8ebc18..00000000 Binary files a/docs/java/script-dir/images/ui-icons_cd0a0a_256x240.png and /dev/null differ diff --git a/docs/java/script-dir/jquery-3.5.1.min.js b/docs/java/script-dir/jquery-3.5.1.min.js deleted file mode 100644 index b0614034..00000000 --- a/docs/java/script-dir/jquery-3.5.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
      ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || - window.navigator.userAgent.indexOf('Edge/') > 0) { - createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); - } - createElem(doc, tag, 'search.js'); - - $.get(pathtoroot + "module-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("module-search-index.json").async("text").then(function(content){ - moduleSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "package-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("package-search-index.json").async("text").then(function(content){ - packageSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "type-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("type-search-index.json").async("text").then(function(content){ - typeSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "member-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("member-search-index.json").async("text").then(function(content){ - memberSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "tag-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("tag-search-index.json").async("text").then(function(content){ - tagSearchIndex = JSON.parse(content); - }); - }); - }); - }); - if (!moduleSearchIndex) { - createElem(doc, tag, 'module-search-index.js'); - } - if (!packageSearchIndex) { - createElem(doc, tag, 'package-search-index.js'); - } - if (!typeSearchIndex) { - createElem(doc, tag, 'type-search-index.js'); - } - if (!memberSearchIndex) { - createElem(doc, tag, 'member-search-index.js'); - } - if (!tagSearchIndex) { - createElem(doc, tag, 'tag-search-index.js'); - } - $(window).resize(function() { - $('.navPadding').css('padding-top', $('.fixedNav').css("height")); - }); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -function show(type) { +function show(type) +{ count = 0; - for (var key in data) { + for (var key in methods) { var row = document.getElementById(key); - if ((data[key] & type) !== 0) { + if ((methods[key] & type) != 0) { row.style.display = ''; row.className = (count++ % 2) ? rowColor : altColor; } @@ -128,7 +13,8 @@ function show(type) { updateTabs(type); } -function updateTabs(type) { +function updateTabs(type) +{ for (var value in tabs) { var sNode = document.getElementById(tabs[value][0]); var spanNode = sNode.firstChild; @@ -142,8 +28,3 @@ function updateTabs(type) { } } } - -function updateModuleFrame(pFrame, cFrame) { - top.packageFrame.location = pFrame; - top.classFrame.location = cFrame; -} diff --git a/docs/java/search-page.js b/docs/java/search-page.js deleted file mode 100644 index 540c90f5..00000000 --- a/docs/java/search-page.js +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -"use strict"; -$(function() { - var copy = $("#page-search-copy"); - var expand = $("#page-search-expand"); - var searchLink = $("span#page-search-link"); - var redirect = $("input#search-redirect"); - function setSearchUrlTemplate() { - var href = document.location.href.split(/[#?]/)[0]; - href += "?q=" + "%s"; - if (redirect.is(":checked")) { - href += "&r=1"; - } - searchLink.html(href); - copy[0].onmouseenter(); - } - function copyLink(e) { - copyToClipboard(this.previousSibling.innerText); - switchCopyLabel(this, this.lastElementChild); - } - copy.click(copyLink); - copy[0].onmouseenter = function() {}; - redirect.click(setSearchUrlTemplate); - setSearchUrlTemplate(); - copy.prop("disabled", false); - redirect.prop("disabled", false); - expand.click(function (e) { - var searchInfo = $("div.page-search-info"); - if(this.parentElement.hasAttribute("open")) { - searchInfo.attr("style", "border-width: 0;"); - } else { - searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); - } - }); -}); -$(window).on("load", function() { - var input = $("#page-search-input"); - var reset = $("#page-search-reset"); - var notify = $("#page-search-notify"); - var resultSection = $("div#result-section"); - var resultContainer = $("div#result-container"); - var searchTerm = ""; - var activeTab = ""; - var fixedTab = false; - var visibleTabs = []; - var feelingLucky = false; - function renderResults(result) { - if (!result.length) { - notify.html(messages.noResult); - } else if (result.length === 1) { - notify.html(messages.oneResult); - } else { - notify.html(messages.manyResults.replace("{0}", result.length)); - } - resultContainer.empty(); - var r = { - "types": [], - "members": [], - "packages": [], - "modules": [], - "searchTags": [] - }; - for (var i in result) { - var item = result[i]; - var arr = r[item.category]; - arr.push(item); - } - if (!activeTab || r[activeTab].length === 0 || !fixedTab) { - Object.keys(r).reduce(function(prev, curr) { - if (r[curr].length > 0 && r[curr][0].score > prev) { - activeTab = curr; - return r[curr][0].score; - } - return prev; - }, 0); - } - if (feelingLucky && activeTab) { - notify.html(messages.redirecting) - var firstItem = r[activeTab][0]; - window.location = getURL(firstItem.indexItem, firstItem.category); - return; - } - if (result.length > 20) { - if (searchTerm[searchTerm.length - 1] === ".") { - if (activeTab === "types" && r["members"].length > r["types"].length) { - activeTab = "members"; - } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { - activeTab = "types"; - } - } - } - var categoryCount = Object.keys(r).reduce(function(prev, curr) { - return prev + (r[curr].length > 0 ? 1 : 0); - }, 0); - visibleTabs = []; - var tabContainer = $("
      ").appendTo(resultContainer); - for (var key in r) { - var id = "#result-tab-" + key.replace("searchTags", "search_tags"); - if (r[key].length) { - var count = r[key].length >= 1000 ? "999+" : r[key].length; - if (result.length > 20 && categoryCount > 1) { - var button = $("").appendTo(tabContainer); - button.click(key, function(e) { - fixedTab = true; - renderResult(e.data, $(this)); - }); - visibleTabs.push(key); - } else { - $("" + categories[key] - + " (" + count + ")").appendTo(tabContainer); - renderTable(key, r[key]).appendTo(resultContainer); - tabContainer = $("
      ").appendTo(resultContainer); - - } - } - } - if (activeTab && result.length > 20 && categoryCount > 1) { - $("button#result-tab-" + activeTab).addClass("active-table-tab"); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - } - resultSection.show(); - function renderResult(category, button) { - activeTab = category; - setSearchUrl(); - resultContainer.find("div.summary-table").remove(); - renderTable(activeTab, r[activeTab]).appendTo(resultContainer); - button.siblings().removeClass("active-table-tab"); - button.addClass("active-table-tab"); - } - } - function selectTab(category) { - $("button#result-tab-" + category).click(); - } - function renderTable(category, items) { - var table = $("
      ") - .addClass(category === "modules" - ? "one-column-search-results" - : "two-column-search-results"); - var col1, col2; - if (category === "modules") { - col1 = "Module"; - } else if (category === "packages") { - col1 = "Module"; - col2 = "Package"; - } else if (category === "types") { - col1 = "Package"; - col2 = "Class" - } else if (category === "members") { - col1 = "Class"; - col2 = "Member"; - } else if (category === "searchTags") { - col1 = "Location"; - col2 = "Name"; - } - $("
      " + col1 + "
      ").appendTo(table); - if (category !== "modules") { - $("
      " + col2 + "
      ").appendTo(table); - } - $.each(items, function(index, item) { - var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; - renderItem(item, table, rowColor); - }); - return table; - } - function renderItem(item, table, rowColor) { - var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); - var link = $("") - .attr("href", getURL(item.indexItem, item.category)) - .attr("tabindex", "0") - .addClass("search-result-link") - .html(label); - var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); - if (item.category === "searchTags") { - container = item.indexItem.h || ""; - } - if (item.category !== "modules") { - $("
      ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); - } - $("
      ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); - } - var timeout; - function schedulePageSearch() { - if (timeout) { - clearTimeout(timeout); - } - timeout = setTimeout(function () { - doPageSearch() - }, 100); - } - function doPageSearch() { - setSearchUrl(); - var term = searchTerm = input.val().trim(); - if (term === "") { - notify.html(messages.enterTerm); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - resultSection.hide(); - } else { - notify.html(messages.searching); - doSearch({ term: term, maxResults: 1200 }, renderResults); - } - } - function setSearchUrl() { - var query = input.val().trim(); - var url = document.location.pathname; - if (query) { - url += "?q=" + encodeURI(query); - if (activeTab && fixedTab) { - url += "&c=" + activeTab; - } - } - history.replaceState({query: query}, "", url); - } - input.on("input", function(e) { - feelingLucky = false; - schedulePageSearch(); - }); - $(document).keydown(function(e) { - if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { - if (activeTab && visibleTabs.length > 1) { - var idx = visibleTabs.indexOf(activeTab); - idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; - selectTab(visibleTabs[idx % visibleTabs.length]); - return false; - } - } - }); - reset.click(function() { - notify.html(messages.enterTerm); - resultSection.hide(); - activeTab = ""; - fixedTab = false; - resultContainer.empty(); - input.val('').focus(); - setSearchUrl(); - }); - input.prop("disabled", false); - reset.prop("disabled", false); - - var urlParams = new URLSearchParams(window.location.search); - if (urlParams.has("q")) { - input.val(urlParams.get("q")) - } - if (urlParams.has("c")) { - activeTab = urlParams.get("c"); - fixedTab = true; - } - if (urlParams.get("r")) { - feelingLucky = true; - } - if (input.val()) { - doPageSearch(); - } else { - notify.html(messages.enterTerm); - } - input.select().focus(); -}); diff --git a/docs/java/search.html b/docs/java/search.html deleted file mode 100644 index 22515698..00000000 --- a/docs/java/search.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - -Search (voyager 2.0.9 API) - - - - - - - - - - - - - - -
      - -
      -
      -

      Search

      -
      - - -
      -Additional resources -
      -
      -
      -

      The help page provides an introduction to the scope and syntax of JavaDoc search.

      -

      You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.

      -

      The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.

      -link -

      - -

      -
      -

      Loading search index...

      - -
      -
      -
      - -
      -
      -
      - - diff --git a/docs/java/search.js b/docs/java/search.js index 8492271e..2246cdd0 100644 --- a/docs/java/search.js +++ b/docs/java/search.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,65 +24,100 @@ */ var noResult = {l: "No results found"}; +var loading = {l: "Loading search index..."}; var catModules = "Modules"; var catPackages = "Packages"; var catTypes = "Types"; var catMembers = "Members"; -var catSearchTags = "SearchTags"; -var highlight = "$&"; -var camelCaseRegexp = ""; -var secondaryMatcher = ""; -function getHighlightedText(item) { - var ccMatcher = new RegExp(camelCaseRegexp); - var label = item.replace(ccMatcher, highlight); - if (label === item) { - label = item.replace(secondaryMatcher, highlight); +var catSearchTags = "Search Tags"; +var highlight = "$&"; +var searchPattern = ""; +var fallbackPattern = ""; +var RANKING_THRESHOLD = 2; +var NO_MATCH = 0xffff; +var MIN_RESULTS = 3; +var MAX_RESULTS = 500; +var UNNAMED = ""; +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(item, matcher, fallbackMatcher) { + var escapedItem = escapeHtml(item); + var highlighted = escapedItem.replace(matcher, highlight); + if (highlighted === escapedItem) { + highlighted = escapedItem.replace(fallbackMatcher, highlight) } - return label; + return highlighted; } function getURLPrefix(ui) { var urlPrefix=""; - if (useModuleDirectories) { - var slash = "/"; - if (ui.item.category === catModules) { - return ui.item.l + slash; - } else if (ui.item.category === catPackages && ui.item.m) { - return ui.item.m + slash; - } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if (ui.item.category === catTypes || ui.item.category === catMembers) { + if (ui.item.m) { + urlPrefix = ui.item.m + slash; + } else { $.each(packageSearchIndex, function(index, item) { - if (item.m && ui.item.p == item.l) { + if (item.m && ui.item.p === item.l) { urlPrefix = item.m + slash; } }); - return urlPrefix; - } else { - return urlPrefix; } } return urlPrefix; } +function createSearchPattern(term) { + var pattern = ""; + var isWordToken = false; + term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { + if (index > 0) { + // whitespace between identifiers is significant + pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; + } + var tokens = w.split(/(?=[A-Z,.()<>[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + if (s === "") { + continue; + } + pattern += $.ui.autocomplete.escapeRegex(s); + isWordToken = /\w$/.test(s); + if (isWordToken) { + pattern += "([a-z0-9_$<>\\[\\]]*?)"; + } + } + }); + return pattern; +} +function createMatcher(pattern, flags) { + var isCamelCase = /[A-Z]/.test(pattern); + return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); +} var watermark = 'Search'; $(function() { - $("#search").val(''); - $("#search").prop("disabled", false); - $("#reset").prop("disabled", false); - $("#search").val(watermark).addClass('watermark'); - $("#search").blur(function() { - if ($(this).val().length == 0) { + var search = $("#search-input"); + var reset = $("#reset-button"); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + search.val(watermark).addClass('watermark'); + search.blur(function() { + if ($(this).val().length === 0) { $(this).val(watermark).addClass('watermark'); } }); - $("#search").on('click keydown', function() { - if ($(this).val() == watermark) { + search.on('click keydown paste', function() { + if ($(this).val() === watermark) { $(this).val('').removeClass('watermark'); } }); - $("#reset").click(function() { - $("#search").val(''); - $("#search").focus(); + reset.click(function() { + search.val('').focus(); }); - $("#search").focus(); - $("#search")[0].setSelectionRange(0, 0); + search.focus()[0].setSelectionRange(0, 0); }); $.widget("custom.catcomplete", $.ui.autocomplete, { _create: function() { @@ -90,224 +125,217 @@ $.widget("custom.catcomplete", $.ui.autocomplete, { this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); }, _renderMenu: function(ul, items) { - var rMenu = this, - currentCategory = ""; + var rMenu = this; + var currentCategory = ""; rMenu.menu.bindings = $(); $.each(items, function(index, item) { var li; - if (item.l !== noResult.l && item.category !== currentCategory) { + if (item.category && item.category !== currentCategory) { ul.append("
    • " + item.category + "
    • "); currentCategory = item.category; } li = rMenu._renderItemData(ul, item); if (item.category) { li.attr("aria-label", item.category + " : " + item.l); - li.attr("class", "resultItem"); + li.attr("class", "result-item"); } else { li.attr("aria-label", item.l); - li.attr("class", "resultItem"); + li.attr("class", "result-item"); } }); }, _renderItem: function(ul, item) { var label = ""; + var matcher = createMatcher(escapeHtml(searchPattern), "g"); + var fallbackMatcher = new RegExp(fallbackPattern, "gi") if (item.category === catModules) { - label = getHighlightedText(item.l); + label = getHighlightedText(item.l, matcher, fallbackMatcher); } else if (item.category === catPackages) { - label = (item.m) - ? getHighlightedText(item.m + "/" + item.l) - : getHighlightedText(item.l); + label = getHighlightedText(item.l, matcher, fallbackMatcher); } else if (item.category === catTypes) { - label = (item.p) - ? getHighlightedText(item.p + "." + item.l) - : getHighlightedText(item.l); + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.l, matcher, fallbackMatcher); } else if (item.category === catMembers) { - label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); } else if (item.category === catSearchTags) { - label = getHighlightedText(item.l); + label = getHighlightedText(item.l, matcher, fallbackMatcher); } else { label = item.l; } var li = $("
    • ").appendTo(ul); var div = $("
      ").appendTo(li); - if (item.category === catSearchTags) { + if (item.category === catSearchTags && item.h) { if (item.d) { - div.html(label + " (" + item.h + ")
      " + div.html(label + " (" + item.h + ")
      " + item.d + "
      "); } else { - div.html(label + " (" + item.h + ")"); + div.html(label + " (" + item.h + ")"); } } else { - div.html(label); + if (item.m) { + div.html(item.m + "/" + label); + } else { + div.html(label); + } } return li; } }); -$(function() { - $("#search").catcomplete({ - minLength: 1, - delay: 100, - source: function(request, response) { - var result = new Array(); - var presult = new Array(); - var tresult = new Array(); - var mresult = new Array(); - var tgresult = new Array(); - var secondaryresult = new Array(); - var displayCount = 0; - var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); - camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); - var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); - secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); +function rankMatch(match, category) { + if (!match) { + return NO_MATCH; + } + var index = match.index; + var input = match.input; + var leftBoundaryMatch = 2; + var periferalMatch = 0; + // make sure match is anchored on a left word boundary + if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { + leftBoundaryMatch = 0; + } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { + leftBoundaryMatch = 1; + } + var matchEnd = index + match[0].length; + var leftParen = input.indexOf("("); + var endOfName = leftParen > -1 ? leftParen : input.length; + // exclude peripheral matches + if (category !== catModules && category !== catSearchTags) { + var delim = category === catPackages ? "/" : "."; + if (leftParen > -1 && leftParen < index) { + periferalMatch += 2; + } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { + periferalMatch += 2; + } + } + var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match + for (var i = 1; i < match.length; i++) { + // lower ranking if parts of the name are missing + if (match[i]) + delta += match[i].length; + } + if (category === catTypes) { + // lower ranking if a type name contains unmatched camel-case parts + if (/[A-Z]/.test(input.substring(matchEnd))) + delta += 5; + if (/[A-Z]/.test(input.substring(0, index))) + delta += 5; + } + return leftBoundaryMatch + periferalMatch + (delta / 200); - // Return the nested innermost name from the specified object - function nestedName(e) { - return e.l.substring(e.l.lastIndexOf(".") + 1); - } +} +function doSearch(request, response) { + var result = []; + searchPattern = createSearchPattern(request.term); + fallbackPattern = createSearchPattern(request.term.toLowerCase()); + if (searchPattern === "") { + return this.close(); + } + var camelCaseMatcher = createMatcher(searchPattern, ""); + var fallbackMatcher = new RegExp(fallbackPattern, "i"); - function concatResults(a1, a2) { - a1 = a1.concat(a2); - a2.length = 0; - return a1; - } + function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { + if (indexArray) { + var newResults = []; + $.each(indexArray, function (i, item) { + item.category = category; + var ranking = rankMatch(matcher.exec(nameFunc(item)), category); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ranking: ranking, item: item}); + } + return newResults.length <= MAX_RESULTS; + }); + return newResults.sort(function(e1, e2) { + return e1.ranking - e2.ranking; + }).map(function(e) { + return e.item; + }); + } + return []; + } + function searchIndex(indexArray, category, nameFunc) { + var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); + result = result.concat(primaryResults); + if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { + var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); + result = result.concat(secondaryResults.filter(function (item) { + return primaryResults.indexOf(item) === -1; + })); + } + } - if (moduleSearchIndex) { - var mdleCount = 0; - $.each(moduleSearchIndex, function(index, item) { - item.category = catModules; - if (exactMatcher.test(item.l)) { - result.push(item); - mdleCount++; - } else if (camelCaseMatcher.test(item.l)) { - result.push(item); - } else if (secondaryMatcher.test(item.l)) { - secondaryresult.push(item); - } - }); - displayCount = mdleCount; - result = concatResults(result, secondaryresult); - } - if (packageSearchIndex) { - var pCount = 0; - var pkg = ""; - $.each(packageSearchIndex, function(index, item) { - item.category = catPackages; - pkg = (item.m) - ? (item.m + "/" + item.l) - : item.l; - if (exactMatcher.test(item.l)) { - presult.push(item); - pCount++; - } else if (camelCaseMatcher.test(pkg)) { - presult.push(item); - } else if (secondaryMatcher.test(pkg)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(presult, secondaryresult)); - displayCount = (pCount > displayCount) ? pCount : displayCount; - } - if (typeSearchIndex) { - var tCount = 0; - $.each(typeSearchIndex, function(index, item) { - item.category = catTypes; - var s = nestedName(item); - if (exactMatcher.test(s)) { - tresult.push(item); - tCount++; - } else if (camelCaseMatcher.test(s)) { - tresult.push(item); - } else if (secondaryMatcher.test(item.p + "." + item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(tresult, secondaryresult)); - displayCount = (tCount > displayCount) ? tCount : displayCount; - } - if (memberSearchIndex) { - var mCount = 0; - $.each(memberSearchIndex, function(index, item) { - item.category = catMembers; - var s = nestedName(item); - if (exactMatcher.test(s)) { - mresult.push(item); - mCount++; - } else if (camelCaseMatcher.test(s)) { - mresult.push(item); - } else if (secondaryMatcher.test(item.c + "." + item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(mresult, secondaryresult)); - displayCount = (mCount > displayCount) ? mCount : displayCount; - } - if (tagSearchIndex) { - var tgCount = 0; - $.each(tagSearchIndex, function(index, item) { - item.category = catSearchTags; - if (exactMatcher.test(item.l)) { - tgresult.push(item); - tgCount++; - } else if (secondaryMatcher.test(item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(tgresult, secondaryresult)); - displayCount = (tgCount > displayCount) ? tgCount : displayCount; - } - displayCount = (displayCount > 500) ? displayCount : 500; - var counter = function() { - var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; - var f = function(item) { - count[item.category] += 1; - return (count[item.category] <= displayCount); - }; - return f; - }(); - response(result.filter(counter)); - }, + searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); + searchIndex(packageSearchIndex, catPackages, function(item) { + return (item.m && request.term.indexOf("/") > -1) + ? (item.m + "/" + item.l) : item.l; + }); + searchIndex(typeSearchIndex, catTypes, function(item) { + return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; + }); + searchIndex(memberSearchIndex, catMembers, function(item) { + return request.term.indexOf(".") > -1 + ? item.p + "." + item.c + "." + item.l : item.l; + }); + searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); + + if (!indexFilesLoaded()) { + updateSearchResults = function() { + doSearch(request, response); + } + result.unshift(loading); + } else { + updateSearchResults = function() {}; + } + response(result); +} +$(function() { + $("#search-input").catcomplete({ + minLength: 1, + delay: 300, + source: doSearch, response: function(event, ui) { if (!ui.content.length) { ui.content.push(noResult); } else { - $("#search").empty(); + $("#search-input").empty(); } }, autoFocus: true, + focus: function(event, ui) { + return false; + }, position: { collision: "flip" }, select: function(event, ui) { - if (ui.item.l !== noResult.l) { + if (ui.item.category) { var url = getURLPrefix(ui); if (ui.item.category === catModules) { - if (useModuleDirectories) { - url += "module-summary.html"; - } else { - url = ui.item.l + "-summary.html"; - } + url += "module-summary.html"; } else if (ui.item.category === catPackages) { - if (ui.item.url) { - url = ui.item.url; + if (ui.item.u) { + url = ui.item.u; } else { - url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; } } else if (ui.item.category === catTypes) { - if (ui.item.url) { - url = ui.item.url; - } else if (ui.item.p === "") { + if (ui.item.u) { + url = ui.item.u; + } else if (ui.item.p === UNNAMED) { url += ui.item.l + ".html"; } else { url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; } } else if (ui.item.category === catMembers) { - if (ui.item.p === "") { + if (ui.item.p === UNNAMED) { url += ui.item.c + ".html" + "#"; } else { url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; } - if (ui.item.url) { - url += ui.item.url; + if (ui.item.u) { + url += ui.item.u; } else { url += ui.item.l; } @@ -319,7 +347,7 @@ $(function() { } else { window.location.href = pathtoroot + url; } - $("#search").focus(); + $("#search-input").focus(); } } }); diff --git a/docs/java/serialized-form.html b/docs/java/serialized-form.html new file mode 100644 index 00000000..7fbb9ad9 --- /dev/null +++ b/docs/java/serialized-form.html @@ -0,0 +1,139 @@ + + + + + + +Serialized Form (voyager 2.1.0 API) + + + + + + + + +
      + + + + + + + +
      + + +
      +

      Serialized Form

      +
      +
      + +
      + +
      + + + + + + + +
      + + +

      Copyright © 2024. All rights reserved.

      + + diff --git a/docs/java/stylesheet.css b/docs/java/stylesheet.css index de945eda..4a576bd2 100644 --- a/docs/java/stylesheet.css +++ b/docs/java/stylesheet.css @@ -1,4 +1,4 @@ -/* +/* * Javadoc style sheet */ @@ -40,13 +40,6 @@ a[href]:hover, a[href]:focus { a[name] { color:#353833; } -a[name]:before, a[name]:target, a[id]:before, a[id]:target { - content:""; - display:inline-block; - position:relative; - padding-top:129px; - margin-top:-129px; -} pre { font-family:'DejaVu Sans Mono', monospace; font-size:14px; @@ -59,22 +52,24 @@ h2 { } h3 { font-size:16px; - font-style:italic; } h4 { - font-size:13px; + font-size:15px; } h5 { - font-size:12px; + font-size:14px; } h6 { - font-size:11px; + font-size:13px; } ul { list-style-type:disc; } code, tt { font-family:'DejaVu Sans Mono', monospace; +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { font-size:14px; padding-top:4px; margin-top:8px; @@ -85,7 +80,7 @@ dt code { font-size:14px; padding-top:4px; } -table tr td dt code { +.summary-table dt code { font-family:'DejaVu Sans Mono', monospace; font-size:14px; vertical-align:top; @@ -94,7 +89,10 @@ table tr td dt code { sup { font-size:8px; } - +button { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size: 14px; +} /* * Styles for HTML generated by javadoc. * @@ -106,26 +104,19 @@ sup { */ .clear { clear:both; - height:0px; + height:0; overflow:hidden; } -.aboutLanguage { +.about-language { float:right; - padding:0px 21px; + padding:0 21px 8px 8px; font-size:11px; - z-index:200; margin-top:-9px; + height:2.9em; } -.legalCopy { +.legal-copy { margin-left:.5em; } -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color:#FFFFFF; - text-decoration:none; -} -.bar a:hover, .bar a:focus { - color:#bb7a2a; -} .tab { background-color:#0066FF; color:#ffffff; @@ -136,152 +127,124 @@ sup { /* * Styles for navigation bar. */ -.bar { - background-color:#4D7A97; - color:#FFFFFF; - padding:.8em .5em .4em .8em; - height:auto;/*height:1.8em;*/ - font-size:11px; - margin:0; -} -.navPadding { - padding-top: 107px; -} -.fixedNav { - position:fixed; - width:100%; - z-index:999; - background-color:#ffffff; -} -.topNav { +@media screen { + .flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + .flex-header { + flex: 0 0 auto; + } + .flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { background-color:#4D7A97; color:#FFFFFF; float:left; padding:0; width:100%; clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.bottomNav { - margin-top:10px; - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; + min-height:2.8em; padding-top:10px; overflow:hidden; font-size:12px; } -.subNav { +.sub-nav { background-color:#dee3e9; float:left; width:100%; overflow:hidden; font-size:12px; } -.subNav div { +.sub-nav div { clear:left; float:left; padding:0 0 5px 6px; text-transform:uppercase; } -ul.navList, ul.subNavList { +.sub-nav .nav-list { + padding-top:5px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { float:left; margin:0 25px 0 0; padding:0; } -ul.navList li{ +ul.nav-list li { list-style:none; float:left; padding: 5px 6px; text-transform:uppercase; } -ul.navListSearch { +.sub-nav .nav-list-search { float:right; margin:0 0 0 0; - padding:0; -} -ul.navListSearch li { - list-style:none; - float:right; - padding: 5px 6px; - text-transform:uppercase; + padding:5px 6px; + clear:none; } -ul.navListSearch li label { +.nav-list-search label { position:relative; right:-16px; } -ul.subNavList li { +ul.sub-nav-list li { list-style:none; float:left; + padding-top:10px; } -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { +.top-nav a:link, .top-nav a:active, .top-nav a:visited { color:#FFFFFF; text-decoration:none; text-transform:uppercase; } -.topNav a:hover, .bottomNav a:hover { +.top-nav a:hover { text-decoration:none; color:#bb7a2a; text-transform:uppercase; } -.navBarCell1Rev { +.nav-bar-cell1-rev { background-color:#F8981D; color:#253441; margin: auto 5px; } -.skipNav { +.skip-nav { position:absolute; top:auto; left:-9999px; overflow:hidden; } /* - * Styles for page header and footer. + * Hide navigation links and search box in print layout */ -.header, .footer { - clear:both; - margin:0 20px; - padding:5px 0 0 0; -} -.indexNav { - position:relative; - font-size:12px; - background-color:#dee3e9; -} -.indexNav ul { - margin-top:0; - padding:5px; -} -.indexNav ul li { - display:inline; - list-style-type:none; - padding-right:10px; - text-transform:uppercase; -} -.indexNav h1 { - font-size:13px; +@media print { + ul.nav-list, div.sub-nav { + display:none; + } } +/* + * Styles for page header and footer. + */ .title { color:#2c4557; margin:10px 0; } -.subTitle { +.sub-title { margin:5px 0 0 0; } .header ul { margin:0 0 15px 0; padding:0; } -.footer ul { - margin:20px 0 5px 0; -} .header ul li, .footer ul li { list-style:none; font-size:13px; @@ -289,69 +252,49 @@ ul.subNavList li { /* * Styles for headings. */ -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; } -ul.blockList ul.blockList ul.blockList li.blockList h3 { +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { background-color:#dee3e9; border:1px solid #d0d9e0; margin:0 0 6px -8px; padding:7px 5px; } -ul.blockList ul.blockList li.blockList h3 { - padding:0; - margin:15px 0; -} -ul.blockList li.blockList h2 { - padding:0px 0 20px 0; -} /* * Styles for page layout containers. */ -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, -.allClassesContainer, .allPackagesContainer { +main { clear:both; padding:10px 20px; position:relative; } -.indexContainer { - margin:10px; - position:relative; - font-size:12px; -} -.indexContainer h2 { - font-size:13px; - padding:0 0 3px 0; -} -.indexContainer ul { - margin:0; - padding:0; -} -.indexContainer ul li { - list-style:none; - padding-top:2px; -} -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { +dl.notes > dt { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; margin:10px 0 0 0; color:#4E4E4E; } -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin:5px 0 10px 0px; +dl.notes > dd { + margin:5px 10px 10px 0; font-size:14px; font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; } -.serializedFormContainer dl.nameValue dt { +dl.name-value > dt { margin-left:1px; font-size:1.1em; display:inline; font-weight:bold; } -.serializedFormContainer dl.nameValue dd { +dl.name-value > dd { margin:0 0 0 1px; font-size:1.1em; display:inline; @@ -366,70 +309,56 @@ ul.horizontal li { display:inline; font-size:0.9em; } -ul.inheritance { +div.inheritance { margin:0; padding:0; } -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; +div.inheritance div.inheritance { + margin-left:2em; } -ul.blockList, ul.blockListLast { +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { margin:10px 0 10px 0; padding:0; } -ul.blockList li.blockList, ul.blockListLast li.blockList { +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { list-style:none; margin-bottom:15px; line-height:1.4; } -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { - padding:0px 20px 5px 10px; - border:1px solid #ededed; - background-color:#f8f8f8; +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; } -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; +ul.see-list, ul.see-list-long { + padding-left: 0; + list-style: none; } -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left:0; - padding-left:0; - padding-bottom:15px; - border:none; +ul.see-list li { + display: inline; } -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style:none; - border-bottom:none; - padding-bottom:0; -} -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top:0; - margin-bottom:1px; +ul.see-list li:not(:last-child):after, +ul.see-list-long li:not(:last-child):after { + content: ", "; + white-space: pre-wrap; } /* * Styles for tables. */ -.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, -.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { +.summary-table, .details-table { width:100%; border-spacing:0; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; -} -.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { - padding:0px; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; + padding:0; } -.overviewSummary caption, .memberSummary caption, .typeSummary caption, -.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, -.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { +.caption { position:relative; text-align:left; background-repeat:no-repeat; @@ -437,38 +366,20 @@ table tr td dl, table tr td dl dt, table tr td dl dd { font-weight:bold; clear:none; overflow:hidden; - padding:0px; + padding:0; padding-top:10px; padding-left:1px; - margin:0px; + margin:0; white-space:pre; } -.constantsSummary caption a:link, .constantsSummary caption a:visited, -.useSummary caption a:link, .useSummary caption a:visited { +.caption a:link, .caption a:visited { color:#1f389c; } -.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, -.deprecatedSummary caption a:link, -.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, -.usesSummary caption a:link, -.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, -.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, -.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, -.usesSummary caption a:hover, -.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, -.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, -.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, -.usesSummary caption a:active, -.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, -.deprecatedSummary caption a:visited, -.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, -.usesSummary caption a:visited { +.caption a:hover, +.caption a:active { color:#FFFFFF; } -.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, -.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, -.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, -.usesSummary caption span { +.caption span { white-space:nowrap; padding-top:5px; padding-left:12px; @@ -480,168 +391,150 @@ table tr td dl, table tr td dl dt, table tr td dl dd { border: none; height:16px; } -.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, -.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#F8981D; - height:16px; -} -.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, -.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#4D7A97; - height:16px; -} -.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, -.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, -.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, -.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { - padding-top:0px; - padding-left:0px; - padding-right:0px; - background-image:none; - float:none; - display:inline; -} -.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, -.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, -.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { - display:none; - width:5px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, -.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, -.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - background-color:#4D7A97; - float:left; -} -.rowColor th, .altColor th { - font-weight:normal; +div.table-tabs { + padding:10px 0 0 1px; + margin:0; } -.overviewSummary td, .memberSummary td, .typeSummary td, -.useSummary td, .constantsSummary td, .deprecatedSummary td, -.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; +} +div.table-tabs > button.active-table-tab { + background: #F8981D; + color: #253441; +} +div.table-tabs > button.table-tab { + background: #4D7A97; + color: #FFFFFF; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +@media screen and (max-width: 800px) { + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-summary .col-last { + grid-column-end: span 2; + } +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +.summary-table > div, .details-table > div { text-align:left; - padding:0px 0px 12px 10px; + padding: 8px 3px 3px 7px; } -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, -.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, -.constantsSummary td { +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { vertical-align:top; - padding-right:0px; + padding-right:0; padding-top:8px; padding-bottom:3px; } -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, -.packagesSummary th { +.table-header { background:#dee3e9; - text-align:left; - padding:8px 3px 3px 7px; -} -td.colFirst, th.colFirst { - font-size:13px; + font-weight: bold; } -td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { +.col-first, .col-first { font-size:13px; } -.constantsSummary th, .packagesSummary th { +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { font-size:13px; } -.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, -.providesSummary td.colLast { - white-space:normal; - font-size:13px; -} -.overviewSummary td.colFirst, .overviewSummary th.colFirst, -.requiresSummary td.colFirst, .requiresSummary th.colFirst, -.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, -.usesSummary td.colFirst, .usesSummary th.colFirst, -.providesSummary td.colFirst, .providesSummary th.colFirst, -.memberSummary td.colFirst, .memberSummary th.colFirst, -.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, -.typeSummary td.colFirst, .typeSummary th.colFirst { +.col-first, .col-second, .col-constructor-name { vertical-align:top; + overflow: auto; } -.packagesSummary th.colLast, .packagesSummary td.colLast { +.col-last { white-space:normal; } -td.colFirst a:link, td.colFirst a:visited, -td.colSecond a:link, td.colSecond a:visited, -th.colFirst a:link, th.colFirst a:visited, -th.colSecond a:link, th.colSecond a:visited, -th.colConstructorName a:link, th.colConstructorName a:visited, -th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, -.constantValuesContainer td a:link, .constantValuesContainer td a:visited, -.allClassesContainer td a:link, .allClassesContainer td a:visited, -.allPackagesContainer td a:link, .allPackagesContainer td a:visited { +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited, +.constant-values-container a:link, .constant-values-container a:visited, +.all-classes-container a:link, .all-classes-container a:visited, +.all-packages-container a:link, .all-packages-container a:visited { font-weight:bold; } -.tableSubHeadingColor { +.table-sub-heading-color { background-color:#EEEEFF; } -.altColor, .altColor th { +.even-row-color, .even-row-color .table-header { background-color:#FFFFFF; } -.rowColor, .rowColor th { +.odd-row-color, .odd-row-color .table-header { background-color:#EEEEEF; } /* * Styles for contents. */ -.description pre { - margin-top:0; -} -.deprecatedContent { +.deprecated-content { margin:0; padding:10px 0; } -.docSummary { - padding:0; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - font-style:normal; -} div.block { font-size:14px; font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; } -td.colLast div { - padding-top:0px; +.col-last div { + padding-top:0; } -td.colLast a { +.col-last a { padding-bottom:3px; } +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} /* * Styles for formatting effect. */ -.sourceLineNo { +.source-line-no { color:green; padding:0 30px 0 0; } @@ -652,19 +545,18 @@ h1.hidden { } .block { display:block; - margin:3px 10px 2px 0px; + margin:0 10px 5px 0; color:#474747; } -.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, -.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, -.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, -.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { +.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { font-weight:bold; } -.deprecationComment, .emphasizedPhrase, .interfaceName { +.deprecation-comment, .help-footnote, .preview-comment { font-style:italic; } -.deprecationBlock { +.deprecation-block { font-size:14px; font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; border-style:solid; @@ -675,67 +567,19 @@ h1.hidden { margin-right:10px; display:inline-block; } -div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, -div.block div.block span.interfaceName { - font-style:normal; -} -div.contentContainer ul.blockList li.blockList h2 { - padding-bottom:0px; -} -/* - * Styles for IFRAME. - */ -.mainContainer { - margin:0 auto; - padding:0; - height:100%; - width:100%; - position:fixed; - top:0; - left:0; -} -.leftContainer { - height:100%; - position:fixed; - width:320px; -} -.leftTop { - position:relative; - float:left; - width:315px; - top:0; - left:0; - height:30%; - border-right:6px solid #ccc; - border-bottom:6px solid #ccc; -} -.leftBottom { - position:relative; - float:left; - width:315px; - bottom:0; - left:0; - height:70%; - border-right:6px solid #ccc; - border-top:1px solid #000; -} -.rightContainer { - position:absolute; - left:320px; - top:0; - bottom:0; - height:100%; - right:0; - border-left:1px solid #000; +.preview-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; } -.rightIframe { - margin:0; - padding:0; - height:100%; - right:30px; - width:100%; - overflow:visible; - margin-bottom:30px; +div.block div.deprecation-comment { + font-style:normal; } /* * Styles specific to HTML5 elements. @@ -753,7 +597,7 @@ main, nav, header, footer, section { background-color:#4D7A97; color:#FFFFFF; } -.resultItem { +.result-item { font-size:13px; } .ui-autocomplete { @@ -774,13 +618,13 @@ ul.ui-autocomplete li { clear:both; width:100%; } -.resultHighlight { +.result-highlight { font-weight:bold; } .ui-autocomplete .result-item { font-size: inherit; } -#search { +#search-input { background-image:url('resources/glass.png'); background-size:13px; background-repeat:no-repeat; @@ -788,8 +632,9 @@ ul.ui-autocomplete li { padding-left:20px; position:relative; right:-18px; + width:400px; } -#reset { +#reset-button { background-color: rgb(255,255,255); background-image:url('resources/x.png'); background-position:center; @@ -797,7 +642,7 @@ ul.ui-autocomplete li { background-size:12px; border:0 none; width:16px; - height:17px; + height:16px; position:relative; left:-4px; top:-4px; @@ -806,28 +651,85 @@ ul.ui-autocomplete li { .watermark { color:#545454; } -.searchTagDescResult { +.search-tag-desc-result { font-style:italic; font-size:11px; } -.searchTagHolderResult { +.search-tag-holder-result { font-style:italic; font-size:12px; } -.searchTagResult:before, .searchTagResult:target { - color:red; +.search-tag-result:target { + background-color:yellow; } -.moduleGraph span { +.module-graph span { display:none; position:absolute; } -.moduleGraph:hover span { +.module-graph:hover span { display:block; margin: -100px 0 0 100px; z-index: 1; } -.methodSignature { - white-space:normal; +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0px 20px 5px 10px; + border: 1px solid #ededed; + background-color: #f8f8f8; +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +span.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); } /* @@ -908,3 +810,60 @@ table.striped > tbody > tr > th, table.striped > tbody > tr > td { table.striped > tbody > tr > th { font-weight: normal; } +/** + * Tweak font sizes and paddings for small screens. + */ +@media screen and (max-width: 1050px) { + #search-input { + width: 300px; + } +} +@media screen and (max-width: 800px) { + #search-input { + width: 200px; + } + .top-nav, + .bottom-nav { + font-size: 11px; + padding-top: 6px; + } + .sub-nav { + font-size: 11px; + } + .about-language { + padding-right: 16px; + } + ul.nav-list li, + .sub-nav .nav-list-search { + padding: 6px; + } + ul.sub-nav-list li { + padding-top: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 500px) { + #search-input { + width: 150px; + } + .top-nav, + .bottom-nav { + font-size: 10px; + } + .sub-nav { + font-size: 10px; + } + .about-language { + font-size: 10px; + padding-right: 12px; + } +} diff --git a/docs/java/tag-search-index.js b/docs/java/tag-search-index.js index 0367dae6..f38b3cb3 100644 --- a/docs/java/tag-search-index.js +++ b/docs/java/tag-search-index.js @@ -1 +1 @@ -tagSearchIndex = [];updateSearchResults(); \ No newline at end of file +tagSearchIndex = [{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/type-search-index.js b/docs/java/type-search-index.js index 373d08da..6822b52e 100644 --- a/docs/java/type-search-index.js +++ b/docs/java/type-search-index.js @@ -1 +1 @@ -typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"com.spotify.voyager.jni","l":"Index"},{"p":"com.spotify.voyager.jni.utils","l":"JniLibExtractor"},{"p":"com.spotify.voyager.jni","l":"Index.QueryResults"},{"p":"com.spotify.voyager.jni","l":"StringIndex.QueryResults"},{"p":"com.spotify.voyager.jni","l":"Index.SpaceType"},{"p":"com.spotify.voyager.jni","l":"Index.StorageDataType"},{"p":"com.spotify.voyager.jni","l":"StringIndex"},{"p":"com.spotify.voyager.jni.utils","l":"TinyJson"}] \ No newline at end of file +typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.spotify.voyager.jni","l":"Index"},{"p":"com.spotify.voyager.jni.utils","l":"JniLibExtractor"},{"p":"com.spotify.voyager.jni","l":"Index.QueryResults"},{"p":"com.spotify.voyager.jni","l":"StringIndex.QueryResults"},{"p":"com.spotify.voyager.jni.exception","l":"RecallException"},{"p":"com.spotify.voyager.jni","l":"Index.SpaceType"},{"p":"com.spotify.voyager.jni","l":"Index.StorageDataType"},{"p":"com.spotify.voyager.jni","l":"StringIndex"},{"p":"com.spotify.voyager.jni.utils","l":"TinyJson"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/java/type-search-index.zip b/docs/java/type-search-index.zip deleted file mode 100644 index 02950ebd..00000000 Binary files a/docs/java/type-search-index.zip and /dev/null differ diff --git a/java/pom.xml b/java/pom.xml index d206210c..f8eafd54 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -176,6 +176,7 @@ org.apache.maven.plugins maven-javadoc-plugin + 3.7.0 8 ../docs/java