diff --git a/2017/11/03/UDP-SDK-Alpha-v0-1/UDP-Alpha-v0.1-With-Sample.unitypackage b/2017/11/03/UDP-SDK-Alpha-v0-1/UDP-Alpha-v0.1-With-Sample.unitypackage deleted file mode 100644 index 20f8af2..0000000 Binary files a/2017/11/03/UDP-SDK-Alpha-v0-1/UDP-Alpha-v0.1-With-Sample.unitypackage and /dev/null differ diff --git a/2017/11/03/UDP-SDK-Alpha-v0-1/index.html b/2017/11/03/UDP-SDK-Alpha-v0-1/index.html deleted file mode 100644 index 7277a2c..0000000 --- a/2017/11/03/UDP-SDK-Alpha-v0-1/index.html +++ /dev/null @@ -1,652 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.1 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.1

- - - -
- - - - - -
- - - - - -

Download#

SDK with Sample -

Change Log:#

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
-

Brief Demo#

Editor Script#

Editor script can be used to onboard client and register user.

-
    -
  1. First, open the Unity targeting our INT env (Mac OS for example):

    -
    1
    open /Applications/Unity/Unity.app --args -cloudEnvironment dev
    -
  2. -
  3. Login with an INT account which can be registered at our INT ID portal.

    -
  4. -
  5. Create a new Project (old project has to unlink the project id and generate a new one) and import the package.
  6. -
  7. Create an AppStoreSettings
  8. -
  9. Generate an Unity client and create test account.
  10. -
  11. Save all setting.
  12. -
  13. Open SampleScene
  14. -
  15. Open Window -> Unity UDP -> IAP Catalog
  16. -
  17. Add Product and click the plus sign on the upper-right (next to the x symbol) to sync with the server and get the ProductId.
  18. -
  19. Open Scripts/GameManager.cs and fill the product id in the variant SKU.
  20. -
  21. Build and open the App
  22. -
  23. Init and login are bonded together and for UDP, developer must login using the test account.
  24. -
  25. After login is succeeded, click Purchase to buy the product registered. (This flow will be optimized to avoid hard coding the product id) -
  26. -
  27. If the purchase is not consumed, it cannot be purchased again.
  28. -
  29. Click queryInventory, all the products and unconsumed purchases will be returned. In the demo, we consume the purchase here.
  30. -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-1.png b/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-1.png deleted file mode 100644 index 71905b7..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-1.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-2.png b/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-2.png deleted file mode 100644 index 4d617bc..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-2.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-3.png b/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-3.png deleted file mode 100644 index 2e79f99..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-3.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-4.png b/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-4.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/EditorScript-v0.2-4.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-INT-With-Sample.unitypackage b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-INT-With-Sample.unitypackage deleted file mode 100644 index f1c06d6..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-INT-With-Sample.unitypackage and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-STAGING-With-Sample.unitypackage b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-STAGING-With-Sample.unitypackage deleted file mode 100644 index 9749165..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Alpha-v0.2-STAGING-With-Sample.unitypackage and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Init.png b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Init.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Init.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Purchase.png b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Purchase.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Purchase.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-PurchaseError.png b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-PurchaseError.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-PurchaseError.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Query.png b/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Query.png deleted file mode 100644 index a2d7482..0000000 Binary files a/2017/11/27/UDP-SDK-Alpha-v0-2/UDP-Query.png and /dev/null differ diff --git a/2017/11/27/UDP-SDK-Alpha-v0-2/index.html b/2017/11/27/UDP-SDK-Alpha-v0-2/index.html deleted file mode 100644 index 6ee3d92..0000000 --- a/2017/11/27/UDP-SDK-Alpha-v0-2/index.html +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.2 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.2

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
-

Brief Demo#

Editor Script#

Editor script can be used to onboard client and register user.

-
    -
  1. First, open the Unity targeting our INT/STAGING environment (Mac OS for example):

    -
    1
    2
    open /Applications/Unity/Unity.app --args -cloudEnvironment dev
    open /Applications/Unity/Unity.app --args -cloudEnvironment staging
    -
  2. -
  3. Login with an INT/STAGING account which can be registered at our INT ID portal or STAGING ID Portal.

    -
  4. -
  5. Create a new Project (old project has to unlink the project id and generate a new one) and import the package.
  6. -
  7. Create an Game Settings
  8. -
  9. Generate an Unity client and create test account.
  10. -
  11. Open SampleScene
  12. -
  13. Open Window -> Unity UDP -> IAP Catalog
  14. -
  15. Add Product Draft and click Create Product to sync with the server. Price must be set in order to purchase.
  16. -
  17. Click the GameManager GameObject in the Hierarchy and fill the slug into Product_1 and Product_2. More products can also be added through GameManager.cs file.
  18. -
  19. Build and open the App
  20. -
  21. Init and login are bonded together and for UDP, developer must login using the test account.
  22. -
  23. After login is succeeded, click Buy or Buy&Consume to buy the product registered. Purchase information will be shown.
  24. -
  25. If the purchase is not consumed, it cannot be purchased again.
  26. -
  27. Click QueryInventory or Query&Consume, all the products and unconsumed purchases will be returned.
  28. -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-INT-With-Sample.unitypackage b/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-INT-With-Sample.unitypackage deleted file mode 100644 index 2f58791..0000000 Binary files a/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-INT-With-Sample.unitypackage and /dev/null differ diff --git a/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-STAGING-With-Sample.unitypackage b/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-STAGING-With-Sample.unitypackage deleted file mode 100644 index 659d3ab..0000000 Binary files a/2017/11/30/UDP-SDK-Alpha-v0-3/UDP-Alpha-v0.3-STAGING-With-Sample.unitypackage and /dev/null differ diff --git a/2017/11/30/UDP-SDK-Alpha-v0-3/index.html b/2017/11/30/UDP-SDK-Alpha-v0-3/index.html deleted file mode 100644 index 3fedb9d..0000000 --- a/2017/11/30/UDP-SDK-Alpha-v0-3/index.html +++ /dev/null @@ -1,638 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.3 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.3

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

ALpha v0.3#

    -
  • Minor UI fix
  • -
-

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-INT-With-Sample.unitypackage b/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-INT-With-Sample.unitypackage deleted file mode 100644 index 253bfbc..0000000 Binary files a/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-INT-With-Sample.unitypackage and /dev/null differ diff --git a/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-STAGING-With-Sample.unitypackage b/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-STAGING-With-Sample.unitypackage deleted file mode 100644 index 3d039aa..0000000 Binary files a/2017/12/05/UDP-SDK-Alpha-v0-4/UDP-Alpha-v0.4-STAGING-With-Sample.unitypackage and /dev/null differ diff --git a/2017/12/05/UDP-SDK-Alpha-v0-4/index.html b/2017/12/05/UDP-SDK-Alpha-v0-4/index.html deleted file mode 100644 index 56d5502..0000000 --- a/2017/12/05/UDP-SDK-Alpha-v0-4/index.html +++ /dev/null @@ -1,642 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.4 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.4

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.4#

    -
  • UI bug fix
  • -
  • Build editor script into dll.
  • -
-

Alpha v0.3#

    -
  • Minor UI fix
  • -
-

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-INT-With-Sample.unitypackage b/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-INT-With-Sample.unitypackage deleted file mode 100644 index 913ab07..0000000 Binary files a/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-INT-With-Sample.unitypackage and /dev/null differ diff --git a/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-STAGING-With-Sample.unitypackage b/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-STAGING-With-Sample.unitypackage deleted file mode 100644 index 09f201b..0000000 Binary files a/2017/12/06/UDP-SDK-Alpha-v0-5/UDP-Alpha-v0.5-STAGING-With-Sample.unitypackage and /dev/null differ diff --git a/2017/12/06/UDP-SDK-Alpha-v0-5/index.html b/2017/12/06/UDP-SDK-Alpha-v0-5/index.html deleted file mode 100644 index e5cee6b..0000000 --- a/2017/12/06/UDP-SDK-Alpha-v0-5/index.html +++ /dev/null @@ -1,645 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.5 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.5

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.5#

    -
  • Add more checks to editor script.
  • -
-

Alpha v0.4#

    -
  • UI bug fix
  • -
  • Build editor script into dll.
  • -
-

Alpha v0.3#

    -
  • Minor UI fix
  • -
-

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-INT-with-Sample.unitypackage b/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-INT-with-Sample.unitypackage deleted file mode 100644 index d1dc1e0..0000000 Binary files a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-INT-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-PROD-with-Sample.unitypackage b/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-PROD-with-Sample.unitypackage deleted file mode 100644 index 6d094b8..0000000 Binary files a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-STAGING-with-Sample.unitypackage b/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-STAGING-with-Sample.unitypackage deleted file mode 100644 index 7851318..0000000 Binary files a/2017/12/14/UDP-SDK-Alpha-v0-6/UDP-SDK-Alpha-v0.6-STAGING-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/14/UDP-SDK-Alpha-v0-6/index.html b/2017/12/14/UDP-SDK-Alpha-v0-6/index.html deleted file mode 100644 index 783d647..0000000 --- a/2017/12/14/UDP-SDK-Alpha-v0-6/index.html +++ /dev/null @@ -1,650 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.6 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.6

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.6#

    -
  • Release PROD SDK
  • -
  • Update the UI of Game Settings.
  • -
-

Alpha v0.5#

    -
  • Add more checks to editor script.
  • -
-

Alpha v0.4#

    -
  • UI bug fix
  • -
  • Build editor script into dll.
  • -
-

Alpha v0.3#

    -
  • Minor UI fix
  • -
-

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-INT-with-Sample.unitypackage b/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-INT-with-Sample.unitypackage deleted file mode 100644 index 497ba8a..0000000 Binary files a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-INT-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-PROD-with-Sample.unitypackage b/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-PROD-with-Sample.unitypackage deleted file mode 100644 index cdfc933..0000000 Binary files a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-STAGING-with-Sample.unitypackage b/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-STAGING-with-Sample.unitypackage deleted file mode 100644 index 331c5cd..0000000 Binary files a/2017/12/20/UDP-SDK-Alpha-v0-7/UDP-SDK-Alpha-v0.7-STAGING-with-Sample.unitypackage and /dev/null differ diff --git a/2017/12/20/UDP-SDK-Alpha-v0-7/index.html b/2017/12/20/UDP-SDK-Alpha-v0-7/index.html deleted file mode 100644 index 28f10be..0000000 --- a/2017/12/20/UDP-SDK-Alpha-v0-7/index.html +++ /dev/null @@ -1,650 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.7 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.7

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.7#

    -
  • Fix a bug that may cause purchase failing in UDP.
  • -
  • Fix a bug of Game Settings that may cause invalid refresh token error.
  • -
-

Alpha v0.6#

    -
  • Release PROD SDK
  • -
  • Update the UI of Game Settings.
  • -
-

Alpha v0.5#

    -
  • Add more checks to editor script.
  • -
-

Alpha v0.4#

    -
  • UI bug fix
  • -
  • Build editor script into dll.
  • -
-

Alpha v0.3#

    -
  • Minor UI fix
  • -
-

Alpha v0.2#

    -
  • More intuitive UI
  • -
  • Update the demo
  • -
  • Support STAGING environment
  • -
-

Alpha v0.1#

    -
  • GStore and UDP SDK included.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-PROD-with-Sample.unitypackage b/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-PROD-with-Sample.unitypackage deleted file mode 100644 index 7473ef0..0000000 Binary files a/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-STAGING-with-Sample.unitypackage b/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-STAGING-with-Sample.unitypackage deleted file mode 100644 index a429fdd..0000000 Binary files a/2018/03/09/UDP-SDK-Alpha-v0-10/UDP-SDK-Alpha-v0.10-STAGING-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/09/UDP-SDK-Alpha-v0-10/index.html b/2018/03/09/UDP-SDK-Alpha-v0-10/index.html deleted file mode 100644 index aef47e4..0000000 --- a/2018/03/09/UDP-SDK-Alpha-v0-10/index.html +++ /dev/null @@ -1,637 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.10 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.10

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-PROD-with-Sample.unitypackage b/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-PROD-with-Sample.unitypackage deleted file mode 100644 index 7668764..0000000 Binary files a/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-STAGING-with-Sample.unitypackage b/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-STAGING-with-Sample.unitypackage deleted file mode 100644 index b0525bd..0000000 Binary files a/2018/03/13/UDP-SDK-Alpha-v0-11/UDP-SDK-Alpha-v0.11-STAGING-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/13/UDP-SDK-Alpha-v0-11/index.html b/2018/03/13/UDP-SDK-Alpha-v0-11/index.html deleted file mode 100644 index 9d50176..0000000 --- a/2018/03/13/UDP-SDK-Alpha-v0-11/index.html +++ /dev/null @@ -1,645 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.11 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.11

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.11#

    -
  • Fix the bug that UDP SDK has a AIDL conflict with Google’s IAB service.
  • -
  • More fluent user experience when editing IAP Catalog.
  • -
-

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal.
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-PROD-with-Sample.unitypackage b/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-PROD-with-Sample.unitypackage deleted file mode 100644 index cf1fcf2..0000000 Binary files a/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-STAGING-with-Sample.unitypackage b/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-STAGING-with-Sample.unitypackage deleted file mode 100644 index 5c8da70..0000000 Binary files a/2018/03/22/UDP-SDK-Alpha-v0-12/UDP-SDK-Alpha-v0.12-STAGING-with-Sample.unitypackage and /dev/null differ diff --git a/2018/03/22/UDP-SDK-Alpha-v0-12/index.html b/2018/03/22/UDP-SDK-Alpha-v0-12/index.html deleted file mode 100644 index c77444e..0000000 --- a/2018/03/22/UDP-SDK-Alpha-v0-12/index.html +++ /dev/null @@ -1,648 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP-SDK-Alpha-v0.12 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP-SDK-Alpha-v0.12

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.12#

    -
  • Developers can change their onboarded clients in the panel of GameSettings.asset now.
  • -
-

Alpha v0.11#

    -
  • Fix the bug that UDP SDK has a AIDL conflict with Google’s IAB service.
  • -
  • More fluent user experience when editing IAP Catalog.
  • -
-

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal.
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/05/30/UDP-SDK-Alpha-v0-13/UDP-SDK-Alpha-v0.13-PROD-with-Sample.unitypackage b/2018/05/30/UDP-SDK-Alpha-v0-13/UDP-SDK-Alpha-v0.13-PROD-with-Sample.unitypackage deleted file mode 100644 index c936047..0000000 Binary files a/2018/05/30/UDP-SDK-Alpha-v0-13/UDP-SDK-Alpha-v0.13-PROD-with-Sample.unitypackage and /dev/null differ diff --git a/2018/05/30/UDP-SDK-Alpha-v0-13/index.html b/2018/05/30/UDP-SDK-Alpha-v0-13/index.html deleted file mode 100644 index 020f5f1..0000000 --- a/2018/05/30/UDP-SDK-Alpha-v0-13/index.html +++ /dev/null @@ -1,651 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.13 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.13

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.13#

    -
  • Minor bugs fix
  • -
  • Updated GameSettings panel.
  • -
-

Alpha v0.12#

    -
  • Developers can change their onboarded clients in the panel of GameSettings.asset now.
  • -
-

Alpha v0.11#

    -
  • Fix the bug that UDP SDK has a AIDL conflict with Google’s IAB service.
  • -
  • More fluent user experience when editing IAP Catalog.
  • -
-

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal.
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/06/11/UDP-SDK-Alpha-v0-14/UDP-SDK-Alpha-v0.14-with-Sample.unitypackage b/2018/06/11/UDP-SDK-Alpha-v0-14/UDP-SDK-Alpha-v0.14-with-Sample.unitypackage deleted file mode 100644 index cf1843f..0000000 Binary files a/2018/06/11/UDP-SDK-Alpha-v0-14/UDP-SDK-Alpha-v0.14-with-Sample.unitypackage and /dev/null differ diff --git a/2018/06/11/UDP-SDK-Alpha-v0-14/UnityIAP.unitypackage b/2018/06/11/UDP-SDK-Alpha-v0-14/UnityIAP.unitypackage deleted file mode 100644 index bf699b1..0000000 Binary files a/2018/06/11/UDP-SDK-Alpha-v0-14/UnityIAP.unitypackage and /dev/null differ diff --git a/2018/06/11/UDP-SDK-Alpha-v0-14/index.html b/2018/06/11/UDP-SDK-Alpha-v0-14/index.html deleted file mode 100644 index 1a45847..0000000 --- a/2018/06/11/UDP-SDK-Alpha-v0-14/index.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.14 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.14

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.14#

    -
  • UDP SDK is integrated into UnityIAP Package.
  • -
  • Minor bugs fix
  • -
-

Alpha v0.13#

    -
  • Minor bugs fix
  • -
  • Updated GameSettings panel.
  • -
-

Alpha v0.12#

    -
  • Developers can change their onboarded clients in the panel of GameSettings.asset now.
  • -
-

Alpha v0.11#

    -
  • Fix the bug that UDP SDK has a AIDL conflict with Google’s IAB service.
  • -
  • More fluent user experience when editing IAP Catalog.
  • -
-

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal.
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/07/11/UDP-SDK-Alpha-v0-15/UDP-SDK-Alpha-v0.15-with-Sample.unitypackage b/2018/07/11/UDP-SDK-Alpha-v0-15/UDP-SDK-Alpha-v0.15-with-Sample.unitypackage deleted file mode 100644 index 056cf40..0000000 Binary files a/2018/07/11/UDP-SDK-Alpha-v0-15/UDP-SDK-Alpha-v0.15-with-Sample.unitypackage and /dev/null differ diff --git a/2018/07/11/UDP-SDK-Alpha-v0-15/UDP.unitypackage b/2018/07/11/UDP-SDK-Alpha-v0-15/UDP.unitypackage deleted file mode 100644 index 10076f6..0000000 Binary files a/2018/07/11/UDP-SDK-Alpha-v0-15/UDP.unitypackage and /dev/null differ diff --git a/2018/07/11/UDP-SDK-Alpha-v0-15/UnityIAP-with-UDP-Alpha-0.15.unitypackage b/2018/07/11/UDP-SDK-Alpha-v0-15/UnityIAP-with-UDP-Alpha-0.15.unitypackage deleted file mode 100644 index 3841e6e..0000000 Binary files a/2018/07/11/UDP-SDK-Alpha-v0-15/UnityIAP-with-UDP-Alpha-0.15.unitypackage and /dev/null differ diff --git a/2018/07/11/UDP-SDK-Alpha-v0-15/index.html b/2018/07/11/UDP-SDK-Alpha-v0-15/index.html deleted file mode 100644 index 986924e..0000000 --- a/2018/07/11/UDP-SDK-Alpha-v0-15/index.html +++ /dev/null @@ -1,659 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Alpha v0.15 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Alpha v0.15

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Alpha v0.15#

    -
  • Fix minor bugs.
  • -
-

Alpha v0.14#

    -
  • UDP SDK is integrated into UnityIAP Package.
  • -
  • Minor bugs fix
  • -
-

Alpha v0.13#

    -
  • Minor bugs fix
  • -
  • Updated GameSettings panel.
  • -
-

Alpha v0.12#

    -
  • Developers can change their onboarded clients in the panel of GameSettings.asset now.
  • -
-

Alpha v0.11#

    -
  • Fix the bug that UDP SDK has a AIDL conflict with Google’s IAB service.
  • -
  • More fluent user experience when editing IAP Catalog.
  • -
-

Alpha v0.10#

    -
  • Fix the bug that UDP SDK cannot be used with Unity IAP together. Older version will no longer be accepted on our portal.
  • -
  • Change the SDK folder from Assets/Plugins/UnityChannel to Assets/Plugins/UDP.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/07/18/UDP-SDK-Beta-v0-1/UDP-SDK-Beta-v0.1-with-Sample.unitypackage b/2018/07/18/UDP-SDK-Beta-v0-1/UDP-SDK-Beta-v0.1-with-Sample.unitypackage deleted file mode 100644 index ee8cb6a..0000000 Binary files a/2018/07/18/UDP-SDK-Beta-v0-1/UDP-SDK-Beta-v0.1-with-Sample.unitypackage and /dev/null differ diff --git a/2018/07/18/UDP-SDK-Beta-v0-1/UnityIAP-with-UDP-Beta-v0.1.unitypackage b/2018/07/18/UDP-SDK-Beta-v0-1/UnityIAP-with-UDP-Beta-v0.1.unitypackage deleted file mode 100644 index 2b9e158..0000000 Binary files a/2018/07/18/UDP-SDK-Beta-v0-1/UnityIAP-with-UDP-Beta-v0.1.unitypackage and /dev/null differ diff --git a/2018/07/18/UDP-SDK-Beta-v0-1/index.html b/2018/07/18/UDP-SDK-Beta-v0-1/index.html deleted file mode 100644 index 145ae7c..0000000 --- a/2018/07/18/UDP-SDK-Beta-v0-1/index.html +++ /dev/null @@ -1,636 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Beta v0.1 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Beta v0.1

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Beta v0.1#

    -
  • Fix the bug that it may crash on Unity 2018.2.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/07/31/UDP-SDK-Beta-v0-2/UDP-SDK-Beta-v0.2-with-Sample.unitypackage b/2018/07/31/UDP-SDK-Beta-v0-2/UDP-SDK-Beta-v0.2-with-Sample.unitypackage deleted file mode 100644 index b058255..0000000 Binary files a/2018/07/31/UDP-SDK-Beta-v0-2/UDP-SDK-Beta-v0.2-with-Sample.unitypackage and /dev/null differ diff --git a/2018/07/31/UDP-SDK-Beta-v0-2/UnityIAP-with-UDP-Beta-v0.2.unitypackage b/2018/07/31/UDP-SDK-Beta-v0-2/UnityIAP-with-UDP-Beta-v0.2.unitypackage deleted file mode 100644 index 21ca714..0000000 Binary files a/2018/07/31/UDP-SDK-Beta-v0-2/UnityIAP-with-UDP-Beta-v0.2.unitypackage and /dev/null differ diff --git a/2018/07/31/UDP-SDK-Beta-v0-2/index.html b/2018/07/31/UDP-SDK-Beta-v0-2/index.html deleted file mode 100644 index e01e0a4..0000000 --- a/2018/07/31/UDP-SDK-Beta-v0-2/index.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Beta v0.2 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Beta v0.2

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Beta v0.2#

    -
  • Update catalog UI
  • -
  • Fix a naming bug.
  • -
-

Beta v0.1#

    -
  • Fix the bug that it may crash on Unity 2018.2.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2018/08/14/UDP-SDK-Beta-v0-3/UDP-SDK-Beta-v0.3-with-Sample.unitypackage b/2018/08/14/UDP-SDK-Beta-v0-3/UDP-SDK-Beta-v0.3-with-Sample.unitypackage deleted file mode 100644 index bf9bb82..0000000 Binary files a/2018/08/14/UDP-SDK-Beta-v0-3/UDP-SDK-Beta-v0.3-with-Sample.unitypackage and /dev/null differ diff --git a/2018/08/14/UDP-SDK-Beta-v0-3/UnityIAP-with-UDP-Beta-v0.3.unitypackage b/2018/08/14/UDP-SDK-Beta-v0-3/UnityIAP-with-UDP-Beta-v0.3.unitypackage deleted file mode 100644 index 14708d6..0000000 Binary files a/2018/08/14/UDP-SDK-Beta-v0-3/UnityIAP-with-UDP-Beta-v0.3.unitypackage and /dev/null differ diff --git a/2018/08/14/UDP-SDK-Beta-v0-3/index.html b/2018/08/14/UDP-SDK-Beta-v0-3/index.html deleted file mode 100644 index 97f84a7..0000000 --- a/2018/08/14/UDP-SDK-Beta-v0-3/index.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - UDP SDK Beta v0.3 | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

UDP SDK Beta v0.3

- - - -
- - - - - -
- - - - - -

Download#

-

Change Log:#

Beta v0.3#

    -
  • Fix minor bugs
  • -
-

Beta v0.2#

    -
  • Update catalog UI
  • -
  • Fix a naming bug.
  • -
-

Beta v0.1#

    -
  • Fix the bug that it may crash on Unity 2018.2.
  • -
- - -
- - - - - - - - - - - -
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2019/03/18/Get-started/index.html b/2019/03/18/Get-started/index.html deleted file mode 100644 index 5645477..0000000 --- a/2019/03/18/Get-started/index.html +++ /dev/null @@ -1,574 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Getting started | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - - - - - - -
- - - -
- - - - - - - -
- - - -

Getting started

- - - -
- - - - - -
- - - - - -

Unity Distribution Portal (UDP) is now in public preview.

-

Get the UDP package

-
    -
  • from Unity’s Package Manager, or
  • -
  • from the Asset Store
  • -
-

If you use Unity IAP, import Unity IAP 1.22 (or above) which readily includes UDP.

-

Find more information in the UDP documentation.

- - -
- - - - - - - - - - -
- - - - - - - - - - -
-
- - - -
- - - -
- -
-
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/2019/03/18/hello-world/index.html b/2019/03/18/hello-world/index.html new file mode 100644 index 0000000..14ebbd9 --- /dev/null +++ b/2019/03/18/hello-world/index.html @@ -0,0 +1,704 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello World | Gordon's Blog + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+
+ +
+ + +
+ + + + + + + + + + +
+ + + +
+ + + + + + + +
+ + + +

Hello World + + + +

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

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

+

Quick Start

Create a new post

1
$ hexo new "My New Post"
+

More info: Writing

+

Run server

1
$ hexo server
+

More info: Server

+

Generate static files

1
$ hexo generate
+

More info: Generating

+

Deploy to remote sites

1
$ hexo deploy
+

More info: Deployment

+ + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+ + + +
+ + +
+ + +
+ + + + + + +
+ + + + + + + + + + +
+
+ + + + +
+ + +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2019/UDP-Beta-prd-1.0.0.2859.unitypackage b/2019/UDP-Beta-prd-1.0.0.2859.unitypackage deleted file mode 100644 index 1ae85a1..0000000 Binary files a/2019/UDP-Beta-prd-1.0.0.2859.unitypackage and /dev/null differ diff --git a/2019/UDP-Beta-prd-1.0.3.2974.unitypackage b/2019/UDP-Beta-prd-1.0.3.2974.unitypackage deleted file mode 100644 index 044fda4..0000000 Binary files a/2019/UDP-Beta-prd-1.0.3.2974.unitypackage and /dev/null differ diff --git a/2019/UDP-Beta-prd-1.0.3.2984.unitypackage b/2019/UDP-Beta-prd-1.0.3.2984.unitypackage deleted file mode 100644 index 5419d20..0000000 Binary files a/2019/UDP-Beta-prd-1.0.3.2984.unitypackage and /dev/null differ diff --git a/2019/UnityIAPwithUDP.unitypackage b/2019/UnityIAPwithUDP.unitypackage deleted file mode 100644 index 6bae049..0000000 Binary files a/2019/UnityIAPwithUDP.unitypackage and /dev/null differ diff --git a/Customer-survey-rule /index.html b/Customer-survey-rule /index.html deleted file mode 100644 index b62909a..0000000 --- a/Customer-survey-rule /index.html +++ /dev/null @@ -1,641 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

- - - -
- - - - -
- - -

Unite Asia Ticket Customer Survey Sweepstakes

-

Official Rules and Conditions

-

NO PURCHASE NECESSARY TO ENTER OR WIN. A PURCHASE OF ANY KIND WILL NOT INCREASE YOUR CHANCES OF WINNING. VOID WHERE PROHIBITED.

-

The Unite Asia Ticket Customer Survey Sweepstakes (the “Sweepstakes”) is organized by Unity Technologies ApS, who is identified in more detail in Provision 11 herein (the “Sponsor” or “Unity”).

-
    -
  1. DURATION. The Sweepstakes begins on January 30, 2019 (the “Start Date”) and submission period ends on February 28, 2019 (the “Deadline”).

    -
  2. -
  3. ENTRY.

    -
  4. -
    1. -
    2. To submit an entry:

      -
    3. -
      1. -
      2. Step 1: Go to the UDP Beta Survey at https://on.unity.com/2MD4gUd.
      3. -
      4. Step 2: Answer all the questions related to you.
      5. -
      -
    4. -
    5. Submission Restrictions.

      -
    6. -
      1. -
      2. The Submission must not contain material that violates or infringes another’s rights, including but not limited to privacy, publicity or intellectual property rights, or that constitutes copyright infringement;
      3. -
      4. The Submission must not disparage Sponsor or any other person or party affiliated with the promotion and administration of this Sweepstakes;
      5. -
      6. The Submission may not include any third party trademarks (logos, names) or copyrighted materials (music, images, video, recognizable people) unless you have obtained permission to use the materials;
      7. -
      8. The Submission must not contain material that is inappropriate, indecent, obscene hateful, tortious, defamatory, slanderous or libelous;
      9. -
      10. The Submission must not contain material that promotes bigotry, racism, hatred or harm against any group or individual or promotes discrimination based on race, gender, religion, nationality, disability, sexual orientation or age; and
      11. -
      12. The Submission must not contain material that is unlawful, in violation of or contrary to the laws or regulations in any jurisdiction where the Submission is created.
      13. -
      -
    7. -
    8. Each Submission submitted as described above that complies with the Sections 2A and 2B will be referred to as an “Entry” or “Entries.” Entries that do not conform to these Official Rules and Conditions will not be accepted.

      -
    9. -
    10. Void Entries. Entries generated by any means that violate these Official Rules and Conditions, Unity’s Terms of Service, or Unity’s Privacy Policy are void.

      -
    11. -
    12. Consent. BY SUBMITTING AN ENTRY, YOU ACCEPT AND AGREE TO BE BOUND BY THESE OFFICIAL RULES AND CONDITIONS, AND CONSENT TO THE UNITY TERMS OF SERVICE (HTTPS://UNITY3D.COM/LEGAL/TERMS-OF-SERVICE), AND UNITY’S PRIVACY POLICY (HTTPS://UNITY3D.COM/LEGAL/PRIVACY-POLICY).

      -
    13. -
    -
  5. -
  6. ELIGIBILITY.

    -
  7. -
    1. -
    2. Eligible. To be eligible to enter the Sweepstakes, as of the time you submit your Entry, you must:

      -
    3. -
      1. -
      2. Be at least 18 years of age;
      3. -
      4. Have Internet access, an email account and access to a personal computer;
      5. -
      6. Have utilized the Unity Engine;
      7. -
      8. be a legal resident worldwide excluding residents of: Florida, USA; New York, USA; Quebec, Canada; Brazil; the Crimea region of the Ukraine; Sweden; Italy; Cuba; Iran; North Korea; Sudan; and Syria. Canadian residents will be required to answer an additional mathematical question in order to claim their prizes.
      9. -
      -
    4. -
    5. Employees of the Sponsor or its subsidiaries, agents, or affiliates, and any family members and/or household members of these employees, are not eligible to enter the Sweepstakes.

      -
    6. -
    -
  8. -
  9. SELECTION OF WINNERS.

    -
  10. -
    1. -
    2. Determination of Winning Entries. The first ten (10) complete entries from distinct individuals will be winning entries (each a “Winner” and collectively the “Winners”).
    3. -
    4. Odds of Winning. ODDS OF WINNING A PRIZE ARE SUBJECT TO THE TOTAL NUMBER OF ELIGIBLE ENTRIES RECEIVED
    5. -
    6. Notification to Winners. The Winners and will be contacted via the email submitted with their Entry.
    7. -
    8. Any and all decisions of Sponsor shall be final and binding in all respects;
    9. -
    -
  11. -
  12. PRIZES.

    -
  13. -
    1. -
    2. Winners:
    3. -
    -
  14. -
-

Ten (10) First Place Prizes: One (1) Unite Asia 2019 ticket (Estimated Retail Value: US$150.00 per ticket);

-
    -
    1. -
    2. Winners will be contacted via the email submitted with their Entry. If a Winner cannot be contacted, is contacted and does not respond as directed within seven (7) days of attempted notification, refuses the prize or is ineligible to accept the prize, prize may be forfeited and awarded to an alternate winner. All prizes claimed in accordance with the Official Rules will be awarded.
    3. -
    4. The prizes will be awarded to the Winners within a commercially reasonable time frame. Receipt and use of the prizes may require a personal computer, email, and the internet. All prizes are non-transferable, and no substitutions of the prizes for cash or other goods and services are permitted by the Winners. Notwithstanding the foregoing, Sponsor reserves the right to provide a substitute prize of approximately equal value for any reason.
    5. -
    6. All federal, state, local and or other applicable taxes, licenses, title and/or registration fees or others costs, associated with winning a prize are the sole responsibility of the Winners. The Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, shall not be responsible for any such taxes, fees and costs.
    7. -
    8. Winners may have their Entries and names posted on all Unity media channels, including, without limitation, within Unity’s Website (https://unity3d.com), Unity’s Facebook Page (https://www.facebook.com/unity3d/), Unity’s Twitter page (https://twitter.com/unity3d?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor), and the Unity Blog. Except where legally prohibited, by participating in the Sweepstakes, the Winners hereby give Sponsor and its affiliates, subsidiaries and advertising and promotion agencies full permission, right and authority to use their likeness, photograph, name, hometown, and Entries, or any other information that they provide about themselves, the prize, the Sweepstakes, or Unity, for the purposes of advertising and promotion (in any media, including but not limited to in print media, television, film, video, radio, internet or otherwise) related to the Sweepstakes, Unity or the Sponsor, without any further notification or compensation to such Winners other than that set out herein.
    9. -
    10. Winners may be required to complete and sign a Non-Disclosure Agreement, an Affidavit of Eligibility and, except where prohibited, Liability/Publicity Release, in the form provided by Sponsor, within seven (7) days of attempted notification in order to claim prizes.
    11. -
    12. Any prize details not specified herein shall be determined solely by the Sponsor.
    13. -
    14. Sponsor will use good faith efforts to award Winners tickets to the closest Unite Asia 2019 event to the location of each Winner’s residence, but ticket to a particular event may be limited. Sponsor will not pay for the travel or accommodations of any Winner to attend a Unite event.
    15. -
    -
  1. -
  2. GENERAL CONDITIONS.

    -
  3. -
    1. -
    2. You represent and warrant that your Entry is:

      -
    3. -
      1. -
      2. Your own original work and that it does not violate any intellectual property rights or any other rights of any third party (including, without limitation, any privacy, publicity or publishing rights); and
      3. -
      4. Not libelous, obscene or otherwise contrary to law. Use of obscenities, racist, sexist, hateful or other material or depictions that, in Sponsor’s sole judgment, are inappropriate or offensive will disqualify an entry.
      5. -
      -
    4. -
    5. You agree to:

      -
    6. -
      1. -
      2. Be contacted by Sponsor or its agents by email; and
      3. -
      4. Sign any requested documentation set forth in Provision 5 herein including, without limitation an Affidavit of Eligibility and Liability/Publicity Release, in the event that you are a Winner.
      5. -
      -
    7. -
    8. You acknowledge and agree that all Submissions will be the sole and exclusive property of Sponsor and you hereby irrevocably assign to Sponsor and agree to irrevocably assign to Sponsor all of your right, title, and interest in and to all Submissions, including without limitation all worldwide patent, copyright, trade secret, moral and other proprietary or intellectual property rights therein. At Sponsor’s request and expense, you will execute documents and take such further acts as Sponsor may reasonably request to assist Sponsor to acquire, perfect, and maintain its intellectual property rights and other legal protections for the Submissions.

      -
    9. -
    10. You waive the right to claim any damages whatsoever, including, but not limited to, punitive, consequential, direct, or indirect damages.

      -
    11. -
    12. Except where prohibited, you agree that any and all disputes, claims and causes of action arising out of or connected with this Sweepstakes or any prize awarded shall be resolved under the laws of the State of California.

      -
    13. -
    14. Neither Sponsor nor any of its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, are responsible for lost, interrupted, or unavailable network server or other connections, miscommunications, failed telephone or computer transmissions, or technical failure, jumbled, scrambled or misdirected transmissions, or other errors of any kind whether human, mechanical or electronic or for phone, electrical, network, computer hardware or software program malfunctions, failures or difficulties, or for ISP/network/Web site accessibility or unavailability; any incorrect or inaccurate account information; any incorrect or inaccurate achievement information; human errors; technical malfunctions; theft, tampering, destruction, or unauthorized access to, or alteration of, accounts.

      -
    15. -
    16. False, fraudulent or deceptive acts shall render you ineligible.

      -
    17. -
    18. Participants found tampering with or abusing any aspect of this Sweepstakes, as solely determined by Sponsor, will be disqualified.

      -
    19. -
    20. If disqualified for any tampering or abuses, Sponsor reserves the right to terminate your eligibility to participate in this Sweepstakes or any other Sweepstakes run by Sponsor.

      -
    21. -
    22. In the event any portion of this Sweepstakes is compromised by virus, bugs, non-authorized human intervention or other causes beyond the control of Sponsor which, in the sole opinion of Sponsor, corrupts, or impairs the administration, security, fairness or proper participation in the Sweepstakes, Sponsor reserves the right at their sole discretion to suspend or terminate the Sweepstakes, and select Winners from participants’ accounts that can be determined by Sponsor to have not been compromised.

      -
    23. -
    24. All of Sponsor’s decisions regarding the application and interpretation of the Rules are final.

      -
    25. -
    -
  4. -
  5. LIMITATIONS OF LIABILITY.

    -
  6. -
    1. -
    2. To the fullest extent permitted by applicable law:

      -
    3. -
      1. -
      2. By entering this Sweepstakes, , you agree that Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, shall not be liable for personal injuries, death, damages, expenses or costs or losses of any kind resulting from participation or inability to participate in this Sweepstakes or acceptance of or use or inability to use a prize or parts thereof including, without limitation, claims, suits, injuries, losses and damages related to personal injuries, death, damage to or destruction of property, rights of publicity or privacy, defamation or portrayal in a false light (whether intentional or unintentional), whether under a theory of contract, tort (including negligence), warranty or other theory; and
      3. -
      4. You release the Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and its directors, officers, employees, agents and assigns from any and all liability and responsibility with respect to a prize (including any property loss, damage, personal injury or death).
      5. -
      -
    4. -
    5. You acknowledge that Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, have neither made nor are in any manner responsible for any warranty, representation or guarantee, expressed or implied, in fact or in law, related to a prize.

      -
    6. -
    -
  7. -
  8. PRIVACY.

    -
  9. -
    1. -
    2. Information submitted in connection with the Sweepstakes in accordance with these Official Rules and Conditions and Sponsor’s Privacy Policy located at https://unity3d.com/legal/privacy-policy
    3. -
    4. By entering this Sweepstakes, you agree that your personal information may be collected, used, by Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, for the sole purpose of conducting, administering, and fulfilling the Sweepstakes, including, without limitation notifying you if you are chosen as a potential Winner and for prize delivery.
    5. -
    6. If allowed under applicable law, you may exercise their right to access and modify the personal information about them stored by Sponsor by writing to privacy@unity3d.com, and detailing their request.
    7. -
    -
  10. -
  11. WINNERS LIST. A list of Winners can also be obtained by sending a self-addressed stamped envelope to Unity Technologies, Attn: Console Support Team, Løvstræde 5, DK-1152 Copenhagen K, Denmark. Do not send any other correspondence to this address.

    -
  12. -
  13. SEVERABILITY. In the event any Provision of these Official Rules and Conditions prove unenforceable, void or incomplete, the validity of the other conditions will remain unaffected.

    -
  14. -
  15. SPONSOR. This Sweepstakes is sponsored by Unity Technologies APS, a Danish corporation having its principal place of business at Løvstræde 5, DK-1152 Copenhagen K, Denmark, on behalf of itself and its Affiliates. As used herein, the term “Affiliates” shall mean an entity that directly or indirectly controls, is controlled by or is under common control with Unity Technologies ApS.

    -
  16. -
-

© 2019 Unity Technologies ApS, Unity Technologies, Unity and their respective logos, are trademarks or registered trademarks of Unity Technologies ApS or its Affiliates. All rights reserved.

- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Depreciated/D_Quick-guide/index.html b/Depreciated/D_Quick-guide/index.html deleted file mode 100644 index aa88d87..0000000 --- a/Depreciated/D_Quick-guide/index.html +++ /dev/null @@ -1,557 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

- - - -
- - - - -
- - -


-

Overview#

Unity Distribution Platform (UDP) streamlines your entire app distribution process. You can seamlessly build for, and deploy to, the following partner app stores:

-
    -
  • Cloud Moolah
  • -
  • Catappult and more coming soon
  • -
-

UDP lets you implement your IAPs at one time only, automatically build store-specific packages, and publish these repackaged game or app directly to the stores. You can also submit to selected stores directly on the UDP portal.

-

Beta access is currently restricted, if you have issues accessing the UDP portal, please contact udpsupport@unity3d.com.

-

-

To publish your game or app to a partner store:

-
    -
  • Configure your game for UDP
  • -
  • Implement IAP
  • -
  • Build your UDP game file and push it to the UDP portal
  • -
  • Manage your game on the UDP portal
  • -
  • Publish your game to partner stores
  • -
-

Prerequisites#

    -
  • UDP is supported in Unity 5.6.1 or higher.
  • -
  • Currently, UDP only supports Android.
  • -
-

Quick start guide#

This section contains a brief outline of the steps you need to take to publish your game to a partner store.

-

Configuring your game for UDP#

Firstly, set up UDP by installing the UDP SDK.

-

Tip: If you are currently using Unity IAP, UDP is included in the Unity IAP package as of version 1.21.

-

When you have installed UDP, generate a Unity Client and Test Accounts:
In the Unity Editor, select Window > Unity UDP > Game Settings.

-
    -
  • Select the Game Settings and, in the Inspector window,
  • -
  • Select Generate Unity Client to populate the credentials UDP needs for client-to-server communication. -
  • -
-

Implementing IAP (in-app purchase)#

If you have in-app contents to sell, implement IAP inside your game. UDP IAP lets you easily manage your items in all stores.

-

To configure an IAP catalog, either:

-
    -
  • Use the UDP IAP catalog (Window > Unity UDP > IAP Catalog) in the Unity Editor.
  • -
  • Or, use the UDP portal.
  • -
-

Tip: If you use Unity IAP, configure the IAP catalogs of Unity UDP (Window > Unity UDP > IAP Catalog) and Unity IAP (Window > Unity IAP > IAP Catalog). Make sure the two IAP catalogs have the same settings. Note that if you set up IAP items on the UDP portal, the items cannot be synchronized to the IAP catalog of Unity IAP.

-

For detailed information, refer to Implementing IAP.

-

Building and pushing your game to the UDP portal#

Create a local Android APK build (in the Editor, go to File > Build Settings > Android > Build). For more information, see documentation on building for Android.
To push your game to UDP, you can

-
    -
  • Upload the APK file of your game to UDP portal directly or
  • -
  • Push your game via Cloud Build
  • -
-

For detailed information, refer to Building your game and pushing it to the UDP portal.

-

Publishing your game to partner stores#

Before you publish your game to partner stores, you must add your company information and select your stores.

-

To publish your game to a store:

-
    -
  1. Go to the UDP portal.
  2. -
  3. Navigate to your Project and choose Publish.
  4. -
  5. Select the store and choose the Target step.
    Target step specifies to which step UDP handles your game. You can choose either of the following steps:
      -
    • Pack, which indicates the step where UDP packs your game with the SDK from the selected store.
    • -
    • Test, which indicates that the step where UDP packs and submits your game to the test environment of the selected stores.
    • -
    • Prod, which indicates the step where UDP packs and submits your game to the production environment of the selected stores.
    • -
    -
  6. -
  7. Publish your game by clicking Publish.
  8. -
-

For detained information, refer to Publishing Your Game from UDP Portal to Stores.

- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Depreciated/D_Unity-Distribution-Platform/index.html b/Depreciated/D_Unity-Distribution-Platform/index.html deleted file mode 100644 index 645a05f..0000000 --- a/Depreciated/D_Unity-Distribution-Platform/index.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

- - - -
- - - - -
- - -



Unity Distribution Platform (UDP) streamlines your entire app distribution process. You can seamlessly build for, and deploy to, the following partner app stores:

-
    -
  • Cloud Moolah
  • -
  • Aptoide, OneStore, Xiaomi, and Huawei (coming soon)
  • -
-

UDP lets you implement your IAPs at one time only, automatically build store-specific packages, and publish these repackaged game or app directly to the stores. You can also submit to selected stores directly on the UDP portal.

- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Get-started-preview/index.html b/Get-started-preview/index.html deleted file mode 100644 index aad34b2..0000000 --- a/Get-started-preview/index.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

- - - -
- - - - -
- - -

Unity Distribution Portal (UDP) is now in public preview.

-

Get the UDP package

-
    -
  • from Unity’s Package Manager, or
  • -
  • from the Asset Store
  • -
-

If you use Unity IAP, import Unity IAP 1.22 (or above) which readily includes UDP.

-

Find more information in the UDP documentation.

- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Quick-Guide/images/UDP-Dev-QuickStarterGuide.png b/Quick-Guide/images/UDP-Dev-QuickStarterGuide.png deleted file mode 100644 index 6c5dd9e..0000000 Binary files a/Quick-Guide/images/UDP-Dev-QuickStarterGuide.png and /dev/null differ diff --git a/Quick-Guide/images/mkt-1.png b/Quick-Guide/images/mkt-1.png deleted file mode 100644 index e8812f5..0000000 Binary files a/Quick-Guide/images/mkt-1.png and /dev/null differ diff --git a/Quick-Guide/images/mkt-2.png b/Quick-Guide/images/mkt-2.png deleted file mode 100644 index 876161f..0000000 Binary files a/Quick-Guide/images/mkt-2.png and /dev/null differ diff --git a/Quick-Guide/images/mkt-3.png b/Quick-Guide/images/mkt-3.png deleted file mode 100644 index 4a4bd8f..0000000 Binary files a/Quick-Guide/images/mkt-3.png and /dev/null differ diff --git a/Quick-Guide/images/quick-guide-1.png b/Quick-Guide/images/quick-guide-1.png deleted file mode 100644 index cdca433..0000000 Binary files a/Quick-Guide/images/quick-guide-1.png and /dev/null differ diff --git a/Quick-Guide/index-1.html b/Quick-Guide/index-1.html deleted file mode 100644 index 91ad40e..0000000 --- a/Quick-Guide/index-1.html +++ /dev/null @@ -1,521 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Marketing | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

Marketing

- - - -
- - - - -
- - - - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Setting-up-UDP-Portal/images/Add-Product-Draft.png b/Setting-up-UDP-Portal/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/Setting-up-UDP-Portal/images/Add-Product-Draft.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Add-Store.png b/Setting-up-UDP-Portal/images/Add-Store.png deleted file mode 100644 index c306654..0000000 Binary files a/Setting-up-UDP-Portal/images/Add-Store.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Choose-Store.png b/Setting-up-UDP-Portal/images/Choose-Store.png deleted file mode 100644 index ed7f4b2..0000000 Binary files a/Setting-up-UDP-Portal/images/Choose-Store.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Configure-Store.png b/Setting-up-UDP-Portal/images/Configure-Store.png deleted file mode 100644 index 604e404..0000000 Binary files a/Setting-up-UDP-Portal/images/Configure-Store.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Create-IAP-Item.png b/Setting-up-UDP-Portal/images/Create-IAP-Item.png deleted file mode 100644 index 58ae612..0000000 Binary files a/Setting-up-UDP-Portal/images/Create-IAP-Item.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Create-Profiles.png b/Setting-up-UDP-Portal/images/Create-Profiles.png deleted file mode 100644 index 6cead49..0000000 Binary files a/Setting-up-UDP-Portal/images/Create-Profiles.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Create-a-Game-Settings-file.png b/Setting-up-UDP-Portal/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/Setting-up-UDP-Portal/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Create-a-Game.png b/Setting-up-UDP-Portal/images/Create-a-Game.png deleted file mode 100644 index 669f896..0000000 Binary files a/Setting-up-UDP-Portal/images/Create-a-Game.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Dashboard.png b/Setting-up-UDP-Portal/images/Dashboard.png deleted file mode 100644 index adf29f5..0000000 Binary files a/Setting-up-UDP-Portal/images/Dashboard.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Edit-Store.png b/Setting-up-UDP-Portal/images/Edit-Store.png deleted file mode 100644 index eecb49c..0000000 Binary files a/Setting-up-UDP-Portal/images/Edit-Store.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Editor-to-Portal.png b/Setting-up-UDP-Portal/images/Editor-to-Portal.png deleted file mode 100644 index a69d0e8..0000000 Binary files a/Setting-up-UDP-Portal/images/Editor-to-Portal.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/EditorScript-0.png b/Setting-up-UDP-Portal/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/Setting-up-UDP-Portal/images/EditorScript-0.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/EditorScript-3.png b/Setting-up-UDP-Portal/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/Setting-up-UDP-Portal/images/EditorScript-3.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/EditorScript-v0.2-2.png b/Setting-up-UDP-Portal/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/Setting-up-UDP-Portal/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/GameManager.png b/Setting-up-UDP-Portal/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/Setting-up-UDP-Portal/images/GameManager.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Generate-a-Unity-client-and-test-accounts.png b/Setting-up-UDP-Portal/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/Setting-up-UDP-Portal/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/IAP-Catalog-updated.png b/Setting-up-UDP-Portal/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/Setting-up-UDP-Portal/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/IAP-Catalog.png b/Setting-up-UDP-Portal/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/Setting-up-UDP-Portal/images/IAP-Catalog.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Publish-information.png b/Setting-up-UDP-Portal/images/Publish-information.png deleted file mode 100644 index ea2d530..0000000 Binary files a/Setting-up-UDP-Portal/images/Publish-information.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Push-to-Store.png b/Setting-up-UDP-Portal/images/Push-to-Store.png deleted file mode 100644 index 618c633..0000000 Binary files a/Setting-up-UDP-Portal/images/Push-to-Store.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDP-Login.png b/Setting-up-UDP-Portal/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/Setting-up-UDP-Portal/images/UDP-Login.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDP-Purchase-22.png b/Setting-up-UDP-Portal/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/Setting-up-UDP-Portal/images/UDP-Purchase-22.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDP-PurchaseError-24.png b/Setting-up-UDP-Portal/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/Setting-up-UDP-Portal/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDP-Query-18.png b/Setting-up-UDP-Portal/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/Setting-up-UDP-Portal/images/UDP-Query-18.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDPSample-Init.png b/Setting-up-UDP-Portal/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/Setting-up-UDP-Portal/images/UDPSample-Init.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDPSample-PurchaseFail.jpg b/Setting-up-UDP-Portal/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/Setting-up-UDP-Portal/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDPSample-PurchaseSuccess.jpg b/Setting-up-UDP-Portal/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/Setting-up-UDP-Portal/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/UDPSample-QueryInventory.jpg b/Setting-up-UDP-Portal/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/Setting-up-UDP-Portal/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Unity-clent-updated.png b/Setting-up-UDP-Portal/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/Setting-up-UDP-Portal/images/Unity-clent-updated.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Unity_Technologies_logo.svg.png b/Setting-up-UDP-Portal/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/Setting-up-UDP-Portal/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/Upload-Game-File.png b/Setting-up-UDP-Portal/images/Upload-Game-File.png deleted file mode 100644 index d194a27..0000000 Binary files a/Setting-up-UDP-Portal/images/Upload-Game-File.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/login-mac.png b/Setting-up-UDP-Portal/images/login-mac.png deleted file mode 100644 index 5cc2e3b..0000000 Binary files a/Setting-up-UDP-Portal/images/login-mac.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/login-windows.png b/Setting-up-UDP-Portal/images/login-windows.png deleted file mode 100644 index 46bd78b..0000000 Binary files a/Setting-up-UDP-Portal/images/login-windows.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/publish-gstore.png b/Setting-up-UDP-Portal/images/publish-gstore.png deleted file mode 100644 index 35aa791..0000000 Binary files a/Setting-up-UDP-Portal/images/publish-gstore.png and /dev/null differ diff --git a/Setting-up-UDP-Portal/images/test-accounting-setting.png b/Setting-up-UDP-Portal/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/Setting-up-UDP-Portal/images/test-accounting-setting.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Add-Product-Draft.png b/Setting-up-UDP-SDK/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/Setting-up-UDP-SDK/images/Add-Product-Draft.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Add-Store.png b/Setting-up-UDP-SDK/images/Add-Store.png deleted file mode 100644 index c306654..0000000 Binary files a/Setting-up-UDP-SDK/images/Add-Store.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Choose-Store.png b/Setting-up-UDP-SDK/images/Choose-Store.png deleted file mode 100644 index ed7f4b2..0000000 Binary files a/Setting-up-UDP-SDK/images/Choose-Store.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Configure-Store.png b/Setting-up-UDP-SDK/images/Configure-Store.png deleted file mode 100644 index 604e404..0000000 Binary files a/Setting-up-UDP-SDK/images/Configure-Store.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Create-IAP-Item.png b/Setting-up-UDP-SDK/images/Create-IAP-Item.png deleted file mode 100644 index 58ae612..0000000 Binary files a/Setting-up-UDP-SDK/images/Create-IAP-Item.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Create-Profiles.png b/Setting-up-UDP-SDK/images/Create-Profiles.png deleted file mode 100644 index 6cead49..0000000 Binary files a/Setting-up-UDP-SDK/images/Create-Profiles.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Create-a-Game-Settings-file.png b/Setting-up-UDP-SDK/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/Setting-up-UDP-SDK/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Create-a-Game.png b/Setting-up-UDP-SDK/images/Create-a-Game.png deleted file mode 100644 index 669f896..0000000 Binary files a/Setting-up-UDP-SDK/images/Create-a-Game.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Dashboard.png b/Setting-up-UDP-SDK/images/Dashboard.png deleted file mode 100644 index adf29f5..0000000 Binary files a/Setting-up-UDP-SDK/images/Dashboard.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Edit-Store.png b/Setting-up-UDP-SDK/images/Edit-Store.png deleted file mode 100644 index eecb49c..0000000 Binary files a/Setting-up-UDP-SDK/images/Edit-Store.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Editor-to-Portal.png b/Setting-up-UDP-SDK/images/Editor-to-Portal.png deleted file mode 100644 index a69d0e8..0000000 Binary files a/Setting-up-UDP-SDK/images/Editor-to-Portal.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/EditorScript-0.png b/Setting-up-UDP-SDK/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/Setting-up-UDP-SDK/images/EditorScript-0.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/EditorScript-3.png b/Setting-up-UDP-SDK/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/Setting-up-UDP-SDK/images/EditorScript-3.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/EditorScript-v0.2-2.png b/Setting-up-UDP-SDK/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/Setting-up-UDP-SDK/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/GameManager.png b/Setting-up-UDP-SDK/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/Setting-up-UDP-SDK/images/GameManager.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Generate-a-Unity-client-and-test-accounts.png b/Setting-up-UDP-SDK/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/Setting-up-UDP-SDK/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/IAP-Catalog-updated.png b/Setting-up-UDP-SDK/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/Setting-up-UDP-SDK/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/IAP-Catalog.png b/Setting-up-UDP-SDK/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/Setting-up-UDP-SDK/images/IAP-Catalog.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Publish-information.png b/Setting-up-UDP-SDK/images/Publish-information.png deleted file mode 100644 index ea2d530..0000000 Binary files a/Setting-up-UDP-SDK/images/Publish-information.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Push-to-Store.png b/Setting-up-UDP-SDK/images/Push-to-Store.png deleted file mode 100644 index 618c633..0000000 Binary files a/Setting-up-UDP-SDK/images/Push-to-Store.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDP-Login.png b/Setting-up-UDP-SDK/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/Setting-up-UDP-SDK/images/UDP-Login.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDP-Purchase-22.png b/Setting-up-UDP-SDK/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/Setting-up-UDP-SDK/images/UDP-Purchase-22.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDP-PurchaseError-24.png b/Setting-up-UDP-SDK/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/Setting-up-UDP-SDK/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDP-Query-18.png b/Setting-up-UDP-SDK/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/Setting-up-UDP-SDK/images/UDP-Query-18.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDPSample-Init.png b/Setting-up-UDP-SDK/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/Setting-up-UDP-SDK/images/UDPSample-Init.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDPSample-PurchaseFail.jpg b/Setting-up-UDP-SDK/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/Setting-up-UDP-SDK/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDPSample-PurchaseSuccess.jpg b/Setting-up-UDP-SDK/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/Setting-up-UDP-SDK/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/UDPSample-QueryInventory.jpg b/Setting-up-UDP-SDK/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/Setting-up-UDP-SDK/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Unity-clent-updated.png b/Setting-up-UDP-SDK/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/Setting-up-UDP-SDK/images/Unity-clent-updated.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Unity_Technologies_logo.svg.png b/Setting-up-UDP-SDK/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/Setting-up-UDP-SDK/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/Upload-Game-File.png b/Setting-up-UDP-SDK/images/Upload-Game-File.png deleted file mode 100644 index d194a27..0000000 Binary files a/Setting-up-UDP-SDK/images/Upload-Game-File.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/login-mac.png b/Setting-up-UDP-SDK/images/login-mac.png deleted file mode 100644 index 5cc2e3b..0000000 Binary files a/Setting-up-UDP-SDK/images/login-mac.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/login-windows.png b/Setting-up-UDP-SDK/images/login-windows.png deleted file mode 100644 index 46bd78b..0000000 Binary files a/Setting-up-UDP-SDK/images/login-windows.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/publish-gstore.png b/Setting-up-UDP-SDK/images/publish-gstore.png deleted file mode 100644 index 35aa791..0000000 Binary files a/Setting-up-UDP-SDK/images/publish-gstore.png and /dev/null differ diff --git a/Setting-up-UDP-SDK/images/test-accounting-setting.png b/Setting-up-UDP-SDK/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/Setting-up-UDP-SDK/images/test-accounting-setting.png and /dev/null differ diff --git a/Setting-up-UDP/images/Add-Product-Draft.png b/Setting-up-UDP/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/Setting-up-UDP/images/Add-Product-Draft.png and /dev/null differ diff --git a/Setting-up-UDP/images/Add-Store.png b/Setting-up-UDP/images/Add-Store.png deleted file mode 100644 index c306654..0000000 Binary files a/Setting-up-UDP/images/Add-Store.png and /dev/null differ diff --git a/Setting-up-UDP/images/Choose-Store.png b/Setting-up-UDP/images/Choose-Store.png deleted file mode 100644 index ed7f4b2..0000000 Binary files a/Setting-up-UDP/images/Choose-Store.png and /dev/null differ diff --git a/Setting-up-UDP/images/Configure-Store.png b/Setting-up-UDP/images/Configure-Store.png deleted file mode 100644 index 604e404..0000000 Binary files a/Setting-up-UDP/images/Configure-Store.png and /dev/null differ diff --git a/Setting-up-UDP/images/Create-IAP-Item.png b/Setting-up-UDP/images/Create-IAP-Item.png deleted file mode 100644 index 58ae612..0000000 Binary files a/Setting-up-UDP/images/Create-IAP-Item.png and /dev/null differ diff --git a/Setting-up-UDP/images/Create-Profiles.png b/Setting-up-UDP/images/Create-Profiles.png deleted file mode 100644 index 6cead49..0000000 Binary files a/Setting-up-UDP/images/Create-Profiles.png and /dev/null differ diff --git a/Setting-up-UDP/images/Create-a-Game-Settings-file.png b/Setting-up-UDP/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/Setting-up-UDP/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/Setting-up-UDP/images/Create-a-Game.png b/Setting-up-UDP/images/Create-a-Game.png deleted file mode 100644 index 669f896..0000000 Binary files a/Setting-up-UDP/images/Create-a-Game.png and /dev/null differ diff --git a/Setting-up-UDP/images/Dashboard.png b/Setting-up-UDP/images/Dashboard.png deleted file mode 100644 index adf29f5..0000000 Binary files a/Setting-up-UDP/images/Dashboard.png and /dev/null differ diff --git a/Setting-up-UDP/images/Edit-Store.png b/Setting-up-UDP/images/Edit-Store.png deleted file mode 100644 index eecb49c..0000000 Binary files a/Setting-up-UDP/images/Edit-Store.png and /dev/null differ diff --git a/Setting-up-UDP/images/Editor-to-Portal.png b/Setting-up-UDP/images/Editor-to-Portal.png deleted file mode 100644 index a69d0e8..0000000 Binary files a/Setting-up-UDP/images/Editor-to-Portal.png and /dev/null differ diff --git a/Setting-up-UDP/images/EditorScript-0.png b/Setting-up-UDP/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/Setting-up-UDP/images/EditorScript-0.png and /dev/null differ diff --git a/Setting-up-UDP/images/EditorScript-3.png b/Setting-up-UDP/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/Setting-up-UDP/images/EditorScript-3.png and /dev/null differ diff --git a/Setting-up-UDP/images/EditorScript-v0.2-2.png b/Setting-up-UDP/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/Setting-up-UDP/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/Setting-up-UDP/images/GameManager.png b/Setting-up-UDP/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/Setting-up-UDP/images/GameManager.png and /dev/null differ diff --git a/Setting-up-UDP/images/Generate-a-Unity-client-and-test-accounts.png b/Setting-up-UDP/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/Setting-up-UDP/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/Setting-up-UDP/images/IAP-Catalog-updated.png b/Setting-up-UDP/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/Setting-up-UDP/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/Setting-up-UDP/images/IAP-Catalog.png b/Setting-up-UDP/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/Setting-up-UDP/images/IAP-Catalog.png and /dev/null differ diff --git a/Setting-up-UDP/images/Publish-information.png b/Setting-up-UDP/images/Publish-information.png deleted file mode 100644 index ea2d530..0000000 Binary files a/Setting-up-UDP/images/Publish-information.png and /dev/null differ diff --git a/Setting-up-UDP/images/Push-to-Store.png b/Setting-up-UDP/images/Push-to-Store.png deleted file mode 100644 index 618c633..0000000 Binary files a/Setting-up-UDP/images/Push-to-Store.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDP-Login.png b/Setting-up-UDP/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/Setting-up-UDP/images/UDP-Login.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDP-Purchase-22.png b/Setting-up-UDP/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/Setting-up-UDP/images/UDP-Purchase-22.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDP-PurchaseError-24.png b/Setting-up-UDP/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/Setting-up-UDP/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDP-Query-18.png b/Setting-up-UDP/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/Setting-up-UDP/images/UDP-Query-18.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDPSample-Init.png b/Setting-up-UDP/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/Setting-up-UDP/images/UDPSample-Init.png and /dev/null differ diff --git a/Setting-up-UDP/images/UDPSample-PurchaseFail.jpg b/Setting-up-UDP/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/Setting-up-UDP/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/Setting-up-UDP/images/UDPSample-PurchaseSuccess.jpg b/Setting-up-UDP/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/Setting-up-UDP/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/Setting-up-UDP/images/UDPSample-QueryInventory.jpg b/Setting-up-UDP/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/Setting-up-UDP/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/Setting-up-UDP/images/Unity-clent-updated.png b/Setting-up-UDP/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/Setting-up-UDP/images/Unity-clent-updated.png and /dev/null differ diff --git a/Setting-up-UDP/images/Unity_Technologies_logo.svg.png b/Setting-up-UDP/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/Setting-up-UDP/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/Setting-up-UDP/images/Upload-Game-File.png b/Setting-up-UDP/images/Upload-Game-File.png deleted file mode 100644 index d194a27..0000000 Binary files a/Setting-up-UDP/images/Upload-Game-File.png and /dev/null differ diff --git a/Setting-up-UDP/images/login-mac.png b/Setting-up-UDP/images/login-mac.png deleted file mode 100644 index 5cc2e3b..0000000 Binary files a/Setting-up-UDP/images/login-mac.png and /dev/null differ diff --git a/Setting-up-UDP/images/login-windows.png b/Setting-up-UDP/images/login-windows.png deleted file mode 100644 index 46bd78b..0000000 Binary files a/Setting-up-UDP/images/login-windows.png and /dev/null differ diff --git a/Setting-up-UDP/images/publish-gstore.png b/Setting-up-UDP/images/publish-gstore.png deleted file mode 100644 index 35aa791..0000000 Binary files a/Setting-up-UDP/images/publish-gstore.png and /dev/null differ diff --git a/Setting-up-UDP/images/test-accounting-setting.png b/Setting-up-UDP/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/Setting-up-UDP/images/test-accounting-setting.png and /dev/null differ diff --git a/Setting-up-UDP/index.html b/Setting-up-UDP/index.html deleted file mode 100644 index bf9b3b7..0000000 --- a/Setting-up-UDP/index.html +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Setting up UDP | Unity Distribution Platform - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

Setting up UDP

- - - -
- - - - -
- - -


-

Configuring the UDP SDK#

The UDP SDK is an easy way to integrate your game with UDP. To configure the UDP SDK, you need to the following steps:

-
    -
  • Generating a Unity client and test accounts
  • -
  • Configuring the in-app purchase (IAP) for UDP
  • -
  • Testing your configuration
  • -
-

Generating a Unity client and test accounts#

You can manage your game in UDP via a Unity client and test your game with test accounts. Take the following steps to generate a Unity client and test accounts:

-
    -
  1. Open Unity and log in with a Unity account. If you don’t have a Unity account yet, register one in https://id.unity.com.

    -
  2. -
  3. Create or open a project and import the SDK. The SDK can be downloaded from https://unitytech.github.io/udp/.

    -
  4. -
-
    -
  • Stand-Alone UDP SDK
    If you are currently not using Unity IAP, download and import this SDK. You also need to complete the technical integration according to Technical integration (without Unity IAP).
  • -
  • Unity IAP Pagckage
    If you are currently using Unity IAP, download and import this SDK. You also need to complete the technical integration according to Technical integration (with Unity IAP).
    Note: Make sure the project ID is consistent with the current environment. If not, click Unlink project and create a new Unity project ID.
    -
  • -
-
    -
  1. Create a Game Settings.asset file.

    - -

    - -
  2. -
  3. Click the Game Settings.asset file under Assets > Plugins > UnityChannel > UdpSupport > Resources and generate a Unity client and test accounts.

    - -

    - -

    In the above screenshot, you may need to use the following fields in UDP Client Settings:

    -
  4. -
-
    -
  • Client ID is the issued client identifier.
  • -
  • Client RSA Public Key is used to validate the purchase signature for UDP.
  • -
  • Client Secret is the key to encrypting the receipt sent to developers’ server (Callback URL).
  • -
  • Callback URL provides your own server to receive the stores’ callbacks.
  • -
-
Note: Client Key is currently only used in initializing the SDK for UDP.
- -

Configuring the IAP for UDP#

Take the following steps to configure the IAP for UDP:

-
    -
  1. Choose IAP Catalog (Window > Unity UDP > IAP Catalog).

    -
  2. -
  3. Input your product information and click Create Product to sync with the server. To add more products, Click Add Product Draft.

    Note: Specify the product price, or players can’t purchase products in game stores.

    - -

    - -
  4. -
  5. Click the GameManager GameObject in Hierarchy and enter the slugs of your products into Product_1 and Product_2. You can add more products using the GameManager.cs file.

    - -

    - -
  6. -
-

Testing the SDK for UDP#

After you complete the configuration, test the SDK for UDP, as follows:

-
    -
  1. Open the SampleScene.scene asset to show the demo.

    -
  2. -
  3. Build and open the demo.

    -
  4. -
  5. Click Init and log in with a test account.

    - -

    - -
  6. -
  7. Click Buy or Buy&Consume to buy products. You can see the purchase information on the user interface.

    - -

    - -
  8. -
  9. If the purchased item hasn’t been consumed, you can’t purchase it again.

    - -

    - -
  10. -
  11. Click QueryInventory to see all the products and purchases and click Query&Consume to consume the unconsumed purchases.

    - -

    -
  12. -
-

Confiuring the UDP Portal#

UDP portal is an online portal where you can

-
    -
  • Create new games
  • -
  • Create in-app purchasable items
  • -
  • Publish games to partner stores
  • -
-

You can go to UDP portal via the URL https://connect-staging.unity.com/udp. Alternatively, you can check out the GameSetting.asset file in the Inspector window in Unity Editor, and then go to UDP portal by clicking See More in Browser.

-

-

Creating new Games#

With UDP portal, you can create a new game.

-
    -
  1. Create a company profile and pupulate the company profile.
  2. -
  3. Create a new game and specify a name for it.
  4. -
  5. Populate the Game info table and upload your game file.
  6. -
-

Creating In-App Purchasable Items#

Create IAP items on UDP portal, as follows:

-
    -
  1. Select your game on UDP portal
  2. -
  3. Create an IAP item by selecting Add Item (GAME INFO->IAP->Add Item)
  4. -
-

Publishing Your Game from UDP Portal to Stores#

With UDP portal, you can publish your game to a partner store. Currently the supported stores include Google, Amazon, Samsung, CloudMoolah, and Xiaomi.

-
    -
  1. Select your game in the Portal.

    -
  2. -
  3. In the PUBLISH GAME tab, add the store you want to publish to.

    Choose the Store and Package Name. After you click Add, you will be redirected to the website of CloudMoolah, where you fill in the information of your company and bank account.

    -
  4. -
  5. Choose Edit to configure the store.
  6. -
  7. Populate the following fields.
    .. Target SDK: Unless you have a special requirment, choose the latest version.
    ..
    Available Step: If you choose Pack, UDP only pack the game; If you choose Sync to Test, UDP pack the game and push it to the testing system of the store; If you choose Sync to Prod, UDP pack the game and push it to the productive system of the store.
    .. Price: Specify the price you assign to the game.
    ..
    Apk Version, Package Name, AppID, Hash Key, IAP Callback URL, IAP Callback Option: Keep the default setting.
  8. -
  9. Publish your game to the store.
  10. -
  11. In the DASHBOARD tab, you can see the overall situation of your publishing tasks.
    .. Pending, which indicates the number of ongoing tasks
    ..
    Success, which indicates the number of successful tasks
    .. Failed, which indicates the number of failed tasks
    ..
    Total, which indicates the total number of all tasks
  12. -
- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-Editor.png b/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-Editor.png deleted file mode 100644 index 7080192..0000000 Binary files a/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-Editor.png and /dev/null differ diff --git a/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-dashboard.png b/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-dashboard.png deleted file mode 100644 index 211b6cf..0000000 Binary files a/UDP-Cloud-Deployment-integration/images/Pushing-hosted-build-UDP-dashboard.png and /dev/null differ diff --git a/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-Developer-Dashboard.png b/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-Developer-Dashboard.png deleted file mode 100644 index f45d0fc..0000000 Binary files a/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-Developer-Dashboard.png and /dev/null differ diff --git a/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-the-Editor.png b/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-the-Editor.png deleted file mode 100644 index 737eb95..0000000 Binary files a/UDP-Cloud-Deployment-integration/images/Uploading-Cloud-Build-the-Editor.png and /dev/null differ diff --git a/UDP-Guide/images/Add-Product-Draft.png b/UDP-Guide/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/UDP-Guide/images/Add-Product-Draft.png and /dev/null differ diff --git a/UDP-Guide/images/Create-a-Game-Settings-file.png b/UDP-Guide/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/UDP-Guide/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/UDP-Guide/images/EditorScript-0.png b/UDP-Guide/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/UDP-Guide/images/EditorScript-0.png and /dev/null differ diff --git a/UDP-Guide/images/EditorScript-3.png b/UDP-Guide/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/UDP-Guide/images/EditorScript-3.png and /dev/null differ diff --git a/UDP-Guide/images/EditorScript-v0.2-2.png b/UDP-Guide/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/UDP-Guide/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/UDP-Guide/images/GameManager.png b/UDP-Guide/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/UDP-Guide/images/GameManager.png and /dev/null differ diff --git a/UDP-Guide/images/Generate-a-Unity-client-and-test-accounts.png b/UDP-Guide/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/UDP-Guide/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/UDP-Guide/images/IAP-Catalog-updated.png b/UDP-Guide/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/UDP-Guide/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/UDP-Guide/images/IAP-Catalog.png b/UDP-Guide/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/UDP-Guide/images/IAP-Catalog.png and /dev/null differ diff --git a/UDP-Guide/images/UDP-Login.png b/UDP-Guide/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/UDP-Guide/images/UDP-Login.png and /dev/null differ diff --git a/UDP-Guide/images/UDP-Purchase-22.png b/UDP-Guide/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/UDP-Guide/images/UDP-Purchase-22.png and /dev/null differ diff --git a/UDP-Guide/images/UDP-PurchaseError-24.png b/UDP-Guide/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/UDP-Guide/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/UDP-Guide/images/UDP-Query-18.png b/UDP-Guide/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/UDP-Guide/images/UDP-Query-18.png and /dev/null differ diff --git a/UDP-Guide/images/UDPSample-Init.png b/UDP-Guide/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/UDP-Guide/images/UDPSample-Init.png and /dev/null differ diff --git a/UDP-Guide/images/UDPSample-PurchaseFail.jpg b/UDP-Guide/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/UDP-Guide/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/UDP-Guide/images/UDPSample-PurchaseSuccess.jpg b/UDP-Guide/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/UDP-Guide/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/UDP-Guide/images/UDPSample-QueryInventory.jpg b/UDP-Guide/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/UDP-Guide/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/UDP-Guide/images/Unity-clent-updated.png b/UDP-Guide/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/UDP-Guide/images/Unity-clent-updated.png and /dev/null differ diff --git a/UDP-Guide/images/Unity_Technologies_logo.svg.png b/UDP-Guide/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/UDP-Guide/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/Unite-Asia-Ticket-Customer-Survey/index.html b/Unite-Asia-Ticket-Customer-Survey/index.html deleted file mode 100644 index 43fdafe..0000000 --- a/Unite-Asia-Ticket-Customer-Survey/index.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unite Asia Ticket Customer Survey Sweepstakes Official Rules and Conditions | Unity Distribution Portal - Public Preview - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - -
- - - -
-
- -

Unite Asia Ticket Customer Survey Sweepstakes Official Rules and Conditions

- - - -
- - - - -
- - -


-

NO PURCHASE NECESSARY TO ENTER OR WIN. A PURCHASE OF ANY KIND WILL NOT INCREASE YOUR CHANCES OF WINNING. VOID WHERE PROHIBITED.

-

The Unite Asia Ticket Customer Survey Sweepstakes (the “Sweepstakes”) is organized by Unity Technologies ApS, who is identified in more detail in Provision 11 herein (the “Sponsor” or “Unity”).

-

  1. DURATION. The Sweepstakes begins on January 30, 2019 (the “Start Date”) and submission period ends on March 17, 2019 (the “Deadline”).

  2. ENTRY.

  3. A. To submit an entry:
    i. Step 1: Go to the UDP Beta Survey at https://on.unity.com/2MD4gUd.
    ii. Step 2: Answer all the questions related to you.

    B. Submission Restrictions.
    i. The Submission must not contain material that violates or infringes another’s rights, including but not limited to privacy, publicity or intellectual property rights, or that constitutes copyright infringement;

    ii. The Submission must not disparage Sponsor or any other person or party affiliated with the promotion and administration of this Sweepstakes;

    iii. The Submission may not include any third party trademarks (logos, names) or copyrighted materials (music, images, video, recognizable people) unless you have obtained permission to use the materials;

    vi. The Submission must not contain material that is inappropriate, indecent, obscene hateful, tortious, defamatory, slanderous or libelous;

    v. The Submission must not contain material that promotes bigotry, racism, hatred or harm against any group or individual or promotes discrimination based on race, gender, religion, nationality, disability, sexual orientation or age; and

    vi. The Submission must not contain material that is unlawful, in violation of or contrary to the laws or regulations in any jurisdiction where the Submission is created.

    C. Each Submission submitted as described above that complies with the Sections 2A and 2B will be referred to as an “Entry” or “Entries.” Entries that do not conform to these Official Rules and Conditions will not be accepted.

    D. Void Entries. Entries generated by any means that violate these Official Rules and Conditions, Unity’s Terms of Service, or Unity’s Privacy Policy are void.

    E. Consent. BY SUBMITTING AN ENTRY, YOU ACCEPT AND AGREE TO BE BOUND BY THESE OFFICIAL RULES AND CONDITIONS, AND CONSENT TO THE UNITY TERMS OF SERVICE, AND UNITY’S PRIVACY POLICY.

  4. ELIGIBILITY.

  5. A. Eligible. To be eligible to enter the Sweepstakes, as of the time you submit your Entry, you must:
    i. Be at least 18 years of age;

    ii. Have Internet access, an email account and access to a personal computer;

    iii. Have utilized the Unity Engine;

    iv. Be a legal resident worldwide excluding residents of: Florida, USA; New York, USA; Quebec, Canada; Brazil; the Crimea region of the Ukraine; Sweden; Italy; Cuba; Iran; North Korea; Sudan; and Syria. Canadian residents will be required to answer an additional mathematical question in order to claim their prizes.

    B. Employees of the Sponsor or its subsidiaries, agents, or affiliates, and any family members and/or household members of these employees, are not eligible to enter the Sweepstakes.

  6. SELECTION OF WINNERS.

  7. A. Determination of Winning Entries. The first ten (10) complete entries from distinct individuals will be winning entries (each a “Winner” and collectively the “Winners”).

    B. Odds of Winning. ODDS OF WINNING A PRIZE ARE SUBJECT TO THE TOTAL NUMBER OF ELIGIBLE ENTRIES RECEIVED

    C. Notification to Winners. The Winners and will be contacted via the email submitted with their Entry.

    D. Any and all decisions of Sponsor shall be final and binding in all respects;

  8. PRIZES.

  9. A. Winners:

    Ten (10) First Place Prizes: One (1) Unite Asia 2019 ticket (Estimated Retail Value: US$150.00 per ticket);

    B. Winners will be contacted via the email submitted with their Entry. If a Winner cannot be contacted, is contacted and does not respond as directed within seven (7) days of attempted notification, refuses the prize or is ineligible to accept the prize, prize may be forfeited and awarded to an alternate winner. All prizes claimed in accordance with the Official Rules will be awarded.

    C. The prizes will be awarded to the Winners within a commercially reasonable time frame. Receipt and use of the prizes may require a personal computer, email, and the internet. All prizes are non-transferable, and no substitutions of the prizes for cash or other goods and services are permitted by the Winners. Notwithstanding the foregoing, Sponsor reserves the right to provide a substitute prize of approximately equal value for any reason.

    D. All federal, state, local and or other applicable taxes, licenses, title and/or registration fees or others costs, associated with winning a prize are the sole responsibility of the Winners. The Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, shall not be responsible for any such taxes, fees and costs.

    E. Winners may have their Entries and names posted on all Unity media channels, including, without limitation, within Unity’s Website, Unity’s Facebook Page, Unity’s Twitter page, and the Unity Blog. Except where legally prohibited, by participating in the Sweepstakes, the Winners hereby give Sponsor and its affiliates, subsidiaries and advertising and promotion agencies full permission, right and authority to use their likeness, photograph, name, hometown, and Entries, or any other information that they provide about themselves, the prize, the Sweepstakes, or Unity, for the purposes of advertising and promotion (in any media, including but not limited to in print media, television, film, video, radio, internet or otherwise) related to the Sweepstakes, Unity or the Sponsor, without any further notification or compensation to such Winners other than that set out herein.

    F. Winners may be required to complete and sign a Non-Disclosure Agreement, an Affidavit of Eligibility and, except where prohibited, Liability/Publicity Release, in the form provided by Sponsor, within seven (7) days of attempted notification in order to claim prizes.

    G. Any prize details not specified herein shall be determined solely by the Sponsor.

    H. Sponsor will use good faith efforts to award Winners tickets to the closest Unite Asia 2019 event to the location of each Winner’s residence, but ticket to a particular event may be limited. Sponsor will not pay for the travel or accommodations of any Winner to attend a Unite event.

  10. GENERAL CONDITIONS.

  11. A. You represent and warrant that your Entry is:

    i. Your own original work and that it does not violate any intellectual property rights or any other rights of any third party (including, without limitation, any privacy, publicity or publishing rights); and

    ii. Not libelous, obscene or otherwise contrary to law. Use of obscenities, racist, sexist, hateful or other material or depictions that, in Sponsor’s sole judgment, are inappropriate or offensive will disqualify an entry.

    B. You agree to:

    i. Be contacted by Sponsor or its agents by email; and

    ii. Sign any requested documentation set forth in Provision 5 herein including, without limitation an Affidavit of Eligibility and Liability/Publicity Release, in the event that you are a Winner.

    C. You acknowledge and agree that all Submissions will be the sole and exclusive property of Sponsor and you hereby irrevocably assign to Sponsor and agree to irrevocably assign to Sponsor all of your right, title, and interest in and to all Submissions, including without limitation all worldwide patent, copyright, trade secret, moral and other proprietary or intellectual property rights therein. At Sponsor’s request and expense, you will execute documents and take such further acts as Sponsor may reasonably request to assist Sponsor to acquire, perfect, and maintain its intellectual property rights and other legal protections for the Submissions.

    D. You waive the right to claim any damages whatsoever, including, but not limited to, punitive, consequential, direct, or indirect damages.

    E. Except where prohibited, you agree that any and all disputes, claims and causes of action arising out of or connected with this Sweepstakes or any prize awarded shall be resolved under the laws of the State of California.

    F. Neither Sponsor nor any of its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, are responsible for lost, interrupted, or unavailable network server or other connections, miscommunications, failed telephone or computer transmissions, or technical failure, jumbled, scrambled or misdirected transmissions, or other errors of any kind whether human, mechanical or electronic or for phone, electrical, network, computer hardware or software program malfunctions, failures or difficulties, or for ISP/network/Web site accessibility or unavailability; any incorrect or inaccurate account information; any incorrect or inaccurate achievement information; human errors; technical malfunctions; theft, tampering, destruction, or unauthorized access to, or alteration of, accounts.

    G. False, fraudulent or deceptive acts shall render you ineligible.

    H.Participants found tampering with or abusing any aspect of this Sweepstakes, as solely determined by Sponsor, will be disqualified.

    I. If disqualified for any tampering or abuses, Sponsor reserves the right to terminate your eligibility to participate in this Sweepstakes or any other Sweepstakes run by Sponsor.

    J. In the event any portion of this Sweepstakes is compromised by virus, bugs, non-authorized human intervention or other causes beyond the control of Sponsor which, in the sole opinion of Sponsor, corrupts, or impairs the administration, security, fairness or proper participation in the Sweepstakes, Sponsor reserves the right at their sole discretion to suspend or terminate the Sweepstakes, and select Winners from participants’ accounts that can be determined by Sponsor to have not been compromised.

    K. All of Sponsor’s decisions regarding the application and interpretation of the Rules are final.

  12. LIMITATIONS OF LIABILITY.

  13. A. To the fullest extent permitted by applicable law:

    i. By entering this Sweepstakes, , you agree that Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, shall not be liable for personal injuries, death, damages, expenses or costs or losses of any kind resulting from participation or inability to participate in this Sweepstakes or acceptance of or use or inability to use a prize or parts thereof including, without limitation, claims, suits, injuries, losses and damages related to personal injuries, death, damage to or destruction of property, rights of publicity or privacy, defamation or portrayal in a false light (whether intentional or unintentional), whether under a theory of contract, tort (including negligence), warranty or other theory; and

    ii. You release the Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and its directors, officers, employees, agents and assigns from any and all liability and responsibility with respect to a prize (including any property loss, damage, personal injury or death).

    B. You acknowledge that Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, have neither made nor are in any manner responsible for any warranty, representation or guarantee, expressed or implied, in fact or in law, related to a prize.

  14. PRIVACY.

  15. A. Information submitted in connection with the Sweepstakes in accordance with these Official Rules and Conditions and Sponsor’s Privacy Policy located at https://unity3d.com/legal/privacy-policy.

    B. By entering this Sweepstakes, you agree that your personal information may be collected, used, by Sponsor and its affiliates, subsidiaries and advertising and promotion agencies, and each of their directors, officers, employees, agents and assigns, for the sole purpose of conducting, administering, and fulfilling the Sweepstakes, including, without limitation notifying you if you are chosen as a potential Winner and for prize delivery.

    C. If allowed under applicable law, you may exercise their right to access and modify the personal information about them stored by Sponsor by writing to privacy@unity3d.com, and detailing their request.

  16. WINNERS LIST.

  17. A list of Winners can also be obtained by sending a self-addressed stamped envelope to Unity Technologies, Attn: Console Support Team, Løvstræde 5, DK-1152 Copenhagen K, Denmark. Do not send any other correspondence to this address.

  18. SEVERABILITY.

  19. In the event any Provision of these Official Rules and Conditions prove unenforceable, void or incomplete, the validity of the other conditions will remain unaffected.

  20. SPONSOR.

  21. This Sweepstakes is sponsored by Unity Technologies APS, a Danish corporation having its principal place of business at Løvstræde 5, DK-1152 Copenhagen K, Denmark, on behalf of itself and its Affiliates. As used herein, the term “Affiliates” shall mean an entity that directly or indirectly controls, is controlled by or is under common control with Unity Technologies ApS.

- -

© 2019 Unity Technologies ApS, Unity Technologies, Unity and their respective logos, are trademarks or registered trademarks of Unity Technologies ApS or its Affiliates. All rights reserved.

- - -
- - - -
- - - -
- - -
- - - - - - - -
- - - - - - - - - -
-
- - - - -
- - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2017/11/index.html b/archives/2017/11/index.html deleted file mode 100644 index e4855a4..0000000 --- a/archives/2017/11/index.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2017/12/index.html b/archives/2017/12/index.html deleted file mode 100644 index 46995de..0000000 --- a/archives/2017/12/index.html +++ /dev/null @@ -1,653 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2017/index.html b/archives/2017/index.html deleted file mode 100644 index 4349462..0000000 --- a/archives/2017/index.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2018/03/index.html b/archives/2018/03/index.html deleted file mode 100644 index 0f3ec75..0000000 --- a/archives/2018/03/index.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2018/05/index.html b/archives/2018/05/index.html deleted file mode 100644 index 295cf3e..0000000 --- a/archives/2018/05/index.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2018/06/index.html b/archives/2018/06/index.html deleted file mode 100644 index 6f6143e..0000000 --- a/archives/2018/06/index.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2018/08/index.html b/archives/2018/08/index.html deleted file mode 100644 index 28d8eb4..0000000 --- a/archives/2018/08/index.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Archive | Unity Distribution Platform - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/archives/2019/03/index.html b/archives/2019/03/index.html index a280300..8096e88 100644 --- a/archives/2019/03/index.html +++ b/archives/2019/03/index.html @@ -2,34 +2,24 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -38,9 +28,6 @@ - - - @@ -48,61 +35,53 @@ - - - - - - + + - + + + + - - - - - - - - + + + + + + + + + + + + + + - + - Archive | Unity Distribution Portal - Public Preview + + + + Archive | Gordon's Blog @@ -131,6 +131,35 @@ + + + + + + @@ -145,23 +174,22 @@ + + +
+
@@ -211,6 +290,7 @@
+ @@ -219,6 +299,7 @@ Um..! 1 post. Keep on posting. + @@ -241,18 +322,16 @@

2019

- +

@@ -277,9 +356,6 @@

- - -
@@ -293,56 +369,57 @@

+ @@ -359,16 +437,18 @@

@@ -400,11 +481,16 @@

+ + + + + - - - - - + + - + - + - + - - - + + - - - - + - + - - - - - + + + @@ -496,15 +571,21 @@

+ + - + + + + + diff --git a/archives/2019/index.html b/archives/2019/index.html index 1507282..eb4612e 100644 --- a/archives/2019/index.html +++ b/archives/2019/index.html @@ -2,34 +2,24 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -38,9 +28,6 @@ - - - @@ -48,61 +35,53 @@ - - - - - - + + - + + + + - - - - - - - - + + + + + + + + + + + + + + - + - Archive | Unity Distribution Portal - Public Preview + + + + Archive | Gordon's Blog @@ -131,6 +131,35 @@ + + + + + + @@ -145,23 +174,22 @@ + + +
+
@@ -211,6 +290,7 @@
+ @@ -219,6 +299,7 @@ Um..! 1 post. Keep on posting. + @@ -241,18 +322,16 @@

2019

- +

@@ -277,9 +356,6 @@

- - -
@@ -293,56 +369,57 @@

+ @@ -359,16 +437,18 @@

@@ -400,11 +481,16 @@

+ + + + + - - - - - + + - + - + - + - - - + + - - - - + - + - - - - - + + + @@ -496,15 +571,21 @@

+ + - + + + + + diff --git a/archives/index.html b/archives/index.html index 38e4fbb..d3734f6 100644 --- a/archives/index.html +++ b/archives/index.html @@ -2,34 +2,24 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -38,9 +28,6 @@ - - - @@ -48,61 +35,53 @@ - - - - - - + + - + + + + - - - - - - - - + + + + + + + + + + + + + + - + - Archive | Unity Distribution Portal - Public Preview + + + + Archive | Gordon's Blog @@ -131,6 +131,35 @@ + + + + + + @@ -145,23 +174,22 @@ + + +
+
@@ -211,6 +290,7 @@
+ @@ -219,6 +299,7 @@ Um..! 1 post. Keep on posting. + @@ -241,18 +322,16 @@

2019

- +

@@ -277,9 +356,6 @@

- - -
@@ -293,56 +369,57 @@

+ @@ -359,16 +437,18 @@

@@ -400,11 +481,16 @@

+ + + + + - - - - - + + - + - + - + - - - + + - - - - + - + - - - - - + + + @@ -496,15 +571,21 @@

+ + - + + + + + diff --git a/configuring-the-SDK-for-UDP/images/Add-Product-Draft.png b/configuring-the-SDK-for-UDP/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Add-Product-Draft.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/Create-a-Game-Settings-file.png b/configuring-the-SDK-for-UDP/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/EditorScript-0.png b/configuring-the-SDK-for-UDP/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/configuring-the-SDK-for-UDP/images/EditorScript-0.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/EditorScript-3.png b/configuring-the-SDK-for-UDP/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/configuring-the-SDK-for-UDP/images/EditorScript-3.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/EditorScript-v0.2-2.png b/configuring-the-SDK-for-UDP/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/configuring-the-SDK-for-UDP/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/GameManager.png b/configuring-the-SDK-for-UDP/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/configuring-the-SDK-for-UDP/images/GameManager.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/Generate-a-Unity-client-and-test-accounts.png b/configuring-the-SDK-for-UDP/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/IAP-Catalog-updated.png b/configuring-the-SDK-for-UDP/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/configuring-the-SDK-for-UDP/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/IAP-Catalog.png b/configuring-the-SDK-for-UDP/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/configuring-the-SDK-for-UDP/images/IAP-Catalog.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/Publish-information.png b/configuring-the-SDK-for-UDP/images/Publish-information.png deleted file mode 100644 index ea2d530..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Publish-information.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDP-Login.png b/configuring-the-SDK-for-UDP/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDP-Login.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDP-Purchase-22.png b/configuring-the-SDK-for-UDP/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDP-Purchase-22.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDP-PurchaseError-24.png b/configuring-the-SDK-for-UDP/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDP-Query-18.png b/configuring-the-SDK-for-UDP/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDP-Query-18.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDPSample-Init.png b/configuring-the-SDK-for-UDP/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDPSample-Init.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseFail.jpg b/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseSuccess.jpg b/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/UDPSample-QueryInventory.jpg b/configuring-the-SDK-for-UDP/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/configuring-the-SDK-for-UDP/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/Unity-clent-updated.png b/configuring-the-SDK-for-UDP/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Unity-clent-updated.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/Unity_Technologies_logo.svg.png b/configuring-the-SDK-for-UDP/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/configuring-the-SDK-for-UDP/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/login-mac.png b/configuring-the-SDK-for-UDP/images/login-mac.png deleted file mode 100644 index 5cc2e3b..0000000 Binary files a/configuring-the-SDK-for-UDP/images/login-mac.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/login-windows.png b/configuring-the-SDK-for-UDP/images/login-windows.png deleted file mode 100644 index 46bd78b..0000000 Binary files a/configuring-the-SDK-for-UDP/images/login-windows.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/publish-gstore.png b/configuring-the-SDK-for-UDP/images/publish-gstore.png deleted file mode 100644 index 35aa791..0000000 Binary files a/configuring-the-SDK-for-UDP/images/publish-gstore.png and /dev/null differ diff --git a/configuring-the-SDK-for-UDP/images/test-accounting-setting.png b/configuring-the-SDK-for-UDP/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/configuring-the-SDK-for-UDP/images/test-accounting-setting.png and /dev/null differ diff --git a/css/fonts/FontAwesome.otf b/css/fonts/FontAwesome.otf new file mode 100644 index 0000000..8b0f54e Binary files /dev/null and b/css/fonts/FontAwesome.otf differ diff --git a/css/fonts/fontawesome-webfont.eot b/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..7c79c6a Binary files /dev/null and b/css/fonts/fontawesome-webfont.eot differ diff --git a/css/fonts/fontawesome-webfont.svg b/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..45fdf33 --- /dev/null +++ b/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/css/fonts/fontawesome-webfont.ttf b/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..e89738d Binary files /dev/null and b/css/fonts/fontawesome-webfont.ttf differ diff --git a/css/fonts/fontawesome-webfont.woff b/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..8c1748a Binary files /dev/null and b/css/fonts/fontawesome-webfont.woff differ diff --git a/css/images/banner.jpg b/css/images/banner.jpg new file mode 100644 index 0000000..b963e06 Binary files /dev/null and b/css/images/banner.jpg differ diff --git a/css/main.css b/css/main.css index 21bed30..9dccf01 100644 --- a/css/main.css +++ b/css/main.css @@ -1,66 +1,44 @@ -/* normalize.css v3.0.2 | MIT License | git.io/normalize */ +/* normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ + line-height: 1.15; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ } body { margin: 0; } -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { +main { display: block; } -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ +h1 { + font-size: 2em; + margin: 0.67em 0; } -audio:not([controls]) { - display: none; - height: 0; +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ } -[hidden], -template { - display: none; +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } a { background-color: transparent; } -a:active, -a:hover { - outline: 0; -} abbr[title] { - border-bottom: 1px dotted; + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ } b, strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; + font-weight: bolder; } -mark { - background: #ff0; - color: #000; +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } small { font-size: 80%; @@ -72,112 +50,102 @@ sup { position: relative; vertical-align: baseline; } -sup { - top: -0.5em; -} sub { bottom: -0.25em; } -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; +sup { + top: -0.5em; } -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; +img { + border-style: none; } button, input, optgroup, select, textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ } -button { +button, +input { +/* 1 */ overflow: visible; } button, select { +/* 1 */ text-transform: none; } button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} -button[disabled], -html input[disabled] { - cursor: default; +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; padding: 0; } -input { - line-height: normal; +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} +fieldset { + padding: 0.35em 0.75em 0.625em; +} +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} +progress { + vertical-align: baseline; +} +textarea { + overflow: auto; } -input[type="checkbox"], -input[type="radio"] { +[type="checkbox"], +[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } -input[type="search"] { +[type="search"] { -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; + outline-offset: -2px; /* 2 */ } -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ } -textarea { - overflow: auto; +details { + display: block; } -optgroup { - font-weight: bold; +summary { + display: list-item; } -table { - border-collapse: collapse; - border-spacing: 0; +template { + display: none; } -td, -th { - padding: 0; +[hidden] { + display: none; } ::selection { background: #262a30; @@ -201,7 +169,7 @@ body { padding-right: 0 !important; } } -@media (min-width: 1600px) { +@media (min-width: 1200px) { body { font-size: 16px; } @@ -212,84 +180,120 @@ h3, h4, h5, h6 { - margin: 0; + margin: 20px 0 15px; padding: 0; font-weight: bold; line-height: 1.5; font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; } -h2, -h3, -h4, -h5, -h6 { - margin: 20px 0 15px; -} h1 { font-size: 22px; } +h1 code { + font-size: 1em; +} @media (max-width: 767px) { h1 { font-size: 18px; } + h1 code { + font-size: 1em; + } } h2 { font-size: 20px; } +h2 code { + font-size: 1em; +} @media (max-width: 767px) { h2 { font-size: 16px; } + h2 code { + font-size: 1em; + } } h3 { font-size: 18px; } +h3 code { + font-size: 1em; +} @media (max-width: 767px) { h3 { font-size: 14px; } + h3 code { + font-size: 1em; + } } h4 { font-size: 16px; } +h4 code { + font-size: 1em; +} @media (max-width: 767px) { h4 { font-size: 12px; } + h4 code { + font-size: 1em; + } } h5 { font-size: 14px; } +h5 code { + font-size: 1em; +} @media (max-width: 767px) { h5 { font-size: 10px; } + h5 code { + font-size: 1em; + } } h6 { font-size: 12px; } +h6 code { + font-size: 1em; +} @media (max-width: 767px) { h6 { font-size: 8px; } + h6 code { + font-size: 1em; + } } p { margin: 0 0 20px 0; } -a { +a, +span.exturl { + overflow-wrap: break-word; + word-wrap: break-word; + background-color: transparent; color: #555; text-decoration: none; outline: none; border-bottom: 1px solid #999; - word-wrap: break-word; + cursor: pointer; } -a:hover { +a:hover, +span.exturl:hover { color: #222; border-bottom-color: #222; } -blockquote { - margin: 0; - padding: 0; +video { + max-width: 100%; + display: block; + margin-left: auto; + margin-right: auto; } img { display: block; @@ -305,6 +309,7 @@ hr { background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px); } blockquote { + margin: 0; padding: 0 15px; color: #666; border-left: 4px solid #ddd; @@ -326,7 +331,7 @@ kbd { box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); background-color: #f9f9f9; font-family: inherit; - background-image: -webkit-linear-gradient(top, #eee, #fff, #eee); + background-image: linear-gradient(top, #eee, #fff, #eee); padding: 0.1em 0.3em; white-space: nowrap; } @@ -398,15 +403,16 @@ kbd { .use-motion .motion-element { opacity: 0; } -table { +.table-container { margin: 20px 0; + overflow: auto; + -webkit-overflow-scrolling: touch; +} +table { width: 100%; border-collapse: collapse; border-spacing: 0; - border: 1px solid #ddd; font-size: 14px; - table-layout: fixed; - word-wrap: break-all; } table>tbody>tr:nth-of-type(odd) { background-color: #f9f9f9; @@ -424,8 +430,8 @@ td { } th, td { + border: 1px solid #ddd; border-bottom: 3px solid #ddd; - border-right: 1px solid #eee; } th { padding-bottom: 10px; @@ -440,42 +446,49 @@ body { } .container { position: relative; - min-height: 100%; } .header-inner { margin: 0 auto; padding: 100px 0 70px; width: 700px; } +@media (min-width: 1200px) { + .container .header-inner { + width: 800px; + } +} @media (min-width: 1600px) { .container .header-inner { width: 900px; } } -.main { - padding-bottom: 150px; -} .main-inner { margin: 0 auto; width: 700px; } +@media (min-width: 1200px) { + .container .main-inner { + width: 800px; + } +} @media (min-width: 1600px) { .container .main-inner { width: 900px; } } .footer { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - min-height: 50px; + padding: 20px 0; } .footer-inner { box-sizing: border-box; - margin: 20px auto; + margin: 0px auto; width: 700px; } +@media (min-width: 1200px) { + .container .footer-inner { + width: 800px; + } +} @media (min-width: 1600px) { .container .footer-inner { width: 900px; @@ -486,7 +499,7 @@ pre, overflow: auto; margin: 20px 0; padding: 0; - font-size: 13px; + font-size: 14px; color: #4d4d4c; background: #f7f7f7; line-height: 1.6; @@ -496,12 +509,13 @@ code { font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; } code { - padding: 2px 4px; + overflow-wrap: break-word; word-wrap: break-word; + padding: 2px 4px; color: #555; background: #eee; border-radius: 3px; - font-size: 13px; + font-size: 14px; } pre { padding: 10px; @@ -534,6 +548,10 @@ pre code { color: #4d4d4c; line-height: 1em; margin-bottom: 1em; + margin: 0em; + padding: 0.5em; + background: #eee; + border-bottom: 1px solid #e9e9e9; } .highlight figcaption:before, .highlight figcaption:after { @@ -593,6 +611,7 @@ pre .comment { pre .variable, pre .attribute, pre .tag, +pre .name, pre .regexp, pre .ruby .constant, pre .xml .tag .title, @@ -607,6 +626,7 @@ pre .css .pseudo { pre .number, pre .preprocessor, pre .built_in, +pre .builtin-name, pre .literal, pre .params, pre .constant, @@ -616,13 +636,13 @@ pre .command { pre .ruby .class .title, pre .css .rules .attribute, pre .string, +pre .symbol, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata, pre .special, -pre .number, pre .formula { color: #718c00; } @@ -644,18 +664,8 @@ pre .keyword, pre .javascript .function { color: #8959a8; } -.full-image.full-image.full-image { +.posts-expand .post-body img.full-image { border: none; - max-width: 100%; - width: auto; - margin: 20px auto; -} -@media (min-width: 992px) { - .full-image.full-image.full-image { - max-width: none; - width: 110%; - margin: 25px -5%; - } } .blockquote-center, .page-home .post-type-quote blockquote, @@ -741,6 +751,29 @@ pre .javascript .function { max-width: 150px; max-height: 150px; } +.post-body .label { + display: inline; + padding: 0 2px; + white-space: nowrap; +} +.post-body .label.default { + background-color: #f0f0f0; +} +.post-body .label.primary { + background-color: #efe6f7; +} +.post-body .label.info { + background-color: #e5f2f8; +} +.post-body .label.success { + background-color: #e7f4e9; +} +.post-body .label.warning { + background-color: #fcf6e1; +} +.post-body .label.danger { + background-color: #fae8eb; +} .post-body .note { position: relative; padding: 15px; @@ -835,29 +868,6 @@ pre .javascript .function { .post-body .note.danger h6 { color: #d9534f; } -.post-body .label { - display: inline; - padding: 0 2px; - white-space: nowrap; -} -.post-body .label.default { - background-color: #f0f0f0; -} -.post-body .label.primary { - background-color: #efe6f7; -} -.post-body .label.info { - background-color: #e5f2f8; -} -.post-body .label.success { - background-color: #e7f4e9; -} -.post-body .label.warning { - background-color: #fcf6e1; -} -.post-body .label.danger { - background-color: #fae8eb; -} .post-body .tabs { position: relative; display: block; @@ -949,13 +959,20 @@ pre .javascript .function { transition-duration: 0.2s; transition-timing-function: ease-in-out; transition-delay: 0s; + line-height: 2; } -.btn:hover, -.post-button .btn:hover { +.btn:hover { border-color: #222; color: #222; background: #fff; } +.btn +.btn { + margin: 0 0 8px 8px; +} +.btn .fa-fw { + width: 1.285714285714286em; + text-align: left; +} .btn-bar { display: block; width: 22px; @@ -1049,6 +1066,9 @@ pre .javascript .function { display: inline-block; margin: 10px; } +.tag-cloud a:hover { + color: #222 !important; +} .back-to-top { box-sizing: border-box; position: fixed; @@ -1063,25 +1083,17 @@ pre .javascript .function { color: #fff; cursor: pointer; text-align: center; - -webkit-transform: translateZ(0); transition-property: bottom; transition-duration: 0.2s; transition-timing-function: ease-in-out; transition-delay: 0s; } -@media (min-width: 768px) and (max-width: 991px) { - .back-to-top { - display: none !important; - } -} -@media (max-width: 767px) { - .back-to-top { - display: none !important; - } -} .back-to-top.back-to-top-on { bottom: 19px; } +.back-to-top:hover { + color: #87daff; +} .header { background: transparent; } @@ -1136,7 +1148,8 @@ pre .javascript .function { } .use-motion .logo, .use-motion .site-title, -.use-motion .site-subtitle { +.use-motion .site-subtitle, +.use-motion .custom-logo-image { opacity: 0; position: relative; top: -10px; @@ -1192,7 +1205,8 @@ pre .javascript .function { margin-top: 10px; } } -.menu .menu-item a { +.menu .menu-item a, +.menu .menu-item span.exturl { display: block; font-size: 13px; line-height: inherit; @@ -1202,7 +1216,8 @@ pre .javascript .function { transition-timing-function: ease-in-out; transition-delay: 0s; } -.menu .menu-item a:hover { +.menu .menu-item a:hover, +.menu .menu-item span.exturl:hover { border-bottom-color: #222; } .menu .menu-item .fa { @@ -1212,19 +1227,19 @@ pre .javascript .function { opacity: 0; } .post-body { + overflow-wrap: break-word; + word-wrap: break-word; font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif; } -@media (max-width: 767px) { - .post-body { - word-break: break-word; - } +.post-body span.exturl .fa { + font-size: 14px; + margin-left: 4px; } .post-body .fancybox img { display: block !important; margin: 0 auto; cursor: pointer; cursor: zoom-in; - cursor: -webkit-zoom-in; } .post-body .image-caption, .post-body .figure .caption { @@ -1238,11 +1253,6 @@ pre .javascript .function { .post-sticky-flag { display: inline-block; font-size: 16px; - -ms-transform: rotate(30deg); - -webkit-transform: rotate(30deg); - -moz-transform: rotate(30deg); - -ms-transform: rotate(30deg); - -o-transform: rotate(30deg); transform: rotate(30deg); } .use-motion .post-block, @@ -1283,6 +1293,11 @@ pre .javascript .function { text-align: justify; } } +@media (max-width: 991px) { + .posts-expand .post-body { + text-align: justify; + } +} .posts-expand .post-body h2, .posts-expand .post-body h3, .posts-expand .post-body h4, @@ -1315,18 +1330,15 @@ pre .javascript .function { .posts-expand .post-body h6:hover .header-anchor { visibility: visible; } -.posts-expand .post-body ul li { +.posts-expand .post-body ul > li { list-style: circle; } .posts-expand .post-body img { box-sizing: border-box; - margin: auto; + margin: 0 auto 25px; padding: 3px; border: 1px solid #ddd; } -.posts-expand .post-body .fancybox img { - margin: 0 auto 25px; -} @media (max-width: 767px) { .posts-collapse { margin: 0 20px; @@ -1435,7 +1447,8 @@ pre .javascript .function { margin-left: 3px; opacity: 0.6; } -.posts-collapse .post-title a { +.posts-collapse .post-title a, +.posts-collapse .post-title span.exturl { color: #666; border-bottom: none; } @@ -1446,8 +1459,9 @@ pre .javascript .function { display: none; } .posts-expand .post-title { + overflow-wrap: break-word; + word-wrap: break-word; text-align: center; - word-break: break-word; font-weight: 400; } .posts-expand .post-title-link { @@ -1467,10 +1481,6 @@ pre .javascript .function { left: 0; background-color: #000; visibility: hidden; - -webkit-transform: scaleX(0); - -moz-transform: scaleX(0); - -ms-transform: scaleX(0); - -o-transform: scaleX(0); transform: scaleX(0); transition-duration: 0.2s; transition-timing-function: ease-in-out; @@ -1478,14 +1488,11 @@ pre .javascript .function { } .posts-expand .post-title-link:hover::before { visibility: visible; - -webkit-transform: scaleX(1); - -moz-transform: scaleX(1); - -ms-transform: scaleX(1); - -o-transform: scaleX(1); transform: scaleX(1); } .posts-expand .post-title-link .fa { - font-size: 16px; + font-size: 20px; + margin-left: 5px; } .posts-expand .post-meta { margin: 3px 0 60px 0; @@ -1506,6 +1513,10 @@ pre .javascript .function { font-size: 14px; margin-top: 2px; } +.posts-expand .post-meta time { + border-bottom: 1px dashed #999; + cursor: help; +} .post-meta-divider { margin: 0 0.5em; } @@ -1532,26 +1543,9 @@ pre .javascript .function { display: none; } } -@media (max-width: 767px) { - .posts-expand .post-comments-count { - display: none; - } -} .post-button { margin-top: 40px; } -.post-button .btn { - color: #fff; - font-size: 14px; - background: #222; - border-radius: 0; - line-height: 2; - margin: 0 4px 8px 4px; -} -.post-button .fa-fw { - width: 1.285714285714286em; - text-align: left; -} .posts-expand .post-tags { margin-top: 40px; text-align: center; @@ -1593,23 +1587,20 @@ pre .javascript .function { top: 2px; } .post-nav-item .fa { - position: absolute; - top: 8px; - left: 0; font-size: 12px; + margin-right: 5px; } .post-nav-next a { - padding-left: 15px; + padding-left: 5px; } .post-nav-prev { text-align: right; } .post-nav-prev a { - padding-right: 15px; + padding-right: 5px; } .post-nav-prev .fa { - right: 0; - left: auto; + margin-left: 5px; } .posts-expand .post-eof { display: block; @@ -1672,15 +1663,19 @@ pre .javascript .function { z-index: 1040; box-shadow: inset 0 2px 6px #000; background: #222; - -webkit-transform: translateZ(0); } -.sidebar a { +.sidebar a, +.sidebar span.exturl { color: #999; border-bottom-color: #555; } -.sidebar a:hover { +.sidebar a:hover, +.sidebar span.exturl:hover { color: #eee; } +.sidebar span.exturl:hover { + border-bottom-color: #eee; +} @media (min-width: 768px) and (max-width: 991px) { .sidebar { display: none !important; @@ -1704,6 +1699,20 @@ pre .javascript .function { overflow-y: auto; overflow-x: hidden; } +.cc-license { + margin-top: 10px; + text-align: center; +} +.cc-license .cc-opacity { + opacity: 0.7; + border-bottom: none; +} +.cc-license .cc-opacity:hover { + opacity: 0.9; +} +.cc-license img { + display: inline-block; +} .sidebar-toggle { position: fixed; right: 30px; @@ -1715,7 +1724,9 @@ pre .javascript .function { line-height: 0; z-index: 1050; cursor: pointer; - -webkit-transform: translateZ(0); +} +.sidebar-toggle:hover .sidebar-toggle-line { + background: #87daff; } @media (min-width: 768px) and (max-width: 991px) { .sidebar-toggle { @@ -1746,6 +1757,7 @@ pre .javascript .function { max-width: 96px; height: auto; border: 2px solid #333; + opacity: 1; } .site-author-name { margin: 5px 0 0; @@ -1760,13 +1772,15 @@ pre .javascript .function { color: #999; } .site-state { + display: flex; + justify-content: center; overflow: hidden; line-height: 1.4; white-space: nowrap; text-align: center; + margin-top: 10px; } .site-state-item { - display: inline-block; padding: 0 15px; border-left: 1px solid #333; } @@ -1788,7 +1802,7 @@ pre .javascript .function { color: inherit; } .feed-link { - margin-top: 20px; + margin-top: 10px; } .feed-link a { display: inline-block; @@ -1811,7 +1825,8 @@ pre .javascript .function { .links-of-author { margin-top: 20px; } -.links-of-author a { +.links-of-author a, +.links-of-author span.exturl { display: inline-block; vertical-align: middle; margin-right: 10px; @@ -1819,7 +1834,8 @@ pre .javascript .function { border-bottom-color: #555; font-size: 13px; } -.links-of-author a:before { +.links-of-author a:before, +.links-of-author span.exturl:before { display: inline-block; vertical-align: middle; margin-right: 3px; @@ -1827,13 +1843,14 @@ pre .javascript .function { width: 4px; height: 4px; border-radius: 50%; - background: #af0491; + background: #8f698f; } .links-of-blogroll { + margin-top: 10px; font-size: 13px; } .links-of-blogroll-title { - margin-top: 20px; + margin-top: 0; font-size: 14px; font-weight: 600; } @@ -1845,7 +1862,8 @@ pre .javascript .function { .links-of-blogroll-item { padding: 2px 10px; } -.links-of-blogroll-item a { +.links-of-blogroll-item a, +.links-of-blogroll-item span.exturl { max-width: 280px; box-sizing: border-box; display: inline-block; @@ -1959,284 +1977,67 @@ pre .javascript .function { .with-love { display: inline-block; margin: 0 5px; + color: #808080; } .powered-by, .theme-info { display: inline-block; } -.cc-license { - margin-top: 10px; - text-align: center; -} -.cc-license .cc-opacity { - opacity: 0.7; - border-bottom: none; -} -.cc-license .cc-opacity:hover { - opacity: 0.9; -} -.cc-license img { - display: inline-block; -} -.theme-next #ds-thread #ds-reset { - color: #555; -} -.theme-next #ds-thread #ds-reset .ds-replybox { - margin-bottom: 30px; -} -.theme-next #ds-thread #ds-reset .ds-replybox .ds-avatar, -.theme-next #ds-reset .ds-avatar img { - box-shadow: none; -} -.theme-next #ds-thread #ds-reset .ds-textarea-wrapper { - border-color: #c7d4e1; - background: none; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.theme-next #ds-thread #ds-reset .ds-textarea-wrapper textarea { - height: 60px; -} -.theme-next #ds-reset .ds-rounded-top { - border-radius: 0; -} -.theme-next #ds-thread #ds-reset .ds-post-toolbar { - box-sizing: border-box; - border: 1px solid #c7d4e1; - background: #f6f8fa; -} -.theme-next #ds-thread #ds-reset .ds-post-options { - height: 40px; - border: none; - background: none; -} -.theme-next #ds-thread #ds-reset .ds-toolbar-buttons { - top: 11px; -} -.theme-next #ds-thread #ds-reset .ds-sync { - top: 5px; -} -.theme-next #ds-thread #ds-reset .ds-post-button { - top: 4px; - right: 5px; - width: 90px; - height: 30px; - border: 1px solid #c5ced7; - border-radius: 3px; - background-image: linear-gradient(#fbfbfc, #f5f7f9); - color: #60676d; -} -.theme-next #ds-thread #ds-reset .ds-post-button:hover { - background-position: 0 -30px; - color: #60676d; -} -.theme-next #ds-thread #ds-reset .ds-comments-info { - padding: 10px 0; -} -.theme-next #ds-thread #ds-reset .ds-sort { - display: none; -} -.theme-next #ds-thread #ds-reset li.ds-tab a.ds-current { - border: none; - background: #f6f8fa; - color: #60676d; -} -.theme-next #ds-thread #ds-reset li.ds-tab a.ds-current:hover { - background-color: #e9f0f7; - color: #60676d; -} -.theme-next #ds-thread #ds-reset li.ds-tab a { - border-radius: 2px; - padding: 5px; -} -.theme-next #ds-thread #ds-reset .ds-login-buttons p { - color: #999; - line-height: 36px; -} -.theme-next #ds-thread #ds-reset .ds-login-buttons .ds-service-list li { - height: 28px; -} -.theme-next #ds-thread #ds-reset .ds-service-list a { - background: none; - padding: 5px; - border: 1px solid; - border-radius: 3px; - text-align: center; -} -.theme-next #ds-thread #ds-reset .ds-service-list a:hover { - color: #fff; - background: #666; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-weibo { - color: #fc9b00; - border-color: #fc9b00; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-weibo:hover { - background: #fc9b00; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-qq { - color: #60a3ec; - border-color: #60a3ec; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-qq:hover { - background: #60a3ec; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-renren { - color: #2e7ac4; - border-color: #2e7ac4; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-renren:hover { - background: #2e7ac4; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-douban { - color: #37994c; - border-color: #37994c; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-douban:hover { - background: #37994c; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-kaixin { - color: #fef20d; - border-color: #fef20d; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-kaixin:hover { - background: #fef20d; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-netease { - color: #f00; - border-color: #f00; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-netease:hover { - background: #f00; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-sohu { - color: #ffcb05; - border-color: #ffcb05; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-sohu:hover { - background: #ffcb05; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-baidu { - color: #2831e0; - border-color: #2831e0; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-baidu:hover { - background: #2831e0; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-google { - color: #166bec; - border-color: #166bec; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-google:hover { - background: #166bec; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-weixin { - color: #00ce0d; - border-color: #00ce0d; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-weixin:hover { - background: #00ce0d; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-more-services { - border: none; -} -.theme-next #ds-thread #ds-reset .ds-service-list .ds-more-services:hover { - background: none; -} -.theme-next #ds-reset .duoshuo-ua-admin { - display: inline-block; - color: #f00; -} -.theme-next #ds-reset .duoshuo-ua-platform, -.theme-next #ds-reset .duoshuo-ua-browser { - color: #ccc; -} -.theme-next #ds-reset .duoshuo-ua-platform .fa, -.theme-next #ds-reset .duoshuo-ua-browser .fa { - display: inline-block; - margin-right: 3px; -} -.theme-next #ds-reset .duoshuo-ua-separator { - display: inline-block; - margin-left: 5px; -} -.theme-next .this_ua { - background-color: #ccc !important; - border-radius: 4px; - padding: 0 5px !important; - margin: 1px 1px !important; - border: 1px solid #bbb !important; - color: #fff; - display: inline-block !important; -} -.theme-next .this_ua.admin { - background-color: #d9534f !important; - border-color: #d9534f !important; -} -.theme-next .this_ua.platform.iOS, -.theme-next .this_ua.platform.Mac, -.theme-next .this_ua.platform.Windows { - background-color: #39b3d7 !important; - border-color: #46b8da !important; -} -.theme-next .this_ua.platform.Linux { - background-color: #3a3a3a !important; - border-color: #1f1f1f !important; -} -.theme-next .this_ua.platform.Android { - background-color: #00c47d !important; - border-color: #01b171 !important; -} -.theme-next .this_ua.browser.Mobile, -.theme-next .this_ua.browser.Chrome { - background-color: #5cb85c !important; - border-color: #4cae4c !important; -} -.theme-next .this_ua.browser.Firefox { - background-color: #f0ad4e !important; - border-color: #eea236 !important; -} -.theme-next .this_ua.browser.Maxthon, -.theme-next .this_ua.browser.IE { - background-color: #428bca !important; - border-color: #357ebd !important; -} -.theme-next .this_ua.browser.baidu, -.theme-next .this_ua.browser.UCBrowser, -.theme-next .this_ua.browser.Opera { - background-color: #d9534f !important; - border-color: #d43f3a !important; -} -.theme-next .this_ua.browser.Android, -.theme-next .this_ua.browser.QQBrowser { - background-color: #78ace9 !important; - border-color: #4cae4c !important; -} -.post-spread { - margin-top: 20px; - text-align: center; -} -.jiathis_style { - display: inline-block; -} -.jiathis_style a { - border: none; -} -.fa { - font-family: FontAwesome !important; -} -.post-spread { - margin-top: 20px; - text-align: center; +@-moz-keyframes iconAnimate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.9); + } + 20%, 40%, 60%, 80% { + transform: scale(1.1); + } + 50%, 70% { + transform: scale(1.1); + } } -.bdshare-slide-button-box a { - border: none; +@-webkit-keyframes iconAnimate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.9); + } + 20%, 40%, 60%, 80% { + transform: scale(1.1); + } + 50%, 70% { + transform: scale(1.1); + } } -.bdsharebuttonbox { - display: inline-block; +@-o-keyframes iconAnimate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.9); + } + 20%, 40%, 60%, 80% { + transform: scale(1.1); + } + 50%, 70% { + transform: scale(1.1); + } } -.bdsharebuttonbox a { - border: none; +@keyframes iconAnimate { + 0%, 100% { + transform: scale(1); + } + 10%, 30% { + transform: scale(0.9); + } + 20%, 40%, 60%, 80% { + transform: scale(1.1); + } + 50%, 70% { + transform: scale(1.1); + } } .local-search-pop-overlay { position: fixed; @@ -2341,31 +2142,9 @@ pre .javascript .function { position: absolute; left: 50%; top: 50%; - -webkit-transform: translate(-50%, -50%); - -webkit-transform: translate(-50%, -50%); - -moz-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - -o-transform: translate(-50%, -50%); transform: translate(-50%, -50%); color: #ccc; } -.site-uv, -.site-pv, -.page-pv { - display: inline-block; -} -.site-uv .busuanzi-value, -.site-pv .busuanzi-value, -.page-pv .busuanzi-value { - margin: 0 5px; -} -.site-uv { - margin-right: 10px; -} -.site-uv::after { - content: "|"; - padding-left: 10px; -} .page-archive .archive-page-counter { position: relative; top: 3px; @@ -2388,6 +2167,10 @@ pre .javascript .function { border: 1px solid #fff; border-radius: 50%; } +.page-archive .fa-external-link { + font-size: 15px; + margin-left: 5px; +} .category-all-page .category-all-title { text-align: center; } @@ -2484,9 +2267,10 @@ pre .javascript .function { } #schedule ul#event-list li.event-past { background: #fcfcfc; + padding: 15px 0 15px 10px; } #schedule ul#event-list li.event-past > * { - opacity: 0.6; + opacity: 0.9; } #schedule ul#event-list li.event-past h2.event-summary { color: #bbb; @@ -2500,10 +2284,6 @@ pre .javascript .function { padding: 15px 0 15px 10px; } #schedule ul#event-list li.event-now h2.event-summary:before { - -webkit-transform: scale(1.2); - -moz-transform: scale(1.2); - -ms-transform: scale(1.2); - -o-transform: scale(1.2); transform: scale(1.2); color: #fff; animation: dot-flash 1s alternate infinite ease-in-out; @@ -2511,75 +2291,56 @@ pre .javascript .function { #schedule ul#event-list li.event-now * { color: #fff !important; } +#schedule ul#event-list li.event-future { + background: #222; + color: #fff; + padding: 15px 0 15px 10px; +} +#schedule ul#event-list li.event-future h2.event-summary:before { + transform: scale(1.2); + color: #fff; + animation: dot-flash 1s alternate infinite ease-in-out; +} +#schedule ul#event-list li.event-future * { + color: #fff !important; +} @-moz-keyframes dot-flash { from { opacity: 1; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); transform: scale(1.1); } to { opacity: 0; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); transform: scale(1); } } @-webkit-keyframes dot-flash { from { opacity: 1; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); transform: scale(1.1); } to { opacity: 0; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); transform: scale(1); } } @-o-keyframes dot-flash { from { opacity: 1; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); transform: scale(1.1); } to { opacity: 0; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); transform: scale(1); } } @keyframes dot-flash { from { opacity: 1; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); transform: scale(1.1); } to { opacity: 0; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); transform: scale(1); } } @@ -2589,6 +2350,24 @@ pre .javascript .function { .page-post-detail .comments { overflow: hidden; } +ul.breadcrumb { + list-style: none; + margin: 1em 0; + padding: 0 2em; + text-align: center; + font-size: 12px; +} +ul.breadcrumb li { + display: inline; +} +ul.breadcrumb li+li:before { + padding: 0.5em; + font-weight: normal; + content: "/\00a0"; +} +ul.breadcrumb li+li:last-child { + font-weight: bold; +} @media (max-width: 767px) { .header-inner, .container .main-inner, @@ -2630,7 +2409,7 @@ embed { padding: 0; background: #fff; border-bottom: 1px solid #ddd; - z-index: 1; + z-index: 1030; } } @media (max-width: 767px) { @@ -2638,6 +2417,19 @@ embed { text-align: left; } } +.menu-item-active a, +.menu .menu-item a:hover, +.menu .menu-item span.exturl:hover { + border-bottom-color: #222 !important; + color: #222; +} +@media (max-width: 767px) { + .menu-item-active a, + .menu .menu-item a:hover, + .menu .menu-item span.exturl:hover { + border-bottom: 1px dotted #ddd !important; + } +} @media (max-width: 767px) { .menu .menu-item { display: block; @@ -2645,18 +2437,48 @@ embed { vertical-align: top; } } +.menu .menu-item .badge { + display: inline-block; + padding: 1px 4px; + margin-left: 5px; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + background-color: #eee; +} +@media (max-width: 767px) { + .menu .menu-item .badge { + float: right; + margin: 0.35em 0 0 0; + } +} @media (max-width: 767px) { .menu .menu-item br { display: none; } } @media (max-width: 767px) { - .menu .menu-item a { + .menu .menu-item a, + .menu .menu-item span.exturl { padding: 5px 10px; } } -.menu .menu-item .fa { - margin-right: 0; +@media (hover: none) { + .menu .menu-item a:hover, + .menu .menu-item span.exturl:hover { + border-bottom-color: transparent !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .menu .menu-item .fa { + width: 100%; + } +} +@media (min-width: 992px) { + .menu .menu-item .fa { + width: 100%; + } } .site-search form { display: none; diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..0cfa2d3 --- /dev/null +++ b/css/style.css @@ -0,0 +1,1374 @@ +body { + width: 100%; +} +body:before, +body:after { + content: ""; + display: table; +} +body:after { + clear: both; +} +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-family: inherit; + font-size: 100%; + vertical-align: baseline; +} +body { + line-height: 1; + color: #000; + background: #fff; +} +ol, +ul { + list-style: none; +} +table { + border-collapse: separate; + border-spacing: 0; + vertical-align: middle; +} +caption, +th, +td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +a img { + border: none; +} +input, +button { + margin: 0; + padding: 0; +} +input::-moz-focus-inner, +button::-moz-focus-inner { + border: 0; + padding: 0; +} +@font-face { + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + src: url("fonts/fontawesome-webfont.eot?v=#4.0.3"); + src: url("fonts/fontawesome-webfont.eot?#iefix&v=#4.0.3") format("embedded-opentype"), url("fonts/fontawesome-webfont.woff?v=#4.0.3") format("woff"), url("fonts/fontawesome-webfont.ttf?v=#4.0.3") format("truetype"), url("fonts/fontawesome-webfont.svg#fontawesomeregular?v=#4.0.3") format("svg"); +} +html, +body, +#container { + height: 100%; +} +body { + background: #eee; + font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + -webkit-text-size-adjust: 100%; +} +.outer { + max-width: 1220px; + margin: 0 auto; + padding: 0 20px; +} +.outer:before, +.outer:after { + content: ""; + display: table; +} +.outer:after { + clear: both; +} +.inner { + display: inline; + float: left; + width: 98.33333333333333%; + margin: 0 0.833333333333333%; +} +.left, +.alignleft { + float: left; +} +.right, +.alignright { + float: right; +} +.clear { + clear: both; +} +#container { + position: relative; +} +.mobile-nav-on { + overflow: hidden; +} +#wrap { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + -webkit-transition: 0.2s ease-out; + -moz-transition: 0.2s ease-out; + -ms-transition: 0.2s ease-out; + transition: 0.2s ease-out; + z-index: 1; + background: #eee; +} +.mobile-nav-on #wrap { + left: 280px; +} +@media screen and (min-width: 768px) { + #main { + display: inline; + float: left; + width: 73.33333333333333%; + margin: 0 0.833333333333333%; + } +} +.article-date, +.article-category-link, +.archive-year, +.widget-title { + text-decoration: none; + text-transform: uppercase; + letter-spacing: 2px; + color: #999; + margin-bottom: 1em; + margin-left: 5px; + line-height: 1em; + text-shadow: 0 1px #fff; + font-weight: bold; +} +.article-inner, +.archive-article-inner { + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + border: 1px solid #ddd; + border-radius: 3px; +} +.article-entry h1, +.widget h1 { + font-size: 2em; +} +.article-entry h2, +.widget h2 { + font-size: 1.5em; +} +.article-entry h3, +.widget h3 { + font-size: 1.3em; +} +.article-entry h4, +.widget h4 { + font-size: 1.2em; +} +.article-entry h5, +.widget h5 { + font-size: 1em; +} +.article-entry h6, +.widget h6 { + font-size: 1em; + color: #999; +} +.article-entry hr, +.widget hr { + border: 1px dashed #ddd; +} +.article-entry strong, +.widget strong { + font-weight: bold; +} +.article-entry em, +.widget em, +.article-entry cite, +.widget cite { + font-style: italic; +} +.article-entry sup, +.widget sup, +.article-entry sub, +.widget sub { + font-size: 0.75em; + line-height: 0; + position: relative; + vertical-align: baseline; +} +.article-entry sup, +.widget sup { + top: -0.5em; +} +.article-entry sub, +.widget sub { + bottom: -0.2em; +} +.article-entry small, +.widget small { + font-size: 0.85em; +} +.article-entry acronym, +.widget acronym, +.article-entry abbr, +.widget abbr { + border-bottom: 1px dotted; +} +.article-entry ul, +.widget ul, +.article-entry ol, +.widget ol, +.article-entry dl, +.widget dl { + margin: 0 20px; + line-height: 1.6em; +} +.article-entry ul ul, +.widget ul ul, +.article-entry ol ul, +.widget ol ul, +.article-entry ul ol, +.widget ul ol, +.article-entry ol ol, +.widget ol ol { + margin-top: 0; + margin-bottom: 0; +} +.article-entry ul, +.widget ul { + list-style: disc; +} +.article-entry ol, +.widget ol { + list-style: decimal; +} +.article-entry dt, +.widget dt { + font-weight: bold; +} +#header { + height: 300px; + position: relative; + border-bottom: 1px solid #ddd; +} +#header:before, +#header:after { + content: ""; + position: absolute; + left: 0; + right: 0; + height: 40px; +} +#header:before { + top: 0; + background: -webkit-linear-gradient(rgba(0,0,0,0.2), transparent); + background: -moz-linear-gradient(rgba(0,0,0,0.2), transparent); + background: -ms-linear-gradient(rgba(0,0,0,0.2), transparent); + background: linear-gradient(rgba(0,0,0,0.2), transparent); +} +#header:after { + bottom: 0; + background: -webkit-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: -moz-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: -ms-linear-gradient(transparent, rgba(0,0,0,0.2)); + background: linear-gradient(transparent, rgba(0,0,0,0.2)); +} +#header-outer { + height: 100%; + position: relative; +} +#header-inner { + position: relative; + overflow: hidden; +} +#banner { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url("images/banner.jpg") center #000; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + z-index: -1; +} +#header-title { + text-align: center; + height: 40px; + position: absolute; + top: 50%; + left: 0; + margin-top: -20px; +} +#logo, +#subtitle { + text-decoration: none; + color: #fff; + font-weight: 300; + text-shadow: 0 1px 4px rgba(0,0,0,0.3); +} +#logo { + font-size: 40px; + line-height: 40px; + letter-spacing: 2px; +} +#subtitle { + font-size: 16px; + line-height: 16px; + letter-spacing: 1px; +} +#subtitle-wrap { + margin-top: 16px; +} +#main-nav { + float: left; + margin-left: -15px; +} +.nav-icon, +.main-nav-link { + float: left; + color: #fff; + opacity: 0.6; + text-decoration: none; + text-shadow: 0 1px rgba(0,0,0,0.2); + -webkit-transition: opacity 0.2s; + -moz-transition: opacity 0.2s; + -ms-transition: opacity 0.2s; + transition: opacity 0.2s; + display: block; + padding: 20px 15px; +} +.nav-icon:hover, +.main-nav-link:hover { + opacity: 1; +} +.nav-icon { + font-family: FontAwesome; + text-align: center; + font-size: 14px; + width: 14px; + height: 14px; + padding: 20px 15px; + position: relative; + cursor: pointer; +} +.main-nav-link { + font-weight: 300; + letter-spacing: 1px; +} +@media screen and (max-width: 479px) { + .main-nav-link { + display: none; + } +} +#main-nav-toggle { + display: none; +} +#main-nav-toggle:before { + content: "\f0c9"; +} +@media screen and (max-width: 479px) { + #main-nav-toggle { + display: block; + } +} +#sub-nav { + float: right; + margin-right: -15px; +} +#nav-rss-link:before { + content: "\f09e"; +} +#nav-search-btn:before { + content: "\f002"; +} +#search-form-wrap { + position: absolute; + top: 15px; + width: 150px; + height: 30px; + right: -150px; + opacity: 0; + -webkit-transition: 0.2s ease-out; + -moz-transition: 0.2s ease-out; + -ms-transition: 0.2s ease-out; + transition: 0.2s ease-out; +} +#search-form-wrap.on { + opacity: 1; + right: 0; +} +@media screen and (max-width: 479px) { + #search-form-wrap { + width: 100%; + right: -100%; + } +} +.search-form { + position: absolute; + top: 0; + left: 0; + right: 0; + background: #fff; + padding: 5px 15px; + border-radius: 15px; + -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.3); + box-shadow: 0 0 10px rgba(0,0,0,0.3); +} +.search-form-input { + border: none; + background: none; + color: #555; + width: 100%; + font: 13px -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + outline: none; +} +.search-form-input::-webkit-search-results-decoration, +.search-form-input::-webkit-search-cancel-button { + -webkit-appearance: none; +} +.search-form-submit { + position: absolute; + top: 50%; + right: 10px; + margin-top: -7px; + font: 13px FontAwesome; + border: none; + background: none; + color: #bbb; + cursor: pointer; +} +.search-form-submit:hover, +.search-form-submit:focus { + color: #777; +} +.article { + margin: 50px 0; +} +.article-inner { + overflow: hidden; +} +.article-meta:before, +.article-meta:after { + content: ""; + display: table; +} +.article-meta:after { + clear: both; +} +.article-date { + float: left; +} +.article-category { + float: left; + line-height: 1em; + color: #ccc; + text-shadow: 0 1px #fff; + margin-left: 8px; +} +.article-category:before { + content: "\2022"; +} +.article-category-link { + margin: 0 12px 1em; +} +.article-header { + padding: 20px 20px 0; +} +.article-title { + text-decoration: none; + font-size: 2em; + font-weight: bold; + color: #555; + line-height: 1.1em; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; +} +a.article-title:hover { + color: #258fb8; +} +.article-entry { + color: #555; + padding: 0 20px; +} +.article-entry:before, +.article-entry:after { + content: ""; + display: table; +} +.article-entry:after { + clear: both; +} +.article-entry p, +.article-entry table { + line-height: 1.6em; + margin: 1.6em 0; +} +.article-entry h1, +.article-entry h2, +.article-entry h3, +.article-entry h4, +.article-entry h5, +.article-entry h6 { + font-weight: bold; +} +.article-entry h1, +.article-entry h2, +.article-entry h3, +.article-entry h4, +.article-entry h5, +.article-entry h6 { + line-height: 1.1em; + margin: 1.1em 0; +} +.article-entry a { + color: #258fb8; + text-decoration: none; +} +.article-entry a:hover { + text-decoration: underline; +} +.article-entry ul, +.article-entry ol, +.article-entry dl { + margin-top: 1.6em; + margin-bottom: 1.6em; +} +.article-entry img, +.article-entry video { + max-width: 100%; + height: auto; + display: block; + margin: auto; +} +.article-entry iframe { + border: none; +} +.article-entry table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} +.article-entry th { + font-weight: bold; + border-bottom: 3px solid #ddd; + padding-bottom: 0.5em; +} +.article-entry td { + border-bottom: 1px solid #ddd; + padding: 10px 0; +} +.article-entry blockquote { + font-family: Georgia, "Times New Roman", serif; + font-size: 1.4em; + margin: 1.6em 20px; + text-align: center; +} +.article-entry blockquote footer { + font-size: 14px; + margin: 1.6em 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; +} +.article-entry blockquote footer cite:before { + content: "—"; + padding: 0 0.5em; +} +.article-entry .pullquote { + text-align: left; + width: 45%; + margin: 0; +} +.article-entry .pullquote.left { + margin-left: 0.5em; + margin-right: 1em; +} +.article-entry .pullquote.right { + margin-right: 0.5em; + margin-left: 1em; +} +.article-entry .caption { + color: #999; + display: block; + font-size: 0.9em; + margin-top: 0.5em; + position: relative; + text-align: center; +} +.article-entry .video-container { + position: relative; + padding-top: 56.25%; + height: 0; + overflow: hidden; +} +.article-entry .video-container iframe, +.article-entry .video-container object, +.article-entry .video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin-top: 0; +} +.article-more-link a { + display: inline-block; + line-height: 1em; + padding: 6px 15px; + border-radius: 15px; + background: #eee; + color: #999; + text-shadow: 0 1px #fff; + text-decoration: none; +} +.article-more-link a:hover { + background: #258fb8; + color: #fff; + text-decoration: none; + text-shadow: 0 1px #1e7293; +} +.article-footer { + font-size: 0.85em; + line-height: 1.6em; + border-top: 1px solid #ddd; + padding-top: 1.6em; + margin: 0 20px 20px; +} +.article-footer:before, +.article-footer:after { + content: ""; + display: table; +} +.article-footer:after { + clear: both; +} +.article-footer a { + color: #999; + text-decoration: none; +} +.article-footer a:hover { + color: #555; +} +.article-tag-list-item { + float: left; + margin-right: 10px; +} +.article-tag-list-link:before { + content: "#"; +} +.article-comment-link { + float: right; +} +.article-comment-link:before { + content: "\f075"; + font-family: FontAwesome; + padding-right: 8px; +} +.article-share-link { + cursor: pointer; + float: right; + margin-left: 20px; +} +.article-share-link:before { + content: "\f064"; + font-family: FontAwesome; + padding-right: 6px; +} +#article-nav { + position: relative; +} +#article-nav:before, +#article-nav:after { + content: ""; + display: table; +} +#article-nav:after { + clear: both; +} +@media screen and (min-width: 768px) { + #article-nav { + margin: 50px 0; + } + #article-nav:before { + width: 8px; + height: 8px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -4px; + margin-left: -4px; + content: ""; + border-radius: 50%; + background: #ddd; + -webkit-box-shadow: 0 1px 2px #fff; + box-shadow: 0 1px 2px #fff; + } +} +.article-nav-link-wrap { + text-decoration: none; + text-shadow: 0 1px #fff; + color: #999; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-top: 50px; + text-align: center; + display: block; +} +.article-nav-link-wrap:hover { + color: #555; +} +@media screen and (min-width: 768px) { + .article-nav-link-wrap { + width: 50%; + margin-top: 0; + } +} +@media screen and (min-width: 768px) { + #article-nav-newer { + float: left; + text-align: right; + padding-right: 20px; + } +} +@media screen and (min-width: 768px) { + #article-nav-older { + float: right; + text-align: left; + padding-left: 20px; + } +} +.article-nav-caption { + text-transform: uppercase; + letter-spacing: 2px; + color: #ddd; + line-height: 1em; + font-weight: bold; +} +#article-nav-newer .article-nav-caption { + margin-right: -2px; +} +.article-nav-title { + font-size: 0.85em; + line-height: 1.6em; + margin-top: 0.5em; +} +.article-share-box { + position: absolute; + display: none; + background: #fff; + -webkit-box-shadow: 1px 2px 10px rgba(0,0,0,0.2); + box-shadow: 1px 2px 10px rgba(0,0,0,0.2); + border-radius: 3px; + margin-left: -145px; + overflow: hidden; + z-index: 1; +} +.article-share-box.on { + display: block; +} +.article-share-input { + width: 100%; + background: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + padding: 0 15px; + color: #555; + outline: none; + border: 1px solid #ddd; + border-radius: 3px 3px 0 0; + height: 36px; + line-height: 36px; +} +.article-share-links { + background: #eee; +} +.article-share-links:before, +.article-share-links:after { + content: ""; + display: table; +} +.article-share-links:after { + clear: both; +} +.article-share-twitter, +.article-share-facebook, +.article-share-pinterest, +.article-share-google { + width: 50px; + height: 36px; + display: block; + float: left; + position: relative; + color: #999; + text-shadow: 0 1px #fff; +} +.article-share-twitter:before, +.article-share-facebook:before, +.article-share-pinterest:before, +.article-share-google:before { + font-size: 20px; + font-family: FontAwesome; + width: 20px; + height: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -10px; + margin-left: -10px; + text-align: center; +} +.article-share-twitter:hover, +.article-share-facebook:hover, +.article-share-pinterest:hover, +.article-share-google:hover { + color: #fff; +} +.article-share-twitter:before { + content: "\f099"; +} +.article-share-twitter:hover { + background: #00aced; + text-shadow: 0 1px #008abe; +} +.article-share-facebook:before { + content: "\f09a"; +} +.article-share-facebook:hover { + background: #3b5998; + text-shadow: 0 1px #2f477a; +} +.article-share-pinterest:before { + content: "\f0d2"; +} +.article-share-pinterest:hover { + background: #cb2027; + text-shadow: 0 1px #a21a1f; +} +.article-share-google:before { + content: "\f0d5"; +} +.article-share-google:hover { + background: #dd4b39; + text-shadow: 0 1px #be3221; +} +.article-gallery { + background: #000; + position: relative; +} +.article-gallery-photos { + position: relative; + overflow: hidden; +} +.article-gallery-img { + display: none; + max-width: 100%; +} +.article-gallery-img:first-child { + display: block; +} +.article-gallery-img.loaded { + position: absolute; + display: block; +} +.article-gallery-img img { + display: block; + max-width: 100%; + margin: 0 auto; +} +#comments { + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + padding: 20px; + border: 1px solid #ddd; + border-radius: 3px; + margin: 50px 0; +} +#comments a { + color: #258fb8; +} +.archives-wrap { + margin: 50px 0; +} +.archives:before, +.archives:after { + content: ""; + display: table; +} +.archives:after { + clear: both; +} +.archive-year-wrap { + margin-bottom: 1em; +} +.archives { + -webkit-column-gap: 10px; + -moz-column-gap: 10px; + column-gap: 10px; +} +@media screen and (min-width: 480px) and (max-width: 767px) { + .archives { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } +} +@media screen and (min-width: 768px) { + .archives { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } +} +.archive-article { + -webkit-column-break-inside: avoid; + page-break-inside: avoid; + overflow: hidden; + break-inside: avoid-column; +} +.archive-article-inner { + padding: 10px; + margin-bottom: 15px; +} +.archive-article-title { + text-decoration: none; + font-weight: bold; + color: #555; + -webkit-transition: color 0.2s; + -moz-transition: color 0.2s; + -ms-transition: color 0.2s; + transition: color 0.2s; + line-height: 1.6em; +} +.archive-article-title:hover { + color: #258fb8; +} +.archive-article-footer { + margin-top: 1em; +} +.archive-article-date { + color: #999; + text-decoration: none; + font-size: 0.85em; + line-height: 1em; + margin-bottom: 0.5em; + display: block; +} +#page-nav { + margin: 50px auto; + background: #fff; + -webkit-box-shadow: 1px 2px 3px #ddd; + box-shadow: 1px 2px 3px #ddd; + border: 1px solid #ddd; + border-radius: 3px; + text-align: center; + color: #999; + overflow: hidden; +} +#page-nav:before, +#page-nav:after { + content: ""; + display: table; +} +#page-nav:after { + clear: both; +} +#page-nav a, +#page-nav span { + padding: 10px 20px; + line-height: 1; + height: 2ex; +} +#page-nav a { + color: #999; + text-decoration: none; +} +#page-nav a:hover { + background: #999; + color: #fff; +} +#page-nav .prev { + float: left; +} +#page-nav .next { + float: right; +} +#page-nav .page-number { + display: inline-block; +} +@media screen and (max-width: 479px) { + #page-nav .page-number { + display: none; + } +} +#page-nav .current { + color: #555; + font-weight: bold; +} +#page-nav .space { + color: #ddd; +} +#footer { + background: #262a30; + padding: 50px 0; + border-top: 1px solid #ddd; + color: #999; +} +#footer a { + color: #258fb8; + text-decoration: none; +} +#footer a:hover { + text-decoration: underline; +} +#footer-info { + line-height: 1.6em; + font-size: 0.85em; +} +.article-entry pre, +.article-entry .highlight { + background: #2d2d2d; + margin: 0 -20px; + padding: 15px 20px; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + overflow: auto; + color: #ccc; + line-height: 22.400000000000002px; +} +.article-entry .highlight .gutter pre, +.article-entry .gist .gist-file .gist-data .line-numbers { + color: #666; + font-size: 0.85em; +} +.article-entry pre, +.article-entry code { + font-family: "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace; +} +.article-entry code { + background: #eee; + text-shadow: 0 1px #fff; + padding: 0 0.3em; +} +.article-entry pre code { + background: none; + text-shadow: none; + padding: 0; +} +.article-entry .highlight pre { + border: none; + margin: 0; + padding: 0; +} +.article-entry .highlight table { + margin: 0; + width: auto; +} +.article-entry .highlight td { + border: none; + padding: 0; +} +.article-entry .highlight figcaption { + font-size: 0.85em; + color: #999; + line-height: 1em; + margin-bottom: 1em; +} +.article-entry .highlight figcaption:before, +.article-entry .highlight figcaption:after { + content: ""; + display: table; +} +.article-entry .highlight figcaption:after { + clear: both; +} +.article-entry .highlight figcaption a { + float: right; +} +.article-entry .highlight .gutter pre { + text-align: right; + padding-right: 20px; +} +.article-entry .highlight .line { + height: 22.400000000000002px; +} +.article-entry .highlight .line.marked { + background: #515151; +} +.article-entry .gist { + margin: 0 -20px; + border-style: solid; + border-color: #ddd; + border-width: 1px 0; + background: #2d2d2d; + padding: 15px 20px 15px 0; +} +.article-entry .gist .gist-file { + border: none; + font-family: "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace; + margin: 0; +} +.article-entry .gist .gist-file .gist-data { + background: none; + border: none; +} +.article-entry .gist .gist-file .gist-data .line-numbers { + background: none; + border: none; + padding: 0 20px 0 0; +} +.article-entry .gist .gist-file .gist-data .line-data { + padding: 0 !important; +} +.article-entry .gist .gist-file .highlight { + margin: 0; + padding: 0; + border: none; +} +.article-entry .gist .gist-file .gist-meta { + background: #2d2d2d; + color: #999; + font: 0.85em -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + text-shadow: 0 0; + padding: 0; + margin-top: 1em; + margin-left: 20px; +} +.article-entry .gist .gist-file .gist-meta a { + color: #258fb8; + font-weight: normal; +} +.article-entry .gist .gist-file .gist-meta a:hover { + text-decoration: underline; +} +pre .comment, +pre .title { + color: #999; +} +pre .variable, +pre .attribute, +pre .tag, +pre .regexp, +pre .ruby .constant, +pre .xml .tag .title, +pre .xml .pi, +pre .xml .doctype, +pre .html .doctype, +pre .css .id, +pre .css .class, +pre .css .pseudo { + color: #f2777a; +} +pre .number, +pre .preprocessor, +pre .built_in, +pre .literal, +pre .params, +pre .constant { + color: #f99157; +} +pre .class, +pre .ruby .class .title, +pre .css .rules .attribute { + color: #9c9; +} +pre .string, +pre .value, +pre .inheritance, +pre .header, +pre .ruby .symbol, +pre .xml .cdata { + color: #9c9; +} +pre .css .hexcolor { + color: #6cc; +} +pre .function, +pre .python .decorator, +pre .python .title, +pre .ruby .function .title, +pre .ruby .title .keyword, +pre .perl .sub, +pre .javascript .title, +pre .coffeescript .title { + color: #69c; +} +pre .keyword, +pre .javascript .function { + color: #c9c; +} +@media screen and (max-width: 479px) { + #mobile-nav { + position: absolute; + top: 0; + left: 0; + width: 280px; + height: 100%; + background: #191919; + border-right: 1px solid #fff; + } +} +@media screen and (max-width: 479px) { + .mobile-nav-link { + display: block; + color: #999; + text-decoration: none; + padding: 15px 20px; + font-weight: bold; + } + .mobile-nav-link:hover { + color: #fff; + } +} +@media screen and (min-width: 768px) { + #sidebar { + display: inline; + float: left; + width: 23.333333333333332%; + margin: 0 0.833333333333333%; + } +} +.widget-wrap { + margin: 50px 0; +} +.widget { + color: #777; + text-shadow: 0 1px #fff; + background: #ddd; + -webkit-box-shadow: 0 -1px 4px #ccc inset; + box-shadow: 0 -1px 4px #ccc inset; + border: 1px solid #ccc; + padding: 15px; + border-radius: 3px; +} +.widget a { + color: #258fb8; + text-decoration: none; +} +.widget a:hover { + text-decoration: underline; +} +.widget ul ul, +.widget ol ul, +.widget dl ul, +.widget ul ol, +.widget ol ol, +.widget dl ol, +.widget ul dl, +.widget ol dl, +.widget dl dl { + margin-left: 15px; + list-style: disc; +} +.widget { + line-height: 1.6em; + word-wrap: break-word; + font-size: 0.9em; +} +.widget ul, +.widget ol { + list-style: none; + margin: 0; +} +.widget ul ul, +.widget ol ul, +.widget ul ol, +.widget ol ol { + margin: 0 20px; +} +.widget ul ul, +.widget ol ul { + list-style: disc; +} +.widget ul ol, +.widget ol ol { + list-style: decimal; +} +.category-list-count, +.tag-list-count, +.archive-list-count { + padding-left: 5px; + color: #999; + font-size: 0.85em; +} +.category-list-count:before, +.tag-list-count:before, +.archive-list-count:before { + content: "("; +} +.category-list-count:after, +.tag-list-count:after, +.archive-list-count:after { + content: ")"; +} +.tagcloud a { + margin-right: 5px; + display: inline-block; +} diff --git a/lib/fancybox/source/blank.gif b/fancybox/blank.gif similarity index 100% rename from lib/fancybox/source/blank.gif rename to fancybox/blank.gif diff --git a/lib/fancybox/source/fancybox_loading.gif b/fancybox/fancybox_loading.gif similarity index 100% rename from lib/fancybox/source/fancybox_loading.gif rename to fancybox/fancybox_loading.gif diff --git a/lib/fancybox/source/fancybox_loading@2x.gif b/fancybox/fancybox_loading@2x.gif similarity index 100% rename from lib/fancybox/source/fancybox_loading@2x.gif rename to fancybox/fancybox_loading@2x.gif diff --git a/lib/fancybox/source/fancybox_overlay.png b/fancybox/fancybox_overlay.png similarity index 100% rename from lib/fancybox/source/fancybox_overlay.png rename to fancybox/fancybox_overlay.png diff --git a/lib/fancybox/source/fancybox_sprite.png b/fancybox/fancybox_sprite.png similarity index 100% rename from lib/fancybox/source/fancybox_sprite.png rename to fancybox/fancybox_sprite.png diff --git a/lib/fancybox/source/fancybox_sprite@2x.png b/fancybox/fancybox_sprite@2x.png similarity index 100% rename from lib/fancybox/source/fancybox_sprite@2x.png rename to fancybox/fancybox_sprite@2x.png diff --git a/lib/fancybox/source/helpers/fancybox_buttons.png b/fancybox/helpers/fancybox_buttons.png similarity index 100% rename from lib/fancybox/source/helpers/fancybox_buttons.png rename to fancybox/helpers/fancybox_buttons.png diff --git a/lib/fancybox/source/helpers/jquery.fancybox-buttons.css b/fancybox/helpers/jquery.fancybox-buttons.css similarity index 100% rename from lib/fancybox/source/helpers/jquery.fancybox-buttons.css rename to fancybox/helpers/jquery.fancybox-buttons.css diff --git a/lib/fancybox/source/helpers/jquery.fancybox-buttons.js b/fancybox/helpers/jquery.fancybox-buttons.js similarity index 99% rename from lib/fancybox/source/helpers/jquery.fancybox-buttons.js rename to fancybox/helpers/jquery.fancybox-buttons.js index fd8b955..352bb5f 100644 --- a/lib/fancybox/source/helpers/jquery.fancybox-buttons.js +++ b/fancybox/helpers/jquery.fancybox-buttons.js @@ -13,7 +13,7 @@ * }); * */ -(function ($) { +;(function ($) { //Shortcut for fancyBox object var F = $.fancybox; diff --git a/lib/fancybox/source/helpers/jquery.fancybox-media.js b/fancybox/helpers/jquery.fancybox-media.js similarity index 99% rename from lib/fancybox/source/helpers/jquery.fancybox-media.js rename to fancybox/helpers/jquery.fancybox-media.js index 3584c8a..62737a5 100644 --- a/lib/fancybox/source/helpers/jquery.fancybox-media.js +++ b/fancybox/helpers/jquery.fancybox-media.js @@ -62,7 +62,7 @@ * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56 */ -(function ($) { +;(function ($) { "use strict"; //Shortcut for fancyBox object diff --git a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css b/fancybox/helpers/jquery.fancybox-thumbs.css similarity index 100% rename from lib/fancybox/source/helpers/jquery.fancybox-thumbs.css rename to fancybox/helpers/jquery.fancybox-thumbs.css diff --git a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js b/fancybox/helpers/jquery.fancybox-thumbs.js similarity index 96% rename from lib/fancybox/source/helpers/jquery.fancybox-thumbs.js rename to fancybox/helpers/jquery.fancybox-thumbs.js index 5db3d4a..58c9719 100644 --- a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js +++ b/fancybox/helpers/jquery.fancybox-thumbs.js @@ -14,7 +14,7 @@ * }); * */ -(function ($) { +;(function ($) { //Shortcut for fancyBox object var F = $.fancybox; @@ -62,7 +62,8 @@ //Load each thumbnail $.each(obj.group, function (i) { - var href = thumbSource( obj.group[ i ] ); + var el = obj.group[ i ], + href = thumbSource( el ); if (!href) { return; @@ -105,7 +106,9 @@ $(this).hide().appendTo(parent).fadeIn(300); - }).attr('src', href); + }) + .attr('src', href) + .attr('title', el.title); }); //Set initial width diff --git a/lib/fancybox/source/jquery.fancybox.css b/fancybox/jquery.fancybox.css similarity index 92% rename from lib/fancybox/source/jquery.fancybox.css rename to fancybox/jquery.fancybox.css index 367890a..c75d051 100644 --- a/lib/fancybox/source/jquery.fancybox.css +++ b/fancybox/jquery.fancybox.css @@ -76,7 +76,7 @@ } #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { - background-image: url('fancybox_sprite.png'); + background-image: url(fancybox_sprite.png); } #fancybox-loading { @@ -94,7 +94,7 @@ #fancybox-loading div { width: 44px; height: 44px; - background: url('fancybox_loading.gif') center center no-repeat; + background: url(fancybox_loading.gif) center center no-repeat; } .fancybox-close { @@ -114,7 +114,7 @@ height: 100%; cursor: pointer; text-decoration: none; - background: transparent url('blank.gif'); /* helps IE */ + background: transparent url(blank.gif); /* helps IE */ -webkit-tap-highlight-color: rgba(0,0,0,0); z-index: 8040; } @@ -156,7 +156,6 @@ position: absolute; top: -99999px; left: -99999px; - visibility: hidden; max-width: 99999px; max-height: 99999px; overflow: visible !important; @@ -165,7 +164,7 @@ /* Overlay helper */ .fancybox-lock { - overflow: hidden !important; + overflow: visible !important; width: auto; } @@ -184,7 +183,7 @@ overflow: hidden; display: none; z-index: 8010; - background: url('fancybox_overlay.png'); + background: url(fancybox_overlay.png); } .fancybox-overlay-fixed { @@ -263,12 +262,12 @@ only screen and (min-device-pixel-ratio: 1.5){ #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { - background-image: url('fancybox_sprite@2x.png'); + background-image: url(fancybox_sprite@2x.png); background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ } #fancybox-loading div { - background-image: url('fancybox_loading@2x.gif'); + background-image: url(fancybox_loading@2x.gif); background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ } } \ No newline at end of file diff --git a/lib/fancybox/source/jquery.fancybox.js b/fancybox/jquery.fancybox.js similarity index 97% rename from lib/fancybox/source/jquery.fancybox.js rename to fancybox/jquery.fancybox.js index e8e1987..7a0f8ac 100644 --- a/lib/fancybox/source/jquery.fancybox.js +++ b/fancybox/jquery.fancybox.js @@ -1,7 +1,7 @@ /*! * fancyBox - jQuery Plugin * version: 2.1.5 (Fri, 14 Jun 2013) - * @requires jQuery v1.6 or later + * requires jQuery v1.6 or later * * Examples at http://fancyapps.com/fancybox/ * License: www.fancyapps.com/fancybox/#license @@ -10,7 +10,7 @@ * */ -(function (window, document, $, undefined) { +;(function (window, document, $, undefined) { "use strict"; var H = $("html"), @@ -261,7 +261,7 @@ if (isQuery(element)) { obj = { href : element.data('fancybox-href') || element.attr('href'), - title : element.data('fancybox-title') || element.attr('title'), + title : $('
').text( element.data('fancybox-title') || element.attr('title') ).html(), isDom : true, element : element }; @@ -363,12 +363,16 @@ cancel: function () { var coming = F.coming; - if (!coming || false === F.trigger('onCancel')) { + if (coming && false === F.trigger('onCancel')) { return; } F.hideLoading(); + if (!coming) { + return; + } + if (F.ajaxLoad) { F.ajaxLoad.abort(); } @@ -546,7 +550,7 @@ }, update: function (e) { - var type = (e && e.type), + var type = (e && e.originalEvent && e.originalEvent.type), anyway = !type || type === 'orientationchange'; if (anyway) { @@ -630,6 +634,8 @@ left : (viewport.w * 0.5) + viewport.x }); } + + F.trigger('onLoading'); }, getViewport: function () { @@ -639,7 +645,7 @@ y: W.scrollTop() }; - if (locked) { + if (locked && locked.length) { rez.w = locked[0].clientWidth; rez.h = locked[0].clientHeight; @@ -741,24 +747,22 @@ trigger: function (event, o) { var ret, obj = o || F.coming || F.current; - if (!obj) { - return; - } - - if ($.isFunction( obj[event] )) { - ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); - } + if (obj) { + if ($.isFunction( obj[event] )) { + ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); + } - if (ret === false) { - return false; - } + if (ret === false) { + return false; + } - if (obj.helpers) { - $.each(obj.helpers, function (helper, opts) { - if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { - F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); - } - }); + if (obj.helpers) { + $.each(obj.helpers, function (helper, opts) { + if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { + F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); + } + }); + } } D.trigger(event); @@ -1117,7 +1121,7 @@ break; case 'image': - content = current.tpl.image.replace('{href}', href); + content = current.tpl.image.replace(/\{href\}/g, href); break; case 'swf': @@ -1426,7 +1430,7 @@ F.isOpen = F.isOpened = true; - F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); + F.wrap.css('overflow', 'visible').addClass('fancybox-opened').hide().show(0); F.update(); @@ -1465,12 +1469,13 @@ // Stop the slideshow if this is the last item if (!current.loop && current.index === current.group.length - 1) { + F.play( false ); } else if (F.opts.autoPlay && !F.player.isActive) { F.opts.autoPlay = false; - F.play(); + F.play(true); } }, @@ -1703,13 +1708,17 @@ // Public methods create : function(opts) { + var parent; + opts = $.extend({}, this.defaults, opts); if (this.overlay) { this.close(); } - this.overlay = $('
').appendTo( F.coming ? F.coming.parent : opts.parent ); + parent = F.coming ? F.coming.parent : opts.parent; + + this.overlay = $('
').appendTo( parent && parent.lenth ? parent : 'body' ); this.fixed = false; if (opts.fixed && F.defaults.fixed) { @@ -1755,19 +1764,14 @@ }, close : function() { - var scrollV, scrollH; - W.unbind('resize.overlay'); if (this.el.hasClass('fancybox-lock')) { $('.fancybox-margin').removeClass('fancybox-margin'); - scrollV = W.scrollTop(); - scrollH = W.scrollLeft(); - this.el.removeClass('fancybox-lock'); - W.scrollTop( scrollV ).scrollLeft( scrollH ); + W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); } $('.fancybox-overlay').remove().hide(); @@ -1812,10 +1816,6 @@ } if (opts.locked && this.fixed && obj.fixed) { - if (!overlay) { - this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false; - } - obj.locked = this.overlay.append( obj.wrap ); obj.fixed = false; } @@ -1826,23 +1826,21 @@ }, beforeShow : function(opts, obj) { - var scrollV, scrollH; - - if (obj.locked) { - if (this.margin !== false) { + if (obj.locked && !this.el.hasClass('fancybox-lock')) { + if (this.fixPosition !== false) { $('*').filter(function(){ return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); }).addClass('fancybox-margin'); - - this.el.addClass('fancybox-margin'); } - scrollV = W.scrollTop(); - scrollH = W.scrollLeft(); + this.el.addClass('fancybox-margin'); + + this.scrollV = W.scrollTop(); + this.scrollH = W.scrollLeft(); this.el.addClass('fancybox-lock'); - W.scrollTop( scrollV ).scrollLeft( scrollH ); + W.scrollTop( this.scrollV ).scrollLeft( this.scrollH ); } this.open(opts); @@ -1857,7 +1855,6 @@ afterClose: function (opts) { // Remove overlay if exists and fancyBox is not opening // (e.g., it is not being open using afterClose callback) - //if (this.overlay && !F.isActive) { if (this.overlay && !F.coming) { this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); } diff --git a/fancybox/jquery.fancybox.pack.js b/fancybox/jquery.fancybox.pack.js new file mode 100644 index 0000000..2db1280 --- /dev/null +++ b/fancybox/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(s,H,f,w){var K=f("html"),q=f(s),p=f(H),b=f.fancybox=function(){b.open.apply(this,arguments)},J=navigator.userAgent.match(/msie/i),C=null,t=H.createTouch!==w,u=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},F=function(a){return r(a)&&0
',image:'',iframe:'",error:'

The requested content cannot be loaded.
Please try again later.

',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=u(a)?f(a).get():[a]),f.each(a,function(e,c){var l={},g,h,k,n,m;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),u(c)?(l={href:c.data("fancybox-href")||c.attr("href"),title:f("
").text(c.data("fancybox-title")||c.attr("title")).html(),isDom:!0,element:c}, +f.metadata&&f.extend(!0,l,c.metadata())):l=c);g=d.href||l.href||(r(c)?c:null);h=d.title!==w?d.title:l.title||"";n=(k=d.content||l.content)?"html":d.type||l.type;!n&&l.isDom&&(n=c.data("fancybox-type"),n||(n=(n=c.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(c)&&(n="html",k=c)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));k||("inline"===n?g?k=f(r(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):l.isDom&&(k=c): +"html"===n?k=g:n||g||!l.isDom||(n="inline",k=c));f.extend(l,{href:g,type:n,content:k,title:h,selector:m});a[e]=l}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==w&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(), +b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&& +(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==w&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,l;c&&(l=b._getPosition(d),a&&"scroll"===a.type?(delete l.position,c.stop(!0,!0).animate(l,200)):(c.css(l),e.pos=f.extend({},e.dim,l)))}, +update:function(a){var d=a&&a.originalEvent&&a.originalEvent.type,e=!d||"orientationchange"===d;e&&(clearTimeout(C),C=null);b.isOpen&&!C&&(C=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),C=null)},e&&!t?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,t&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"), +b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}));b.trigger("onLoading")},getViewport:function(){var a=b.current&& +b.current.locked||!1,d={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=t&&s.innerWidth?s.innerWidth:q.width(),d.h=t&&s.innerHeight?s.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&u(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(t?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c= +e.which||e.keyCode,l=e.target||e.srcElement;if(27===c&&b.coming)return!1;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||l&&(l.type||f(l).is("[contenteditable]"))||f.each(d,function(d,l){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();0!==c&&!k&&1g||0>l)&&b.next(0>g?"up":"right"),d.preventDefault())}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&& +b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=m(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c, +c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"=== +c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&t&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(t?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady"); +if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width= +this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming, +d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",t?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);t||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload|| +b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,l,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()); +b.unbindEvents();e=a.content;c=a.type;l=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
").html(e).find(a.selector):u(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder", +!1)}));break;case "image":e=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}u(e)&&e.parent().is(a.inner)||a.inner.append(e);b.trigger("beforeShow"); +a.inner.css("overflow","yes"===l?"scroll":"no"===l?"hidden":l);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(d.prevMethod)b.transitions[d.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,l=b.skin,g=b.inner,h=b.current,c=h.width,k=h.height,n=h.minWidth,v=h.minHeight,p=h.maxWidth, +q=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,z=m(y[1]+y[3]),s=m(y[0]+y[2]),w,A,u,D,B,G,C,E,I;e.add(l).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=m(l.outerWidth(!0)-l.width());w=m(l.outerHeight(!0)-l.height());A=z+y;u=s+w;D=F(c)?(a.w-A)*m(c)/100:c;B=F(k)?(a.h-u)*m(k)/100:k;if("iframe"===h.type){if(I=h.content,h.autoHeight&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(D).height(9999),G=I.contents().find("body"),r&&G.css("overflow-x", +"hidden"),B=G.outerHeight(!0))}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=m(D);k=m(B);E=D/B;n=m(F(n)?m(n,"w")-A:n);p=m(F(p)?m(p,"w")-A:p);v=m(F(v)?m(v,"h")-u:v);q=m(F(q)?m(q,"h")-u:q);G=p;C=q;h.fitToView&&(p=Math.min(a.w-A,p),q=Math.min(a.h-u,q));A=a.w-z;s=a.h-s;h.aspectRatio?(c>p&&(c=p,k=m(c/E)),k>q&&(k=q,c=m(k*E)),cA||z>s)&&c>n&&k>v&&!(19p&&(c=p,k=m(c/E)),g.width(c).height(k),e.width(c+y),a=e.width(),z=e.height();else c=Math.max(n,Math.min(c,c-(a-A))),k=Math.max(v,Math.min(k,k-(z-s)));r&&"auto"===t&&kA||z>s)&&c>n&&k>v;c=h.aspectRatio?cv&&k
').appendTo(d&&d.lenth?d:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay", +function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%"); +J?(b=Math.max(H.documentElement.offsetWidth,H.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float", +position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(r(e)&&""!==f.trim(e)){d=f('
'+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),J&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(m(d.css("margin-bottom")))}d["top"===a.position?"prependTo": +"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",l=function(g){var h=f(this).blur(),k=d,l,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||h.is(".fancybox-wrap")||(l=a.groupAttr||"data-fancybox-group",m=h.attr(l),m||(l="rel",m=h.get(0)[l]),m&&""!==m&&"nofollow"!==m&&(h=c.length?f(c):e,h=h.filter("["+l+'="'+m+'"]'),k=h.index(this)),a.index=k,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;c&&!1!==a.live?p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')", +"click.fb-start",l):e.unbind("click.fb-start").bind("click.fb-start",l);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===w&&(f.scrollbarWidth=function(){var a=f('
').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===w&&(f.support.fixedPosition=function(){var a=f('
').appendTo("body"), +b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(s).width();K.addClass("fancybox-lock-test");d=f(s).width();K.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/flow-integration-with-UDP/images/online-game-consume.png b/flow-integration-with-UDP/images/online-game-consume.png deleted file mode 100644 index cbaad71..0000000 Binary files a/flow-integration-with-UDP/images/online-game-consume.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/online-game-initialize.png b/flow-integration-with-UDP/images/online-game-initialize.png deleted file mode 100644 index be7968f..0000000 Binary files a/flow-integration-with-UDP/images/online-game-initialize.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/online-game-purchase.png b/flow-integration-with-UDP/images/online-game-purchase.png deleted file mode 100644 index ab888df..0000000 Binary files a/flow-integration-with-UDP/images/online-game-purchase.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/online-game-queryinventory.png b/flow-integration-with-UDP/images/online-game-queryinventory.png deleted file mode 100644 index 0936d0d..0000000 Binary files a/flow-integration-with-UDP/images/online-game-queryinventory.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/standalone-game-consume.png b/flow-integration-with-UDP/images/standalone-game-consume.png deleted file mode 100644 index cbaad71..0000000 Binary files a/flow-integration-with-UDP/images/standalone-game-consume.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/standalone-game-initialize.png b/flow-integration-with-UDP/images/standalone-game-initialize.png deleted file mode 100644 index 1c0cf1d..0000000 Binary files a/flow-integration-with-UDP/images/standalone-game-initialize.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/standalone-game-purchase.png b/flow-integration-with-UDP/images/standalone-game-purchase.png deleted file mode 100644 index 7572736..0000000 Binary files a/flow-integration-with-UDP/images/standalone-game-purchase.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/standalone-game-query.png b/flow-integration-with-UDP/images/standalone-game-query.png deleted file mode 100644 index a8df7b8..0000000 Binary files a/flow-integration-with-UDP/images/standalone-game-query.png and /dev/null differ diff --git a/flow-integration-with-UDP/images/test-accounting-setting.png b/flow-integration-with-UDP/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/flow-integration-with-UDP/images/test-accounting-setting.png and /dev/null differ diff --git a/images/Add-Product-Draft.png b/images/Add-Product-Draft.png deleted file mode 100644 index 339b059..0000000 Binary files a/images/Add-Product-Draft.png and /dev/null differ diff --git a/images/Add-Store.png b/images/Add-Store.png deleted file mode 100644 index c306654..0000000 Binary files a/images/Add-Store.png and /dev/null differ diff --git a/images/Archive.png b/images/Archive.png deleted file mode 100644 index 0078805..0000000 Binary files a/images/Archive.png and /dev/null differ diff --git a/images/Choose-Store.png b/images/Choose-Store.png deleted file mode 100644 index ed7f4b2..0000000 Binary files a/images/Choose-Store.png and /dev/null differ diff --git a/images/Configure-Store.png b/images/Configure-Store.png deleted file mode 100644 index 604e404..0000000 Binary files a/images/Configure-Store.png and /dev/null differ diff --git a/images/Create-IAP-Item.png b/images/Create-IAP-Item.png deleted file mode 100644 index 58ae612..0000000 Binary files a/images/Create-IAP-Item.png and /dev/null differ diff --git a/images/Create-Profiles.png b/images/Create-Profiles.png deleted file mode 100644 index 6cead49..0000000 Binary files a/images/Create-Profiles.png and /dev/null differ diff --git a/images/Create-a-Game-Settings-file.png b/images/Create-a-Game-Settings-file.png deleted file mode 100644 index 71905b7..0000000 Binary files a/images/Create-a-Game-Settings-file.png and /dev/null differ diff --git a/images/Create-a-Game.png b/images/Create-a-Game.png deleted file mode 100644 index 669f896..0000000 Binary files a/images/Create-a-Game.png and /dev/null differ diff --git a/images/Dashboard.png b/images/Dashboard.png deleted file mode 100644 index adf29f5..0000000 Binary files a/images/Dashboard.png and /dev/null differ diff --git a/images/Edit-Store.png b/images/Edit-Store.png deleted file mode 100644 index eecb49c..0000000 Binary files a/images/Edit-Store.png and /dev/null differ diff --git a/images/Editor-to-Portal.png b/images/Editor-to-Portal.png deleted file mode 100644 index a69d0e8..0000000 Binary files a/images/Editor-to-Portal.png and /dev/null differ diff --git a/images/EditorScript-0.png b/images/EditorScript-0.png deleted file mode 100644 index 2fb6f04..0000000 Binary files a/images/EditorScript-0.png and /dev/null differ diff --git a/images/EditorScript-1.png b/images/EditorScript-1.png deleted file mode 100644 index a137294..0000000 Binary files a/images/EditorScript-1.png and /dev/null differ diff --git a/images/EditorScript-2.png b/images/EditorScript-2.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/images/EditorScript-2.png and /dev/null differ diff --git a/images/EditorScript-3.png b/images/EditorScript-3.png deleted file mode 100644 index c43061f..0000000 Binary files a/images/EditorScript-3.png and /dev/null differ diff --git a/images/EditorScript-v0.2-1.png b/images/EditorScript-v0.2-1.png deleted file mode 100644 index 71905b7..0000000 Binary files a/images/EditorScript-v0.2-1.png and /dev/null differ diff --git a/images/EditorScript-v0.2-2.png b/images/EditorScript-v0.2-2.png deleted file mode 100644 index 3f8fa42..0000000 Binary files a/images/EditorScript-v0.2-2.png and /dev/null differ diff --git a/images/EditorScript-v0.2-3.png b/images/EditorScript-v0.2-3.png deleted file mode 100644 index 339b059..0000000 Binary files a/images/EditorScript-v0.2-3.png and /dev/null differ diff --git a/images/EditorScript-v0.2-4.png b/images/EditorScript-v0.2-4.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/images/EditorScript-v0.2-4.png and /dev/null differ diff --git a/images/FAQ-mixed-IAP.png b/images/FAQ-mixed-IAP.png deleted file mode 100644 index cd52f51..0000000 Binary files a/images/FAQ-mixed-IAP.png and /dev/null differ diff --git a/images/Filter-achived.png b/images/Filter-achived.png deleted file mode 100644 index 3dad81c..0000000 Binary files a/images/Filter-achived.png and /dev/null differ diff --git a/images/Filter-active.png b/images/Filter-active.png deleted file mode 100644 index 8bd60e6..0000000 Binary files a/images/Filter-active.png and /dev/null differ diff --git a/images/GameManager.png b/images/GameManager.png deleted file mode 100644 index 5ff01bc..0000000 Binary files a/images/GameManager.png and /dev/null differ diff --git a/images/Generate-a-Unity-client-and-test-accounts.png b/images/Generate-a-Unity-client-and-test-accounts.png deleted file mode 100644 index b2ac71a..0000000 Binary files a/images/Generate-a-Unity-client-and-test-accounts.png and /dev/null differ diff --git a/images/IAP-Catalog-updated.png b/images/IAP-Catalog-updated.png deleted file mode 100644 index 5e16069..0000000 Binary files a/images/IAP-Catalog-updated.png and /dev/null differ diff --git a/images/IAP-Catalog.png b/images/IAP-Catalog.png deleted file mode 100644 index a137294..0000000 Binary files a/images/IAP-Catalog.png and /dev/null differ diff --git a/images/IAP-IAP-catalog.png b/images/IAP-IAP-catalog.png deleted file mode 100644 index 1e5a94b..0000000 Binary files a/images/IAP-IAP-catalog.png and /dev/null differ diff --git a/images/Publish-information.png b/images/Publish-information.png deleted file mode 100644 index ea2d530..0000000 Binary files a/images/Publish-information.png and /dev/null differ diff --git a/images/Push-to-Store.png b/images/Push-to-Store.png deleted file mode 100644 index 618c633..0000000 Binary files a/images/Push-to-Store.png and /dev/null differ diff --git a/images/Pushing-hosted-build-UDP-Editor.png b/images/Pushing-hosted-build-UDP-Editor.png deleted file mode 100644 index 7080192..0000000 Binary files a/images/Pushing-hosted-build-UDP-Editor.png and /dev/null differ diff --git a/images/Pushing-hosted-build-UDP-dashboard.png b/images/Pushing-hosted-build-UDP-dashboard.png deleted file mode 100644 index 211b6cf..0000000 Binary files a/images/Pushing-hosted-build-UDP-dashboard.png and /dev/null differ diff --git a/images/Restore.png b/images/Restore.png deleted file mode 100644 index a1d22f8..0000000 Binary files a/images/Restore.png and /dev/null differ diff --git a/images/Select-UDP-as-the-target-platform.png b/images/Select-UDP-as-the-target-platform.png deleted file mode 100644 index f90bf8c..0000000 Binary files a/images/Select-UDP-as-the-target-platform.png and /dev/null differ diff --git a/images/UDP-Dev-QuickStarterGuide.png b/images/UDP-Dev-QuickStarterGuide.png deleted file mode 100644 index 6c5dd9e..0000000 Binary files a/images/UDP-Dev-QuickStarterGuide.png and /dev/null differ diff --git a/images/UDP-IAP-catalog.png b/images/UDP-IAP-catalog.png deleted file mode 100644 index 1586929..0000000 Binary files a/images/UDP-IAP-catalog.png and /dev/null differ diff --git a/images/UDP-Login.png b/images/UDP-Login.png deleted file mode 100644 index 9a4db7f..0000000 Binary files a/images/UDP-Login.png and /dev/null differ diff --git a/images/UDP-Purchase-22.png b/images/UDP-Purchase-22.png deleted file mode 100644 index 0ff3d5c..0000000 Binary files a/images/UDP-Purchase-22.png and /dev/null differ diff --git a/images/UDP-PurchaseError-24.png b/images/UDP-PurchaseError-24.png deleted file mode 100644 index 1efd4ed..0000000 Binary files a/images/UDP-PurchaseError-24.png and /dev/null differ diff --git a/images/UDP-Query-18.png b/images/UDP-Query-18.png deleted file mode 100644 index a2d7482..0000000 Binary files a/images/UDP-Query-18.png and /dev/null differ diff --git a/images/UDPSample-Init.png b/images/UDPSample-Init.png deleted file mode 100644 index 2111ce6..0000000 Binary files a/images/UDPSample-Init.png and /dev/null differ diff --git a/images/UDPSample-PurchaseFail.jpg b/images/UDPSample-PurchaseFail.jpg deleted file mode 100644 index 0d97385..0000000 Binary files a/images/UDPSample-PurchaseFail.jpg and /dev/null differ diff --git a/images/UDPSample-PurchaseSuccess.jpg b/images/UDPSample-PurchaseSuccess.jpg deleted file mode 100644 index f71a4c1..0000000 Binary files a/images/UDPSample-PurchaseSuccess.jpg and /dev/null differ diff --git a/images/UDPSample-QueryInventory.jpg b/images/UDPSample-QueryInventory.jpg deleted file mode 100644 index 1a0e26d..0000000 Binary files a/images/UDPSample-QueryInventory.jpg and /dev/null differ diff --git a/images/Unity-clent-generated.png b/images/Unity-clent-generated.png deleted file mode 100644 index 0ff3d23..0000000 Binary files a/images/Unity-clent-generated.png and /dev/null differ diff --git a/images/Unity-clent-updated.png b/images/Unity-clent-updated.png deleted file mode 100644 index 2122e32..0000000 Binary files a/images/Unity-clent-updated.png and /dev/null differ diff --git a/images/Unity_Technologies_logo.svg.png b/images/Unity_Technologies_logo.svg.png deleted file mode 100644 index a7ee24d..0000000 Binary files a/images/Unity_Technologies_logo.svg.png and /dev/null differ diff --git a/images/Upload-Game-File.png b/images/Upload-Game-File.png deleted file mode 100644 index d194a27..0000000 Binary files a/images/Upload-Game-File.png and /dev/null differ diff --git a/images/Uploading-Cloud-Build-Developer-Dashboard.png b/images/Uploading-Cloud-Build-Developer-Dashboard.png deleted file mode 100644 index f45d0fc..0000000 Binary files a/images/Uploading-Cloud-Build-Developer-Dashboard.png and /dev/null differ diff --git a/images/Uploading-Cloud-Build-the-Editor.png b/images/Uploading-Cloud-Build-the-Editor.png deleted file mode 100644 index 737eb95..0000000 Binary files a/images/Uploading-Cloud-Build-the-Editor.png and /dev/null differ diff --git a/images/add-IAP-item.png b/images/add-IAP-item.png deleted file mode 100644 index b8f3f60..0000000 Binary files a/images/add-IAP-item.png and /dev/null differ diff --git a/images/apple-touch-icon.png b/images/apple-touch-icon-next.png similarity index 100% rename from images/apple-touch-icon.png rename to images/apple-touch-icon-next.png diff --git a/images/basic-information.png b/images/basic-information.png deleted file mode 100644 index f7c82d2..0000000 Binary files a/images/basic-information.png and /dev/null differ diff --git a/images/creat-IAP-item.png b/images/creat-IAP-item.png deleted file mode 100644 index 3d92985..0000000 Binary files a/images/creat-IAP-item.png and /dev/null differ diff --git a/images/create-game.png b/images/create-game.png deleted file mode 100644 index 9a2b66e..0000000 Binary files a/images/create-game.png and /dev/null differ diff --git a/images/create-profile.png b/images/create-profile.png deleted file mode 100644 index 6235d1a..0000000 Binary files a/images/create-profile.png and /dev/null differ diff --git a/images/default_avatar.png b/images/default_avatar.png deleted file mode 100644 index c28bca7..0000000 Binary files a/images/default_avatar.png and /dev/null differ diff --git a/images/edit-profile.png b/images/edit-profile.png deleted file mode 100644 index 1b6899f..0000000 Binary files a/images/edit-profile.png and /dev/null differ diff --git a/images/favicon-16x16.png b/images/favicon-16x16-next.png similarity index 100% rename from images/favicon-16x16.png rename to images/favicon-16x16-next.png diff --git a/images/favicon-32x32.png b/images/favicon-32x32-next.png similarity index 100% rename from images/favicon-32x32.png rename to images/favicon-32x32-next.png diff --git a/images/go-IAP-UDPportal.png b/images/go-IAP-UDPportal.png deleted file mode 100644 index 8e53ec5..0000000 Binary files a/images/go-IAP-UDPportal.png and /dev/null differ diff --git a/images/log-in-UDP-and-select.png b/images/log-in-UDP-and-select.png deleted file mode 100644 index f96a1c5..0000000 Binary files a/images/log-in-UDP-and-select.png and /dev/null differ diff --git a/images/login-mac.png b/images/login-mac.png deleted file mode 100644 index 5cc2e3b..0000000 Binary files a/images/login-mac.png and /dev/null differ diff --git a/images/login-windows.png b/images/login-windows.png deleted file mode 100644 index 46bd78b..0000000 Binary files a/images/login-windows.png and /dev/null differ diff --git a/images/online-game-consume.png b/images/online-game-consume.png deleted file mode 100644 index cbaad71..0000000 Binary files a/images/online-game-consume.png and /dev/null differ diff --git a/images/online-game-initialize.png b/images/online-game-initialize.png deleted file mode 100644 index be7968f..0000000 Binary files a/images/online-game-initialize.png and /dev/null differ diff --git a/images/online-game-purchase.png b/images/online-game-purchase.png deleted file mode 100644 index ab888df..0000000 Binary files a/images/online-game-purchase.png and /dev/null differ diff --git a/images/online-game-queryinventory.png b/images/online-game-queryinventory.png deleted file mode 100644 index 0936d0d..0000000 Binary files a/images/online-game-queryinventory.png and /dev/null differ diff --git a/images/publish-gstore.png b/images/publish-gstore.png deleted file mode 100644 index 35aa791..0000000 Binary files a/images/publish-gstore.png and /dev/null differ diff --git a/images/publish-to-stores.png b/images/publish-to-stores.png deleted file mode 100644 index fdc50a8..0000000 Binary files a/images/publish-to-stores.png and /dev/null differ diff --git a/images/quick-guide-1.png b/images/quick-guide-1.png deleted file mode 100644 index cdca433..0000000 Binary files a/images/quick-guide-1.png and /dev/null differ diff --git a/images/see-more-in-browser.png b/images/see-more-in-browser.png deleted file mode 100644 index a69d0e8..0000000 Binary files a/images/see-more-in-browser.png and /dev/null differ diff --git a/images/select-stores.png b/images/select-stores.png deleted file mode 100644 index 625b271..0000000 Binary files a/images/select-stores.png and /dev/null differ diff --git a/images/standalone-game-consume.png b/images/standalone-game-consume.png deleted file mode 100644 index cbaad71..0000000 Binary files a/images/standalone-game-consume.png and /dev/null differ diff --git a/images/standalone-game-initialize-grid.png b/images/standalone-game-initialize-grid.png deleted file mode 100644 index 1c0cf1d..0000000 Binary files a/images/standalone-game-initialize-grid.png and /dev/null differ diff --git a/images/standalone-game-initialize.png b/images/standalone-game-initialize.png deleted file mode 100644 index 7aa2565..0000000 Binary files a/images/standalone-game-initialize.png and /dev/null differ diff --git a/images/standalone-game-purchase.png b/images/standalone-game-purchase.png deleted file mode 100644 index 7572736..0000000 Binary files a/images/standalone-game-purchase.png and /dev/null differ diff --git a/images/standalone-game-query.png b/images/standalone-game-query.png deleted file mode 100644 index a8df7b8..0000000 Binary files a/images/standalone-game-query.png and /dev/null differ diff --git a/images/store-status.png b/images/store-status.png deleted file mode 100644 index 347daae..0000000 Binary files a/images/store-status.png and /dev/null differ diff --git a/images/test-accounting-setting.png b/images/test-accounting-setting.png deleted file mode 100644 index 050b80b..0000000 Binary files a/images/test-accounting-setting.png and /dev/null differ diff --git a/images/unity-projectID.png b/images/unity-projectID.png deleted file mode 100644 index 1d66115..0000000 Binary files a/images/unity-projectID.png and /dev/null differ diff --git a/images/update-APK-files.png b/images/update-APK-files.png deleted file mode 100644 index 83018b7..0000000 Binary files a/images/update-APK-files.png and /dev/null differ diff --git a/images/upload-APK.png b/images/upload-APK.png deleted file mode 100644 index ff42d93..0000000 Binary files a/images/upload-APK.png and /dev/null differ diff --git a/index.html b/index.html index 87c74ef..25e38e4 100644 --- a/index.html +++ b/index.html @@ -2,16 +2,6 @@ - - - - - - - - - - @@ -20,16 +10,16 @@ - - - - - - - + + + + + + + @@ -38,9 +28,6 @@ - - - @@ -48,61 +35,53 @@ - - - - - - + + - + + + + - - - - - - - - + + + - + + + + + + + - Unity Distribution Portal - Public Preview + + + + + + + + + Gordon's Blog @@ -131,6 +131,35 @@ + + + + + + @@ -146,23 +175,22 @@ + + +
+
@@ -214,21 +280,23 @@ + +

+ + + @@ -294,6 +393,9 @@

+ + + @@ -325,9 +427,6 @@

- - - @@ -341,56 +440,57 @@

+ @@ -407,16 +508,18 @@

@@ -448,11 +552,16 @@

+ + + + + - - - - - + + - + - + - + - - - + + - - - - + - + - - - - - + + + @@ -544,15 +642,21 @@

+ + - + + + + + diff --git a/js/script.js b/js/script.js new file mode 100644 index 0000000..1e58767 --- /dev/null +++ b/js/script.js @@ -0,0 +1,137 @@ +(function($){ + // Search + var $searchWrap = $('#search-form-wrap'), + isSearchAnim = false, + searchAnimDuration = 200; + + var startSearchAnim = function(){ + isSearchAnim = true; + }; + + var stopSearchAnim = function(callback){ + setTimeout(function(){ + isSearchAnim = false; + callback && callback(); + }, searchAnimDuration); + }; + + $('#nav-search-btn').on('click', function(){ + if (isSearchAnim) return; + + startSearchAnim(); + $searchWrap.addClass('on'); + stopSearchAnim(function(){ + $('.search-form-input').focus(); + }); + }); + + $('.search-form-input').on('blur', function(){ + startSearchAnim(); + $searchWrap.removeClass('on'); + stopSearchAnim(); + }); + + // Share + $('body').on('click', function(){ + $('.article-share-box.on').removeClass('on'); + }).on('click', '.article-share-link', function(e){ + e.stopPropagation(); + + var $this = $(this), + url = $this.attr('data-url'), + encodedUrl = encodeURIComponent(url), + id = 'article-share-box-' + $this.attr('data-id'), + offset = $this.offset(); + + if ($('#' + id).length){ + var box = $('#' + id); + + if (box.hasClass('on')){ + box.removeClass('on'); + return; + } + } else { + var html = [ + '
', + '', + '
', + '', + '', + '', + '', + '
', + '
' + ].join(''); + + var box = $(html); + + $('body').append(box); + } + + $('.article-share-box.on').hide(); + + box.css({ + top: offset.top + 25, + left: offset.left + }).addClass('on'); + }).on('click', '.article-share-box', function(e){ + e.stopPropagation(); + }).on('click', '.article-share-box-input', function(){ + $(this).select(); + }).on('click', '.article-share-box-link', function(e){ + e.preventDefault(); + e.stopPropagation(); + + window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); + }); + + // Caption + $('.article-entry').each(function(i){ + $(this).find('img').each(function(){ + if ($(this).parent().hasClass('fancybox')) return; + + var alt = this.alt; + + if (alt) $(this).after('' + alt + ''); + + $(this).wrap(''); + }); + + $(this).find('.fancybox').each(function(){ + $(this).attr('rel', 'article' + i); + }); + }); + + if ($.fancybox){ + $('.fancybox').fancybox(); + } + + // Mobile nav + var $container = $('#container'), + isMobileNavAnim = false, + mobileNavAnimDuration = 200; + + var startMobileNavAnim = function(){ + isMobileNavAnim = true; + }; + + var stopMobileNavAnim = function(){ + setTimeout(function(){ + isMobileNavAnim = false; + }, mobileNavAnimDuration); + } + + $('#main-nav-toggle').on('click', function(){ + if (isMobileNavAnim) return; + + startMobileNavAnim(); + $container.toggleClass('mobile-nav-on'); + stopMobileNavAnim(); + }); + + $('#wrap').on('click', function(){ + if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return; + + $container.removeClass('mobile-nav-on'); + }); +})(jQuery); \ No newline at end of file diff --git a/js/src/affix.js b/js/src/affix.js index 11a3d39..240e43a 100644 --- a/js/src/affix.js +++ b/js/src/affix.js @@ -6,157 +6,163 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ +/** + * Customized by Ivan.Nginx + * + * - Refactored with eslint-config-theme-next style. + */ -+function ($) { +(function($) { 'use strict'; // AFFIX CLASS DEFINITION // ====================== - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) + var Affix = function(element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options); this.$target = $(this.options.target) .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)); - this.$element = $(element) - this.affixed = null - this.unpin = null - this.pinnedOffset = null + this.$element = $(element); + this.affixed = null; + this.unpin = null; + this.pinnedOffset = null; - this.checkPosition() - } + this.checkPosition(); + }; - Affix.VERSION = '3.3.5' + Affix.VERSION = '3.3.5'; - Affix.RESET = 'affix affix-top affix-bottom' + Affix.RESET = 'affix affix-top affix-bottom'; Affix.DEFAULTS = { offset: 0, target: window - } + }; - Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - var targetHeight = this.$target.height() + Affix.prototype.getState = function(scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop(); + var position = this.$element.offset(); + var targetHeight = this.$target.height(); - if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + if (offsetTop != null && this.affixed === 'top') return scrollTop < offsetTop ? 'top' : false; - if (this.affixed == 'bottom') { - if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' - return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + if (this.affixed === 'bottom') { + if (offsetTop != null) return scrollTop + this.unpin <= position.top ? false : 'bottom'; + return scrollTop + targetHeight <= scrollHeight - offsetBottom ? false : 'bottom'; } - var initializing = this.affixed == null - var colliderTop = initializing ? scrollTop : position.top - var colliderHeight = initializing ? targetHeight : height + var initializing = this.affixed == null; + var colliderTop = initializing ? scrollTop : position.top; + var colliderHeight = initializing ? targetHeight : height; - if (offsetTop != null && scrollTop <= offsetTop) return 'top' - if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + if (offsetTop != null && scrollTop <= offsetTop) return 'top'; + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'; - return false - } + return false; + }; - Affix.prototype.getPinnedOffset = function () { - if (this.pinnedOffset) return this.pinnedOffset - this.$element.removeClass(Affix.RESET).addClass('affix') - var scrollTop = this.$target.scrollTop() - var position = this.$element.offset() - return (this.pinnedOffset = position.top - scrollTop) - } + Affix.prototype.getPinnedOffset = function() { + if (this.pinnedOffset) return this.pinnedOffset; + this.$element.removeClass(Affix.RESET).addClass('affix'); + var scrollTop = this.$target.scrollTop(); + var position = this.$element.offset(); + return (this.pinnedOffset = position.top - scrollTop); + }; - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } + Affix.prototype.checkPositionWithEventLoop = function() { + setTimeout($.proxy(this.checkPosition, this), 1); + }; - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return + Affix.prototype.checkPosition = function() { + if (!this.$element.is(':visible')) return; - var height = this.$element.height() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - var scrollHeight = Math.max($(document).height(), $(document.body).height()) + var height = this.$element.height(); + var offset = this.options.offset; + var offsetTop = offset.top; + var offsetBottom = offset.bottom; + var scrollHeight = Math.max($(document).height(), $(document.body).height()); - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + /* eslint-disable */ + if (typeof offset !== 'object') offsetBottom = offsetTop = offset; + if (typeof offsetTop === 'function') offsetTop = offset.top(this.$element); + if (typeof offsetBottom === 'function') offsetBottom = offset.bottom(this.$element); + /* eslint-enable */ - var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom); - if (this.affixed != affix) { - if (this.unpin != null) this.$element.css('top', '') + if (this.affixed !== affix) { + if (this.unpin != null) this.$element.css('top', ''); - var affixType = 'affix' + (affix ? '-' + affix : '') - var e = $.Event(affixType + '.bs.affix') + var affixType = 'affix' + (affix ? '-' + affix : ''); + var e = new $.Event(affixType + '.bs.affix'); - this.$element.trigger(e) + this.$element.trigger(e); - if (e.isDefaultPrevented()) return + if (e.isDefaultPrevented()) return; - this.affixed = affix - this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + this.affixed = affix; + this.unpin = affix === 'bottom' ? this.getPinnedOffset() : null; this.$element .removeClass(Affix.RESET) .addClass(affixType) - .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix'); } - if (affix == 'bottom') { + if (affix === 'bottom') { this.$element.offset({ top: scrollHeight - height - offsetBottom - }) + }); } - } - + }; // AFFIX PLUGIN DEFINITION // ======================= function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) + return this.each(function() { + var $this = $(this); + var data = $this.data('bs.affix'); + var options = typeof option === 'object' && option; + + if (!data) $this.data('bs.affix', data = new Affix(this, options)); + if (typeof option === 'string') data[option](); + }); } - var old = $.fn.affix - - $.fn.affix = Plugin - $.fn.affix.Constructor = Affix + var old = $.fn.affix; + $.fn.affix = Plugin; + $.fn.affix.Constructor = Affix; // AFFIX NO CONFLICT // ================= - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - + $.fn.affix.noConflict = function() { + $.fn.affix = old; + return this; + }; // AFFIX DATA-API // ============== - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() + $(window).on('load', function() { + $('[data-spy="affix"]').each(function() { + var $spy = $(this); + var data = $spy.data(); - data.offset = data.offset || {} + data.offset = data.offset || {}; - if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom - if (data.offsetTop != null) data.offset.top = data.offsetTop + /* eslint-disable */ + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom; + if (data.offsetTop != null) data.offset.top = data.offsetTop; + /* eslint-enable */ - Plugin.call($spy, data) - }) - }) + Plugin.call($spy, data); + }); + }); -}(jQuery); +}(jQuery)); diff --git a/js/src/algolia-search.js b/js/src/algolia-search.js index 9787e2a..06decd8 100644 --- a/js/src/algolia-search.js +++ b/js/src/algolia-search.js @@ -1,11 +1,10 @@ -/* global instantsearch: true */ -/*jshint camelcase: false */ +/* global instantsearch, CONFIG */ -$(document).ready(function () { +$(document).ready(function() { var algoliaSettings = CONFIG.algolia; - var isAlgoliaSettingsValid = algoliaSettings.applicationID && - algoliaSettings.apiKey && - algoliaSettings.indexName; + var isAlgoliaSettingsValid = algoliaSettings.applicationID + && algoliaSettings.apiKey + && algoliaSettings.indexName; if (!isAlgoliaSettingsValid) { window.console.error('Algolia Settings are invalid.'); @@ -13,10 +12,10 @@ $(document).ready(function () { } var search = instantsearch({ - appId: algoliaSettings.applicationID, - apiKey: algoliaSettings.apiKey, - indexName: algoliaSettings.indexName, - searchFunction: function (helper) { + appId : algoliaSettings.applicationID, + apiKey : algoliaSettings.apiKey, + indexName : algoliaSettings.indexName, + searchFunction: function(helper) { var searchInput = $('#algolia-search-input').find('input'); if (searchInput.val()) { @@ -28,27 +27,27 @@ $(document).ready(function () { // Registering Widgets [ instantsearch.widgets.searchBox({ - container: '#algolia-search-input', + container : '#algolia-search-input', placeholder: algoliaSettings.labels.input_placeholder }), instantsearch.widgets.hits({ - container: '#algolia-hits', + container : '#algolia-hits', hitsPerPage: algoliaSettings.hits.per_page || 10, - templates: { - item: function (data) { - var link = data.permalink ? data.permalink : (CONFIG.root + data.path); + templates : { + item: function(data) { + var link = data.permalink ? data.permalink : CONFIG.root + data.path; return ( - '' + - data._highlightResult.title.value + - '' + '' + + data._highlightResult.title.value + + '' ); }, - empty: function (data) { + empty: function(data) { return ( - '
' + - algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query) + - '
' + '
' + + algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query) + + '
' ); } }, @@ -60,36 +59,36 @@ $(document).ready(function () { instantsearch.widgets.stats({ container: '#algolia-stats', templates: { - body: function (data) { + body: function(data) { var stats = algoliaSettings.labels.hits_stats - .replace(/\$\{hits}/, data.nbHits) - .replace(/\$\{time}/, data.processingTimeMS); + .replace(/\$\{hits}/, data.nbHits) + .replace(/\$\{time}/, data.processingTimeMS); return ( - stats + - '' + - ' Algolia' + - '' + - '
' + stats + + '' + + ' Algolia' + + '' + + '
' ); } } }), instantsearch.widgets.pagination({ - container: '#algolia-pagination', - scrollTo: false, + container : '#algolia-pagination', + scrollTo : false, showFirstLast: false, - labels: { - first: '', - last: '', + labels : { + first : '', + last : '', previous: '', - next: '' + next : '' }, cssClasses: { - root: 'pagination', - item: 'pagination-item', - link: 'page-number', - active: 'current', + root : 'pagination', + item : 'pagination-item', + link : 'page-number', + active : 'current', disabled: 'disabled-item' } }) @@ -106,7 +105,7 @@ $(document).ready(function () { $('#algolia-search-input').find('input').focus(); }); - $('.popup-btn-close').click(function(){ + $('.popup-btn-close').click(function() { $('.popup').hide(); $('.algolia-pop-overlay').remove(); $('body').css('overflow', ''); diff --git a/js/src/exturl.js b/js/src/exturl.js index b85062a..806a29e 100644 --- a/js/src/exturl.js +++ b/js/src/exturl.js @@ -1,11 +1,10 @@ -/* global NexT: true */ - -$(document).ready(function () { +$(document).ready(function() { // Create Base64 Object + /* eslint-disable */ var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}; - $('.exturl').on('click', function () { + $('.exturl').on('click', function() { var $exturl = $(this).attr('data-url'); var $decurl = Base64.decode($exturl); window.open($decurl, '_blank'); diff --git a/js/src/hook-duoshuo.js b/js/src/hook-duoshuo.js deleted file mode 100644 index ca64dbd..0000000 --- a/js/src/hook-duoshuo.js +++ /dev/null @@ -1,115 +0,0 @@ -/* global DUOSHUO: true */ -/* jshint camelcase: false */ - -typeof DUOSHUO !== 'undefined' ? - hookTemplate() : - ($('#duoshuo-script')[0].onload = hookTemplate); - - -function hookTemplate() { - var post = DUOSHUO.templates.post; - - DUOSHUO.templates.post = function (e, t) { - var rs = post(e, t); - var agent = e.post.agent; - var userId = e.post.author.user_id; - var admin = ''; - - if (userId && (userId == CONFIG.duoshuo.userId)) { - admin = '' + CONFIG.duoshuo.author + ''; - } - - if (agent && /^Mozilla/.test(agent)) { - rs = rs.replace(/<\/div>

/, admin + getAgentInfo(agent) + '

'); - } - - return rs; - }; -} - -function getAgentInfo(string) { - $.ua.set(string); - - var UNKNOWN = 'Unknown'; - var sua = $.ua; - var separator = isMobile() ? '

' : ''; - var osName = sua.os.name || UNKNOWN; - var osVersion = sua.os.version || UNKNOWN; - var browserName = sua.browser.name || UNKNOWN; - var browserVersion = sua.browser.version || UNKNOWN; - var iconMapping = { - os: { - android : 'android', - linux : 'linux', - windows : 'windows', - ios : 'apple', - 'mac os': 'apple', - unknown : 'desktop' - }, - browser: { - chrome : 'chrome', - chromium : 'chrome', - firefox : 'firefox', - opera : 'opera', - safari : 'safari', - ie : 'internet-explorer', - wechat : 'wechat', - qq : 'qq', - unknown : 'globe' - } - }; - var osIcon = iconMapping.os[osName.toLowerCase()]; - var browserIcon = iconMapping.browser[getBrowserKey()]; - - return separator + - '' + - '' + - osName + ' ' + osVersion + - '' + separator + - '' + - '' + - browserName + ' ' + browserVersion + - ''; - - function getBrowserKey () { - var key = browserName.toLowerCase(); - - if (key.match(/WeChat/i)) { - return 'wechat'; - } - - if (key.match(/QQBrowser/i)) { - return 'qq'; - } - - return key; - } - - function isMobile() { - var userAgent = window.navigator.userAgent; - - var isiPad = userAgent.match(/iPad/i) !== null; - var mobileUA = [ - 'iphone', 'android', 'phone', 'mobile', - 'wap', 'netfront', 'x11', 'java', 'opera mobi', - 'opera mini', 'ucweb', 'windows ce', 'symbian', - 'symbianos', 'series', 'webos', 'sony', - 'blackberry', 'dopod', 'nokia', 'samsung', - 'palmsource', 'xda', 'pieplus', 'meizu', - 'midp' ,'cldc' , 'motorola', 'foma', - 'docomo', 'up.browser', 'up.link', 'blazer', - 'helio', 'hosin', 'huawei', 'novarra', - 'coolpad', 'webos', 'techfaith', 'palmsource', - 'alcatel', 'amoi', 'ktouch', 'nexian', - 'ericsson', 'philips', 'sagem', 'wellcom', - 'bunjalloo', 'maui', 'smartphone', 'iemobile', - 'spice', 'bird', 'zte-', 'longcos', - 'pantech', 'gionee', 'portalmmm', 'jig browser', - 'hiptop', 'benq', 'haier', '^lct', - '320x320', '240x320', '176x220' - ]; - var pattern = new RegExp(mobileUA.join('|'), 'i'); - - return !isiPad && userAgent.match(pattern); - } -} diff --git a/js/src/js.cookie.js b/js/src/js.cookie.js index c6c3975..97b4fea 100644 --- a/js/src/js.cookie.js +++ b/js/src/js.cookie.js @@ -5,6 +5,7 @@ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ + ;(function (factory) { var registeredInModuleLoader = false; if (typeof define === 'function' && define.amd) { diff --git a/js/src/motion.js b/js/src/motion.js index 1129179..57a039b 100644 --- a/js/src/motion.js +++ b/js/src/motion.js @@ -1,25 +1,25 @@ -/* global NexT: true */ +/* global NexT, CONFIG */ -$(document).ready(function () { +$(document).ready(function() { NexT.motion = {}; var sidebarToggleLines = { lines: [], - push: function (line) { + push : function(line) { this.lines.push(line); }, - init: function () { - this.lines.forEach(function (line) { + init: function() { + this.lines.forEach(function(line) { line.init(); }); }, - arrow: function () { - this.lines.forEach(function (line) { + arrow: function() { + this.lines.forEach(function(line) { line.arrow(); }); }, - close: function () { - this.lines.forEach(function (line) { + close: function() { + this.lines.forEach(function(line) { line.close(); }); } @@ -29,44 +29,44 @@ $(document).ready(function () { this.el = $(settings.el); this.status = $.extend({}, { init: { - width: '100%', + width : '100%', opacity: 1, - left: 0, + left : 0, rotateZ: 0, - top: 0 + top : 0 } }, settings.status); } - SidebarToggleLine.prototype.init = function () { + SidebarToggleLine.prototype.init = function() { this.transform('init'); }; - SidebarToggleLine.prototype.arrow = function () { + SidebarToggleLine.prototype.arrow = function() { this.transform('arrow'); }; - SidebarToggleLine.prototype.close = function () { + SidebarToggleLine.prototype.close = function() { this.transform('close'); }; - SidebarToggleLine.prototype.transform = function (status) { + SidebarToggleLine.prototype.transform = function(status) { this.el.velocity('stop').velocity(this.status[status]); }; var sidebarToggleLine1st = new SidebarToggleLine({ - el: '.sidebar-toggle-line-first', + el : '.sidebar-toggle-line-first', status: { arrow: {width: '50%', rotateZ: '-45deg', top: '2px'}, close: {width: '100%', rotateZ: '-45deg', top: '5px'} } }); var sidebarToggleLine2nd = new SidebarToggleLine({ - el: '.sidebar-toggle-line-middle', + el : '.sidebar-toggle-line-middle', status: { arrow: {width: '90%'}, close: {opacity: 0} } }); var sidebarToggleLine3rd = new SidebarToggleLine({ - el: '.sidebar-toggle-line-last', + el : '.sidebar-toggle-line-last', status: { arrow: {width: '50%', rotateZ: '45deg', top: '-2px'}, close: {width: '100%', rotateZ: '45deg', top: '-5px'} @@ -77,45 +77,45 @@ $(document).ready(function () { sidebarToggleLines.push(sidebarToggleLine2nd); sidebarToggleLines.push(sidebarToggleLine3rd); - var SIDEBAR_WIDTH = '320px'; + var SIDEBAR_WIDTH = CONFIG.sidebar.width ? CONFIG.sidebar.width : '320px'; var SIDEBAR_DISPLAY_DURATION = 200; var xPos, yPos; var sidebarToggleMotion = { - toggleEl: $('.sidebar-toggle'), - dimmerEl: $('#sidebar-dimmer'), - sidebarEl: $('.sidebar'), + toggleEl : $('.sidebar-toggle'), + dimmerEl : $('#sidebar-dimmer'), + sidebarEl : $('.sidebar'), isSidebarVisible: false, - init: function () { + init : function() { this.toggleEl.on('click', this.clickHandler.bind(this)); this.dimmerEl.on('click', this.clickHandler.bind(this)); this.toggleEl.on('mouseenter', this.mouseEnterHandler.bind(this)); this.toggleEl.on('mouseleave', this.mouseLeaveHandler.bind(this)); this.sidebarEl.on('touchstart', this.touchstartHandler.bind(this)); this.sidebarEl.on('touchend', this.touchendHandler.bind(this)); - this.sidebarEl.on('touchmove', function(e){e.preventDefault();}); + this.sidebarEl.on('touchmove', function(e) { e.preventDefault(); }); $(document) - .on('sidebar.isShowing', function () { + .on('sidebar.isShowing', function() { NexT.utils.isDesktop() && $('body').velocity('stop').velocity( {paddingRight: SIDEBAR_WIDTH}, SIDEBAR_DISPLAY_DURATION ); }) - .on('sidebar.isHiding', function () { + .on('sidebar.isHiding', function() { }); }, - clickHandler: function () { + clickHandler: function() { this.isSidebarVisible ? this.hideSidebar() : this.showSidebar(); this.isSidebarVisible = !this.isSidebarVisible; }, - mouseEnterHandler: function () { + mouseEnterHandler: function() { if (this.isSidebarVisible) { return; } sidebarToggleLines.arrow(); }, - mouseLeaveHandler: function () { + mouseLeaveHandler: function() { if (this.isSidebarVisible) { return; } @@ -128,42 +128,47 @@ $(document).ready(function () { touchendHandler: function(e) { var _xPos = e.originalEvent.changedTouches[0].clientX; var _yPos = e.originalEvent.changedTouches[0].clientY; - if (_xPos-xPos > 30 && Math.abs(_yPos-yPos) < 20) { - this.clickHandler(); + if (_xPos - xPos > 30 && Math.abs(_yPos - yPos) < 20) { + this.clickHandler(); } }, - showSidebar: function () { + showSidebar: function() { var self = this; sidebarToggleLines.close(); this.sidebarEl.velocity('stop').velocity({ - width: SIDEBAR_WIDTH - }, { - display: 'block', - duration: SIDEBAR_DISPLAY_DURATION, - begin: function () { - $('.sidebar .motion-element').velocity( - 'transition.slideRightIn', - { - stagger: 50, - drag: true, - complete: function () { - self.sidebarEl.trigger('sidebar.motion.complete'); - } + width: SIDEBAR_WIDTH + }, { + display : 'block', + duration: SIDEBAR_DISPLAY_DURATION, + begin : function() { + $('.sidebar .motion-element').not('.site-state').velocity( + 'transition.slideRightIn', { + stagger : 50, + drag : true, + complete: function() { + self.sidebarEl.trigger('sidebar.motion.complete'); } - ); - }, - complete: function () { - self.sidebarEl.addClass('sidebar-active'); - self.sidebarEl.trigger('sidebar.didShow'); - } + } + ); + $('.site-state').velocity( + 'transition.slideRightIn', { + stagger : 50, + drag : true, + display : 'flex' + } + ); + }, + complete: function() { + self.sidebarEl.addClass('sidebar-active'); + self.sidebarEl.trigger('sidebar.didShow'); } - ); + }); this.sidebarEl.trigger('sidebar.isShowing'); }, - hideSidebar: function () { + hideSidebar: function() { NexT.utils.isDesktop() && $('body').velocity('stop').velocity({paddingRight: 0}); this.sidebarEl.find('.motion-element').velocity('stop').css('display', 'none'); this.sidebarEl.velocity('stop').velocity({width: 0}, {display: 'none'}); @@ -174,7 +179,7 @@ $(document).ready(function () { this.sidebarEl.trigger('sidebar.isHiding'); // Prevent adding TOC to Overview if Overview was selected when close & open sidebar. - if (!!$('.post-toc-wrap')) { + if ($('.post-toc-wrap')) { if ($('.site-overview-wrap').css('display') === 'block') { $('.post-toc-wrap').removeClass('motion-element'); } else { @@ -186,47 +191,81 @@ $(document).ready(function () { sidebarToggleMotion.init(); NexT.motion.integrator = { - queue: [], + queue : [], cursor: -1, - add: function (fn) { + add : function(fn) { this.queue.push(fn); return this; }, - next: function () { + next: function() { this.cursor++; var fn = this.queue[this.cursor]; $.isFunction(fn) && fn(NexT.motion.integrator); }, - bootstrap: function () { + bootstrap: function() { this.next(); } }; - NexT.motion.middleWares = { - logo: function (integrator) { + NexT.motion.middleWares = { + logo: function(integrator) { var sequence = []; var $brand = $('.brand'); + var $image = $('.custom-logo-image'); var $title = $('.site-title'); var $subtitle = $('.site-subtitle'); var $logoLineTop = $('.logo-line-before i'); var $logoLineBottom = $('.logo-line-after i'); - $brand.size() > 0 && sequence.push({ + $brand.length > 0 && sequence.push({ e: $brand, p: {opacity: 1}, o: {duration: 200} }); - NexT.utils.isMist() && hasElement([$logoLineTop, $logoLineBottom]) && - sequence.push( + /** + * Check if $elements exist. + * @param {jQuery|Array} $elements + * @returns {boolean} + */ + function hasElement($elements) { + $elements = Array.isArray($elements) ? $elements : [$elements]; + return $elements.every(function($element) { + return $element.length > 0; + }); + } + + function getMistLineSettings(element, translateX) { + return { + e: $(element), + p: {translateX: translateX}, + o: { + duration : 500, + sequenceQueue: false + } + }; + } + + function pushImageToSequence() { + sequence.push({ + e: $image, + p: {opacity: 1, top: 0}, + o: {duration: 200} + }); + } + + NexT.utils.isMist() && hasElement([$logoLineTop, $logoLineBottom]) + && sequence.push( getMistLineSettings($logoLineTop, '100%'), getMistLineSettings($logoLineBottom, '-100%') ); + NexT.utils.isMuse() && hasElement($image) && pushImageToSequence(); + hasElement($title) && sequence.push({ e: $title, p: {opacity: 1, top: 0}, - o: { duration: 200 } + o: {duration: 200} }); hasElement($subtitle) && sequence.push({ @@ -235,60 +274,41 @@ $(document).ready(function () { o: {duration: 200} }); + (NexT.utils.isPisces() || NexT.utils.isGemini()) && hasElement($image) && pushImageToSequence(); + if (CONFIG.motion.async) { integrator.next(); } if (sequence.length > 0) { - sequence[sequence.length - 1].o.complete = function () { + sequence[sequence.length - 1].o.complete = function() { integrator.next(); }; + /* eslint-disable */ $.Velocity.RunSequence(sequence); + /* eslint-enable */ } else { integrator.next(); } - - - function getMistLineSettings (element, translateX) { - return { - e: $(element), - p: {translateX: translateX}, - o: { - duration: 500, - sequenceQueue: false - } - }; - } - - /** - * Check if $elements exist. - * @param {jQuery|Array} $elements - * @returns {boolean} - */ - function hasElement ($elements) { - $elements = Array.isArray($elements) ? $elements : [$elements]; - return $elements.every(function ($element) { - return $.isFunction($element.size) && $element.size() > 0; - }); - } }, - menu: function (integrator) { + menu: function(integrator) { if (CONFIG.motion.async) { integrator.next(); } $('.menu-item').velocity('transition.slideDownIn', { - display: null, + display : null, duration: 200, - complete: function () { + complete: function() { integrator.next(); } }); }, - postList: function (integrator) { + postList: function(integrator) { + //var $post = $('.post'); var $postBlock = $('.post-block, .pagination, .comments'); var $postBlockTransition = CONFIG.motion.transition.post_block; @@ -300,20 +320,14 @@ $(document).ready(function () { var $collHeaderTransition = CONFIG.motion.transition.coll_header; var $sidebarAffix = $('.sidebar-inner'); var $sidebarAffixTransition = CONFIG.motion.transition.sidebar; - var hasPost = $postBlock.size() > 0; - - hasPost ? postMotion() : integrator.next(); - - if (CONFIG.motion.async) { - integrator.next(); - } + var hasPost = $postBlock.length > 0; - function postMotion () { + function postMotion() { var postMotionOptions = window.postMotionOptions || { - stagger: 100, - drag: true - }; - postMotionOptions.complete = function () { + stagger: 100, + drag : true + }; + postMotionOptions.complete = function() { // After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini. if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) { $sidebarAffix.css({ 'transform': 'initial' }); @@ -339,9 +353,15 @@ $(document).ready(function () { $sidebarAffix.velocity('transition.' + $sidebarAffixTransition, postMotionOptions); } } + + hasPost ? postMotion() : integrator.next(); + + if (CONFIG.motion.async) { + integrator.next(); + } }, - sidebar: function (integrator) { + sidebar: function(integrator) { if (CONFIG.sidebar.display === 'always') { NexT.utils.displaySidebar(); } diff --git a/js/src/bootstrap.js b/js/src/next-boot.js similarity index 68% rename from js/src/bootstrap.js rename to js/src/next-boot.js index d9c33ed..f9c02d3 100644 --- a/js/src/bootstrap.js +++ b/js/src/next-boot.js @@ -1,26 +1,29 @@ -/* global NexT: true */ +/* global NexT, CONFIG */ -$(document).ready(function () { +$(document).ready(function() { $(document).trigger('bootstrap:before'); - NexT.utils.isMobile() && window.FastClick.attach(document.body); - - NexT.utils.lazyLoadPostsImages(); + /** + * Register JS handlers by condition option. + * Need to add config option in Front-End at 'layout/_partials/head.swig' file. + */ + CONFIG.fastclick && NexT.utils.isMobile() && window.FastClick.attach(document.body); + CONFIG.lazyload && NexT.utils.lazyLoadPostsImages(); NexT.utils.registerESCKeyEvent(); - NexT.utils.registerBackToTop(); + CONFIG.back2top && NexT.utils.registerBackToTop(); // Mobile top menu bar. - $('.site-nav-toggle button').on('click', function () { + $('.site-nav-toggle button').on('click', function() { var $siteNav = $('.site-nav'); var ON_CLASS_NAME = 'site-nav-on'; var isSiteNavOn = $siteNav.hasClass(ON_CLASS_NAME); var animateAction = isSiteNavOn ? 'slideUp' : 'slideDown'; var animateCallback = isSiteNavOn ? 'removeClass' : 'addClass'; - $siteNav.stop()[animateAction]('fast', function () { + $siteNav.stop()[animateAction]('fast', function() { $siteNav[animateCallback](ON_CLASS_NAME); }); }); @@ -33,8 +36,6 @@ $(document).ready(function () { CONFIG.tabs && NexT.utils.registerTabsTag(); NexT.utils.embeddedVideoTransformer(); - NexT.utils.addActiveClassToMenuItem(); - // Define Motion Sequence. NexT.motion.integrator diff --git a/js/src/post-details.js b/js/src/post-details.js index a82bcc2..e47f1bb 100644 --- a/js/src/post-details.js +++ b/js/src/post-details.js @@ -1,16 +1,19 @@ -/* global NexT: true */ +/* global NexT, CONFIG */ -$(document).ready(function () { +$(document).ready(function() { - initScrollSpy(); - - function initScrollSpy () { + function initScrollSpy() { var tocSelector = '.post-toc'; var $tocElement = $(tocSelector); var activeCurrentSelector = '.active-current'; + function removeCurrentActiveClass() { + $(tocSelector + ' ' + activeCurrentSelector) + .removeClass(activeCurrentSelector.substring(1)); + } + $tocElement - .on('activate.bs.scrollspy', function () { + .on('activate.bs.scrollspy', function() { var $currentActiveElement = $(tocSelector + ' .active').last(); removeCurrentActiveClass(); @@ -22,21 +25,17 @@ $(document).ready(function () { .on('clear.bs.scrollspy', removeCurrentActiveClass); $('body').scrollspy({ target: tocSelector }); - - function removeCurrentActiveClass () { - $(tocSelector + ' ' + activeCurrentSelector) - .removeClass(activeCurrentSelector.substring(1)); - } } + initScrollSpy(); }); -$(document).ready(function () { +$(document).ready(function() { var html = $('html'); var TAB_ANIMATE_DURATION = 200; var hasVelocity = $.isFunction(html.velocity); - $('.sidebar-nav li').on('click', function () { + $('.sidebar-nav li').on('click', function() { var item = $(this); var activeTabClassName = 'sidebar-nav-active'; var activePanelClassName = 'sidebar-panel-active'; @@ -47,19 +46,19 @@ $(document).ready(function () { var currentTarget = $('.' + activePanelClassName); var target = $('.' + item.data('target')); - hasVelocity ? - currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function () { + hasVelocity + ? currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function() { target .velocity('stop') .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION) .addClass(activePanelClassName); - }) : - currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function () { + }) + : currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function() { currentTarget.hide(); target .stop() .css({'opacity': 0, 'display': 'block'}) - .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function () { + .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function() { currentTarget.removeClass(activePanelClassName); target.addClass(activePanelClassName); }); @@ -70,30 +69,36 @@ $(document).ready(function () { }); // TOC item animation navigate & prevent #item selector in adress bar. - $('.post-toc a').on('click', function (e) { + $('.post-toc a').on('click', function(e) { e.preventDefault(); var targetSelector = NexT.utils.escapeSelector(this.getAttribute('href')); var offset = $(targetSelector).offset().top; - hasVelocity ? - html.velocity('stop').velocity('scroll', { - offset: offset + 'px', + hasVelocity + ? html.velocity('stop').velocity('scroll', { + offset : offset + 'px', mobileHA: false - }) : - $('html, body').stop().animate({ + }) + : $('html, body').stop().animate({ scrollTop: offset }, 500); }); // Expand sidebar on post detail page by default, when post has a toc. var $tocContent = $('.post-toc-content'); - var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' || - CONFIG.sidebar.display === 'always'; - var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0; - if (isSidebarCouldDisplay && hasTOC) { - CONFIG.motion.enable ? - (NexT.motion.middleWares.sidebar = function () { - NexT.utils.displaySidebar(); - }) : NexT.utils.displaySidebar(); + var display = CONFIG.page.sidebar; + if (typeof display !== 'boolean') { + // There's no definition sidebar in the page front-matter + var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' + || CONFIG.sidebar.display === 'always'; + var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0; + display = isSidebarCouldDisplay && hasTOC; + } + if (display) { + CONFIG.motion.enable + ? NexT.motion.middleWares.sidebar = function() { + NexT.utils.displaySidebar(); + } + : NexT.utils.displaySidebar(); } }); diff --git a/js/src/schemes/muse.js b/js/src/schemes/muse.js new file mode 100644 index 0000000..a0e2c56 --- /dev/null +++ b/js/src/schemes/muse.js @@ -0,0 +1,9 @@ +$(document).ready(function() { + function updateFooterPosition() { + var containerHeight = $('#footer').attr('position') ? $('.container').height() + $('#footer').outerHeight(true) : $('.container').height(); + if (containerHeight < window.innerHeight) $('#footer').css({ 'position': 'fixed', 'bottom': 0, 'left': 0, 'right': 0 }).attr('position', 'fixed'); + else $('#footer').removeAttr('style position'); + } + updateFooterPosition(); + $(window).on('resize scroll', updateFooterPosition); +}); diff --git a/js/src/schemes/pisces.js b/js/src/schemes/pisces.js index 0e6e426..8c6e896 100644 --- a/js/src/schemes/pisces.js +++ b/js/src/schemes/pisces.js @@ -1,57 +1,57 @@ -$(document).ready(function () { +/* global NexT, CONFIG */ + +$(document).ready(function() { var sidebarInner = $('.sidebar-inner'); + var sidebarOffset = CONFIG.sidebar.offset || 12; - initAffix(); - resizeListener(); + function getHeaderOffset() { + return $('.header-inner').height() + sidebarOffset; + } + + function getFooterOffset() { + var footer = $('#footer'); + var footerInner = $('.footer-inner'); + var footerMargin = footer.outerHeight() - footerInner.outerHeight(); + var footerOffset = footer.outerHeight() + footerMargin; + return footerOffset; + } - function initAffix () { - var headerOffset = getHeaderOffset(), - footerOffset = getFooterOffset(), - sidebarHeight = $('#sidebar').height() + NexT.utils.getSidebarb2tHeight(), - contentHeight = $('#content').height(); + function initAffix() { + var headerOffset = getHeaderOffset(); + var footerOffset = getFooterOffset(); + var sidebarHeight = $('#sidebar').height() + NexT.utils.getSidebarb2tHeight(); + var contentHeight = $('#content').height(); - // Not affix if sidebar taller then content (to prevent bottom jumping). + // Not affix if sidebar taller than content (to prevent bottom jumping). if (headerOffset + sidebarHeight < contentHeight) { sidebarInner.affix({ offset: { - top: headerOffset - CONFIG.sidebar.offset, + top : headerOffset - sidebarOffset, bottom: footerOffset } }); + sidebarInner.affix('checkPosition'); } - setSidebarMarginTop(headerOffset).css({ 'margin-left': 'initial' }); - } - - function resizeListener () { - var mql = window.matchMedia('(min-width: 991px)'); - mql.addListener(function(e){ - if(e.matches){ - recalculateAffixPosition(); - } - }); - } - - function getHeaderOffset () { - return $('.header-inner').height() + CONFIG.sidebar.offset; - } - - function getFooterOffset () { - var footerInner = $('.footer-inner'), - footerMargin = footerInner.outerHeight(true) - footerInner.outerHeight(), - footerOffset = footerInner.outerHeight(true) + footerMargin; - return footerOffset; + $('#sidebar').css({ 'margin-top': headerOffset, 'margin-left': 'auto' }); } - function setSidebarMarginTop (headerOffset) { - return $('#sidebar').css({ 'margin-top': headerOffset }); - } - - function recalculateAffixPosition () { + function recalculateAffixPosition() { $(window).off('.affix'); sidebarInner.removeData('bs.affix').removeClass('affix affix-top affix-bottom'); initAffix(); } + function resizeListener() { + var mql = window.matchMedia('(min-width: 992px)'); + mql.addListener(function(e) { + if (e.matches) { + recalculateAffixPosition(); + } + }); + } + + initAffix(); + resizeListener(); }); diff --git a/js/src/scroll-cookie.js b/js/src/scroll-cookie.js index 34ff200..2db1f8a 100644 --- a/js/src/scroll-cookie.js +++ b/js/src/scroll-cookie.js @@ -1,23 +1,25 @@ $(document).ready(function() { + /* global Cookies */ + // Set relative link path (without domain) - var rpath = window.location.href.replace(window.location.origin, ""); + var rpath = window.location.href.replace(window.location.origin, ''); // Write position in cookie var timeout; - $(window).on("scroll", function() { + $(window).on('scroll', function() { clearTimeout(timeout); - timeout = setTimeout(function () { - Cookies.set("scroll-cookie", ($(window).scrollTop() + "|" + rpath), { expires: 365, path: '' }); + timeout = setTimeout(function() { + Cookies.set('scroll-cookie', $(window).scrollTop() + '|' + rpath, { expires: 365, path: '' }); }, 250); }); // Read position from cookie - if (Cookies.get("scroll-cookie") !== undefined) { - var cvalues = Cookies.get("scroll-cookie").split('|'); - if (cvalues[1] == rpath) { - $(window).scrollTop(cvalues[0]); - } + if (Cookies.get('scroll-cookie') !== undefined) { + var cvalues = Cookies.get('scroll-cookie').split('|'); + if (cvalues[1] === rpath) { + $(window).scrollTop(cvalues[0]); + } } }); diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index f5c5c6c..7efacac 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -7,176 +7,173 @@ * ======================================================================== */ /** - * Custom by iissnan + * Customized by iissnan & Ivan.Nginx * * - Add a `clear.bs.scrollspy` event. * - Esacpe targets selector. + * - Refactored with eslint-config-theme-next style. */ +/* global NexT */ -+function ($) { +(function($) { 'use strict'; // SCROLLSPY CLASS DEFINITION // ========================== - function ScrollSpy(element, options) { - this.$body = $(document.body) - this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target || '') + ' .nav li > a' - this.offsets = [] - this.targets = [] - this.activeTarget = null - this.scrollHeight = 0 - - this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) - this.refresh() - this.process() + this.$body = $(document.body); + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element); + this.options = $.extend({}, ScrollSpy.DEFAULTS, options); + this.selector = (this.options.target || '') + ' .nav li > a'; + this.offsets = []; + this.targets = []; + this.activeTarget = null; + this.scrollHeight = 0; + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)); + this.refresh(); + this.process(); } - ScrollSpy.VERSION = '3.3.2' + ScrollSpy.VERSION = '3.3.2'; ScrollSpy.DEFAULTS = { offset: 10 - } + }; - ScrollSpy.prototype.getScrollHeight = function () { - return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) - } + ScrollSpy.prototype.getScrollHeight = function() { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight); + }; - ScrollSpy.prototype.refresh = function () { - var that = this - var offsetMethod = 'offset' - var offsetBase = 0 + ScrollSpy.prototype.refresh = function() { + var that = this; + var offsetMethod = 'offset'; + var offsetBase = 0; - this.offsets = [] - this.targets = [] - this.scrollHeight = this.getScrollHeight() + this.offsets = []; + this.targets = []; + this.scrollHeight = this.getScrollHeight(); if (!$.isWindow(this.$scrollElement[0])) { - offsetMethod = 'position' - offsetBase = this.$scrollElement.scrollTop() + offsetMethod = 'position'; + offsetBase = this.$scrollElement.scrollTop(); } this.$body .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#./.test(href) && $(NexT.utils.escapeSelector(href)) // Need to escape selector. + .map(function() { + var $el = $(this); + var href = $el.data('target') || $el.attr('href'); + var $href = /^#./.test(href) && $(NexT.utils.escapeSelector(href)); // Need to escape selector. return ($href && $href.length && $href.is(':visible') - && [[$href[offsetMethod]().top + offsetBase, href]]) || null + && [[$href[offsetMethod]().top + offsetBase, href]]) || null; }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - that.offsets.push(this[0]) - that.targets.push(this[1]) + .sort(function(a, b) { + return a[0] - b[0]; }) + .each(function() { + that.offsets.push(this[0]); + that.targets.push(this[1]); + }); - } + }; - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.getScrollHeight() - var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i - - if (this.scrollHeight != scrollHeight) { - this.refresh() + ScrollSpy.prototype.process = function() { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset; + var scrollHeight = this.getScrollHeight(); + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height(); + var offsets = this.offsets; + var targets = this.targets; + var activeTarget = this.activeTarget; + var i; + + if (this.scrollHeight !== scrollHeight) { + this.refresh(); } if (scrollTop >= maxScroll) { - return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + return activeTarget !== (i = targets[targets.length - 1]) && this.activate(i); } if (activeTarget && scrollTop < offsets[0]) { - $(this.selector).trigger('clear.bs.scrollspy') // Add a custom event. - this.activeTarget = null - return this.clear() + $(this.selector).trigger('clear.bs.scrollspy'); // Add a custom event. + this.activeTarget = null; + return this.clear(); } for (i = offsets.length; i--;) { - activeTarget != targets[i] + activeTarget !== targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate(targets[i]) + && this.activate(targets[i]); } - } + }; - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target + ScrollSpy.prototype.activate = function(target) { + this.activeTarget = target; - this.clear() + this.clear(); - var selector = this.selector + - '[data-target="' + target + '"],' + - this.selector + '[href="' + target + '"]' + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]'; var active = $(selector) .parents('li') - .addClass('active') + .addClass('active'); if (active.parent('.dropdown-menu').length) { active = active .closest('li.dropdown') - .addClass('active') + .addClass('active'); } - active.trigger('activate.bs.scrollspy') - } + active.trigger('activate.bs.scrollspy'); + }; - ScrollSpy.prototype.clear = function () { + ScrollSpy.prototype.clear = function() { $(this.selector) .parentsUntil(this.options.target, '.active') - .removeClass('active') - } - + .removeClass('active'); + }; // SCROLLSPY PLUGIN DEFINITION // =========================== - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) + return this.each(function() { + var $this = $(this); + var data = $this.data('bs.scrollspy'); + var options = typeof option === 'object' && option; + + if (!data) $this.data('bs.scrollspy', data = new ScrollSpy(this, options)); + if (typeof option === 'string') data[option](); + }); } - var old = $.fn.scrollspy - - $.fn.scrollspy = Plugin - $.fn.scrollspy.Constructor = ScrollSpy + var old = $.fn.scrollspy; + $.fn.scrollspy = Plugin; + $.fn.scrollspy.Constructor = ScrollSpy; // SCROLLSPY NO CONFLICT // ===================== - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - + $.fn.scrollspy.noConflict = function() { + $.fn.scrollspy = old; + return this; + }; // SCROLLSPY DATA-API // ================== - - $(window).on('load.bs.scrollspy.data-api', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - Plugin.call($spy, $spy.data()) - }) - }) - -}(jQuery); + $(window).on('load.bs.scrollspy.data-api', function() { + $('[data-spy="scroll"]').each(function() { + var $spy = $(this); + Plugin.call($spy, $spy.data()); + }); + }); + +}(jQuery)); diff --git a/js/src/utils.js b/js/src/utils.js index 5191daf..c7f3de4 100644 --- a/js/src/utils.js +++ b/js/src/utils.js @@ -1,35 +1,42 @@ -/* global NexT: true */ +/* global NexT, CONFIG */ NexT.utils = NexT.$u = { + /** * Wrap images with fancybox support. */ - wrapImageWithFancyBox: function () { + wrapImageWithFancyBox: function() { $('.content img') - .not('[hidden]') - .not('.group-picture img, .post-gallery img') - .each(function () { + .not(':hidden') + .each(function() { var $image = $(this); - var imageTitle = $image.attr('title'); + var imageTitle = $image.attr('title') || $image.attr('alt'); var $imageWrapLink = $image.parent('a'); - if ($imageWrapLink.size() < 1) { - var imageLink = ($image.attr('data-original')) ? this.getAttribute('data-original') : this.getAttribute('src'); - $imageWrapLink = $image.wrap('').parent('a'); + if ($imageWrapLink.length < 1) { + var imageLink = $image.attr('data-original') || $image.attr('src'); + $imageWrapLink = $image.wrap('').parent('a'); + if ($image.is('.post-gallery img')) { + $imageWrapLink.addClass('post-gallery-img'); + $imageWrapLink.attr('data-fancybox', 'gallery').attr('rel', 'gallery'); + } + else if ($image.is('.group-picture img')) { + $imageWrapLink.attr('data-fancybox', 'group').attr('rel', 'group'); + } + else { + $imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default'); + } } - $imageWrapLink.addClass('fancybox fancybox.image'); - $imageWrapLink.attr('rel', 'group'); - if (imageTitle) { $imageWrapLink.append('

' + imageTitle + '

'); - - //make sure img title tag will show correctly in fancybox - $imageWrapLink.attr('title', imageTitle); + // Make sure img title tag will show correctly in fancybox + $imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle); } }); $('.fancybox').fancybox({ + loop: true, helpers: { overlay: { locked: false @@ -38,35 +45,35 @@ NexT.utils = NexT.$u = { }); }, - lazyLoadPostsImages: function () { + lazyLoadPostsImages: function() { $('#posts').find('img').lazyload({ //placeholder: '/images/loading.gif', - effect: 'fadeIn', - threshold : 0 + effect : 'fadeIn', + threshold: 0 }); }, /** * Tabs tag listener (without twitter bootstrap). */ - registerTabsTag: function () { + registerTabsTag: function() { var tNav = '.tabs ul.nav-tabs '; // Binding `nav-tabs` & `tab-content` by real time permalink changing. $(function() { $(window).bind('hashchange', function() { var tHash = location.hash; - if (tHash !== '') { + if (tHash !== '' && !tHash.match(/%\S{2}/)) { $(tNav + 'li:has(a[href="' + tHash + '"])').addClass('active').siblings().removeClass('active'); $(tHash).addClass('active').siblings().removeClass('active'); } }).trigger('hashchange'); }); - $(tNav + '.tab').on('click', function (href) { + $(tNav + '.tab').on('click', function(href) { href.preventDefault(); // Prevent selected tab to select again. - if(!$(this).hasClass('active')){ + if (!$(this).hasClass('active')) { // Add & Remove active class on `nav-tabs` & `tab-content`. $(this).addClass('active').siblings().removeClass('active'); @@ -79,13 +86,12 @@ NexT.utils = NexT.$u = { } } }); - }, - registerESCKeyEvent: function () { - $(document).on('keyup', function (event) { - var shouldDismissSearchPopup = event.which === 27 && - $('.search-popup').is(':visible'); + registerESCKeyEvent: function() { + $(document).on('keyup', function(event) { + var shouldDismissSearchPopup = event.which === 27 + && $('.search-popup').is(':visible'); if (shouldDismissSearchPopup) { $('.search-popup').hide(); $('.search-popup-overlay').remove(); @@ -94,23 +100,32 @@ NexT.utils = NexT.$u = { }); }, - registerBackToTop: function () { + registerBackToTop: function() { var THRESHOLD = 50; var $top = $('.back-to-top'); - $(window).on('scroll', function () { + function initBackToTop() { $top.toggleClass('back-to-top-on', window.pageYOffset > THRESHOLD); var scrollTop = $(window).scrollTop(); var contentVisibilityHeight = NexT.utils.getContentVisibilityHeight(); - var scrollPercent = (scrollTop) / (contentVisibilityHeight); - var scrollPercentRounded = Math.round(scrollPercent*100); - var scrollPercentMaxed = (scrollPercentRounded > 100) ? 100 : scrollPercentRounded; + var scrollPercent = scrollTop / contentVisibilityHeight; + var scrollPercentRounded = Math.round(scrollPercent * 100); + var scrollPercentMaxed = scrollPercentRounded > 100 ? 100 : scrollPercentRounded; $('#scrollpercent>span').html(scrollPercentMaxed); + } + + // For init back to top in sidebar if page was scrolled after page refresh. + $(window).on('load', function() { + initBackToTop(); + }); + + $(window).on('scroll', function() { + initBackToTop(); }); - $top.on('click', function () { - $('body').velocity('scroll'); + $top.on('click', function() { + $.isFunction($('html').velocity) ? $('body').velocity('scroll') : $('html, body').animate({ scrollTop: 0 }); }); }, @@ -118,7 +133,7 @@ NexT.utils = NexT.$u = { * Transform embedded video to support responsive layout. * @see http://toddmotto.com/fluid-and-responsive-youtube-and-vimeo-videos-with-fluidvids-js/ */ - embeddedVideoTransformer: function () { + embeddedVideoTransformer: function() { var $iframes = $('iframe'); // Supported Players. Extend this if you need more players. @@ -129,9 +144,20 @@ NexT.utils = NexT.$u = { 'music.163.com', 'www.tudou.com' ]; - var pattern = new RegExp( SUPPORTED_PLAYERS.join('|') ); + var pattern = new RegExp(SUPPORTED_PLAYERS.join('|')); + + function getDimension($element) { + return { + width : $element.width(), + height: $element.height() + }; + } + + function getAspectRadio(width, height) { + return height / width * 100; + } - $iframes.each(function () { + $iframes.each(function() { var iframe = this; var $iframe = $(this); var oldDimension = getDimension($iframe); @@ -147,11 +173,10 @@ NexT.utils = NexT.$u = { $iframe.width('100%').height('100%') .css({ position: 'absolute', - top: '0', - left: '0' + top : '0', + left : '0' }); - // Wrap the iframe in a new
which uses a dynamically fetched padding-top property // based on the video's w/h dimensions var wrap = document.createElement('div'); @@ -171,8 +196,8 @@ NexT.utils = NexT.$u = { // Additional adjustments for 163 Music if (this.src.search('music.163.com') > 0) { newDimension = getDimension($iframe); - var shouldRecalculateAspect = newDimension.width > oldDimension.width || - newDimension.height < oldDimension.height; + var shouldRecalculateAspect = newDimension.width > oldDimension.width + || newDimension.height < oldDimension.height; // 163 Music Player has a fixed height, so we need to reset the aspect radio if (shouldRecalculateAspect) { @@ -182,29 +207,9 @@ NexT.utils = NexT.$u = { } }); - function getDimension($element) { - return { - width: $element.width(), - height: $element.height() - }; - } - - function getAspectRadio(width, height) { - return height / width * 100; - } - }, - - /** - * Add `menu-item-active` class name to menu item - * via comparing location.path with menu item's href. - */ - addActiveClassToMenuItem: function () { - var path = window.location.pathname; - path = path === '/' ? path : path.substring(0, path.length - 1); - $('.menu-item a[href^="' + path + '"]:first').parent().addClass('menu-item-active'); }, - hasMobileUA: function () { + hasMobileUA: function() { var nav = window.navigator; var ua = nav.userAgent; var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g; @@ -212,15 +217,15 @@ NexT.utils = NexT.$u = { return pa.test(ua); }, - isTablet: function () { + isTablet: function() { return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA(); }, - isMobile: function () { + isMobile: function() { return window.screen.width < 767 && this.hasMobileUA(); }, - isDesktop: function () { + isDesktop: function() { return !this.isTablet() && !this.isMobile(); }, @@ -230,105 +235,106 @@ NexT.utils = NexT.$u = { * @param selector * @returns {string|void|XML|*} */ - escapeSelector: function (selector) { - return selector.replace(/[!"$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, '\\$&'); + escapeSelector: function(selector) { + return selector.replace(/[!"$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, '\\$&'); }, - displaySidebar: function () { + displaySidebar: function() { if (!this.isDesktop() || this.isPisces() || this.isGemini()) { return; } $('.sidebar-toggle').trigger('click'); }, - isMist: function () { + isMuse: function() { + return CONFIG.scheme === 'Muse'; + }, + + isMist: function() { return CONFIG.scheme === 'Mist'; }, - isPisces: function () { + isPisces: function() { return CONFIG.scheme === 'Pisces'; }, - isGemini: function () { + isGemini: function() { return CONFIG.scheme === 'Gemini'; }, - getScrollbarWidth: function () { + getScrollbarWidth: function() { var $div = $('
').addClass('scrollbar-measure').prependTo('body'); var div = $div[0]; var scrollbarWidth = div.offsetWidth - div.clientWidth; - $div.remove(); return scrollbarWidth; }, - getContentVisibilityHeight: function () { - var docHeight = $('#content').height(), - winHeight = $(window).height(), - contentVisibilityHeight = (docHeight > winHeight) ? (docHeight - winHeight) : ($(document).height() - winHeight); + getContentVisibilityHeight: function() { + var docHeight = $('.container').height(); + var winHeight = $(window).height(); + var contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : $(document).height() - winHeight; return contentVisibilityHeight; }, - getSidebarb2tHeight: function () { - //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? document.getElementsByClassName('back-to-top')[0].clientHeight : 0; - var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? $('.back-to-top').height() : 0; - //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? 24 : 0; + getSidebarb2tHeight: function() { + var sidebarb2tHeight = (CONFIG.back2top && CONFIG.back2top_sidebar) ? $('.back-to-top').height() : 0; return sidebarb2tHeight; }, - getSidebarSchemePadding: function () { - var sidebarNavHeight = ($('.sidebar-nav').css('display') == 'block') ? $('.sidebar-nav').outerHeight(true) : 0, - sidebarInner = $('.sidebar-inner'), - sidebarPadding = sidebarInner.innerWidth() - sidebarInner.width(), - sidebarSchemePadding = this.isPisces() || this.isGemini() ? - ((sidebarPadding * 2) + sidebarNavHeight + (CONFIG.sidebar.offset * 2) + this.getSidebarb2tHeight()) : - ((sidebarPadding * 2) + (sidebarNavHeight / 2)); + getSidebarSchemePadding: function() { + var sidebarNavHeight = $('.sidebar-nav').css('display') === 'block' ? $('.sidebar-nav').outerHeight(true) : 0; + var sidebarInner = $('.sidebar-inner'); + var sidebarPadding = sidebarInner.innerWidth() - sidebarInner.width(); + var sidebarOffset = CONFIG.sidebar.offset ? CONFIG.sidebar.offset : 12; + var sidebarSchemePadding = this.isPisces() || this.isGemini() + ? (sidebarPadding * 2) + sidebarNavHeight + sidebarOffset + this.getSidebarb2tHeight() + : (sidebarPadding * 2) + (sidebarNavHeight / 2); return sidebarSchemePadding; } - - /** - * Affix behaviour for Sidebar. - * - * @returns {Boolean} - */ -// needAffix: function () { -// return this.isPisces() || this.isGemini(); -// } }; -$(document).ready(function () { +$(document).ready(function() { - initSidebarDimension(); + function wrapTable() { + $('table').not('figure table').wrap('
'); + } /** * Init Sidebar & TOC inner dimensions on all pages and for all schemes. * Need for Sidebar/TOC inner scrolling if content taller then viewport. */ - function initSidebarDimension () { + function updateSidebarHeight(height) { + height = height || 'auto'; + $('.site-overview, .post-toc').css('max-height', height); + } + + function initSidebarDimension() { var updateSidebarHeightTimer; - $(window).on('resize', function () { + $(window).on('resize', function() { updateSidebarHeightTimer && clearTimeout(updateSidebarHeightTimer); - updateSidebarHeightTimer = setTimeout(function () { + updateSidebarHeightTimer = setTimeout(function() { var sidebarWrapperHeight = document.body.clientHeight - NexT.utils.getSidebarSchemePadding(); updateSidebarHeight(sidebarWrapperHeight); }, 0); }); - // Initialize Sidebar & TOC Height. - updateSidebarHeight(document.body.clientHeight - NexT.utils.getSidebarSchemePadding()); - // Initialize Sidebar & TOC Width. var scrollbarWidth = NexT.utils.getScrollbarWidth(); - $('.site-overview, .post-toc').css('width', 'calc(100% + ' + scrollbarWidth + 'px)'); - } + if ($('.site-overview-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) { + $('.site-overview').css('width', 'calc(100% + ' + scrollbarWidth + 'px)'); + } + if ($('.post-toc-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) { + $('.post-toc').css('width', 'calc(100% + ' + scrollbarWidth + 'px)'); + } - function updateSidebarHeight (height) { - height = height || 'auto'; - $('.site-overview, .post-toc').css('max-height', height); + // Initialize Sidebar & TOC Height. + updateSidebarHeight(document.body.clientHeight - NexT.utils.getSidebarSchemePadding()); } - + initSidebarDimension(); + wrapTable(); }); diff --git a/lib/Han/dist/font/han-space.otf b/lib/Han/dist/font/han-space.otf deleted file mode 100644 index 845b1bc..0000000 Binary files a/lib/Han/dist/font/han-space.otf and /dev/null differ diff --git a/lib/Han/dist/font/han-space.woff b/lib/Han/dist/font/han-space.woff deleted file mode 100644 index 6ccc84f..0000000 Binary files a/lib/Han/dist/font/han-space.woff and /dev/null differ diff --git a/lib/Han/dist/font/han.otf b/lib/Han/dist/font/han.otf deleted file mode 100644 index 2ce2f46..0000000 Binary files a/lib/Han/dist/font/han.otf and /dev/null differ diff --git a/lib/Han/dist/font/han.woff b/lib/Han/dist/font/han.woff deleted file mode 100644 index 011e06c..0000000 Binary files a/lib/Han/dist/font/han.woff and /dev/null differ diff --git a/lib/Han/dist/font/han.woff2 b/lib/Han/dist/font/han.woff2 deleted file mode 100644 index 02c49af..0000000 Binary files a/lib/Han/dist/font/han.woff2 and /dev/null differ diff --git a/lib/Han/dist/han.css b/lib/Han/dist/han.css deleted file mode 100644 index 9bafab6..0000000 --- a/lib/Han/dist/han.css +++ /dev/null @@ -1,1168 +0,0 @@ -@charset "UTF-8"; - -/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */ -/*! Han.css: the CSS typography framework optimised for Hanzi */ - -/* normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -main, -menu, -nav, -section, -summary { - /* 1 */ - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; -} -audio:not([controls]) { - display: none; - height: 0; -} -progress { - vertical-align: baseline; -} -template, -[hidden] { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline-width: 0; -} -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} -b, -strong { - font-weight: inherit; -} -b, -strong { - font-weight: bolder; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: .67em 0; -} -mark { - background-color: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -.25em; -} -sup { - top: -.5em; -} -img { - border-style: none; -} -svg:not(:root) { - overflow: hidden; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -figure { - margin: 1em 40px; -} -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} -button, -input, -select, -textarea { - font: inherit; -} -optgroup { - font-weight: bold; -} -button, -input, -select { - /* 2 */ - overflow: visible; -} -button, -input, -select, -textarea { - /* 1 */ - margin: 0; -} -button, -select { - /* 1 */ - text-transform: none; -} -button, -[type="button"], -[type="reset"], -[type="submit"] { - cursor: pointer; -} -[disabled] { - cursor: default; -} -button, -html [type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; /* 2 */ -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -button:-moz-focusring, -input:-moz-focusring { - outline: 1px dotted ButtonText; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: .35em .625em .75em; -} -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} -textarea { - overflow: auto; -} -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} -[type="search"] { - -webkit-appearance: textfield; -} -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -@font-face { - font-family: "Han Heiti"; - src: local("Hiragino Sans GB"), local("Lantinghei TC Extralight"), local("Lantinghei SC Extralight"), local(FZLTXHB--B51-0), local(FZLTZHK--GBK1-0), local("Pingfang SC Light"), local("Pingfang TC Light"), local("Pingfang-SC-Light"), local("Pingfang-TC-Light"), local("Pingfang SC"), local("Pingfang TC"), local("Heiti SC Light"), local(STHeitiSC-Light), local("Heiti SC"), local("Heiti TC Light"), local(STHeitiTC-Light), local("Heiti TC"), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Noto Sans CJK KR"), local("Noto Sans CJK JP"), local("Noto Sans CJK SC"), local("Noto Sans CJK TC"), local("Source Han Sans K"), local("Source Han Sans KR"), local("Source Han Sans JP"), local("Source Han Sans CN"), local("Source Han Sans HK"), local("Source Han Sans TW"), local("Source Han Sans TWHK"), local("Droid Sans Fallback"); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Heiti"; - src: local(YuGothic), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"); -} -@font-face { - font-family: "Han Heiti CNS"; - src: local("Pingfang TC Light"), local("Pingfang-TC-Light"), local("Pingfang TC"), local("Heiti TC Light"), local(STHeitiTC-Light), local("Heiti TC"), local("Lantinghei TC Extralight"), local(FZLTXHB--B51-0), local("Lantinghei TC"), local("Microsoft Jhenghei"), local("Microsoft Yahei"), local("Noto Sans CJK TC"), local("Source Han Sans TC"), local("Source Han Sans TW"), local("Source Han Sans TWHK"), local("Source Han Sans HK"), local("Droid Sans Fallback"); -} -@font-face { - font-family: "Han Heiti GB"; - src: local("Hiragino Sans GB"), local("Pingfang SC Light"), local("Pingfang-SC-Light"), local("Pingfang SC"), local("Lantinghei SC Extralight"), local(FZLTXHK--GBK1-0), local("Lantinghei SC"), local("Heiti SC Light"), local(STHeitiSC-Light), local("Heiti SC"), local("Microsoft Yahei"), local("Noto Sans CJK SC"), local("Source Han Sans SC"), local("Source Han Sans CN"), local("Droid Sans Fallback"); -} -@font-face { - font-family: "Han Heiti"; - font-weight: 600; - src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Lantinghei SC Demibold"), local(FZLTZHB--B51-0), local(FZLTZHK--GBK1-0), local("Pingfang-SC-Semibold"), local("Pingfang-TC-Semibold"), local("Heiti SC Medium"), local("STHeitiSC-Medium"), local("Heiti SC"), local("Heiti TC Medium"), local("STHeitiTC-Medium"), local("Heiti TC"), local("Microsoft Yahei Bold"), local("Microsoft Jhenghei Bold"), local(MicrosoftYahei-Bold), local(MicrosoftJhengHeiBold), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Noto Sans CJK KR Bold"), local("Noto Sans CJK JP Bold"), local("Noto Sans CJK SC Bold"), local("Noto Sans CJK TC Bold"), local(NotoSansCJKkr-Bold), local(NotoSansCJKjp-Bold), local(NotoSansCJKsc-Bold), local(NotoSansCJKtc-Bold), local("Source Han Sans K Bold"), local(SourceHanSansK-Bold), local("Source Han Sans K"), local("Source Han Sans KR Bold"), local("Source Han Sans JP Bold"), local("Source Han Sans CN Bold"), local("Source Han Sans HK Bold"), local("Source Han Sans TW Bold"), local("Source Han Sans TWHK Bold"), local("SourceHanSansKR-Bold"), local("SourceHanSansJP-Bold"), local("SourceHanSansCN-Bold"), local("SourceHanSansHK-Bold"), local("SourceHanSansTW-Bold"), local("SourceHanSansTWHK-Bold"), local("Source Han Sans KR"), local("Source Han Sans CN"), local("Source Han Sans HK"), local("Source Han Sans TW"), local("Source Han Sans TWHK"); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Heiti"; - font-weight: 600; - src: local("YuGothic Bold"), local("Hiragino Kaku Gothic ProN W6"), local("Hiragino Kaku Gothic Pro W6"), local(YuGo-Bold), local(HiraKakuProN-W6), local(HiraKakuPro-W6); -} -@font-face { - font-family: "Han Heiti CNS"; - font-weight: 600; - src: local("Pingfang TC Semibold"), local("Pingfang-TC-Semibold"), local("Heiti TC Medium"), local("STHeitiTC-Medium"), local("Heiti TC"), local("Lantinghei TC Demibold"), local(FZLTXHB--B51-0), local("Microsoft Jhenghei Bold"), local(MicrosoftJhengHeiBold), local("Microsoft Jhenghei"), local("Microsoft Yahei Bold"), local(MicrosoftYahei-Bold), local("Noto Sans CJK TC Bold"), local(NotoSansCJKtc-Bold), local("Noto Sans CJK TC"), local("Source Han Sans TC Bold"), local("SourceHanSansTC-Bold"), local("Source Han Sans TC"), local("Source Han Sans TW Bold"), local("SourceHanSans-TW"), local("Source Han Sans TW"), local("Source Han Sans TWHK Bold"), local("SourceHanSans-TWHK"), local("Source Han Sans TWHK"), local("Source Han Sans HK"), local("SourceHanSans-HK"), local("Source Han Sans HK"); -} -@font-face { - font-family: "Han Heiti GB"; - font-weight: 600; - src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Pingfang SC Semibold"), local("Pingfang-SC-Semibold"), local("Lantinghei SC Demibold"), local(FZLTZHK--GBK1-0), local("Heiti SC Medium"), local("STHeitiSC-Medium"), local("Heiti SC"), local("Microsoft Yahei Bold"), local(MicrosoftYahei-Bold), local("Microsoft Yahei"), local("Noto Sans CJK SC Bold"), local(NotoSansCJKsc-Bold), local("Noto Sans CJK SC"), local("Source Han Sans SC Bold"), local("SourceHanSansSC-Bold"), local("Source Han Sans CN Bold"), local("SourceHanSansCN-Bold"), local("Source Han Sans SC"), local("Source Han Sans CN"); -} -@font-face { - font-family: "Han Songti"; - src: local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local("Songti TC Regular"), local(STSongti-TC-Regular), local("Songti TC"), local(STSong), local("Lisong Pro"), local(SimSun), local(PMingLiU); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Songti"; - src: local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); -} -@font-face { - font-family: "Han Songti CNS"; - src: local("Songti TC Regular"), local(STSongti-TC-Regular), local("Songti TC"), local("Lisong Pro"), local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local(STSong), local(PMingLiU), local(SimSun); -} -@font-face { - font-family: "Han Songti GB"; - src: local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local(STSong), local(SimSun), local(PMingLiU); -} -@font-face { - font-family: "Han Songti"; - font-weight: 600; - src: local("STSongti SC Bold"), local("STSongti TC Bold"), local(STSongti-SC-Bold), local(STSongti-TC-Bold), local("STSongti SC"), local("STSongti TC"); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Songti"; - font-weight: 600; - src: local("YuMincho Demibold"), local("Hiragino Mincho ProN W6"), local("Hiragino Mincho Pro W6"), local(YuMin-Demibold), local(HiraMinProN-W6), local(HiraMinPro-W6), local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"); -} -@font-face { - font-family: "Han Songti CNS"; - font-weight: 600; - src: local("STSongti TC Bold"), local("STSongti SC Bold"), local(STSongti-TC-Bold), local(STSongti-SC-Bold), local("STSongti TC"), local("STSongti SC"); -} -@font-face { - font-family: "Han Songti GB"; - font-weight: 600; - src: local("STSongti SC Bold"), local(STSongti-SC-Bold), local("STSongti SC"); -} -@font-face { - font-family: cursive; - src: local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC"), local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Kaiti"; - src: local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC"), local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Kaiti CNS"; - src: local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC"); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Kaiti GB"; - src: local("Kaiti SC Regular"), local(STKaiTi-SC-Regular), local("Kaiti SC"), local(STKaiti), local(Kai), local(Kaiti), local(DFKai-SB); -} -@font-face { - font-family: cursive; - font-weight: 600; - src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti SC Bold"), local(STKaiti-SC-Bold), local("Kaiti TC"), local("Kaiti SC"); -} -@font-face { - font-family: "Han Kaiti"; - font-weight: 600; - src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti SC Bold"), local(STKaiti-SC-Bold), local("Kaiti TC"), local("Kaiti SC"); -} -@font-face { - font-family: "Han Kaiti CNS"; - font-weight: 600; - src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti TC"); -} -@font-face { - font-family: "Han Kaiti GB"; - font-weight: 600; - src: local("Kaiti SC Bold"), local(STKaiti-SC-Bold); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Fangsong"; - src: local(STFangsong), local(FangSong); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Fangsong CNS"; - src: local(STFangsong), local(FangSong); -} -@font-face { - unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3; - font-family: "Han Fangsong GB"; - src: local(STFangsong), local(FangSong); -} -@font-face { - font-family: "Biaodian Sans"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Serif"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun); - unicode-range: U+FF0E; -} -@font-face { - font-family: "Biaodian Sans"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Serif"; - src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun); - unicode-range: U+00B7; -} -@font-face { - font-family: "Biaodian Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Yakumono Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Arial Unicode MS"), local("MS Gothic"); - unicode-range: U+2014; -} -@font-face { - font-family: "Yakumono Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"), local("Microsoft Yahei"); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun); - unicode-range: U+2014; -} -@font-face { - font-family: "Biaodian Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local("MS Mincho"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Yakumono Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic"); - unicode-range: U+2026; -} -@font-face { - font-family: "Yakumono Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU); - unicode-range: U+2026; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); - unicode-range: U+201C-201D, U+2018-2019; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - font-weight: bold; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); - unicode-range: U+201C-201D, U+2018-2019; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); - unicode-range: U+201C-201D, U+2018-2019; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - font-weight: bold; - src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU); - unicode-range: U+201C-201D, U+2018-2019; -} -@font-face { - font-family: "Biaodian Sans"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Serif"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback"); - unicode-range: U+25CF; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("MS Gothic"); - unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); - unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU); - unicode-range: U+3002, U+FF0C, U+3001; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU), local("MS Gothic"); - unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"); - unicode-range: U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local(STSongti-TC-Regular), local("Lisong Pro"), local("Heiti TC"), local(PMingLiU); - unicode-range: U+3002, U+FF0C, U+3001; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho"); - unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local("MS Gothic"); - unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Songti SC"), local(STSongti), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local("MS Mincho"); - unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho"); - unicode-range: U+FF0D, U+FF0F, U+FF3C; -} -@font-face { - font-family: "Biaodian Pro Sans"; - src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Pro Serif"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU); - unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015; -} -@font-face { - font-family: "Biaodian Basic"; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Basic"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Sans"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans CNS"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Sans GB"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif CNS"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Biaodian Pro Serif GB"; - font-weight: bold; - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+2014, U+2026, U+00B7; -} -@font-face { - font-family: "Latin Italic Serif"; - src: local("Georgia Italic"), local("Times New Roman Italic"), local(Georgia-Italic), local(TimesNewRomanPS-ItalicMT), local(Times-Italic); -} -@font-face { - font-family: "Latin Italic Serif"; - font-weight: 700; - src: local("Georgia Bold Italic"), local("Times New Roman Bold Italic"), local(Georgia-BoldItalic), local(TimesNewRomanPS-BoldItalicMT), local(Times-Italic); -} -@font-face { - font-family: "Latin Italic Sans"; - src: local("Helvetica Neue Italic"), local("Helvetica Oblique"), local("Arial Italic"), local(HelveticaNeue-Italic), local(Helvetica-LightOblique), local(Arial-ItalicMT); -} -@font-face { - font-family: "Latin Italic Sans"; - font-weight: 700; - src: local("Helvetica Neue Bold Italic"), local("Helvetica Bold Oblique"), local("Arial Bold Italic"), local(HelveticaNeue-BoldItalic), local(Helvetica-BoldOblique), local(Arial-BoldItalicMT); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral TF Sans"; - src: local(Skia), local("Neutraface 2 Text"), local(Candara), local(Corbel); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral TF Serif"; - src: local(Georgia), local("Hoefler Text"), local("Big Caslon"); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral TF Italic Serif"; - src: local("Georgia Italic"), local("Hoefler Text Italic"), local(Georgia-Italic), local(HoeflerText-Italic); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Sans"; - src: local("Helvetica Neue"), local(Helvetica), local(Arial); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Italic Sans"; - src: local("Helvetica Neue Italic"), local("Helvetica Oblique"), local("Arial Italic"), local(HelveticaNeue-Italic), local(Helvetica-LightOblique), local(Arial-ItalicMT); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Italic Sans"; - font-weight: bold; - src: local("Helvetica Neue Bold Italic"), local("Helvetica Bold Oblique"), local("Arial Bold Italic"), local(HelveticaNeue-BoldItalic), local(Helvetica-BoldOblique), local(Arial-BoldItalicMT); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Serif"; - src: local(Palatino), local("Palatino Linotype"), local("Times New Roman"); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Italic Serif"; - src: local("Palatino Italic"), local("Palatino Italic Linotype"), local("Times New Roman Italic"), local(Palatino-Italic), local(Palatino-Italic-Linotype), local(TimesNewRomanPS-ItalicMT); -} -@font-face { - unicode-range: U+0030-0039; - font-family: "Numeral LF Italic Serif"; - font-weight: bold; - src: local("Palatino Bold Italic"), local("Palatino Bold Italic Linotype"), local("Times New Roman Bold Italic"), local(Palatino-BoldItalic), local(Palatino-BoldItalic-Linotype), local(TimesNewRomanPS-BoldItalicMT); -} -@font-face { - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; - font-family: "Zhuyin Kaiti"; -} -@font-face { - unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; - font-family: "Zhuyin Heiti"; - src: local("Hiragino Sans GB"), local("Heiti TC"), local("Microsoft Jhenghei"), url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); -} -@font-face { - font-family: "Zhuyin Heiti"; - src: local("Heiti TC"), local("Microsoft Jhenghei"), url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - unicode-range: U+3127; -} -@font-face { - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - font-family: "Zhuyin Heiti"; - unicode-range: U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+31B4, U+31B5, U+31B6, U+31B7, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; -} -@font-face { - src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"); - font-family: "Romanization Sans"; - unicode-range: U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075; -} -html:lang(zh-Latn), -html:lang(ja-Latn), -html:not(:lang(zh)):not(:lang(ja)), -html *:lang(zh-Latn), -html *:lang(ja-Latn), -html *:not(:lang(zh)):not(:lang(ja)), -article strong:lang(zh-Latn), -article strong:lang(ja-Latn), -article strong:not(:lang(zh)):not(:lang(ja)), -article strong *:lang(zh-Latn), -article strong *:lang(ja-Latn), -article strong *:not(:lang(zh)):not(:lang(ja)) { - font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} -html:lang(zh), -html:lang(zh-Hant), -[lang^="zh"], -[lang*="Hant"], -[lang="zh-TW"], -[lang="zh-HK"], -article strong:lang(zh), -article strong:lang(zh-Hant) { - font-family: "Biaodian Pro Sans CNS", "Helvetica Neue", Helvetica, Arial, "Zhuyin Heiti", "Han Heiti", sans-serif; -} -html:lang(zh).no-unicoderange, -html:lang(zh-Hant).no-unicoderange, -.no-unicoderange [lang^="zh"], -.no-unicoderange [lang*="Hant"], -.no-unicoderange [lang="zh-TW"], -.no-unicoderange [lang="zh-HK"], -.no-unicoderange article strong:lang(zh), -.no-unicoderange article strong:lang(zh-Hant) { - font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} -html:lang(zh-Hans), -html:lang(zh-CN), -[lang*="Hans"], -[lang="zh-CN"], -article strong:lang(zh-Hans), -article strong:lang(zh-CN) { - font-family: "Biaodian Pro Sans GB", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; -} -html:lang(zh-Hans).no-unicoderange, -html:lang(zh-CN).no-unicoderange, -.no-unicoderange [lang*="Hans"], -.no-unicoderange [lang="zh-CN"], -.no-unicoderange article strong:lang(zh-Hans), -.no-unicoderange article strong:lang(zh-CN) { - font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; -} -html:lang(ja), -[lang^="ja"], -article strong:lang(ja) { - font-family: "Yakumono Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; -} -html:lang(ja).no-unicoderange, -.no-unicoderange [lang^="ja"], -.no-unicoderange article strong:lang(ja) { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -article blockquote i:lang(zh-Latn), -article blockquote var:lang(zh-Latn), -article blockquote i:lang(ja-Latn), -article blockquote var:lang(ja-Latn), -article blockquote i:not(:lang(zh)):not(:lang(ja)), -article blockquote var:not(:lang(zh)):not(:lang(ja)), -article blockquote i *:lang(zh-Latn), -article blockquote var *:lang(zh-Latn), -article blockquote i *:lang(ja-Latn), -article blockquote var *:lang(ja-Latn), -article blockquote i *:not(:lang(zh)):not(:lang(ja)), -article blockquote var *:not(:lang(zh)):not(:lang(ja)) { - font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} -article blockquote i:lang(zh), -article blockquote var:lang(zh), -article blockquote i:lang(zh-Hant), -article blockquote var:lang(zh-Hant) { - font-family: "Biaodian Pro Sans CNS", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Zhuyin Heiti", "Han Heiti", sans-serif; -} -.no-unicoderange article blockquote i:lang(zh), -.no-unicoderange article blockquote var:lang(zh), -.no-unicoderange article blockquote i:lang(zh-Hant), -.no-unicoderange article blockquote var:lang(zh-Hant) { - font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} -.no-unicoderange article blockquote i:lang(zh), -.no-unicoderange article blockquote var:lang(zh), -.no-unicoderange article blockquote i:lang(zh-Hant), -.no-unicoderange article blockquote var:lang(zh-Hant) { - font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} -article blockquote i:lang(zh-Hans), -article blockquote var:lang(zh-Hans), -article blockquote i:lang(zh-CN), -article blockquote var:lang(zh-CN) { - font-family: "Biaodian Pro Sans GB", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; -} -.no-unicoderange article blockquote i:lang(zh-Hans), -.no-unicoderange article blockquote var:lang(zh-Hans), -.no-unicoderange article blockquote i:lang(zh-CN), -.no-unicoderange article blockquote var:lang(zh-CN) { - font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif; -} -article blockquote i:lang(ja), -article blockquote var:lang(ja) { - font-family: "Yakumono Sans", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; -} -.no-unicoderange article blockquote i:lang(ja), -.no-unicoderange article blockquote var:lang(ja) { - font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; -} -article figure blockquote:lang(zh-Latn), -article figure blockquote:lang(ja-Latn), -article figure blockquote:not(:lang(zh)):not(:lang(ja)), -article figure blockquote *:lang(zh-Latn), -article figure blockquote *:lang(ja-Latn), -article figure blockquote *:not(:lang(zh)):not(:lang(ja)) { - font-family: Georgia, "Times New Roman", "Han Songti", cursive, serif; -} -article figure blockquote:lang(zh), -article figure blockquote:lang(zh-Hant) { - font-family: "Biaodian Pro Serif CNS", "Numeral LF Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Songti", serif; -} -.no-unicoderange article figure blockquote:lang(zh), -.no-unicoderange article figure blockquote:lang(zh-Hant) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti", serif; -} -article figure blockquote:lang(zh-Hans), -article figure blockquote:lang(zh-CN) { - font-family: "Biaodian Pro Serif GB", "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti GB", serif; -} -.no-unicoderange article figure blockquote:lang(zh-Hans), -.no-unicoderange article figure blockquote:lang(zh-CN) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti GB", serif; -} -article figure blockquote:lang(ja) { - font-family: "Yakumono Serif", "Numeral LF Serif", Georgia, "Times New Roman", serif; -} -.no-unicoderange article figure blockquote:lang(ja) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", serif; -} -article blockquote:lang(zh-Latn), -article blockquote:lang(ja-Latn), -article blockquote:not(:lang(zh)):not(:lang(ja)), -article blockquote *:lang(zh-Latn), -article blockquote *:lang(ja-Latn), -article blockquote *:not(:lang(zh)):not(:lang(ja)) { - font-family: Georgia, "Times New Roman", "Han Kaiti", cursive, serif; -} -article blockquote:lang(zh), -article blockquote:lang(zh-Hant) { - font-family: "Biaodian Pro Serif CNS", "Numeral LF Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Kaiti", cursive, serif; -} -.no-unicoderange article blockquote:lang(zh), -.no-unicoderange article blockquote:lang(zh-Hant) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif; -} -article blockquote:lang(zh-Hans), -article blockquote:lang(zh-CN) { - font-family: "Biaodian Pro Serif GB", "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif; -} -.no-unicoderange article blockquote:lang(zh-Hans), -.no-unicoderange article blockquote:lang(zh-CN) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif; -} -article blockquote:lang(ja) { - font-family: "Yakumono Serif", "Numeral LF Serif", Georgia, "Times New Roman", cursive, serif; -} -.no-unicoderange article blockquote:lang(ja) { - font-family: "Numeral LF Serif", Georgia, "Times New Roman", cursive, serif; -} -i:lang(zh-Latn), -var:lang(zh-Latn), -i:lang(ja-Latn), -var:lang(ja-Latn), -i:not(:lang(zh)):not(:lang(ja)), -var:not(:lang(zh)):not(:lang(ja)), -i *:lang(zh-Latn), -var *:lang(zh-Latn), -i *:lang(ja-Latn), -var *:lang(ja-Latn), -i *:not(:lang(zh)):not(:lang(ja)), -var *:not(:lang(zh)):not(:lang(ja)) { - font-family: "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif; -} -i:lang(zh), -var:lang(zh), -i:lang(zh-Hant), -var:lang(zh-Hant) { - font-family: "Biaodian Pro Serif CNS", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Kaiti", cursive, serif; -} -.no-unicoderange i:lang(zh), -.no-unicoderange var:lang(zh), -.no-unicoderange i:lang(zh-Hant), -.no-unicoderange var:lang(zh-Hant) { - font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif; -} -i:lang(zh-Hans), -var:lang(zh-Hans), -i:lang(zh-CN), -var:lang(zh-CN) { - font-family: "Biaodian Pro Serif GB", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif; -} -.no-unicoderange i:lang(zh-Hans), -.no-unicoderange var:lang(zh-Hans), -.no-unicoderange i:lang(zh-CN), -.no-unicoderange var:lang(zh-CN) { - font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif; -} -i:lang(ja), -var:lang(ja) { - font-family: "Yakumono Serif", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", cursive, serif; -} -.no-unicoderange i:lang(ja), -.no-unicoderange var:lang(ja) { - font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", cursive, serif; -} -code:lang(zh-Latn), -kbd:lang(zh-Latn), -samp:lang(zh-Latn), -pre:lang(zh-Latn), -code:lang(ja-Latn), -kbd:lang(ja-Latn), -samp:lang(ja-Latn), -pre:lang(ja-Latn), -code:not(:lang(zh)):not(:lang(ja)), -kbd:not(:lang(zh)):not(:lang(ja)), -samp:not(:lang(zh)):not(:lang(ja)), -pre:not(:lang(zh)):not(:lang(ja)), -code *:lang(zh-Latn), -kbd *:lang(zh-Latn), -samp *:lang(zh-Latn), -pre *:lang(zh-Latn), -code *:lang(ja-Latn), -kbd *:lang(ja-Latn), -samp *:lang(ja-Latn), -pre *:lang(ja-Latn), -code *:not(:lang(zh)):not(:lang(ja)), -kbd *:not(:lang(zh)):not(:lang(ja)), -samp *:not(:lang(zh)):not(:lang(ja)), -pre *:not(:lang(zh)):not(:lang(ja)) { - font-family: Menlo, Consolas, Courier, "Han Heiti", monospace, monospace, sans-serif; -} -code:lang(zh), -kbd:lang(zh), -samp:lang(zh), -pre:lang(zh), -code:lang(zh-Hant), -kbd:lang(zh-Hant), -samp:lang(zh-Hant), -pre:lang(zh-Hant) { - font-family: "Biaodian Pro Sans CNS", Menlo, Consolas, Courier, "Zhuyin Heiti", "Han Heiti", monospace, monospace, sans-serif; -} -.no-unicoderange code:lang(zh), -.no-unicoderange kbd:lang(zh), -.no-unicoderange samp:lang(zh), -.no-unicoderange pre:lang(zh), -.no-unicoderange code:lang(zh-Hant), -.no-unicoderange kbd:lang(zh-Hant), -.no-unicoderange samp:lang(zh-Hant), -.no-unicoderange pre:lang(zh-Hant) { - font-family: Menlo, Consolas, Courier, "Han Heiti", monospace, monospace, sans-serif; -} -code:lang(zh-Hans), -kbd:lang(zh-Hans), -samp:lang(zh-Hans), -pre:lang(zh-Hans), -code:lang(zh-CN), -kbd:lang(zh-CN), -samp:lang(zh-CN), -pre:lang(zh-CN) { - font-family: "Biaodian Pro Sans GB", Menlo, Consolas, Courier, "Han Heiti GB", monospace, monospace, sans-serif; -} -.no-unicoderange code:lang(zh-Hans), -.no-unicoderange kbd:lang(zh-Hans), -.no-unicoderange samp:lang(zh-Hans), -.no-unicoderange pre:lang(zh-Hans), -.no-unicoderange code:lang(zh-CN), -.no-unicoderange kbd:lang(zh-CN), -.no-unicoderange samp:lang(zh-CN), -.no-unicoderange pre:lang(zh-CN) { - font-family: Menlo, Consolas, Courier, "Han Heiti GB", monospace, monospace, sans-serif; -} -code:lang(ja), -kbd:lang(ja), -samp:lang(ja), -pre:lang(ja) { - font-family: "Yakumono Sans", Menlo, Consolas, Courier, monospace, monospace, sans-serif; -} -.no-unicoderange code:lang(ja), -.no-unicoderange kbd:lang(ja), -.no-unicoderange samp:lang(ja), -.no-unicoderange pre:lang(ja) { - font-family: Menlo, Consolas, Courier, monospace, monospace, sans-serif; -} -html, -.no-unicoderange h-char.bd-liga, -.no-unicoderange h-char[unicode="b7"], -ruby h-zhuyin, -h-ruby h-zhuyin, -ruby h-zhuyin h-diao, -h-ruby h-zhuyin h-diao, -ruby.romanization rt, -h-ruby.romanization rt, -ruby [annotation] rt, -h-ruby [annotation] rt { - -moz-font-feature-settings: "liga"; - -ms-font-feature-settings: "liga"; - -webkit-font-feature-settings: "liga"; - font-feature-settings: "liga"; -} -html, -[lang^="zh"], -[lang*="Hant"], -[lang="zh-TW"], -[lang="zh-HK"], -[lang*="Hans"], -[lang="zh-CN"], -article strong, -code, -kbd, -samp, -pre, -article blockquote i, -article blockquote var { - -moz-font-feature-settings: "liga=1, locl=0"; - -ms-font-feature-settings: "liga", "locl" 0; - -webkit-font-feature-settings: "liga", "locl" 0; - font-feature-settings: "liga", "locl" 0; -} -.no-unicoderange h-char.bd-cop:lang(zh-Hant), -.no-unicoderange h-char.bd-cop:lang(zh-TW), -.no-unicoderange h-char.bd-cop:lang(zh-HK) { - font-family: -apple-system, "Han Heiti CNS"; -} -.no-unicoderange h-char.bd-liga, -.no-unicoderange h-char[unicode="b7"] { - font-family: "Biaodian Basic", "Han Heiti"; -} -.no-unicoderange h-char[unicode="2018"]:lang(zh-Hans), -.no-unicoderange h-char[unicode="2019"]:lang(zh-Hans), -.no-unicoderange h-char[unicode="201c"]:lang(zh-Hans), -.no-unicoderange h-char[unicode="201d"]:lang(zh-Hans), -.no-unicoderange h-char[unicode="2018"]:lang(zh-CN), -.no-unicoderange h-char[unicode="2019"]:lang(zh-CN), -.no-unicoderange h-char[unicode="201c"]:lang(zh-CN), -.no-unicoderange h-char[unicode="201d"]:lang(zh-CN) { - font-family: "Han Heiti GB"; -} -i, -var { - font-style: inherit; -} -.no-unicoderange ruby h-zhuyin, -.no-unicoderange h-ruby h-zhuyin, -.no-unicoderange ruby h-zhuyin h-diao, -.no-unicoderange h-ruby h-zhuyin h-diao { - font-family: "Zhuyin Kaiti", cursive, serif; -} -ruby h-diao, -h-ruby h-diao { - font-family: "Zhuyin Kaiti", cursive, serif; -} -ruby.romanization rt, -h-ruby.romanization rt, -ruby [annotation] rt, -h-ruby [annotation] rt { - font-family: "Romanization Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif; -} diff --git a/lib/Han/dist/han.js b/lib/Han/dist/han.js deleted file mode 100644 index 75976c6..0000000 --- a/lib/Han/dist/han.js +++ /dev/null @@ -1,3005 +0,0 @@ -/*! - * 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co - * Han.css: the CSS typography framework optimised for Hanzi - */ - -void function( global, factory ) { - - // CommonJS - if ( typeof module === 'object' && typeof module.exports === 'object' ) { - module.exports = factory( global, true ) - // AMD - } else if ( typeof define === 'function' && define.amd ) { - define(function() { return factory( global, true ) }) - // Global namespace - } else { - factory( global ) - } - -}( typeof window !== 'undefined' ? window : this, function( window, noGlobalNS ) { - -'use strict' - -var document = window.document - -var root = document.documentElement - -var body = document.body - -var VERSION = '3.3.0' - -var ROUTINE = [ - // Initialise the condition with feature-detecting - // classes (Modernizr-alike), binding onto the root - // element, possibly ``. - 'initCond', - - // Address element normalisation - 'renderElem', - - // Handle Biaodian - /* 'jinzify', */ - 'renderJiya', - 'renderHanging', - - // Address Biaodian correction - 'correctBiaodian', - - // Address Hanzi and Western script mixed spacing - 'renderHWS', - - // Address presentational correction to combining ligatures - 'substCombLigaWithPUA' - - // Address semantic correction to inaccurate characters - // **Note:** inactivated by default - /* 'substInaccurateChar', */ -] - -// Define Han -var Han = function( context, condition ) { - return new Han.fn.init( context, condition ) -} - -var init = function() { - if ( arguments[ 0 ] ) { - this.context = arguments[ 0 ] - } - if ( arguments[ 1 ] ) { - this.condition = arguments[ 1 ] - } - return this -} - -Han.version = VERSION - -Han.fn = Han.prototype = { - version: VERSION, - - constructor: Han, - - // Body as the default target context - context: body, - - // Root element as the default condition - condition: root, - - // Default rendering routine - routine: ROUTINE, - - init: init, - - setRoutine: function( routine ) { - if ( Array.isArray( routine )) { - this.routine = routine - } - return this - }, - - // Note that the routine set up here will execute - // only once. The method won't alter the routine in - // the instance or in the prototype chain. - render: function( routine ) { - var it = this - var routine = Array.isArray( routine ) - ? routine - : this.routine - - routine - .forEach(function( method ) { - if ( - typeof method === 'string' && - typeof it[ method ] === 'function' - ) { - it[ method ]() - } else if ( - Array.isArray( method ) && - typeof it[ method[0] ] === 'function' - ) { - it[ method.shift() ].apply( it, method ) - } - }) - return this - } -} - -Han.fn.init.prototype = Han.fn - -/** - * Shortcut for `render()` under the default - * situation. - * - * Once initialised, replace `Han.init` with the - * instance for future usage. - */ -Han.init = function() { - return Han.init = Han().render() -} - -var UNICODE = { - /** - * Western punctuation (西文標點符號) - */ - punct: { - base: '[\u2026,.;:!?\u203D_]', - sing: '[\u2010-\u2014\u2026]', - middle: '[\\\/~\\-&\u2010-\u2014_]', - open: '[\'"‘“\\(\\[\u00A1\u00BF\u2E18\u00AB\u2039\u201A\u201C\u201E]', - close: '[\'"”’\\)\\]\u00BB\u203A\u201B\u201D\u201F]', - end: '[\'"”’\\)\\]\u00BB\u203A\u201B\u201D\u201F\u203C\u203D\u2047-\u2049,.;:!?]', - }, - - /** - * CJK biaodian (CJK標點符號) - */ - biaodian: { - base: '[︰.、,。:;?!ー]', - liga: '[—…⋯]', - middle: '[·\/-゠\uFF06\u30FB\uFF3F]', - open: '[「『《〈(〔[{【〖]', - close: '[」』》〉)〕]}】〗]', - end: '[」』》〉)〕]}】〗︰.、,。:;?!ー]' - }, - - /** - * CJK-related blocks (CJK相關字符區段) - * - * 1. 中日韓統一意音文字:[\u4E00-\u9FFF] - Basic CJK unified ideographs - * 2. 擴展-A區:[\u3400-\u4DB5] - Extended-A - * 3. 擴展-B區:[\u20000-\u2A6D6]([\uD840-\uD869][\uDC00-\uDED6]) - Extended-B - * 4. 擴展-C區:[\u2A700-\u2B734](\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF]) - Extended-C - * 5. 擴展-D區:[\u2B740-\u2B81D](急用漢字,\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]) - Extended-D - * 6. 擴展-E區:[\u2B820-\u2F7FF](暫未支援) - Extended-E (not supported yet) - * 7. 擴展-F區(暫未支援) - Extended-F (not supported yet) - * 8. 筆畫區:[\u31C0-\u31E3] - Strokes - * 9. 意音數字「〇」:[\u3007] - Ideographic number zero - * 10. 相容意音文字及補充:[\uF900-\uFAFF][\u2F800-\u2FA1D](不使用) - Compatibility ideograph and supplement (not supported) - - 12 exceptions: - [\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29] - - https://zh.wikipedia.org/wiki/中日韓統一表意文字#cite_note-1 - - * 11. 康熙字典及簡化字部首:[\u2F00-\u2FD5\u2E80-\u2EF3] - Kangxi and supplement radicals - * 12. 意音文字描述字元:[\u2FF0-\u2FFA] - Ideographic description characters - */ - hanzi: { - base: '[\u4E00-\u9FFF\u3400-\u4DB5\u31C0-\u31E3\u3007\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD800-\uDBFF][\uDC00-\uDFFF]', - desc: '[\u2FF0-\u2FFA]', - radical: '[\u2F00-\u2FD5\u2E80-\u2EF3]' - }, - - /** - * Latin script blocks (拉丁字母區段) - * - * 1. 基本拉丁字母:A-Za-z - Basic Latin - * 2. 阿拉伯數字:0-9 - Digits - * 3. 補充-1:[\u00C0-\u00FF] - Latin-1 supplement - * 4. 擴展-A區:[\u0100-\u017F] - Extended-A - * 5. 擴展-B區:[\u0180-\u024F] - Extended-B - * 5. 擴展-C區:[\u2C60-\u2C7F] - Extended-C - * 5. 擴展-D區:[\uA720-\uA7FF] - Extended-D - * 6. 附加區:[\u1E00-\u1EFF] - Extended additional - * 7. 變音組字符:[\u0300-\u0341\u1DC0-\u1DFF] - Combining diacritical marks - */ - latin: { - base: '[A-Za-z0-9\u00C0-\u00FF\u0100-\u017F\u0180-\u024F\u2C60-\u2C7F\uA720-\uA7FF\u1E00-\u1EFF]', - combine: '[\u0300-\u0341\u1DC0-\u1DFF]' - }, - - /** - * Elli̱niká (Greek) script blocks (希臘字母區段) - * - * 1. 希臘字母及擴展:[\u0370–\u03FF\u1F00-\u1FFF] - Basic Greek & Greek Extended - * 2. 阿拉伯數字:0-9 - Digits - * 3. 希臘字母變音組字符:[\u0300-\u0345\u1DC0-\u1DFF] - Combining diacritical marks - */ - ellinika: { - base: '[0-9\u0370-\u03FF\u1F00-\u1FFF]', - combine: '[\u0300-\u0345\u1DC0-\u1DFF]' - }, - - /** - * Kirillica (Cyrillic) script blocks (西里爾字母區段) - * - * 1. 西里爾字母及補充:[\u0400-\u0482\u048A-\u04FF\u0500-\u052F] - Basic Cyrillic and supplement - * 2. 擴展B區:[\uA640-\uA66E\uA67E-\uA697] - Extended-B - * 3. 阿拉伯數字:0-9 - Digits - * 4. 西里爾字母組字符:[\u0483-\u0489\u2DE0-\u2DFF\uA66F-\uA67D\uA69F](位擴展A、B區) - Cyrillic combining diacritical marks (in extended-A, B) - */ - kirillica: { - base: '[0-9\u0400-\u0482\u048A-\u04FF\u0500-\u052F\uA640-\uA66E\uA67E-\uA697]', - combine: '[\u0483-\u0489\u2DE0-\u2DFF\uA66F-\uA67D\uA69F]' - }, - - /** - * Kana (假名) - * - * 1. 日文假名:[\u30A2\u30A4\u30A6\u30A8\u30AA-\u30FA\u3042\u3044\u3046\u3048\u304A-\u3094\u309F\u30FF] - Japanese Kana - * 2. 假名補充[\u1B000\u1B001](\uD82C[\uDC00-\uDC01]) - Kana supplement - * 3. 日文假名小寫:[\u3041\u3043\u3045\u3047\u3049\u30A1\u30A3\u30A5\u30A7\u30A9\u3063\u3083\u3085\u3087\u308E\u3095\u3096\u30C3\u30E3\u30E5\u30E7\u30EE\u30F5\u30F6\u31F0-\u31FF] - Japanese small Kana - * 4. 假名組字符:[\u3099-\u309C] - Kana combining characters - * 5. 半形假名:[\uFF66-\uFF9F] - Halfwidth Kana - * 6. 符號:[\u309D\u309E\u30FB-\u30FE] - Marks - */ - kana: { - base: '[\u30A2\u30A4\u30A6\u30A8\u30AA-\u30FA\u3042\u3044\u3046\u3048\u304A-\u3094\u309F\u30FF]|\uD82C[\uDC00-\uDC01]', - small: '[\u3041\u3043\u3045\u3047\u3049\u30A1\u30A3\u30A5\u30A7\u30A9\u3063\u3083\u3085\u3087\u308E\u3095\u3096\u30C3\u30E3\u30E5\u30E7\u30EE\u30F5\u30F6\u31F0-\u31FF]', - combine: '[\u3099-\u309C]', - half: '[\uFF66-\uFF9F]', - mark: '[\u30A0\u309D\u309E\u30FB-\u30FE]' - }, - - /** - * Eonmun (Hangul, 諺文) - * - * 1. 諺文音節:[\uAC00-\uD7A3] - Eonmun (Hangul) syllables - * 2. 諺文字母:[\u1100-\u11FF\u314F-\u3163\u3131-\u318E\uA960-\uA97C\uD7B0-\uD7FB] - Eonmun (Hangul) letters - * 3. 半形諺文字母:[\uFFA1-\uFFDC] - Halfwidth Eonmun (Hangul) letters - */ - eonmun: { - base: '[\uAC00-\uD7A3]', - letter: '[\u1100-\u11FF\u314F-\u3163\u3131-\u318E\uA960-\uA97C\uD7B0-\uD7FB]', - half: '[\uFFA1-\uFFDC]' - }, - - /** - * Zhuyin (注音符號, Mandarin & Dialect Phonetic Symbols) - * - * 1. 國語注音、方言音符號:[\u3105-\u312D][\u31A0-\u31BA] - Bopomofo phonetic symbols - * 2. 平上去聲調號:[\u02D9\u02CA\u02C5\u02C7\u02EA\u02EB\u02CB] (**註:**國語三聲包含乙個不合規範的符號) - Level, rising, departing tones - * 3. 入聲調號:[\u31B4-\u31B7][\u0358\u030d]? - Checked (entering) tones - */ - zhuyin: { - base: '[\u3105-\u312D\u31A0-\u31BA]', - initial: '[\u3105-\u3119\u312A-\u312C\u31A0-\u31A3]', - medial: '[\u3127-\u3129]', - final: '[\u311A-\u3129\u312D\u31A4-\u31B3\u31B8-\u31BA]', - tone: '[\u02D9\u02CA\u02C5\u02C7\u02CB\u02EA\u02EB]', - checked: '[\u31B4-\u31B7][\u0358\u030d]?' - } -} - -var TYPESET = (function() { - var rWhite = '[\\x20\\t\\r\\n\\f]' - // Whitespace characters - // http://www.w3.org/TR/css3-selectors/#whitespace - - var rPtOpen = UNICODE.punct.open - var rPtClose = UNICODE.punct.close - var rPtEnd = UNICODE.punct.end - var rPtMid = UNICODE.punct.middle - var rPtSing = UNICODE.punct.sing - var rPt = rPtOpen + '|' + rPtEnd + '|' + rPtMid - - var rBDOpen = UNICODE.biaodian.open - var rBDClose = UNICODE.biaodian.close - var rBDEnd = UNICODE.biaodian.end - var rBDMid = UNICODE.biaodian.middle - var rBDLiga = UNICODE.biaodian.liga + '{2}' - var rBD = rBDOpen + '|' + rBDEnd + '|' + rBDMid - - var rKana = UNICODE.kana.base + UNICODE.kana.combine + '?' - var rKanaS = UNICODE.kana.small + UNICODE.kana.combine + '?' - var rKanaH = UNICODE.kana.half - var rEon = UNICODE.eonmun.base + '|' + UNICODE.eonmun.letter - var rEonH = UNICODE.eonmun.half - - var rHan = UNICODE.hanzi.base + '|' + UNICODE.hanzi.desc + '|' + UNICODE.hanzi.radical + '|' + rKana - - var rCbn = UNICODE.ellinika.combine - var rLatn = UNICODE.latin.base + rCbn + '*' - var rGk = UNICODE.ellinika.base + rCbn + '*' - - var rCyCbn = UNICODE.kirillica.combine - var rCy = UNICODE.kirillica.base + rCyCbn + '*' - - var rAlph = rLatn + '|' + rGk + '|' + rCy - - // For words like `it's`, `Jones’s` or `'99` - var rApo = '[\u0027\u2019]' - var rChar = rHan + '|(?:' + rAlph + '|' + rApo + ')+' - - var rZyS = UNICODE.zhuyin.initial - var rZyJ = UNICODE.zhuyin.medial - var rZyY = UNICODE.zhuyin.final - var rZyD = UNICODE.zhuyin.tone + '|' + UNICODE.zhuyin.checked - - return { - /* Character-level selector (字級選擇器) - */ - char: { - punct: { - all: new RegExp( '(' + rPt + ')', 'g' ), - open: new RegExp( '(' + rPtOpen + ')', 'g' ), - end: new RegExp( '(' + rPtEnd + ')', 'g' ), - sing: new RegExp( '(' + rPtSing + ')', 'g' ) - }, - - biaodian: { - all: new RegExp( '(' + rBD + ')', 'g' ), - open: new RegExp( '(' + rBDOpen + ')', 'g' ), - close: new RegExp( '(' + rBDClose + ')', 'g' ), - end: new RegExp( '(' + rBDEnd + ')', 'g' ), - liga: new RegExp( '(' + rBDLiga + ')', 'g' ) - }, - - hanzi: new RegExp( '(' + rHan + ')', 'g' ), - - latin: new RegExp( '(' + rLatn + ')', 'ig' ), - ellinika: new RegExp( '(' + rGk + ')', 'ig' ), - kirillica: new RegExp( '(' + rCy + ')', 'ig' ), - - kana: new RegExp( '(' + rKana + '|' + rKanaS + '|' + rKanaH + ')', 'g' ), - eonmun: new RegExp( '(' + rEon + '|' + rEonH + ')', 'g' ) - }, - - /* Word-level selectors (詞級選擇器) - */ - group: { - biaodian: [ - new RegExp( '((' + rBD + '){2,})', 'g' ), - new RegExp( '(' + rBDLiga + rBDOpen + ')', 'g' ) - ], - punct: null, - hanzi: new RegExp( '(' + rHan + ')+', 'g' ), - western: new RegExp( '(' + rLatn + '|' + rGk + '|' + rCy + '|' + rPt + ')+', 'ig' ), - kana: new RegExp( '(' + rKana + '|' + rKanaS + '|' + rKanaH + ')+', 'g' ), - eonmun: new RegExp( '(' + rEon + '|' + rEonH + '|' + rPt + ')+', 'g' ) - }, - - /* Punctuation Rules (禁則) - */ - jinze: { - hanging: new RegExp( rWhite + '*([、,。.])(?!' + rBDEnd + ')', 'ig' ), - touwei: new RegExp( '(' + rBDOpen + '+)(' + rChar + ')(' + rBDEnd + '+)', 'ig' ), - tou: new RegExp( '(' + rBDOpen + '+)(' + rChar + ')', 'ig' ), - wei: new RegExp( '(' + rChar + ')(' + rBDEnd + '+)', 'ig' ), - middle: new RegExp( '(' + rChar + ')(' + rBDMid + ')(' + rChar + ')', 'ig' ) - }, - - zhuyin: { - form: new RegExp( '^\u02D9?(' + rZyS + ')?(' + rZyJ + ')?(' + rZyY + ')?(' + rZyD + ')?$' ), - diao: new RegExp( '(' + rZyD + ')', 'g' ) - }, - - /* Hanzi and Western mixed spacing (漢字西文混排間隙) - * - Basic mode - * - Strict mode - */ - hws: { - base: [ - new RegExp( '('+ rHan + ')(' + rAlph + '|' + rPtOpen + ')', 'ig' ), - new RegExp( '('+ rAlph + '|' + rPtEnd + ')(' + rHan + ')', 'ig' ) - ], - - strict: [ - new RegExp( '('+ rHan + ')' + rWhite + '?(' + rAlph + '|' + rPtOpen + ')', 'ig' ), - new RegExp( '('+ rAlph + '|' + rPtEnd + ')' + rWhite + '?(' + rHan + ')', 'ig' ) - ] - }, - - // The feature displays the following characters - // in its variant form for font consistency and - // presentational reason. Meanwhile, this won't - // alter the original character in the DOM. - 'display-as': { - 'ja-font-for-hant': [ - // '夠 够', - '查 査', - '啟 啓', - '鄉 鄕', - '值 値', - '污 汚' - ], - - 'comb-liga-pua': [ - [ '\u0061[\u030d\u0358]', '\uDB80\uDC61' ], - [ '\u0065[\u030d\u0358]', '\uDB80\uDC65' ], - [ '\u0069[\u030d\u0358]', '\uDB80\uDC69' ], - [ '\u006F[\u030d\u0358]', '\uDB80\uDC6F' ], - [ '\u0075[\u030d\u0358]', '\uDB80\uDC75' ], - - [ '\u31B4[\u030d\u0358]', '\uDB8C\uDDB4' ], - [ '\u31B5[\u030d\u0358]', '\uDB8C\uDDB5' ], - [ '\u31B6[\u030d\u0358]', '\uDB8C\uDDB6' ], - [ '\u31B7[\u030d\u0358]', '\uDB8C\uDDB7' ] - ], - - 'comb-liga-vowel': [ - [ '\u0061[\u030d\u0358]', '\uDB80\uDC61' ], - [ '\u0065[\u030d\u0358]', '\uDB80\uDC65' ], - [ '\u0069[\u030d\u0358]', '\uDB80\uDC69' ], - [ '\u006F[\u030d\u0358]', '\uDB80\uDC6F' ], - [ '\u0075[\u030d\u0358]', '\uDB80\uDC75' ] - ], - - 'comb-liga-zhuyin': [ - [ '\u31B4[\u030d\u0358]', '\uDB8C\uDDB4' ], - [ '\u31B5[\u030d\u0358]', '\uDB8C\uDDB5' ], - [ '\u31B6[\u030d\u0358]', '\uDB8C\uDDB6' ], - [ '\u31B7[\u030d\u0358]', '\uDB8C\uDDB7' ] - ] - }, - - // The feature actually *converts* the character - // in the DOM for semantic reason. - // - // Note that this could be aggressive. - 'inaccurate-char': [ - [ '[\u2022\u2027]', '\u00B7' ], - [ '\u22EF\u22EF', '\u2026\u2026' ], - [ '\u2500\u2500', '\u2014\u2014' ], - [ '\u2035', '\u2018' ], - [ '\u2032', '\u2019' ], - [ '\u2036', '\u201C' ], - [ '\u2033', '\u201D' ] - ] - } -})() - -Han.UNICODE = UNICODE -Han.TYPESET = TYPESET - -// Aliases -Han.UNICODE.cjk = Han.UNICODE.hanzi -Han.UNICODE.greek = Han.UNICODE.ellinika -Han.UNICODE.cyrillic = Han.UNICODE.kirillica -Han.UNICODE.hangul = Han.UNICODE.eonmun -Han.UNICODE.zhuyin.ruyun = Han.UNICODE.zhuyin.checked - -Han.TYPESET.char.cjk = Han.TYPESET.char.hanzi -Han.TYPESET.char.greek = Han.TYPESET.char.ellinika -Han.TYPESET.char.cyrillic = Han.TYPESET.char.kirillica -Han.TYPESET.char.hangul = Han.TYPESET.char.eonmun - -Han.TYPESET.group.hangul = Han.TYPESET.group.eonmun -Han.TYPESET.group.cjk = Han.TYPESET.group.hanzi - -var $ = { - /** - * Query selectors which return arrays of the resulted - * node lists. - */ - id: function( selector, $context ) { - return ( $context || document ).getElementById( selector ) - }, - - tag: function( selector, $context ) { - return this.makeArray( - ( $context || document ).getElementsByTagName( selector ) - ) - }, - - qs: function( selector, $context ) { - return ( $context || document ).querySelector( selector ) - }, - - qsa: function( selector, $context ) { - return this.makeArray( - ( $context || document ).querySelectorAll( selector ) - ) - }, - - parent: function( $node, selector ) { - return selector - ? (function() { - if ( typeof $.matches !== 'function' ) return - - while (!$.matches( $node, selector )) { - if ( - !$node || - $node === document.documentElement - ) { - $node = undefined - break - } - $node = $node.parentNode - } - return $node - })() - : $node - ? $node.parentNode : undefined - }, - - /** - * Create a document fragment, a text node with text - * or an element with/without classes. - */ - create: function( name, clazz ) { - var $elmt = '!' === name - ? document.createDocumentFragment() - : '' === name - ? document.createTextNode( clazz || '' ) - : document.createElement( name ) - - try { - if ( clazz ) { - $elmt.className = clazz - } - } catch (e) {} - - return $elmt - }, - - /** - * Clone a DOM node (text, element or fragment) deeply - * or childlessly. - */ - clone: function( $node, deep ) { - return $node.cloneNode( - typeof deep === 'boolean' - ? deep - : true - ) - }, - - /** - * Remove a node (text, element or fragment). - */ - remove: function( $node ) { - return $node.parentNode.removeChild( $node ) - }, - - /** - * Set attributes all in once with an object. - */ - setAttr: function( target, attr ) { - if ( typeof attr !== 'object' ) return - var len = attr.length - - // Native `NamedNodeMap``: - if ( - typeof attr[0] === 'object' && - 'name' in attr[0] - ) { - for ( var i = 0; i < len; i++ ) { - if ( attr[ i ].value !== undefined ) { - target.setAttribute( attr[ i ].name, attr[ i ].value ) - } - } - - // Plain object: - } else { - for ( var name in attr ) { - if ( - attr.hasOwnProperty( name ) && - attr[ name ] !== undefined - ) { - target.setAttribute( name, attr[ name ] ) - } - } - } - return target - }, - - /** - * Indicate whether or not the given node is an - * element. - */ - isElmt: function( $node ) { - return $node && $node.nodeType === Node.ELEMENT_NODE - }, - - /** - * Indicate whether or not the given node should - * be ignored (`` or comments). - */ - isIgnorable: function( $node ) { - if ( !$node ) return false - - return ( - $node.nodeName === 'WBR' || - $node.nodeType === Node.COMMENT_NODE - ) - }, - - /** - * Convert array-like objects into real arrays. - */ - makeArray: function( object ) { - return Array.prototype.slice.call( object ) - }, - - /** - * Extend target with an object. - */ - extend: function( target, object ) { - if (( - typeof target === 'object' || - typeof target === 'function' ) && - typeof object === 'object' - ) { - for ( var name in object ) { - if (object.hasOwnProperty( name )) { - target[ name ] = object[ name ] - } - } - } - return target - } -} - -var Fibre = -/*! - * Fibre.js v0.2.1 | MIT License | github.com/ethantw/fibre.js - * Based on findAndReplaceDOMText - */ - -function( Finder ) { - -'use strict' - -var VERSION = '0.2.1' -var NON_INLINE_PROSE = Finder.NON_INLINE_PROSE -var AVOID_NON_PROSE = Finder.PRESETS.prose.filterElements - -var global = window || {} -var document = global.document || undefined - -function matches( node, selector, bypassNodeType39 ) { - var Efn = Element.prototype - var matches = Efn.matches || Efn.mozMatchesSelector || Efn.msMatchesSelector || Efn.webkitMatchesSelector - - if ( node instanceof Element ) { - return matches.call( node, selector ) - } else if ( bypassNodeType39 ) { - if ( /^[39]$/.test( node.nodeType )) return true - } - return false -} - -if ( typeof document === 'undefined' ) throw new Error( 'Fibre requires a DOM-supported environment.' ) - -var Fibre = function( context, preset ) { - return new Fibre.fn.init( context, preset ) -} - -Fibre.version = VERSION -Fibre.matches = matches - -Fibre.fn = Fibre.prototype = { - constructor: Fibre, - - version: VERSION, - - finder: [], - - context: undefined, - - portionMode: 'retain', - - selector: {}, - - preset: 'prose', - - init: function( context, noPreset ) { - if ( !!noPreset ) this.preset = null - - this.selector = { - context: null, - filter: [], - avoid: [], - boundary: [] - } - - if ( !context ) { - throw new Error( 'A context is required for Fibre to initialise.' ) - } else if ( context instanceof Node ) { - if ( context instanceof Document ) this.context = context.body || context - else this.context = context - } else if ( typeof context === 'string' ) { - this.context = document.querySelector( context ) - this.selector.context = context - } - return this - }, - - filterFn: function( node ) { - var filter = this.selector.filter.join( ', ' ) || '*' - var avoid = this.selector.avoid.join( ', ' ) || null - var result = matches( node, filter, true ) && !matches( node, avoid ) - return ( this.preset === 'prose' ) ? AVOID_NON_PROSE( node ) && result : result - }, - - boundaryFn: function( node ) { - var boundary = this.selector.boundary.join( ', ' ) || null - var result = matches( node, boundary ) - return ( this.preset === 'prose' ) ? NON_INLINE_PROSE( node ) || result : result - }, - - filter: function( selector ) { - if ( typeof selector === 'string' ) { - this.selector.filter.push( selector ) - } - return this - }, - - endFilter: function( all ) { - if ( all ) { - this.selector.filter = [] - } else { - this.selector.filter.pop() - } - return this - }, - - avoid: function( selector ) { - if ( typeof selector === 'string' ) { - this.selector.avoid.push( selector ) - } - return this - }, - - endAvoid: function( all ) { - if ( all ) { - this.selector.avoid = [] - } else { - this.selector.avoid.pop() - } - return this - }, - - addBoundary: function( selector ) { - if ( typeof selector === 'string' ) { - this.selector.boundary.push( selector ) - } - return this - }, - - removeBoundary: function() { - this.selector.boundary = [] - return this - }, - - setMode: function( portionMode ) { - this.portionMode = portionMode === 'first' ? 'first' : 'retain' - return this - }, - - replace: function( regexp, newSubStr ) { - var it = this - it.finder.push(Finder( it.context, { - find: regexp, - replace: newSubStr, - filterElements: function( currentNode ) { - return it.filterFn( currentNode ) - }, - forceContext: function( currentNode ) { - return it.boundaryFn( currentNode ) - }, - portionMode: it.portionMode - })) - return it - }, - - wrap: function( regexp, strElemName ) { - var it = this - it.finder.push(Finder( it.context, { - find: regexp, - wrap: strElemName, - filterElements: function( currentNode ) { - return it.filterFn( currentNode ) - }, - forceContext: function( currentNode ) { - return it.boundaryFn( currentNode ) - }, - portionMode: it.portionMode - })) - return it - }, - - revert: function( level ) { - var max = this.finder.length - var level = Number( level ) || ( level === 0 ? Number(0) : - ( level === 'all' ? max : 1 )) - - if ( typeof max === 'undefined' || max === 0 ) return this - else if ( level > max ) level = max - - for ( var i = level; i > 0; i-- ) { - this.finder.pop().revert() - } - return this - } -} - -// Deprecated API(s) -Fibre.fn.filterOut = Fibre.fn.avoid - -// Make sure init() inherit from Fibre() -Fibre.fn.init.prototype = Fibre.fn - -return Fibre - -}( - -/** - * findAndReplaceDOMText v 0.4.3 - * @author James Padolsey http://james.padolsey.com - * @license http://unlicense.org/UNLICENSE - * - * Matches the text of a DOM node against a regular expression - * and replaces each match (or node-separated portions of the match) - * in the specified element. - */ - (function() { - - var PORTION_MODE_RETAIN = 'retain' - var PORTION_MODE_FIRST = 'first' - var doc = document - var toString = {}.toString - var hasOwn = {}.hasOwnProperty - function isArray(a) { - return toString.call(a) == '[object Array]' - } - - function escapeRegExp(s) { - return String(s).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1') - } - - function exposed() { - // Try deprecated arg signature first: - return deprecated.apply(null, arguments) || findAndReplaceDOMText.apply(null, arguments) - } - - function deprecated(regex, node, replacement, captureGroup, elFilter) { - if ((node && !node.nodeType) && arguments.length <= 2) { - return false - } - var isReplacementFunction = typeof replacement == 'function' - if (isReplacementFunction) { - replacement = (function(original) { - return function(portion, match) { - return original(portion.text, match.startIndex) - } - }(replacement)) - } - - // Awkward support for deprecated argument signature (<0.4.0) - var instance = findAndReplaceDOMText(node, { - - find: regex, - - wrap: isReplacementFunction ? null : replacement, - replace: isReplacementFunction ? replacement : '$' + (captureGroup || '&'), - - prepMatch: function(m, mi) { - - // Support captureGroup (a deprecated feature) - - if (!m[0]) throw 'findAndReplaceDOMText cannot handle zero-length matches' - if (captureGroup > 0) { - var cg = m[captureGroup] - m.index += m[0].indexOf(cg) - m[0] = cg - } - - m.endIndex = m.index + m[0].length - m.startIndex = m.index - m.index = mi - return m - }, - filterElements: elFilter - }) - exposed.revert = function() { - return instance.revert() - } - return true - } - - /** - * findAndReplaceDOMText - * - * Locates matches and replaces with replacementNode - * - * @param {Node} node Element or Text node to search within - * @param {RegExp} options.find The regular expression to match - * @param {String|Element} [options.wrap] A NodeName, or a Node to clone - * @param {String|Function} [options.replace='$&'] What to replace each match with - * @param {Function} [options.filterElements] A Function to be called to check whether to - * process an element. (returning true = process element, - * returning false = avoid element) - */ - function findAndReplaceDOMText(node, options) { - return new Finder(node, options) - } - - exposed.NON_PROSE_ELEMENTS = { - br:1, hr:1, - // Media / Source elements: - script:1, style:1, img:1, video:1, audio:1, canvas:1, svg:1, map:1, object:1, - // Input elements - input:1, textarea:1, select:1, option:1, optgroup: 1, button:1 - } - exposed.NON_CONTIGUOUS_PROSE_ELEMENTS = { - - // Elements that will not contain prose or block elements where we don't - // want prose to be matches across element borders: - - // Block Elements - address:1, article:1, aside:1, blockquote:1, dd:1, div:1, - dl:1, fieldset:1, figcaption:1, figure:1, footer:1, form:1, h1:1, h2:1, h3:1, - h4:1, h5:1, h6:1, header:1, hgroup:1, hr:1, main:1, nav:1, noscript:1, ol:1, - output:1, p:1, pre:1, section:1, ul:1, - // Other misc. elements that are not part of continuous inline prose: - br:1, li: 1, summary: 1, dt:1, details:1, rp:1, rt:1, rtc:1, - // Media / Source elements: - script:1, style:1, img:1, video:1, audio:1, canvas:1, svg:1, map:1, object:1, - // Input elements - input:1, textarea:1, select:1, option:1, optgroup: 1, button:1, - // Table related elements: - table:1, tbody:1, thead:1, th:1, tr:1, td:1, caption:1, col:1, tfoot:1, colgroup:1 - - } - exposed.NON_INLINE_PROSE = function(el) { - return hasOwn.call(exposed.NON_CONTIGUOUS_PROSE_ELEMENTS, el.nodeName.toLowerCase()) - } - // Presets accessed via `options.preset` when calling findAndReplaceDOMText(): - exposed.PRESETS = { - prose: { - forceContext: exposed.NON_INLINE_PROSE, - filterElements: function(el) { - return !hasOwn.call(exposed.NON_PROSE_ELEMENTS, el.nodeName.toLowerCase()) - } - } - } - exposed.Finder = Finder - /** - * Finder -- encapsulates logic to find and replace. - */ - function Finder(node, options) { - - var preset = options.preset && exposed.PRESETS[options.preset] - options.portionMode = options.portionMode || PORTION_MODE_RETAIN - if (preset) { - for (var i in preset) { - if (hasOwn.call(preset, i) && !hasOwn.call(options, i)) { - options[i] = preset[i] - } - } - } - - this.node = node - this.options = options - // ENable match-preparation method to be passed as option: - this.prepMatch = options.prepMatch || this.prepMatch - this.reverts = [] - this.matches = this.search() - if (this.matches.length) { - this.processMatches() - } - - } - - Finder.prototype = { - - /** - * Searches for all matches that comply with the instance's 'match' option - */ - search: function() { - - var match - var matchIndex = 0 - var offset = 0 - var regex = this.options.find - var textAggregation = this.getAggregateText() - var matches = [] - var self = this - regex = typeof regex === 'string' ? RegExp(escapeRegExp(regex), 'g') : regex - matchAggregation(textAggregation) - function matchAggregation(textAggregation) { - for (var i = 0, l = textAggregation.length; i < l; ++i) { - - var text = textAggregation[i] - if (typeof text !== 'string') { - // Deal with nested contexts: (recursive) - matchAggregation(text) - continue - } - - if (regex.global) { - while (match = regex.exec(text)) { - matches.push(self.prepMatch(match, matchIndex++, offset)) - } - } else { - if (match = text.match(regex)) { - matches.push(self.prepMatch(match, 0, offset)) - } - } - - offset += text.length - } - } - - return matches - }, - - /** - * Prepares a single match with useful meta info: - */ - prepMatch: function(match, matchIndex, characterOffset) { - - if (!match[0]) { - throw new Error('findAndReplaceDOMText cannot handle zero-length matches') - } - - match.endIndex = characterOffset + match.index + match[0].length - match.startIndex = characterOffset + match.index - match.index = matchIndex - return match - }, - - /** - * Gets aggregate text within subject node - */ - getAggregateText: function() { - - var elementFilter = this.options.filterElements - var forceContext = this.options.forceContext - return getText(this.node) - /** - * Gets aggregate text of a node without resorting - * to broken innerText/textContent - */ - function getText(node, txt) { - - if (node.nodeType === 3) { - return [node.data] - } - - if (elementFilter && !elementFilter(node)) { - return [] - } - - var txt = [''] - var i = 0 - if (node = node.firstChild) do { - - if (node.nodeType === 3) { - txt[i] += node.data - continue - } - - var innerText = getText(node) - if ( - forceContext && - node.nodeType === 1 && - (forceContext === true || forceContext(node)) - ) { - txt[++i] = innerText - txt[++i] = '' - } else { - if (typeof innerText[0] === 'string') { - // Bridge nested text-node data so that they're - // not considered their own contexts: - // I.e. ['some', ['thing']] -> ['something'] - txt[i] += innerText.shift() - } - if (innerText.length) { - txt[++i] = innerText - txt[++i] = '' - } - } - } while (node = node.nextSibling) - return txt - } - - }, - - /** - * Steps through the target node, looking for matches, and - * calling replaceFn when a match is found. - */ - processMatches: function() { - - var matches = this.matches - var node = this.node - var elementFilter = this.options.filterElements - var startPortion, - endPortion, - innerPortions = [], - curNode = node, - match = matches.shift(), - atIndex = 0, // i.e. nodeAtIndex - matchIndex = 0, - portionIndex = 0, - doAvoidNode, - nodeStack = [node] - out: while (true) { - - if (curNode.nodeType === 3) { - - if (!endPortion && curNode.length + atIndex >= match.endIndex) { - - // We've found the ending - endPortion = { - node: curNode, - index: portionIndex++, - text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex), - indexInMatch: atIndex - match.startIndex, - indexInNode: match.startIndex - atIndex, // always zero for end-portions - endIndexInNode: match.endIndex - atIndex, - isEnd: true - } - } else if (startPortion) { - // Intersecting node - innerPortions.push({ - node: curNode, - index: portionIndex++, - text: curNode.data, - indexInMatch: atIndex - match.startIndex, - indexInNode: 0 // always zero for inner-portions - }) - } - - if (!startPortion && curNode.length + atIndex > match.startIndex) { - // We've found the match start - startPortion = { - node: curNode, - index: portionIndex++, - indexInMatch: 0, - indexInNode: match.startIndex - atIndex, - endIndexInNode: match.endIndex - atIndex, - text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex) - } - } - - atIndex += curNode.data.length - } - - doAvoidNode = curNode.nodeType === 1 && elementFilter && !elementFilter(curNode) - if (startPortion && endPortion) { - - curNode = this.replaceMatch(match, startPortion, innerPortions, endPortion) - // processMatches has to return the node that replaced the endNode - // and then we step back so we can continue from the end of the - // match: - - atIndex -= (endPortion.node.data.length - endPortion.endIndexInNode) - startPortion = null - endPortion = null - innerPortions = [] - match = matches.shift() - portionIndex = 0 - matchIndex++ - if (!match) { - break; // no more matches - } - - } else if ( - !doAvoidNode && - (curNode.firstChild || curNode.nextSibling) - ) { - // Move down or forward: - if (curNode.firstChild) { - nodeStack.push(curNode) - curNode = curNode.firstChild - } else { - curNode = curNode.nextSibling - } - continue - } - - // Move forward or up: - while (true) { - if (curNode.nextSibling) { - curNode = curNode.nextSibling - break - } - curNode = nodeStack.pop() - if (curNode === node) { - break out - } - } - - } - - }, - - /** - * Reverts ... TODO - */ - revert: function() { - // Reversion occurs backwards so as to avoid nodes subsequently - // replaced during the matching phase (a forward process): - for (var l = this.reverts.length; l--;) { - this.reverts[l]() - } - this.reverts = [] - }, - - prepareReplacementString: function(string, portion, match, matchIndex) { - var portionMode = this.options.portionMode - if ( - portionMode === PORTION_MODE_FIRST && - portion.indexInMatch > 0 - ) { - return '' - } - string = string.replace(/\$(\d+|&|`|')/g, function($0, t) { - var replacement - switch(t) { - case '&': - replacement = match[0] - break - case '`': - replacement = match.input.substring(0, match.startIndex) - break - case '\'': - replacement = match.input.substring(match.endIndex) - break - default: - replacement = match[+t] - } - return replacement - }) - if (portionMode === PORTION_MODE_FIRST) { - return string - } - - if (portion.isEnd) { - return string.substring(portion.indexInMatch) - } - - return string.substring(portion.indexInMatch, portion.indexInMatch + portion.text.length) - }, - - getPortionReplacementNode: function(portion, match, matchIndex) { - - var replacement = this.options.replace || '$&' - var wrapper = this.options.wrap - if (wrapper && wrapper.nodeType) { - // Wrapper has been provided as a stencil-node for us to clone: - var clone = doc.createElement('div') - clone.innerHTML = wrapper.outerHTML || new XMLSerializer().serializeToString(wrapper) - wrapper = clone.firstChild - } - - if (typeof replacement == 'function') { - replacement = replacement(portion, match, matchIndex) - if (replacement && replacement.nodeType) { - return replacement - } - return doc.createTextNode(String(replacement)) - } - - var el = typeof wrapper == 'string' ? doc.createElement(wrapper) : wrapper - replacement = doc.createTextNode( - this.prepareReplacementString( - replacement, portion, match, matchIndex - ) - ) - if (!replacement.data) { - return replacement - } - - if (!el) { - return replacement - } - - el.appendChild(replacement) - return el - }, - - replaceMatch: function(match, startPortion, innerPortions, endPortion) { - - var matchStartNode = startPortion.node - var matchEndNode = endPortion.node - var preceedingTextNode - var followingTextNode - if (matchStartNode === matchEndNode) { - - var node = matchStartNode - if (startPortion.indexInNode > 0) { - // Add `before` text node (before the match) - preceedingTextNode = doc.createTextNode(node.data.substring(0, startPortion.indexInNode)) - node.parentNode.insertBefore(preceedingTextNode, node) - } - - // Create the replacement node: - var newNode = this.getPortionReplacementNode( - endPortion, - match - ) - node.parentNode.insertBefore(newNode, node) - if (endPortion.endIndexInNode < node.length) { // ????? - // Add `after` text node (after the match) - followingTextNode = doc.createTextNode(node.data.substring(endPortion.endIndexInNode)) - node.parentNode.insertBefore(followingTextNode, node) - } - - node.parentNode.removeChild(node) - this.reverts.push(function() { - if (preceedingTextNode === newNode.previousSibling) { - preceedingTextNode.parentNode.removeChild(preceedingTextNode) - } - if (followingTextNode === newNode.nextSibling) { - followingTextNode.parentNode.removeChild(followingTextNode) - } - newNode.parentNode.replaceChild(node, newNode) - }) - return newNode - } else { - // Replace matchStartNode -> [innerMatchNodes...] -> matchEndNode (in that order) - - preceedingTextNode = doc.createTextNode( - matchStartNode.data.substring(0, startPortion.indexInNode) - ) - followingTextNode = doc.createTextNode( - matchEndNode.data.substring(endPortion.endIndexInNode) - ) - var firstNode = this.getPortionReplacementNode( - startPortion, - match - ) - var innerNodes = [] - for (var i = 0, l = innerPortions.length; i < l; ++i) { - var portion = innerPortions[i] - var innerNode = this.getPortionReplacementNode( - portion, - match - ) - portion.node.parentNode.replaceChild(innerNode, portion.node) - this.reverts.push((function(portion, innerNode) { - return function() { - innerNode.parentNode.replaceChild(portion.node, innerNode) - } - }(portion, innerNode))) - innerNodes.push(innerNode) - } - - var lastNode = this.getPortionReplacementNode( - endPortion, - match - ) - matchStartNode.parentNode.insertBefore(preceedingTextNode, matchStartNode) - matchStartNode.parentNode.insertBefore(firstNode, matchStartNode) - matchStartNode.parentNode.removeChild(matchStartNode) - matchEndNode.parentNode.insertBefore(lastNode, matchEndNode) - matchEndNode.parentNode.insertBefore(followingTextNode, matchEndNode) - matchEndNode.parentNode.removeChild(matchEndNode) - this.reverts.push(function() { - preceedingTextNode.parentNode.removeChild(preceedingTextNode) - firstNode.parentNode.replaceChild(matchStartNode, firstNode) - followingTextNode.parentNode.removeChild(followingTextNode) - lastNode.parentNode.replaceChild(matchEndNode, lastNode) - }) - return lastNode - } - } - - } - return exposed -}()) - -); - -var isNodeNormalizeNormal = (function() { - //// Disabled `Node.normalize()` for temp due to - //// issue below in IE11. - //// See: http://stackoverflow.com/questions/22337498/why-does-ie11-handle-node-normalize-incorrectly-for-the-minus-symbol - var div = $.create( 'div' ) - - div.appendChild($.create( '', '0-' )) - div.appendChild($.create( '', '2' )) - div.normalize() - - return div.firstChild.length !== 2 -})() - -function getFuncOrElmt( obj ) { - return ( - typeof obj === 'function' || - obj instanceof Element - ) - ? obj - : undefined -} - -function createBDGroup( portion ) { - var clazz = portion.index === 0 && portion.isEnd - ? 'biaodian cjk' - : 'biaodian cjk portion ' + ( - portion.index === 0 - ? 'is-first' - : portion.isEnd - ? 'is-end' - : 'is-inner' - ) - - var $elmt = $.create( 'h-char-group', clazz ) - $elmt.innerHTML = portion.text - return $elmt -} - -function createBDChar( char ) { - var div = $.create( 'div' ) - var unicode = char.charCodeAt( 0 ).toString( 16 ) - - div.innerHTML = ( - '' + char + '' - ) - return div.firstChild -} - -function getBDType( char ) { - return char.match( TYPESET.char.biaodian.open ) - ? 'bd-open' - : char.match( TYPESET.char.biaodian.close ) - ? 'bd-close bd-end' - : char.match( TYPESET.char.biaodian.end ) - ? ( - /(?:\u3001|\u3002|\uff0c)/i.test( char ) - ? 'bd-end bd-cop' - : 'bd-end' - ) - : char.match(new RegExp( UNICODE.biaodian.liga )) - ? 'bd-liga' - : char.match(new RegExp( UNICODE.biaodian.middle )) - ? 'bd-middle' - : '' -} - -$.extend( Fibre.fn, { - normalize: function() { - if ( isNodeNormalizeNormal ) { - this.context.normalize() - } - return this - }, - - // Force punctuation & biaodian typesetting rules to be applied. - jinzify: function( selector ) { - return ( - this - .filter( selector || null ) - .avoid( 'h-jinze' ) - .replace( - TYPESET.jinze.touwei, - function( portion, match ) { - var elem = $.create( 'h-jinze', 'touwei' ) - elem.innerHTML = match[0] - return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 ) ? elem : '' - } - ) - .replace( - TYPESET.jinze.wei, - function( portion, match ) { - var elem = $.create( 'h-jinze', 'wei' ) - elem.innerHTML = match[0] - return portion.index === 0 ? elem : '' - } - ) - .replace( - TYPESET.jinze.tou, - function( portion, match ) { - var elem = $.create( 'h-jinze', 'tou' ) - elem.innerHTML = match[0] - return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 ) - ? elem : '' - } - ) - .replace( - TYPESET.jinze.middle, - function( portion, match ) { - var elem = $.create( 'h-jinze', 'middle' ) - elem.innerHTML = match[0] - return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 ) - ? elem : '' - } - ) - .endAvoid() - .endFilter() - ) - }, - - groupify: function( option ) { - var option = $.extend({ - biaodian: false, - //punct: false, - hanzi: false, // Includes Kana - kana: false, - eonmun: false, - western: false // Includes Latin, Greek and Cyrillic - }, option || {}) - - this.avoid( 'h-word, h-char-group' ) - - if ( option.biaodian ) { - this.replace( - TYPESET.group.biaodian[0], createBDGroup - ).replace( - TYPESET.group.biaodian[1], createBDGroup - ) - } - - if ( option.hanzi || option.cjk ) { - this.wrap( - TYPESET.group.hanzi, $.clone($.create( 'h-char-group', 'hanzi cjk' )) - ) - } - if ( option.western ) { - this.wrap( - TYPESET.group.western, $.clone($.create( 'h-word', 'western' )) - ) - } - if ( option.kana ) { - this.wrap( - TYPESET.group.kana, $.clone($.create( 'h-char-group', 'kana' )) - ) - } - if ( option.eonmun || option.hangul ) { - this.wrap( - TYPESET.group.eonmun, $.clone($.create( 'h-word', 'eonmun hangul' )) - ) - } - - this.endAvoid() - return this - }, - - charify: function( option ) { - var option = $.extend({ - avoid: true, - biaodian: false, - punct: false, - hanzi: false, // Includes Kana - latin: false, - ellinika: false, - kirillica: false, - kana: false, - eonmun: false - }, option || {}) - - if ( option.avoid ) { - this.avoid( 'h-char' ) - } - - if ( option.biaodian ) { - this.replace( - TYPESET.char.biaodian.all, - getFuncOrElmt( option.biaodian ) - || - function( portion ) { return createBDChar( portion.text ) } - ).replace( - TYPESET.char.biaodian.liga, - getFuncOrElmt( option.biaodian ) - || - function( portion ) { return createBDChar( portion.text ) } - ) - } - if ( option.hanzi || option.cjk ) { - this.wrap( - TYPESET.char.hanzi, - getFuncOrElmt( option.hanzi || option.cjk ) - || - $.clone($.create( 'h-char', 'hanzi cjk' )) - ) - } - if ( option.punct ) { - this.wrap( - TYPESET.char.punct.all, - getFuncOrElmt( option.punct ) - || - $.clone($.create( 'h-char', 'punct' )) - ) - } - if ( option.latin ) { - this.wrap( - TYPESET.char.latin, - getFuncOrElmt( option.latin ) - || - $.clone($.create( 'h-char', 'alphabet latin' )) - ) - } - if ( option.ellinika || option.greek ) { - this.wrap( - TYPESET.char.ellinika, - getFuncOrElmt( option.ellinika || option.greek ) - || - $.clone($.create( 'h-char', 'alphabet ellinika greek' )) - ) - } - if ( option.kirillica || option.cyrillic ) { - this.wrap( - TYPESET.char.kirillica, - getFuncOrElmt( option.kirillica || option.cyrillic ) - || - $.clone($.create( 'h-char', 'alphabet kirillica cyrillic' )) - ) - } - if ( option.kana ) { - this.wrap( - TYPESET.char.kana, - getFuncOrElmt( option.kana ) - || - $.clone($.create( 'h-char', 'kana' )) - ) - } - if ( option.eonmun || option.hangul ) { - this.wrap( - TYPESET.char.eonmun, - getFuncOrElmt( option.eonmun || option.hangul ) - || - $.clone($.create( 'h-char', 'eonmun hangul' )) - ) - } - - this.endAvoid() - return this - } -}) - -$.extend( Han, { - isNodeNormalizeNormal: isNodeNormalizeNormal, - find: Fibre, - createBDGroup: createBDGroup, - createBDChar: createBDChar -}) - -$.matches = Han.find.matches - -void [ - 'setMode', - 'wrap', 'replace', 'revert', - 'addBoundary', 'removeBoundary', - 'avoid', 'endAvoid', - 'filter', 'endFilter', - 'jinzify', 'groupify', 'charify' -].forEach(function( method ) { - Han.fn[ method ] = function() { - if ( !this.finder ) { - // Share the same selector - this.finder = Han.find( this.context ) - } - - this.finder[ method ]( arguments[ 0 ], arguments[ 1 ] ) - return this - } -}) - -var Locale = {} - -function writeOnCanvas( text, font ) { - var canvas = $.create( 'canvas' ) - var context - - canvas.width = '50' - canvas.height = '20' - canvas.style.display = 'none' - - body.appendChild( canvas ) - - context = canvas.getContext( '2d' ) - context.textBaseline = 'top' - context.font = '15px ' + font + ', sans-serif' - context.fillStyle = 'black' - context.strokeStyle = 'black' - context.fillText( text, 0, 0 ) - - return { - node: canvas, - context: context, - remove: function() { - $.remove( canvas, body ) - } - } -} - -function compareCanvases( treat, control ) { - var ret - var a = treat.context - var b = control.context - - try { - for ( var j = 1; j <= 20; j++ ) { - for ( var i = 1; i <= 50; i++ ) { - if ( - typeof ret === 'undefined' && - a.getImageData(i, j, 1, 1).data[3] !== b.getImageData(i, j, 1, 1).data[3] - ) { - ret = false - break - } else if ( typeof ret === 'boolean' ) { - break - } - - if ( i === 50 && j === 20 && typeof ret === 'undefined' ) { - ret = true - } - } - } - - // Remove and clean from memory - treat.remove() - control.remove() - treat = null - control = null - - return ret - } catch (e) {} - return false -} - -function detectFont( treat, control, text ) { - var treat = treat - var control = control || 'sans-serif' - var text = text || '辭Q' - var ret - - control = writeOnCanvas( text, control ) - treat = writeOnCanvas( text, treat ) - - return !compareCanvases( treat, control ) -} - -Locale.writeOnCanvas = writeOnCanvas -Locale.compareCanvases = compareCanvases -Locale.detectFont = detectFont - -Locale.support = (function() { - - var PREFIX = 'Webkit Moz ms'.split(' ') - - // Create an element for feature detecting - // (in `testCSSProp`) - var elem = $.create( 'h-test' ) - - function testCSSProp( prop ) { - var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1) - var allProp = ( prop + ' ' + PREFIX.join( ucProp + ' ' ) + ucProp ).split(' ') - var ret - - allProp.forEach(function( prop ) { - if ( typeof elem.style[ prop ] === 'string' ) { - ret = true - } - }) - return ret || false - } - - function injectElementWithStyle( rule, callback ) { - var fakeBody = body || $.create( 'body' ) - var div = $.create( 'div' ) - var container = body ? div : fakeBody - var callback = typeof callback === 'function' ? callback : function() {} - var style, ret, docOverflow - - style = [ '' ].join('') - - container.innerHTML += style - fakeBody.appendChild( div ) - - if ( !body ) { - fakeBody.style.background = '' - fakeBody.style.overflow = 'hidden' - docOverflow = root.style.overflow - - root.style.overflow = 'hidden' - root.appendChild( fakeBody ) - } - - // Callback - ret = callback( container, rule ) - - // Remove the injected scope - $.remove( container ) - if ( !body ) { - root.style.overflow = docOverflow - } - return !!ret - } - - function getStyle( elem, prop ) { - var ret - - if ( window.getComputedStyle ) { - ret = document.defaultView.getComputedStyle( elem, null ).getPropertyValue( prop ) - } else if ( elem.currentStyle ) { - // for IE - ret = elem.currentStyle[ prop ] - } - return ret - } - - return { - columnwidth: testCSSProp( 'columnWidth' ), - - fontface: (function() { - var ret - - injectElementWithStyle( - '@font-face { font-family: font; src: url("//"); }', - function( node, rule ) { - var style = $.qsa( 'style', node )[0] - var sheet = style.sheet || style.styleSheet - var cssText = sheet ? - ( sheet.cssRules && sheet.cssRules[0] ? - sheet.cssRules[0].cssText : sheet.cssText || '' - ) : '' - - ret = /src/i.test( cssText ) && - cssText.indexOf( rule.split(' ')[0] ) === 0 - } - ) - - return ret - })(), - - ruby: (function() { - var ruby = $.create( 'ruby' ) - var rt = $.create( 'rt' ) - var rp = $.create( 'rp' ) - var ret - - ruby.appendChild( rp ) - ruby.appendChild( rt ) - root.appendChild( ruby ) - - // Browsers that support ruby hide the `` via `display: none` - ret = ( - getStyle( rp, 'display' ) === 'none' || - // but in IE, `` has `display: inline`, so the test needs other conditions: - getStyle( ruby, 'display' ) === 'ruby' && - getStyle( rt, 'display' ) === 'ruby-text' - ) ? true : false - - // Remove and clean from memory - root.removeChild( ruby ) - ruby = null - rt = null - rp = null - - return ret - })(), - - 'ruby-display': (function() { - var div = $.create( 'div' ) - - div.innerHTML = '' - return div.querySelector( 'h-test-a' ).style.display === 'ruby' && div.querySelector( 'h-test-b' ).style.display === 'ruby-text-container' - })(), - - 'ruby-interchar': (function() { - var IC = 'inter-character' - var div = $.create( 'div' ) - var css - - div.innerHTML = '' - css = div.querySelector( 'h-test' ).style - return css.rubyPosition === IC || css.WebkitRubyPosition === IC || css.MozRubyPosition === IC || css.msRubyPosition === IC - })(), - - textemphasis: testCSSProp( 'textEmphasis' ), - - // Address feature support test for `unicode-range` via - // detecting whether it's Arial (supported) or - // Times New Roman (not supported). - unicoderange: (function() { - var ret - - injectElementWithStyle( - '@font-face{font-family:test-for-unicode-range;src:local(Arial),local("Droid Sans")}@font-face{font-family:test-for-unicode-range;src:local("Times New Roman"),local(Times),local("Droid Serif");unicode-range:U+270C}', - function() { - ret = !Locale.detectFont( - 'test-for-unicode-range', // treatment group - 'Arial, "Droid Sans"', // control group - 'Q' // ASCII characters only - ) - } - ) - return ret - })(), - - writingmode: testCSSProp( 'writingMode' ) - } -})() - -Locale.initCond = function( target ) { - var target = target || root - var ret = '' - var clazz - - for ( var feature in Locale.support ) { - clazz = ( Locale.support[ feature ] ? '' : 'no-' ) + feature - - target.classList.add( clazz ) - ret += clazz + ' ' - } - return ret -} - -var SUPPORT_IC = Locale.support[ 'ruby-interchar' ] - -// 1. Simple ruby polyfill; -// 2. Inter-character polyfill for Zhuyin -function renderSimpleRuby( $ruby ) { - var frag = $.create( '!' ) - var clazz = $ruby.classList - var $rb, $ru - - frag.appendChild( $.clone( $ruby )) - - $ - .tag( 'rt', frag.firstChild ) - .forEach(function( $rt ) { - var $rb = $.create( '!' ) - var airb = [] - var irb - - // Consider the previous nodes the implied - // ruby base - do { - irb = ( irb || $rt ).previousSibling - if ( !irb || irb.nodeName.match( /((?:h\-)?r[ubt])/i )) break - - $rb.insertBefore( $.clone( irb ), $rb.firstChild ) - airb.push( irb ) - } while ( !irb.nodeName.match( /((?:h\-)?r[ubt])/i )) - - // Create a real `` to append. - $ru = clazz.contains( 'zhuyin' ) ? createZhuyinRu( $rb, $rt ) : createNormalRu( $rb, $rt ) - - // Replace the ruby text with the new ``, - // and remove the original implied ruby base(s) - try { - $rt.parentNode.replaceChild( $ru, $rt ) - airb.map( $.remove ) - } catch ( e ) {} - }) - return createCustomRuby( frag ) -} - -function renderInterCharRuby( $ruby ) { - var frag = $.create( '!' ) - frag.appendChild( $.clone( $ruby )) - - $ - .tag( 'rt', frag.firstChild ) - .forEach(function( $rt ) { - var $rb = $.create( '!' ) - var airb = [] - var irb, $zhuyin - - // Consider the previous nodes the implied - // ruby base - do { - irb = ( irb || $rt ).previousSibling - if ( !irb || irb.nodeName.match( /((?:h\-)?r[ubt])/i )) break - - $rb.insertBefore( $.clone( irb ), $rb.firstChild ) - airb.push( irb ) - } while ( !irb.nodeName.match( /((?:h\-)?r[ubt])/i )) - - $zhuyin = $.create( 'rt' ) - $zhuyin.innerHTML = getZhuyinHTML( $rt ) - $rt.parentNode.replaceChild( $zhuyin, $rt ) - }) - return frag.firstChild -} - -// 3. Complex ruby polyfill -// - Double-lined annotation; -// - Right-angled annotation. -function renderComplexRuby( $ruby ) { - var frag = $.create( '!' ) - var clazz = $ruby.classList - var $cloned, $rb, $ru, maxspan - - frag.appendChild( $.clone( $ruby )) - $cloned = frag.firstChild - - $rb = $ru = $.tag( 'rb', $cloned ) - maxspan = $rb.length - - // First of all, deal with Zhuyin containers - // individually - // - // Note that we only support one single Zhuyin - // container in each complex ruby - void function( $rtc ) { - if ( !$rtc ) return - - $ru = $ - .tag( 'rt', $rtc ) - .map(function( $rt, i ) { - if ( !$rb[ i ] ) return - var ret = createZhuyinRu( $rb[ i ], $rt ) - - try { - $rb[ i ].parentNode.replaceChild( ret, $rb[ i ] ) - } catch ( e ) {} - return ret - }) - - // Remove the container once it's useless - $.remove( $rtc ) - $cloned.setAttribute( 'rightangle', 'true' ) - }( $cloned.querySelector( 'rtc.zhuyin' )) - - // Then, normal annotations other than Zhuyin - $ - .qsa( 'rtc:not(.zhuyin)', $cloned ) - .forEach(function( $rtc, order ) { - var ret - ret = $ - .tag( 'rt', $rtc ) - .map(function( $rt, i ) { - var rbspan = Number( $rt.getAttribute( 'rbspan' ) || 1 ) - var span = 0 - var aRb = [] - var $rb, ret - - if ( rbspan > maxspan ) rbspan = maxspan - - do { - try { - $rb = $ru.shift() - aRb.push( $rb ) - } catch (e) {} - - if ( typeof $rb === 'undefined' ) break - span += Number( $rb.getAttribute( 'span' ) || 1 ) - } while ( rbspan > span ) - - if ( rbspan < span ) { - if ( aRb.length > 1 ) { - console.error( 'An impossible `rbspan` value detected.', ruby ) - return - } - aRb = $.tag( 'rb', aRb[0] ) - $ru = aRb.slice( rbspan ).concat( $ru ) - aRb = aRb.slice( 0, rbspan ) - span = rbspan - } - - ret = createNormalRu( aRb, $rt, { - 'class': clazz, - span: span, - order: order - }) - - try { - aRb[0].parentNode.replaceChild( ret, aRb.shift() ) - aRb.map( $.remove ) - } catch (e) {} - return ret - }) - $ru = ret - if ( order === 1 ) $cloned.setAttribute( 'doubleline', 'true' ) - - // Remove the container once it's useless - $.remove( $rtc ) - }) - return createCustomRuby( frag ) -} - -// Create a new fake `` element so the -// style sheets will render it as a polyfill, -// which also helps to avoid the UA style. -function createCustomRuby( frag ) { - var $ruby = frag.firstChild - var hruby = $.create( 'h-ruby' ) - - hruby.innerHTML = $ruby.innerHTML - $.setAttr( hruby, $ruby.attributes ) - hruby.normalize() - return hruby -} - -function simplifyRubyClass( elem ) { - if ( !elem instanceof Element ) return elem - var clazz = elem.classList - - if ( clazz.contains( 'pinyin' )) clazz.add( 'romanization' ) - else if ( clazz.contains( 'romanization' )) clazz.add( 'annotation' ) - else if ( clazz.contains( 'mps' )) clazz.add( 'zhuyin' ) - else if ( clazz.contains( 'rightangle' )) clazz.add( 'complex' ) - return elem -} - -/** - * Create and return a new `` element - * according to the given contents - */ -function createNormalRu( $rb, $rt, attr ) { - var $ru = $.create( 'h-ru' ) - var $rt = $.clone( $rt ) - var attr = attr || {} - attr.annotation = 'true' - - if ( Array.isArray( $rb )) { - $ru.innerHTML = $rb.map(function( rb ) { - if ( typeof rb === 'undefined' ) return '' - return rb.outerHTML - }).join('') + $rt.outerHTML - } else { - $ru.appendChild( $.clone( $rb )) - $ru.appendChild( $rt ) - } - - $.setAttr( $ru, attr ) - return $ru -} - -/** - * Create and return a new `` element - * in Zhuyin form - */ -function createZhuyinRu( $rb, $rt ) { - var $rb = $.clone( $rb ) - - // Create an element to return - var $ru = $.create( 'h-ru' ) - $ru.setAttribute( 'zhuyin', true ) - - // - - // - - // - - // - - // - - // - - // - - $ru.appendChild( $rb ) - $ru.innerHTML += getZhuyinHTML( $rt ) - return $ru -} - -/** - * Create a Zhuyin-form HTML string - */ -function getZhuyinHTML( rt ) { - // #### Explanation #### - // * `zhuyin`: the entire phonetic annotation - // * `yin`: the plain pronunciation (w/out tone) - // * `diao`: the tone - // * `len`: the length of the plain pronunciation (`yin`) - var zhuyin = typeof rt === 'string' ? rt : rt.textContent - var yin, diao, len - - yin = zhuyin.replace( TYPESET.zhuyin.diao, '' ) - len = yin ? yin.length : 0 - diao = zhuyin - .replace( yin, '' ) - .replace( /[\u02C5]/g, '\u02C7' ) - .replace( /[\u030D]/g, '\u0358' ) - return len === 0 ? '' : '' + yin + '' + diao + '' -} - -/** - * Normalize `ruby` elements - */ -$.extend( Locale, { - - // Address normalisation for both simple and complex - // rubies (interlinear annotations) - renderRuby: function( context, target ) { - var target = target || 'ruby' - var $target = $.qsa( target, context ) - - $.qsa( 'rtc', context ) - .concat( $target ).map( simplifyRubyClass ) - - $target - .forEach(function( $ruby ) { - var clazz = $ruby.classList - var $new - - if ( clazz.contains( 'complex' )) $new = renderComplexRuby( $ruby ) - else if ( clazz.contains( 'zhuyin' )) $new = SUPPORT_IC ? renderInterCharRuby( $ruby ) : renderSimpleRuby( $ruby ) - - // Finally, replace it - if ( $new ) $ruby.parentNode.replaceChild( $new, $ruby ) - }) - }, - - simplifyRubyClass: simplifyRubyClass, - getZhuyinHTML: getZhuyinHTML, - renderComplexRuby: renderComplexRuby, - renderSimpleRuby: renderSimpleRuby, - renderInterCharRuby: renderInterCharRuby - - // ### TODO list ### - // - // * Debug mode - // * Better error-tolerance -}) - -/** - * Normalisation rendering mechanism - */ -$.extend( Locale, { - - // Render and normalise the given context by routine: - // - // ruby -> u, ins -> s, del -> em - // - renderElem: function( context ) { - this.renderRuby( context ) - this.renderDecoLine( context ) - this.renderDecoLine( context, 's, del' ) - this.renderEm( context ) - }, - - // Traverse all target elements and address - // presentational corrections if any two of - // them are adjacent to each other. - renderDecoLine: function( context, target ) { - var $$target = $.qsa( target || 'u, ins', context ) - var i = $$target.length - - traverse: while ( i-- ) { - var $this = $$target[ i ] - var $prev = null - - // Ignore all `` and comments in between, - // and add class `.adjacent` once two targets - // are next to each other. - ignore: do { - $prev = ( $prev || $this ).previousSibling - - if ( !$prev ) { - continue traverse - } else if ( $$target[ i-1 ] === $prev ) { - $this.classList.add( 'adjacent' ) - } - } while ( $.isIgnorable( $prev )) - } - }, - - // Traverse all target elements to render - // emphasis marks. - renderEm: function( context, target ) { - var method = target ? 'qsa' : 'tag' - var target = target || 'em' - var $target = $[ method ]( target, context ) - - $target - .forEach(function( elem ) { - var $elem = Han( elem ) - - if ( Locale.support.textemphasis ) { - $elem - .avoid( 'rt, h-char' ) - .charify({ biaodian: true, punct: true }) - } else { - $elem - .avoid( 'rt, h-char, h-char-group' ) - .jinzify() - .groupify({ western: true }) - .charify({ - hanzi: true, - biaodian: true, - punct: true, - latin: true, - ellinika: true, - kirillica: true - }) - } - }) - } -}) - -Han.normalize = Locale -Han.localize = Locale -Han.support = Locale.support -Han.detectFont = Locale.detectFont - -Han.fn.initCond = function() { - this.condition.classList.add( 'han-js-rendered' ) - Han.normalize.initCond( this.condition ) - return this -} - -void [ - 'Elem', - 'DecoLine', - 'Em', - 'Ruby' -].forEach(function( elem ) { - var method = 'render' + elem - - Han.fn[ method ] = function( target ) { - Han.normalize[ method ]( this.context, target ) - return this - } -}) - -$.extend( Han.support, { - // Assume that all devices support Heiti for we - // use `sans-serif` to do the comparison. - heiti: true, - // 'heiti-gb': true, - - songti: Han.detectFont( '"Han Songti"' ), - 'songti-gb': Han.detectFont( '"Han Songti GB"' ), - - kaiti: Han.detectFont( '"Han Kaiti"' ), - // 'kaiti-gb': Han.detectFont( '"Han Kaiti GB"' ), - - fangsong: Han.detectFont( '"Han Fangsong"' ) - // 'fangsong-gb': Han.detectFont( '"Han Fangsong GB"' ) -}) - -Han.correctBiaodian = function( context ) { - var context = context || document - var finder = Han.find( context ) - - finder - .avoid( 'h-char' ) - .replace( /([‘“])/g, function( portion ) { - var $char = Han.createBDChar( portion.text ) - $char.classList.add( 'bd-open', 'punct' ) - return $char - }) - .replace( /([’”])/g, function( portion ) { - var $char = Han.createBDChar( portion.text ) - $char.classList.add( 'bd-close', 'bd-end', 'punct' ) - return $char - }) - - return Han.support.unicoderange - ? finder - : finder.charify({ biaodian: true }) -} - -Han.correctBasicBD = Han.correctBiaodian -Han.correctBD = Han.correctBiaodian - -$.extend( Han.fn, { - biaodian: null, - - correctBiaodian: function() { - this.biaodian = Han.correctBiaodian( this.context ) - return this - }, - - revertCorrectedBiaodian: function() { - try { - this.biaodian.revert( 'all' ) - } catch (e) {} - return this - } -}) - -// Legacy support (deprecated): -Han.fn.correctBasicBD = Han.fn.correctBiaodian -Han.fn.revertBasicBD = Han.fn.revertCorrectedBiaodian - -var hws = '<>' - -var $hws = $.create( 'h-hws' ) -$hws.setAttribute( 'hidden', '' ) -$hws.innerHTML = ' ' - -function sharingSameParent( $a, $b ) { - return $a && $b && $a.parentNode === $b.parentNode -} - -function properlyPlaceHWSBehind( $node, text ) { - var $elmt = $node - var text = text || '' - - if ( - $.isElmt( $node.nextSibling ) || - sharingSameParent( $node, $node.nextSibling ) - ) { - return text + hws - } else { - // One of the parental elements of the current text - // node would definitely have a next sibling, since - // it is of the first portion and not `isEnd`. - while ( !$elmt.nextSibling ) { - $elmt = $elmt.parentNode - } - if ( $node !== $elmt ) { - $elmt.insertAdjacentHTML( 'afterEnd', '' ) - } - } - return text -} - -function firstStepLabel( portion, mat ) { - return portion.isEnd && portion.index === 0 - ? mat[1] + hws + mat[2] - : portion.index === 0 - ? properlyPlaceHWSBehind( portion.node, portion.text ) - : portion.text -} - -function real$hwsElmt( portion ) { - return portion.index === 0 - ? $.clone( $hws ) - : '' -} - -var last$hwsIdx - -function apostrophe( portion ) { - var $elmt = portion.node.parentNode - - if ( portion.index === 0 ) { - last$hwsIdx = portion.endIndexInNode-2 - } - - if ( - $elmt.nodeName.toLowerCase() === 'h-hws' && ( - portion.index === 1 || portion.indexInMatch === last$hwsIdx - )) { - $elmt.classList.add( 'quote-inner' ) - } - return portion.text -} - -function curveQuote( portion ) { - var $elmt = portion.node.parentNode - - if ( $elmt.nodeName.toLowerCase() === 'h-hws' ) { - $elmt.classList.add( 'quote-outer' ) - } - return portion.text -} - -$.extend( Han, { - renderHWS: function( context, strict ) { - // Elements to be filtered according to the - // HWS rendering mode. - var AVOID = strict - ? 'textarea, code, kbd, samp, pre' - : 'textarea' - - var mode = strict ? 'strict' : 'base' - var context = context || document - var finder = Han.find( context ) - - finder - .avoid( AVOID ) - - // Basic situations: - // - 字a => 字a - // - A字 => A字 - .replace( Han.TYPESET.hws[ mode ][0], firstStepLabel ) - .replace( Han.TYPESET.hws[ mode ][1], firstStepLabel ) - - // Convert text nodes `` into real element nodes: - .replace( new RegExp( '(' + hws + ')+', 'g' ), real$hwsElmt ) - - // Deal with: - // - '' => '字' - // - "" => "字" - .replace( /([\'"])\s(.+?)\s\1/g, apostrophe ) - - // Deal with: - // - “字” - // - ‘字’ - .replace( /\s[‘“]/g, curveQuote ) - .replace( /[’”]\s/g, curveQuote ) - .normalize() - - // Return the finder instance for future usage - return finder - } -}) - -$.extend( Han.fn, { - renderHWS: function( strict ) { - Han.renderHWS( this.context, strict ) - return this - }, - - revertHWS: function() { - $.tag( 'h-hws', this.context ) - .forEach(function( hws ) { - $.remove( hws ) - }) - this.HWS = [] - return this - } -}) - -var HANGABLE_CLASS = 'bd-hangable' -var HANGABLE_AVOID = 'h-char.bd-hangable' -var HANGABLE_CS_HTML = '' - -var matches = Han.find.matches - -function detectSpaceFont() { - var div = $.create( 'div' ) - var ret - - div.innerHTML = 'a ba b' - body.appendChild( div ) - ret = div.firstChild.offsetWidth !== div.lastChild.offsetWidth - $.remove( div ) - return ret -} - -function insertHangableCS( $jinze ) { - var $cs = $jinze.nextSibling - - if ( $cs && matches( $cs, 'h-cs.jinze-outer' )) { - $cs.classList.add( 'hangable-outer' ) - } else { - $jinze.insertAdjacentHTML( - 'afterend', - HANGABLE_CS_HTML - ) - } -} - -Han.support['han-space'] = detectSpaceFont() - -$.extend( Han, { - detectSpaceFont: detectSpaceFont, - isSpaceFontLoaded: detectSpaceFont(), - - renderHanging: function( context ) { - var context = context || document - var finder = Han.find( context ) - - finder - .avoid( 'textarea, code, kbd, samp, pre' ) - .avoid( HANGABLE_AVOID ) - .replace( - TYPESET.jinze.hanging, - function( portion ) { - if ( /^[\x20\t\r\n\f]+$/.test( portion.text )) { - return '' - } - - var $elmt = portion.node.parentNode - var $jinze, $new, $bd, biaodian - - if ( $jinze = $.parent( $elmt, 'h-jinze' )) { - insertHangableCS( $jinze ) - } - - biaodian = portion.text.trim() - - $new = Han.createBDChar( biaodian ) - $new.innerHTML = '' + biaodian + '' - $new.classList.add( HANGABLE_CLASS ) - - $bd = $.parent( $elmt, 'h-char.biaodian' ) - - return !$bd - ? $new - : (function() { - $bd.classList.add( HANGABLE_CLASS ) - - return matches( $elmt, 'h-inner, h-inner *' ) - ? biaodian - : $new.firstChild - })() - } - ) - return finder - } -}) - -$.extend( Han.fn, { - renderHanging: function() { - var classList = this.condition.classList - Han.isSpaceFontLoaded = detectSpaceFont() - - if ( - Han.isSpaceFontLoaded && - classList.contains( 'no-han-space' ) - ) { - classList.remove( 'no-han-space' ) - classList.add( 'han-space' ) - } - - Han.renderHanging( this.context ) - return this - }, - - revertHanging: function() { - $.qsa( - 'h-char.bd-hangable, h-cs.hangable-outer', - this.context - ).forEach(function( $elmt ) { - var classList = $elmt.classList - classList.remove( 'bd-hangable' ) - classList.remove( 'hangable-outer' ) - }) - return this - } -}) - -var JIYA_CLASS = 'bd-jiya' -var JIYA_AVOID = 'h-char.bd-jiya' -var CONSECUTIVE_CLASS = 'bd-consecutive' -var JIYA_CS_HTML = '' - -var matches = Han.find.matches - -function trimBDClass( clazz ) { - return clazz.replace( - /(biaodian|cjk|bd-jiya|bd-consecutive|bd-hangable)/gi, '' - ).trim() -} - -function charifyBiaodian( portion ) { - var biaodian = portion.text - var $elmt = portion.node.parentNode - var $bd = $.parent( $elmt, 'h-char.biaodian' ) - var $new = Han.createBDChar( biaodian ) - var $jinze - - $new.innerHTML = '' + biaodian + '' - $new.classList.add( JIYA_CLASS ) - - if ( $jinze = $.parent( $elmt, 'h-jinze' )) { - insertJiyaCS( $jinze ) - } - - return !$bd - ? $new - : (function() { - $bd.classList.add( JIYA_CLASS ) - - return matches( $elmt, 'h-inner, h-inner *' ) - ? biaodian - : $new.firstChild - })() -} - -var prevBDType, $$prevCS - -function locateConsecutiveBD( portion ) { - var prev = prevBDType - var $elmt = portion.node.parentNode - var $bd = $.parent( $elmt, 'h-char.biaodian' ) - var $jinze = $.parent( $bd, 'h-jinze' ) - var classList - - classList = $bd.classList - - if ( prev ) { - $bd.setAttribute( 'prev', prev ) - } - - if ( $$prevCS && classList.contains( 'bd-open' )) { - $$prevCS.pop().setAttribute( 'next', 'bd-open' ) - } - - $$prevCS = undefined - - if ( portion.isEnd ) { - prevBDType = undefined - classList.add( CONSECUTIVE_CLASS, 'end-portion' ) - } else { - prevBDType = trimBDClass($bd.getAttribute( 'class' )) - classList.add( CONSECUTIVE_CLASS ) - } - - if ( $jinze ) { - $$prevCS = locateCS( $jinze, { - prev: prev, - 'class': trimBDClass($bd.getAttribute( 'class' )) - }) - } - return portion.text -} - -function insertJiyaCS( $jinze ) { - if ( - matches( $jinze, '.tou, .touwei' ) && - !matches( $jinze.previousSibling, 'h-cs.jiya-outer' ) - ) { - $jinze.insertAdjacentHTML( 'beforebegin', JIYA_CS_HTML ) - } - if ( - matches( $jinze, '.wei, .touwei' ) && - !matches( $jinze.nextSibling, 'h-cs.jiya-outer' ) - ) { - $jinze.insertAdjacentHTML( 'afterend', JIYA_CS_HTML ) - } -} - -function locateCS( $jinze, attr ) { - var $prev, $next - - if (matches( $jinze, '.tou, .touwei' )) { - $prev = $jinze.previousSibling - - if (matches( $prev, 'h-cs' )) { - $prev.className = 'jinze-outer jiya-outer' - $prev.setAttribute( 'prev', attr.prev ) - } - } - if (matches( $jinze, '.wei, .touwei' )) { - $next = $jinze.nextSibling - - if (matches( $next, 'h-cs' )) { - $next.className = 'jinze-outer jiya-outer ' + attr[ 'class' ] - $next.removeAttribute( 'prev' ) - } - } - return [ $prev, $next ] -} - -Han.renderJiya = function( context ) { - var context = context || document - var finder = Han.find( context ) - - finder - .avoid( 'textarea, code, kbd, samp, pre, h-cs' ) - - .avoid( JIYA_AVOID ) - .charify({ - avoid: false, - biaodian: charifyBiaodian - }) - // End avoiding `JIYA_AVOID`: - .endAvoid() - - .avoid( 'textarea, code, kbd, samp, pre, h-cs' ) - .replace( TYPESET.group.biaodian[0], locateConsecutiveBD ) - .replace( TYPESET.group.biaodian[1], locateConsecutiveBD ) - - return finder -} - -$.extend( Han.fn, { - renderJiya: function() { - Han.renderJiya( this.context ) - return this - }, - - revertJiya: function() { - $.qsa( - 'h-char.bd-jiya, h-cs.jiya-outer', - this.context - ).forEach(function( $elmt ) { - var classList = $elmt.classList - classList.remove( 'bd-jiya' ) - classList.remove( 'jiya-outer' ) - }) - return this - } -}) - -var QUERY_RU_W_ANNO = 'h-ru[annotation]' -var SELECTOR_TO_IGNORE = 'textarea, code, kbd, samp, pre' - -function createCompareFactory( font, treat, control ) { - return function() { - var a = Han.localize.writeOnCanvas( treat, font ) - var b = Han.localize.writeOnCanvas( control, font ) - return Han.localize.compareCanvases( a, b ) - } -} - -function isVowelCombLigaNormal() { - return createCompareFactory( '"Romanization Sans"', '\u0061\u030D', '\uDB80\uDC61' ) -} - -function isVowelICombLigaNormal() { - return createCompareFactory( '"Romanization Sans"', '\u0069\u030D', '\uDB80\uDC69' ) -} - -function isZhuyinCombLigaNormal() { - return createCompareFactory( '"Zhuyin Kaiti"', '\u31B4\u0358', '\uDB8C\uDDB4' ) -} - -function createSubstFactory( regexToSubst ) { - return function( context ) { - var context = context || document - var finder = Han.find( context ).avoid( SELECTOR_TO_IGNORE ) - - regexToSubst - .forEach(function( pattern ) { - finder - .replace( - new RegExp( pattern[ 0 ], 'ig' ), - function( portion, match ) { - var ret = $.clone( charCombLiga ) - - // Put the original content in an inner container - // for better presentational effect of hidden text - ret.innerHTML = '' + match[0] + '' - ret.setAttribute( 'display-as', pattern[ 1 ] ) - return portion.index === 0 ? ret : '' - } - ) - }) - return finder - } -} - -var charCombLiga = $.create( 'h-char', 'comb-liga' ) - -$.extend( Han, { - isVowelCombLigaNormal: isVowelCombLigaNormal(), - isVowelICombLigaNormal: isVowelICombLigaNormal(), - isZhuyinCombLigaNormal: isZhuyinCombLigaNormal(), - - isCombLigaNormal: isVowelICombLigaNormal()(), // ### Deprecated - - substVowelCombLiga: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-vowel' ] ), - substZhuyinCombLiga: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-zhuyin' ] ), - substCombLigaWithPUA: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-pua' ] ), - - substInaccurateChar: function( context ) { - var context = context || document - var finder = Han.find( context ) - - finder.avoid( SELECTOR_TO_IGNORE ) - - Han.TYPESET[ 'inaccurate-char' ] - .forEach(function( pattern ) { - finder - .replace( - new RegExp( pattern[ 0 ], 'ig' ), - pattern[ 1 ] - ) - }) - } -}) - -$.extend( Han.fn, { - 'comb-liga-vowel': null, - 'comb-liga-vowel-i': null, - 'comb-liga-zhuyin': null, - 'inaccurate-char': null, - - substVowelCombLiga: function() { - this['comb-liga-vowel'] = Han.substVowelCombLiga( this.context ) - return this - }, - - substVowelICombLiga: function() { - this['comb-liga-vowel-i'] = Han.substVowelICombLiga( this.context ) - return this - }, - - substZhuyinCombLiga: function() { - this['comb-liga-zhuyin'] = Han.substZhuyinCombLiga( this.context ) - return this - }, - - substCombLigaWithPUA: function() { - if ( !Han.isVowelCombLigaNormal()) { - this['comb-liga-vowel'] = Han.substVowelCombLiga( this.context ) - } else if ( !Han.isVowelICombLigaNormal()) { - this['comb-liga-vowel-i'] = Han.substVowelICombLiga( this.context ) - } - - if ( !Han.isZhuyinCombLigaNormal()) { - this['comb-liga-zhuyin'] = Han.substZhuyinCombLiga( this.context ) - } - return this - }, - - revertVowelCombLiga: function() { - try { - this['comb-liga-vowel'].revert( 'all' ) - } catch (e) {} - return this - }, - - revertVowelICombLiga: function() { - try { - this['comb-liga-vowel-i'].revert( 'all' ) - } catch (e) {} - return this - }, - - revertZhuyinCombLiga: function() { - try { - this['comb-liga-zhuyin'].revert( 'all' ) - } catch (e) {} - return this - }, - - revertCombLigaWithPUA: function() { - try { - this['comb-liga-vowel'].revert( 'all' ) - this['comb-liga-vowel-i'].revert( 'all' ) - this['comb-liga-zhuyin'].revert( 'all' ) - } catch (e) {} - return this - }, - - substInaccurateChar: function() { - this['inaccurate-char'] = Han.substInaccurateChar( this.context ) - return this - }, - - revertInaccurateChar: function() { - try { - this['inaccurate-char'].revert( 'all' ) - } catch (e) {} - return this - } -}) - -window.addEventListener( 'DOMContentLoaded', function() { - var initContext - - // Use the shortcut under the default situation - if ( root.classList.contains( 'han-init' )) { - Han.init() - - // Consider ‘a configured context’ the special - // case of the default situation. Will have to - // replace the `Han.init` with the instance as - // well (for future usage). - } else if ( initContext = document.querySelector( '.han-init-context' )) { - Han.init = Han( initContext ).render() - } -}) - -// Expose to global namespace -if ( typeof noGlobalNS === 'undefined' || noGlobalNS === false ) { - window.Han = Han -} - -return Han -}); - diff --git a/lib/Han/dist/han.min.css b/lib/Han/dist/han.min.css deleted file mode 100644 index 29c753e..0000000 --- a/lib/Han/dist/han.min.css +++ /dev/null @@ -1,6 +0,0 @@ -@charset "UTF-8"; - -/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */ -/*! Han.css: the CSS typography framework optimised for Hanzi */ - -progress,sub,sup{vertical-align:baseline}button,hr,input,select{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:"Han Heiti";src:local("Hiragino Sans GB"),local("Lantinghei TC Extralight"),local("Lantinghei SC Extralight"),local(FZLTXHB--B51-0),local(FZLTZHK--GBK1-0),local("Pingfang SC Light"),local("Pingfang TC Light"),local("Pingfang-SC-Light"),local("Pingfang-TC-Light"),local("Pingfang SC"),local("Pingfang TC"),local("Heiti SC Light"),local(STHeitiSC-Light),local("Heiti SC"),local("Heiti TC Light"),local(STHeitiTC-Light),local("Heiti TC"),local("Microsoft Yahei"),local("Microsoft Jhenghei"),local("Noto Sans CJK KR"),local("Noto Sans CJK JP"),local("Noto Sans CJK SC"),local("Noto Sans CJK TC"),local("Source Han Sans K"),local("Source Han Sans KR"),local("Source Han Sans JP"),local("Source Han Sans CN"),local("Source Han Sans HK"),local("Source Han Sans TW"),local("Source Han Sans TWHK"),local("Droid Sans Fallback")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Heiti";src:local(YuGothic),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro")}@font-face{font-family:"Han Heiti CNS";src:local("Pingfang TC Light"),local("Pingfang-TC-Light"),local("Pingfang TC"),local("Heiti TC Light"),local(STHeitiTC-Light),local("Heiti TC"),local("Lantinghei TC Extralight"),local(FZLTXHB--B51-0),local("Lantinghei TC"),local("Microsoft Jhenghei"),local("Microsoft Yahei"),local("Noto Sans CJK TC"),local("Source Han Sans TC"),local("Source Han Sans TW"),local("Source Han Sans TWHK"),local("Source Han Sans HK"),local("Droid Sans Fallback")}@font-face{font-family:"Han Heiti GB";src:local("Hiragino Sans GB"),local("Pingfang SC Light"),local("Pingfang-SC-Light"),local("Pingfang SC"),local("Lantinghei SC Extralight"),local(FZLTXHK--GBK1-0),local("Lantinghei SC"),local("Heiti SC Light"),local(STHeitiSC-Light),local("Heiti SC"),local("Microsoft Yahei"),local("Noto Sans CJK SC"),local("Source Han Sans SC"),local("Source Han Sans CN"),local("Droid Sans Fallback")}@font-face{font-family:"Han Heiti";font-weight:600;src:local("Hiragino Sans GB W6"),local(HiraginoSansGB-W6),local("Lantinghei TC Demibold"),local("Lantinghei SC Demibold"),local(FZLTZHB--B51-0),local(FZLTZHK--GBK1-0),local("Pingfang-SC-Semibold"),local("Pingfang-TC-Semibold"),local("Heiti SC Medium"),local("STHeitiSC-Medium"),local("Heiti SC"),local("Heiti TC Medium"),local("STHeitiTC-Medium"),local("Heiti TC"),local("Microsoft Yahei Bold"),local("Microsoft Jhenghei Bold"),local(MicrosoftYahei-Bold),local(MicrosoftJhengHeiBold),local("Microsoft Yahei"),local("Microsoft Jhenghei"),local("Noto Sans CJK KR Bold"),local("Noto Sans CJK JP Bold"),local("Noto Sans CJK SC Bold"),local("Noto Sans CJK TC Bold"),local(NotoSansCJKkr-Bold),local(NotoSansCJKjp-Bold),local(NotoSansCJKsc-Bold),local(NotoSansCJKtc-Bold),local("Source Han Sans K Bold"),local(SourceHanSansK-Bold),local("Source Han Sans K"),local("Source Han Sans KR Bold"),local("Source Han Sans JP Bold"),local("Source Han Sans CN Bold"),local("Source Han Sans HK Bold"),local("Source Han Sans TW Bold"),local("Source Han Sans TWHK Bold"),local("SourceHanSansKR-Bold"),local("SourceHanSansJP-Bold"),local("SourceHanSansCN-Bold"),local("SourceHanSansHK-Bold"),local("SourceHanSansTW-Bold"),local("SourceHanSansTWHK-Bold"),local("Source Han Sans KR"),local("Source Han Sans CN"),local("Source Han Sans HK"),local("Source Han Sans TW"),local("Source Han Sans TWHK")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Heiti";font-weight:600;src:local("YuGothic Bold"),local("Hiragino Kaku Gothic ProN W6"),local("Hiragino Kaku Gothic Pro W6"),local(YuGo-Bold),local(HiraKakuProN-W6),local(HiraKakuPro-W6)}@font-face{font-family:"Han Heiti CNS";font-weight:600;src:local("Pingfang TC Semibold"),local("Pingfang-TC-Semibold"),local("Heiti TC Medium"),local("STHeitiTC-Medium"),local("Heiti TC"),local("Lantinghei TC Demibold"),local(FZLTXHB--B51-0),local("Microsoft Jhenghei Bold"),local(MicrosoftJhengHeiBold),local("Microsoft Jhenghei"),local("Microsoft Yahei Bold"),local(MicrosoftYahei-Bold),local("Noto Sans CJK TC Bold"),local(NotoSansCJKtc-Bold),local("Noto Sans CJK TC"),local("Source Han Sans TC Bold"),local("SourceHanSansTC-Bold"),local("Source Han Sans TC"),local("Source Han Sans TW Bold"),local("SourceHanSans-TW"),local("Source Han Sans TW"),local("Source Han Sans TWHK Bold"),local("SourceHanSans-TWHK"),local("Source Han Sans TWHK"),local("Source Han Sans HK"),local("SourceHanSans-HK"),local("Source Han Sans HK")}@font-face{font-family:"Han Heiti GB";font-weight:600;src:local("Hiragino Sans GB W6"),local(HiraginoSansGB-W6),local("Pingfang SC Semibold"),local("Pingfang-SC-Semibold"),local("Lantinghei SC Demibold"),local(FZLTZHK--GBK1-0),local("Heiti SC Medium"),local("STHeitiSC-Medium"),local("Heiti SC"),local("Microsoft Yahei Bold"),local(MicrosoftYahei-Bold),local("Microsoft Yahei"),local("Noto Sans CJK SC Bold"),local(NotoSansCJKsc-Bold),local("Noto Sans CJK SC"),local("Source Han Sans SC Bold"),local("SourceHanSansSC-Bold"),local("Source Han Sans CN Bold"),local("SourceHanSansCN-Bold"),local("Source Han Sans SC"),local("Source Han Sans CN")}@font-face{font-family:"Han Songti";src:local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local("Songti TC Regular"),local(STSongti-TC-Regular),local("Songti TC"),local(STSong),local("Lisong Pro"),local(SimSun),local(PMingLiU)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Songti";src:local(YuMincho),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho")}@font-face{font-family:"Han Songti CNS";src:local("Songti TC Regular"),local(STSongti-TC-Regular),local("Songti TC"),local("Lisong Pro"),local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local(STSong),local(PMingLiU),local(SimSun)}@font-face{font-family:"Han Songti GB";src:local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local(STSong),local(SimSun),local(PMingLiU)}@font-face{font-family:"Han Songti";font-weight:600;src:local("STSongti SC Bold"),local("STSongti TC Bold"),local(STSongti-SC-Bold),local(STSongti-TC-Bold),local("STSongti SC"),local("STSongti TC")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Songti";font-weight:600;src:local("YuMincho Demibold"),local("Hiragino Mincho ProN W6"),local("Hiragino Mincho Pro W6"),local(YuMin-Demibold),local(HiraMinProN-W6),local(HiraMinPro-W6),local(YuMincho),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro")}@font-face{font-family:"Han Songti CNS";font-weight:600;src:local("STSongti TC Bold"),local("STSongti SC Bold"),local(STSongti-TC-Bold),local(STSongti-SC-Bold),local("STSongti TC"),local("STSongti SC")}@font-face{font-family:"Han Songti GB";font-weight:600;src:local("STSongti SC Bold"),local(STSongti-SC-Bold),local("STSongti SC")}@font-face{font-family:cursive;src:local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC"),local("Kaiti SC"),local(STKaiti),local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local(Kaiti),local(DFKai-SB)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti";src:local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC"),local("Kaiti SC"),local(STKaiti),local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local(Kaiti),local(DFKai-SB)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti CNS";src:local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti GB";src:local("Kaiti SC Regular"),local(STKaiTi-SC-Regular),local("Kaiti SC"),local(STKaiti),local(Kai),local(Kaiti),local(DFKai-SB)}@font-face{font-family:cursive;font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti SC Bold"),local(STKaiti-SC-Bold),local("Kaiti TC"),local("Kaiti SC")}@font-face{font-family:"Han Kaiti";font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti SC Bold"),local(STKaiti-SC-Bold),local("Kaiti TC"),local("Kaiti SC")}@font-face{font-family:"Han Kaiti CNS";font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti TC")}@font-face{font-family:"Han Kaiti GB";font-weight:600;src:local("Kaiti SC Bold"),local(STKaiti-SC-Bold)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong";src:local(STFangsong),local(FangSong)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong CNS";src:local(STFangsong),local(FangSong)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong GB";src:local(STFangsong),local(FangSong)}@font-face{font-family:"Biaodian Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Serif";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Yakumono Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Arial Unicode MS"),local("MS Gothic");unicode-range:U+2014}@font-face{font-family:"Yakumono Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho"),local("Microsoft Yahei");unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(Meiryo),local("MS Gothic"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local("MS Mincho"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Yakumono Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(Meiryo),local("MS Gothic");unicode-range:U+2026}@font-face{font-family:"Yakumono Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSongti),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSongti),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Sans GB";font-weight:700;src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Lisong Pro"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Serif GB";font-weight:700;src:local("Lisong Pro"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Sans";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Serif";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans CNS";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif CNS";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans GB";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif GB";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("MS Gothic");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Heiti TC"),local("Lihei Pro"),local("Microsoft Jhenghei"),local(PMingLiU);unicode-range:U+3002,U+FF0C,U+3001}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Heiti TC"),local("Lihei Pro"),local("Microsoft Jhenghei"),local(PMingLiU),local("MS Gothic");unicode-range:U+FF1B,U+FF1A,U+FF1F,U+FF01}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif CNS";src:local(STSongti-TC-Regular),local("Lisong Pro"),local("Heiti TC"),local(PMingLiU);unicode-range:U+3002,U+FF0C,U+3001}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local(PMingLiU),local("MS Mincho");unicode-range:U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local("MS Gothic");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Songti SC"),local(STSongti),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local("MS Mincho");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local(PMingLiU),local("MS Mincho");unicode-range:U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Basic";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Basic";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans CNS";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans GB";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif CNS";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif GB";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Latin Italic Serif";src:local("Georgia Italic"),local("Times New Roman Italic"),local(Georgia-Italic),local(TimesNewRomanPS-ItalicMT),local(Times-Italic)}@font-face{font-family:"Latin Italic Serif";font-weight:700;src:local("Georgia Bold Italic"),local("Times New Roman Bold Italic"),local(Georgia-BoldItalic),local(TimesNewRomanPS-BoldItalicMT),local(Times-Italic)}@font-face{font-family:"Latin Italic Sans";src:local("Helvetica Neue Italic"),local("Helvetica Oblique"),local("Arial Italic"),local(HelveticaNeue-Italic),local(Helvetica-LightOblique),local(Arial-ItalicMT)}@font-face{font-family:"Latin Italic Sans";font-weight:700;src:local("Helvetica Neue Bold Italic"),local("Helvetica Bold Oblique"),local("Arial Bold Italic"),local(HelveticaNeue-BoldItalic),local(Helvetica-BoldOblique),local(Arial-BoldItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Sans";src:local(Skia),local("Neutraface 2 Text"),local(Candara),local(Corbel)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Serif";src:local(Georgia),local("Hoefler Text"),local("Big Caslon")}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Italic Serif";src:local("Georgia Italic"),local("Hoefler Text Italic"),local(Georgia-Italic),local(HoeflerText-Italic)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Sans";src:local("Helvetica Neue"),local(Helvetica),local(Arial)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Sans";src:local("Helvetica Neue Italic"),local("Helvetica Oblique"),local("Arial Italic"),local(HelveticaNeue-Italic),local(Helvetica-LightOblique),local(Arial-ItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Sans";font-weight:700;src:local("Helvetica Neue Bold Italic"),local("Helvetica Bold Oblique"),local("Arial Bold Italic"),local(HelveticaNeue-BoldItalic),local(Helvetica-BoldOblique),local(Arial-BoldItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Serif";src:local(Palatino),local("Palatino Linotype"),local("Times New Roman")}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Serif";src:local("Palatino Italic"),local("Palatino Italic Linotype"),local("Times New Roman Italic"),local(Palatino-Italic),local(Palatino-Italic-Linotype),local(TimesNewRomanPS-ItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Serif";font-weight:700;src:local("Palatino Bold Italic"),local("Palatino Bold Italic Linotype"),local("Times New Roman Bold Italic"),local(Palatino-BoldItalic),local(Palatino-BoldItalic-Linotype),local(TimesNewRomanPS-BoldItalicMT)}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+3105-312D,U+31A0-31BA,U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075;font-family:"Zhuyin Kaiti"}@font-face{unicode-range:U+3105-312D,U+31A0-31BA,U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075;font-family:"Zhuyin Heiti";src:local("Hiragino Sans GB"),local("Heiti TC"),local("Microsoft Jhenghei"),url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype")}@font-face{font-family:"Zhuyin Heiti";src:local("Heiti TC"),local("Microsoft Jhenghei"),url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+3127}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");font-family:"Zhuyin Heiti";unicode-range:U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+31B4,U+31B5,U+31B6,U+31B7,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");font-family:"Romanization Sans";unicode-range:U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075}article strong :lang(ja-Latn),article strong :lang(zh-Latn),article strong :not(:lang(zh)):not(:lang(ja)),article strong:lang(ja-Latn),article strong:lang(zh-Latn),article strong:not(:lang(zh)):not(:lang(ja)),html :lang(ja-Latn),html :lang(zh-Latn),html :not(:lang(zh)):not(:lang(ja)),html:lang(ja-Latn),html:lang(zh-Latn),html:not(:lang(zh)):not(:lang(ja)){font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}[lang*=Hant],[lang=zh-TW],[lang=zh-HK],[lang^=zh],article strong:lang(zh),article strong:lang(zh-Hant),html:lang(zh),html:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS","Helvetica Neue",Helvetica,Arial,"Zhuyin Heiti","Han Heiti",sans-serif}.no-unicoderange [lang*=Hant],.no-unicoderange [lang=zh-TW],.no-unicoderange [lang=zh-HK],.no-unicoderange [lang^=zh],.no-unicoderange article strong:lang(zh),.no-unicoderange article strong:lang(zh-Hant),html:lang(zh).no-unicoderange,html:lang(zh-Hant).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}[lang*=Hans],[lang=zh-CN],article strong:lang(zh-CN),article strong:lang(zh-Hans),html:lang(zh-CN),html:lang(zh-Hans){font-family:"Biaodian Pro Sans GB","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}.no-unicoderange [lang*=Hans],.no-unicoderange [lang=zh-CN],.no-unicoderange article strong:lang(zh-CN),.no-unicoderange article strong:lang(zh-Hans),html:lang(zh-CN).no-unicoderange,html:lang(zh-Hans).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}[lang^=ja],article strong:lang(ja),html:lang(ja){font-family:"Yakumono Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.no-unicoderange [lang^=ja],.no-unicoderange article strong:lang(ja),html:lang(ja).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}article blockquote i :lang(ja-Latn),article blockquote i :lang(zh-Latn),article blockquote i :not(:lang(zh)):not(:lang(ja)),article blockquote i:lang(ja-Latn),article blockquote i:lang(zh-Latn),article blockquote i:not(:lang(zh)):not(:lang(ja)),article blockquote var :lang(ja-Latn),article blockquote var :lang(zh-Latn),article blockquote var :not(:lang(zh)):not(:lang(ja)),article blockquote var:lang(ja-Latn),article blockquote var:lang(zh-Latn),article blockquote var:not(:lang(zh)):not(:lang(ja)){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}article blockquote i:lang(zh),article blockquote i:lang(zh-Hant),article blockquote var:lang(zh),article blockquote var:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Zhuyin Heiti","Han Heiti",sans-serif}.no-unicoderange article blockquote i:lang(zh),.no-unicoderange article blockquote i:lang(zh-Hant),.no-unicoderange article blockquote var:lang(zh),.no-unicoderange article blockquote var:lang(zh-Hant){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}article blockquote i:lang(zh-CN),article blockquote i:lang(zh-Hans),article blockquote var:lang(zh-CN),article blockquote var:lang(zh-Hans){font-family:"Biaodian Pro Sans GB","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}.no-unicoderange article blockquote i:lang(zh-CN),.no-unicoderange article blockquote i:lang(zh-Hans),.no-unicoderange article blockquote var:lang(zh-CN),.no-unicoderange article blockquote var:lang(zh-Hans){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}article blockquote i:lang(ja),article blockquote var:lang(ja){font-family:"Yakumono Sans","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.no-unicoderange article blockquote i:lang(ja),.no-unicoderange article blockquote var:lang(ja){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,sans-serif}article figure blockquote :lang(ja-Latn),article figure blockquote :lang(zh-Latn),article figure blockquote :not(:lang(zh)):not(:lang(ja)),article figure blockquote:lang(ja-Latn),article figure blockquote:lang(zh-Latn),article figure blockquote:not(:lang(zh)):not(:lang(ja)){font-family:Georgia,"Times New Roman","Han Songti",cursive,serif}article figure blockquote:lang(zh),article figure blockquote:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Songti",serif}.no-unicoderange article figure blockquote:lang(zh),.no-unicoderange article figure blockquote:lang(zh-Hant){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Songti",serif}article figure blockquote:lang(zh-CN),article figure blockquote:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Serif",Georgia,"Times New Roman","Han Songti GB",serif}.no-unicoderange article figure blockquote:lang(zh-CN),.no-unicoderange article figure blockquote:lang(zh-Hans){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Songti GB",serif}article figure blockquote:lang(ja){font-family:"Yakumono Serif","Numeral LF Serif",Georgia,"Times New Roman",serif}.no-unicoderange article figure blockquote:lang(ja){font-family:"Numeral LF Serif",Georgia,"Times New Roman",serif}article blockquote :lang(ja-Latn),article blockquote :lang(zh-Latn),article blockquote :not(:lang(zh)):not(:lang(ja)),article blockquote:lang(ja-Latn),article blockquote:lang(zh-Latn),article blockquote:not(:lang(zh)):not(:lang(ja)){font-family:Georgia,"Times New Roman","Han Kaiti",cursive,serif}article blockquote:lang(zh),article blockquote:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Kaiti",cursive,serif}.no-unicoderange article blockquote:lang(zh),.no-unicoderange article blockquote:lang(zh-Hant){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}article blockquote:lang(zh-CN),article blockquote:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}.no-unicoderange article blockquote:lang(zh-CN),.no-unicoderange article blockquote:lang(zh-Hans){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}article blockquote:lang(ja){font-family:"Yakumono Serif","Numeral LF Serif",Georgia,"Times New Roman",cursive,serif}.no-unicoderange article blockquote:lang(ja){font-family:"Numeral LF Serif",Georgia,"Times New Roman",cursive,serif}i :lang(ja-Latn),i :lang(zh-Latn),i :not(:lang(zh)):not(:lang(ja)),i:lang(ja-Latn),i:lang(zh-Latn),i:not(:lang(zh)):not(:lang(ja)),var :lang(ja-Latn),var :lang(zh-Latn),var :not(:lang(zh)):not(:lang(ja)),var:lang(ja-Latn),var:lang(zh-Latn),var:not(:lang(zh)):not(:lang(ja)){font-family:"Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}i:lang(zh),i:lang(zh-Hant),var:lang(zh),var:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Kaiti",cursive,serif}.no-unicoderange i:lang(zh),.no-unicoderange i:lang(zh-Hant),.no-unicoderange var:lang(zh),.no-unicoderange var:lang(zh-Hant){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}i:lang(zh-CN),i:lang(zh-Hans),var:lang(zh-CN),var:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}.no-unicoderange i:lang(zh-CN),.no-unicoderange i:lang(zh-Hans),.no-unicoderange var:lang(zh-CN),.no-unicoderange var:lang(zh-Hans){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}i:lang(ja),var:lang(ja){font-family:"Yakumono Serif","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman",cursive,serif}.no-unicoderange i:lang(ja),.no-unicoderange var:lang(ja){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman",cursive,serif}code :lang(ja-Latn),code :lang(zh-Latn),code :not(:lang(zh)):not(:lang(ja)),code:lang(ja-Latn),code:lang(zh-Latn),code:not(:lang(zh)):not(:lang(ja)),kbd :lang(ja-Latn),kbd :lang(zh-Latn),kbd :not(:lang(zh)):not(:lang(ja)),kbd:lang(ja-Latn),kbd:lang(zh-Latn),kbd:not(:lang(zh)):not(:lang(ja)),pre :lang(ja-Latn),pre :lang(zh-Latn),pre :not(:lang(zh)):not(:lang(ja)),pre:lang(ja-Latn),pre:lang(zh-Latn),pre:not(:lang(zh)):not(:lang(ja)),samp :lang(ja-Latn),samp :lang(zh-Latn),samp :not(:lang(zh)):not(:lang(ja)),samp:lang(ja-Latn),samp:lang(zh-Latn),samp:not(:lang(zh)):not(:lang(ja)){font-family:Menlo,Consolas,Courier,"Han Heiti",monospace,monospace,sans-serif}code:lang(zh),code:lang(zh-Hant),kbd:lang(zh),kbd:lang(zh-Hant),pre:lang(zh),pre:lang(zh-Hant),samp:lang(zh),samp:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS",Menlo,Consolas,Courier,"Zhuyin Heiti","Han Heiti",monospace,monospace,sans-serif}.no-unicoderange code:lang(zh),.no-unicoderange code:lang(zh-Hant),.no-unicoderange kbd:lang(zh),.no-unicoderange kbd:lang(zh-Hant),.no-unicoderange pre:lang(zh),.no-unicoderange pre:lang(zh-Hant),.no-unicoderange samp:lang(zh),.no-unicoderange samp:lang(zh-Hant){font-family:Menlo,Consolas,Courier,"Han Heiti",monospace,monospace,sans-serif}code:lang(zh-CN),code:lang(zh-Hans),kbd:lang(zh-CN),kbd:lang(zh-Hans),pre:lang(zh-CN),pre:lang(zh-Hans),samp:lang(zh-CN),samp:lang(zh-Hans){font-family:"Biaodian Pro Sans GB",Menlo,Consolas,Courier,"Han Heiti GB",monospace,monospace,sans-serif}.no-unicoderange code:lang(zh-CN),.no-unicoderange code:lang(zh-Hans),.no-unicoderange kbd:lang(zh-CN),.no-unicoderange kbd:lang(zh-Hans),.no-unicoderange pre:lang(zh-CN),.no-unicoderange pre:lang(zh-Hans),.no-unicoderange samp:lang(zh-CN),.no-unicoderange samp:lang(zh-Hans){font-family:Menlo,Consolas,Courier,"Han Heiti GB",monospace,monospace,sans-serif}code:lang(ja),kbd:lang(ja),pre:lang(ja),samp:lang(ja){font-family:"Yakumono Sans",Menlo,Consolas,Courier,monospace,monospace,sans-serif}.no-unicoderange code:lang(ja),.no-unicoderange kbd:lang(ja),.no-unicoderange pre:lang(ja),.no-unicoderange samp:lang(ja){font-family:Menlo,Consolas,Courier,monospace,monospace,sans-serif}.no-unicoderange h-char.bd-liga,.no-unicoderange h-char[unicode=b7],h-ruby [annotation] rt,h-ruby h-zhuyin,h-ruby h-zhuyin h-diao,h-ruby.romanization rt,html,ruby [annotation] rt,ruby h-zhuyin,ruby h-zhuyin h-diao,ruby.romanization rt{-moz-font-feature-settings:"liga";-ms-font-feature-settings:"liga";-webkit-font-feature-settings:"liga";font-feature-settings:"liga"}[lang*=Hant],[lang*=Hans],[lang=zh-TW],[lang=zh-HK],[lang=zh-CN],[lang^=zh],article blockquote i,article blockquote var,article strong,code,html,kbd,pre,samp{-moz-font-feature-settings:"liga=1, locl=0";-ms-font-feature-settings:"liga","locl" 0;-webkit-font-feature-settings:"liga","locl" 0;font-feature-settings:"liga","locl" 0}.no-unicoderange h-char.bd-cop:lang(zh-HK),.no-unicoderange h-char.bd-cop:lang(zh-Hant),.no-unicoderange h-char.bd-cop:lang(zh-TW){font-family:-apple-system,"Han Heiti CNS"}.no-unicoderange h-char.bd-liga,.no-unicoderange h-char[unicode=b7]{font-family:"Biaodian Basic","Han Heiti"}.no-unicoderange h-char[unicode="2018"]:lang(zh-CN),.no-unicoderange h-char[unicode="2018"]:lang(zh-Hans),.no-unicoderange h-char[unicode="2019"]:lang(zh-CN),.no-unicoderange h-char[unicode="2019"]:lang(zh-Hans),.no-unicoderange h-char[unicode="201c"]:lang(zh-CN),.no-unicoderange h-char[unicode="201c"]:lang(zh-Hans),.no-unicoderange h-char[unicode="201d"]:lang(zh-CN),.no-unicoderange h-char[unicode="201d"]:lang(zh-Hans){font-family:"Han Heiti GB"}i,var{font-style:inherit}.no-unicoderange h-ruby h-zhuyin,.no-unicoderange h-ruby h-zhuyin h-diao,.no-unicoderange ruby h-zhuyin,.no-unicoderange ruby h-zhuyin h-diao,h-ruby h-diao,ruby h-diao{font-family:"Zhuyin Kaiti",cursive,serif}h-ruby [annotation] rt,h-ruby.romanization rt,ruby [annotation] rt,ruby.romanization rt{font-family:"Romanization Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif} \ No newline at end of file diff --git a/lib/Han/dist/han.min.js b/lib/Han/dist/han.min.js deleted file mode 100644 index a557ad3..0000000 --- a/lib/Han/dist/han.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */ -/*! Han.css: the CSS typography framework optimised for Hanzi */ - -void function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,!0):"function"==typeof define&&define.amd?define(function(){return b(a,!0)}):b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){return"function"==typeof a||a instanceof Element?a:void 0}function d(a){var b=0===a.index&&a.isEnd?"biaodian cjk":"biaodian cjk portion "+(0===a.index?"is-first":a.isEnd?"is-end":"is-inner"),c=S.create("h-char-group",b);return c.innerHTML=a.text,c}function e(a){var b=S.create("div"),c=a.charCodeAt(0).toString(16);return b.innerHTML=''+a+"",b.firstChild}function f(a){return a.match(R["char"].biaodian.open)?"bd-open":a.match(R["char"].biaodian.close)?"bd-close bd-end":a.match(R["char"].biaodian.end)?/(?:\u3001|\u3002|\uff0c)/i.test(a)?"bd-end bd-cop":"bd-end":a.match(new RegExp(Q.biaodian.liga))?"bd-liga":a.match(new RegExp(Q.biaodian.middle))?"bd-middle":""}function g(a,b){var c,d=S.create("canvas");return d.width="50",d.height="20",d.style.display="none",L.appendChild(d),c=d.getContext("2d"),c.textBaseline="top",c.font="15px "+b+", sans-serif",c.fillStyle="black",c.strokeStyle="black",c.fillText(a,0,0),{node:d,context:c,remove:function(){S.remove(d,L)}}}function h(a,b){var c,d=a.context,e=b.context;try{for(var f=1;20>=f;f++)for(var g=1;50>=g;g++){if("undefined"==typeof c&&d.getImageData(g,f,1,1).data[3]!==e.getImageData(g,f,1,1).data[3]){c=!1;break}if("boolean"==typeof c)break;50===g&&20===f&&"undefined"==typeof c&&(c=!0)}return a.remove(),b.remove(),a=null,b=null,c}catch(h){}return!1}function i(a,b,c){var a=a,b=b||"sans-serif",c=c||"\u8fadQ";return b=g(c,b),a=g(c,a),!h(a,b)}function j(a){var b,c=S.create("!"),d=a.classList;return c.appendChild(S.clone(a)),S.tag("rt",c.firstChild).forEach(function(a){var c,e=S.create("!"),f=[];do{if(c=(c||a).previousSibling,!c||c.nodeName.match(/((?:h\-)?r[ubt])/i))break;e.insertBefore(S.clone(c),e.firstChild),f.push(c)}while(!c.nodeName.match(/((?:h\-)?r[ubt])/i));b=d.contains("zhuyin")?p(e,a):o(e,a);try{a.parentNode.replaceChild(b,a),f.map(S.remove)}catch(g){}}),m(c)}function k(a){var b=S.create("!");return b.appendChild(S.clone(a)),S.tag("rt",b.firstChild).forEach(function(a){var b,c,d=S.create("!"),e=[];do{if(b=(b||a).previousSibling,!b||b.nodeName.match(/((?:h\-)?r[ubt])/i))break;d.insertBefore(S.clone(b),d.firstChild),e.push(b)}while(!b.nodeName.match(/((?:h\-)?r[ubt])/i));c=S.create("rt"),c.innerHTML=q(a),a.parentNode.replaceChild(c,a)}),b.firstChild}function l(a){var b,c,d,e,f=S.create("!"),g=a.classList;return f.appendChild(S.clone(a)),b=f.firstChild,c=d=S.tag("rb",b),e=c.length,void function(a){a&&(d=S.tag("rt",a).map(function(a,b){if(c[b]){var d=p(c[b],a);try{c[b].parentNode.replaceChild(d,c[b])}catch(e){}return d}}),S.remove(a),b.setAttribute("rightangle","true"))}(b.querySelector("rtc.zhuyin")),S.qsa("rtc:not(.zhuyin)",b).forEach(function(a,c){var f;f=S.tag("rt",a).map(function(a,b){var f,h,i=Number(a.getAttribute("rbspan")||1),j=0,k=[];i>e&&(i=e);do{try{f=d.shift(),k.push(f)}catch(l){}if("undefined"==typeof f)break;j+=Number(f.getAttribute("span")||1)}while(i>j);if(j>i){if(k.length>1)return void console.error("An impossible `rbspan` value detected.",ruby);k=S.tag("rb",k[0]),d=k.slice(i).concat(d),k=k.slice(0,i),j=i}h=o(k,a,{"class":g,span:j,order:c});try{k[0].parentNode.replaceChild(h,k.shift()),k.map(S.remove)}catch(l){}return h}),d=f,1===c&&b.setAttribute("doubleline","true"),S.remove(a)}),m(f)}function m(a){var b=a.firstChild,c=S.create("h-ruby");return c.innerHTML=b.innerHTML,S.setAttr(c,b.attributes),c.normalize(),c}function n(a){if(!a instanceof Element)return a;var b=a.classList;return b.contains("pinyin")?b.add("romanization"):b.contains("romanization")?b.add("annotation"):b.contains("mps")?b.add("zhuyin"):b.contains("rightangle")&&b.add("complex"),a}function o(a,b,c){var d=S.create("h-ru"),b=S.clone(b),c=c||{};return c.annotation="true",Array.isArray(a)?d.innerHTML=a.map(function(a){return"undefined"==typeof a?"":a.outerHTML}).join("")+b.outerHTML:(d.appendChild(S.clone(a)),d.appendChild(b)),S.setAttr(d,c),d}function p(a,b){var a=S.clone(a),c=S.create("h-ru");return c.setAttribute("zhuyin",!0),c.appendChild(a),c.innerHTML+=q(b),c}function q(a){var b,c,d,e="string"==typeof a?a:a.textContent;return b=e.replace(R.zhuyin.diao,""),d=b?b.length:0,c=e.replace(b,"").replace(/[\u02C5]/g,"\u02c7").replace(/[\u030D]/g,"\u0358"),0===d?"":''+b+""+c+""}function r(a,b){return a&&b&&a.parentNode===b.parentNode}function s(a,b){var c=a,b=b||"";if(S.isElmt(a.nextSibling)||r(a,a.nextSibling))return b+X;for(;!c.nextSibling;)c=c.parentNode;return a!==c&&c.insertAdjacentHTML("afterEnd",""),b}function t(a,b){return a.isEnd&&0===a.index?b[1]+X+b[2]:0===a.index?s(a.node,a.text):a.text}function u(a){return 0===a.index?S.clone(Y):""}function v(a){var b=a.node.parentNode;return 0===a.index&&(Z=a.endIndexInNode-2),"h-hws"!==b.nodeName.toLowerCase()||1!==a.index&&a.indexInMatch!==Z||b.classList.add("quote-inner"),a.text}function w(a){var b=a.node.parentNode;return"h-hws"===b.nodeName.toLowerCase()&&b.classList.add("quote-outer"),a.text}function x(){var a,b=S.create("div");return b.innerHTML="a ba b",L.appendChild(b),a=b.firstChild.offsetWidth!==b.lastChild.offsetWidth,S.remove(b),a}function y(a){var b=a.nextSibling;b&&ba(b,"h-cs.jinze-outer")?b.classList.add("hangable-outer"):a.insertAdjacentHTML("afterend",aa)}function z(a){return a.replace(/(biaodian|cjk|bd-jiya|bd-consecutive|bd-hangable)/gi,"").trim()}function A(a){var b,c=a.text,d=a.node.parentNode,e=S.parent(d,"h-char.biaodian"),f=O.createBDChar(c);return f.innerHTML=""+c+"",f.classList.add(ea),(b=S.parent(d,"h-jinze"))&&C(b),e?function(){return e.classList.add(ea),ba(d,"h-inner, h-inner *")?c:f.firstChild}():f}function B(a){var b,c=ca,d=a.node.parentNode,e=S.parent(d,"h-char.biaodian"),f=S.parent(e,"h-jinze");return b=e.classList,c&&e.setAttribute("prev",c),da&&b.contains("bd-open")&&da.pop().setAttribute("next","bd-open"),da=void 0,a.isEnd?(ca=void 0,b.add(ga,"end-portion")):(ca=z(e.getAttribute("class")),b.add(ga)),f&&(da=D(f,{prev:c,"class":z(e.getAttribute("class"))})),a.text}function C(a){ba(a,".tou, .touwei")&&!ba(a.previousSibling,"h-cs.jiya-outer")&&a.insertAdjacentHTML("beforebegin",ha),ba(a,".wei, .touwei")&&!ba(a.nextSibling,"h-cs.jiya-outer")&&a.insertAdjacentHTML("afterend",ha)}function D(a,b){var c,d;return ba(a,".tou, .touwei")&&(c=a.previousSibling,ba(c,"h-cs")&&(c.className="jinze-outer jiya-outer",c.setAttribute("prev",b.prev))),ba(a,".wei, .touwei")&&(d=a.nextSibling,ba(d,"h-cs")&&(d.className="jinze-outer jiya-outer "+b["class"],d.removeAttribute("prev"))),[c,d]}function E(a,b,c){return function(){var d=O.localize.writeOnCanvas(b,a),e=O.localize.writeOnCanvas(c,a);return O.localize.compareCanvases(d,e)}}function F(){return E('"Romanization Sans"',"a\u030d","\udb80\udc61")}function G(){return E('"Romanization Sans"',"i\u030d","\udb80\udc69")}function H(){return E('"Zhuyin Kaiti"',"\u31b4\u0358","\udb8c\uddb4")}function I(a){return function(b){var b=b||J,c=O.find(b).avoid(ia);return a.forEach(function(a){c.replace(new RegExp(a[0],"ig"),function(b,c){var d=S.clone(ja);return d.innerHTML=""+c[0]+"",d.setAttribute("display-as",a[1]),0===b.index?d:""})}),c}}var J=a.document,K=J.documentElement,L=J.body,M="3.3.0",N=["initCond","renderElem","renderJiya","renderHanging","correctBiaodian","renderHWS","substCombLigaWithPUA"],O=function(a,b){return new O.fn.init(a,b)},P=function(){return arguments[0]&&(this.context=arguments[0]),arguments[1]&&(this.condition=arguments[1]),this};O.version=M,O.fn=O.prototype={version:M,constructor:O,context:L,condition:K,routine:N,init:P,setRoutine:function(a){return Array.isArray(a)&&(this.routine=a),this},render:function(a){var b=this,a=Array.isArray(a)?a:this.routine;return a.forEach(function(a){"string"==typeof a&&"function"==typeof b[a]?b[a]():Array.isArray(a)&&"function"==typeof b[a[0]]&&b[a.shift()].apply(b,a)}),this}},O.fn.init.prototype=O.fn,O.init=function(){return O.init=O().render()};var Q={punct:{base:"[\u2026,.;:!?\u203d_]",sing:"[\u2010-\u2014\u2026]",middle:"[\\/~\\-&\u2010-\u2014_]",open:"['\"\u2018\u201c\\(\\[\xa1\xbf\u2e18\xab\u2039\u201a\u201c\u201e]",close:"['\"\u201d\u2019\\)\\]\xbb\u203a\u201b\u201d\u201f]",end:"['\"\u201d\u2019\\)\\]\xbb\u203a\u201b\u201d\u201f\u203c\u203d\u2047-\u2049,.;:!?]"},biaodian:{base:"[\ufe30\uff0e\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u30fc]",liga:"[\u2014\u2026\u22ef]",middle:"[\xb7\uff3c\uff0f\uff0d\u30a0\uff06\u30fb\uff3f]",open:"[\u300c\u300e\u300a\u3008\uff08\u3014\uff3b\uff5b\u3010\u3016]",close:"[\u300d\u300f\u300b\u3009\uff09\u3015\uff3d\uff5d\u3011\u3017]",end:"[\u300d\u300f\u300b\u3009\uff09\u3015\uff3d\uff5d\u3011\u3017\ufe30\uff0e\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u30fc]"},hanzi:{base:"[\u4e00-\u9fff\u3400-\u4db5\u31c0-\u31e3\u3007\ufa0e\ufa0f\ufa11\ufa13\ufa14\ufa1f\ufa21\ufa23\ufa24\ufa27-\ufa29]|[\ud800-\udbff][\udc00-\udfff]",desc:"[\u2ff0-\u2ffa]",radical:"[\u2f00-\u2fd5\u2e80-\u2ef3]"},latin:{base:"[A-Za-z0-9\xc0-\xff\u0100-\u017f\u0180-\u024f\u2c60-\u2c7f\ua720-\ua7ff\u1e00-\u1eff]",combine:"[\u0300-\u0341\u1dc0-\u1dff]"},ellinika:{base:"[0-9\u0370-\u03ff\u1f00-\u1fff]",combine:"[\u0300-\u0345\u1dc0-\u1dff]"},kirillica:{base:"[0-9\u0400-\u0482\u048a-\u04ff\u0500-\u052f\ua640-\ua66e\ua67e-\ua697]",combine:"[\u0483-\u0489\u2de0-\u2dff\ua66f-\ua67d\ua69f]"},kana:{base:"[\u30a2\u30a4\u30a6\u30a8\u30aa-\u30fa\u3042\u3044\u3046\u3048\u304a-\u3094\u309f\u30ff]|\ud82c[\udc00-\udc01]",small:"[\u3041\u3043\u3045\u3047\u3049\u30a1\u30a3\u30a5\u30a7\u30a9\u3063\u3083\u3085\u3087\u308e\u3095\u3096\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u31f0-\u31ff]",combine:"[\u3099-\u309c]",half:"[\uff66-\uff9f]",mark:"[\u30a0\u309d\u309e\u30fb-\u30fe]"},eonmun:{base:"[\uac00-\ud7a3]",letter:"[\u1100-\u11ff\u314f-\u3163\u3131-\u318e\ua960-\ua97c\ud7b0-\ud7fb]",half:"[\uffa1-\uffdc]"},zhuyin:{base:"[\u3105-\u312d\u31a0-\u31ba]",initial:"[\u3105-\u3119\u312a-\u312c\u31a0-\u31a3]",medial:"[\u3127-\u3129]","final":"[\u311a-\u3129\u312d\u31a4-\u31b3\u31b8-\u31ba]",tone:"[\u02d9\u02ca\u02c5\u02c7\u02cb\u02ea\u02eb]",checked:"[\u31b4-\u31b7][\u0358\u030d]?"}},R=function(){var a="[\\x20\\t\\r\\n\\f]",b=Q.punct.open,c=(Q.punct.close,Q.punct.end),d=Q.punct.middle,e=Q.punct.sing,f=b+"|"+c+"|"+d,g=Q.biaodian.open,h=Q.biaodian.close,i=Q.biaodian.end,j=Q.biaodian.middle,k=Q.biaodian.liga+"{2}",l=g+"|"+i+"|"+j,m=Q.kana.base+Q.kana.combine+"?",n=Q.kana.small+Q.kana.combine+"?",o=Q.kana.half,p=Q.eonmun.base+"|"+Q.eonmun.letter,q=Q.eonmun.half,r=Q.hanzi.base+"|"+Q.hanzi.desc+"|"+Q.hanzi.radical+"|"+m,s=Q.ellinika.combine,t=Q.latin.base+s+"*",u=Q.ellinika.base+s+"*",v=Q.kirillica.combine,w=Q.kirillica.base+v+"*",x=t+"|"+u+"|"+w,y="['\u2019]",z=r+"|(?:"+x+"|"+y+")+",A=Q.zhuyin.initial,B=Q.zhuyin.medial,C=Q.zhuyin["final"],D=Q.zhuyin.tone+"|"+Q.zhuyin.checked;return{"char":{punct:{all:new RegExp("("+f+")","g"),open:new RegExp("("+b+")","g"),end:new RegExp("("+c+")","g"),sing:new RegExp("("+e+")","g")},biaodian:{all:new RegExp("("+l+")","g"),open:new RegExp("("+g+")","g"),close:new RegExp("("+h+")","g"),end:new RegExp("("+i+")","g"),liga:new RegExp("("+k+")","g")},hanzi:new RegExp("("+r+")","g"),latin:new RegExp("("+t+")","ig"),ellinika:new RegExp("("+u+")","ig"),kirillica:new RegExp("("+w+")","ig"),kana:new RegExp("("+m+"|"+n+"|"+o+")","g"),eonmun:new RegExp("("+p+"|"+q+")","g")},group:{biaodian:[new RegExp("(("+l+"){2,})","g"),new RegExp("("+k+g+")","g")],punct:null,hanzi:new RegExp("("+r+")+","g"),western:new RegExp("("+t+"|"+u+"|"+w+"|"+f+")+","ig"),kana:new RegExp("("+m+"|"+n+"|"+o+")+","g"),eonmun:new RegExp("("+p+"|"+q+"|"+f+")+","g")},jinze:{hanging:new RegExp(a+"*([\u3001\uff0c\u3002\uff0e])(?!"+i+")","ig"),touwei:new RegExp("("+g+"+)("+z+")("+i+"+)","ig"),tou:new RegExp("("+g+"+)("+z+")","ig"),wei:new RegExp("("+z+")("+i+"+)","ig"),middle:new RegExp("("+z+")("+j+")("+z+")","ig")},zhuyin:{form:new RegExp("^\u02d9?("+A+")?("+B+")?("+C+")?("+D+")?$"),diao:new RegExp("("+D+")","g")},hws:{base:[new RegExp("("+r+")("+x+"|"+b+")","ig"),new RegExp("("+x+"|"+c+")("+r+")","ig")],strict:[new RegExp("("+r+")"+a+"?("+x+"|"+b+")","ig"),new RegExp("("+x+"|"+c+")"+a+"?("+r+")","ig")]},"display-as":{"ja-font-for-hant":["\u67e5 \u67fb","\u555f \u5553","\u9109 \u9115","\u503c \u5024","\u6c61 \u6c5a"],"comb-liga-pua":[["a[\u030d\u0358]","\udb80\udc61"],["e[\u030d\u0358]","\udb80\udc65"],["i[\u030d\u0358]","\udb80\udc69"],["o[\u030d\u0358]","\udb80\udc6f"],["u[\u030d\u0358]","\udb80\udc75"],["\u31b4[\u030d\u0358]","\udb8c\uddb4"],["\u31b5[\u030d\u0358]","\udb8c\uddb5"],["\u31b6[\u030d\u0358]","\udb8c\uddb6"],["\u31b7[\u030d\u0358]","\udb8c\uddb7"]],"comb-liga-vowel":[["a[\u030d\u0358]","\udb80\udc61"],["e[\u030d\u0358]","\udb80\udc65"],["i[\u030d\u0358]","\udb80\udc69"],["o[\u030d\u0358]","\udb80\udc6f"],["u[\u030d\u0358]","\udb80\udc75"]],"comb-liga-zhuyin":[["\u31b4[\u030d\u0358]","\udb8c\uddb4"],["\u31b5[\u030d\u0358]","\udb8c\uddb5"],["\u31b6[\u030d\u0358]","\udb8c\uddb6"],["\u31b7[\u030d\u0358]","\udb8c\uddb7"]]},"inaccurate-char":[["[\u2022\u2027]","\xb7"],["\u22ef\u22ef","\u2026\u2026"],["\u2500\u2500","\u2014\u2014"],["\u2035","\u2018"],["\u2032","\u2019"],["\u2036","\u201c"],["\u2033","\u201d"]]}}();O.UNICODE=Q,O.TYPESET=R,O.UNICODE.cjk=O.UNICODE.hanzi,O.UNICODE.greek=O.UNICODE.ellinika,O.UNICODE.cyrillic=O.UNICODE.kirillica,O.UNICODE.hangul=O.UNICODE.eonmun,O.UNICODE.zhuyin.ruyun=O.UNICODE.zhuyin.checked,O.TYPESET["char"].cjk=O.TYPESET["char"].hanzi,O.TYPESET["char"].greek=O.TYPESET["char"].ellinika,O.TYPESET["char"].cyrillic=O.TYPESET["char"].kirillica,O.TYPESET["char"].hangul=O.TYPESET["char"].eonmun,O.TYPESET.group.hangul=O.TYPESET.group.eonmun,O.TYPESET.group.cjk=O.TYPESET.group.hanzi;var S={id:function(a,b){return(b||J).getElementById(a)},tag:function(a,b){return this.makeArray((b||J).getElementsByTagName(a))},qs:function(a,b){return(b||J).querySelector(a)},qsa:function(a,b){return this.makeArray((b||J).querySelectorAll(a))},parent:function(a,b){return b?function(){if("function"==typeof S.matches){for(;!S.matches(a,b);){if(!a||a===J.documentElement){a=void 0;break}a=a.parentNode}return a}}():a?a.parentNode:void 0},create:function(a,b){var c="!"===a?J.createDocumentFragment():""===a?J.createTextNode(b||""):J.createElement(a);try{b&&(c.className=b)}catch(d){}return c},clone:function(a,b){return a.cloneNode("boolean"==typeof b?b:!0)},remove:function(a){return a.parentNode.removeChild(a)},setAttr:function(a,b){if("object"==typeof b){var c=b.length;if("object"==typeof b[0]&&"name"in b[0])for(var d=0;c>d;d++)void 0!==b[d].value&&a.setAttribute(b[d].name,b[d].value);else for(var e in b)b.hasOwnProperty(e)&&void 0!==b[e]&&a.setAttribute(e,b[e]);return a}},isElmt:function(a){return a&&a.nodeType===Node.ELEMENT_NODE},isIgnorable:function(a){return a?"WBR"===a.nodeName||a.nodeType===Node.COMMENT_NODE:!1},makeArray:function(a){return Array.prototype.slice.call(a)},extend:function(a,b){if(("object"==typeof a||"function"==typeof a)&&"object"==typeof b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}},T=function(b){function c(a,b,c){var d=Element.prototype,e=d.matches||d.mozMatchesSelector||d.msMatchesSelector||d.webkitMatchesSelector;return a instanceof Element?e.call(a,b):c&&/^[39]$/.test(a.nodeType)?!0:!1}var d="0.2.1",e=b.NON_INLINE_PROSE,f=b.PRESETS.prose.filterElements,g=a||{},h=g.document||void 0;if("undefined"==typeof h)throw new Error("Fibre requires a DOM-supported environment.");var i=function(a,b){return new i.fn.init(a,b)};return i.version=d,i.matches=c,i.fn=i.prototype={constructor:i,version:d,finder:[],context:void 0,portionMode:"retain",selector:{},preset:"prose",init:function(a,b){if(b&&(this.preset=null),this.selector={context:null,filter:[],avoid:[],boundary:[]},!a)throw new Error("A context is required for Fibre to initialise.");return a instanceof Node?a instanceof Document?this.context=a.body||a:this.context=a:"string"==typeof a&&(this.context=h.querySelector(a),this.selector.context=a),this},filterFn:function(a){var b=this.selector.filter.join(", ")||"*",d=this.selector.avoid.join(", ")||null,e=c(a,b,!0)&&!c(a,d);return"prose"===this.preset?f(a)&&e:e},boundaryFn:function(a){var b=this.selector.boundary.join(", ")||null,d=c(a,b);return"prose"===this.preset?e(a)||d:d},filter:function(a){return"string"==typeof a&&this.selector.filter.push(a),this},endFilter:function(a){return a?this.selector.filter=[]:this.selector.filter.pop(),this},avoid:function(a){return"string"==typeof a&&this.selector.avoid.push(a),this},endAvoid:function(a){return a?this.selector.avoid=[]:this.selector.avoid.pop(),this},addBoundary:function(a){return"string"==typeof a&&this.selector.boundary.push(a),this},removeBoundary:function(){return this.selector.boundary=[],this},setMode:function(a){return this.portionMode="first"===a?"first":"retain",this},replace:function(a,c){var d=this;return d.finder.push(b(d.context,{find:a,replace:c,filterElements:function(a){return d.filterFn(a)},forceContext:function(a){return d.boundaryFn(a)},portionMode:d.portionMode})),d},wrap:function(a,c){var d=this;return d.finder.push(b(d.context,{find:a,wrap:c,filterElements:function(a){return d.filterFn(a)},forceContext:function(a){return d.boundaryFn(a)},portionMode:d.portionMode})),d},revert:function(a){var b=this.finder.length,a=Number(a)||(0===a?Number(0):"all"===a?b:1);if("undefined"==typeof b||0===b)return this;a>b&&(a=b);for(var c=a;c>0;c--)this.finder.pop().revert();return this}},i.fn.filterOut=i.fn.avoid,i.fn.init.prototype=i.fn,i}(function(){function a(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function b(){return c.apply(null,arguments)||d.apply(null,arguments)}function c(a,c,e,f,g){if(c&&!c.nodeType&&arguments.length<=2)return!1;var h="function"==typeof e;h&&(e=function(a){return function(b,c){return a(b.text,c.startIndex)}}(e));var i=d(c,{find:a,wrap:h?null:e,replace:h?e:"$"+(f||"&"),prepMatch:function(a,b){if(!a[0])throw"findAndReplaceDOMText cannot handle zero-length matches";if(f>0){var c=a[f];a.index+=a[0].indexOf(c),a[0]=c}return a.endIndex=a.index+a[0].length,a.startIndex=a.index,a.index=b,a},filterElements:g});return b.revert=function(){return i.revert()},!0}function d(a,b){return new e(a,b)}function e(a,c){var d=c.preset&&b.PRESETS[c.preset];if(c.portionMode=c.portionMode||f,d)for(var e in d)i.call(d,e)&&!i.call(c,e)&&(c[e]=d[e]);this.node=a,this.options=c,this.prepMatch=c.prepMatch||this.prepMatch,this.reverts=[],this.matches=this.search(),this.matches.length&&this.processMatches()}var f="retain",g="first",h=J,i=({}.toString,{}.hasOwnProperty);return b.NON_PROSE_ELEMENTS={br:1,hr:1,script:1,style:1,img:1,video:1,audio:1,canvas:1,svg:1,map:1,object:1,input:1,textarea:1,select:1,option:1,optgroup:1,button:1},b.NON_CONTIGUOUS_PROSE_ELEMENTS={address:1,article:1,aside:1,blockquote:1,dd:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,nav:1,noscript:1,ol:1,output:1,p:1,pre:1,section:1,ul:1,br:1,li:1,summary:1,dt:1,details:1,rp:1,rt:1,rtc:1,script:1,style:1,img:1,video:1,audio:1,canvas:1,svg:1,map:1,object:1,input:1,textarea:1,select:1,option:1,optgroup:1,button:1,table:1,tbody:1,thead:1,th:1,tr:1,td:1,caption:1,col:1,tfoot:1,colgroup:1},b.NON_INLINE_PROSE=function(a){return i.call(b.NON_CONTIGUOUS_PROSE_ELEMENTS,a.nodeName.toLowerCase())},b.PRESETS={prose:{forceContext:b.NON_INLINE_PROSE,filterElements:function(a){return!i.call(b.NON_PROSE_ELEMENTS,a.nodeName.toLowerCase())}}},b.Finder=e,e.prototype={search:function(){function b(a){for(var g=0,j=a.length;j>g;++g){var k=a[g];if("string"==typeof k){if(f.global)for(;c=f.exec(k);)h.push(i.prepMatch(c,d++,e));else(c=k.match(f))&&h.push(i.prepMatch(c,0,e));e+=k.length}else b(k)}}var c,d=0,e=0,f=this.options.find,g=this.getAggregateText(),h=[],i=this;return f="string"==typeof f?RegExp(a(f),"g"):f,b(g),h},prepMatch:function(a,b,c){if(!a[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return a.endIndex=c+a.index+a[0].length,a.startIndex=c+a.index,a.index=b,a},getAggregateText:function(){function a(d,e){if(3===d.nodeType)return[d.data];if(b&&!b(d))return[];var e=[""],f=0;if(d=d.firstChild)do if(3!==d.nodeType){var g=a(d);c&&1===d.nodeType&&(c===!0||c(d))?(e[++f]=g,e[++f]=""):("string"==typeof g[0]&&(e[f]+=g.shift()),g.length&&(e[++f]=g,e[++f]=""))}else e[f]+=d.data;while(d=d.nextSibling);return e}var b=this.options.filterElements,c=this.options.forceContext;return a(this.node)},processMatches:function(){var a,b,c,d=this.matches,e=this.node,f=this.options.filterElements,g=[],h=e,i=d.shift(),j=0,k=0,l=0,m=[e];a:for(;;){if(3===h.nodeType&&(!b&&h.length+j>=i.endIndex?b={node:h,index:l++,text:h.data.substring(i.startIndex-j,i.endIndex-j),indexInMatch:j-i.startIndex,indexInNode:i.startIndex-j,endIndexInNode:i.endIndex-j,isEnd:!0}:a&&g.push({node:h,index:l++,text:h.data,indexInMatch:j-i.startIndex,indexInNode:0}),!a&&h.length+j>i.startIndex&&(a={node:h,index:l++,indexInMatch:0,indexInNode:i.startIndex-j,endIndexInNode:i.endIndex-j,text:h.data.substring(i.startIndex-j,i.endIndex-j)}),j+=h.data.length),c=1===h.nodeType&&f&&!f(h),a&&b){if(h=this.replaceMatch(i,a,g,b),j-=b.node.data.length-b.endIndexInNode,a=null,b=null,g=[],i=d.shift(),l=0,k++,!i)break}else if(!c&&(h.firstChild||h.nextSibling)){h.firstChild?(m.push(h),h=h.firstChild):h=h.nextSibling;continue}for(;;){if(h.nextSibling){h=h.nextSibling;break}if(h=m.pop(),h===e)break a}}},revert:function(){for(var a=this.reverts.length;a--;)this.reverts[a]();this.reverts=[]},prepareReplacementString:function(a,b,c,d){var e=this.options.portionMode;return e===g&&b.indexInMatch>0?"":(a=a.replace(/\$(\d+|&|`|')/g,function(a,b){var d;switch(b){case"&":d=c[0];break;case"`":d=c.input.substring(0,c.startIndex);break;case"'":d=c.input.substring(c.endIndex);break;default:d=c[+b]}return d}),e===g?a:b.isEnd?a.substring(b.indexInMatch):a.substring(b.indexInMatch,b.indexInMatch+b.text.length))},getPortionReplacementNode:function(a,b,c){var d=this.options.replace||"$&",e=this.options.wrap;if(e&&e.nodeType){var f=h.createElement("div");f.innerHTML=e.outerHTML||(new XMLSerializer).serializeToString(e),e=f.firstChild}if("function"==typeof d)return d=d(a,b,c),d&&d.nodeType?d:h.createTextNode(String(d));var g="string"==typeof e?h.createElement(e):e;return d=h.createTextNode(this.prepareReplacementString(d,a,b,c)),d.data&&g?(g.appendChild(d),g):d},replaceMatch:function(a,b,c,d){var e,f,g=b.node,i=d.node;if(g===i){var j=g;b.indexInNode>0&&(e=h.createTextNode(j.data.substring(0,b.indexInNode)),j.parentNode.insertBefore(e,j));var k=this.getPortionReplacementNode(d,a);return j.parentNode.insertBefore(k,j),d.endIndexInNoden;++n){var p=c[n],q=this.getPortionReplacementNode(p,a);p.node.parentNode.replaceChild(q,p.node),this.reverts.push(function(a,b){return function(){b.parentNode.replaceChild(a.node,b)}}(p,q)),m.push(q)}var r=this.getPortionReplacementNode(d,a);return g.parentNode.insertBefore(e,g),g.parentNode.insertBefore(l,g),g.parentNode.removeChild(g),i.parentNode.insertBefore(r,i),i.parentNode.insertBefore(f,i),i.parentNode.removeChild(i),this.reverts.push(function(){e.parentNode.removeChild(e),l.parentNode.replaceChild(g,l),f.parentNode.removeChild(f),r.parentNode.replaceChild(i,r)}),r}},b}()),U=function(){var a=S.create("div");return a.appendChild(S.create("","0-")),a.appendChild(S.create("","2")),a.normalize(),2!==a.firstChild.length}();S.extend(T.fn,{normalize:function(){return U&&this.context.normalize(),this},jinzify:function(a){return this.filter(a||null).avoid("h-jinze").replace(R.jinze.touwei,function(a,b){var c=S.create("h-jinze","touwei");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).replace(R.jinze.wei,function(a,b){var c=S.create("h-jinze","wei");return c.innerHTML=b[0],0===a.index?c:""}).replace(R.jinze.tou,function(a,b){var c=S.create("h-jinze","tou");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).replace(R.jinze.middle,function(a,b){var c=S.create("h-jinze","middle");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).endAvoid().endFilter()},groupify:function(a){var a=S.extend({biaodian:!1,hanzi:!1,kana:!1,eonmun:!1,western:!1},a||{});return this.avoid("h-word, h-char-group"),a.biaodian&&this.replace(R.group.biaodian[0],d).replace(R.group.biaodian[1],d),(a.hanzi||a.cjk)&&this.wrap(R.group.hanzi,S.clone(S.create("h-char-group","hanzi cjk"))),a.western&&this.wrap(R.group.western,S.clone(S.create("h-word","western"))),a.kana&&this.wrap(R.group.kana,S.clone(S.create("h-char-group","kana"))),(a.eonmun||a.hangul)&&this.wrap(R.group.eonmun,S.clone(S.create("h-word","eonmun hangul"))),this.endAvoid(),this},charify:function(a){var a=S.extend({avoid:!0,biaodian:!1,punct:!1,hanzi:!1,latin:!1,ellinika:!1,kirillica:!1,kana:!1,eonmun:!1},a||{});return a.avoid&&this.avoid("h-char"),a.biaodian&&this.replace(R["char"].biaodian.all,c(a.biaodian)||function(a){return e(a.text)}).replace(R["char"].biaodian.liga,c(a.biaodian)||function(a){return e(a.text)}),(a.hanzi||a.cjk)&&this.wrap(R["char"].hanzi,c(a.hanzi||a.cjk)||S.clone(S.create("h-char","hanzi cjk"))),a.punct&&this.wrap(R["char"].punct.all,c(a.punct)||S.clone(S.create("h-char","punct"))),a.latin&&this.wrap(R["char"].latin,c(a.latin)||S.clone(S.create("h-char","alphabet latin"))),(a.ellinika||a.greek)&&this.wrap(R["char"].ellinika,c(a.ellinika||a.greek)||S.clone(S.create("h-char","alphabet ellinika greek"))),(a.kirillica||a.cyrillic)&&this.wrap(R["char"].kirillica,c(a.kirillica||a.cyrillic)||S.clone(S.create("h-char","alphabet kirillica cyrillic"))),a.kana&&this.wrap(R["char"].kana,c(a.kana)||S.clone(S.create("h-char","kana"))),(a.eonmun||a.hangul)&&this.wrap(R["char"].eonmun,c(a.eonmun||a.hangul)||S.clone(S.create("h-char","eonmun hangul"))),this.endAvoid(),this}}),S.extend(O,{isNodeNormalizeNormal:U,find:T,createBDGroup:d,createBDChar:e}),S.matches=O.find.matches,void["setMode","wrap","replace","revert","addBoundary","removeBoundary","avoid","endAvoid","filter","endFilter","jinzify","groupify","charify"].forEach(function(a){O.fn[a]=function(){return this.finder||(this.finder=O.find(this.context)),this.finder[a](arguments[0],arguments[1]),this}});var V={};V.writeOnCanvas=g,V.compareCanvases=h,V.detectFont=i,V.support=function(){function b(a){var b,c=a.charAt(0).toUpperCase()+a.slice(1),d=(a+" "+e.join(c+" ")+c).split(" ");return d.forEach(function(a){"string"==typeof f.style[a]&&(b=!0)}),b||!1}function c(a,b){var c,d,e,f=L||S.create("body"),g=S.create("div"),h=L?g:f,b="function"==typeof b?b:function(){};return c=[""].join(""),h.innerHTML+=c,f.appendChild(g),L||(f.style.background="",f.style.overflow="hidden",e=K.style.overflow,K.style.overflow="hidden",K.appendChild(f)),d=b(h,a),S.remove(h),L||(K.style.overflow=e),!!d}function d(b,c){var d;return a.getComputedStyle?d=J.defaultView.getComputedStyle(b,null).getPropertyValue(c):b.currentStyle&&(d=b.currentStyle[c]),d}var e="Webkit Moz ms".split(" "),f=S.create("h-test");return{columnwidth:b("columnWidth"),fontface:function(){var a;return c('@font-face { font-family: font; src: url("//"); }',function(b,c){var d=S.qsa("style",b)[0],e=d.sheet||d.styleSheet,f=e?e.cssRules&&e.cssRules[0]?e.cssRules[0].cssText:e.cssText||"":"";a=/src/i.test(f)&&0===f.indexOf(c.split(" ")[0])}),a}(),ruby:function(){var a,b=S.create("ruby"),c=S.create("rt"),e=S.create("rp");return b.appendChild(e),b.appendChild(c),K.appendChild(b),a="none"===d(e,"display")||"ruby"===d(b,"display")&&"ruby-text"===d(c,"display")?!0:!1,K.removeChild(b),b=null,c=null,e=null,a}(),"ruby-display":function(){var a=S.create("div");return a.innerHTML='',"ruby"===a.querySelector("h-test-a").style.display&&"ruby-text-container"===a.querySelector("h-test-b").style.display}(),"ruby-interchar":function(){var a,b="inter-character",c=S.create("div");return c.innerHTML='',a=c.querySelector("h-test").style,a.rubyPosition===b||a.WebkitRubyPosition===b||a.MozRubyPosition===b||a.msRubyPosition===b}(),textemphasis:b("textEmphasis"),unicoderange:function(){var a;return c('@font-face{font-family:test-for-unicode-range;src:local(Arial),local("Droid Sans")}@font-face{font-family:test-for-unicode-range;src:local("Times New Roman"),local(Times),local("Droid Serif");unicode-range:U+270C}',function(){a=!V.detectFont("test-for-unicode-range",'Arial, "Droid Sans"',"Q")}),a}(),writingmode:b("writingMode")}}(),V.initCond=function(a){var b,a=a||K,c="";for(var d in V.support)b=(V.support[d]?"":"no-")+d,a.classList.add(b),c+=b+" ";return c};var W=V.support["ruby-interchar"];S.extend(V,{renderRuby:function(a,b){var b=b||"ruby",c=S.qsa(b,a);S.qsa("rtc",a).concat(c).map(n),c.forEach(function(a){var b,c=a.classList;c.contains("complex")?b=l(a):c.contains("zhuyin")&&(b=W?k(a):j(a)),b&&a.parentNode.replaceChild(b,a)})},simplifyRubyClass:n,getZhuyinHTML:q,renderComplexRuby:l,renderSimpleRuby:j,renderInterCharRuby:k}),S.extend(V,{renderElem:function(a){this.renderRuby(a),this.renderDecoLine(a),this.renderDecoLine(a,"s, del"),this.renderEm(a)},renderDecoLine:function(a,b){var c=S.qsa(b||"u, ins",a),d=c.length;a:for(;d--;){var e=c[d],f=null;do{if(f=(f||e).previousSibling,!f)continue a;c[d-1]===f&&e.classList.add("adjacent")}while(S.isIgnorable(f))}},renderEm:function(a,b){var c=b?"qsa":"tag",b=b||"em",d=S[c](b,a);d.forEach(function(a){var b=O(a);V.support.textemphasis?b.avoid("rt, h-char").charify({biaodian:!0,punct:!0}):b.avoid("rt, h-char, h-char-group").jinzify().groupify({western:!0}).charify({hanzi:!0,biaodian:!0,punct:!0,latin:!0,ellinika:!0,kirillica:!0})})}}),O.normalize=V,O.localize=V,O.support=V.support,O.detectFont=V.detectFont,O.fn.initCond=function(){return this.condition.classList.add("han-js-rendered"),O.normalize.initCond(this.condition),this},void["Elem","DecoLine","Em","Ruby"].forEach(function(a){var b="render"+a;O.fn[b]=function(a){return O.normalize[b](this.context,a),this}}),S.extend(O.support,{heiti:!0,songti:O.detectFont('"Han Songti"'),"songti-gb":O.detectFont('"Han Songti GB"'),kaiti:O.detectFont('"Han Kaiti"'),fangsong:O.detectFont('"Han Fangsong"')}),O.correctBiaodian=function(a){var a=a||J,b=O.find(a);return b.avoid("h-char").replace(/([\u2018\u201c])/g,function(a){var b=O.createBDChar(a.text);return b.classList.add("bd-open","punct"),b}).replace(/([\u2019\u201d])/g,function(a){var b=O.createBDChar(a.text);return b.classList.add("bd-close","bd-end","punct"),b}),O.support.unicoderange?b:b.charify({biaodian:!0})},O.correctBasicBD=O.correctBiaodian,O.correctBD=O.correctBiaodian,S.extend(O.fn,{biaodian:null,correctBiaodian:function(){return this.biaodian=O.correctBiaodian(this.context),this},revertCorrectedBiaodian:function(){try{this.biaodian.revert("all")}catch(a){}return this}}),O.fn.correctBasicBD=O.fn.correctBiaodian,O.fn.revertBasicBD=O.fn.revertCorrectedBiaodian;var X="<>",Y=S.create("h-hws");Y.setAttribute("hidden",""),Y.innerHTML=" ";var Z;S.extend(O,{renderHWS:function(a,b){var c=b?"textarea, code, kbd, samp, pre":"textarea",d=b?"strict":"base",a=a||J,e=O.find(a); -return e.avoid(c).replace(O.TYPESET.hws[d][0],t).replace(O.TYPESET.hws[d][1],t).replace(new RegExp("("+X+")+","g"),u).replace(/([\'"])\s(.+?)\s\1/g,v).replace(/\s[\u2018\u201c]/g,w).replace(/[\u2019\u201d]\s/g,w).normalize(),e}}),S.extend(O.fn,{renderHWS:function(a){return O.renderHWS(this.context,a),this},revertHWS:function(){return S.tag("h-hws",this.context).forEach(function(a){S.remove(a)}),this.HWS=[],this}});var $="bd-hangable",_="h-char.bd-hangable",aa='',ba=O.find.matches;O.support["han-space"]=x(),S.extend(O,{detectSpaceFont:x,isSpaceFontLoaded:x(),renderHanging:function(a){var a=a||J,b=O.find(a);return b.avoid("textarea, code, kbd, samp, pre").avoid(_).replace(R.jinze.hanging,function(a){if(/^[\x20\t\r\n\f]+$/.test(a.text))return"";var b,c,d,e,f=a.node.parentNode;return(b=S.parent(f,"h-jinze"))&&y(b),e=a.text.trim(),c=O.createBDChar(e),c.innerHTML=""+e+"",c.classList.add($),d=S.parent(f,"h-char.biaodian"),d?function(){return d.classList.add($),ba(f,"h-inner, h-inner *")?e:c.firstChild}():c}),b}}),S.extend(O.fn,{renderHanging:function(){var a=this.condition.classList;return O.isSpaceFontLoaded=x(),O.isSpaceFontLoaded&&a.contains("no-han-space")&&(a.remove("no-han-space"),a.add("han-space")),O.renderHanging(this.context),this},revertHanging:function(){return S.qsa("h-char.bd-hangable, h-cs.hangable-outer",this.context).forEach(function(a){var b=a.classList;b.remove("bd-hangable"),b.remove("hangable-outer")}),this}});var ca,da,ea="bd-jiya",fa="h-char.bd-jiya",ga="bd-consecutive",ha='',ba=O.find.matches;O.renderJiya=function(a){var a=a||J,b=O.find(a);return b.avoid("textarea, code, kbd, samp, pre, h-cs").avoid(fa).charify({avoid:!1,biaodian:A}).endAvoid().avoid("textarea, code, kbd, samp, pre, h-cs").replace(R.group.biaodian[0],B).replace(R.group.biaodian[1],B),b},S.extend(O.fn,{renderJiya:function(){return O.renderJiya(this.context),this},revertJiya:function(){return S.qsa("h-char.bd-jiya, h-cs.jiya-outer",this.context).forEach(function(a){var b=a.classList;b.remove("bd-jiya"),b.remove("jiya-outer")}),this}});var ia="textarea, code, kbd, samp, pre",ja=S.create("h-char","comb-liga");return S.extend(O,{isVowelCombLigaNormal:F(),isVowelICombLigaNormal:G(),isZhuyinCombLigaNormal:H(),isCombLigaNormal:G()(),substVowelCombLiga:I(O.TYPESET["display-as"]["comb-liga-vowel"]),substZhuyinCombLiga:I(O.TYPESET["display-as"]["comb-liga-zhuyin"]),substCombLigaWithPUA:I(O.TYPESET["display-as"]["comb-liga-pua"]),substInaccurateChar:function(a){var a=a||J,b=O.find(a);b.avoid(ia),O.TYPESET["inaccurate-char"].forEach(function(a){b.replace(new RegExp(a[0],"ig"),a[1])})}}),S.extend(O.fn,{"comb-liga-vowel":null,"comb-liga-vowel-i":null,"comb-liga-zhuyin":null,"inaccurate-char":null,substVowelCombLiga:function(){return this["comb-liga-vowel"]=O.substVowelCombLiga(this.context),this},substVowelICombLiga:function(){return this["comb-liga-vowel-i"]=O.substVowelICombLiga(this.context),this},substZhuyinCombLiga:function(){return this["comb-liga-zhuyin"]=O.substZhuyinCombLiga(this.context),this},substCombLigaWithPUA:function(){return O.isVowelCombLigaNormal()?O.isVowelICombLigaNormal()||(this["comb-liga-vowel-i"]=O.substVowelICombLiga(this.context)):this["comb-liga-vowel"]=O.substVowelCombLiga(this.context),O.isZhuyinCombLigaNormal()||(this["comb-liga-zhuyin"]=O.substZhuyinCombLiga(this.context)),this},revertVowelCombLiga:function(){try{this["comb-liga-vowel"].revert("all")}catch(a){}return this},revertVowelICombLiga:function(){try{this["comb-liga-vowel-i"].revert("all")}catch(a){}return this},revertZhuyinCombLiga:function(){try{this["comb-liga-zhuyin"].revert("all")}catch(a){}return this},revertCombLigaWithPUA:function(){try{this["comb-liga-vowel"].revert("all"),this["comb-liga-vowel-i"].revert("all"),this["comb-liga-zhuyin"].revert("all")}catch(a){}return this},substInaccurateChar:function(){return this["inaccurate-char"]=O.substInaccurateChar(this.context),this},revertInaccurateChar:function(){try{this["inaccurate-char"].revert("all")}catch(a){}return this}}),a.addEventListener("DOMContentLoaded",function(){var a;K.classList.contains("han-init")?O.init():(a=J.querySelector(".han-init-context"))&&(O.init=O(a).render())}),("undefined"==typeof b||b===!1)&&(a.Han=O),O}); \ No newline at end of file diff --git a/lib/algolia-instant-search/instantsearch.min.css b/lib/algolia-instant-search/instantsearch.min.css deleted file mode 100644 index 590f6f9..0000000 --- a/lib/algolia-instant-search/instantsearch.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! instantsearch.js 1.5.0 | © Algolia Inc. and other contributors; Licensed MIT | github.com/algolia/instantsearch.js */.ais-search-box--powered-by{font-size:.8em;text-align:right;margin-top:2px}.ais-search-box--powered-by-link{display:inline-block;width:45px;height:16px;text-indent:101%;overflow:hidden;white-space:nowrap;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAAAgCAYAAABwzXTcAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjVlhTJlAAAIJElEQVRoQ+1Za2xURRTugqJVEBAlhICBRFEQeRfodssqiDZaS8vu3dsXVlAbxReJwVfAoqJ/sBqE3S1IgqgBrY9EQ6KJiUAokUfpvQUKogIBlKbyEEUolNL6ndkzw9129+72YaFJv+Rk737nzMyZ756dmXs3oQtd6EJ7oaioqJvX603kr1cl8vPzb+TLzo3MzMx+Xk0r03y+0x5Ne4vpqwoohjeQ4yHYcaYiwcGfVz+ysrIGQfBGsqtWdE37lvLz+nwnmVLIyMjoBd9GxPwL/wKmOw4zCgr6YPBNSGILEviYaVt0dtHxK/DK/BFXq2lad3Z1DJDUqzIBYZrmYldUdLToI4r29HCWmLozUPmEK2AUOgOmRysttRXKTnSPxzMWfD37q0B13DJTUFBwPQatlgKKJJAsu6Oio0VPDlQsTgmajWEWMOaxOyLsRCdQccGez87OHshUxwAJzZbiIYFKkaSmXdJ1fRiHRERHi+4MGk+mBMwXnSVGPj7nQPS3qeLZHRGxRL9ScCAxk8Ur92Rnj5VCItHlHBMRrRDdQRXl8/nG4eaOp5uKz57sC8OkoDEkOWCO5K8CtJRgabnT6TfuS/ZXOKet2duPXVHRDqI7svLz+yPnJCxH07ANuGFDiQ+5WwF0NkWJrOuziEOCm5n7Jy8v7yYRGAHxio4kEyHuK+j3oIyXRr8o2G/wrUXMGIonQbFe18Kq3Ms39By/orw3KnsxKr06fHkxLjkDxubkEuNhMVAE2Ikuni98vsMYtwafQaYVwLvQ9qg1X2mI/xXzyuXQlgGNP+NO/kxLS7tOcOhMda7rz4rACIhH9Ky8vEGY+G4ZZ2ua9hi1gbhvQvBDScu3DUC1j8X1YSV0wDgLsX9m7tJl3lw9onRPDzGoBTFFp1NLyL+WaQUU5GSZG+IuIeYCrhskJ3ivN6o+EYFJDuCOaNBipuXGepI73gMq4k8pluh0E5GsXLoo8U1IMgPLyhDYYExqNL6/Lv1S9FT/7sHOkp0TXCvNYbgBp0hUfB6A2D6rsKn+7YMh9nvOoHkxJL6xLiGhMSzXtoiOfHqDn41ch5MmFC+O1ihEtDnP7c5QHDeJDTSQx8QGTH4E0wLwLWVfo0fXU5kOQyzR0ecL0o/EvoI1O95ZlzcpugAmiKVjKwu+1f2+0Yc9As5VZb3gX4JfQn9XwEyH+HUi1m/kc4hAW0S3A3J9TeaNOWQybQ8aEA0O8IDbmFagM6zsFP5PmA5DTNF5WUH7c7QZMR2GaKK7Ssw0FvyMe2XlIKYVUkrMR4Q/YB6b4t85HKIv5Pj9CY2Xq/3/Ep2qX+aN4prPtD0w2ftlI0z2GaatsJ5qztLPinkFO9Fzc3P7ghfrH/r5nulmiCY6qnhVSEQz4gkKIvvJD2sQS8yqfb3wifWeuN2jOazdRIewibQszszJuYO0yMnJuUXmjbZFHGYPTHAdN7iQOWtWxKMXfPNkx5FujJ3oEHOk9KGfpUw3QzTRsWHuCAloZDFlQaMDN+Ugqrocy8tUJulG/Mg34lGm2iR6YWHhteDnIq8diLmo8gwV0zH5HTGxRcddu1kOhg6PotGCKKbWdVg5N1eIIfpo1VbT3mW6GWxE30cCulbscjOlkLRsb7+UQGUuVOvGlABu0JdC9IChCqS1olNlg9+ocqOY0PG2FrHi1YHi4xJd15+2NorTaLO9h7sQsBOdTieqLX5VTDdD9OXFLCMBm26MdqANV7QpMXWm2iK69VS1AXmm0AmGfOIX4PUmS398omPjFME0oKZtsTPEqDM22qljJcFOdLTtDv4E+2vkM0BT2FR6sRAwaJQyZYuJ2Gyx5NSj2htSPzDpiVGg1aLzfga+mqqeaQX6L0HmjRh70a27Lib5KdNRgZjelsSq3W73NewKEx1xYaITwJVY/IuYDkM00Scv2zGOBETF1+MkM4npqIDga8RNwhMqUwKtFt3n+13wmlbGVBhaJDom9o4MxoQfYtoW6PQLNYDXqx65cX2r4n2+j5hWoN0e/BmOoeUpgDFH0qsFXA+FPQ5/lezDKjoBoq8Ta3TQ/MPl3zWK6XBAOMQtCglu1qcsN8NeScvcIV5d01cadqIjF9o8qd0p+rODaYW4RedBjnBwjbVq7QChPJYBPmda9Ef9sO88fC/NnDnzLnYL4MFqBvk4xt6aiO5ebfSBoLu5gmtxXZzsr0hyBXb1xRFxYHKwwivXfrJkv/EyN1VAn4tk/8hvPebyIK3J5ItR6Qssee1Ageh4drkbn7dT4fC8ZL/RRUeDqZZA2zeIVqAd7eSnud05JKEee3GtnsyEYUlhlwK4MWi3HiZeOVjsF/g+VN+biE6gN4nOYOV3UtiIhvO5028+xU3CgD5vg7B/yzFwXSf3FzvR6Y9s+Lar3GwMbW1Ex7kbHW0iw12bwHRcQPILVVtdn8Y0wYF+52LwChhV+3PMN8N0TARVQu9bJtKLMFAO5HGvSh7VFIpsikaHeNQPGt9A5JMkNG2asP2wJfSuhgMjwpOdPQp5fY0xTiD/vUxL0X8Q88JphWkF8Q5K1+dj7hVoby2Yi+Bq0G4nPkvRdjo36XiI5aaF/zNiUur9DN0Mpu3gmFx8JHH8inKxRLQUcmlpKWhesN4Zc+b0aukcrwSivuynR2lUkHjHjqo53lpBumABKjcRolbBluJ6FpaWKVTNWJ4eQLXQXnD5DwJ852ZdaAsgsvoTwM5wU1Z3hp9spwCqeigELcbS8RPE/QvX9M6iAd/rcH0YtrbJptyFdoYD1dwjPT39hnifD7rQhTiRkPAfxnOcWpCmnRwAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:contain;vertical-align:middle}.ais-pagination--item{display:inline-block;padding:3px}.ais-range-slider--value,.ais-range-slider--value-sub{font-size:.8em;padding-top:15px}.ais-pagination--item__disabled{visibility:hidden}.ais-hierarchical-menu--list__lvl1,.ais-hierarchical-menu--list__lvl2{margin-left:10px}.ais-range-slider--target{position:relative;direction:ltr;background:#F3F4F7;height:6px;margin-top:2em;margin-bottom:2em}.ais-range-slider--base{height:100%;position:relative;z-index:1;border-top:1px solid #DDD;border-bottom:1px solid #DDD;border-left:2px solid #DDD;border-right:2px solid #DDD}.ais-range-slider--origin{position:absolute;right:0;top:0;left:0;bottom:0}.ais-range-slider--connect{background:#46AEDA}.ais-range-slider--background{background:#F3F4F7}.ais-range-slider--handle{width:20px;height:20px;position:relative;z-index:1;background:#FFF;border:1px solid #46AEDA;border-radius:50%;cursor:pointer}.ais-range-slider--handle-lower{left:-10px;bottom:7px}.ais-range-slider--handle-upper{right:10px;bottom:7px}.ais-range-slider--tooltip{position:absolute;background:#FFF;top:-22px;font-size:.8em}.ais-range-slider--pips{box-sizing:border-box;position:absolute;height:3em;top:100%;left:0;width:100%}.ais-range-slider--value{width:40px;position:absolute;text-align:center;margin-left:-20px}.ais-range-slider--marker{position:absolute;background:#DDD;margin-left:-1px;width:1px;height:5px}.ais-range-slider--marker-sub{background:#DDD;width:2px;margin-left:-2px;height:13px}.ais-range-slider--marker-large{background:#DDD;width:2px;margin-left:-2px;height:12px}.ais-star-rating--star,.ais-star-rating--star__empty{display:inline-block;width:1em;height:1em}.ais-range-slider--marker-large:first-child{margin-left:0}.ais-star-rating--item{vertical-align:middle}.ais-star-rating--item__active{font-weight:700}.ais-star-rating--star:before{content:'\2605';color:#FBAE00}.ais-star-rating--star__empty:before{content:'\2606';color:#FBAE00}.ais-star-rating--link__disabled .ais-star-rating--star:before,.ais-star-rating--link__disabled .ais-star-rating--star__empty:before{color:#C9C9C9}.ais-root__collapsible .ais-header{cursor:pointer}.ais-root__collapsed .ais-body,.ais-root__collapsed .ais-footer{display:none} \ No newline at end of file diff --git a/lib/algolia-instant-search/instantsearch.min.js b/lib/algolia-instant-search/instantsearch.min.js deleted file mode 100644 index 2bd5d59..0000000 --- a/lib/algolia-instant-search/instantsearch.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/*! instantsearch.js 1.5.0 | © Algolia Inc. and other contributors; Licensed MIT | github.com/algolia/instantsearch.js */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.instantsearch=t():e.instantsearch=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}var o=n(1),i=r(o);e.exports=i["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0}),n(2),n(3);var o=n(4),i=r(o),a=n(5),s=r(a),u=n(99),l=r(u),c=n(222),f=r(c),p=n(400),d=r(p),h=n(404),m=r(h),v=n(408),g=r(v),y=n(411),b=r(y),_=n(416),C=r(_),w=n(420),x=r(w),P=n(422),E=r(P),R=n(424),S=r(R),O=n(425),T=r(O),k=n(432),N=r(k),j=n(437),A=r(j),M=n(439),F=r(M),I=n(443),D=r(I),U=n(444),L=r(U),H=n(447),V=r(H),B=n(450),q=r(B),W=n(220),K=r(W),Q=(0,i["default"])(s["default"]);Q.widgets={clearAll:f["default"],currentRefinedValues:d["default"],hierarchicalMenu:m["default"],hits:g["default"],hitsPerPageSelector:b["default"],menu:C["default"],refinementList:x["default"],numericRefinementList:E["default"],numericSelector:S["default"],pagination:T["default"],priceRanges:N["default"],searchBox:A["default"],rangeSlider:F["default"],sortBySelector:D["default"],starRating:L["default"],stats:V["default"],toggle:q["default"]},Q.version=K["default"],Q.createQueryString=l["default"].url.getQueryStringFromState,t["default"]=Q},function(e,t){"use strict";Object.freeze||(Object.freeze=function(e){if(Object(e)!==e)throw new TypeError("Object.freeze can only be called on Objects.");return e})},function(e,t){"use strict";var n={};if(!Object.setPrototypeOf&&!n.__proto__){var r=Object.getPrototypeOf;Object.getPrototypeOf=function(e){return e.__proto__?e.__proto__:r.call(Object,e)}}},function(e,t){"use strict";function n(e){var t=function(){for(var t=arguments.length,n=Array(t),o=0;t>o;o++)n[o]=arguments[o];return new(r.apply(e,[null].concat(n)))};return t.__proto__=e,t.prototype=e.prototype,t}var r=Function.prototype.bind;e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(){return"#"}function u(e,t){if(!t.getConfiguration)return e;var n=t.getConfiguration(e);return(0,y["default"])({},e,n,function(e,t){return Array.isArray(e)?(0,_["default"])(e,t):void 0})}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;te;e+=2){var t=re[e],n=re[e+1];t(n),re[e]=void 0,re[e+1]=void 0}G=0}function v(){try{var e=n(11);return Q=e.runOnLoop||e.runOnContext,f()}catch(t){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(b),i=n._result;if(r){var a=arguments[r-1];X(function(){F(r,o,a,i)})}else N(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(b);return S(n,e),n}function b(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function C(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return le.error=t,le}}function x(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function P(e,t,n){X(function(e){var r=!1,o=x(n,t,function(n){r||(r=!0,t!==n?S(e,n):T(e,n))},function(t){r||(r=!0,k(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,k(e,o))},e)}function E(e,t){t._state===se?T(e,t._result):t._state===ue?k(e,t._result):N(t,void 0,function(t){S(e,t)},function(t){k(e,t)})}function R(e,t,n){t.constructor===e.constructor&&n===oe&&constructor.resolve===ie?E(e,t):n===le?k(e,le.error):void 0===n?T(e,t):s(n)?P(e,t,n):T(e,t)}function S(e,t){e===t?k(e,_()):a(t)?R(e,t,w(t)):T(e,t)}function O(e){e._onerror&&e._onerror(e._result),j(e)}function T(e,t){e._state===ae&&(e._result=t,e._state=se,0!==e._subscribers.length&&X(j,e))}function k(e,t){e._state===ae&&(e._state=ue,e._result=t,X(O,e))}function N(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&X(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)N(r.resolve(e[a]),void 0,t,n);return o}function L(e){var t=this,n=new t(b);return k(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function V(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],b!==e&&("function"!=typeof e&&H(),this instanceof B?I(this,e):V())}function q(e,t){this._instanceConstructor=e,this.promise=new e(b),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?T(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&T(this.promise,this._result))):k(this.promise,this._validationError())}function W(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=me)}var K;K=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var Q,$,z,Y=K,G=0,X=function(e,t){re[G]=e,re[G+1]=t,G+=2,2===G&&($?$(m):z())},J="undefined"!=typeof window?window:void 0,Z=J||{},ee=Z.MutationObserver||Z.WebKitMutationObserver,te="undefined"!=typeof e&&"[object process]"==={}.toString.call(e),ne="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3);z=te?c():ee?p():ne?d():void 0===J?v():h();var oe=g,ie=y,ae=void 0,se=1,ue=2,le=new A,ce=new A,fe=D,pe=U,de=L,he=0,me=B;B.all=fe,B.race=pe,B.resolve=ie,B.reject=de,B._setScheduler=u,B._setAsap=l,B._asap=X,B.prototype={constructor:B,then:oe,"catch":function(e){return this.then(null,e)}};var ve=q;q.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},q.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ae&&e>n;n++)this._eachEntry(t[n],n)},q.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===ie){var o=w(e);if(o===oe&&e._state!==ae)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===me){var i=new n(b);R(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},q.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ae&&(this._remaining--,e===ue?k(r,n):this._result[t]=n),0===this._remaining&&T(r,this._result)},q.prototype._willSettleAt=function(e,t){var n=this;N(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=W,ye={Promise:me,polyfill:ge};n(12).amd?(r=function(){return ye}.call(t,n,t,i),!(void 0!==r&&(i.exports=r))):"undefined"!=typeof i&&i.exports?i.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),ge()}).call(this)}).call(t,n(9),function(){return this}(),n(10)(e))},function(e,t){function n(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&r()}function r(){if(!l){var e=setTimeout(n);l=!0;for(var t=u.length;t;){for(a=u,u=[];++c1)for(var n=1;n=u.hosts[e.hostType].length&&(d||!h)?u._promise.reject(r):(u.hostIndex[e.hostType]=++u.hostIndex[e.hostType]%u.hosts[e.hostType].length,r instanceof c.RequestTimeout?v():(d||(f=1/0),t(n,s)))}function v(){return u.hostIndex[e.hostType]=++u.hostIndex[e.hostType]%u.hosts[e.hostType].length,s.timeout=u.requestTimeout*(f+1),t(n,s)}var g;if(u._useCache&&(g=e.url),u._useCache&&r&&(g+="_body_"+s.body),u._useCache&&a&&void 0!==a[g])return i("serving response from cache"),u._promise.resolve(JSON.parse(a[g]));if(f>=u.hosts[e.hostType].length)return!h||d?(i("could not get any response"),u._promise.reject(new c.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+u.applicationID))):(i("switching to fallback"),f=0,s.method=e.fallback.method,s.url=e.fallback.url,s.jsonBody=e.fallback.body,s.jsonBody&&(s.body=l(s.jsonBody)),o=u._computeRequestHeaders(),s.timeout=u.requestTimeout*(f+1),u.hostIndex[e.hostType]=0,d=!0,t(u._request.fallback,s));var y=u.hosts[e.hostType][u.hostIndex[e.hostType]]+s.url,b={body:s.body,jsonBody:s.jsonBody,method:s.method,headers:o,timeout:s.timeout,debug:i};return i("method: %s, url: %s, headers: %j, timeout: %d",b.method,y,b.headers,b.timeout),n===u._request.fallback&&i("using fallback"),n.call(u,y,b).then(p,m)}var r,o,i=n(42)("algoliasearch:"+e.url),a=e.cache,u=this,f=0,d=!1,h=u._useFallback&&u._request.fallback&&e.fallback;this.apiKey.length>p&&void 0!==e.body&&void 0!==e.body.params?(e.body.apiKey=this.apiKey,o=this._computeRequestHeaders(!1)):o=this._computeRequestHeaders(),void 0!==e.body&&(r=l(e.body)),i("request start");var m=t(u._request,{url:e.url,method:e.method,body:r,jsonBody:e.body,timeout:u.requestTimeout*(f+1)});return e.callback?void m.then(function(t){s(function(){e.callback(null,t)},u._setTimeout||setTimeout)},function(t){s(function(){e.callback(t)},u._setTimeout||setTimeout)}):m},_getSearchParams:function(e,t){if(void 0===e||null===e)return t;for(var n in e)null!==n&&void 0!==e[n]&&e.hasOwnProperty(n)&&(t+=""===t?"":"&",t+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[n])?l(e[n]):e[n]));return t},_computeRequestHeaders:function(e){var t=n(15),r={"x-algolia-agent":this._ua,"x-algolia-application-id":this.applicationID};return e!==!1&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),this.extraHeaders&&t(this.extraHeaders,function(e){r[e.name]=e.value}),r}},r.prototype.Index.prototype={clearCache:function(){this.cache={}},addObject:function(e,t,n){var r=this;return 1!==arguments.length&&"function"!=typeof t||(n=t,t=void 0),this.as._jsonRequest({method:void 0!==t?"PUT":"POST",url:"/1/indexes/"+encodeURIComponent(r.indexName)+(void 0!==t?"/"+encodeURIComponent(t):""),body:e,hostType:"write",callback:n})},addObjects:function(e,t){var r=n(34),o="Usage: index.addObjects(arrayOfObjects[, callback])";if(!r(e))throw new Error(o);for(var i=this,a={requests:[]},s=0;sa&&(t=a),"published"!==e.status?c._promise.delay(t).then(n):e})}function r(e){s(function(){t(null,e)},c._setTimeout||setTimeout)}function o(e){s(function(){t(e)},c._setTimeout||setTimeout)}var i=100,a=5e3,u=0,l=this,c=l.as,f=n();return t?void f.then(r,o):f},clearIndex:function(e){var t=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/clear",hostType:"write",callback:e})},getSettings:function(e){var t=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/settings",hostType:"read",callback:e})},setSettings:function(e,t){var n=this;return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/settings",hostType:"write",body:e,callback:t})},listUserKeys:function(e){var t=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/keys",hostType:"read",callback:e})},getUserKeyACL:function(e,t){var n=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/keys/"+e,hostType:"read",callback:t})},deleteUserKey:function(e,t){var n=this;return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/keys/"+e,hostType:"write",callback:t})},addUserKey:function(e,t,r){var o=n(34),i="Usage: index.addUserKey(arrayOfAcls[, params, callback])";if(!o(e))throw new Error(i);1!==arguments.length&&"function"!=typeof t||(r=t,t=null);var a={acl:e};return t&&(a.validity=t.validity,a.maxQueriesPerIPPerHour=t.maxQueriesPerIPPerHour,a.maxHitsPerQuery=t.maxHitsPerQuery,a.description=t.description,t.queryParameters&&(a.queryParameters=this.as._getSearchParams(t.queryParameters,"")),a.referers=t.referers),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys",body:a,hostType:"write",callback:r})},addUserKeyWithValidity:u(function(e,t,n){return this.addUserKey(e,t,n)},a("index.addUserKeyWithValidity()","index.addUserKey()")),updateUserKey:function(e,t,r,o){var i=n(34),a="Usage: index.updateUserKey(key, arrayOfAcls[, params, callback])";if(!i(t))throw new Error(a);2!==arguments.length&&"function"!=typeof r||(o=r,r=null);var s={acl:t};return r&&(s.validity=r.validity,s.maxQueriesPerIPPerHour=r.maxQueriesPerIPPerHour,s.maxHitsPerQuery=r.maxHitsPerQuery,s.description=r.description,r.queryParameters&&(s.queryParameters=this.as._getSearchParams(r.queryParameters,"")),s.referers=r.referers),this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys/"+e,body:s,hostType:"write",callback:o})},_search:function(e,t,n){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:n})},as:null,indexName:null,typeAheadArgs:null,typeAheadValueOption:null}},function(e,t,n){"use strict";function r(e,t){var r=n(15),o=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):o.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name=this.constructor.name,this.message=e||"Unknown error",t&&r(t,function(e,t){o[t]=e})}function o(e,t){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(t),r.apply(this,n),this.name="AlgoliaSearch"+e+"Error"}return i(n,r),n}var i=n(7);i(r,Error),e.exports={AlgoliaSearchError:r,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timedout before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","