From 2284e63c36f2cb02cd30c84e46d2ac86ffae48d7 Mon Sep 17 00:00:00 2001 From: Arthur Ariel Sabintsev Date: Wed, 24 Apr 2019 16:25:18 -0400 Subject: [PATCH] Updated docs --- docs/Classes.html | 134 +- docs/Classes/Siren.html | 140 +- docs/Classes/SirenViewController.html | 132 +- docs/Enums.html | 136 +- docs/Enums/AlertAction.html | 132 +- docs/Enums/KnownError.html | 132 +- docs/Enums/PerformCheck.html | 132 +- docs/Extensions.html | 138 +- docs/Extensions/Bundle.html | 134 +- docs/Extensions/Bundle/Constants.html | 132 +- docs/Extensions/Date.html | 132 +- docs/Extensions/UIAlertController.html | 132 +- docs/Extensions/UserDefaults.html | 132 +- docs/Extensions/UserDefaults/SirenKeys.html | 132 +- docs/Structs.html | 150 +- docs/Structs/APIManager.html | 134 +- docs/Structs/APIManager/Constants.html | 132 +- docs/Structs/APIModel.html | 132 +- docs/Structs/APIModel/CodingKeys.html | 132 +- docs/Structs/APIModel/Results.html | 132 +- docs/Structs/APIModel/Results/CodingKeys.html | 132 +- docs/Structs/AlertConstants.html | 132 +- docs/Structs/DataParser.html | 132 +- docs/Structs/Localization.html | 132 +- docs/Structs/Localization/Language.html | 132 +- docs/Structs/Model.html | 132 +- docs/Structs/PresentationManager.html | 134 +- docs/Structs/Rules.html | 134 +- docs/Structs/Rules/AlertType.html | 132 +- docs/Structs/Rules/UpdatePromptFrequency.html | 132 +- docs/Structs/RulesManager.html | 134 +- docs/Structs/RulesManager/UpdateType.html | 132 +- docs/Structs/UpdateResults.html | 132 +- docs/css/jazzy.css | 442 +++-- .../Contents/Resources/Documents/Classes.html | 134 +- .../Resources/Documents/Classes/Siren.html | 140 +- .../Classes/SirenViewController.html | 132 +- .../Contents/Resources/Documents/Enums.html | 136 +- .../Documents/Enums/AlertAction.html | 132 +- .../Resources/Documents/Enums/KnownError.html | 132 +- .../Documents/Enums/PerformCheck.html | 132 +- .../Resources/Documents/Extensions.html | 138 +- .../Documents/Extensions/Bundle.html | 134 +- .../Extensions/Bundle/Constants.html | 132 +- .../Resources/Documents/Extensions/Date.html | 132 +- .../Extensions/UIAlertController.html | 132 +- .../Documents/Extensions/UserDefaults.html | 132 +- .../Extensions/UserDefaults/SirenKeys.html | 132 +- .../Contents/Resources/Documents/Structs.html | 150 +- .../Documents/Structs/APIManager.html | 134 +- .../Structs/APIManager/Constants.html | 132 +- .../Resources/Documents/Structs/APIModel.html | 132 +- .../Structs/APIModel/CodingKeys.html | 132 +- .../Documents/Structs/APIModel/Results.html | 132 +- .../Structs/APIModel/Results/CodingKeys.html | 132 +- .../Documents/Structs/AlertConstants.html | 132 +- .../Documents/Structs/DataParser.html | 132 +- .../Documents/Structs/Localization.html | 132 +- .../Structs/Localization/Language.html | 132 +- .../Resources/Documents/Structs/Model.html | 132 +- .../Structs/PresentationManager.html | 134 +- .../Resources/Documents/Structs/Rules.html | 134 +- .../Documents/Structs/Rules/AlertType.html | 132 +- .../Structs/Rules/UpdatePromptFrequency.html | 132 +- .../Documents/Structs/RulesManager.html | 134 +- .../Structs/RulesManager/UpdateType.html | 132 +- .../Documents/Structs/UpdateResults.html | 132 +- .../Resources/Documents/css/jazzy.css | 442 +++-- .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 126 +- .../Contents/Resources/Documents/js/jazzy.js | 3 - .../Resources/Documents/js/jazzy.search.js | 70 + .../Resources/Documents/js/lunr.min.js | 1 + .../Documents/js/typeahead.jquery.js | 1674 +++++++++++++++++ docs/docsets/Siren.tgz | Bin 118584 -> 150148 bytes docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 126 +- docs/js/jazzy.js | 3 - docs/js/jazzy.search.js | 70 + docs/js/lunr.min.js | 1 + docs/js/typeahead.jquery.js | 1674 +++++++++++++++++ 81 files changed, 9240 insertions(+), 4200 deletions(-) create mode 100644 docs/docsets/Siren.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docs/docsets/Siren.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/Siren.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/img/spinner.gif create mode 100644 docs/js/jazzy.search.js create mode 100644 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js diff --git a/docs/Classes.html b/docs/Classes.html index 46faa8e9..5dc8016a 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -4,145 +4,166 @@ Classes Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + +
-
+ + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -205,14 +226,15 @@

      Declaration

-
- - + + diff --git a/docs/Classes/Siren.html b/docs/Classes/Siren.html index 50587a67..f3096ab3 100644 --- a/docs/Classes/Siren.html +++ b/docs/Classes/Siren.html @@ -4,138 +4,156 @@ Siren Class Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -522,7 +543,7 @@

      Declaration

      Public API Interface

      -
        +
        • @@ -622,7 +643,7 @@

          Declaration

          Version Check and Alert Presentation Flow

          -
            +
            • @@ -853,7 +874,7 @@

              Parameters

              Add Observers

              -
                +
                • @@ -919,7 +940,7 @@

                  Declaration

                  Remove Observers

                  -
                    +
                    • @@ -976,14 +997,15 @@

                      Declaration

-
- - + + diff --git a/docs/Classes/SirenViewController.html b/docs/Classes/SirenViewController.html index 404dc30c..cd1ff994 100644 --- a/docs/Classes/SirenViewController.html +++ b/docs/Classes/SirenViewController.html @@ -4,138 +4,156 @@ SirenViewController Class Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -178,14 +199,15 @@

      Declaration

-
- - + + diff --git a/docs/Enums.html b/docs/Enums.html index bbdeca11..8b6b522e 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -4,145 +4,166 @@ Enumerations Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -212,7 +233,7 @@

      Declaration

-
    +
    • @@ -243,14 +264,15 @@

      Declaration

-
- - + + diff --git a/docs/Enums/AlertAction.html b/docs/Enums/AlertAction.html index b83aeb90..686fc703 100644 --- a/docs/Enums/AlertAction.html +++ b/docs/Enums/AlertAction.html @@ -4,138 +4,156 @@ AlertAction Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -259,14 +280,15 @@

      Declaration

-
- - + + diff --git a/docs/Enums/KnownError.html b/docs/Enums/KnownError.html index f37da94e..737c98cb 100644 --- a/docs/Enums/KnownError.html +++ b/docs/Enums/KnownError.html @@ -4,138 +4,156 @@ KnownError Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -556,14 +577,15 @@

      Declaration

-
- - + + diff --git a/docs/Enums/PerformCheck.html b/docs/Enums/PerformCheck.html index 15b15a95..55d0363c 100644 --- a/docs/Enums/PerformCheck.html +++ b/docs/Enums/PerformCheck.html @@ -4,138 +4,156 @@ PerformCheck Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -214,14 +235,15 @@

      Declaration

-
- - + + diff --git a/docs/Extensions.html b/docs/Extensions.html index 893243a3..6e211738 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -4,145 +4,166 @@ Extensions Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -173,7 +194,7 @@

      Declaration

-
    +
    • @@ -204,7 +225,7 @@

      Declaration

-
    +
    • @@ -235,7 +256,7 @@

      Declaration

-
    +
    • @@ -265,14 +286,15 @@

      Declaration

-
- - + + diff --git a/docs/Extensions/Bundle.html b/docs/Extensions/Bundle.html index 7742af48..8fe717b4 100644 --- a/docs/Extensions/Bundle.html +++ b/docs/Extensions/Bundle.html @@ -4,138 +4,156 @@ Bundle Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -311,7 +332,7 @@

      Return Value

-
    +
    • @@ -426,14 +447,15 @@

      Return Value

-
- - + + diff --git a/docs/Extensions/Bundle/Constants.html b/docs/Extensions/Bundle/Constants.html index bf49adf1..c5c6f7fa 100644 --- a/docs/Extensions/Bundle/Constants.html +++ b/docs/Extensions/Bundle/Constants.html @@ -4,138 +4,156 @@ Constants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -313,14 +334,15 @@

      Declaration

-
- - + + diff --git a/docs/Extensions/Date.html b/docs/Extensions/Date.html index 43607cf8..c8475e5a 100644 --- a/docs/Extensions/Date.html +++ b/docs/Extensions/Date.html @@ -4,138 +4,156 @@ Date Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -250,14 +271,15 @@

      Return Value

-
- - + + diff --git a/docs/Extensions/UIAlertController.html b/docs/Extensions/UIAlertController.html index 55236147..320d4809 100644 --- a/docs/Extensions/UIAlertController.html +++ b/docs/Extensions/UIAlertController.html @@ -4,138 +4,156 @@ UIAlertController Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -242,14 +263,15 @@

      Parameters

-
- - + + diff --git a/docs/Extensions/UserDefaults.html b/docs/Extensions/UserDefaults.html index f79e84eb..becd4ace 100644 --- a/docs/Extensions/UserDefaults.html +++ b/docs/Extensions/UserDefaults.html @@ -4,138 +4,156 @@ UserDefaults Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -232,14 +253,15 @@

      Declaration

-
- - + + diff --git a/docs/Extensions/UserDefaults/SirenKeys.html b/docs/Extensions/UserDefaults/SirenKeys.html index f02edeef..e2b5d756 100644 --- a/docs/Extensions/UserDefaults/SirenKeys.html +++ b/docs/Extensions/UserDefaults/SirenKeys.html @@ -4,138 +4,156 @@ SirenKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -233,14 +254,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs.html b/docs/Structs.html index 7748944d..56d45db3 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -4,145 +4,166 @@ Structures Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -206,7 +227,7 @@

      Declaration

-
    +
    • @@ -238,7 +259,7 @@

      Declaration

-
    +
    • @@ -270,7 +291,7 @@

      Declaration

-
    +
    • @@ -302,7 +323,7 @@

      Declaration

-
    +
    • @@ -334,7 +355,7 @@

      Declaration

-
    +
    • @@ -367,7 +388,7 @@

      Declaration

-
    +
    • @@ -399,7 +420,7 @@

      Declaration

-
    +
    • @@ -431,7 +452,7 @@

      Declaration

-
    +
    • @@ -462,14 +483,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/APIManager.html b/docs/Structs/APIManager.html index 819fb48e..d3058b84 100644 --- a/docs/Structs/APIManager.html +++ b/docs/Structs/APIManager.html @@ -4,138 +4,156 @@ APIManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -317,7 +338,7 @@

      Declaration

-
    +
    • @@ -487,14 +508,15 @@

      Return Value

-
- - + + diff --git a/docs/Structs/APIManager/Constants.html b/docs/Structs/APIManager/Constants.html index 36a2b363..2b607944 100644 --- a/docs/Structs/APIManager/Constants.html +++ b/docs/Structs/APIManager/Constants.html @@ -4,138 +4,156 @@ Constants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -205,14 +226,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/APIModel.html b/docs/Structs/APIModel.html index 4b058ae7..721b3bc2 100644 --- a/docs/Structs/APIModel.html +++ b/docs/Structs/APIModel.html @@ -4,138 +4,156 @@ APIModel Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -234,14 +255,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/APIModel/CodingKeys.html b/docs/Structs/APIModel/CodingKeys.html index 568f8b19..889c1b19 100644 --- a/docs/Structs/APIModel/CodingKeys.html +++ b/docs/Structs/APIModel/CodingKeys.html @@ -4,138 +4,156 @@ CodingKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -178,14 +199,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/APIModel/Results.html b/docs/Structs/APIModel/Results.html index 0db48743..94b75ed5 100644 --- a/docs/Structs/APIModel/Results.html +++ b/docs/Structs/APIModel/Results.html @@ -4,138 +4,156 @@ Results Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -314,14 +335,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/APIModel/Results/CodingKeys.html b/docs/Structs/APIModel/Results/CodingKeys.html index 077818d7..7e8f9100 100644 --- a/docs/Structs/APIModel/Results/CodingKeys.html +++ b/docs/Structs/APIModel/Results/CodingKeys.html @@ -4,138 +4,156 @@ CodingKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -286,14 +307,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/AlertConstants.html b/docs/Structs/AlertConstants.html index e1bd9f0b..c041c8b6 100644 --- a/docs/Structs/AlertConstants.html +++ b/docs/Structs/AlertConstants.html @@ -4,138 +4,156 @@ AlertConstants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -286,14 +307,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/DataParser.html b/docs/Structs/DataParser.html index 7969370b..6fb395f3 100644 --- a/docs/Structs/DataParser.html +++ b/docs/Structs/DataParser.html @@ -4,138 +4,156 @@ DataParser Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -378,14 +399,15 @@

      Return Value

-
- - + + diff --git a/docs/Structs/Localization.html b/docs/Structs/Localization.html index 7c6a61b4..c9777885 100644 --- a/docs/Structs/Localization.html +++ b/docs/Structs/Localization.html @@ -4,138 +4,156 @@ Localization Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -451,14 +472,15 @@

      Return Value

-
- - + + diff --git a/docs/Structs/Localization/Language.html b/docs/Structs/Localization/Language.html index 6baef06f..ff11734c 100644 --- a/docs/Structs/Localization/Language.html +++ b/docs/Structs/Localization/Language.html @@ -4,138 +4,156 @@ Language Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -1288,14 +1309,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/Model.html b/docs/Structs/Model.html index 0426fb86..253e7d2b 100644 --- a/docs/Structs/Model.html +++ b/docs/Structs/Model.html @@ -4,138 +4,156 @@ Model Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -385,14 +406,15 @@

      Parameters

-
- - + + diff --git a/docs/Structs/PresentationManager.html b/docs/Structs/PresentationManager.html index 58d65605..120e6463 100644 --- a/docs/Structs/PresentationManager.html +++ b/docs/Structs/PresentationManager.html @@ -4,138 +4,156 @@ PresentationManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -594,7 +615,7 @@

      Declaration

-
    +
    • @@ -858,14 +879,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/Rules.html b/docs/Structs/Rules.html index 87a27961..036dc8a5 100644 --- a/docs/Structs/Rules.html +++ b/docs/Structs/Rules.html @@ -4,138 +4,156 @@ Rules Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -432,7 +453,7 @@

      Declaration

-
    +
    • @@ -492,14 +513,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/Rules/AlertType.html b/docs/Structs/Rules/AlertType.html index 65b7741d..21c9854f 100644 --- a/docs/Structs/Rules/AlertType.html +++ b/docs/Structs/Rules/AlertType.html @@ -4,138 +4,156 @@ AlertType Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -260,14 +281,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/Rules/UpdatePromptFrequency.html b/docs/Structs/Rules/UpdatePromptFrequency.html index c1dfbb1e..7d7c3763 100644 --- a/docs/Structs/Rules/UpdatePromptFrequency.html +++ b/docs/Structs/Rules/UpdatePromptFrequency.html @@ -4,138 +4,156 @@ UpdatePromptFrequency Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -233,14 +254,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/RulesManager.html b/docs/Structs/RulesManager.html index 047562fc..20497941 100644 --- a/docs/Structs/RulesManager.html +++ b/docs/Structs/RulesManager.html @@ -4,138 +4,156 @@ RulesManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -523,7 +544,7 @@

      Declaration

      RulesManager-related Constants

      -
        +
        • @@ -563,14 +584,15 @@

          Declaration

-
- - + + diff --git a/docs/Structs/RulesManager/UpdateType.html b/docs/Structs/RulesManager/UpdateType.html index 8e7cdc91..b8d82aa8 100644 --- a/docs/Structs/RulesManager/UpdateType.html +++ b/docs/Structs/RulesManager/UpdateType.html @@ -4,138 +4,156 @@ UpdateType Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -295,14 +316,15 @@

      Declaration

