From 1385a3cefc7312a3f18e8d78a854411b53c75e67 Mon Sep 17 00:00:00 2001 From: Ken Date: Wed, 1 Nov 2017 13:27:17 -0400 Subject: Initial commit of the new logs. --- build/doctrees/authorization/authorization.doctree | Bin 0 -> 9238 bytes build/doctrees/changelog/changelog.doctree | Bin 0 -> 3654 bytes .../doctrees/community_sdks/community_sdks.doctree | Bin 0 -> 12378 bytes build/doctrees/datacenters/datacenters.doctree | Bin 0 -> 4488 bytes build/doctrees/environment.pickle | Bin 0 -> 31987 bytes build/doctrees/errors/errors.doctree | Bin 0 -> 13251 bytes build/doctrees/index.doctree | Bin 0 -> 3392 bytes build/doctrees/introduction.doctree | Bin 0 -> 7125 bytes build/doctrees/links/links.doctree | Bin 0 -> 9227 bytes .../doctrees/makingrequests/makingrequests.doctree | Bin 0 -> 30657 bytes .../match_data_summary/match_data_summary.doctree | Bin 0 -> 22015 bytes build/doctrees/matches/matches.doctree | Bin 0 -> 33598 bytes build/doctrees/players/players.doctree | Bin 0 -> 12956 bytes .../receivingresponses/receivingresponses.doctree | Bin 0 -> 13348 bytes build/doctrees/samples/samples.doctree | Bin 0 -> 14042 bytes build/doctrees/teams/teams.doctree | Bin 0 -> 10567 bytes build/doctrees/telemetry/telemetry.doctree | Bin 0 -> 28402 bytes build/doctrees/titles/titles.doctree | Bin 0 -> 3963 bytes build/html/.DS_Store | Bin 0 -> 6148 bytes build/html/.buildinfo | 4 + .../_sources/authorization/authorization.rst.txt | 73 + build/html/_sources/changelog/changelog.rst.txt | 7 + .../_sources/community_sdks/community_sdks.rst.txt | 46 + .../html/_sources/datacenters/datacenters.rst.txt | 9 + build/html/_sources/errors/errors.rst.txt | 32 + build/html/_sources/index.rst.txt | 22 + build/html/_sources/introduction.rst.txt | 23 + build/html/_sources/links/links.rst.txt | 69 + .../_sources/makingrequests/makingrequests.rst.txt | 190 + .../match_data_summary/match_data_summary.rst.txt | 54 + build/html/_sources/matches/matches.rst.txt | 348 + build/html/_sources/players/players.rst.txt | 105 + .../receivingresponses/receivingresponses.rst.txt | 77 + build/html/_sources/samples/samples.rst.txt | 88 + build/html/_sources/teams/teams.rst.txt | 73 + build/html/_sources/telemetry/telemetry.rst.txt | 204 + build/html/_sources/titles/titles.rst.txt | 9 + build/html/_static/.DS_Store | Bin 0 -> 6148 bytes build/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes build/html/_static/basic.css | 643 ++ build/html/_static/better.css | 314 + build/html/_static/better_basic.css | 455 + build/html/_static/comment-bright.png | Bin 0 -> 756 bytes build/html/_static/comment-close.png | Bin 0 -> 829 bytes build/html/_static/comment.png | Bin 0 -> 641 bytes build/html/_static/css/vainglory.css | 587 ++ build/html/_static/doctools.js | 311 + build/html/_static/down-pressed.png | Bin 0 -> 222 bytes build/html/_static/down.png | Bin 0 -> 202 bytes build/html/_static/file.png | Bin 0 -> 286 bytes build/html/_static/images/logo.png | Bin 0 -> 12145 bytes build/html/_static/images/vainglory.ico | Bin 0 -> 1519 bytes build/html/_static/images/vainglory/btn-1.png | Bin 0 -> 3227 bytes build/html/_static/images/vainglory/main-bg.jpg | Bin 0 -> 30740 bytes build/html/_static/jquery-3.1.0.js | 10074 +++++++++++++++++++ build/html/_static/jquery.js | 4 + build/html/_static/minus.png | Bin 0 -> 90 bytes build/html/_static/plus.png | Bin 0 -> 90 bytes build/html/_static/pygments.css | 70 + build/html/_static/searchtools.js | 761 ++ build/html/_static/underscore-1.3.1.js | 999 ++ build/html/_static/underscore.js | 31 + build/html/_static/up-pressed.png | Bin 0 -> 214 bytes build/html/_static/up.png | Bin 0 -> 203 bytes build/html/_static/websupport.js | 808 ++ build/html/authorization/authorization.html | 184 + build/html/changelog/changelog.html | 122 + build/html/community_sdks/community_sdks.html | 163 + build/html/datacenters/datacenters.html | 132 + build/html/errors/errors.html | 184 + build/html/genindex.html | 113 + build/html/index.html | 202 + build/html/introduction.html | 143 + build/html/links/links.html | 182 + build/html/makingrequests/makingrequests.html | 267 + .../match_data_summary/match_data_summary.html | 263 + build/html/matches/matches.html | 483 + build/html/objects.inv | Bin 0 -> 642 bytes build/html/players/players.html | 213 + .../receivingresponses/receivingresponses.html | 191 + build/html/samples/samples.html | 230 + build/html/search.html | 136 + build/html/searchindex.js | 1 + build/html/teams/teams.html | 189 + build/html/telemetry/telemetry.html | 304 + build/html/titles/titles.html | 132 + 86 files changed, 20324 insertions(+) create mode 100644 build/doctrees/authorization/authorization.doctree create mode 100644 build/doctrees/changelog/changelog.doctree create mode 100644 build/doctrees/community_sdks/community_sdks.doctree create mode 100644 build/doctrees/datacenters/datacenters.doctree create mode 100644 build/doctrees/environment.pickle create mode 100644 build/doctrees/errors/errors.doctree create mode 100644 build/doctrees/index.doctree create mode 100644 build/doctrees/introduction.doctree create mode 100644 build/doctrees/links/links.doctree create mode 100644 build/doctrees/makingrequests/makingrequests.doctree create mode 100644 build/doctrees/match_data_summary/match_data_summary.doctree create mode 100644 build/doctrees/matches/matches.doctree create mode 100644 build/doctrees/players/players.doctree create mode 100644 build/doctrees/receivingresponses/receivingresponses.doctree create mode 100644 build/doctrees/samples/samples.doctree create mode 100644 build/doctrees/teams/teams.doctree create mode 100644 build/doctrees/telemetry/telemetry.doctree create mode 100644 build/doctrees/titles/titles.doctree create mode 100644 build/html/.DS_Store create mode 100644 build/html/.buildinfo create mode 100644 build/html/_sources/authorization/authorization.rst.txt create mode 100644 build/html/_sources/changelog/changelog.rst.txt create mode 100644 build/html/_sources/community_sdks/community_sdks.rst.txt create mode 100644 build/html/_sources/datacenters/datacenters.rst.txt create mode 100644 build/html/_sources/errors/errors.rst.txt create mode 100644 build/html/_sources/index.rst.txt create mode 100644 build/html/_sources/introduction.rst.txt create mode 100644 build/html/_sources/links/links.rst.txt create mode 100644 build/html/_sources/makingrequests/makingrequests.rst.txt create mode 100644 build/html/_sources/match_data_summary/match_data_summary.rst.txt create mode 100644 build/html/_sources/matches/matches.rst.txt create mode 100644 build/html/_sources/players/players.rst.txt create mode 100644 build/html/_sources/receivingresponses/receivingresponses.rst.txt create mode 100644 build/html/_sources/samples/samples.rst.txt create mode 100644 build/html/_sources/teams/teams.rst.txt create mode 100644 build/html/_sources/telemetry/telemetry.rst.txt create mode 100644 build/html/_sources/titles/titles.rst.txt create mode 100644 build/html/_static/.DS_Store create mode 100644 build/html/_static/ajax-loader.gif create mode 100644 build/html/_static/basic.css create mode 100644 build/html/_static/better.css create mode 100644 build/html/_static/better_basic.css create mode 100644 build/html/_static/comment-bright.png create mode 100644 build/html/_static/comment-close.png create mode 100644 build/html/_static/comment.png create mode 100644 build/html/_static/css/vainglory.css create mode 100644 build/html/_static/doctools.js create mode 100644 build/html/_static/down-pressed.png create mode 100644 build/html/_static/down.png create mode 100644 build/html/_static/file.png create mode 100644 build/html/_static/images/logo.png create mode 100644 build/html/_static/images/vainglory.ico create mode 100644 build/html/_static/images/vainglory/btn-1.png create mode 100644 build/html/_static/images/vainglory/main-bg.jpg create mode 100644 build/html/_static/jquery-3.1.0.js create mode 100644 build/html/_static/jquery.js create mode 100644 build/html/_static/minus.png create mode 100644 build/html/_static/plus.png create mode 100644 build/html/_static/pygments.css create mode 100644 build/html/_static/searchtools.js create mode 100644 build/html/_static/underscore-1.3.1.js create mode 100644 build/html/_static/underscore.js create mode 100644 build/html/_static/up-pressed.png create mode 100644 build/html/_static/up.png create mode 100644 build/html/_static/websupport.js create mode 100644 build/html/authorization/authorization.html create mode 100644 build/html/changelog/changelog.html create mode 100644 build/html/community_sdks/community_sdks.html create mode 100644 build/html/datacenters/datacenters.html create mode 100644 build/html/errors/errors.html create mode 100644 build/html/genindex.html create mode 100644 build/html/index.html create mode 100644 build/html/introduction.html create mode 100644 build/html/links/links.html create mode 100644 build/html/makingrequests/makingrequests.html create mode 100644 build/html/match_data_summary/match_data_summary.html create mode 100644 build/html/matches/matches.html create mode 100644 build/html/objects.inv create mode 100644 build/html/players/players.html create mode 100644 build/html/receivingresponses/receivingresponses.html create mode 100644 build/html/samples/samples.html create mode 100644 build/html/search.html create mode 100644 build/html/searchindex.js create mode 100644 build/html/teams/teams.html create mode 100644 build/html/telemetry/telemetry.html create mode 100644 build/html/titles/titles.html (limited to 'build') diff --git a/build/doctrees/authorization/authorization.doctree b/build/doctrees/authorization/authorization.doctree new file mode 100644 index 0000000..b4c8769 Binary files /dev/null and b/build/doctrees/authorization/authorization.doctree differ diff --git a/build/doctrees/changelog/changelog.doctree b/build/doctrees/changelog/changelog.doctree new file mode 100644 index 0000000..228c4de Binary files /dev/null and b/build/doctrees/changelog/changelog.doctree differ diff --git a/build/doctrees/community_sdks/community_sdks.doctree b/build/doctrees/community_sdks/community_sdks.doctree new file mode 100644 index 0000000..074cf17 Binary files /dev/null and b/build/doctrees/community_sdks/community_sdks.doctree differ diff --git a/build/doctrees/datacenters/datacenters.doctree b/build/doctrees/datacenters/datacenters.doctree new file mode 100644 index 0000000..5e037e5 Binary files /dev/null and b/build/doctrees/datacenters/datacenters.doctree differ diff --git a/build/doctrees/environment.pickle b/build/doctrees/environment.pickle new file mode 100644 index 0000000..b4e5820 Binary files /dev/null and b/build/doctrees/environment.pickle differ diff --git a/build/doctrees/errors/errors.doctree b/build/doctrees/errors/errors.doctree new file mode 100644 index 0000000..15fce2b Binary files /dev/null and b/build/doctrees/errors/errors.doctree differ diff --git a/build/doctrees/index.doctree b/build/doctrees/index.doctree new file mode 100644 index 0000000..b3a6b60 Binary files /dev/null and b/build/doctrees/index.doctree differ diff --git a/build/doctrees/introduction.doctree b/build/doctrees/introduction.doctree new file mode 100644 index 0000000..fc664d2 Binary files /dev/null and b/build/doctrees/introduction.doctree differ diff --git a/build/doctrees/links/links.doctree b/build/doctrees/links/links.doctree new file mode 100644 index 0000000..a49e8c3 Binary files /dev/null and b/build/doctrees/links/links.doctree differ diff --git a/build/doctrees/makingrequests/makingrequests.doctree b/build/doctrees/makingrequests/makingrequests.doctree new file mode 100644 index 0000000..bc22007 Binary files /dev/null and b/build/doctrees/makingrequests/makingrequests.doctree differ diff --git a/build/doctrees/match_data_summary/match_data_summary.doctree b/build/doctrees/match_data_summary/match_data_summary.doctree new file mode 100644 index 0000000..fa6c3e4 Binary files /dev/null and b/build/doctrees/match_data_summary/match_data_summary.doctree differ diff --git a/build/doctrees/matches/matches.doctree b/build/doctrees/matches/matches.doctree new file mode 100644 index 0000000..18b89c9 Binary files /dev/null and b/build/doctrees/matches/matches.doctree differ diff --git a/build/doctrees/players/players.doctree b/build/doctrees/players/players.doctree new file mode 100644 index 0000000..dfd82cd Binary files /dev/null and b/build/doctrees/players/players.doctree differ diff --git a/build/doctrees/receivingresponses/receivingresponses.doctree b/build/doctrees/receivingresponses/receivingresponses.doctree new file mode 100644 index 0000000..2c2d6a9 Binary files /dev/null and b/build/doctrees/receivingresponses/receivingresponses.doctree differ diff --git a/build/doctrees/samples/samples.doctree b/build/doctrees/samples/samples.doctree new file mode 100644 index 0000000..cd44c0e Binary files /dev/null and b/build/doctrees/samples/samples.doctree differ diff --git a/build/doctrees/teams/teams.doctree b/build/doctrees/teams/teams.doctree new file mode 100644 index 0000000..aaeee28 Binary files /dev/null and b/build/doctrees/teams/teams.doctree differ diff --git a/build/doctrees/telemetry/telemetry.doctree b/build/doctrees/telemetry/telemetry.doctree new file mode 100644 index 0000000..d681b1a Binary files /dev/null and b/build/doctrees/telemetry/telemetry.doctree differ diff --git a/build/doctrees/titles/titles.doctree b/build/doctrees/titles/titles.doctree new file mode 100644 index 0000000..d5113c0 Binary files /dev/null and b/build/doctrees/titles/titles.doctree differ diff --git a/build/html/.DS_Store b/build/html/.DS_Store new file mode 100644 index 0000000..0a09b3f Binary files /dev/null and b/build/html/.DS_Store differ diff --git a/build/html/.buildinfo b/build/html/.buildinfo new file mode 100644 index 0000000..e2758a3 --- /dev/null +++ b/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ce1c5311933e7a77e3221da2255fa6fd +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/build/html/_sources/authorization/authorization.rst.txt b/build/html/_sources/authorization/authorization.rst.txt new file mode 100644 index 0000000..c61e51f --- /dev/null +++ b/build/html/_sources/authorization/authorization.rst.txt @@ -0,0 +1,73 @@ +.. _authorization: + +Authorization +============= + +We require a JSON Web Token `JWT `_. be sent along with your request via the Authorization header. +JWTs are passed as bearer tokens in the Authorization header, and look like the following: + +Authorization: + +There's no need to create JWTs manually, they will be created for you when you register for the API - `Register Here! `_. In some cases an X-API-KEY will give you more access to information, and in all cases it means that you are operating under a per-token rate limit. + +To specify the Headers, use this code: + +**Shell** + + +.. code-block:: shell + + //Shell + + # With shell, you can just pass the correct header with each request + curl "" \ + -H "Authorization: " + -H "Accept: application/vnd.api+json" + + +.. code-block:: java + + //Java + + import java.io.*; + import java.net.*; + + URL url = new URL(""); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Authorization",""); + conn.setRequestProperty("Accept", "application/vnd.api+json"); + + conn.getInputStream() + + +.. code-block:: python + + //Python + + import requests + + url = "" + + header = { + "Authorization": "", + "Accept": "application/vnd.api+json" + } + + r = requests.get(url, headers=header) + + +.. code-block:: go + + //Go + + import "net/http" + + client := &http.Client{} + req, _ := http.NewRequest("GET","",nil) + req.Header.Set("Authorization", "") + req.Header.Set("Accept", "application/vnd.api+json") + res, _ := client.Do(req) + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/changelog/changelog.rst.txt b/build/html/_sources/changelog/changelog.rst.txt new file mode 100644 index 0000000..0098633 --- /dev/null +++ b/build/html/_sources/changelog/changelog.rst.txt @@ -0,0 +1,7 @@ +.. _changelog: + +Changelog +========== + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/community_sdks/community_sdks.rst.txt b/build/html/_sources/community_sdks/community_sdks.rst.txt new file mode 100644 index 0000000..07d89d9 --- /dev/null +++ b/build/html/_sources/community_sdks/community_sdks.rst.txt @@ -0,0 +1,46 @@ +.. _community_sdks: + +Community SDKs +=============== + +Community contributions are welcome and rewarded with good karma (and swag!) If you are currently working on an API, let us know on the Discord server and we will add a link! + +Java +--------------------------- + +A Java adaptation of the Vainglory API - `DominicGunn/flicker `_. + + +Python +--------------------------- + +Python 3 wrapper for the Gamelocker API - `schneefux/python-gamelocker `_. +Python 3 wrapper for the Gamelocker API - `ClarkThyLord/madglory-ezl `_. + + +JavaScript +--------------------------- + +A JavaScript API client - `seripap/vainglory `_. + + +R +--------------------------- + +A project providing R6 classes (for the R language) for accessing the API - `madglory/vainglory-go-client `_. + + +Go +--------------------------- + +A proof of concept go client for the Vainglory Developer API - `madglory/vainglory-go-client `_. + + +Ruby +--------------------------- + +A Ruby gem wrapper for the Vainglory Developer API - `Ruby Gem `_. || `Github `_. + + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/datacenters/datacenters.rst.txt b/build/html/_sources/datacenters/datacenters.rst.txt new file mode 100644 index 0000000..7855cfc --- /dev/null +++ b/build/html/_sources/datacenters/datacenters.rst.txt @@ -0,0 +1,9 @@ +.. _datacenters: + +Datacenters +=========== + +We operate several Datacenters around the world. Each datacenter holds all information for one or more Regions of the game. Currently all data is located in DC01, but this may change in the future. Users will be notified prior to the change and an API endpoint will be made available to provide metadata describing where each regions data can be found. + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/errors/errors.rst.txt b/build/html/_sources/errors/errors.rst.txt new file mode 100644 index 0000000..ee45b56 --- /dev/null +++ b/build/html/_sources/errors/errors.rst.txt @@ -0,0 +1,32 @@ +.. _errors: + +Errors +======= + +The server will stop processing if a problem is encountered and return the correct HTTP error status code. Errors may additionally include error objects, which are returned as an array keyed by errors in the top level of a JSON API document. + +An error objects have the following members: + +* ``title:`` (Required) the HTTP status code applicable to this problem, expressed as a string value. +* ``description:`` (Optional) a short summary of the problem + +The Server uses the following error codes: + +=========================== =================================================================================================================== +Error Code Meaning +=========================== =================================================================================================================== +400 Bad Request -- Your request sucks +401 Unauthorized -- Your API key is wrong +403 Forbidden -- The object requested is hidden for administrators only +404 Not Found -- The specified object could not be found +405 Method Not Allowed -- You tried to access a object with an invalid method +406 Not Acceptable -- You requested a format that isn't JSON +410 Gone -- The object requested has been removed from our servers +418 I'm a teapot +429 Too Many Requests -- You're requesting too much data! Slow down! +500 Internal Server Error -- We had a problem with our server. Try again later. +503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later. +=========================== =================================================================================================================== + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/index.rst.txt b/build/html/_sources/index.rst.txt new file mode 100644 index 0000000..bbab77e --- /dev/null +++ b/build/html/_sources/index.rst.txt @@ -0,0 +1,22 @@ +Gamelocker Documentation +================================= + +.. toctree:: + :maxdepth: 2 + + introduction + datacenters/datacenters + authorization/authorization + titles/titles + makingrequests/makingrequests + receivingresponses/receivingresponses + matches/matches + match_data_summary/match_data_summary + players/players + samples/samples + telemetry/telemetry + teams/teams + links/links + community_sdks/community_sdks + errors/errors + changelog/changelog diff --git a/build/html/_sources/introduction.rst.txt b/build/html/_sources/introduction.rst.txt new file mode 100644 index 0000000..b8904cc --- /dev/null +++ b/build/html/_sources/introduction.rst.txt @@ -0,0 +1,23 @@ +Introduction +============ + +The first version of the Vainglory Game Data Service is an exciting step forward towards making it easier for users to have open access to in-game data. + +Build something great! + +At the moment this Service is in Alpha Preview mode. You can see sample data, test the interface, and provide feedback to our development team. + +While we initially took a different approach, based on community feedback the Server now makes every attempt to implement the required features of the `JSON-API `_. specification. + +We show example language bindings using CURL and plan to add libraries for Ruby, NodeJS, Java, Python and more. Community contributions are welcome and rewarded with good karma (and swag!) You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right. + + +Versioning +--------------------------- + +We following `SEMVER `_. standards, using a MAJOR.MINOR.PATCH versioning scheme. This means that we will increment versioning in the following way: + +MAJOR version when we make incompatible API changes, +MINOR version when we add functionality in a backwards-compatible manner, +PATCH version when we make backwards-compatible bug fixes. +You can see the current version and deploy date by viewing the Status endpoint. diff --git a/build/html/_sources/links/links.rst.txt b/build/html/_sources/links/links.rst.txt new file mode 100644 index 0000000..5e0dc4e --- /dev/null +++ b/build/html/_sources/links/links.rst.txt @@ -0,0 +1,69 @@ +.. _links: + +Links +====== + +Get a Link +--------------------------- + +This endpoint checks to see if a link object exists for a given code. + +**HTTP Request:** + +| ``GET https://api.dc01.gamelockerapp.com/link`` + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/link/{id}" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + + +Post a Link +--------------------------- + +This endpoint creates a PlayerLink object if the verification code matches the one provided by the game. + +**HTTP Request:** + +| ``POST https://api.dc01.gamelockerapp.com/link/{player_id}`` + + +**Query Parameters:** + +| ``Parameter: Code`` +| + +**Shell:** + +.. code-block:: shell + + curl -XPOST "https://api.dc01.gamelockerapp.com/shards/na/link/{player_id}" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + + + +Player Link +--------------------------- + +**Shell:** + +.. code-block:: shell + + { + "attributes": { + "playerId": "fb374a7b-78be-4fcc-83ed-6a532a8a6f55", + "shardId": "na", + "titleId": "semc-vainglory" + }, + "id": "2454e5ac-0a69-4468-ad12-8616f066e817", + "type": "playerLink" + } + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/makingrequests/makingrequests.rst.txt b/build/html/_sources/makingrequests/makingrequests.rst.txt new file mode 100644 index 0000000..d628fec --- /dev/null +++ b/build/html/_sources/makingrequests/makingrequests.rst.txt @@ -0,0 +1,190 @@ +.. _makingrequests: + +Making Requests +=============== + +Content Negotiation +--------------------------- + +Content Negotiation +Clients using the api should specify that they accept responses using the ``application/vnd.api+json`` format, for convenience we will also accept ``application/json`` since it is the default for many popular client libraries. + +The Server will respond with a ``Content-Type`` header that mirrors the format requested by the Client. + +Regions +--------------------------- + +The Vainglory Game Data Service currently supports the following regions: + +*General Region Shards:* To find data regarding live servers, where all data is found, please use the following shards. + +* **North America:** ``na`` +* **Europe:** ``eu`` +* **South America:** ``sa`` +* **East Asia:** ``ea`` +* **Southeast Asia (SEA):** ``sa`` + +*Tournament Region Shards:* To find data regarding professional eSport, which take place on the private client only, please use the following shards. + +* **North America Tournaments:** ``tournament-na`` +* **Europe Tournaments:** ``tournament-eu`` +* **South America Tournaments:** ``tournament-sa`` +* **East Asia Tournaments:** ``tournament-ea`` +* **Southeast Asia Tournaments:** ``tournament-sg`` + +*Please note: Choosing a specific region is currently required* + +**Javascript:** + +.. code-block:: javascript + + To specify a region, use this code: + + "...gamelockerapp.com/shards//..." + + + +GZIP +--------------------------- + +Clients can specify the header ``Accept-Encoding: gzip`` and the server will compress responses. +Responses will be returns with ``Content-Encoding: gzip``. + +Given the size of matches, this can have significant performance benefits. + +**Shell:** + +.. code-block:: javascript + + + To specify the header Accept-Encoding, use this code: + + -H "Accept-Encoding: gzip" + + +**Java:** + +.. code-block:: java + + + To specify the header Accept-Encoding, use this code: + + conn.setRequestProperty("Accept-Encoding","gzip"); + + +**Python:** + +.. code-block:: python + + + To specify the header Accept-Encoding, use this code: + + header = {"Accept-Encoding":"gzip"} + + +**Go:** + +.. code-block:: go + + + To specify the header Accept-Encoding, use this code: + + req.Header.Set("Accept-Encoding", "gzip") + + + +Pagination +--------------------------- + +Where applicable, the server allows requests to limit the number of results returned via pagination. To paginate the primary data, supply pagination information to the query portion of the request using the limit and offset parameters. To fetch items 2 through 10 you would specify a limit of 8 and an offset of 2: + +If not specified, the server will default for matches to ``limit=5`` and ``offset=0``, and for players/samples to ``limit=50`` and ``offset=0`` + + *Important - Currently the server will not allow responses with over 50 primary data objects* + + + +Search Time +--------------------------- + + +**Defaults:** + +* Data retention period: 120 days. +* The max search time span between createdAt-start and createdAt-end: 28 days. +* If you don't specify createdAt-start, the default is now - 28 days. +* If you don't specify createdAt-end, the default is now. +* If you search for a time > now, the default is now. +* If you search for a time before the retention period, the default is the retention period (now - 120 days). +* If createdAt-start >= createdAt-end, you will receive an error. + + +Sorting +--------------------------- + +The default sort order is always ascending. Ascending corresponds to the standard order of numbers and letters, i.e. A to Z, 0 to 9). For dates and times, ascending means that earlier values precede later ones e.g. 1/1/2000 will sort ahead of 1/1/2001. + +All resource collections have a default sort order. In addition, some resources provide the ability to sort according to one or more criteria ("sort fields"). + +If sort fields are is prefixed with a minus, the order will be changed to descending. + +**Javascript** + +.. code-block:: javascript + + + //The example below will return the oldest articles first: + ".../matches?sort=createdAt" + + //The example below will return the newest articles first: + ".../matches?sort=-createdAt" + + + +JSON-P Callbacks +--------------------------- + +You can send a ``?callback`` parameter to any GET call to have the results wrapped in a JSON function. This is typically used when browsers want to embed content in web pages by getting around cross domain issues. The response includes the same data output as the regular API, plus the relevant HTTP Header information. + +**Shell:** + +.. code-block:: shell + + curl -g "https://api.dc01.gamelockerapp.com/status?callback=foo" + + + + +Cross Origin Resource Sharing +----------------------------- + +This is what the CORS preflight request looks like. The API supports Cross Origin Resource Sharing (CORS) for AJAX requests from any origin. You can read the CORS W3C Recommendation, or this intro from the HTML 5 Security Guide. + +Here's a sample request sent from a browser hitting http://example.com: + +**Shell:** + +.. code-block:: shell + + + curl -i https://api.dc01.gamelockerapp.com/status -H "Origin: http://example.com" + HTTP/1.1 200 OK + ... + Access-Control-Allow-Origin: * + Access-Control-Expose-Headers: Content-Length + + This is what the CORS preflight request looks like: + + curl -i https://api.dc01.gamelockerapp.com/status -H "Origin: http://example.com" -X OPTIONS + HTTP/1.1 200 OK + ... + Access-Control-Allow-Headers: Origin,X-Title-Id,Authorization + Access-Control-Allow-Methods: GET,POST,OPTIONS + Access-Control-Allow-Origin: * + Access-Control-Max-Age: 86400 + + + + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/match_data_summary/match_data_summary.rst.txt b/build/html/_sources/match_data_summary/match_data_summary.rst.txt new file mode 100644 index 0000000..9bb965b --- /dev/null +++ b/build/html/_sources/match_data_summary/match_data_summary.rst.txt @@ -0,0 +1,54 @@ +.. _match_data_summary: + +Match Data Summary +================== + +Special thanks to Kashz for helping to create this! GitHub: iAm-Kashif + +Match Object +--------------------------- + +================= ============== =========================== +Variable Type Description +================= ============== =========================== +Type str Match +ID str Match ID +createdAt str (iso8601) Time of Match Played +duration int Time of match in seconds +gameMode str Game Mode +patchVersion str Version of API +shardID str Match Shard +stats map See Match.stats +assets obj See Match.assets +rosters obj See Rosters +================= ============== =========================== + + +**Match.stats (End of game statistics)** + +================= ============== =========================== +Variable Type Description +================= ============== =========================== +endGameReason str "Victory" or "Defeat" +queue str Game Mode +================= ============== =========================== + + +**Match.assets (Telemetry Data)** + +================= ============== =========================== +Variable Type Description +================= ============== =========================== +Type string asset +createdAt str (iso8601) Time of Telemtry creation +description str " " +filename str telemetry.json +id str ID of Asset +contentType str application/json +name map telemetry +url obj Link to Telemetry.json file +================= ============== =========================== + + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/matches/matches.rst.txt b/build/html/_sources/matches/matches.rst.txt new file mode 100644 index 0000000..ef71a91 --- /dev/null +++ b/build/html/_sources/matches/matches.rst.txt @@ -0,0 +1,348 @@ +.. _matches: + +Matches +======= + +Matches records are created every time players complete a game session. Each Match contains high level information about the game session, including info like duration, gameMode, and more. Each Match has two Rosters. + + +Rosters +---------------------- + +Rosters track the scores of each opposing group of Participants. If players entered matchmaking as a team, the Roster will have a related Team. Rosters have many Participants objects, one for each member of the Roster. Roster objects are only meaningful within the context of a Match and are not exposed as a standalone resource. + +**Javascript:** + +.. code-block:: javascript + + { + "type": "roster", + "id": "eca49808-d510-11e6-bf26-cec0c932ce01", + "attributes": { + "stats": { + "acesEarned": 2, + "gold": 32344, + "etc..." + } + }, + "relationships": { + "team": { + "data": { + "type": "team", + "id": "753d464c-d511-11e6-bf26-cec0c932ce01" + } + }, + "participants": { + "data": [ + { + "type": "participant", + "id": "eca49a7e-d510-11e6-bf26-cec0c932ce01" + }, + "etc..." + ] + } + } + } + + + +Participants +--------------------------- + +Participant objects track each member in a Roster. Participants may be anonymous Players, registered Players, or bots. In the case where the Participant is a registered Player, the Participant will have a single Player relationship. Participant objects are only meaningful within the context of a Match and are not exposed as a standalone resource. + +**Javascript:** + +.. code-block:: javascript + + { + "type": "participant", + "id": "ea77c3a7-d44e-11e6-8f77-0242ac130004", + "attributes": { + "actor": "*Hero009*", + "stats": { + "assists": 4, + "crystalMineCaptures": 1, + "deaths": 2, + "farm": 49.25, + "etc..." + } + } + } + + + +Get a Collection of Matches +--------------------------- + +This endpoint retrieves data from matches. Bulk scraping matches is prohibited. + +**HTTP Request** +| ``GET https://api.dc01.gamelockerapp.com/shards/na/matches`` + +=========================== ================ =================================================================================================================== +Parameter Default Description +=========================== ================ =================================================================================================================== +page[offset] 0 Allows paging over results +page[limit ] 50 The default (and current maximum) is 50.Values less than 50 and great than 2 are supported. +sort createdAt By default, Matches are sorted by creation time ascending. +filter[createdAt-start] 3hrs ago Must occur before end time. Format is iso8601 Usage: filter[createdAt-start]=2017-01-01T08:25:30Z +filter[createdAt-end] Now Queries search the last 3 hrs. Format is iso8601 i.e.filter[createdAt-end]=2017-01-01T13:25:30Z +filter[playerNames] none Filters by player name. Usage: filter[playerNames]=player1,player2,... +filter[playerIds] none Filters by player Id. Usage:filter[playerIds]=playerId,playerId,... +filter[teamNames] none Filters by team names. Team names are the same as the in game team tags. Usage: filter[teamNames]=TSM,team2,... +filter[gameMode] none Filter by gameMode Usage: filter[gameMode]=casual,ranked,... +=========================== ================ =================================================================================================================== + +*Remember — a happy match is an authenticated match!* + +**Shell:** + +.. code-block:: shell + + curl -g "https://api.dc01.gamelockerapp.com/shards/na/matches?sort=createdAt&page[limit]=3&filter[createdAt-start]=2017-02-27T13:25:30Z&filter[playerNames]=" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + //The above command returns JSON structured like this: + + { + "data": [ + { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + ] + } + +**Java:** + +.. code-block:: java + + //*There are a variety of Java HTTP libraries that support query-parameters. + + //The above command returns JSON structured like this: + + { + "data": [ + { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + ] + } + +**Python:** + +.. code-block:: python + + import requests + + url = "https://api.dc01.gamelockerapp.com/shards/na/matches" + + header = { + "Authorization": "", + "Accept": "application/vnd.api+json" + } + + query = { + "sort": "createdAt", + "filter[playerNames]": "", + "filter[createdAt-start]": "2017-02-28T13:25:30Z", + "page[limit]": "3" + } + + r = requests.get(url, headers=header, params=query) + + //The above command returns JSON structured like this: + + { + "data": [ + { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + ] + } + +**Go:** + +.. code-block:: go + + q := req.URL.Query() + q.Add("sort", "createdAt") + q.Add("filter[playerNames]", "") + q.Add("filter[createdAt-start]", "2017-02-27T13:25:30Z") + q.Add("page[limit]", "3") + req.URL.RawQuery = q.Encode() + res, _ := client.Do(req) + + //The above command returns JSON structured like this: + + { + "data": [ + { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + ] + } + +Get a Single Match +--------------------------- + +This endpoint retrieves a specific match. + +**HTTP Request** +| ``GET https://api.dc01.gamelockerapp.com/shards/na/matches/`` + +**URL Parameters** +| Parameter: ``ID`` +| Description: ``The ID of the match to retrieve`` + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/matches/" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + //The above command returns JSON structured like this: + + { + "data": { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + } + +**Javascript:** + +.. code-block:: Javascript + + //There are a variety of Java HTTP libraries that support URL parameters + + { + "data": { + "type": "match", + "id": "02b90214-c64d-11e6-9f6b-062445d3d668", + "attributes": { + "createdAt": "2017-01-06T20:30:08Z", + "duration": 1482195372, + "gameMode": "casual", + "patchVersion": "1.0.0", + "shardId": "na", + "stats": "acesEarned: 3, etc..." + }, + "relationships": { + "rosters": { + "data": [{ + "type": "roster", + "id": "ea77c2eb-d44e-11e6-8f77-0242ac130004" + }, { + "type": "roster", + "id": "dc2c14b4-d50c-11e6-bf26-cec0c932ce01" + }] + } + } + } + } + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/players/players.rst.txt b/build/html/_sources/players/players.rst.txt new file mode 100644 index 0000000..8b21fcb --- /dev/null +++ b/build/html/_sources/players/players.rst.txt @@ -0,0 +1,105 @@ +.. _players: + +Players +======= + +Player objects contain aggregated lifetime information about each Player. At this time Players are fairly sparse, but there are plans to add much richer data as it becomes available. + + + +Get a Single Player +-------------------- + +This endpoint retrieves a specific player. + +*Please Note: Changes Coming! - Player resources are not fully defined at this point, but are included so that consumers can get basic info (name, etc.) This object will have additional data added over the next few months, and may change slightly as data moves from the `attributes.stats` object to the main `attributes` object.* + +**HTTP Request** + +| ``GET https://api.dc01.gamelockerapp.com/shards/na/players/`` + + +**URL Parameters** + +| Parameter: ID +| Description: The ID of the player to retrieve + + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/players/" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + **The above command returns JSON structured like this:** + + {{ + "data": { + "attributes": { + "stats": { + "lossStreak": 1, + "winStreak": 0, + "lifetimeGold": 10536.0 + }, + "name": "boombastic04" + }, + "type": "player", + "id": "6abb30de-7cb8-11e4-8bd3-06eb725f8a76" + } + } + + +**Javascript:** + +.. code-block:: javascript + + //There are a variety of Java HTTP libraries that support query-parameters. + + **The above command returns JSON structured like this:** + + {{ + "data": { + "attributes": { + "stats": { + "lossStreak": 1, + "winStreak": 0, + "lifetimeGold": 10536.0 + }, + "name": "boombastic04" + }, + "type": "player", + "id": "6abb30de-7cb8-11e4-8bd3-06eb725f8a76" + } + } + + +Get a Collection of Players +--------------------------- + +This endpoint retrieves a collection of up to 6 players, filtered by name. Player names are specific to each region. If a player has changed names, it is possible that there are multiple ID's for a single player name. + +**HTTP Request** + +| ``GET https://api.dc01.gamelockerapp.com/shards/na/players`` + + +**Query Parameters** + +| Parameter: filter[playerNames] +| Default: None +| Description: Filters by player names. Usage: filter[playerNames]=player1,player2 + + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/players?filter[playerNames]=player1,player2" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + } + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/receivingresponses/receivingresponses.rst.txt b/build/html/_sources/receivingresponses/receivingresponses.rst.txt new file mode 100644 index 0000000..631fcd4 --- /dev/null +++ b/build/html/_sources/receivingresponses/receivingresponses.rst.txt @@ -0,0 +1,77 @@ +.. _receivingresponses: + +Receiving Responses +==================== + +Payload +--------------------------- + +All Server responses contain a root JSON object. + +A response will contain at least one of the following top-level members: + +* ``data`` : the response's “primary data” +* ``errors`` : an array of error objects + +A response may contain any of these top-level members: + +* ``links``: a links object related to the primary data. +* ``included``: an array of resource objects that are related to the primary data and/or each other (“included resources”). + +If a document does not contain a top-level data key, the included member will not be present either. + +Primary data will be either: + +* a single [resource object][resource objects], a single [resource identifier object], or ``null`` +* an array of [resource objects], an array of [resource identifier objects][resource identifier object], or an empty array ``([])`` + +For example, the following primary data is a single resource object. It's primary data is a single [resource identifier object] that references the same resource. A logical collection of resources will always be represented as an array, even if it only contains one item or is empty. + +**Javascript:** + +.. code-block:: javascript + + { + "data": { + "type": "match", + "id": "skarn", + "attributes": { + // ... this matches attributes + }, + "relationships": { + // ... this matches relationships + } + } + } + { + "data": { + "type": "match", + "id": "1" + } + } + + + +Rate Limits +--------------------------- + +Be nice. If you're sending too many requests too quickly, we'll send back a +``429`` error code (server unavailable). + +**Please note: Free for non-commercial use for up to 10 requests per minute! To increase your rate limit, log into your admin dashboard, find the app you would like a higher rate limit for, and click "request a higher rate limit"** + +**Shell:** + +.. code-block:: shell + + The rate limit headers are defined as follows: + + X-RateLimit-Limit - Request limit per day / per minute + X-RateLimit-Remaining - The number of requests left for the time window + X-RateLimit-Reset - The remaining window before the rate limit is refilled in UTC epoch nanoseconds. + + * Limit tokens are incrementally filled by 60(sec)/ rate limit. ex: 60(sec)/10(rate) gets rate token every 6 seconds up to max rate limit. + + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/samples/samples.rst.txt b/build/html/_sources/samples/samples.rst.txt new file mode 100644 index 0000000..5bb406d --- /dev/null +++ b/build/html/_sources/samples/samples.rst.txt @@ -0,0 +1,88 @@ +.. _samples: + +Samples +======= + +The samples endpoint provides an easy way to access hourly batches of random match data to aggregate stats. + + +Get a Collection of Samples +--------------------------- + +This endpoint retrieves a collection of randomly selected matches. + +**HTTP Request** + +| ``GET https://api.dc01.gamelockerapp.com/shards/na/samples`` + + +=========================== ================ =================================================================================================================== +Parameter Default Description +=========================== ================ =================================================================================================================== +page[offset] 0 Allows paging over results +page[limit ] 50 The default (and current maximum) is 50.Values less than 50 and great than 2 are supported. +sort createdAt By default, Matches are sorted by creation time ascending. +filter[createdAt-start] none Must occur before end time. Format is iso8601 Usage: filter[createdAt-start]=2017-01-01T08:25:30Z +filter[createdAt-end] none Queries search the last 3 hrs. Format is iso8601 i.e.filter[createdAt-end]=2017-01-01T13:25:30Z +=========================== ================ =================================================================================================================== + +**Python:** + +.. code-block:: python + + curl "https://api.dc01.gamelockerapp.com/shards/na/samples" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + //The above command returns JSON structured like this: + + { + "type": "sample", + "id": "sample-na-2017-02-28T07:15:30Z", + "attributes": { + "URL": "URL of Sample Matches", + "createdAt": "2017-02-28T07:15:30Z", + "shardId": "na", + "t0": "2017-02-28T07:15:30Z", + "t1": "2017-02-28T08:15:30Z", + "titleId": "semc-vainglory" + }, + "relationships": { + "assets": { + "data": [] + } + } + } + +**Javascript:** + +.. code-block:: javascript + + //There are a variety of Java HTTP libraries that support query-parameters. + + curl "https://api.dc01.gamelockerapp.com/shards/na/samples" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + //The above command returns JSON structured like this: + + { + "type": "sample", + "id": "sample-na-2017-02-28T07:15:30Z", + "attributes": { + "URL": "URL of Sample Matches", + "createdAt": "2017-02-28T07:15:30Z", + "shardId": "na", + "t0": "2017-02-28T07:15:30Z", + "t1": "2017-02-28T08:15:30Z", + "titleId": "semc-vainglory" + }, + "relationships": { + "assets": { + "data": [] + } + } + } + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/teams/teams.rst.txt b/build/html/_sources/teams/teams.rst.txt new file mode 100644 index 0000000..f380805 --- /dev/null +++ b/build/html/_sources/teams/teams.rst.txt @@ -0,0 +1,73 @@ +.. _teams: + +Teams +===== + +Team objects contain aggregated lifetime information about each Team. + +Get a collection of Teams +--------------------------- + +This endpoint retrieves a collection of up to 6 teams. + +*Important - Team resources are not yet available in the API.* + +**HTTP Request** + +| ``GET https://api.dc01.gamelockerapp.com/teams`` + +**URL Parameters** + +| Parameter: filter[teamNames] +| Defailt: none +| Description: Filters by team name. Usage: filter[teamNames]=team1 + +| Parameter: filter[teamIds] +| Defailt: none +| Description: Filter by team id. Usage: filter[teamIds]=12345 + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/teams?filter[teamNames]=team1" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + + +Get a Single Team +--------------------------- + +This endpoint retrieves a specific team. + +**HTTP Request** + +| ``GET https://api.dc01.gamelockerapp.com/teams/`` + +**URL Parameters** + +| Parameter: ID +| Description: The ID of the team to retrieve + + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/teams/" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + The above command returns JSON structured like this: + + { + "id": 2, + "name": "Max", + "breed": "unknown", + "fluffiness": 5, + "cuteness": 10 + } + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/telemetry/telemetry.rst.txt b/build/html/_sources/telemetry/telemetry.rst.txt new file mode 100644 index 0000000..0999995 --- /dev/null +++ b/build/html/_sources/telemetry/telemetry.rst.txt @@ -0,0 +1,204 @@ +.. _telemetry: + +Telemetry +========= + +The telemtry provides us insights into the match. It gives us details of various events that happened in the match alongwith the time when they happened. Some of the events also have location which can be plotted on a Vainglory Game map. Telemetry is very useful to generate a timeline visualtions of how the match went for replays, or create heatmaps of where a certin hero or ability is most useful. These are just some of the exmaples of where Telemtry can be used. + + +To get Telemetry Data +--------------------------- + + +You start by pulling a list of matches using the matches endopoint. + +**HTTP Request** +| ``GET https://api.dc01.gamelockerapp.com/shards/na/matches`` + +**Shell:** + +.. code-block:: shell + + curl "https://api.dc01.gamelockerapp.com/shards/na/matches" \ + -H "Authorization: Bearer " \ + -H "Accept: application/vnd.api+json" + + //The above command returns JSON structured like this: + + "data": [ + { + "type": "match", + "id": "f5373c40-0aa9-11e7-bcff-0667892d829e", + "attributes": { + "createdAt": "2017-03-17T00:38:00Z", + "duration": 259, + "gameMode": "blitz_pvp_ranked", + "patchVersion": "", + "shardId": "na", + "stats": { + "endGameReason": "victory", + "queue": "blitz_pvp_ranked" + }, + "titleId": "semc-vainglory" + }, + "relationships": { + "assets": { + "data": [ + { + "type": "asset", + "id": "b900c179-0aaa-11e7-bb12-0242ac110005" + } + ] + }, + "rosters": { + "data": [ + { + "type": "roster", + "id": "b8f6640a-0aaa-11e7-bb12-0242ac110005" + }, + { + "type": "roster", + "id": "b8f65271-0aaa-11e7-bb12-0242ac110005" + } + ] + }, + "rounds": { + "data": [] + } + } + }, + + //You need to look for Assets JSON node which points to telemetry. Check for the following in the response: + + "relationships": { + "assets": { + "data": [ + { + "type": "asset", + "id": "b900c179-0aaa-11e7-bb12-0242ac110005" + } + ] + }, + + //Once you have located this ID, you now have to search for the following JSON segment in the response object. The following response object will provide you a link to the Telemtry data + + { + "type": "asset", + "id": "b900c179-0aaa-11e7-bb12-0242ac110005", + "attributes": { + "URL": "https://gl-prod-us-east-1.s3.amazonaws.com/assets/semc-vainglory/na/2017/03/17/00/43/b900c179-0aaa-11e7-bb12-0242ac110005-telemetry.json", + "contentType": "application/json", + "createdAt": "2017-03-17T00:43:22Z", + "description": "", + "filename": "telemetry.json", + "name": "telemetry" + } + }, + + //You can download the data with following commands. Please note that you do not need API Key to get this data. + + curl "https://gl-prod-us-east-1.s3.amazonaws.com/assets/semc-vainglory/na/2017/03/17/00/43/b900c179-0aaa-11e7-bb12-0242ac110005-telemetry.json" \ + -H "Accept: application/vnd.api+json" + + //This request will return you a response as follows: + + { "time": "2017-02-18T06:37:15+0000", + "type": "DealDamage", + "payload": { + "Team": "Left", + "Actor": "*Ringo*", + "Target": "*Turret*", + "Source": "Unknown", + "Damage": 405, + "Delt": 613, + "IsHero": 1, + "TargetIsHero": 0 + } + } + +Event Data Dictionary +--------------------------- + +Telemetry data is classified into several event of interest. Following is a list of every event type with an example. + +**PlayerFirstSpawn:** +| At the start of the game when players spawn. + +**Level Up:** +| When a player gains a level in the game. In game types Brawl, you will find 9 events at the exact same time. + +**BuyItem:** +| When a player buys an item. + +**SellItem:** +| When a player sells an item. ``json { "time": "2017-03-31T02:49:37+0000", "type": "SellItem", "payload": { "Team": "Left", "Actor": "*Lyra*", "Item": "Flare", "Cost": 15 } }`` + +**LearnAbility:** +| When a player puts a point into one of the abilities. Please note there can be a time difference between when a player gains a level and learns an ability ``json { "time": "2017-03-17T00:38:52+0000", "type": "LearnAbility", "payload": { "Team": "Right", "Actor": "*Sayoc*", "Ability": "HERO_ABILITY_SAYOC_C", "Level": 1 } },`` + +**UseAbility:** +| This event is recorded when a player uses an ability and it will hold information about the hero who used it together with the co-ordinates for the map. ``json { "time": "2017-03-17T00:39:08+0000", "type": "UseAbility", "payload": { "Team": "Right", "Actor": "*Kestrel*", "Ability": "HERO_ABILITY_KESTREL_A_NAME", "Position": [ 39.39, 0.01, 27.26 ] } },`` + +**UseItemAbility:** +| This event is recorded when a player uses an activatable item or a charm/taunt. ``json { "time": "2017-03-31T03:10:17+0000", "type": "UseItemAbility", "payload": { "Team": "Left", "Actor": "*Lyra*", "Ability": "Travel Boots", "Position": [ -17.51, 0.01, 41.63 ], "TargetActor": "None", "TargetPosition": [ -17.51, 0.01, 41.63 ] } }`` + +**EarnXP:** +| This event is recorded when a player gains XP from any source. it could be killing a minion, miner or a hero. ``json { "time": "2017-03-17T00:39:09+0000", "type": "EarnXP", "payload": { "Team": "Left", "Actor": "*Koshka*", "Source": "*JungleMinion_TreeEnt*", "Amount": 67, "Shared With": 1 } },`` + +**DealDamage:** +| This event is recorded when any actor (player, turret, minion, etc.) deals damage to any other. ``json { "time": "2017-03-31T02:47:34+0000", "type": "DealDamage", "payload": { "Team": "Left", "Actor": "*Skaarf*", "Target": "*Vox*", "Source": "Unknown", "Damage": 105, "Delt": 80, "IsHero": 1, "TargetIsHero": 1 } }`` + +**KillActor:** +| This event is recorded when a player kills anything in game. it could be a a minion, miner or a hero. You will generally see EarnXP and KillActor events come at the sme time. + +**NPCkillNPC:** +| When one non-player actor kills another, such as the Kraken or a minion killing a turret. ``json { "time": "2017-03-31T03:07:21+0000", "type": "NPCkillNPC", "payload": { "Team": "Left", "Actor": "*Kraken_Captured*", "Killed": "*Turret*", "KilledTeam": "Right", "Gold": "300", "IsHero": 0, "TargetIsHero": 0, "Position": [ 54, 0, 2.92 ] } }`` + +**GoldFromTowerKill:** +| When a player earns gold from the destruction of a turret belonging to the enemy team. ``json { "time": "2017-03-31T02:57:02+0000", "type": "GoldFromTowerKill", "payload": { "Team": "Left", "Actor": "*Idris*", "Amount": 300 } }`` + +**GoldFromGoldMine:** +| When a player earns gold from his or her team capturing the gold miner. ``json { "time": "2017-03-31T03:00:43+0000", "type": "GoldFromGoldMine", "payload": { "Team": "Left", "Actor": "*Idris*", "Amount": 300 } }`` + +**GoldFromKrakenKill:** +| When a player earns gold from his or her team killing a Kraken released by the enemy team. ``json { "time": "2017-03-31T03:07:43+0000", "type": "GoldFromKrakenKill", "payload": { "Team": "Right", "Actor": "*Kestrel*", "Amount": 500 } }`` + + +**Javascript:** + +.. code-block:: Javascript + + { + "time": "2017-03-17T00:38:32+0000", + "type": "PlayerFirstSpawn", + "payload": { + "Team": "Right", + "Actor": "*Alpha*" + } + } + + { + "time": "2017-03-17T00:38:32+0000", + "type": "LevelUp", + "payload": { + "Team": "Right", + "Actor": "*Alpha*", + "Level": 1, + "LifetimeGold": 0 + } + } + + { + "time": "2017-03-17T00:38:45+0000", + "type": "BuyItem", + "payload": { + "Team": "Left", + "Actor": "*Vox*", + "Item": "Breaking Point", + "Cost": 2600 + } + } + + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_sources/titles/titles.rst.txt b/build/html/_sources/titles/titles.rst.txt new file mode 100644 index 0000000..13ca0e0 --- /dev/null +++ b/build/html/_sources/titles/titles.rst.txt @@ -0,0 +1,9 @@ +.. _titles: + +Titles +====== + +The TitleID for a request is determined by the JWT in the Authorization header automatically and may appear in responses. + +.. toctree:: + :maxdepth: 2 diff --git a/build/html/_static/.DS_Store b/build/html/_static/.DS_Store new file mode 100644 index 0000000..2ae92b9 Binary files /dev/null and b/build/html/_static/.DS_Store differ diff --git a/build/html/_static/ajax-loader.gif b/build/html/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/build/html/_static/ajax-loader.gif differ diff --git a/build/html/_static/basic.css b/build/html/_static/basic.css new file mode 100644 index 0000000..c3029b5 --- /dev/null +++ b/build/html/_static/basic.css @@ -0,0 +1,643 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 0px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/build/html/_static/better.css b/build/html/_static/better.css new file mode 100644 index 0000000..dd18fc3 --- /dev/null +++ b/build/html/_static/better.css @@ -0,0 +1,314 @@ +@import url("better_basic.css"); + + + + +/* main styles */ + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 100%; + color: #000000; + margin: 0; + padding: 0; + line-height: 135%; +} + +a { + color: #008; + text-decoration: none; +} + +a:visited { + color: #208; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a.toc-backref { + color: #000000; +} + +p { + margin: 1rem 0; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 1em; + margin-bottom: 0.5em; + color: #000000; + line-height: 135%; +} + +.body .section:first-child > :first-child, +.sphinxsidebarwrapper > :first-child, +.sphinxsidebar .search:first-child +{ + margin-top: 1rem; +} + +h1 { font-size: 1.5rem; font-weight: bold; } +h2 { font-size: 1.5rem; font-weight: normal; } +h3 { font-size: 1.25rem; font-weight: bold; } +h4 { font-size: 1.25rem; font-weight: normal; } +h5 { font-size: 1rem; font-weight: bold; } +h6 { font-size: 1rem; font-weight: normal; } + +/* page-level layout of containers */ + +header#pageheader, footer#pagefooter, .related, .document { + width: 100%; + max-width: 60rem; + margin: auto; +} + +.documentwrapper { + float: left; + width: 100%; +} + +.bodywrapper { + margin: 0 0 0 25rem; +} + +footer#pagefooter, footer#pagefooter a { + color: #000000; +} + + +footer#pagefooter { + padding-top: 2rem; + padding-bottom: 2rem; + text-align: center; +} + +footer#pagefooter a { + text-decoration: underline; +} + +/* header styles */ + +body > header h1 a, body > header h1 a:visited { + color: #000000; +} + +a.headerlink { + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +/* code styles */ + +pre, tt { + background-color: #eee; + color: #333; +} + +pre { + font-family: Monaco, Consolas, "Lucida Console", monospace; + margin: 1rem -5px; + padding: 5px; + border-left: none; + border-right: none; + font-size: 0.8rem; + line-height: 1rem; +} + +tt { + padding: 0 1px 0 1px; + font-family: Consolas, Monaco, monospace; +} + +/* API doc styles */ + +dl.function, +dl.class, +dl.method, +dl.attribute, +dl.data, +dl.classmethod { + margin-bottom: 2rem; +} + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #aaa; +} + +.related.bottom { + border-top: 1px solid #aaa; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* sidebar */ + +.sphinxsidebarwrapper { + padding: 0 1rem 0 0; +} + +.sphinxsidebar { + width: 25rem; + margin-left: -100%; + font-size: 0.9rem; + float: left; +} + +.sphinxsidebar h3 a { + color: #000000; +} + +.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +.sphinxsidebar ul { + margin: 0; + padding: 0; + margin-bottom: 1rem; + list-style: none; +} + +.sphinxsidebar ul ul, +.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +.sphinxsidebar input { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + height: 1.5rem; + font-size: 0.9rem; + margin: 0; + + background-color: white; + border: 1px solid #ccc; + color: #555; +} + +.sphinxsidebar .search { + margin-top: 2rem; +} + +.sphinxsidebar .search input[type=text] { + width: 90%; + display: inline-block; +} + +.sphinxsidebar .search input[type=submit] { + width: 4rem; + display: inline-block; +} + +/* paragraph-level markup */ + +.admonition p.admonition-title + p { + display: inline; +} + +.admonition p { + margin-bottom: 5px; +} + +.admonition pre { + margin-bottom: 5px; +} + +.admonition ul, .admonition ol { + margin-bottom: 5px; +} + +p.admonition-title { + display: inline; + margin-right: 0; +} + +p.admonition-title:after { + content: ":"; +} + +.note { + background-color: #eee; + border: 1px solid #ccc; +} + +.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +.topic { + background-color: #eee; +} + +.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +.warning tt { + background: #efc2c2; +} + +.note tt { + background: #d6d6d6; +} + +.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +/* responsive styles */ + +@media (max-width: 820px) { + /* kill the sidebar */ + .bodywrapper { margin: 0; } + .sphinxsidebar { + display: none; + } + header#pageheader, footer#pagefooter, .related, .document { + margin: 0 1rem; + width: calc(100% - 2rem); + width: -webkit-calc(100% - 2rem); + } +} \ No newline at end of file diff --git a/build/html/_static/better_basic.css b/build/html/_static/better_basic.css new file mode 100644 index 0000000..bf43230 --- /dev/null +++ b/build/html/_static/better_basic.css @@ -0,0 +1,455 @@ +/* basic.css_t from Sphinx project modified for sphinx-better-theme */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/build/html/_static/comment-bright.png b/build/html/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/build/html/_static/comment-bright.png differ diff --git a/build/html/_static/comment-close.png b/build/html/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/build/html/_static/comment-close.png differ diff --git a/build/html/_static/comment.png b/build/html/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/build/html/_static/comment.png differ diff --git a/build/html/_static/css/vainglory.css b/build/html/_static/css/vainglory.css new file mode 100644 index 0000000..057130e --- /dev/null +++ b/build/html/_static/css/vainglory.css @@ -0,0 +1,587 @@ +@import url("../better.css"); + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +input[type=search] { + -webkit-box-sizing: border-box; + box-sizing: border-box; } + +body { + color: #afb7b9; + font-size: 14px; + position: relative; + overflow-x: hidden; + background-color: #10090e; + background-image: url(../images/battlerite/main-bg.jpg); + background-size: cover; + background-attachment: fixed; + background-repeat: no-repeat; + background-position: 50% 0%; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p, +address, +blockquote, +pre, +table { + margin-top: 0; + font-weight: 300; + line-height: 1.4em; + color: #e3e3e3; } + .vainglory h1, .vainglory + h2, .vainglory + h3, .vainglory + h4, .vainglory + h5, .vainglory + h6, .vainglory + p, .vainglory + address, .vainglory + blockquote, .vainglory + pre, .vainglory + table { + margin-bottom: 1em; + color: #afb7b9; } + +h1, +h2, +h3, +h4, +h5, +h6, +blockquote { + font-weight: 300; + text-transform: uppercase; + font-family: "PT Serif", serif; + color: #f79d02; + letter-spacing: 0.1em; } + +h1 { + margin-top: 1.09em; + margin-bottom: .55em; + font-size: 27px; + color: #f79d02; } + @media (max-width: 950px) { + h1 { + font-size: 24px;} } + +h2 { + margin-bottom: .8em; + font-size: 18px; + font-weight: 300; + color: #bf4d0a; + letter-spacing: 0.1em; } + @media (max-width: 950px) { + h2 { + font-size: 20px; } } + +h3 { + font-size: 26.91px; + margin-bottom: .8em; + letter-spacing: 0.1em; + font-size: 24px; +} + @media (max-width: 950px) { + h3 { + font-size: 19px; } } + +h4 { + font-size: 22px; + letter-spacing: 0.01em; } + @media (max-width: 950px) { + h4 { + font-size: 17px;} } + +h5 { + font-size: 14px; + font-family: "Roboto", sans-serif; + letter-spacing: 0em; + margin-bottom: 1.2em; } + @media (max-width: 950px) { + h5 { + font-size: 14px;} } + +h6 { + font-size: 14px; +} +@media (max-width: 950px) { + h6 { + font-size: 14px;} } + +header { + z-index: 25; + position: relative; + width: 100%; + background-color: #1d191e; +} + +#site-logo { + display: block; + margin: 0; + max-width: 100%; + float: left; + background-image: url(../images/logo.png); + background-repeat: no-repeat; + height: 38px; + width: 73px; + background-size: 73px 38px; + margin-top: 14px; + margin-bottom: 14px; } + @media (max-width: 950px) { + #site-logo { + margin-top: 13px; + margin-bottom: 13px; } } + #site-logo img { + display: block; + width: 100%; + height: auto; + margin-left: 0; } + + +#mainMenu { +float: left; +margin-left: 28px; } +@media (max-width: 950px) { + #mainMenu { + margin-left: 0; + background-color: #1d191e; } } +@media (max-width: 950px) { + #mainMenu { + overflow: hidden; + max-height: 0; + margin-left: 0; + width: 100%; + -webkit-transition: .25s; + -o-transition: .25s; + transition: .25s; } + .menu-open #mainMenu { + max-height: 1000px; + -webkit-transition: .5s; + -o-transition: .5s; + transition: .5s; } } + +.main-menu { +margin: 0 auto; +padding: 0; +font-size: 0px; + } +.main-menu li { + font-size: 14px; + line-height: 1em; + list-style-type: none; + position: relative; + margin-bottom: 0; + display: inline-block; + zoom: 1; + *display: inline; } + @media (max-width: 950px) { + .main-menu li { + display: block; } } + .main-menu li:hover > a, .main-menu li:focus > a { + color: #f79d02; + text-decoration: none; } + .main-menu li > a { + display: block; + vertical-align: middle; + padding: 0; + line-height: 1.2em; + text-decoration: none; + position: relative; + text-align: center; + text-transform: uppercase; + font-family: "Ubuntu", sans-serif; + padding: 26px 10px; + font-size: 14.848px; + font-weight: 400; + color: white; + letter-spacing: .03em; } + @media (max-width: 950px) { + .main-menu li > a { + padding: 15px 5px; + font-size: 14px; + } } + .main-menu li > a.active, .main-menu li > a:hover, .main-menu li > a:focus { + color: #f79d02; + text-decoration: none; } + +main-wrapper:after, +.pakery-grid:after, +.gform_fields:after, +.clearfix:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; } + +* html .clearfix { + height: 1%; } + +.main-wrapper, +.pakery-grid, +.gform_fields, +.clearfix { + display: block; } + + .wrapper { + margin: 0 auto; + width: 95.5%; + padding-bottom: 0; + max-width: 1190px; + position: relative; + clear: both; } + .wrapper-outer, .wrapper-inner { + margin: 0 auto; + width: 95.5%; + padding-top: 0px; + padding-bottom: 0px; + position: relative; } + @media (max-width: 768px) { + .wrapper-outer.mob-wide, .wrapper-inner.mob-wide { + width: 100%; } } + .wrapper-outer { + width: 100%; + padding-top: 0; + padding-bottom: 0; + max-width: 100%; } + .wrapper-inner { + max-width: 1108px; } + @media (max-width: 768px) { + .wrapper.mob-wide { + width: 100%; } } + + .menu-top-outer { + margin: 0; + position: relative; + z-index: 1; } + .menu-top-outer .wrapper { + padding-top: 0; + padding-bottom: 0; + max-width: 95.5%; + width: 100%; + max-width: 1190px; + width: 95.5%; } + .menu-top-outer .btn, .menu-top-outer *[type="submit"] { + float: right; + min-width: 0; + letter-spacing: 0.065em; + margin-right: -.7%; + margin-top: 13px; + margin-bottom: 13px; } + @media (max-width: 950px) { + .menu-top-outer .btn, .menu-top-outer *[type="submit"] { + font-size: 14px; + font-size: 1.4rem; + margin-top: 13px; + margin-bottom: 13px; } } + .menu-top-outer .user-drop { + float: right; + margin-top: 26px; + position: relative; } + @media (max-width: 950px) { + .menu-top-outer .user-drop { + margin-top: 24px; } } + .menu-top-outer .user-drop.open .name { + background-image: url(../images/battlerite/yellow-arrow-up.svg); + background-repeat: no-repeat; } + .lt-ie9 .menu-top-outer .user-drop.open .name { + background-image: url(../images/battlerite/yellow-arrow-up.png); } + .no-svg .menu-top-outer .user-drop.open .name { + background-image: url(../images/battlerite/yellow-arrow-up.png); } + .menu-top-outer .user-drop.open ul { + display: block; } + .menu-top-outer .user-drop .name { + color: #f79d02; + padding-right: 18px; + background-position: 100% 50%; + letter-spacing: 0.02em; + font-weight: 400; + cursor: pointer; + text-transform: uppercase; + background-image: url(../images/battlerite/yellow-arrow.svg); + background-repeat: no-repeat; + background-size: 9px 7px; + font-size: 14.848px; + font-size: 1.4848rem; } + .lt-ie9 .menu-top-outer .user-drop .name { + background-image: url(../images/battlerite/yellow-arrow.png); } + .no-svg .menu-top-outer .user-drop .name { + background-image: url(../images/battlerite/yellow-arrow.png); } + .menu-top-outer .user-drop ul { + display: none; + position: absolute; + right: 0; + top: 100%; + padding: 0 0 4px !important; + min-width: 100%; + background-color: #1d191e; } + .menu-top-outer .user-drop ul li { + list-style: none; + display: block; } + .menu-top-outer .user-drop ul li > a { + display: block; + vertical-align: middle; + padding: 0; + line-height: 1.2em; + text-decoration: none; + position: relative; + text-align: right; + text-transform: uppercase; + font-family: "Ubuntu", sans-serif; + padding: 15px 18px 15px 4px; + font-size: 14.848px; + font-size: 1.4848rem; + font-weight: 400; + color: white; + letter-spacing: 0.02em; } + @media (max-width: 950px) { + .menu-top-outer .user-drop ul li > a { + padding: 15px 18px 15px 4px; + font-size: 14px; + font-size: 1.4rem; } } + .menu-top-outer .user-drop ul li > a:hover, .menu-top-outer .user-drop ul li > a:focus { + color: #f79d02; + text-decoration: none; } + + + + /* stuff like float-left, clear-right, align-center */ + button:focus, + .btn:focus, + [type="submit"]:focus { + outline: none; } + + .btn, *[type="submit"] { + display: inline-block; + zoom: 1; + *display: inline; + text-decoration: none !important; + line-height: 1.5em; + background-color: transparent; + color: white !important; + border-radius: 0; + font-weight: 400; + position: relative; + width: auto; + min-width: 0; + text-align: center; + -webkit-transition: .15s; + -o-transition: .15s; + transition: .15s; + cursor: pointer; + -webkit-box-shadow: none; + box-shadow: none; + text-transform: uppercase; + background-size: 100% 100%; + min-width: 240px; + max-width: 100%; + background-image: url(../images/battlerite/btn-1.png); + border: none; + font-family: "Ubuntu", sans-serif; + font-size: 16px; + padding: 9px 17px; + letter-spacing: 0.19em; } + .btn:hover, [type="submit"]:hover, .btn:focus, [type="submit"]:focus { + border-color: transparent; + color: #0c9590 !important; + outline: none; } + .btn + .btn, *[type="submit"] + .btn, .btn + *[type="submit"], *[type="submit"] + *[type="submit"] { + margin-left: 4.9%; } + @media (max-width: 950px) { + .btn, *[type="submit"] { + font-size: 14px !important; + } + } + @media (max-width: 950px) { + .btn, *[type="submit"] { + padding: 7px 7px; + font-size: 14px; + font-size: 1.4rem; + min-width: 136px; } } + .btn.alt, .alt[type="submit"] { + background-image: url(../images/battlerite/btn-2.png); } + .btn.alt:hover, .alt[type="submit"]:hover, .btn.alt:focus, .alt[type="submit"]:focus { + color: #7e1a01 !important; } + + ::-webkit-input-placeholder { + font-size: 16px; + font-size: 1.6rem; + color: #191a1b; + font-family: "PT Serif", serif; + font-weight: 700; } + @media (max-width: 950px) { + ::-webkit-input-placeholder { + font-size: 14px; + font-size: 1.4rem; } } + + :-moz-placeholder { + /* Firefox 18- */ + font-size: 16px; + font-size: 1.6rem; + color: #191a1b; + font-family: "PT Serif", serif; + font-weight: 700; } + @media (max-width: 950px) { + :-moz-placeholder { + font-size: 14px; + font-size: 1.4rem; } } + + ::-moz-placeholder { + /* Firefox 19+ */ + font-size: 16px; + font-size: 1.6rem; + color: #191a1b; + font-family: "PT Serif", serif; + font-weight: 700; } + @media (max-width: 950px) { + ::-moz-placeholder { + font-size: 14px; + font-size: 1.4rem; } } + + :-ms-input-placeholder { + font-size: 16px; + font-size: 1.6rem; + color: #191a1b; + font-family: "PT Serif", serif; + font-weight: 700; } + @media (max-width: 950px) { + :-ms-input-placeholder { + font-size: 14px; + font-size: 1.4rem; } } + + + + +header#pageheader, footer#pagefooter, .related, .document { + width: 100%; + max-width: 1190px; + margin: auto; +} + +p { + font-size: 14px; + margin-bottom: 1.95em; + font-weight: 500; +} + +.bodywrapper { + margin: 0 0 0 22rem; +} + +.sphinxsidebar { + width: 20rem; +} + +div.sphinxsidebarwrapper { + padding: 2rem 1rem 0 0; +} + +.sphinxsidebarwrapper ul { + padding: 2rem 1rem 0 0; +} + +.sphinxsidebarwrapper h3 { + display: none; +} + +.sphinxsidebarwrapper ul li { + list-style: none; + margin-bottom: -2px; + padding: 0; + border: 1.5px solid #1f1e20; +} + +.sphinxsidebarwrapper ul li.current > a { + color: #eaa900; + border-left: 2px solid #eaa900; +} + +.sphinxsidebarwrapper ul li.current { + padding: 0px 0 0px; + margin-bottom: 0; + background-color: #1f1e20; +} + +.sphinxsidebarwrapper ul li ul { + margin-bottom: 0; + padding-top: 4px; + padding-bottom: 25px; +} + +.sphinxsidebarwrapper ul li ul li { + border: none; + padding: 5.5px 0 5.5px; +} + +.sphinxsidebarwrapper ul li ul li a { + text-transform: none; + padding: 0px 5px 0 29px; + font-size: 12px; +} + +.sphinxsidebarwrapper ul li a { + display: block; + text-transform: uppercase; + font-size: 12px; + color: white; + letter-spacing: .07em; + padding: 9px 10px 8px 17px; + font-family: "Ubuntu", sans-serif; + font-weight: 300; +} + +.sphinxsidebarwrapper ul li a:hover, ul.aside-menu li a:focus { + text-decoration: none; + color: #eaa900; +} + +.breadcrumbs { + border:none; +} + +a { + color: #eaa900; +} + +a:visited { + color: #eaa900; +} + + +.highlight pre{ + background-color: #1e1e1e; +} + +.highlight .go { + color: white; +} + +.pre { + background-color: #1e1e1e; +} + +table { + margin-bottom: 20px; +} + +table.docutils th { + padding:10px; + border:1px solid #afb7b9; +} + +thead { + background-color: #1d191e; +} + +table.docutils td { + padding:10px; + border:1px solid #afb7b9; +} diff --git a/build/html/_static/doctools.js b/build/html/_static/doctools.js new file mode 100644 index 0000000..24992e6 --- /dev/null +++ b/build/html/_static/doctools.js @@ -0,0 +1,311 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/build/html/_static/down-pressed.png b/build/html/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/build/html/_static/down-pressed.png differ diff --git a/build/html/_static/down.png b/build/html/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/build/html/_static/down.png differ diff --git a/build/html/_static/file.png b/build/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/build/html/_static/file.png differ diff --git a/build/html/_static/images/logo.png b/build/html/_static/images/logo.png new file mode 100644 index 0000000..84db6cf Binary files /dev/null and b/build/html/_static/images/logo.png differ diff --git a/build/html/_static/images/vainglory.ico b/build/html/_static/images/vainglory.ico new file mode 100644 index 0000000..56ffebd Binary files /dev/null and b/build/html/_static/images/vainglory.ico differ diff --git a/build/html/_static/images/vainglory/btn-1.png b/build/html/_static/images/vainglory/btn-1.png new file mode 100644 index 0000000..a41cc54 Binary files /dev/null and b/build/html/_static/images/vainglory/btn-1.png differ diff --git a/build/html/_static/images/vainglory/main-bg.jpg b/build/html/_static/images/vainglory/main-bg.jpg new file mode 100644 index 0000000..284943d Binary files /dev/null and b/build/html/_static/images/vainglory/main-bg.jpg differ diff --git a/build/html/_static/jquery-3.1.0.js b/build/html/_static/jquery-3.1.0.js new file mode 100644 index 0000000..f2fc274 --- /dev/null +++ b/build/html/_static/jquery-3.1.0.js @@ -0,0 +1,10074 @@ +/*eslint-disable no-unused-vars*/ +/*! + * jQuery JavaScript Library v3.1.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2016-07-07T21:44Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.1.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-