Compare commits

...

24 Commits

Author SHA1 Message Date
andrewrowanwallee 05c83b1ac6 Release 7.3.4 2026-05-28 17:34:20 +02:00
andrewrowanwallee 93f24a2cac Release 7.3.3 2026-04-29 11:43:34 +02:00
andrewrowanwallee dbd0b6808c Release 7.3.2 2026-02-24 11:48:14 +01:00
andrewrowanwallee 3f3bf866dd Release 7.3.1 2026-02-09 14:17:02 +01:00
andrewrowanwallee 4fbae35058 Release 7.3.0 2026-01-27 10:24:15 +01:00
andrewrowanwallee 922f66e784 Release 7.2.0 2026-01-14 15:43:19 +01:00
andrewrowanwallee 089555e77f Release 7.1.6 2025-11-24 11:56:40 +01:00
andrewrowanwallee 55bdb5c640 Release 7.1.5 2025-11-11 13:52:29 +01:00
andrewrowanwallee d1a78fedcf Release 7.1.4 2025-10-30 16:49:17 +01:00
andrewrowanwallee d7ea44d506 Release 7.1.3 2025-10-27 12:47:17 +01:00
andrewrowanwallee fa480808b9 Release 7.1.2 2025-10-06 12:23:20 +02:00
andrewrowanwallee 017bb0e416 Release 7.1.1 2025-09-22 12:00:10 +02:00
andrewrowanwallee e47682eb87 release 7.1.0 2025-09-17 11:08:33 +02:00
andrewrowanwallee edf474acea Release 7.1.0 2025-09-17 10:55:21 +02:00
andrewrowanwallee 5af3e0e298 Release 6.1.15 2025-09-16 11:13:06 +02:00
Alberto G. Viu 2aafa38085 Release 7.1.0 2025-09-11 10:20:45 +02:00
Alberto G. Viu d91a29c6b7 Revert "Release 7.1.0"
This reverts commit aa4aa15c54.
2025-09-11 10:09:53 +02:00
andrewrowanwallee aa4aa15c54 Release 7.1.0 2025-09-10 13:49:39 +02:00
andrewrowanwallee 88e706b44f Release 7.0.1 2025-07-23 14:54:54 +02:00
andrewrowanwallee 2f5789aea8 Release 7.0.0 2025-06-24 11:48:03 +02:00
andrewrowanwallee 2f9a30ebd3 Release 6.1.14 2025-06-11 11:16:50 +02:00
andrewrowanwallee 2f4d38b4b2 Release 6.1.13 2025-05-27 11:43:52 +02:00
andrewrowanwallee 2cba2a8f3e Release 6.1.12 2025-03-26 11:59:32 +01:00
andrewrowanwallee 3f291ef7ea Release 6.1.12 2025-03-05 12:03:51 +01:00
232 changed files with 12176 additions and 2210 deletions
+95 -1
View File
@@ -1,3 +1,97 @@
# 7.3.4
- Shopware 6.7.10.0 compatible
- Fix for cart being lost when changing payment methods
- Fixed for incorrectly reference function (getState())
- Fix cache not being cleaned after payment errors
- Fix missing shipping costs
- Minor fix for Customer Id null inconsistency
# 7.3.3
- Shopware 6.7.9.0 compatible
- Fix for only showing 25 sales channels in selector
- Fixed bug with discount occasionally blocking payment methods
# 7.3.2
- Fix for partial refunds using standard refund option
- Fixed issue with undefined array key
- Fixed issue with recurring payments
- Fixed concrete class reference; used interface instead
# 7.3.1
- Shopware 6.7.7.0 compatibility
- Fix for missing payment icons
- Fixed issue with 'Entire Set' coupons returning error due to totals mismatch
- Fixed issue with orphaned order_transactions causing an admin UI failure
- Fixed error thrown when customers who aren't logged in attempt to download an invoice
# 7.3.0
- Headless storefront support
# 7.2.0
- Renamed database table to avoid a naming conflict with legacy plugins
- Fixed issue with refunds failing for payments using Invoice
- Fix to respect sort order of payment methods
# 7.1.6
- Improved rounding handling to force 2 decimal places
- Removed references to unused classes
- Fixed some type errors
- Further improved 0 amount transaction; state transitions
# 7.1.5
- Improved analytics
- Improved error handling for refunding amount 0 and too many items
# 7.1.4
- Updated SDK to 4.8.1
# 7.1.3
- Fixed issue with radio button/switch settings not saving
- Fixed issue with error screen sporadically happening after failed payments
# 7.1.2
- Support the ability to have different spaces for differet sales channels
- Fixed issue where Twint would not appear sometimes
# 7.1.1
- Updated documentation
- Fixed issue with addresses not being correctly synced
# 7.1.0
## Feature
- Support subscription payment methods
- Support Shopware 6.7.2.0
## Bugfix
- Fixed issue with shipping costs not being processed correctly
# 7.0.1
## Feature
- Add plugin version metric
## Bugfix
- Fixed error message when refund amount exceeds total
- Fixed bug where only 25 sales channels showed in the dropdown
- Removed erroneous logs
# 7.0.0
- Compatibility with Shopware 6.7.0
# 6.1.14
- Disable Recreate Cart for Headless Storefront Order
- Added the correct Exception Type to the finalize method
# 6.1.13
- Updated English documentation
- Added French, German and Italian documentation
# 6.1.12
- Compatibility with 6.6.10.x
- Prevent duplicate transactions being created when the first times out
- Fix for error when changing space credentials
- Payment status now shows refunded/partially refunded
- Order delivery status now shows 'open' instead of 'hold'
# 6.1.11
- Implement payment page integration.
- Fixed bug with duplicate payment methods appearing
@@ -141,7 +235,7 @@
- Added settings to control update of webhooks and payment methods
# 4.0.15
- Adjust VRPay/SW6 documentation - how to do refunds
- Adjust VR Payment/SW6 documentation - how to do refunds
# 4.0.14
- Support for Shopware 6.4.6
+87 -1
View File
@@ -1,3 +1,89 @@
# 7.3.4
- Kompatibel mit Shopware 6.7.10.0
- Problem behoben, bei dem der Warenkorb beim Ändern der Zahlungsmethode verloren ging
- Fehlerhafte Referenzierung der Funktion getState() behoben
- Problem behoben, bei dem der Cache nach Zahlungsfehlern nicht geleert wurde
- Fehlende Versandkosten behoben
- Kleinere Korrektur eines Fehlers mit der Kunden-ID (null)
# 7.3.3
- Kompatibel mit Shopware 6.7.9.0
- Problem behoben, dass im Selektor nur 25 Vertriebskanäle angezeigt wurden
- Fehler behoben, der gelegentlich dazu führte, dass Rabatte Zahlungsmethoden blockierten
# 7.3.2
- Problem mit Teilrückerstattungen über die Standardrückerstattungsoption behoben
- Problem mit undefiniertem Array-Schlüssel behoben
- Problem mit einziehenden Zahlungen behoben
- Konkrete Klasse durch Verwendung einer Schnittstelle korrigiert
# 7.3.1
- Kompatibilität mit Shopware 6.7.7.0
- Fehlende Zahlungssymbole behoben
- Problem mit „Gesamtes Set“-Gutscheinen aufgrund von Summenabweichungen behoben
- Problem mit verwaisten Bestelltransaktionen behoben, die zu einem Fehler in der Admin-Oberfläche führten
- Ein Fehler wurde behoben, der auftrat, wenn nicht angemeldete Kunden versuchten, eine Rechnung herunterzuladen.
# 7.3.0
- Headless Storefront unterstützung
# 7.2.0
- Datenbanktabelle umbenannt, um Namenskonflikte mit älteren Plugins zu vermeiden.
- Problem mit fehlgeschlagenen Rückerstattungen bei Zahlungen mit Rechnungen behoben.
# 7.1.6
- Verbesserte Rundungsbehandlung für zwei Dezimalstellen
- Entfernte Verweise auf ungenutzte Klassen
- Behebung einiger Typfehler
- Weitere Verbesserung von Transaktionen mit dem Betrag 0 und Zustandsübergängen
# 7.1.5
- Verbesserte Analysefunktionen
- Verbesserte Fehlerbehandlung bei Rückerstattungen von 0 Beträgen und zu vielen Artikeln
# 7.1.4
- Aktualisiertes SDK - 4.8.1
# 7.1.3
Problem behoben, bei dem die Einstellungen von Optionsfeldern/Schaltern nicht gespeichert wurden.
Problem behoben, bei dem nach fehlgeschlagenen Zahlungen sporadisch ein Fehlerbildschirm angezeigt wurde.
# 7.1.2
- Unterstützung der Möglichkeit, unterschiedliche Bereiche für verschiedene Vertriebskanäle zu nutzen.
- Problem behoben, bei dem Twint manchmal nicht angezeigt wurde.
# 7.1.1
- Dokumentation aktualisiert
- Problem behoben, bei dem Adressen nicht korrekt synchronisiert wurden.
# 7.1.0
Unterstützung für Abonnement-Zahlungsmethoden
Support für Shopware 6.7.2.0
Problem mit fehlerhafter Bearbeitung der Versandkosten behoben
# 7.0.1
- Plugin-Versionsmetrik hinzugefügt
- Fehlermeldung behoben, wenn der Rückerstattungsbetrag den Gesamtbetrag überschreitet
- Fehler behoben, bei dem nur 25 Vertriebskanäle in der Dropdown-Liste angezeigt wurden
- Fehlerhafte Protokolle entfernt
# 7.0.0
- Kompatibilität mit Shopware 6.7.0
# 6.1.14
Warenkorb neu erstellen für Headless Storefront Order deaktivieren
Der korrekte Ausnahmetyp wurde zur Finalisierungsmethode hinzugefügt
# 6.1.13
Englische Dokumentation aktualisiert
Französische, deutsche und italienische Dokumentation hinzugefügt
# 6.1.12
- Kompatibilität mit 6.6.10.x
- Verhindern Sie, dass beim ersten Timeout doppelte Transaktionen erstellt werden
- Fehler beim Ändern der Space-Anmeldeinformationen behoben
- Der Zahlungsstatus zeigt jetzt „erstattet/teilweise erstattet“ an
- Der Lieferstatus der Bestellung wird jetzt „Offen“ statt „Halten“ angezeigt.
# 6.1.11
- Integration der Zahlungsseite implementieren.
- Fehler mit doppelten angezeigten Zahlungsmethoden behoben
@@ -139,7 +225,7 @@
- Einstellungen zur Steuerung der Aktualisierung von Webhooks und Zahlungsmethoden hinzugefügt
# 4.0.15
- VRPay/SW6-Dokumentation anpassen wie man Rückerstattungen durchführt
- VR Payment/SW6-Dokumentation anpassen wie man Rückerstattungen durchführt
# 4.0.14
- Unterstützung für Shopware 6.4.6
+1 -1
View File
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2025 VR Payment GmbH
Copyright 2026 VR Payment GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
+99 -46
View File
@@ -1,79 +1,132 @@
VRPayment Payment for Shopware 6
VR Payment Integration for Shopware 6
=============================
The VRPayment Payment plugin wraps around the VRPayment API. This library facilitates your interaction with various services such as transactions.
Please note that this plugin is for versions 6.5 and 6.6. For the 6.4 plugin please visit [our Shopware 6.4 plugin](https://github.com/vr-payment/shopware-6-4).
The VR Payment plugin wraps around the VR Payment API. This library facilitates your interaction with various services such as transactions.
Please note that this plugin is for versions 6.5, 6.6 or 6.7. For the 6.4 plugin please visit [our Shopware 6.4 plugin](https://github.com/vr-payment/shopware-6-4).
## Requirements
- Shopware 6.5.x or Shopware 6.6.x. See table below.
- Shopware 6.7.x, 6.6.x or 6.5.x. See table below.
- PHP minimum version supported by the each shop version.
## Supported versions
## Documentation
___________________________________________________________________________________
| Shopware 6 version | Plugin major version | Supported until |
|-------------------------------|------------------------|------------------------|
| Shopware 6.6.x | 6.x | Further notice |
| Shopware 6.5.x | 5.x | October 2024 |
-----------------------------------------------------------------------------------
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.4/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.4/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.4/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.4/docs/it/documentation.html)
## Installation
You can use **Composer** or **install manually**
### Composer
The preferred method is via [composer](https://getcomposer.org). Follow the
[installation instructions](https://getcomposer.org/doc/00-intro.md) if you do not already have
composer installed.
Once composer is installed, execute the following command from the shop root to install the plugin:
### **Via Composer (Recommended)**
1. Navigate to your Shopware root directory.
2. Run:
```bash
Copy
composer require vrpayment/shopware-6
php bin/console plugin:refresh
php bin/console plugin:install --activate --clearCache VRPaymentPayment
```
#### Update via composer
```bash
composer update vrpayment/shopware-6
php bin/console plugin:refresh
php bin/console plugin:install --activate --clearCache VRPaymentPayment
php bin/console plugin:install --activate --clearCache VRPayment
```
### Manual Installation
Alternatively you can download the package in its entirety. The [Releases](../../releases) page lists all stable versions.
Uncompress the zip file you download, and include the autoloader in your project:
1. Download the latest [Release](../../releases)
2. Extract the ZIP to custom/plugins/VRPayment.
```bash
# unzip to ShopwareInstallDir/custom/plugins/VRPaymentPayment
# For versions 6.1.10 and older, the SDK is installed automatically when installing the plugin in the shop, so you don't need to
# run the following command.
composer require vrpayment/sdk 4.6.0
php bin/console plugin:refresh
php bin/console plugin:install --activate --clearCache VRPaymentPayment
Copy
bin/console plugin:refresh
bin/console plugin:install --activate --clearCache VRPayment
```
## Usage
The library needs to be configured with your account's space id, user id, and application key which are available in your VRPayment
account dashboard.
## Update
### Logs and debugging
To view the logs please run the command below:
### Via Administration
1. Go to Shopware Admin > Extensions > My extensions.
2. Find VRPaymentPayment.
3. Click Update.
### Via CLI
1. Deploy the new plugin files (replace the folder in custom/plugins/VRPaymentPayment or upload/install a new ZIP).
2. Run:
```bash
cd shopware/install/dir
tail -f var/log/vrpayment_payment*.log
bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear
```
## Documentation
## Configuration
### API Credentials
[Documentation](https://gateway.vr-payment.de/doc/shopware-6/6.1.11/docs/en/documentation.html)
1. Navigate to Shopware Admin > Settings > VRPayment.
2. Enter your Space ID, User ID, and API Key (obtained from the [VR Payment Portal](https://gateway.vr-payment.de/)).
### VRPayment does not appear in Settings
1. You should run the following commmand
```bash
Copy
bin/build-administration.sh
```
### Payment Methods
Configure supported methods (e.g., credit cards, Apple Pay) via the [VR Payment Portal](https://gateway.vr-payment.de/).
### Key Features
**iFrame Integration**: Embed payment forms directly into your checkout.
**Refunds & Captures**: Trigger full/partial refunds and captures from Shopware or the [VR Payment Portal](https://gateway.vr-payment.de/).
**Multi-Store Support**: Manage configurations across multiple stores.
**Automatic Updates**: Payment methods sync dynamically via the VRPayment API.
**Subscriptions**: Make recurring payments with Subscriptions (Shopware Commercial) and VRPayment.
## Compatibiliity
___________________________________________________________________________________
| Shopware 6 version | Plugin major version | Supported until |
|-------------------------------|------------------------|------------------------|
| Shopware 6.7.x | 7.x | Further notice |
| Shopware 6.6.x | 6.x | March 2026 |
| Shopware 6.5.x | 5.x | October 2024 |
-----------------------------------------------------------------------------------
### Troubleshooting
**Logs**: Check payment logs with:
```bash
Copy
tail -f var/log/vrpayment*.log
```
### Common Issues:
Ensure composer update vrpayment/shopware-6 is run after updates.
Verify API credentials match your VRPayment account.
## FAQs
**Q: Does this plugin support one-click payments?**
A: Yes, via tokenization in the VRPayment Portal.
**Q: How do I handle PCI compliance?**
A: The plugin uses iFrame integration, reducing PCI requirements to SAQ-A.
### Changelog
For version-specific updates, see the [GitHub Releases](https://github.com/vr-payment/shopware-6/releases).
### Contributing
Report issues via GitHub Issues.
Follow the Shopware Plugin Base Guide for development.
This template combines technical clarity with user-friendly guidance. For advanced customization (e.g., overriding templates or payment handlers), refer to the Shopware Documentation.
## License
+62 -62
View File
@@ -1,63 +1,63 @@
{
"authors": [
{
"homepage": "https://www.vr-payment.de/",
"name": "VRPay"
}
],
"autoload": {
"psr-4": {
"VRPaymentPayment\\": "src/"
}
},
"description": "VRPayment integration for Shopware 6",
"extra": {
"copyright": "(c) by VRPay",
"description": {
"de-DE": "VRPayment integration f\u00fcr Shopware 6",
"en-GB": "VRPayment integration for Shopware 6",
"fr-FR": "Int\u00e9gration de VRPayment pour Shopware 6",
"it-IT": "Integrazione VRPayment per Shopware"
},
"label": {
"de-DE": "VRPayment Produkte f\u00fcr Shopware 6",
"en-GB": "VRPayment Products for Shopware 6",
"fr-FR": "VRPayment Produits for Shopware 6",
"it-IT": "VRPayment Prodotti per Shopware 6"
},
"manufacturerLink": {
"de-DE": "https://www.vr-payment.de/",
"en-GB": "https://www.vr-payment.de/",
"fr-FR": "https://www.vr-payment.de/",
"it-IT": "https://www.vr-payment.de/"
},
"supportLink": {
"de-DE": "https://www.vr-payment.de/hotline",
"en-GB": "https://www.vr-payment.de/hotline",
"fr-FR": "https://www.vr-payment.de/hotline",
"it-IT": "https://www.vr-payment.de/hotline"
},
"shopware-plugin-class": "VRPaymentPayment\\VRPaymentPayment"
},
"homepage": "https://www.vr-payment.de//",
"keywords": [
"VRPay",
"payment",
"php",
"shopware"
],
"license": "Apache-2.0",
"name": "vrpayment/shopware-6",
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"php": ">=8.2",
"shopware/core": "6.6.*",
"shopware/administration": "~6.6.0",
"shopware/storefront": "6.6.*",
"vrpayment/sdk": "4.6.0"
},
"type": "shopware-platform-plugin",
"version": "6.1.11"
}
"authors": [
{
"homepage": "https://www.vr-payment.de/",
"name": "VR Payment"
}
],
"autoload": {
"psr-4": {
"VRPaymentPayment\\": "src/"
}
},
"description": "VRPayment integration for Shopware 6",
"extra": {
"copyright": "(c) by VR Payment",
"description": {
"de-DE": "VRPayment integration für Shopware 6",
"en-GB": "VRPayment integration for Shopware 6",
"fr-FR": "Intégration de VRPayment pour Shopware 6",
"it-IT": "Integrazione VRPayment per Shopware"
},
"label": {
"de-DE": "VRPayment Produkte für Shopware 6",
"en-GB": "VRPayment Products for Shopware 6",
"fr-FR": "VRPayment Produits for Shopware 6",
"it-IT": "VRPayment Prodotti per Shopware 6"
},
"manufacturerLink": {
"de-DE": "https://www.vr-payment.de/",
"en-GB": "https://www.vr-payment.de/",
"fr-FR": "https://www.vr-payment.de/",
"it-IT": "https://www.vr-payment.de/"
},
"supportLink": {
"de-DE": "https://www.vr-payment.de/hotline",
"en-GB": "https://www.vr-payment.de/hotline",
"fr-FR": "https://www.vr-payment.de/hotline",
"it-IT": "https://www.vr-payment.de/hotline"
},
"shopware-plugin-class": "VRPaymentPayment\\VRPaymentPayment"
},
"homepage": "https://www.vr-payment.de//",
"keywords": [
"VR Payment",
"payment",
"php",
"shopware"
],
"license": "Apache-2.0",
"name": "vrpayment/shopware-6",
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"php": ">=8.2",
"shopware/core": "~6.7.0",
"shopware/administration": "~6.7.0",
"shopware/storefront":"~6.7.0",
"vrpayment/sdk": "^4.0.0"
},
"type": "shopware-platform-plugin",
"version": "7.3.4"
}
+692
View File
@@ -0,0 +1,692 @@
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 100%;
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent;
}
@-ms-viewport {
width: device-width;
}
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1rem;
font-weight: 300;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
padding-right: 0 !important;
position: relative;
}
html,body {
width: 100%;
height: 100%;
}
[tabindex="-1"]:focus {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
h1 {
font-size: 2.5rem;
font-weight: 200;
margin-bottom: 1.875rem;
}
h2 {
font-size: 1.625rem;
font-weight: 300;
margin-bottom: 1.3rem;
}
h3 {
font-size: 1.3rem;
font-weight: 300;
margin-top: 1.3rem;
}
h4 {
font-size: 1.125rem;
font-weight: 400;
margin-top: 1.875rem;
margin-bottom: 1.3rem;
}
h5 {
font-size: 1rem;
font-weight: bold;
margin-top: 1.875rem;
margin-bottom: 1.3rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title], abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol, ul, dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol, ul ul, ol ul, ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
dfn {
font-style: italic;
}
b, strong {
font-weight: bold;
}
small {
font-size: 80%;
}
sub, sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre, code, kbd, samp {
font-family: monospace, monospace;
font-size: 90%;
padding: 2px 4px 2px 4px;
color: #c7254e;
background-color: #f9f2f4;
border-radius: 4px;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
table {
border-collapse: collapse;
background-color: transparent;
}
caption {
padding-top: 8px;
padding-bottom: 8px;
color: #a7a7a7;
text-align: left;
}
th {
text-align: left;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
table col[class*="col-"] {
position: static;
float: none;
display: table-column;
}
table td[class*="col-"],table th[class*="col-"] {
position: static;
float: none;
display: table-cell;
}
ol.glossary {
counter-reset: glossary-counter;
list-style: none;
padding-left: 40px;
}
ol.glossary li {
counter-increment: glossary-counter;
position: relative;
}
ol.glossary li::before {
content: counter(glossary-counter);
position: absolute;
background-color: #73EAA9;
color: #fff;
border-radius: 100px;
width: 24px;
left: -40px;
text-align: center;
font-weight: bold;
line-height: 24px;
}
.layout-wrapper {
position: relative;
width: 100%;
height: auto;
min-height: 100%;
}
.layout-title {
padding: 1.875rem 0;
border-bottom: 1px solid #f0f0f0;
}
.layout-title h1 {
font-size: 3rem;
font-weight: 200;
text-align: center;
margin: 0;
}
.layout-title h2 {
font-size: 2rem;
font-weight: 200;
text-align: center;
color: #999;
margin-bottom: 0;
}
.layout-navigation .nav {
padding: 1.875rem 0;
border-bottom: 1px solid #f0f0f0;
text-align: center;
background: #fff;
z-index: 1000;
}
.layout-navigation .nav > li {
display: inline-block;
}
.layout-navigation .nav > li > a {
border: 1px solid #007bff;
border-radius: 100px;
padding: 6px 12px;
margin: 0 8px;
}
.layout-navigation .nav > li > a:hover, .layout-navigation .nav > li > a:active, .layout-navigation .nav > li > a:focus {
border: 1px solid #0056b3;
color: #0056b3;
text-decoration: none;
}
.layout-content {
position: relative;
}
.layout-content:before, .layout-content:after {
content: " ";
display: table;
}
.layout-content:after {
clear: both;
}
.layout-content .col-right {
width: 25%;
float: right;
}
.layout-content .col-right-wrapper {
width: 100%;
position: relative;
overflow-x: hidden;
overflow-y: auto;
padding: 2.5rem 2rem 0;
}
.layout-content .col-body {
width: 75%;
float: left;
}
.layout-content .col-body:before, .layout-content .col-body:after {
content: " ";
display: table;
}
.layout-content .col-body:after {
clear: both;
}
.layout-content .col-body-wrapper {
position: relative;
width: 100%;
padding: 2.5rem 2rem 0;
}
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
line-height: 2;
}
.table-of-contents {
padding: 1.25rem 0;
}
.table-of-contents .nav > li > a {
display: flex;
}
.table-of-contents .nav > li > a .item-number {
display: none;
}
.table-of-contents .nav > li > a .item-title {
color: #212529;
overflow: hidden;
text-overflow: ellipsis;
flex-grow: 1;
white-space: nowrap;
}
.table-of-contents .nav > li > a .item-title:hover {
color: #0056b3;
}
.table-of-contents .nav > li.extended > a .item-title, .table-of-contents .nav > li.active > a .item-title, .table-of-contents .nav > li.extended > a .item-title:hover, .table-of-contents .nav > li.active > a .item-title:hover {
color: #007bff;
}
.table-of-contents > .nav > li > .nav {
display: none;
margin-bottom: 0.5rem;
}
.table-of-contents > .nav > li > .nav > li > a {
padding-left: 1rem;
}
.table-of-contents > .nav > li > .nav > li > a .item-title {
font-size: 0.875rem;
}
.table-of-contents > .nav > li > .nav > li > .nav > li > a {
padding-left: 2rem;
}
.table-of-contents > .nav > li > .nav > li > .nav > li > a .item-title {
font-size: 0.75rem;
}
.table-of-contents > .nav > li.active > .nav {
display: block;
}
.chapter {
margin: 0 0 6rem;
font-weight: 300;
}
.section {
margin-top: 3rem;
}
.chapter > .chapter-title h1, .chapter > .chapter-title h2, .chapter > .chapter-title h3, .chapter > .chapter-title h4, .chapter > .chapter-title h5, .chapter > .chapter-title h6, .section > .section-title h1, .section > .section-title h2, .section > .section-title h3, .section > .section-title h4, .section > .section-title h5, .section > .section-title h6 {
margin-top: 0;
}
.chapter > .chapter-title h1 {
border-bottom: 2px solid #eeeeee;
margin-bottom: 1.5rem;
padding-bottom: 0.2em;
}
.chapter-title .title-number, .section-title .title-number {
display: none;
}
.paragraph {
line-height: 1.75em;
}
.paragraph + .paragraph {
margin-top: 1em;
}
.dlist {
margin-top: 30px;
}
.dlist dl dt {
float: left;
width: 160px;
clear: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dlist dl dd {
margin-left: 180px;
}
.ulist {
margin-top: 30px;
}
.imageblock {
margin: 30px auto;
}
.imageblock .content img {
max-width: 100%;
}
.imageblock .title {
padding: 10px 0 0;
}
.exampleblock, .quoteblock, .literalblock {
background: #f5f4f4;
padding: 20px;
margin: 30px 0;
}
.exampleblock .title, .quoteblock .title, .literalblock .title {
text-transform: uppercase;
font-size: 0.75em;
font-weight: 400;
color: #979797;
margin-bottom: 10px;
}
.quoteblock blockquote {
margin: 0;
padding: 0;
border: 0;
font-size: inherit;
}
.quoteblock blockquote p:last-child, .quoteblock blockquote ul:last-child, .quoteblock blockquote ol:last-child {
margin-bottom: 9px;
}
.literalblock pre {
border: 0;
padding: 0;
margin: 0;
}
.listingblock {
margin: 30px 0;
}
.listingblock pre {
border: 0;
padding: 0;
margin: 0;
}
.listingblock pre code {
display: block;
padding: 20px;
}
.admonitionblock {
line-height: 1.8em;
padding: 20px;
margin: 30px 0;
}
.admonitionblock .icon {
display: none;
}
.admonitionblock.important {
background: #fce1e1;
border-left: 5px solid #ff6060;
}
.admonitionblock.note, .admonitionblock.tip {
background: #e0f2fc;
border-left: 5px solid #88d5ff;
}
.admonitionblock.caution, .admonitionblock.warning {
background: #fdf3d8;
border-left: 5px solid #f1c654;
}
table.tableblock {
background-color: #fff;
width: 100%;
max-width: 100%;
margin-bottom: 18px;
margin: 30px 0;
}
table.tableblock > thead > tr > th, table.tableblock > tbody > tr > th, table.tableblock > tfoot > tr > th, table.tableblock > thead > tr > td, table.tableblock > tbody > tr > td, table.tableblock > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #eee;
}
table.tableblock > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #eee;
}
table.tableblock > caption + thead > tr:first-child > th, table.tableblock > colgroup + thead > tr:first-child > th, table.tableblock > thead:first-child > tr:first-child > th, table.tableblock > caption + thead > tr:first-child > td, table.tableblock > colgroup + thead > tr:first-child > td, table.tableblock > thead:first-child > tr:first-child > td {
border-top: 0;
}
table.tableblock > tbody + tbody {
border-top: 2px solid #eee;
}
table.tableblock .table {
background-color: #fff;
}
table.tableblock > tbody > tr:nth-of-type(odd) {
background-color: #f7f7f7;
}
table.tableblock > thead > tr > th p:last-child, table.tableblock > tbody > tr > th p:last-child, table.tableblock > tfoot > tr > th p:last-child, table.tableblock > thead > tr > td p:last-child, table.tableblock > tbody > tr > td p:last-child, table.tableblock > tfoot > tr > td p:last-child {
margin-bottom: 0;
}
.loaded .table-of-contents .nav .nav {
display: none;
}
@media (min-width: 1200px) {
.layout-wrapper .layout-title, .layout-wrapper .layout-navigation, .layout-wrapper .layout-content {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
}
@media (max-width: 991px) {
html {
font-size: 90%;
}
.layout-content .col-right {
display: none;
}
.layout-content .col-body {
width: 100%;
}
}
@media print {
body {
color: #000;
font-family: Georgia, "Times New Roman", Times, serif;
}
a {
color: #000;
}
h1 {
font-size: 1.6rem;
}
h2 {
font-size: 1.4rem;
}
h3 {
font-size: 1.2rem;
}
h4 {
font-size: 1rem;
}
h5 {
font-size: 0.9rem;
}
.layout-title h1 {
font-size: 2rem;
}
.layout-content .col-right {
display: none;
}
.layout-content .col-body {
width: 100%;
}
.chapter {
margin-bottom: 3rem;
}
.section {
margin-top: 2rem;
}
}
+14
View File
@@ -0,0 +1,14 @@
(function($){
hljs.initHighlightingOnLoad();
$(document).ready(function(){
$('.col-right-wrapper').stick_in_parent({
parent: '.layout-content'
});
$('body').scrollspy({
target: '.table-of-contents'
});
});
})(jQuery);
File diff suppressed because one or more lines are too long
+2
View File
File diff suppressed because one or more lines are too long
+83
View File
@@ -0,0 +1,83 @@
/*
Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #23241f;
}
.hljs,
.hljs-tag,
.hljs-subst {
color: #f8f8f2;
}
.hljs-strong,
.hljs-emphasis {
color: #a8a8a2;
}
.hljs-bullet,
.hljs-quote,
.hljs-number,
.hljs-regexp,
.hljs-literal,
.hljs-link {
color: #ae81ff;
}
.hljs-code,
.hljs-title,
.hljs-section,
.hljs-selector-class {
color: #a6e22e;
}
.hljs-strong {
font-weight: bold;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-name,
.hljs-attr {
color: #f92672;
}
.hljs-symbol,
.hljs-attribute {
color: #66d9ef;
}
.hljs-params,
.hljs-class .hljs-title {
color: #f8f8f2;
}
.hljs-string,
.hljs-type,
.hljs-built_in,
.hljs-builtin-name,
.hljs-selector-id,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-addition,
.hljs-variable,
.hljs-template-variable {
color: #e6db74;
}
.hljs-comment,
.hljs-deletion,
.hljs-meta {
color: #75715e;
}
+9
View File
@@ -0,0 +1,9 @@
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.7
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
!function(r){"use strict";function o(t,s){this.$body=r(document.body),this.$scrollElement=r(t).is(document.body)?r(window):r(t),this.options=r.extend({},o.DEFAULTS,s),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",r.proxy(this.process,this)),this.refresh(),this.process()}function s(i){return this.each(function(){var t=r(this),s=t.data("bs.scrollspy"),e="object"==typeof i&&i;s||t.data("bs.scrollspy",s=new o(this,e)),"string"==typeof i&&s[i]()})}o.VERSION="3.3.7",o.DEFAULTS={offset:10},o.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},o.prototype.refresh=function(){var t=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),r.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=r(this),s=t.data("target")||t.attr("href"),e=/^#./.test(s)&&r(s);return e&&e.length&&e.is(":visible")&&[[e[i]().top+o,s]]||null}).sort(function(t,s){return t[0]-s[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},o.prototype.process=function(){var t,s=this.$scrollElement.scrollTop()+this.options.offset,e=this.getScrollHeight(),i=this.options.offset+e-this.$scrollElement.height(),o=this.offsets,r=this.targets,l=this.activeTarget;if(this.scrollHeight!=e&&this.refresh(),i<=s)return l!=(t=r[r.length-1])&&this.activate(t);if(l&&s<o[0])return this.activeTarget=null,this.clear();for(t=o.length;t--;)l!=r[t]&&s>=o[t]&&(void 0===o[t+1]||s<o[t+1])&&this.activate(r[t])},o.prototype.activate=function(t){this.activeTarget=t,this.clear();var s=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',e=r(s).parents("li").addClass("active");e.parent(".dropdown-menu").length&&(e=e.closest("li.dropdown").addClass("active")),e.trigger("activate.bs.scrollspy")},o.prototype.clear=function(){r(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=r.fn.scrollspy;r.fn.scrollspy=s,r.fn.scrollspy.Constructor=o,r.fn.scrollspy.noConflict=function(){return r.fn.scrollspy=t,this},r(window).on("load.bs.scrollspy.data-api",function(){r('[data-spy="scroll"]').each(function(){var t=r(this);s.call(t,t.data())})})}(jQuery);
+5
View File
@@ -0,0 +1,5 @@
/**
@license Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
*/
(function(){var M,Q;M=this.jQuery||window.jQuery,Q=M(window),M.fn.stick_in_parent=function(t){var x,o,C,i,e,P,s,V,F,z,r,I,A,j;for(null==t&&(t={}),j=t.sticky_class,P=t.inner_scrolling,A=t.recalc_every,I=t.parent,F=t.offset_top,z=t.offset_bottom,V=t.spacer,C=t.bottoming,null==F&&(F=0),null==z&&(z=0),null==I&&(I=void 0),null==P&&(P=!0),null==j&&(j="is_stuck"),x=M(document),null==C&&(C=!0),r=function(t){var o,i;return window.getComputedStyle?(t[0],o=window.getComputedStyle(t[0]),i=parseFloat(o.getPropertyValue("width"))+parseFloat(o.getPropertyValue("margin-left"))+parseFloat(o.getPropertyValue("margin-right")),"border-box"!==o.getPropertyValue("box-sizing")&&(i+=parseFloat(o.getPropertyValue("border-left-width"))+parseFloat(o.getPropertyValue("border-right-width"))+parseFloat(o.getPropertyValue("padding-left"))+parseFloat(o.getPropertyValue("padding-right"))),i):t.outerWidth(!0)},i=function(n,l,a,c,p,d,u,f){var h,t,g,m,k,y,b,v,o,_,w,e;if(!n.data("sticky_kit")){if(n.data("sticky_kit",!0),k=x.height(),b=n.parent(),null!=I&&(b=b.closest(I)),!b.length)throw"failed to find stick parent";return h=g=!1,(w=null!=V?V&&n.closest(V):M('<div class="sticky-kit-manual-spacer" />'))&&w.css("position",n.css("position")),(v=function(){var t,o,i;if(!f)return k=x.height(),t=parseInt(b.css("border-top-width"),10),o=parseInt(b.css("padding-top"),10),l=parseInt(b.css("padding-bottom"),10),a=b.offset().top+t+o,c=b.height(),g&&(h=g=!1,null==V&&(n.insertAfter(w),w.detach()),n.css({position:"",top:"",width:"",bottom:""}).removeClass(j),i=!0),p=n.offset().top-(parseInt(n.css("margin-top"),10)||0)-F,d=n.outerHeight(!0),u=n.css("float"),w&&w.css({width:r(n),height:d,display:n.css("display"),"vertical-align":n.css("vertical-align"),float:u}),i?e():void 0})(),m=void 0,y=F,_=A,e=function(){var t,o,i,e,s,r;if(d!==c&&!f)return i=!1,null!=_&&(_-=1)<=0&&(_=A,v(),i=!0),i||x.height()===k||(v(),i=!0),e=Q.scrollTop(),null!=m&&(o=e-m),m=e,g?(C&&(s=c+a<e+d+y+z,h&&!s&&(h=!1,n.css({position:"fixed",bottom:"",top:y}).removeClass("is_bottomed").trigger("sticky_kit:unbottom"))),e<p&&(g=!1,y=F,null==V&&("left"!==u&&"right"!==u||n.insertAfter(w),w.detach()),t={position:"",width:"",top:""},n.css(t).removeClass(j).trigger("sticky_kit:unstick")),P&&(r=Q.height())<d+F&&(h||(y-=o,y=Math.max(r-d,y),y=Math.min(F,y),g&&n.css({top:y+"px"})))):p<e&&(g=!0,(t={position:"fixed",top:y}).width="border-box"===n.css("box-sizing")?n.outerWidth()+"px":n.width()+"px",n.css(t).addClass(j),null==V&&(n.after(w),"left"!==u&&"right"!==u||w.append(n)),n.trigger("sticky_kit:stick")),g&&C&&(null==s&&(s=c+a<e+d+y+z),!h&&s)?(h=!0,"static"===b.css("position")&&b.css({position:"relative"}),n.css({position:"absolute",bottom:l+z,top:"auto"}).addClass("is_bottomed").trigger("sticky_kit:bottom")):void 0},o=function(){return v(),e()},t=function(){if(f=!0,Q.off("touchmove",e),Q.off("scroll",e),Q.off("resize",o),M(document.body).off("sticky_kit:recalc",o),n.off("sticky_kit:detach",t),n.removeData("sticky_kit"),n.css({position:"",bottom:"",top:"",width:""}),b.position("position",""),g)return null==V&&("left"!==u&&"right"!==u||n.insertAfter(w),w.remove()),n.removeClass(j)},Q.on("touchmove",e),Q.on("scroll",e),Q.on("resize",o),M(document.body).on("sticky_kit:recalc",o),n.on("sticky_kit:detach",t),setTimeout(e,0)}},e=0,s=this.length;e<s;e++)o=this[e],i(M(o));return this}}).call(this);
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

+704 -273
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

+692
View File
@@ -0,0 +1,692 @@
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 100%;
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: transparent;
}
@-ms-viewport {
width: device-width;
}
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1rem;
font-weight: 300;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
padding-right: 0 !important;
position: relative;
}
html,body {
width: 100%;
height: 100%;
}
[tabindex="-1"]:focus {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
h1 {
font-size: 2.5rem;
font-weight: 200;
margin-bottom: 1.875rem;
}
h2 {
font-size: 1.625rem;
font-weight: 300;
margin-bottom: 1.3rem;
}
h3 {
font-size: 1.3rem;
font-weight: 300;
margin-top: 1.3rem;
}
h4 {
font-size: 1.125rem;
font-weight: 400;
margin-top: 1.875rem;
margin-bottom: 1.3rem;
}
h5 {
font-size: 1rem;
font-weight: bold;
margin-top: 1.875rem;
margin-bottom: 1.3rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title], abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol, ul, dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol, ul ul, ol ul, ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
dfn {
font-style: italic;
}
b, strong {
font-weight: bold;
}
small {
font-size: 80%;
}
sub, sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre, code, kbd, samp {
font-family: monospace, monospace;
font-size: 90%;
padding: 2px 4px 2px 4px;
color: #c7254e;
background-color: #f9f2f4;
border-radius: 4px;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
table {
border-collapse: collapse;
background-color: transparent;
}
caption {
padding-top: 8px;
padding-bottom: 8px;
color: #a7a7a7;
text-align: left;
}
th {
text-align: left;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
table col[class*="col-"] {
position: static;
float: none;
display: table-column;
}
table td[class*="col-"],table th[class*="col-"] {
position: static;
float: none;
display: table-cell;
}
ol.glossary {
counter-reset: glossary-counter;
list-style: none;
padding-left: 40px;
}
ol.glossary li {
counter-increment: glossary-counter;
position: relative;
}
ol.glossary li::before {
content: counter(glossary-counter);
position: absolute;
background-color: #73EAA9;
color: #fff;
border-radius: 100px;
width: 24px;
left: -40px;
text-align: center;
font-weight: bold;
line-height: 24px;
}
.layout-wrapper {
position: relative;
width: 100%;
height: auto;
min-height: 100%;
}
.layout-title {
padding: 1.875rem 0;
border-bottom: 1px solid #f0f0f0;
}
.layout-title h1 {
font-size: 3rem;
font-weight: 200;
text-align: center;
margin: 0;
}
.layout-title h2 {
font-size: 2rem;
font-weight: 200;
text-align: center;
color: #999;
margin-bottom: 0;
}
.layout-navigation .nav {
padding: 1.875rem 0;
border-bottom: 1px solid #f0f0f0;
text-align: center;
background: #fff;
z-index: 1000;
}
.layout-navigation .nav > li {
display: inline-block;
}
.layout-navigation .nav > li > a {
border: 1px solid #007bff;
border-radius: 100px;
padding: 6px 12px;
margin: 0 8px;
}
.layout-navigation .nav > li > a:hover, .layout-navigation .nav > li > a:active, .layout-navigation .nav > li > a:focus {
border: 1px solid #0056b3;
color: #0056b3;
text-decoration: none;
}
.layout-content {
position: relative;
}
.layout-content:before, .layout-content:after {
content: " ";
display: table;
}
.layout-content:after {
clear: both;
}
.layout-content .col-right {
width: 25%;
float: right;
}
.layout-content .col-right-wrapper {
width: 100%;
position: relative;
overflow-x: hidden;
overflow-y: auto;
padding: 2.5rem 2rem 0;
}
.layout-content .col-body {
width: 75%;
float: left;
}
.layout-content .col-body:before, .layout-content .col-body:after {
content: " ";
display: table;
}
.layout-content .col-body:after {
clear: both;
}
.layout-content .col-body-wrapper {
position: relative;
width: 100%;
padding: 2.5rem 2rem 0;
}
.nav {
padding-left: 0;
margin-bottom: 0;
list-style: none;
line-height: 2;
}
.table-of-contents {
padding: 1.25rem 0;
}
.table-of-contents .nav > li > a {
display: flex;
}
.table-of-contents .nav > li > a .item-number {
display: none;
}
.table-of-contents .nav > li > a .item-title {
color: #212529;
overflow: hidden;
text-overflow: ellipsis;
flex-grow: 1;
white-space: nowrap;
}
.table-of-contents .nav > li > a .item-title:hover {
color: #0056b3;
}
.table-of-contents .nav > li.extended > a .item-title, .table-of-contents .nav > li.active > a .item-title, .table-of-contents .nav > li.extended > a .item-title:hover, .table-of-contents .nav > li.active > a .item-title:hover {
color: #007bff;
}
.table-of-contents > .nav > li > .nav {
display: none;
margin-bottom: 0.5rem;
}
.table-of-contents > .nav > li > .nav > li > a {
padding-left: 1rem;
}
.table-of-contents > .nav > li > .nav > li > a .item-title {
font-size: 0.875rem;
}
.table-of-contents > .nav > li > .nav > li > .nav > li > a {
padding-left: 2rem;
}
.table-of-contents > .nav > li > .nav > li > .nav > li > a .item-title {
font-size: 0.75rem;
}
.table-of-contents > .nav > li.active > .nav {
display: block;
}
.chapter {
margin: 0 0 6rem;
font-weight: 300;
}
.section {
margin-top: 3rem;
}
.chapter > .chapter-title h1, .chapter > .chapter-title h2, .chapter > .chapter-title h3, .chapter > .chapter-title h4, .chapter > .chapter-title h5, .chapter > .chapter-title h6, .section > .section-title h1, .section > .section-title h2, .section > .section-title h3, .section > .section-title h4, .section > .section-title h5, .section > .section-title h6 {
margin-top: 0;
}
.chapter > .chapter-title h1 {
border-bottom: 2px solid #eeeeee;
margin-bottom: 1.5rem;
padding-bottom: 0.2em;
}
.chapter-title .title-number, .section-title .title-number {
display: none;
}
.paragraph {
line-height: 1.75em;
}
.paragraph + .paragraph {
margin-top: 1em;
}
.dlist {
margin-top: 30px;
}
.dlist dl dt {
float: left;
width: 160px;
clear: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dlist dl dd {
margin-left: 180px;
}
.ulist {
margin-top: 30px;
}
.imageblock {
margin: 30px auto;
}
.imageblock .content img {
max-width: 100%;
}
.imageblock .title {
padding: 10px 0 0;
}
.exampleblock, .quoteblock, .literalblock {
background: #f5f4f4;
padding: 20px;
margin: 30px 0;
}
.exampleblock .title, .quoteblock .title, .literalblock .title {
text-transform: uppercase;
font-size: 0.75em;
font-weight: 400;
color: #979797;
margin-bottom: 10px;
}
.quoteblock blockquote {
margin: 0;
padding: 0;
border: 0;
font-size: inherit;
}
.quoteblock blockquote p:last-child, .quoteblock blockquote ul:last-child, .quoteblock blockquote ol:last-child {
margin-bottom: 9px;
}
.literalblock pre {
border: 0;
padding: 0;
margin: 0;
}
.listingblock {
margin: 30px 0;
}
.listingblock pre {
border: 0;
padding: 0;
margin: 0;
}
.listingblock pre code {
display: block;
padding: 20px;
}
.admonitionblock {
line-height: 1.8em;
padding: 20px;
margin: 30px 0;
}
.admonitionblock .icon {
display: none;
}
.admonitionblock.important {
background: #fce1e1;
border-left: 5px solid #ff6060;
}
.admonitionblock.note, .admonitionblock.tip {
background: #e0f2fc;
border-left: 5px solid #88d5ff;
}
.admonitionblock.caution, .admonitionblock.warning {
background: #fdf3d8;
border-left: 5px solid #f1c654;
}
table.tableblock {
background-color: #fff;
width: 100%;
max-width: 100%;
margin-bottom: 18px;
margin: 30px 0;
}
table.tableblock > thead > tr > th, table.tableblock > tbody > tr > th, table.tableblock > tfoot > tr > th, table.tableblock > thead > tr > td, table.tableblock > tbody > tr > td, table.tableblock > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #eee;
}
table.tableblock > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #eee;
}
table.tableblock > caption + thead > tr:first-child > th, table.tableblock > colgroup + thead > tr:first-child > th, table.tableblock > thead:first-child > tr:first-child > th, table.tableblock > caption + thead > tr:first-child > td, table.tableblock > colgroup + thead > tr:first-child > td, table.tableblock > thead:first-child > tr:first-child > td {
border-top: 0;
}
table.tableblock > tbody + tbody {
border-top: 2px solid #eee;
}
table.tableblock .table {
background-color: #fff;
}
table.tableblock > tbody > tr:nth-of-type(odd) {
background-color: #f7f7f7;
}
table.tableblock > thead > tr > th p:last-child, table.tableblock > tbody > tr > th p:last-child, table.tableblock > tfoot > tr > th p:last-child, table.tableblock > thead > tr > td p:last-child, table.tableblock > tbody > tr > td p:last-child, table.tableblock > tfoot > tr > td p:last-child {
margin-bottom: 0;
}
.loaded .table-of-contents .nav .nav {
display: none;
}
@media (min-width: 1200px) {
.layout-wrapper .layout-title, .layout-wrapper .layout-navigation, .layout-wrapper .layout-content {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
}
@media (max-width: 991px) {
html {
font-size: 90%;
}
.layout-content .col-right {
display: none;
}
.layout-content .col-body {
width: 100%;
}
}
@media print {
body {
color: #000;
font-family: Georgia, "Times New Roman", Times, serif;
}
a {
color: #000;
}
h1 {
font-size: 1.6rem;
}
h2 {
font-size: 1.4rem;
}
h3 {
font-size: 1.2rem;
}
h4 {
font-size: 1rem;
}
h5 {
font-size: 0.9rem;
}
.layout-title h1 {
font-size: 2rem;
}
.layout-content .col-right {
display: none;
}
.layout-content .col-body {
width: 100%;
}
.chapter {
margin-bottom: 3rem;
}
.section {
margin-top: 2rem;
}
}
+14
View File
@@ -0,0 +1,14 @@
(function($){
hljs.initHighlightingOnLoad();
$(document).ready(function(){
$('.col-right-wrapper').stick_in_parent({
parent: '.layout-content'
});
$('body').scrollspy({
target: '.table-of-contents'
});
});
})(jQuery);
File diff suppressed because one or more lines are too long
+2
View File
File diff suppressed because one or more lines are too long
+83
View File
@@ -0,0 +1,83 @@
/*
Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #23241f;
}
.hljs,
.hljs-tag,
.hljs-subst {
color: #f8f8f2;
}
.hljs-strong,
.hljs-emphasis {
color: #a8a8a2;
}
.hljs-bullet,
.hljs-quote,
.hljs-number,
.hljs-regexp,
.hljs-literal,
.hljs-link {
color: #ae81ff;
}
.hljs-code,
.hljs-title,
.hljs-section,
.hljs-selector-class {
color: #a6e22e;
}
.hljs-strong {
font-weight: bold;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-name,
.hljs-attr {
color: #f92672;
}
.hljs-symbol,
.hljs-attribute {
color: #66d9ef;
}
.hljs-params,
.hljs-class .hljs-title {
color: #f8f8f2;
}
.hljs-string,
.hljs-type,
.hljs-built_in,
.hljs-builtin-name,
.hljs-selector-id,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-addition,
.hljs-variable,
.hljs-template-variable {
color: #e6db74;
}
.hljs-comment,
.hljs-deletion,
.hljs-meta {
color: #75715e;
}
+9
View File
@@ -0,0 +1,9 @@
/* ========================================================================
* Bootstrap: scrollspy.js v3.3.7
* http://getbootstrap.com/javascript/#scrollspy
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
!function(r){"use strict";function o(t,s){this.$body=r(document.body),this.$scrollElement=r(t).is(document.body)?r(window):r(t),this.options=r.extend({},o.DEFAULTS,s),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",r.proxy(this.process,this)),this.refresh(),this.process()}function s(i){return this.each(function(){var t=r(this),s=t.data("bs.scrollspy"),e="object"==typeof i&&i;s||t.data("bs.scrollspy",s=new o(this,e)),"string"==typeof i&&s[i]()})}o.VERSION="3.3.7",o.DEFAULTS={offset:10},o.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},o.prototype.refresh=function(){var t=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),r.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=r(this),s=t.data("target")||t.attr("href"),e=/^#./.test(s)&&r(s);return e&&e.length&&e.is(":visible")&&[[e[i]().top+o,s]]||null}).sort(function(t,s){return t[0]-s[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},o.prototype.process=function(){var t,s=this.$scrollElement.scrollTop()+this.options.offset,e=this.getScrollHeight(),i=this.options.offset+e-this.$scrollElement.height(),o=this.offsets,r=this.targets,l=this.activeTarget;if(this.scrollHeight!=e&&this.refresh(),i<=s)return l!=(t=r[r.length-1])&&this.activate(t);if(l&&s<o[0])return this.activeTarget=null,this.clear();for(t=o.length;t--;)l!=r[t]&&s>=o[t]&&(void 0===o[t+1]||s<o[t+1])&&this.activate(r[t])},o.prototype.activate=function(t){this.activeTarget=t,this.clear();var s=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',e=r(s).parents("li").addClass("active");e.parent(".dropdown-menu").length&&(e=e.closest("li.dropdown").addClass("active")),e.trigger("activate.bs.scrollspy")},o.prototype.clear=function(){r(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=r.fn.scrollspy;r.fn.scrollspy=s,r.fn.scrollspy.Constructor=o,r.fn.scrollspy.noConflict=function(){return r.fn.scrollspy=t,this},r(window).on("load.bs.scrollspy.data-api",function(){r('[data-spy="scroll"]').each(function(){var t=r(this);s.call(t,t.data())})})}(jQuery);
+5
View File
@@ -0,0 +1,5 @@
/**
@license Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
*/
(function(){var M,Q;M=this.jQuery||window.jQuery,Q=M(window),M.fn.stick_in_parent=function(t){var x,o,C,i,e,P,s,V,F,z,r,I,A,j;for(null==t&&(t={}),j=t.sticky_class,P=t.inner_scrolling,A=t.recalc_every,I=t.parent,F=t.offset_top,z=t.offset_bottom,V=t.spacer,C=t.bottoming,null==F&&(F=0),null==z&&(z=0),null==I&&(I=void 0),null==P&&(P=!0),null==j&&(j="is_stuck"),x=M(document),null==C&&(C=!0),r=function(t){var o,i;return window.getComputedStyle?(t[0],o=window.getComputedStyle(t[0]),i=parseFloat(o.getPropertyValue("width"))+parseFloat(o.getPropertyValue("margin-left"))+parseFloat(o.getPropertyValue("margin-right")),"border-box"!==o.getPropertyValue("box-sizing")&&(i+=parseFloat(o.getPropertyValue("border-left-width"))+parseFloat(o.getPropertyValue("border-right-width"))+parseFloat(o.getPropertyValue("padding-left"))+parseFloat(o.getPropertyValue("padding-right"))),i):t.outerWidth(!0)},i=function(n,l,a,c,p,d,u,f){var h,t,g,m,k,y,b,v,o,_,w,e;if(!n.data("sticky_kit")){if(n.data("sticky_kit",!0),k=x.height(),b=n.parent(),null!=I&&(b=b.closest(I)),!b.length)throw"failed to find stick parent";return h=g=!1,(w=null!=V?V&&n.closest(V):M('<div class="sticky-kit-manual-spacer" />'))&&w.css("position",n.css("position")),(v=function(){var t,o,i;if(!f)return k=x.height(),t=parseInt(b.css("border-top-width"),10),o=parseInt(b.css("padding-top"),10),l=parseInt(b.css("padding-bottom"),10),a=b.offset().top+t+o,c=b.height(),g&&(h=g=!1,null==V&&(n.insertAfter(w),w.detach()),n.css({position:"",top:"",width:"",bottom:""}).removeClass(j),i=!0),p=n.offset().top-(parseInt(n.css("margin-top"),10)||0)-F,d=n.outerHeight(!0),u=n.css("float"),w&&w.css({width:r(n),height:d,display:n.css("display"),"vertical-align":n.css("vertical-align"),float:u}),i?e():void 0})(),m=void 0,y=F,_=A,e=function(){var t,o,i,e,s,r;if(d!==c&&!f)return i=!1,null!=_&&(_-=1)<=0&&(_=A,v(),i=!0),i||x.height()===k||(v(),i=!0),e=Q.scrollTop(),null!=m&&(o=e-m),m=e,g?(C&&(s=c+a<e+d+y+z,h&&!s&&(h=!1,n.css({position:"fixed",bottom:"",top:y}).removeClass("is_bottomed").trigger("sticky_kit:unbottom"))),e<p&&(g=!1,y=F,null==V&&("left"!==u&&"right"!==u||n.insertAfter(w),w.detach()),t={position:"",width:"",top:""},n.css(t).removeClass(j).trigger("sticky_kit:unstick")),P&&(r=Q.height())<d+F&&(h||(y-=o,y=Math.max(r-d,y),y=Math.min(F,y),g&&n.css({top:y+"px"})))):p<e&&(g=!0,(t={position:"fixed",top:y}).width="border-box"===n.css("box-sizing")?n.outerWidth()+"px":n.width()+"px",n.css(t).addClass(j),null==V&&(n.after(w),"left"!==u&&"right"!==u||w.append(n)),n.trigger("sticky_kit:stick")),g&&C&&(null==s&&(s=c+a<e+d+y+z),!h&&s)?(h=!0,"static"===b.css("position")&&b.css({position:"relative"}),n.css({position:"absolute",bottom:l+z,top:"auto"}).addClass("is_bottomed").trigger("sticky_kit:bottom")):void 0},o=function(){return v(),e()},t=function(){if(f=!0,Q.off("touchmove",e),Q.off("scroll",e),Q.off("resize",o),M(document.body).off("sticky_kit:recalc",o),n.off("sticky_kit:detach",t),n.removeData("sticky_kit"),n.css({position:"",bottom:"",top:"",width:""}),b.position("position",""),g)return null==V&&("left"!==u&&"right"!==u||n.insertAfter(w),w.remove()),n.removeClass(j)},Q.on("touchmove",e),Q.on("scroll",e),Q.on("resize",o),M(document.body).on("sticky_kit:recalc",o),n.on("sticky_kit:detach",t),setTimeout(e,0)}},e=0,s=this.length;e<s;e++)o=this[e],i(M(o));return this}}).call(this);
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show More