-
- - + + diff --git a/docs/Structs/UpdateResults.html b/docs/Structs/UpdateResults.html index 8282149e..38b98cea 100644 --- a/docs/Structs/UpdateResults.html +++ b/docs/Structs/UpdateResults.html @@ -4,138 +4,156 @@ UpdateResults Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -260,14 +281,15 @@

      Declaration

-
- - + + diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css index a9828921..24cfe4ae 100644 --- a/docs/css/jazzy.css +++ b/docs/css/jazzy.css @@ -1,208 +1,226 @@ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } +*, *:before, *:after { + box-sizing: inherit; } body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } h1 { - font-size: 2.5em; } + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } h5 { - font-size: 1.1em; } + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } h6 { - font-size: 1.1em; + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; color: #777; } -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } +p { + margin: 0 0 1em; } -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } a { - color: #0088cc; + color: #4183c4; text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } -ul { - padding-left: 15px; } +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +p > code, li > code { + background: #f7f7f7; + padding: .2em; } + p > code:before, p > code:after, li > code:before, li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } -li { - line-height: 1.8em; } +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } + +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } -img { - max-width: 100%; } +.header-col--primary { + flex: 1; } -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } +.header-link { + color: #fff; } -.content-wrapper { - margin: 0 auto; - width: 980px; } +.header-icon { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } -header { - font-size: 0.85em; - line-height: 26px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 1; } - header img { - padding-right: 6px; - vertical-align: -4px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 27px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 1; - margin-top: 26px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } .nav-groups { list-style-type: none; - background: #fff; padding-left: 0; } .nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } .nav-group-tasks { - margin-top: 5px; } + margin: 8px 0; + padding: 0 0 0 8px; } .nav-group-task { - font-size: 0.9em; + font-size: 1em; list-style-type: none; white-space: nowrap; } - .nav-group-task a { - color: #888; } + +.nav-group-task-link { + color: #808080; } .main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 20px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - .main-content section .heading:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } .section { - padding: 0 25px; } + padding: 0 32px; + border-bottom: 1px solid #ddd; } -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } .declaration .highlight { overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; + padding: 8px 0; + margin: 0; background-color: transparent; border: none; } -.section-name { - margin: 0; - margin-left: 18px; } - .task-group-section { - padding-left: 6px; - border-top: 1px solid #e2e2e2; } + border-top: 1px solid #ddd; } .task-group { padding-top: 0px; } .task-name-container a[name]:before { content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } + display: block; } + +.item-container { + padding: 0; } .item { padding-top: 8px; @@ -210,59 +228,47 @@ header { list-style-type: none; } .item a[name]:before { content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } + display: block; } .item .token, .item .direct-link { padding-left: 3px; - margin-left: 15px; - font-size: 11.9px; } - .item .discouraged { - text-decoration: line-through; } + margin-left: 0px; + font-size: 1rem; } .item .declaration-note { font-size: .85em; - color: gray; + color: #808080; font-style: italic; } .pointer-container { - border-bottom: 1px solid #e2e2e2; + border-bottom: 1px solid #ddd; left: -23px; padding-bottom: 13px; position: relative; width: 110%; } .pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); + top: 7px; + display: block; position: absolute; - width: 12px; } + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } .height-container { display: none; - left: -25px; - padding: 0 25px; position: relative; width: 100%; overflow: hidden; } .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; padding-top: 10px; - padding-bottom: 5px; } + padding-bottom: 5px; + padding: 8px 16px; } .aside, .language { padding: 6px 12px; @@ -283,7 +289,7 @@ header { .language { border-left: 5px solid #cde9f4; } .language .aside-title { - color: #4b8afb; } + color: #4183c4; } .aside-warning, .aside-deprecated, .aside-unavailable { border-left: 5px solid #ff6666; } @@ -298,7 +304,7 @@ header { word-break: break-word; min-width: 50px; } .graybox td { - border: 1px solid #e2e2e2; + border: 1px solid #ddd; padding: 5px 25px 5px 10px; vertical-align: middle; } .graybox tr td:first-of-type { @@ -311,30 +317,56 @@ header { .slightly-smaller { font-size: 0.9em; } -#footer { - position: relative; - top: 10px; - bottom: 0px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { display: none; } -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } html.dash .height-container { display: block; } -html.dash .item .token { - margin-left: 0; } -html.dash .content-wrapper { - width: auto; } -html.dash #footer { - position: static; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } +form[role=search] .tt-highlight { + font-weight: bold; } +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html index 46faa8e9..5dc8016a 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes.html @@ -4,145 +4,166 @@ Classes Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -205,14 +226,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html index 50587a67..f3096ab3 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/Siren.html @@ -4,138 +4,156 @@ Siren Class Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -522,7 +543,7 @@

      Declaration

      Public API Interface

      -
        +
        • @@ -622,7 +643,7 @@

          Declaration

          Version Check and Alert Presentation Flow

          -
            +
            • @@ -853,7 +874,7 @@

              Parameters

              Add Observers

              -
                +
                • @@ -919,7 +940,7 @@

                  Declaration

                  Remove Observers

                  -
                    +
                    • @@ -976,14 +997,15 @@

                      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html index 404dc30c..cd1ff994 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Classes/SirenViewController.html @@ -4,138 +4,156 @@ SirenViewController Class Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -178,14 +199,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html index bbdeca11..8b6b522e 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums.html @@ -4,145 +4,166 @@ Enumerations Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -212,7 +233,7 @@

      Declaration

-
    +
    • @@ -243,14 +264,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html index b83aeb90..686fc703 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/AlertAction.html @@ -4,138 +4,156 @@ AlertAction Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -259,14 +280,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html index f37da94e..737c98cb 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/KnownError.html @@ -4,138 +4,156 @@ KnownError Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -556,14 +577,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/PerformCheck.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/PerformCheck.html index 15b15a95..55d0363c 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/PerformCheck.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Enums/PerformCheck.html @@ -4,138 +4,156 @@ PerformCheck Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -214,14 +235,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html index 893243a3..6e211738 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions.html @@ -4,145 +4,166 @@ Extensions Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -173,7 +194,7 @@

      Declaration

-
    +
    • @@ -204,7 +225,7 @@

      Declaration

-
    +
    • @@ -235,7 +256,7 @@

      Declaration

-
    +
    • @@ -265,14 +286,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html index 7742af48..8fe717b4 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle.html @@ -4,138 +4,156 @@ Bundle Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -311,7 +332,7 @@

      Return Value

-
    +
    • @@ -426,14 +447,15 @@

      Return Value

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html index bf49adf1..c5c6f7fa 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Bundle/Constants.html @@ -4,138 +4,156 @@ Constants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -313,14 +334,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html index 43607cf8..c8475e5a 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/Date.html @@ -4,138 +4,156 @@ Date Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -250,14 +271,15 @@

      Return Value

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html index 55236147..320d4809 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UIAlertController.html @@ -4,138 +4,156 @@ UIAlertController Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -242,14 +263,15 @@

      Parameters

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html index f79e84eb..becd4ace 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults.html @@ -4,138 +4,156 @@ UserDefaults Extension Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -232,14 +253,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html index f02edeef..e2b5d756 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Extensions/UserDefaults/SirenKeys.html @@ -4,138 +4,156 @@ SirenKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -233,14 +254,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html index 7748944d..56d45db3 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs.html @@ -4,145 +4,166 @@ Structures Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -174,7 +195,7 @@

      Declaration

-
    +
    • @@ -206,7 +227,7 @@

      Declaration

-
    +
    • @@ -238,7 +259,7 @@

      Declaration

-
    +
    • @@ -270,7 +291,7 @@

      Declaration

-
    +
    • @@ -302,7 +323,7 @@

      Declaration

-
    +
    • @@ -334,7 +355,7 @@

      Declaration

-
    +
    • @@ -367,7 +388,7 @@

      Declaration

-
    +
    • @@ -399,7 +420,7 @@

      Declaration

-
    +
    • @@ -431,7 +452,7 @@

      Declaration

-
    +
    • @@ -462,14 +483,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html index 819fb48e..d3058b84 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager.html @@ -4,138 +4,156 @@ APIManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -317,7 +338,7 @@

      Declaration

-
    +
    • @@ -487,14 +508,15 @@

      Return Value

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html index 36a2b363..2b607944 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIManager/Constants.html @@ -4,138 +4,156 @@ Constants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -205,14 +226,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel.html index 4b058ae7..721b3bc2 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel.html @@ -4,138 +4,156 @@ APIModel Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -234,14 +255,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/CodingKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/CodingKeys.html index 568f8b19..889c1b19 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/CodingKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/CodingKeys.html @@ -4,138 +4,156 @@ CodingKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -178,14 +199,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results.html index 0db48743..94b75ed5 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results.html @@ -4,138 +4,156 @@ Results Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -314,14 +335,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results/CodingKeys.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results/CodingKeys.html index 077818d7..7e8f9100 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results/CodingKeys.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/APIModel/Results/CodingKeys.html @@ -4,138 +4,156 @@ CodingKeys Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -286,14 +307,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html index e1bd9f0b..c041c8b6 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/AlertConstants.html @@ -4,138 +4,156 @@ AlertConstants Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -286,14 +307,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html index 7969370b..6fb395f3 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/DataParser.html @@ -4,138 +4,156 @@ DataParser Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -378,14 +399,15 @@

      Return Value

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html index 7c6a61b4..c9777885 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization.html @@ -4,138 +4,156 @@ Localization Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -451,14 +472,15 @@

      Return Value

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html index 6baef06f..ff11734c 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Localization/Language.html @@ -4,138 +4,156 @@ Language Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -1288,14 +1309,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Model.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Model.html index 0426fb86..253e7d2b 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Model.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Model.html @@ -4,138 +4,156 @@ Model Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -385,14 +406,15 @@

      Parameters

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html index 58d65605..120e6463 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/PresentationManager.html @@ -4,138 +4,156 @@ PresentationManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -594,7 +615,7 @@

      Declaration

-
    +
    • @@ -858,14 +879,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html index 87a27961..036dc8a5 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules.html @@ -4,138 +4,156 @@ Rules Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -432,7 +453,7 @@

      Declaration

-
    +
    • @@ -492,14 +513,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html index 65b7741d..21c9854f 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/AlertType.html @@ -4,138 +4,156 @@ AlertType Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -260,14 +281,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html index c1dfbb1e..7d7c3763 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/Rules/UpdatePromptFrequency.html @@ -4,138 +4,156 @@ UpdatePromptFrequency Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -233,14 +254,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html index 047562fc..20497941 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager.html @@ -4,138 +4,156 @@ RulesManager Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -523,7 +544,7 @@

      Declaration

      RulesManager-related Constants

      -
        +
        • @@ -563,14 +584,15 @@

          Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html index 8e7cdc91..b8d82aa8 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/RulesManager/UpdateType.html @@ -4,138 +4,156 @@ UpdateType Enumeration Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -295,14 +316,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/UpdateResults.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/UpdateResults.html index 8282149e..38b98cea 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/UpdateResults.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/Structs/UpdateResults.html @@ -4,138 +4,156 @@ UpdateResults Structure Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + +
+
-
    +
    • @@ -260,14 +281,15 @@

      Declaration

-
- - + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Siren.docset/Contents/Resources/Documents/css/jazzy.css index a9828921..24cfe4ae 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/css/jazzy.css +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/css/jazzy.css @@ -1,208 +1,226 @@ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } +*, *:before, *:after { + box-sizing: inherit; } body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } h1 { - font-size: 2.5em; } + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } h5 { - font-size: 1.1em; } + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } h6 { - font-size: 1.1em; + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; color: #777; } -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } +p { + margin: 0 0 1em; } -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } a { - color: #0088cc; + color: #4183c4; text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } -ul { - padding-left: 15px; } +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +p > code, li > code { + background: #f7f7f7; + padding: .2em; } + p > code:before, p > code:after, li > code:before, li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } -li { - line-height: 1.8em; } +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } + +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } -img { - max-width: 100%; } +.header-col--primary { + flex: 1; } -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } +.header-link { + color: #fff; } -.content-wrapper { - margin: 0 auto; - width: 980px; } +.header-icon { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } -header { - font-size: 0.85em; - line-height: 26px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 1; } - header img { - padding-right: 6px; - vertical-align: -4px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 27px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 1; - margin-top: 26px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } .nav-groups { list-style-type: none; - background: #fff; padding-left: 0; } .nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } .nav-group-tasks { - margin-top: 5px; } + margin: 8px 0; + padding: 0 0 0 8px; } .nav-group-task { - font-size: 0.9em; + font-size: 1em; list-style-type: none; white-space: nowrap; } - .nav-group-task a { - color: #888; } + +.nav-group-task-link { + color: #808080; } .main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 20px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - .main-content section .heading:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } .section { - padding: 0 25px; } + padding: 0 32px; + border-bottom: 1px solid #ddd; } -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } .declaration .highlight { overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; + padding: 8px 0; + margin: 0; background-color: transparent; border: none; } -.section-name { - margin: 0; - margin-left: 18px; } - .task-group-section { - padding-left: 6px; - border-top: 1px solid #e2e2e2; } + border-top: 1px solid #ddd; } .task-group { padding-top: 0px; } .task-name-container a[name]:before { content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } + display: block; } + +.item-container { + padding: 0; } .item { padding-top: 8px; @@ -210,59 +228,47 @@ header { list-style-type: none; } .item a[name]:before { content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } + display: block; } .item .token, .item .direct-link { padding-left: 3px; - margin-left: 15px; - font-size: 11.9px; } - .item .discouraged { - text-decoration: line-through; } + margin-left: 0px; + font-size: 1rem; } .item .declaration-note { font-size: .85em; - color: gray; + color: #808080; font-style: italic; } .pointer-container { - border-bottom: 1px solid #e2e2e2; + border-bottom: 1px solid #ddd; left: -23px; padding-bottom: 13px; position: relative; width: 110%; } .pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); + top: 7px; + display: block; position: absolute; - width: 12px; } + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } .height-container { display: none; - left: -25px; - padding: 0 25px; position: relative; width: 100%; overflow: hidden; } .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; padding-top: 10px; - padding-bottom: 5px; } + padding-bottom: 5px; + padding: 8px 16px; } .aside, .language { padding: 6px 12px; @@ -283,7 +289,7 @@ header { .language { border-left: 5px solid #cde9f4; } .language .aside-title { - color: #4b8afb; } + color: #4183c4; } .aside-warning, .aside-deprecated, .aside-unavailable { border-left: 5px solid #ff6666; } @@ -298,7 +304,7 @@ header { word-break: break-word; min-width: 50px; } .graybox td { - border: 1px solid #e2e2e2; + border: 1px solid #ddd; padding: 5px 25px 5px 10px; vertical-align: middle; } .graybox tr td:first-of-type { @@ -311,30 +317,56 @@ header { .slightly-smaller { font-size: 0.9em; } -#footer { - position: relative; - top: 10px; - bottom: 0px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { display: none; } -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } html.dash .height-container { display: block; } -html.dash .item .token { - margin-left: 0; } -html.dash .content-wrapper { - width: auto; } -html.dash #footer { - position: static; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } +form[role=search] .tt-highlight { + font-weight: bold; } +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/img/spinner.gif b/docs/docsets/Siren.docset/Contents/Resources/Documents/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3038d0a42c55b1a07caecb7c7a6cbac982ec09d GIT binary patch literal 1849 zcmb8wZBSF$83*voz31lM+?V7Kkqwb`LI|3K#DupH#kDs91c6du6?SMB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html b/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html index baf08174..b655e7de 100644 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/index.html @@ -4,142 +4,160 @@ Siren Reference - + + + + + + -
-
-

Siren Docs (100% documented)

-
-
-
-
+

+ + Siren Docs + + (100% documented)

-
+ +

+

+ +
+

+ + + + + + + + + diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.js index 4ff9455b..e2b491dc 100755 --- a/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.js +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.js @@ -23,9 +23,6 @@ $(".token").click(function(event) { } var link = $(this); var animationDuration = 300; - var tokenOffset = "15px"; - var original = link.css('marginLeft') == tokenOffset; - link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); $content = link.parent().parent().next(); $content.slideToggle(animationDuration); diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 00000000..e3d1ab90 --- /dev/null +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,70 @@ +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/docsets/Siren.docset/Contents/Resources/Documents/js/lunr.min.js b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/lunr.min.js new file mode 100644 index 00000000..f45a81eb --- /dev/null +++ b/docs/docsets/Siren.docset/Contents/Resources/Documents/js/lunr.min.js @@ -0,0 +1 @@ +!function(){var t,l,c,e,r,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,b,P,T,O,I,i,n,s,z=function(e){var t=new z.Builder;return t.pipeline.add(z.trimmer,z.stopWordFilter,z.stemmer),t.searchPipeline.add(z.stemmer),e.call(t,t),t.build()};z.version="2.3.5",z.utils={},z.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),z.utils.asString=function(e){return null==e?"":e.toString()},z.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i=this.length)return z.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},z.QueryLexer.prototype.width=function(){return this.pos-this.start},z.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},z.QueryLexer.prototype.backup=function(){this.pos-=1},z.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.more=function(){return this.pos', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$input.attr({ + "aria-activedescendant": "", + "aria-owns": this.$input.attr("id") + "_listbox", + role: "combobox", + "aria-readonly": "true", + "aria-autocomplete": "list" + }); + $(www.menu).attr("id", this.$input.attr("id") + "_listbox"); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/docsets/Siren.tgz b/docs/docsets/Siren.tgz index eb160f984100fcdb867e2a306e09bb92021bd480..39c6a389e17e2b032a6fdb7d1bb92989390e06bc 100644 GIT binary patch literal 150148 zcmZ^~V~{3I6f8WpZEMH2jUC&zZQJ&aZF|SIZQJJa?RypR#f=-0U3KDARz>%Z?mm^B zO&ARYL^;x@0|a{24eLTG<%FdHglmv&)9CKjwmex;r87|ufl|N2ibr}r2AW5-#yAnkQ z0ey3)7Bqap@W(gY$LZx~cEVJa*4io>Quy&Z@Aq)h_K!ehyg$G`qEbio!N^+tzqDNG z;{Qt5rL`SbNGmF}s5J+^B}$WleCA0U>}&#f2c2pxzUpT&JpuZ??_L#SH_=hlaqaqlKOA_y>_oe#Yw%L9b-iM)s5M=!9X+{}D*cLD zT#SCjSnsl~>hPuwV&dy|F^|FDTyCD&dV1>b?@s|LDSdE)hN)b1NADn^*0O~M&K5;4 zh0!vEV-v~enajL2U%v$ZRo9RC1*0{} zsK759jYHH3e*uU|c4l+4i(l63;)C^O{QXBR{`RKq=d}L0HvqCL%fBvuyZqms^MwFIs5b+G0Ko#ON1H6wsk^BdIykvJ`D>JOMjGM=y5-^*)y``yTaCcXO7f;hYiMRFnFf>M%;VoUaLwvJXuW<0&WeZdx zwb#$1;Fj?z;N%P7{lhQ|xPRXj0K5mj|I9x3E)m{*=Jv!k0j{rJ|LER)V|FXu9-rBZ z_0oU*X2p9?9a9%qoBf)}l+TfR`tqC|zC#R67w$#%N`2QY^`gQpp)8y_i^!d#Y0Q@r z_N<^v8){5jOtI2aE?YhNtB|rISavhXlkCyMPS+MBwYIuTLvidH}*1YfW=A^wid;Ir^E%8zDRD)FTH!B3e=Ew)xq z-`xD(49RP$>%%(%7k~DZmfxd>uDxy&6+kvEXW?G%ODr8)EQrKL>ODC=XxNFUoT#H_P87B+R_;y|aTk_c#nf-7eYDY`H}DmsW_CRL$Asiir$==KEd z;UTU%@&b=GZUwQBc9&l1JW`S#=KY!-#ze zR0VR#dYG`;K_vYjhvoa?_ySwM7pXI^{EkbsF-fP6=dHj!iUx>ah=Te;!AJ=J}`EZ%+yFbG=3p&8>sDc&~>&fJu)JX}H^H8q=X3>5&zMm01al*HYY}`T{arnQdl{O zP?RMRcJXb%6DH*u{l6Dyb0eAM5iWVC z7p7b8foze^kq2~vHIt*d$Y;D-GKUxs?ji3@crzoW9bj3S?x#r7r<~R`yb>pAXGW4> z9ql}Ar9w82#>jb{DAmySI83tyj*sl?KY7=$=}k|f8{|TA~4Sf&JJ|^%*`#m*Wvm& zp4CC}^E_3|or-`wdUqR7{bbI*0+gQGKD}pZMSK1B%w{3I{NKJt=Hhccqgebux1QDk zJFnfr{sg+QFMp(7jv-({1?C?yzZnR7;vX1cPK?gLt^kxfaY65d7b)NV$2C+LfP$Gd z0O3YlPy?P-(>H+gdKR@FFiIt6+X`T~%Qn#J}9|)87LcK2qr{;{^b@ zLNfM+*fR3dE2+R;`VAlln_#*Iz|tU_w1&so0($fMxLUsf{NKKci~y0c@gM&>B=ARp zCH_x9177nSs#VE1Aoo*|aY>}61u&~z{;v(!3vs^=TBsiqY$`zzqy>J01} z5D1gdh{DbE*$epJ7wcOm*8hb_+=YL>1R8JmbOAc3--9Xc%*9Yity|XEW#kv1RdEPu z&`Z<={ENy;jK1pNPdU|?;6%|#RN+ZcNr0n>4P*SbVfRK%Nf55s$^~5d$@`lPZ<=w_IzmzLRT#fsT0-kL>New8>J#i$O+%dEvhyX++ni6!ti%3-3;xlzPR$VK zTWG^S4u9TfOk45{=_p-lEdMTQ$T+nnO3;H0V;s{vxy|VvSwad?LE}-_Y^96gMsG8QyM6${D@Wm~3L z{3dv$jF+I-I~vRwuu)V{{X$HtCyN75f0y?HyVvVQ$AAe1C+=-4>Lb$MRT2Y_!3w_J z$-;PKmPC(ySC?3z?QZ|u$6#WNmo8#^z zju;gjEb|()_!`Yld>h^jG0sl%0Ak{g(h+r@ofJ6r9+(Eid>l`V9W!Pi7Y0El&$HY` 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

c~wMceNkX=UW=qj=!8^8-~aQpfwExH{6#!XUe z4T2_}px8*7w8%Q9nk;0x0l&LQ2Y-R0Taq=_8^zP|CPay;E$`_+wI{7QkhN1=;mCal zt`g6|&L{ghgqBXG_uh+^2ROJY{oYPRi~!mchnrPH7wr+(t;s`P0#~H9j}TK7gxzYa zriH1mkQm9?A6q*!I^lb}tTiihU~`_xy>W8uOk2IU@05c?GjYeZ z_QGayL)vqqYNl2(sUIURC~qXW%c_MQnxhZ;@d(X(>3&k32pK9W6NGi&6SG) z_x^T|FTaJ@aRIgO4CL63KV9_ria&1Jw!wWq^jC7EzljAzx*z(>9XS`j5f;k0g8J{6 z1`2>BVOJgA9NQ%zY{D;axh2GTt2}3$B-n4C{QlVl zv$b$5a*hkN{ulm_fphUwmm=qX)NApY|Cx9rx)MLdLm&Rf_nyBLKjqxb4LZZ4Jn7=4 zLATRU?cZyc2G$A9F)J3(E%_Yuzqj4};v)+?{jkHsWSGoq*3Ax)@mi8{_?3f3F?rBW zCQHHp%U*uvsFL}Y3UzW4wwdn8srR$xy8kN*WR(+`2qK{q@?g&D9t_t+y@Bmr5lzDpcPsV;@ zwI(|h&DFkGr}Wq@@G&{{5$*^KVq{m_HSOlW4IfX`*_nve+#ropp^L9Nu%@VJdKfrt z5~s>mg`SiXVl+4z1Dre*$@E8Euz|RBv^v&Oj$8a7FzbNCGFr!97JuCDPJUVcgr=n; z5RBF%YOu{dLScGZG6|q&Iv5XiGaJ85KOPKDHpK6un+cqtj3z%kSgIIyup9cX2H>FO zhcQO-dW~o?+M7Eg(4GpOu)30Y6UUz{D?lpISvOoS@X-PR`tCU84HUQHS7;`V-N~R$@~!n@WBt5`W4u>M+MY@qA|wNHJQ(bm%v3 zf1a^+MoY#Ml#~<~tc+7ol*#tXY7Po1Dv{2N8m zhJu+E;CKx=?vf9s26UnLvQ#ADP{u^R0!oCW=(4MVN`Eb=E&qaJSsBD|gq;K_h+y?8 zfGZ@D@N0U#yES%%q2mjJn8($87|vr^+jFvlt~c>U2W@mgoumkx+(%#2PN*I0VzS~@ z;8!$<{fHLbB$ff&q+KZ~A=|0eFg`B~@LI7Ql)U7!8HM5jK^y3|7stjsC0gItD2-DY z5u2Wu93(`Fs@kM?9=9V23~ofG=)-^~^hD{74gS?CdfQU{B(26t30V**OA{jSSNJ;L zy}1PXZ}E-fr`azm67{=>U|S|UY6L`LJBf+pX=QfhA-UPCW(Evv)YdTsBU`PJ+}7xr zj~v}Ov{)D$DYS_TFdduFToKHpDvNPIC6Dl>}Qg<}9`oWi_gz#)!*mL?A(IC_$B|h^FO* zv|%j|S;5A`gQb}zut|AGMH!PWIaxd0PFU_)_#LJ^{E|{T*Hw+ zOewOr%?&B?8C)Yb!2c-y&lV9B)>VXUEO*DN`i8PB_CajFX_y}(wms9=sA#t%n6DJv zbkKdh+W02^)aU~pdbdj$Zo)D|c+jZup$I=eIjR@U1|ZtTP9K~Hq>v`y@Vk2vMAAtp zaOtjP-gCYA6@k4Ldy+V^rd-g3)Q)_kaTn$hR9v4li(}HSl`J=C2Uq4>LW!&qVlP_| z9ExzrUHon4kS=4$jN4SrFm^RNWTxNCj7fcm(@vQ)3LRk%>?gs95bFS8Me>whMIqCk z8xmz@8(px(c`THBTymb%QL%?UrUUa9!bkx@KzF)=L+UWeCg<1Ae$fQ@RYetHrl&tB7S5dt>73hX$ypJtZu|%s218}jBx2u6TB_7aD zxpMvg0CPZ$zp*qAH=JIdMqgN5bprH0s{SBhgP-9c3&$!r2HG65s!%dz71HUfb~1Qj zUKH~pR)b<3KQlogA&U%2G6cLJBF#9D!wQl1y)Epcg$q?O?&kBe(kM;OBK?~k&y)*_ zEESsOow&0Dy|jaHxAw^?h$ZrlU4fTWMp9lBr7cBJf*1=Tgp?y%6D6`i#Ziqr&WA6}^{755Y1*yYGWrG08yf#Ucd$Mg|Q43{|p0Fh=1<_m(T1KsdhG43F zY|MI_kKUP9e-qMflLo4vhX8e|qhw0s-SYYC8i_u+t^xYmE{Xd#jF9Wo=m~zjfRC;a zGfJZM@Oenm0z2taxhldsvVrCcFpEea^(HMkje$>-rmkx=K9#gsm`_e|=v{&QATrJR zZS?euqJ5_jza>x&D2b_av=wilt=LrDRm<_j zRco3s7yZS(YZ+R`DVdLjWmr!{oAZz9SE^ez-;jPZ84+0DsCyNuYFF_jyXyNskKR8{ z=N}#exJ>`i!Ml?IO!(JBX2~3qGrlk7vH2TM>}XE~x7g77JcZsK0V{God_=^IF@HF- z@x-pi##*02>wj*hcxx&+( zPoD*zzNxpq2j}cTy-C>SPsP~$n2&>0AUV_1hcEaoY7WX8YhnWk)maoea%8F^PHi1`38kpu+}0Dph=mbs|+duu;^e>G#B3*Q!`a$rN-Qdubaw}al| zuYp*gHWtOAxPt?1n;1ZZf(=ov$mN2lG&OQbT^n^S3_O|b-ZV%je&BXcWApohe?~l* z9|uyoARioou;=SlylM8D7a!=3YS}->UwM0M-gegCl2>0yrjOg+qv*>0syoMQ2 z681#I;!L@)DXHMo95fHE)tP24@!VMBWAo~+pooQLF(ygD>mwPwK*Stm_(?ED)T)aA zN&|xd&aeUnAj07---W^P!kOyRbo{{%GH|4W*5R^N!^^ATA%WLydge(oP#P<}^EjLO zUeVQ^y-Uujt+eXR9d+B!_9#g6uWhNCG8T5r-O;v&*gTK6rJ^{+-Y=u(@Nqn#O6dR% zf}&YK>ct+`D!@f_%E!Il-@n(Z^91?%+7B}9-Wgs9PHzoERWh}sqQg~0b6g)}__C>U zrh`{TK@84Muo(rBFA3!dc0oWSixUVl(5OUqJO>ILLKfd(Qef{X2oZ90dkvLRWP}OS z%f2DzcPH3I0pvaUTh-v_QhBF{e=nh7LmEIU0x7Z#DX`Gr6;Ua{ixou__a@k9#4SZU zK!2;{9YMiWR*`%`$dKR~Qf8O6y zkZOm^-d76M33gKwHApw1igqVPtnE7dDanY0A)$)ca}ROQa6~kNSjcb@)d}0>Gzhc` zrWL+x0CJBB3Yo-$W{#jK7CTOo+R#Q>)-0$KP?${n0AO@jSdNA-%2l=`)Yt=oPC|-I zK@y7c4xkTb*+TIE-#P%N*%mN?&5H^gU7P4lu+mOhR;XvCA79LwYFwT$#R3W-xx_N@ z8P&+7SLL}Q84y&&uL2(sgQ!rMU=Kv%7lSc-m5!KKEzbID@h7*Qjm=m5LbsdJP_%&f z?3vLndx^U= zngXC1p;@MgWHQ>lpV7ny=V-YcG~lsov>7I5dGLZ%FkGi0avLA;QwI8g0?qF)VK2PAWx7A0aucgr;toU*lCD* z&@B{GjA8c{q@##zMOG#7L?EIeFR0J}T0QXgfY~ZcbHC6y65rty5NAY}*jH!YAd$ej z?w}E)=kJMN{G;WqSc4p`+lCW{|wJCP-U*c zFhQKe$u;e+@nuJ6`#9a#ah7NCeJ}@zo9YC11Sg7sQZ1XCEX1W4{em8=q5|NHiF@33 z)0w$a*_uV`Iz>i9V`*PB<^x3nN0Uq#9Kx+_;pAkii^h^>3|^rKIXr8Qno~slVpk^6 z=m0X^U@RC@0CXnezJg^l8rA-u?UGhS+Qt;VLj!B4=-aeZ;A8PbdN$6-ID529RxX#3 zmWx$PRLda{JAmpP3JHg!h;lrgIzRg z(QL<6kgAXUj8p`(V87fFR9R$UmW#4bV3CUF9-ymu1Q3N6%P~PUB0{K79HMUm#9D#m z6GIIPXo2V10z!T~mSEASRn%*&u&q)5PfVJLFwLTmuZS{3=3P#$NKDE0xlEff6pRTl zqChZ}i`%u?deb z!yH4>-892oqJq6=6N7G1MAb;F1;X+`#GE-&jcVlLMcQ=1Ifq<9WInE)?w~Sru`YwB zV|oJ6!RZsq$iB@}cens?Q4tiaEGjmsfoxdxL!I6hUYo{x5o+{Gj6=$&g8m@T>I17+ z&=X`Y=S4V76{zPu8gJlPETbjWT256K5;s&~a5mB=(?NmX15x^cnHf7Odg3+vp zZX_llw+6YD6EPncggO=9r9)C`Ks)5dHDsg`4%6~xq*VbSkcZU_d~Ka0cEZkZY?P3} z?qUb5p125=E~IHov{=rW2I*kb9aC!H-oxM0^a+g&vM>fUjG`ozjU*#g#J(b?q6kAz zv&YV*L87WKF(+)o)I}{-MT?>@Wr|pmH4$_JNyXBi;A6FF0|VOv2rC$xxHr%m!DjBR zveWDqTIR(v7`Qu9ek#}-)fVjOBjxNtpLPN1jNSA(q;$n{8Zsn<1`(Rs`&hHBYLiCa zV>o#5@5rKRgc4diH|X1*N>8%tcnE7qr$Ic&g68QRQ4<6O0(>&?hh0#Nv`2XMAtp=v zSSLnHIz|F8Q;i2`-eOhHSn8#+1lLNzXg~@G$s>^$E1K!l&5m#3PWFbc9OBtdJ=%r& zYq-;(Wh7^lQ!Jbn0E2d=k}-`y*C>no*ziD1#A`DSO|*Nbqj3vMYEusO(@1_+cGYPd zxB*=*D=J0JRNk_-cP1Nm#bO0`Ao;T7@$>syGpjewyHam+Yq%!RuEe#FN|d*5vKeC zB59Pek5i5jwQL3w+bKna9vmD@Ib*l#-H+77jp%0nsqTGH-TR=rpLhGG@%x`_*PAri zM&0|L_(VDukGb!EO7nd8{-=}pycv``*M5ts^=dN~lT>4)hHBV%z`EsT&CSmhj*BCk zV0(qjZRK*god=l}ZTY3Kxi`mfD)G57e+c6y0Qz)JaF&|8Ha1~h2|7211a;Qj7zPts z+IHE>J{vG_P=l>;(`5GK+Q5PmHH9o!H1Ho#q%9tdy*1G!)8d?@l9(qeO&O?mWNUmq z7e`7)ZYz_SF_J)UK5%oaUiEQQ-G@1wLQx`?vAHYdwpQGm3jsUiWE0!HW$M~_Z#~=i zL32y-kMuaupyOC7qXfmb2 z5u4!_W@h7=MJ}1;va$3cmsy;RB^Tn{^4eOOc6d&x<)oEd&NWCepz-}c9_8RYBrGwK ze?o#7WPFOo?dv&X%OCIHQ-l2F)w1@=tIg2uP1R~6J??nBi3X2#3r;4(CGj@G61Toz zu~B9#x`jXHFL!Pq3t@5(Bi>6)8!R@xkMo*BC^cpK0|tpoET6CAVqR={Mj zA1iJ;$adt&@S_{IFzG%@cNutwO=lhGcu4i_+?J4=EP*)9WRgUzI>^JX{OQ7e*d;h$ zCkH*%GP#4Sfafl*NRI&3Y92Nx!3;FSAwI1nG3ey7prC2nnhxcvW|CyD?Avk=Wvg(* zG7KoOgc$8j#D^w{IxLU2MPd>c-Hh?Rh1YprDj}Xq0&J1hGO?x7vVEzv-g#FAhGPhxKj58n8x2kqs+#4qNa`8W?=0h&xt{jd3xVYYu9)KkPu(StjA z>_MJ-uGrAWOOz+m3{X*)4_G+K(2!pJx<)4rJ03eR+7ghR#zPrAJThH|5J0p|xG0+d zVy%=oNK6=FAI?iOc}GN*6?Qy+a`czwvUgO%Ll6CnvZz|l22=sDojf*yU;tWzQ6ZD1 zy40edE_LYoL;PUy@6|I^DU@12fGsF7PO^8 zROty4IX-s|vSX3KCo4{*`4|#MX0K&pS&om{sYAW-0Cf$r&DXX3cHX{jmXY%Af;MLd z=A+TCk`oc>4JzqKui2gFSOp`0?Ead8v*sGoA2Zqgirwfio_psySt)Gx23s;iOYDo<43IcS~(KN?#q1hFuAt_`7MKj~l0fC^n~ftnpk05LRLD*G;YUrg4I? zW_pV0O~cO1>tex8D}8(tJ=-Au?zDIou9?7PbWzkqNW4p@xNAj~&1IkXCe*QDP1mnO z%-8_b>)e=Rk>RhTA3~DPYTK%{*1BHIHfqS;K@tI2UCc>NZ3dqCsswhQN7!IpUG(Q3 z2HqeFv1H!i+d`dM;Of_0&Vg58IbU3v8x9`q$hecJ0)+ zlKbX1u9N5cby(d-Y{;~#GqSyd#mRGnoJ=++J;=pT59D%wx-D*JF0h$7cPn%DM&^RI zweMN3K}Zo+%=tq$g)7yqqLeos)P+1O1(GYjX~#5?u=1vJtg1>H;;)( z9((8^@o;8(W!4#X;)AVGvSkR*2s9MW2W9fY2Wj%6lW3>5aNM8=Y4X^EGKn(mB*J_; zPa+(x_(l)%o)X?;9VnD8E|o3DJ%0E|~16?PKIiQ&bZJolnao_BOzc}UZDc#t+; zc(67SespwB?%`Y`9;C@*56UDnNk_*gKDC zE;1#^IOD+^KlPxDv(t1`W|xh`I6kN7^o<8=E16CwM|Oo|=<(o9pZlF;bXrpLGZZ;n z!l5AiZAAh}u_rFN)=|QEiZvup3Ze+!1(O1AJ4!>UBKulr3@hS*s3JMiHOhAur5hsMA4Sn&uqxkVKz*=%5LrI@%>k zm83H>l9_q^&7AMOyQJ=PXq}Z+F^VtF#}-5kei=*&$>rA3m0LB^$azUH-gxmh-gI;l zs1^TxM*7?*c%tJwjcJu6==0)Co_ld7&pU~8LfaK255n-!=NwOvI?7&+Bs}zDOP+fX zCeJ&{-l|fldJu+(9&90XV@G90)kq`h#n*V_MH;>7w5Z^@eKX&s2X*U}*Kyu_)i&&H zh?o@*@!hd9S`}#x)#b(GOu>n>a$wgb>QAjn8YI}IUcn>UTmKfxm-* z#p4fR%Zm$3%c})KaUd+T(3p~G^NzNovnMH0Xv$p1Pr=V4R-36eC-5o`M6ouRN zizkWmz-oD0o~pprx%MnqZ6K77J2Fi+L~ka`EpqEFe-{TB5AEywqM}FzIuwlTU`6|} zs%+#{bSG~-*ac5CD-Tn^SaFUL8f;c4%B*#RgyT~Pfn_@b7Pw57gq>!&72s8XUkX&8 zb62)EQs4KwU4tTq`F5LdHwNJ^G_{f|9yS+)P*AszKdm<&SS`Sph7Jcb7gQ24=ya%| zQI=WbdSQi5jVFq9ycnZlTM~uI8a1zZh>1jd*yspTb%2#l0t$ z#05O7{7CgF(KOAk&EGM6ey>lzHeV;4wr!Lq!B;n!O4r*XP?&Sa3w4UpG!dG?w0hnj zfm-6$+fovZ83Frz-k{io^R-KM!P5LvfPC_$O~d0697*$Xd0(uN1#%C1G9;bHW-Ln3!#V+Mt)RzW(l`n8 zDdJ0^p#n72hs0~#9%JTl9`^<$(8%Bb_u-Z?#VeGY3~{|a#z?jWL<(gx5*z`J*niqg z#Mn-n{lt@#YEOYy4T1wa28?SiT%n*iml!J?1jSF+VF1nPGEHORr?WETc)Nv=adE>+ z|B|+%`>oQDqa&3~Cu8Zw*i4#>EoWwvsf9$0n@Mrm*i3RU!>z5Y6Mt%CC_dx#oUIqA zu)0W+{qBhY)LBS$kg_^H;vRCFi+^w@v~k2kyaPDnb&>Zlq^XDsBVYb{&I$>#r|*A9 z@Wc@$;NeH3ff+O|;~hY-5eMNRwO(L{G4j1Rv)Vzi4JjJ{j}Ne1z#BxQ2n%IQ-I4-k z1w|3eME5j}`(;O_;5&}Eup3TacA|=Y(V%PLFOu?MI>{VUCRr>#J^973_F&DZMkHsFV4DVtzDoIiAO| zhp=sd%Vf9(&XuOodQZ|d1ZUthlH`A6ES}n)*-p;#F)qmqVmgr)w-X7zkV^7=UP$D( z9GGGhKQcCte~@(fM)FQa{wbW!5}!jlv*!Aw8CIp8GQ`Bv+`AIFpUb@c2h(KT|6>54 zdrsq2z6N9sYYo>yLe}HD_5R(%b)YGj>vU~sC)cseufuiQ`*#i3F-`Tjj@Pv|ay?-z zR&^NfEb^}5y+Kxe_MrUSG3^aV_n0e2k%8rXuJ5v)ZX3qqR znKHp*R!p!41Fm_~LbhO7q;`t(mQXxifBSbff!y{U!#S}IxmUW1eFw@bz~o9*zP&H0Ut8aueU-Vu!;>o$};>DGMH#;uk~jyrO_6VA7ceq-jE)~Fc2cc(PsEv(ALj}=fI5j6FJnlZ$ z&f(#y{M*EuSxqWyS-B`HIXQiQ6@SaRcF4^l{@xMjEus;wrhy3IfdGwv7O{ zFH;bv3WwY8i)bAOeT z&-x4&3aZZbgi+hzh{-^_#8>Q>AT(>VWZ`B?Q6(32Zc5^T#ec(u@p)x4Xik><3A$=f z9l#9LSWM!{#x17l(#i2L`&3-zxEVtn7ts%V#{~KkOKt~+Xk@YuCFB8|)#s8qWEO33 zo7{7O(H{;3=geRbbG4hZukdpoc`@g+YRtJr>RcewJ~kK`5kA~>#~_f*ruNjQC)&5i zH@bppJYn^Y&PXiJX2HzB)>EB;8=lLX1`inCE3g-mgKtYI;$pv^N5jo=+GuNI+-zem zI5@{@!SCKh!z>_D#Ig$O%BI9vLM@n5gHQ7c81&5vt=#|Oc$3q;I}gd%G1zz zU5?&!FKijtHFCuA7GD?hRn5LVOe<0KfO3{xXoJeDViEB;D06$;mE9Kcd4=#9c9uMR z_GzlEoVKanr-Rv8y>6D#4GI_MSkL7i*oM324v@0tmgIf$Xj#ZPy$2;!21DCBQrGkd6Z9DY_XN z7<$54g*Io+Qm9L2xHQklXXCNNLM*Wq<5J1x1Q$V1RbiWPbF;N4qNKab6U=WU|M1bI8jzHgLeEEeMuxAYM;y;yTIgFbGQ7qob1 zSmD@AHYx@oPH#4q%Ey{r7A}VAWIZ|5VzP?*lUJ{Q-vOKH$0CoXBPom6=W&^~y$kTp z-N9$<3QJ4klmun_CE50L74)u9^F+kw4!u^9LURfDS&_ChOmO-&KE;PsmQruR&S=Wc-~;u1`u^%akT8w|d_ zo|{!fd{7KoF)G##R`)m7XmwWD5nyYmS+C?{a7vNkswpQaScWvT(9D3;fIGiu3}5sl zmOBnM^V~8Txdp5laJRWl*ou+)_?;XkoK!;^h?>Oweo)En1a=IU#2u64aId(`=^#qR z4J79bB)I|>NFL9f- zTTVA~8$2JK)flosC@MksD`km>B)58;+OJcy%6qPsF<)VQ1@j5F*??hSYr#)r^^5{< zncy}({t5Qj1pD#3H=m;QG8nugc*Dgh+3(_Xa;cFb+H&*=)ZC&@Yljc!DGwIj=yCTY zc){wLeLcuKRX4x0Ycn*D93vtEJm`4xY}hkk)jNE*zjXSSmz@XdHl4`#{w!OA{@nmX z@1wSWF8Ag2$I(2!JB9Xv&*Fl0nBll#-rvKeUTh9{x9@}X zfs6|Q`#?CIg@^-8wL*iQL1dGm9B@yf2R{)0Se|>PrS-;xnQ_fI5@RY(rcy2AdE>{3 zrPnpF45bk-5UfR-zk?jgI3nE8%9lVZpRG`q2zq3NCuo=(H#3t+#rdTalGn3bCKF4i z(j1>j$5RXG+4#c3+S+Ogl5>atC*w*FveM^A+|Vt0!dOiv>fE60y!UsEz6d%#g4C8+j~KqDQ0ZPL8}aMxC`qzsV=bA%Y3X|4hPs-RO4w6scz( z$w)NTz?ma(47%SRP8Y4wk#RSJ)-1&c6UyOP?8&|7DbdU* z%z0{`xK0ajKKAL`f+g3~{oAytj^Z(pw}T^{qWN4JwWI^bTHf=Y33T5#AI4!kfUWG8TM-H3FU_{PH`ezkJ)7|N5G@Xg86 zGF({*AvB8wYigY0?lDUNsT2fQKexlHNNgIb4-m$(aK9-?7Rvumj=M8VDCaboC^ZDs zba}eU#F;8LD+;`cP34IrtlNz?OFmJm%IbAT(x?JMeKvZYx0iG8D6k~QEPINPnXm%x zl{bW3h3^g1TDqW;yo%mp^z&b{uxC6`4f(o&;K&W3mmK z4Vr4qgn_5>88{IGfwle2OgGW-r;k4VQ0}n{Gf^;bw$I4ux3|nPk>*dfw_HF4LOe~~ zI!TR_jg>)G6G*(t1N%h^Vj$;_Ebju>5_7THv9UCv6Q$t9hZ zg|ULH6K(XF<)9<~K0tXO(%xGF>Y%^|e((DW@8am_4k{;)+Y@JgG<5xuF$S*_{J`uy z|L?(Nu6AG$XTFVOmF9-MB6v*J#q!|y!Xc2Ro|nt7M7K9LEHI1W=}%ui#3o<88Jq7< zwhXJ}&KRUsaKL7USD0nd$#a?00mrMi+@U)@t>OD|!v>osaCt(W%&$QBJi3R8^RO>B zE9(Q@Ou=ntW`@ihR50MWu*wH{YCFtdLe~0-4KvmvHqeg_wZug0pHvR)iHj$sCu{YY zm*|MW8f}nlfMq!@fM|*cVIyomgFK0*FMJK?K?9^I2Z{dMAdtaIhAT!W-LZZ!p~5R> zz>^z^98D}deT5bbJ-{u=oI(W>?8~xdYDgCw%X{kNXHQmbb50-v#e*dsjQ>|7lcseVMwd3!?r=&oW7-qU8N-FUHj5Ki+|YEF zX=yHBL2x}^tchVWB!LA8EU-l2HZAn;=8j18(#O$uFm>bSG{ics&hIxIeFW8e|&z<%TUHNSM0qp-#c=_2#ED$G*md!^bJRxDn^Ffn$5vBa9}#rQv}| zR`o~1qy+h#WB=ZnDzrHsY^DHNW?bE#1G+#-TUEBAAWp^KBxG; z!61Rt$SnuHAuc;4%w)&$$c*GsDN&cvL3NdTpX8x1_0W?}PbQW*`4;4GOOIfFB|=Rc z=NmMg3vv=Iq`^qaf^e&h>P!ss5+~lwmN~ zXjC+%MQlWHvEXRd1l{g-R7$$Roc=UY3hS4VX$q?1lf|R;Q zJ(HP}MCKY^)W@B-UmGr+mavQ`cjL}u9!=Chu8uMAaK)c2$&oCb;Ke0HR8*kw^tgwrh?AK0K_c>&Wi6mgJqdimyc$#8yq zG`aZKAO4lz{#R%G^W<>iy-a9)xLCcER*sQx_)G7t;g0+jIcO}Lrd zl)MCUhUaS-xY$4=`)@eB>K=2gctS8~_)ZOxr1VyfL7aH^Lt|p>1!wXOX zSlDM2g6E;5AxnVmn1)btrp4M@=GZmT!rJo!+wB+&lON9@fKZ9rij<-<)1rVFuq+5j z6i9?6_aaHBA;gU5T__Lk`63?KG#qw_oTOa8iY7zP5iylLip1z1?s*Whr-EZ{kPC9d zwduLa;TfU`>0vrLIyWmsD|=Ximhw`r;pE}c@u2hodVPLcyNR3`13e*OUIC(b^OKGAeTV2=uoA?1;j&>>EgxEx30 zQzi^~sni{$He$W7#j#8eOuC967-83og~cCjM?g@!6&>2jwUq3mxo7DZ6kvodn|F5p zX-a!$m-7^bVcQdRLKfy7fcw^%d}GI`oEVkz)Q*uV0>!qcD>;0k-~W1g{r+wD?NzVS z8J=979KV12?)vPcGwct~x`Y1PlR+eG_?pF76b`ZYQG`qcxvHfqHXJv>88S%wn~j;( zf6O&Ra5~RfCQ>qA$+MQW`O6YZH4Ts3WtGP_4-{mP%aY&}8Vm^_`*w$6WKs2+`f?V<=JgeR=@{)zqYlZJ6xTk&KrQd~= zER&-6j}AEt_)A7ggUnRYGrxb`LtOYSNhtE&|9;jFk`dKMI{V*BtTp$FCO-c=`=8O z2$9$;L4uMyN}xi+>6Cf`rc2IXFJUyF(4iw2%kLY?!Z6sl{9kgg2_2OhY?vo0W+GZi zj9?QX$Zq*D4_umZvYItc?Q2b{%iS+EA9gjXo!VFGutTHvf?>nXWkt&2z#OQ#;M!RB zUuO8xTn8D-QTlLheR;Iwh$1>o(H+e-&qONeMjuac#NmiVp0Ue`!C!<-{{W{K5Sc0or#Bi2+9Ntmr!c zo_zAJzo6d5-%))1``!LPum3JS`PcvFvfIDR{_hTs_4@DPlYjl0pGBE>lvw|h-l<;y zU3?0xe^|;a@D4H`C&$NW>)-EnW9xrBIO+Zdb+$HY<@3zf|Mfpzf4chd-#@=Yu&9?W zUc(<6Y5nGa9PKV&AoThk8&mi~zWPv4>M}qDguZ}R61FG!^%1+t8d|3P4Lt1M9C+Y< zq9o||_2XVSqGMt1r7h_y<2go2&cI`I)}X}g8q z0V6hG4cZ*QV!(OWa3}XE54}DTi~D-)OjnmLSVsm;Yw_mb=*UuMt(J!;jy;WlNgW|w2PTQF)&Vl;G>hM4^&C3{=4;blEPZ7+9H50|Oz^#9 zk$1g07}4h>m@JtTjSp@~d{Q7d0uU|}N5Yoohz&xllpNdGCD$kJaz6Hgl``UYlV+Vw zwL(DTG`}|IccPDp;TmLg6sgJOBl^3&uWAmm=)Y4M!w?K)u@WKmYnXwivsw7ccsgo3L7Q)exrs|Ua3Zr8RP%Yo^zIl;% zra%WxV=a>*gr-Rls_MZ@8MYaH`H^Mr7N8_0V_JdAwZOhUT3Vr%jHkO}HCusk)2 z5T(_ei4=LO0}bM!HIp1Am!b((A87(uWb(j{9@#&^#m2xHDw#rojhRR`NWdPGy)(- zS-|O0K{$D>86YO-`3b;Hyx$1W!$=uT8PpW;jsnlu*sL}I3lhqiU52hzAb_iPUmp>m z0#z-fA-1r97s8iYTswNe6{obF$IJNfcKl~p^QkCU`F*9U5U}^%kp6)D4Bs#3p7tU% zegcg;0UV<3jY(-q*P1SS{G1USNlYKlTRd^2qJvi21}Fz@6I!s>CS6B7&LsJkwC_wV zM39q60nH6E*^kA{LUJ{^ek0u|l+v-7Ip-U;#SZyxB6z8q9NyPa+PEVq5uU@qRs$Bq z%w>r_LZkhueMdf%`l@_bx8_Zm{fD2Bo|tKkrMW7hA0u0*CPzSxuGXsM%?;|PdpW`w z%^f#=kunw|I)W)CU)-o2CicYr@#S^Ul8}_+jK)g$BByvp-$*fc8IY~7MGcx{n1K4y zSeEvvD~YQ#P$Rl&4!8&NYj0slboe$sxTIeR#Uht4QTVPO;D5qxLT)ZnpA+%Qyg`uB z&&46i8G%1@oifloAh@}oOJutdzLxm#e$w8gVpW?`Um6%)4ed<^FGU&5`_i;`i?laT z$!p5HCCbZ!6H-YiL;j+KS2`qIIralNdP2TpL4+fnyh`oliX8vQ6qkAQ-7ibSSD)0B zzcEsGyaLFE3?SZN)slDu$azd~ynoFhw#Xq;Or)A!)FP-S?24kSBOctSDR{#uc(|7I z#^hV=t9l(u7}PZ`3A|rTvA0RFV~!%4Sl2_WLwiB%R+2Bo)#wBnnFWD0Qrbs1=FD;Y zkURh7cN1r^`aSA(y5|b{Qf(x;3d9^B-*E3BxZ~@XARc*`291Etz_ktVB%q-^Xy}^Q zLh@nQMr|~-EaU?AK=v@2L}A)ShaVt~9Ls|;y`TWLI>)Wv@k<3S$pF5`HccN)6OQE` zfr|}m&Vn=6f=*kZfBgNw|MB<#K@XkwdHV$5eg(B-GT%pE(l(v7Z}Ca}LGVy;!gFs8ff1jM{_|Khu@~=O{-jsVsnfwo39sj+P zPyY2^+Cj`4jYrGbED&~$lU{aVDXOFWGTquc-|4MG<5JnC+^v&PyYQsHl}yD?LFKTe#e^qpAi4w zr}SU%|LuQXlLbY;&Mn(xX9se0czk?pKla;>dw0|$LpdTX4p@_mU*V{c)UbPgetz^T zJBU1*Q~&&n4#uSO-kXEY0a}qi5L_+8 z^L=N5oY{;9?vwlQyG1KBygB&ocs%A;oP{wl{neX;cK6^Y>CtXlLpT(x@X%`$%Upam z{Cf(VAz%R-m^L!x{`%&ie}HDDMUGa#oy}&Vd(jvD1rg2WqO~xfkELrJ{?>RYx`&J6 z`N3dtfXKUl=%CL1dHAB#K-yC=o z!@`H{?n?&h2W;QLm3jJvHVXR$p59~zwLiY z<$vO+pp!p6)8tQl{c~r2isOq;`-F7br;XD-#qsKe90>cSb3Ua&r*l3vFRz8p`J{6` ztpQHwe9}3ewg#ro`Lq$NI_Hzl`J{6`>6}kG=abI)v~AFI&L^GosdgmPIiJdcsB=DT z7d)NwDSWpfIiI95b8W(>3D@lEY)|1fn?@}r*S0SgwMbV}gy2*Zs+a~}ntGXcsACk1 z#VDo}Y0U^#GtzbcI%0845sQoE*fJ-{L5Jk_%(M+F^=@{!Bi~Ot&M~<3q$ql%bn>S3 zJ<{EFseKgoe6~COGR+AJbAnQJw2QKeB&)1u99v=>8*_%ltRp&aN$Le17q8>u_cJa& zzyI%N*YTZ+V-@!R&i4Q9_D}mKQUBlLo{s<8$)}Y6uSA7?^8o%G^#J~zAjI4E0FJrX z(q7hk*vc8smbC*H+oUB?8wx*8PNQ@9MKak?2y<}cn*^tUAF$^cccy)(It|E++cE8Afl-Ge zO&FdlV*%?jRlQzA*LDsB^TJi;gZ|zL7?H);?Lvr`)nSBA1Em&QXc{oL*ac-0^>|LQ zd?()D1&FnH)HKO!CJKx5ZMjhWW0Wg924F)cw(Xe7XD%LxIhsl>%-~14*+=8lgQ&xNaXqFUPsJMigh8!IV#knlPWx@tz>}6>i3g$lL^?Jpv8P0RaerByC`5Xpu_15&%}s6moqhqc?eH(Wra+V zz+5L@^G>xrsjxjsVz+;9_~_n%*cU>xEOJC3a|t<^Sq%my zL?{3n8ZH6xtt&i5b6c3sTHS7|d-gJdzcpEzj(2BeN?h(Vvtns0R0;b};S4|}^8XBa zI{)iVK4sQF&SSIRk!}AQbP0Au*8jBIA87mEEJ(1T@!HmKv7#m|u3}C6-o|pjb`u&6>(hix(G{q>m_6QQZm z!k7q8E3mEPcuvhNG!DMP!}GUvFU< zD{_rcNrEPsrr~TjsSTDc?f>_GZ$fLEWseOrM*8?yzzkHrCa^XxXT&fr?PT_E&+^d` z!LlPf|1jyg{cvze$CL670LaTYb=%eJmdaVI;2R5{gOlFi99*`O zuG3i2b+EnMFT;LqQcv$#Y>W4XX{l%2l{cWuldp>brhh9EVWRIjq`hxdMkzSRb&zU_ z;wefLGqT!5obVkXTZH8bCOU*V2abjqUsIMah2?#8;7G|i-Zfre8`6FvI85DRvMj}z@8IJj1q;SEYS!|qfI;h z4%dLTBi@_E59wWkW1k7a%`qVa-WrtiX;}+ex~@qk zcMmnga}{myJjWxMTqtO@9?E%4<5=s3F)n{m4kkV3#5S^*$iRgP?9rZyd} z=9o{5V}5p>2SRK;$`;AOkTsm5KaM_qB#cm^0GheZoG?>wIhkP3n=P%VR~f-1%`a01 z_H6iNA+l0b7h|cOy%lI<*7^=>#Y*E8Db`85z-SRj!)e-7hAF6Js0un_}s zrbO9g{^X1x!&URgrA??e!(BA|e53U->CZJv4(^^&qDiakn$s)8o?xpIHB6|-t!iIV zhmZt^mK>j!;AT6qOd)X^sAg zI;S5DGW++##bV?;F0PW3gnQnuK7ZYivf$Dj<~eZ~i>^MNqSwD%5*$Dj3EBjmUmyK) zsX0x`z@8hY3DXG8aoC;G9H+0&?dY4i;EJ6p*^Scec6m+aU{WE{T;@4(8ILTzC$-(| zG^3eI%D|o*b5ZER6X7g6y{t|z+ko`4`qS`F{`{}P-u7i_VebdShOL$_6>#zVzk|W4 z&i}iUPx1A?HhkkVBu{no76Q%A|9gCT9LxWE(mmGoKX>vemH#(D0VMM{?q&Ah1DgF; zMEmY6`)}e?*3x#1z6mD4faPg(NDD*hVZ)u=r#u(SQq20wD7!rp$eMwq}~EnRk;j zU2`_Ry^up=-;{H1p7hM*t9chaX;+$|Ik8z3aj&3JjoF(Mo2CF+GPCmzV7fK&BM3%h z+gaFEAq?Nybz+xii#(HRAfbFK5JcT-O&ReFccG(JXw@wipex=`=Eg_rr2tU zM35Mkp%*NXN%=3tBEk-bN-Xww>cSF2hvY~qdgizuQll~3^hBx@p=lqbjt>QXOYvNt zl!YromapfXSf?%Ui}D;v%Y&5Oe>}eTf)BAZ5QZhIF|Z*>49k24sZ;+Lw~8iJfGgFA zvl=#m^Pl0+VW4O&=~N)$AI!I+jaCv;-G?5Wfe;caMs$b~ZC19clgzVCk@21obXdn1 z9=RTZ5X4e!!>5F4g%DJi77d(7yzE{VB2rLoUqJnJmp)W8dkV{v7Q_SRm#S6D8FcTd zY*1ccEe%bnSzI(z&7%J-d8mwh#R2}x7y!^UAPo6b9bx<@{GjiyW}C1l^1<*9>_nB( zTHk$yP0-eFyK(lbqv_)I=h&p8lT=3(>`##|DTC1qJ;N-(7--5>zQLrBCXqrv6msTR zTj3?Atf@+?JZ;Ftj^VYRx$yM8ZasPwQ@rQAZ2Atyu3ltKpmOZEa(f%qrFrjQMT-~A zZLRD*eZGCIj>dDmWQX1+zn=vo*{ZtZN0%4>x_6Umg|;HtIyj1yE{}dBWN8UyVm4#F z2h=x8Jn4jP5nB1nAgt9Y?G8;KTThUoOmW!#_TK)i!VnTGE00?o-;tLhE@l*>{}oGdb_z`FbkL?smRa!%nQIZcwUxK^>Js5+DAMmqj8;fw8es z2?^Iy;}rvc^zCa%vnW9Kilh>~Rp3Zjg4)7fMy|>K2|Fz?7A}3{B8jFO)HyGfD*^g6 zcYjS2lfW`?D*~x0eX|IH@SWJJ$H+q_)b4N+L*$cC`deF3^-UmGU#^(9Ll|y!=m3kM zK*eDj+KJwk;+FYcRVMbf;v>q$K5yx@JhnH^=*oO_$gA z_*)T@8G^f#1O$exiI}}=biTE%agiBHv-Kb(3r#jfyL0@&XwV*4one;taJRFC|A_`W~Fdrln98M~2FM-3PLXRYv=C-tXT zi%~geCyA_YiVh;UfE?H3gif53+UOo=gS)@2H~VaJ_@LN2d)-li4az#Z;tep95buTr z5Do9I4}oL2&R~<*kI$9QJOR$jZ0GHq?5EI`>^{}wa#xQnEWO+(h@WrSPXzo~4wHCT z74a`0=8bjs0o||Hh8QD_(V7*8D@h z-E|*5@5#AYy*=Y~V|RrFkCU!Fw0K`nVxF5hjU|6V7m0-gDwlGj)y>~wWcBh-^#P#@ zZ*&?jbnVuo?{;w!1jFoH6@WkC;=q|94n+zwB>L@Q?t&a9Sh%v@J%;xIqKyl^A3rZ% zpK@5{7%N+7hBjV6is1JujMVQqSoD34ma>GCH!+hgt$*Sb6?T701uU`&!CIU$|3(%g zwYQ|SICF=SRE9m2;QQ$uqupi1CT=PFqA2f@O28ImCeQI@aq}K)F_(9GH9GmVdXalC zFW>({@OI$eJ^j@hDPQ&;3r(4aB6KDacOw!99hSgDVk}3xP)4LFosC^zz8J@abQO$C z0@&Y*6oZyJik#ubbBh;FBc(&PO(V6D^kQfF${vR;auGYnNMw^J9fwtdF#qfQUtf)8 z_ZB*esDUL;BbEK@*ytIgbcrSGOj?IJTx~2pGb;y4@|dRm!URbv*K|20v&5(^s)KW{ z9LA28EoBLR1H;xwNYH!XYQ^b9ck}cRSJd+=OZ6j=f-v2M>T$GoYR6;7)HzoGX9EGw z@xoqAvcH!HTdV{B<|`|>G}*t9$TAeNU4$2{EXmE*(?2XtwgH_q`7rDGR!b@V86GF!+}^{j6qdh^m zEY0H2tO>k0RwPF>n&^Yf+Wu#*k(PDX{1mBpm&Y6ghQ*u+pDdN{EO06zG|-AM){w=| z%ly($$__H%fm1Uh)GzKjrj(FR6@Dv+d}&`zPRaW+QP=ZO13);-`L^fpRExRdB$}^X z$elP2Qy$>SCRNBS3Ad96rN~r4H5)vq85Ekv`~5Du3JeS`Zc1Lz0-u0I*6P-tXAUtB zpte0s@h%g*0e$4X^<-U7ODNyEkXVh573}&2Z7~$&6p;?v`9c^x&y{)R6{L!yqQWHv zNAfO4G?n3WM3#-meJ;@dOI?)H!mNWRlj$UIC&O4xhPm&vINX>dj8xoCmRK~iDq++S z=S!;CD`sbYKt;8YIe%pfaq9ktbaU3Y@dxwkYwAR-amJXUj~w|EhP{Y5VqVFZrLHj> z(jA*OnoYBmKIArsqavM6^nEK%dj@aJsHm)bMM((>^H7j&27ZD?G^?%+gl@E9PjT6= zDVL9)G^Glya_nxPk+!xnCe@@&EfQ=!6O=2c@v7b6#V$0G-^~r{-wX;d-Xm@N`^mpn ze^~zZWpiqqvD^9JSjgdy1zb)lT(3O0rrk?CUq3s2z4*K~t`K%~bF<-Je}-n?B~~C1 zh)u7_b5wq)iYhVre%OY&fPaU7$fNRD3ScSO{ox_16ZJBoz9K{kL|8+aiuMu1l~;T+s5j`)le0o;S2|k{F1B zz1q7X$Bh?X?p!g~PhKqS;G6#P^$W;ikDz!$OL_2vvl99$sm$9^FpB7k6Woq#QTKT zV1=zD4U7A^pCHYygCKUn>%h8>YO-G*>hUs`wAH>XKLj*46I?VlFHJ5YQ2o zC9$}Z+PVcJ8Kz)J#N!Dc;&6t|#*hda_M8s<+nI@;hY7A%w9xHQV?wBJHcl*&*&6yp z3*syT^}MX?|DOLCh!#CCW3>q7;%-xOuOH%)H^zB$E}Y*!C{$9Tt9VJCEh|7gQZ$FIj@ z3*N~u$Hf7$m3-}AGX8UDWJR@xr<~Sh>>2Tdx6l^Hv8SIBLKcS6C7&&qZ(6nIF^al* zGn~V95p3e&!-(Hx72mgH=O3gc$gWuv@(o1WV>Q{2g&S)c-_v|Lu0@9y7h|00yW9<`SW!J*Rcw+_=wS}f9=@1O@LpvrbWmr_2ELZuXtMY z#YvtYFN2_ua>)yLzCOfqs;N~%k;@}h^5{X*Tn_Wwr_wjfpS8S76}(!J(`VDiNF+k5 z#ZIdtZykpP67$Vt6;%RI@O7qBYwtixqA+VR=`Ngnm7HnN?rD;77?x!FR4;9ha^f_O ztHWkQopOHDV~!P)I9n%H9-*~mrC>=4o+%0SAS@}aSsRXf79G;NB^?R;^5!?r%syXy zp5FG=#m0jYU~Cr(Mj$>%@sV-IR-p{IBT#P?nhwqJu&j`AZ9?@~{{ z_Tgm=zi=7Gnu?+fEjP%@P>8JlLrC=;tA5ry4X>5Ck1-NQP|_r`o0mWw#43hiM}GubA#vT0yiS~&p{b?Ei0PwM zordf?f}IVJbCoP{6&)UlPV7#__n|~ET4;7k*1H);q9qMvUceUPb>G(+3dF*#3rX-m z@og-S)RKBT$aHFd9;8u+ouU+udw6z*2gALUh?0I1uaucJt^dJHdp{f4!o6oFaL0ar z4#=HVbrw`c!k8*ahwy=}v-@QsPawB80pANPU%(GA)aI%Af0HKG zj1r$)i8JTE?VnB$zk7UrLRVwl;C#)0k=9RPrh0qF!ud#f$hK{n_<@8O4ka))GsIm$ zZJ_j5XwW=@S^sRd;`22zyuvs7@`JEMj8C#YC;-4OV9c;DLt)aHdIHotkq5PVIY+A$ zg~!`=(EU9xTYoVS9}0=jK{kvaq7Ibxu^F%g{ggB)2FC^4FPYc0eng=OF`Qxn(LH%j zKP3{TqME<~qv3Er+4}ms`Wc`?igu8n@bwr{-e5rew}ll_q9|ghTCwz`A&Q5Vlum_V znZ|}jNJRLo+n9JRJlVct%5u`ztb^gG#h!%$@sLo&(di2ukVgHC#VD>^1fJAh z>Ah6XW!mx;i zU_=)h+lUOLUDV>{YrnwF(c|q=%B60{_IrMeG#9$I5PFAWpyZ@FU`h|G61#9zf26d9@Ef%t?P7A4(1V4lj;E2rm6XV{H5^pgr4&>@)w5?y}wS5aexX4Vf7Nb zp$;ZGBXqm|gjX=wonaiwX5-Z&7wpa&v;U~yDWz5`gt=&`?Ns$H3_KHLghYoURLrL_ zPi!+Y*8LNG-}5f#PD&&}7FF}&sRI297#yw$(MvvHE|3&BkABzNYgjLhuU%0b=J+P# z1$yeN$|;RdY_h!M`)fCjFy}1`cgm*L%qGla)d5V9iL~p4LI_~=`$FJ;phQ>^e~%bT zdMU4rRBKCXC;KSXY~p_Vs2;Ok#&VM6{iybCI2Q{=nDFip>uR{iWYUAUkY0}(jMRY~ zh(<+rB@6ECX)B%r@k3cwFf166*aJ1Y=}@0^K~d*-8%JtuM`R_|NAvoXU{K>ZR$2tZ zcEvQZ+>88hqHpiS;MEeYR(577dq3fsnx)j%15Rt6E`RzP=OTv$XQ8tgyp z?@viGxH0PwghO<=Lq`QWbC`clp-lby=~iT1j`lOC>MOXbuXcWi7EgW_)f^nyFDf_& zkq;aHNhQxGVh#f+E*H)Lzu}5_i(yr@=qEejZGf|1cP7I-+Oc zE^z)ccAuwP24+rTn&3~a*h#!0coRk!Ynkn*iFv2=K9Ogt_)D2sr~W^5&~bL0A=Oru zw|O|d78#x_<9!LtL+}^w zQW)Y;5*y|%~Dv2s*<>IHwvn@22hOg_OnTuf^@nC54-(9^any#0IkRR1HGJ9*>%Dw zkAFt|tEccrg|R`6E|xY59Ly_-DFbCu!o=u2s%~a8D2HzFNBx4*kODnFYO)?IRF#AA zn}J+x7xigEoTgwTK2zqxTlwjGCBy<3k+m`_s}9J%cIqK2gMqYwm2*ec<>>^}uVrI- zf$eNQK0xmSE@fkvw>wVQaFVFiS(H~q3E`t*trn^}Sb|nkvlKKxVqL0X70TLug@D*eXJWQg>(0$r@ z;6WBFI8K6)t$+P&T?vxJUSo(3WN{STHt^GGiQo7`l*Dt5tY_VQGM=L!dJ0qDQ;ewI z(~*HlZem9RDlSSqwc~Lk10>@%8nf7a#;uHJCc9s1f92vPS#As% z)?PT`m8fGGAYBxG#*q7;4HWZGr(*=m7Oc4e5eESnBA|8*9 zLQ^;hrZ>goGjZUGfr(!LdDvfl##zrSrwSB}rkS*}abGkI8@M`j%Sw+}Nw8eU5!8M1B74s ze0DKnb|dF)l5khkK&Hl9Ei~g2lClzr)RE22n)4Ct7vFQYfoHuEpd639xt=9v z(2ZXlpx-nA{#zR37rbu891hP3VQ5WZdGFy93T}tR#G5UcMNVm=i(4F8hi2&gIZIfa zG4@s|#X|-wTrz{Lt(nzQO*<3XisxD5whJVEv90IAQ;ergWoJCJyXN?_35rrTp^UjR z>S^6s()Tt9#I{oJR+{PG<4WFq87aZI8(Km(YIcPpK2v;cVkW}eP@m~+m`bOD3D0EpY!x~ham529x;fX<{-pl# z^L!(K-}wDl$md;l%1$lXLJ)P(E0ecz)1@W^^9Pl7{vdm6{QI_ShsQ1ceH+Pb4sRGG zZbqko^DR7Vj@)+iqqgjJpm+t@Rb5vxVBDn^g}XlH=Rx<6+v@u^oZB4ce^%Sy%3<(E zcE)a~XLLr2(~w=={Iiw>oRE6>>C*{w(MChXBmc7j_d^m0A9XW zD@ay)8^kMt=I>d@wDB?%l-Iq-F`2!-kfFtYVLI`HiwSO@ggV_Fx_1Lf7r@-sj=Eql z3>>!;hQ3-c{E8)6$ekp|S;_*=+%Qyma7E&y)e{+tj0F4ENy(pb7MaFwBy^UeI^{!S z+{59onQ^E5$1`iH$#}Xq;TyKhX`G5IW+Q_ATlEKw;wF(VkdYoy1Vv3;Z%pb1#^O5v zNXXP03p@E!faeV13dV6i;>h_;p)~?)L+UB+?+)puTq;QNYYF}H)N%oUIYg)4vt0dol%`g z;XM+-fdsWMM31?cqc!9ulbKuq8n+L0JHXkIK)AMT9rr@m?K0xEKawh@mZ(OP&{JO_ z2-je<$BQLfalFBcj{Gj*E`95XcJDQRhDSm?*0xRKgpfau{A`eAowLduf{1s3HdvSf zpwh;?!oi@%n5TN`#DtLFh7O_L_$M9tN(IT0L)P>4D6A`4%`gU_L%!9HMuM~Jq%1*V z#SWjL^&^OE9@5iqk__I9?6c~R5kBsl4$~YcGN5Z^tjfFH&}7JsBI46UU@+8Zau#gJ zC9#lVGQ~e>l+>6PGhGiDx{nyU@ZT~oPIZxHr3m) zl(cKj*34(4Sb6|+qn1zTgfelcnLo>}N4p@?9&`@8Ol4$D=a<#&jLtaEw z!`SwYBG5+?K)dW#r8=4(9rc-T9J2A0i>Eoim$>E{joGIXy?&}^6oZCS^9v=Qh*#DA znzvH1KlMoAmjZnxfR5rat}gz?i96H#g?sRn`i-G5CUXyxj}?hF-CtxXHlA4gIssrY zKngW$c)v@U8^~YMnptaPTHKb;S1@Z}SKwATRa0ZtE^FKB{)85pB59?$H^(`nOAm;j zU4uhQn^o7bmvko0BZ^mGNNRPgYFw0({`bq|D(c&>M&4GHpin30V6|IwGWqRHtuYkK z;$&Vco)xK_(ZFaikg5asVyPUXxV>$cx2xbf1kyD$M+tmAXVV>5{;nMfPtcDA^^k45 zXXkV3bT1NVNO>9sYLz^%{2>TFAxRyxy$rhub=~6GG*gj1Htc8PE|5#pXD? zk5h}2yJ(jvvBMbrhN5hrYl&?f@K|C1WMv`H)qs2)yBK7*XKZIhdYY!N{dzh5_0i4g zVK@&>LeKvy$(+Re`gDq@|OfMJ^AD2Ah?=v33LaZ^O zS(D$h=K}}6O{y>pQAddUqNJeQzGWU2@2t2O4@UAUa*>4fOosLp*q#`4J}o2Tq0br|&-{kXGG>Z_{-bo*E zlbS|nut{H@ZQuDrijf&`QaoI1aCc-^PQnP>@2uc80sxS`7K6)b;L_B zh!8j_-WmqI#@^q@Pk?yF_Ien05QTvGR*C><1p5}~UDCs^WF7`TkDe3bgymh*$B*0$ z8Xs|*8{-7_E9G&u&>N4pxv@vcz7zI7z8yU7)CB$2;5CX#<0cTx;x3dbQ$oM$7dL9S znF?a98r@G@K{N(pS%avfn9T0v#@R;y*&yh2ndBcou-noOlIVfsRZF({}lSy)atWvSSB?V(y}q67l}w-?hNO z^I_!GZ!OVP0MgF>t#t^Oc>v zkM6t@#esq}EWmi`DFY?bA6#vle|DRuRoxi~Uf`FsOx7s(8 zEYwT&>$hX?!n0t{G`SxbA^N%;D|vohpy-zn)U0K|S8{ox zhLINp=kyRKtn&?j`YXkJn(wQilXeC(hqJC4G2CJER!Mkt(33&6@F?V5i>aFA=py&$GvIK(Qo0dtNG8x&v{rioWbWUpkPR-jj(UPEh4W&iPM75ZRT z;8#nRPrvUnUQE{0664`R6=#=fpmo6qqHw<~w})KBM#5N@>Z<$3RjML8U0VOh`x3L( z)`{*_Tw8euRA!RG-w|^qgDX9m^sYO?I+n_E-#(1q4O>1I`d2uBqr|~qh%bV^f|O+5 zN`V%Eka1RlkPkV}KIg9H7QOGECgOZWDOF4!%j~aUN<>PFCU1 z&EuRjd-Ve;4EMYZUnY{pwZcEN^>--zKH-3$4q0>Or@N9BAOg>?lv4C;^X^1K-Sbur zDh9IW4m=lH53SpXlqE1^Q=Cxj3{G%0HO9w58V(Ys9cJ-?8r5H`zG-}Dcn??O*4ilD z0>Ydwp9apWh!(&}7R8(5IzW_gbvrvc&5qsRjfhi5&oiOxN z3M1#cM%xMJ2)fT0h{H^r07TxgkZICz3J0w#3uOJ$PShS*O0B>*TUO5(#4+I z(=yX+=wzD&ZX;_hx6XuSW8dD<))l(rT{lH0?RI0)gBoUv;?fTj)wF0A#kSgc_n0-? z>Q5iXxV1T|@bsdyF4sopW+^IdJMV9jpi$Mg=o_Lwp&~z>pR4aallX$ip4P@TimrGb z3AhhN(xZJJd|8iI3k5oKuK*C02Z2Lb2CozLKF_VPVC(nc4CUv}chwnEEvQDM%5!1!d$6C^m{v!9! zNzov+my#mGfJQ35&xp@|n=y6q9mRF&-W-H({A`o`Eq-iYKqX@wJ!6JEbj^`5z$&!= zB2&N&%1xxG2CE{S#bRVEPdJMO5nxK*Tr9kmQKe<8g6l+Q#ZVOaq3_LZ$win$tV;6T z$5 z#5en1uH)uG0Pp0vM%PPf$X5|{^)9Ri6#Is3^TGxFCiyw3sd4Mq&j4sf1Cw>!`F;hD ze+AcOhKLt5^sVr^C@l*&u0T0tV!Y@-~38n=21F3Jf}YvU`nHD{yLCH5p*lS%%$c+ zz{xb2Of)_07vQ8zah?Z2bhJhRS9p<~ms5RV{1ikcE*2t%90g=^QfOvC5fg)bcJ5+> zM_o_|3{;QwY45wX8!Gfg^+ec{d{$<1xv$AbsQ^0>iQ8Tc@^N|^g|4e;cL>3DEBc5GB0A3kG z+4d_=4^lCG#XXRz1zu(Hn*5jbZ-_QAzjMPUEifc|iDc<1&;+IhfxYC2v|B9_Xcf=^ zXUD15$^QEnF*;?5{|Si&Xbt@Xi3#r!Z&0)dA>G!?b*H2l^sYDG!`G*+`aop#C>30*({ckmZDN}4#D5jQ4)t}~edj!RCHswiI zh$Y8d39iY@A=!eJuvz;MQl|sHZ%3vDXQrfSueBZiMiKQ5ZUKlV+=u$CwM+PE7*wp81kZ8~<}JgaV4SL@-kG{!Q*-2Wv7oW|WM2(i^a>t* z&*J=XRP%fNkl|JN!bRDgG}v@ar?3Z`TH!1YS zU=O8YlRj21@#Ko{Ql`n8BBwXqc9G2CdW%&%ohZ@MgK^8I$MK0U%~!6a2LxH-2a{gb zDE3(}m*rZdvOeOXhfiX`ipv3vFmtOvgQ&`7wKs}lvf-*P-*@dySDPD{FL?A+x+a-+ z|C+Lh_AohyS+@~I7n!u4yre~f{0F9pPs48elVh4dKV0x@Q(hGhl>}G<01xh){Hh+gSt6Vu@)8&mKiS8BH-+(uppD=9KQ*gjbIXob)v>;*KGbUZGMf zM)mS4ivNPmMSo#Lgnz7(qvq-`iXX}?B%{M&t;QxXciFnyA3~9BTuSYy!;Tg8YZDN6 z_SNM>nPO`0XDU9W4V*pgAwPQ}NYc$2mHaH%gznfxRCACYRT4eJ-d;-4ki=B@lx|4S ztxXV*>ak#(O8j-PRs!7Cac`J+gW9>F*=zdHOVI;Ejep-vMv=+c*#|B=<0>>$5>hty z!a{s}_BoH*b%Xkmlob`Nf71wKIo+|IAcGG9_zA3?Ys@c~sytK$3zY^>m4cUwQ;;w> z{|Ottf>_sU$`ppthWUkh}iR%L>wWbV6Lmea~JOn9_ryGf1}X zqiOLjL458LV_=@!QG~8(%3C=2hV-jqu)`C}wctq_S-f)ygCLu9u2y+#?jwU~FM!ZeZ z&7!R-A%OE~hrXA3>w|GXONP-6JD!oGVM3*#i2tFSFRXmbhMGaGqJGx7#AW*sv(&D{ zwv@!ZrYl>9n4_x0QZDjAVFa9RUn1mk?|d~{{k6b%nhQ_-;43F5=h^-_1Biv3eFZ5P z%$x&##4H29X6Ge$l!KyH)O_dB($=G3y<7X?qF`cn;ZPox0g2kV$kz=^437D zAztK#abL;|g?aYvX%x|(bC93F+~7*QBKi{1?G}FZMLVh2lg{8wKOfEKb_u8o4qylU|#*$VY>l!<{`QE>PROJTYcd9?uGV>@zF=dkU3mRZ@(lttk+yd%8X}yB9YQab!KOGoOBzvhXbnWE5_gS%b zwxhpB)8}rXBXZqWt_y^>&DYLQNz#Wv6o}^~kewhN5U2cVHmKl#;UZMi`01OUn*o(KY*CY1ljX`({(AyuMNe85*&wb?z)yCzrVj(Ope z2x(GaB*r>Gr@Z(ZQb3)S9CbFBUj@OR)!-T__8Vu5R-0wH7@AjinF7|*7zW$nL3iKE z3`Fvl6CNjZ^ys&d6j8=v{Fl`2qyB=OI!Y20vGWk1@}lRD5eTiJK00OU1~luEu#JF^uZ^fm<` z)M60epxdN8li#&|{bO#UcE2>F{vA!gA6DH7+ZDd3z2USeH%I=I94|86FRl%h1WU%i z4$VQXFKCgrR5CzpAaJhsL9OM+4UZ7^z;i3tJ$6>u;8qaWf~q5wIW=0r0r_h?rJO3L zU8&Lk?^uGJ!6e&nCFQ%9kd<7FO=UfE!M+!uwBdP5G?gJX$#-i+V`G?-VsDH!xxOKC z|Mv8sODXr*g_+(`H3ECTV@7 zn-)NwtlOF2M^PZzK#RFMTcrilRg0PJ?)7qg^3ng}Ha&38VSuCpqa5wzTd{eFL*gA= zE35nsB?J_(*|_gS-+WP=vEbpE4#~|3P^+SnE3I|kGt$kX$eoD;?R^^IXH1+_wju!F zP^e^*0X+(pbNo>C=jIKTfIJpnY*hs!#nT$gnlqi*iqysu=ir>>Mp|mwd1#+fV_bv- z6-f@djoh>?1D`r_XN6)cev;`pZs6k-N>4QqIU2HyBHBkf4w*jMED?Hz`P-{dBf}}u zmH`+t&}J1eJBy#%6fO3nfv_2iYBHAYTGDCSIr`C&a`++~f_*mRt_6mInq#8byO?b8 z-M4(d$|}qo=*~Rg-3I|X-sg+?C%g`3=FHiPqrlTy#DV)Nj&q1%VjR(n8fOA zP1T}oNO5Q4MwaJ~Yd?iJF!I#MB-o>!p z>|`(KaiD)~VVyi*>3WTi_(}sdlh0QlQa}Vbubo)CD-3CJ!1|&v&kuLBkmZiO$Ign2 zT)WQjZrPxE$9^k+KR$z8pWt4L=FM{L<|@KJ1A2JJf#Jp(Y2eKmV;u!r7X+k<<0V+#560QY6Wq~aclR5$(jiK&Gh@(mqmU8DrBrF#8Vb#Hz z4t+O{uQd4NSeD2Uk@j~Yin1O5^ zL6^{4YSD^OeJ5yez0MGX{0DrpXrv^7J%S!L6Y-k*SiD@F6`Z+MC;&+Kb2g~)o5JWF zU&yy6Wk=Hhd?l>pB z**o6E2ZGSln@8T-(c}ig2yD0W#PK4htO?sR5WAGL5&b;bpdy(dtAPGA8Yd4_jl!A! z5o#_x?m6e>0-l;(C0ay9kk@Z~>>v?ro!DGk4Y39J^3NM?r@yHZiL2XnO+yPz*J=h_ zv!6!|L+?6|erbk|mBZuhBJn5r?c7>OYC&8Ig8B~@&xP@54vM%l!mekBYP zo;P31EAlDt^V9lJ^(1rBA<7QeWCu=glw~K)LWKs+la`LbZcsJUu`{2d_2Bb+kxpB1 z`myp?+$8`Pd-Bw*AvJNCvhT~OvJ1NsP%zfuXm)GL9E8pMz`ql(I{?HasP;8wO!=?w zQaiXRjqwOibo-wKP>2j-!qa|NA%S{nu|&u2O|z*P9j{n(^&;S^&2O}>!R3uP=_XG8 zRw%{Fft`*%=E^96Y1vadCz|94n;cSFztKR)e&A!NV?$eCvX*u5jJ_ueNd%30Fe0a0 zrnP~yVmSPdxKsSPJgNYMg?w0C5`dXCPL>BQ57jq}Cx#r)s80eV8iyKxeOfRo9@g(4 zZ$+!Q5Vb4Z-uiZrWCEsG_ZCcY;M1%jh3!|UU0@@)(zwV*m#MZ;FY+Ec`a9@i|Vx9;6AmisVu5~)Y5EP`DX1&1UU>4 zLq->!^%DI7FV5NOfZGI4?J0N7Mz*o;vFeKZlCvHMu+obA)_T-AcTM|rMfIH)yaZsC z(TUUF)&DHX1n#Q7D?jhF)jC!k_lyS6y!5}rafO5fC)1*=Wb{VQ!c?=!gQ+%jI}LaP zO)-S#jVgc=X1{R(78>mHW%YG% z<}}OGb(x**;&Byv9GKWL(lxy%35fQvx8l3-dp)bruj4ExjvE&3$NiZaPITAVM?ASc z?%$hHkMg@-pbU6PmgMzuLa#!2_D2j@-4^r3^?rq7H4u{1TXR-daPWw2Y^ck^&0Zrp zpF_@Ht9}tgYo#jVV_bX33g-*hQcsc&J_junVKVJhIz~onVb&O=Ivyc0V(a8SMBcf0 zLWp$8^2@?NKPYVA-rur~Ml+`c5jk$z%| zp%;ImONf}c`Rq6kT2{9Nh(;U=rro~wnE#@&H9^u9s$rLkelpo0W%py&MIk&=OI&0o zeUJ`IfCy^jWYQ&}3w^9ZPi`Tlu2Ed|f>yk|IJG)JbgHA(rIp5*m?yXaocsYgEUq0z z;?IhWi}Sy-UPMh#2C={nk5uK?O( zmh=JtwNcaW+ZOXEB%?cwe5&NDn)Eu6X22z^`083fD=QMG9oq1~))wbh$J(Qt%om6ZCc zy7}#xNOoTKb-@H-v_XQBuvDdapJ($;`KY9veT)xV4#4Mv&56OHlw%IeeK{N?AeW%h zD^cY4->NHW6QC3EwYRE~D2)N2h9C0e`E*J2hexsxjSKGtWM_Pt`F_p(ws}$K+=52FL+69;ABL*htP=n>>#QGtl3rpti6GQ#>{+0`45V1xB;;~|dxGmz}YvU|N zPTR>xHwZ^H{R#GL>VQS*^KuqcG&jeQo2vxfMGuxxiYMAHRfOV9Mm7?g8}eG1RTF=Z zv69h?h8tFCJ6=Pk&##_v$=uNxPcy@}Cy6nnm1#x}z0Yka8JdWz2nVgCfwDrQw=hfC znNdAN5Gs{>jBZRrD|4&me?sXsuzBbhP)^XAlxvX4W=$ZP*>MJIn9<)!-Eb->J0NL_ zb47}~mSrh0^?(p(4R|OO2C;S?m0$+F3H6?rX}2H%dvvKCcM_SLLCCkuWPe(pD)W9) zmQAY!z^tVUQkoo?*ZPQd#%l;v~zci&Dwe=hOzJ z0t#~BFxC2>MTdTiY<=t@aw}j9Y<>SM!;uz#9S4W2IJtHs&-#}66Z=xenXK8b@C^MnF z=V^1DGi)(p2uHMM4!zX2HZqCF+F__uz;`+$p|(8yi?t;pV5Z$>+*(dQPp&%aIp;*) z{K%X3mp$w`S*jg$f^Uti`tlEle-(Upb~;%oYUk!|9F^6bS4?$UB*V*n1L*k_-oF%( zdiNi`%3(Zge>|Cdp9$S@Q9_JLYR^s6^%cCo1?OFPK{o46qo5 zz)#U$-pFEUP&Gwt#u=H3{4;ES_pPN2Rg&6eVpKy3+jO5)u_sZWi0ySMo&IEQkVFqn zb%mrDcqWWlsq-I6nSdPeZyuD9+rn6mum3jOenEa;apGeaRTni2Q7ZmV>&mp|^K?vk zKWS$hQqel4j-`&Po#8QJEuo_c^XFjJjtit1FOtQ*gY2v|rugy!vhWR-&oBPt8-H@v zNtH=`Bal?4W(Vp?ShvbA#`oJ2*vrHi(Qhnw7Pokfenup0Ju}hZO{ZxB^frI;|Mm`m zfipg6vDwTo8nC-NFxk1X*_e*3fJYek@BnHI`T{nT`F;Ohz!RwKdUjTk&#R?HljrT5 zv6_MIZK?hDujWHmltR=8oTJe+^oE8VhYkF$HFU!3dDgfs-YUGDQuP>YIh!dlqA55& zvrOseh{!0Bg<&v#*BBCE0{jPa8)m%3a!h6qXnG zK0rp;?HoL!Y%7q~pw_Z+mcvf!_)3#@$#boJ%=Vn2M%e+uxtCf$C`RSP_{ekNVN&cO=+QvGw? z{PG(sC1n;nIDe*;zP~=UD>riRz22_bwhsOaAQEr<%mM@NK?R zIe?Sq*v=AJc%VqM73)6JgTMC1BKpO9< zYwzX7{>uBy(#^-)=kxRR{g0d7wg4YLkFW2hyXWKHK#2qVk311Yu-Nhi3LD;HnVZn> z`QBqNZwb0g4!uRvV0Sbu6dxzFS_IdiYs+=n)Vfy~2VlX{Ni9qS#|+S?|8yML25 zRTd-)cHB7kBAiCjMU=VlIx54i`ni6azO4nDL*z%q(QF+qo01RS#2oI*_Nx(>6Q+3M zl-j6cU?8Uxl=y4rBXiJq@t>^WgXbsFt@vdzC(+&#TI*KM(>TbLOm5SC*xJviPhT-< zcaEJT8((jQJ6MD7J!9$@UtN*%R9{y>0PyzX&9B|pale!2>FU40+lht$0p1o*ziN3B zLS2)5$Pl*g`<$&&qIraHg+cCfzbke1edh?1vCZGLs%WyCYTK*s=ilEGCq}bV?XeFA zhWNaIX;BzjOdIJiCV~Y=`3v5Tjs691`#e$G{^@L>beC8~0avLuX)G?YU`Xk%*M^_% zXC{B%t{Xky#*I1wfa!YOa1o8oqyc5LNO`R?xZjS$`-8v!RyNST_8maFDj)H0ndN%? zfn|90l6zZweiVj}_NF;0lJCxNol6ueig^v6`W5D>+JNHwV*!=W^>9}ox44-5>sZ(y z0u16H<7Pbo0!Faq&MyF@mW_6mkieFm7?Eg)bOo_c0Un@jWJL#)5?sQ4R>0ik z4j^U+uGa)c`FpJopmLaUv++kK`*)v0*41CDOf6R0hfBfrPlf)s(RN{b7@@X1#%$r) zCFFi(?EbCLCsYu&x?-y-MmECLBE(J}7%?h%WjudsvOH@AL}~jISG-*%?0%^L{bpF( z(m}gYYRQka$3S?8)`e0S9UlRr<71fJrHR8+b%QK+se-{L_d9LwS^%>M zoKnAwMt~b;H7$k(qL2#Lpv%cg!sSH&k!pid(ec6 z%x@%!SH>We5iSu?xs%;ng-pYHW8HKFzVDRVl-oWQ&%MlOhDincOaxdu+>c*3aQ-BY z3V;1zv%}My5OW#>MOs(#B(^n&lDksREIe#4W1bmv;BDIx6j%Ih)v!;7Y;%@rEQo{% z(f5{8vuq2WWfQkejQOI^FgHfc#!Wy-^v{JtKp5psxHK#pX0VBbuK0cb5}2*f&+rCB zy%88FE0>%n=bs@FaPpO0%W{%3pSrV36N(8;Yc|}PT6$cICGL_VFj<26N{akC_O~FJ zIL0nh)HgmO!hjcvSO>?1gaDtOeE%CX5gm+F2W(7~lLjYc1FTfr=t`l&BOGD?$uC_Z z7x-|aBn^R=%Xti;?7Y008S2Kx@%|$ibdvOOIB4-B(zwj;*vDJzd)1_>DkR0Oc4Ps5 z^VL#YbbVf-TEc_9FG=gg1fS1fua7f-$C?yAmCqjck7m-9En%IwIm9aCNw?!cK~Wu1 z0z0c@Vec>Ip&FXh3z8Gu?(jx%ulGm`Ghce$%X5#3t~C+!?Z38eBdvUZ$8gFW#n@QIBb}AE9PQ z1?fD0$5A7l=x(+M_Fj!Y=Y-SNviIj=mliEC(xrV~6463Mh229ELYR);1*pNhc*8o})!*B*OjLi6#K?Wa}_ zl6akqY$J7D)-53in1kqOZm<&fjJyQI!j9OtXuBawTYftXbITHq)UfY<_TGbE{uaxM zzw7^wk1stiIB~l#n^u=1g+*#TM>JS=BxkXKn#8gVUP`%~gt=Y4M)k>{Hi%9_3@UIB z5CwN?9_l{lkIW9E<&7e?!k1|a<+AWQmIr5JwRH?7LbsL?$!;+W@4(Z|Xw)-PwEQeN zb4Uzg?nzvh#US*K1;+p?YRtZ@6-!7FP zS%p`*18FJLHGg31JVG-Nh|Cr@s1Ts5O#0qo6+{&26IL!5cZ~KokWS^NhkyZ9W%{U< zQqI*TJL!x!-3b>EPlA?GfA!V-V`9R3mn3B27eQir1ih3lO2 z_XZc=tMO_ZNFV?lZEL}tie6+{($A6T2Exs-Af*wqSD6G09US=<%fn=5DuSRd>PA)& z>8cnJiYerDE^w7v_#1!FTimWUveLY*J-_Y!wb@Oj25uRA1hB(aW2GqNPEcN28-$=4 zOvNLlzr)b>ns88~sOTaKJ0!IL0_@-T;rITq{hHLj{_I)j=Ou8F*LCUk3mL{@lzQ-d zrgJY0xoCbQMC$3hWwKEgAyTM-M{jtX4~$g234`LAlg6Sz;wP*YY$VPO3S3iny}Wc= za}QTRX(we65G2h3oleO^%XBtm9qHQNm321$KLNx_B%) zh32jlw~H>kMM(c)B9*+DA~o~TzzQ3{B>CMrk+9oOf%b7Afap?UZAQ94O&~ikiu#o! zC|5mj5jK3yF$08dstNpg0ShTn84l3N?h`iOy5(>e*4snU8BQnb{23U{tRqS6x_M5f z_*W6i#JB8+=)>_3SIS>*9tsqqp1m*=dJ3M@9|KXR=j!#9N?xsJ^vm zvm4TCzNp9a<)wNsq$)Gmh+U#?&OZ-=0@6>i5^y?yJ)0*UU4=Ik$M|-A5twV^gYVNA zEDXF?r~N^(M8_c#jC-ot)|OMDrvrbCuBeAWO7|KgpKpOqK+A0g=0!8ycuHxHfv5Ie z5r2E?DSKYm;qN9rjR-e8!=%`^Z?_7&ID9YTNhG8m?16od^QQ@@Uw{QJEk(9RYH|Am z$QR{1`0+K4%@j6PuY<#ZD`NYhEh-L8R%aOZ3Skw@8xO4c*Wq`8HE{q;J@__oAUraL z4uLl|~w7jjtCae`FDqRKD1lNu^6_u*HQh(P%#Sg}AQ4h_#NFh#o?%Icq}E&G;DmHrwFwUx74T1X!^FlNo)FF$M9_184Hr5xmpre?aptrB?Vs=v`6Yk zdFxXK@6KlAAapq#7s_g)ojIJ_Qg{MbX*gcjNMCUh)~SCfAPc~{Mw*i=d?Qa_EYu0t z5A$ZAKpoFxr{^*A>ZZ$(sUEFqOllIL5H8f2K+*xKL0Aed@C%}C;$|j|rO*`aTLWI_ zG$>p!;S419$Gt(DS{oZy{JWzp`VP^NC(M!$4#L83p?WX4y%*%5#l;ziIit;>uvzxH z&w8ErIQ>aO^LM3}GOu^{8<0v`#Jr>HpZkWh{0eW&$M%7m!KWE0gz(;w26#Ha+;J_} zbqy~OvxRA>iYk-lWz6VWkya_&U0k>U&qMd1pfY%h#|)?78iQ?cAhGIEfy!lYVAh#b zZPNv+?--e+68??Hte55VU+X;Q*9ou+n=V^~oZ6eh|Lr2jp1;cZ)g>kk(Wc9><5fJW z^LqZsDT-cs8S0IN7&fUSSCK<+X~CTCme##XUN$_H)DnJm3Y!CSIotZTf>N;`W%n(l z2+mgtNYXKWiMS*-tvOKqCcN5G+ZW+4`y+4suB;iNxtkCjysZ!o)n8W08zZydzN}*M znN#;k_gdGTM|RhaS5MS%fljE?&2B}K%jkbEmc|I0;i+=kf4*-&NnDwE1ItLd!IW+W z)n2{(vAFmV@Xmn~3B?cHgwAblEETPs+tumz9k%wUpad4#FO0W?ccf%ff3<<$36W}x zO9qQe(KYod&ddtdi_&(FruG}h-aMZiXmF@s%IfEtTE(;%h2y?1|HIyypw_0$I4(n- zltO4qy4r_Kj1)GLNL60FHH!O_*fP=@LRC=+!bWW#J&KM)N?^#}9U6huxO9{o;y|^$ z&!j5aOpp{X9sFCEaXv*3USVM!!0~a)6k+ZGp`Kx+iOrVSx&V82CT50qHpm4v&ytO- z`+G~V5>5dNUkr=52^QC`5sF0TJFYkOHwz@_1DxFZ_FviW%pQeJ!&pSZDZv zYeAsvO?}C4vLgrsiXp!?cG9gSmbW%8L&SPbrKccp{_MU;yqvlgeZ z6EslD3ss>gQmGcNc}JV@$&MkCbwarQ{OQ&GA;X;bc~#8LJ^%a((od#*Di!wSo&eqm zr@@~1L>}E!AXrlM;@q0Jnsc-7ZPg^>4Vb@YEK!TUaLtf7n+g}%ipShWp4bJ6dnOBx zF6>uKN$+)noa);b>KWsC6lU0@$_k8Bd4?7yMACS^Pmm__3_C|hwZ*HjOcGeGfe?>B zs^nQ$(>a_mOCqaSenbbKHl9EIb4$WSp7mR06}UaJ4XhpSzhxS0!syW44CW*$QFKN^ z(d7CUCQm?eyYFW5b5&SXDl;2Lx?t*0AY}RKZ~vf@eKqrtj~z^k1da9Q$neMI1O+mP zOx*=s)4oB>QI1bzRjjC?SH8f8)MOq+xu_&S>_5okJ1`n8H{`)k&#IQBdr^>kJm=&I zHUu0KM&iAAl0FT2HTV25%p!SWx3LcFop(okR3Hj>9Ii70+fvEsty;WmR)#ytr&>%8 zj~k-1OEh)CSZ_LwG~T?d&aW+8Dl{w?cfrsT=Mei@%Gnq78Fm!aUFfNLld>KT;YJ+B zE8W+5%!i^*XoplDu?Y-NChlxe~5SvhtBF9Wq?J_IQ6X>MiIH`NTqA+NC z^{^vbc3CX~sTJ`W?G zB?$0KBx2cc7(`}3@N@PH5FE@qgc-S{zX!t>N?#h!&Bj@4Z5pMzJm39U@{afy2m7=r z9a45a$l^(TE(7(u2ytmyL}E3gm;Gv2O+c5zb~2oTOPAVTMVZpIbE?V^uD!SjLi;$4 z(m0a30lDf(^L+f=ujVF+q+gB>x@Fp61eSy=r{;{IZgnHS0jG0lJ&C71;5^+x2`kvQ z`B}^G%cVGBEJCjugKiE#><02;#5!A?YM8>?E9ht_oZdy1yEK_6m9c ztUr4}UhB`F5gJmm8U2w20Qx(y>PiepE2X{#r~tVY$entI>jyfB#iRt`jIEM@MyKkP zm%dkZvL`D|xY|Nx$52BHu0P%J5T?I?9nM_EMvf5K0wDCz!S(Wnex*w1Ya&c!d++z% z&@_~tbGm_74e7S==HSQ5Y)3VE;FY1uo=*k+Td^$s7jg`;tFAAdeb>IrIQA|Xd+(JT zUChIwkEJ_~2XaWOgrYy;;t?77x8^nme`x!*6<~%xmcribtdj0TsSdqr#b{$wAgvAc zgxZ*Ov_KASmfCy^z^Mx-*4p)>FP(<};o{U<%@eaVvJ@BO$sU*1gDj$F)N>mTLW!!O z^{_V6isr7LiI)X79JU^?&u{hH1um>e^S*`V)a&-`0vwtsC&DVgDbPh5PV{I&c z34zr%wS_%718p9+vTzvd*0P!B%M9%ZC2A1L#`L)L+K(@Oh6`}Z14fm6CIT849+}wJ zpLyM1z>*FsXF{8G7o;0PSVy?~`~-F+9~in7XQL@~1hP0=Qh!P&#vn>_Zga99oz+@v zXv|thgH3XI^!u-;#c`5G1PCJ-%V@{2_L2qw0-L8Kgb}qY4>Zz5vj>>H_OEh%b(_H@e_T_u;>Qw(wQk>hOCT(8` zGB8Q`BhYC;-t7+83N_YIgm9A@Ye^6*Ps*5cUPT3 zv3%IiCuyq(C$W@((te)?dYm!e`U|J3Syl;^?Owq3#gRY7EYLxn-YHICzDyAjU_1@6 z0rD`9h@bW|w!nFOQ7wv1DoCbfOmbmhS4{D+h*oHo6d?O3q|&R^>G8f{BF3NPB-5LA zxLo9)dcKPO5)@ehh}M(?P+}XvK()x58Uo- zB+zl2RVsS@RzxUM&2p7cv40(1m{{qwNCP-_0vhucSAd)4I>1_vk`8b^9c7&`y8?pP zz`N#wvQPqe69ioG>Xrb!cVybZ^VWkPe%(a^yfxMRf9!Z_U|_fJ5{=U|{rDQT_7_Yz zj`}nK4{8cDBkVivPekt#n8&V^a)3=Yl#?cAnx_%bByCf3?*C8}_2FTj4r=S)>>oj_ zl->(w(=D6qw~POkX7Vm@;w*A?f`Q?w3iB5bfN}^IXkG)3s&NxTXH@cxc?X`N?Elvl=xrJ$f%bBJTw%tp8n$WbpF4iiVutw z9mg7g3il3b#uHGjM;sKDudQ?#0u3g_tjW|>ro{qYD!Yo=mh+US$|4nXp6!pzMUjsM? zA};;k3;}MMYeu^NXg2L2GMC0}=NnTky7{IVVb2f#Upe^HdB@d18{C3#j13{kh_y^hsE@ikPspqiL@ht`8Wm`zyTmK zOEGRpDbD3TM*KG}M6o2;<3CmqDEi0UWH@}F$DKn?#&p%mK52q(VuM!@s+aVp2av>* zLlSY=U>eQw(Q4r|-5>O|04!dSh`>3T3c(5BQo|j72x?oJVs0cDrJRnC=aWcbWShJG z$B^{Ux<1_X5|C}cT5%{RVv8jYH+$cJwVjoA(E`TR>#b4Gv~n)!z6L0x^>0~}Mw*WoeRFUfJSpYE7D<}R zjlRr|&`Rv9D6>=oa_ab?JYudX<8=2x4L%*s+IfJ?W<+rc6A^*jYiS%HTUQ0lzGJyz z6hJx_;F-Qm>tEomT5Du^zn2eN9>`cPtM0#Ss*Ap?qkr%X1T0M> z%|pbkonmHrE?w844h13X3^|6Y*;+nYZP3Q|3;coeAE7iENzDEcO14N0^moKf$*l=miu`3uC^MNuiJBHR_!vz! z@*Ye;-xxa1v@VqNKXyl>f9GZ)8i@RfhPhjuppHvzM@(Kdr-)Z2{)Gq(+*6dKN(}(w zbZ@Y^i$Re+CCETmN;=p##wgFP*P{(U)97DaR1-9ne-A>0bQ^4aMgJ);ALgtY2B2{7qKY zoSUFwY1925@dR`GMt@_}&w}>v3-(t>qbD`6kLrJWNJA#`U7uj0lBJD6=iH%#KYwhz zJBAj`ZVrgb9;03k%JuXRYZ`^%Ti2=B8vIl|+t<1oA#Q_u|E3NYLkBq33_v-glW3of z1SB}3#?M6p_oa1~ru~8<&B5naw6-mTa z;MbkIPvl}_VNrVHn|e4&-WS$fwg}eY-{o+!@)y+j;E(+c z#z!^-M#tkW1-u!inT8Al2|a5-rEfALM!f7xbf}tDVF$(WYs8)*;>bek<$~B>pL3u@0wSw_G|NtAKQ)! zhW=GVe3q6RYRE1BmBO?4! zJPJ!NBiC<%WhQpJ_2sl?oYdA32eP&L#m4L%x-)xzqrr(^HHY7VE9rjsAvQEHJSGAE zen>K4;menxJbz(NFZ~=ryTJWa&EQ6grdA93=|LAktiq5mj$po$uZ@GLyy93lP*|UE z^iJe!XJ4x*Sj{r_(kkZL$%HG!;dUsoh#rm@XmCg@Udqegu*T70BZ6@|!cw@nPPB1q zDLNt$q)>QT&rQ7_n>_d(@kdCvVkkR)NoJ2KN;8zo(hbX3+P#$gSeQS;ii=ZwJHLed zKf@q!a{n%t2WXg?P8ZHhMHa?_S%@e*<^A$8)5$x>?^u9*$)-!WF0MMB^0ptm&1Q)D zE$gR}`06mYekh}J6Fs(5lNFCOM2{#z)@bj}DqZNgtV4f5XCYSmfro1$l4b1fo>SV; zt2ERHo_QBwx197XeXh0I#F(H;gWqQNYVBM<@ot|M2<@yD2oVhMMi83&d%_d!^V5PO>4h2_3X0t<1w&@< z=Ki4%X@{OwatVexnJp7Kl?J*`w1o`XSMd@@)w`CV&i%UgaB@C(m8wiuv7D85t(M*M zQXSgMvMrS@BhqLp?7t^HD%UaFeR`Czn5)*dDY>PW17&!QWD5v(e8`bjc#K$+9sF;(xTne{WCWw=nuLu9^ImwlCU zJ+S;YjJN{&F{S5D{0#1C)ru|&f=)WB-i&66fX_)*JSJAIdTdEv1pGriSA>aPNJB@# zEGbZJng7xf?=GqOoS>hcT+c___!8xmX4_j+Mjg&JOnNjN%t(Sr59NDQQf2t6yR-c; zRgR6fN8pCi2tq}6nAs(YX&--E<8l%%MydFONxO^icobBXd3AhCxCqzeQ6NNS3<^?G zwSe0yAa%uyWu|f}5Ccl)4?9-;!*IdmO=j=io&o%g0Ce(cTgnDy@BtoLKC zs^`ii8e|04jqa8JnuS&JG-bq0#-0PmVp}`h5|{#C{}OfCq|ak&Or^@I9V7*+_n{xc7NQ+= zH`dDTqkWYpan|qUPLTp1*A!o!CEyMJV*a$)P)L3d2?lo>3C@{l(PfuDB^I?WD|BA? zz#I$T;h63tLgV3w3m6&eJ@k*1>RWASfK1J%aC+EvNB7iDf;R zg$e7IpOB9}oY-R$tzo#ZkgbslU_9t1M3cdKx0Ds5m(`JYVwct)00%aDSngX>V0yb8 z>vDjg*jv-GdB^U^5Y2sf%aY9u3~&ei@VDU@;VQ)!&w-gqihF64MZ|3wr*qM)T7*M- zhAQ{9KhEY5bWQ5WGJ0%W0Qx}H=Z1kuoifyF2f~zQ=Lnoza;XU^N1dtY6rLBt5KR8K z-t58U{DQzhn6Y zp;jrDpBBUq?`}zCz0@20;$#Vtul+UtlOYL^LTMNZN#^hmcqy1IXp@=UZjglP@eEA( zDTZe=E#j5wgHP((1?S|fd5rOcX_$#5Dank0l#@I(D&DI^&Yj yaG!s3f7G;SYH)Ggx4 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⪚UPGVp{2QBIDLs{3-sm6tfC2K=mpjlG`Aw0i~XQu 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

+
diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js index 4ff9455b..e2b491dc 100755 --- a/docs/js/jazzy.js +++ b/docs/js/jazzy.js @@ -23,9 +23,6 @@ $(".token").click(function(event) { } var link = $(this); var animationDuration = 300; - var tokenOffset = "15px"; - var original = link.css('marginLeft') == tokenOffset; - link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); $content = link.parent().parent().next(); $content.slideToggle(animationDuration); diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 00000000..e3d1ab90 --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,70 @@ +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/js/lunr.min.js b/docs/js/lunr.min.js new file mode 100644 index 00000000..f45a81eb --- /dev/null +++ b/docs/js/lunr.min.js @@ -0,0 +1 @@ +!function(){var t,l,c,e,r,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,b,P,T,O,I,i,n,s,z=function(e){var t=new z.Builder;return t.pipeline.add(z.trimmer,z.stopWordFilter,z.stemmer),t.searchPipeline.add(z.stemmer),e.call(t,t),t.build()};z.version="2.3.5",z.utils={},z.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),z.utils.asString=function(e){return null==e?"":e.toString()},z.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i=this.length)return z.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},z.QueryLexer.prototype.width=function(){return this.pos-this.start},z.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},z.QueryLexer.prototype.backup=function(){this.pos-=1},z.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.more=function(){return this.pos', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$input.attr({ + "aria-activedescendant": "", + "aria-owns": this.$input.attr("id") + "_listbox", + role: "combobox", + "aria-readonly": "true", + "aria-autocomplete": "list" + }); + $(www.menu).attr("id", this.$input.attr("id") + "_listbox"); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file