From 5e9763d1c6d71cb0e3a18af0102797f5a0f42610 Mon Sep 17 00:00:00 2001 From: runner Date: Fri, 19 Jul 2024 05:19:06 +0000 Subject: [PATCH] chore: update API docs --- docs/Classes.html | 277 +++ docs/Classes/Attr.html | 479 +++++ docs/Classes/ClickstreamConfiguration.html | 440 +++++ docs/Classes/ClickstreamItemKey.html | 507 +++++ docs/Classes/ClickstreamObjc.html | 652 +++++++ docs/Classes/EventName.html | 155 ++ docs/Enums.html | 146 ++ docs/Enums/ClickstreamAnalytics.html | 679 +++++++ docs/Enums/ClickstreamAnalytics/Attr.html | 480 +++++ .../Enums/ClickstreamAnalytics/EventName.html | 155 ++ docs/Enums/ClickstreamAnalytics/Item.html | 508 +++++ docs/Extensions.html | 171 ++ docs/Typealiases.html | 145 ++ docs/css/highlight.css | 202 ++ docs/css/jazzy.css | 442 +++++ .../Clickstream.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 277 +++ .../Resources/Documents/Classes/Attr.html | 479 +++++ .../Classes/ClickstreamConfiguration.html | 440 +++++ .../Documents/Classes/ClickstreamItemKey.html | 507 +++++ .../Documents/Classes/ClickstreamObjc.html | 652 +++++++ .../Documents/Classes/EventName.html | 155 ++ .../Contents/Resources/Documents/Enums.html | 146 ++ .../Documents/Enums/ClickstreamAnalytics.html | 679 +++++++ .../Enums/ClickstreamAnalytics/Attr.html | 480 +++++ .../Enums/ClickstreamAnalytics/EventName.html | 155 ++ .../Enums/ClickstreamAnalytics/Item.html | 508 +++++ .../Resources/Documents/Extensions.html | 171 ++ .../Resources/Documents/Typealiases.html | 145 ++ .../Resources/Documents/css/highlight.css | 202 ++ .../Resources/Documents/css/jazzy.css | 442 +++++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 398 ++++ .../Contents/Resources/Documents/js/jazzy.js | 74 + .../Resources/Documents/js/jazzy.search.js | 74 + .../Resources/Documents/js/jquery.min.js | 2 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1695 +++++++++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 45056 bytes docs/docsets/Clickstream.tgz | Bin 0 -> 88412 bytes docs/images/add_amplify_config_json_file.png | Bin 0 -> 21737 bytes docs/images/add_package.png | Bin 0 -> 62343 bytes docs/images/add_package_url.png | Bin 0 -> 105988 bytes docs/img/carat.png | Bin 0 -> 274 bytes docs/img/dash.png | Bin 0 -> 1338 bytes docs/img/gh.png | Bin 0 -> 1571 bytes docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 398 ++++ docs/js/jazzy.js | 74 + docs/js/jazzy.search.js | 74 + docs/js/jquery.min.js | 2 + docs/js/lunr.min.js | 6 + docs/js/typeahead.jquery.js | 1695 +++++++++++++++++ docs/search.json | 1 + docs/undocumented.json | 96 + 59 files changed, 15492 insertions(+) create mode 100644 docs/Classes.html create mode 100644 docs/Classes/Attr.html create mode 100644 docs/Classes/ClickstreamConfiguration.html create mode 100644 docs/Classes/ClickstreamItemKey.html create mode 100644 docs/Classes/ClickstreamObjc.html create mode 100644 docs/Classes/EventName.html create mode 100644 docs/Enums.html create mode 100644 docs/Enums/ClickstreamAnalytics.html create mode 100644 docs/Enums/ClickstreamAnalytics/Attr.html create mode 100644 docs/Enums/ClickstreamAnalytics/EventName.html create mode 100644 docs/Enums/ClickstreamAnalytics/Item.html create mode 100644 docs/Extensions.html create mode 100644 docs/Typealiases.html create mode 100644 docs/css/highlight.css create mode 100644 docs/css/jazzy.css create mode 100644 docs/docsets/Clickstream.docset/Contents/Info.plist create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/Attr.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamConfiguration.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamItemKey.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamObjc.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/EventName.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Attr.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/EventName.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Item.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/Typealiases.html create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/index.html create mode 100755 docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/Documents/search.json create mode 100644 docs/docsets/Clickstream.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/docsets/Clickstream.tgz create mode 100644 docs/images/add_amplify_config_json_file.png create mode 100644 docs/images/add_package.png create mode 100644 docs/images/add_package_url.png create mode 100755 docs/img/carat.png create mode 100755 docs/img/dash.png create mode 100755 docs/img/gh.png create mode 100644 docs/img/spinner.gif create mode 100644 docs/index.html create mode 100755 docs/js/jazzy.js create mode 100644 docs/js/jazzy.search.js create mode 100644 docs/js/jquery.min.js create mode 100644 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js create mode 100644 docs/search.json create mode 100644 docs/undocumented.json diff --git a/docs/Classes.html b/docs/Classes.html new file mode 100644 index 0000000..8560825 --- /dev/null +++ b/docs/Classes.html @@ -0,0 +1,277 @@ + + + + Classes Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamObjc + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics api for objective-c

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamObjc : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EventName + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset events

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class EventName : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Attr + +
    +
    +
    +
    +
    +
    +

    ClickstreamANalytics preset attributes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class Attr : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ClickstreamItemKey + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset item keys for objective-c +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamItemKey : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

ClickstreamContext +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    The configuration object for clickstream, modify the params after sdk initialize

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamConfiguration : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Classes/Attr.html b/docs/Classes/Attr.html new file mode 100644 index 0000000..6cfdc49 --- /dev/null +++ b/docs/Classes/Attr.html @@ -0,0 +1,479 @@ + + + + Attr Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Attr

+
+
+ +
@objcMembers
+public class Attr : NSObject
+ +
+
+

ClickstreamANalytics preset attributes

+ +
+
+
+
    +
  • +
    + + + + SCREEN_NAME + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen name

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SCREEN_UNIQUE_ID + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen unique id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_UNIQUE_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_SOURCE + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source source

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_SOURCE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_MEDIUM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source medium

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_MEDIUM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_TERM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source term

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_TERM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source content

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CONTENT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_CLID + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid platform

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID_PLATFORM: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APP_INSTALL_CHANNEL + +
    +
    +
    +
    +
    +
    +

    Preset attribute app install channel

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let APP_INSTALL_CHANNEL: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VALUE + +
    +
    +
    +
    +
    +
    +

    Preset attribute event value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let VALUE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    Preset attribute event currency

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Classes/ClickstreamConfiguration.html b/docs/Classes/ClickstreamConfiguration.html new file mode 100644 index 0000000..6c59bd7 --- /dev/null +++ b/docs/Classes/ClickstreamConfiguration.html @@ -0,0 +1,440 @@ + + + + ClickstreamConfiguration Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamConfiguration

+
+
+ +
@objcMembers
+public class ClickstreamConfiguration : NSObject
+ +
+
+

The configuration object for clickstream, modify the params after sdk initialize

+ +
+
+
+
    +
  • +
    + + + + withAppId(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withAppId(_ appId: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withEndpoint(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withEndpoint(_ endpoint: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withSendEventInterval(_ sendEventsInterval: Int) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackAppExceptionEvents(_ isTrackAppExceptionEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackScreenViewEvents(_ isTrackScreenViewEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackUserEngagementEvents(_ isTrackUserEngagementEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withCompressEvents(_ isCompressEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withLogEvents(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withLogEvents(_ isLogEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withAuthCookie(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withAuthCookie(_ authCookie: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withSessionTimeoutDuration(_ sessionTimeoutDuration: Int64) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withInitialGlobalAttributes(_ globalAttributes: ClickstreamAttribute) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withInitialGlobalAttributesObjc(_ globalAttributes: NSDictionary) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Classes/ClickstreamItemKey.html b/docs/Classes/ClickstreamItemKey.html new file mode 100644 index 0000000..dd85e24 --- /dev/null +++ b/docs/Classes/ClickstreamItemKey.html @@ -0,0 +1,507 @@ + + + + ClickstreamItemKey Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamItemKey

+
+
+ +
@objcMembers
+public class ClickstreamItemKey : NSObject
+ +
+
+

ClickstreamAnalytics preset item keys for objective-c +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

+ +
+
+
+
    +
  • +
    + + + + ITEM_ID + +
    +
    +
    +
    +
    +
    +

    The id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_NAME + +
    +
    +
    +
    +
    +
    +

    The name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LOCATION_ID + +
    +
    +
    +
    +
    +
    +

    The location id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let LOCATION_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_BRAND + +
    +
    +
    +
    +
    +
    +

    The brand of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_BRAND: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    The currency of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PRICE + +
    +
    +
    +
    +
    +
    +

    The price of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let PRICE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + QUANTITY + +
    +
    +
    +
    +
    +
    +

    The quantity of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let QUANTITY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_NAME + +
    +
    +
    +
    +
    +
    +

    The creative name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_SLOT + +
    +
    +
    +
    +
    +
    +

    The creative slot of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_SLOT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY + +
    +
    +
    +
    +
    +
    +

    The category of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY2 + +
    +
    +
    +
    +
    +
    +

    The category2 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY3 + +
    +
    +
    +
    +
    +
    +

    The category3 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY4 + +
    +
    +
    +
    +
    +
    +

    The category4 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY5 + +
    +
    +
    +
    +
    +
    +

    The category5 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY5: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Classes/ClickstreamObjc.html b/docs/Classes/ClickstreamObjc.html new file mode 100644 index 0000000..31a256b --- /dev/null +++ b/docs/Classes/ClickstreamObjc.html @@ -0,0 +1,652 @@ + + + + ClickstreamObjc Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamObjc

+
+
+ +
@objcMembers
+public class ClickstreamObjc : NSObject
+ +
+
+

ClickstreamAnalytics api for objective-c

+ +
+
+
+
    +
  • +
    + + + + initSDK() + +
    +
    +
    +
    +
    +
    +

    Init the Clickstream sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK() throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + initSDK(_:) + +
    +
    +
    +
    +
    +
    +

    Init the Clickstream sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK(_ configuration: ClickstreamConfiguration) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:) + +
    +
    +
    +
    +
    +
    +

    Use this method to record event

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String, _ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes which type is NSDictionary

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with attributes and items

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String, _ attributes: NSDictionary, _ items: [NSDictionary] = [])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes which type is NSDictionary

    +
    +
    + + items + + +
    +

    the event items which type is NSDictionary

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + flushEvents() + +
    +
    +
    +
    +
    +
    +

    Use this method to send events immediately

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func flushEvents()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Add global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addGlobalAttributes(_ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Delete global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func deleteGlobalAttributes(_ attributes: [String])
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes names to delete

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addUserAttributes(_:) + +
    +
    +
    +
    +
    +
    +

    Add user attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addUserAttributes(_ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the user attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + setUserId(_:) + +
    +
    +
    +
    +
    +
    +

    Set user id for login and logout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func setUserId(_ userId: String?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Get Clickstream configuration, please config it after initialize sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func getClickstreamConfiguration() throws -> ClickstreamConfiguration
    + +
    +
    +
    +

    Return Value

    +

    ClickstreamContextConfiguration to modify the configuration of clickstream sdk

    +
    +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Disable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Enable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Classes/EventName.html b/docs/Classes/EventName.html new file mode 100644 index 0000000..c43a385 --- /dev/null +++ b/docs/Classes/EventName.html @@ -0,0 +1,155 @@ + + + + EventName Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

EventName

+
+
+ +
@objcMembers
+public class EventName : NSObject
+ +
+
+

ClickstreamAnalytics preset events

+ +
+
+
+
    +
  • +
    + + + + SCREEN_VIEW + +
    +
    +
    +
    +
    +
    +

    Preset event screen view

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_VIEW: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 0000000..6de9299 --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,146 @@ + + + + Enumerations Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamAnalytics + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics api for swift

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ClickstreamAnalytics
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums/ClickstreamAnalytics.html b/docs/Enums/ClickstreamAnalytics.html new file mode 100644 index 0000000..6808726 --- /dev/null +++ b/docs/Enums/ClickstreamAnalytics.html @@ -0,0 +1,679 @@ + + + + ClickstreamAnalytics Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamAnalytics

+
+
+ +
public enum ClickstreamAnalytics
+ +
+
+

ClickstreamAnalytics api for swift

+ +
+
+
+
    +
  • +
    + + + + initSDK(_:) + +
    +
    +
    +
    +
    +
    +

    Init ClickstreamAnalytics

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK(_ configuration: ClickstreamConfiguration? = nil) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:) + +
    +
    +
    +
    +
    +
    +

    Use this method to record event

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with ClickstreamAttribute

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String,
    +                               _ attributes: ClickstreamAttribute,
    +                               _ items: [ClickstreamAttribute] = [])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + flushEvents() + +
    +
    +
    +
    +
    +
    +

    Use this method to send events immediately

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func flushEvents()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Add global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addGlobalAttributes(_ attributes: ClickstreamAttribute)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Delete global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func deleteGlobalAttributes(_ attributes: String...)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes names to delete

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addUserAttributes(_:) + +
    +
    +
    +
    +
    +
    +

    Add user attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addUserAttributes(_ attributes: ClickstreamAttribute)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the user attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + setUserId(_:) + +
    +
    +
    +
    +
    +
    +

    Set user id for login and logout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func setUserId(_ userId: String?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Get Clickstream configuration, please config it after initialize sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func getClickstreamConfiguration() throws -> ClickstreamConfiguration
    + +
    +
    +
    +

    Return Value

    +

    ClickstreamContextConfiguration to modify the configuration of clickstream sdk

    +
    +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Disable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Enable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + EventName + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset events

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EventName
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Attr + +
    +
    +
    +
    +
    +
    +

    ClickstreamANalytics preset attributes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Attr
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Item + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset item attributes +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Item
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums/ClickstreamAnalytics/Attr.html b/docs/Enums/ClickstreamAnalytics/Attr.html new file mode 100644 index 0000000..9bd3bbc --- /dev/null +++ b/docs/Enums/ClickstreamAnalytics/Attr.html @@ -0,0 +1,480 @@ + + + + Attr Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Attr

+
+
+ +
public enum Attr
+ +
+
+

ClickstreamANalytics preset attributes

+ +
+
+
+
    +
  • +
    + + + + SCREEN_NAME + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen name

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SCREEN_UNIQUE_ID + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen unique id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_UNIQUE_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_SOURCE + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source source

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_SOURCE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_MEDIUM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source medium

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_MEDIUM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_TERM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source term

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_TERM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source content

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CONTENT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_CLID + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid platform

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID_PLATFORM: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APP_INSTALL_CHANNEL + +
    +
    +
    +
    +
    +
    +

    Preset attribute app install channel

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let APP_INSTALL_CHANNEL: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VALUE + +
    +
    +
    +
    +
    +
    +

    Preset attribute event value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let VALUE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    Preset attribute event currency

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums/ClickstreamAnalytics/EventName.html b/docs/Enums/ClickstreamAnalytics/EventName.html new file mode 100644 index 0000000..63b2ef2 --- /dev/null +++ b/docs/Enums/ClickstreamAnalytics/EventName.html @@ -0,0 +1,155 @@ + + + + EventName Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

EventName

+
+
+ +
public enum EventName
+ +
+
+

ClickstreamAnalytics preset events

+ +
+
+
+
    +
  • +
    + + + + SCREEN_VIEW + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_VIEW: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Enums/ClickstreamAnalytics/Item.html b/docs/Enums/ClickstreamAnalytics/Item.html new file mode 100644 index 0000000..f847a63 --- /dev/null +++ b/docs/Enums/ClickstreamAnalytics/Item.html @@ -0,0 +1,508 @@ + + + + Item Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Item

+
+
+ +
public enum Item
+ +
+
+

ClickstreamAnalytics preset item attributes +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

+ +
+
+
+
    +
  • +
    + + + + ITEM_ID + +
    +
    +
    +
    +
    +
    +

    The id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_NAME + +
    +
    +
    +
    +
    +
    +

    The name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LOCATION_ID + +
    +
    +
    +
    +
    +
    +

    The location id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let LOCATION_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_BRAND + +
    +
    +
    +
    +
    +
    +

    The brand of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_BRAND: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    The currency of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PRICE + +
    +
    +
    +
    +
    +
    +

    The price of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let PRICE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + QUANTITY + +
    +
    +
    +
    +
    +
    +

    The quantity of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let QUANTITY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_NAME + +
    +
    +
    +
    +
    +
    +

    The creative name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_SLOT + +
    +
    +
    +
    +
    +
    +

    The creative slot of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_SLOT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY + +
    +
    +
    +
    +
    +
    +

    The category of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY2 + +
    +
    +
    +
    +
    +
    +

    The category2 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY3 + +
    +
    +
    +
    +
    +
    +

    The category3 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY4 + +
    +
    +
    +
    +
    +
    +

    The category4 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY5 + +
    +
    +
    +
    +
    +
    +

    The category5 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY5: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 0000000..136bc5f --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,171 @@ + + + + Extensions Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Int64 + +
    +
    +
    +
    +
    +
    +

    for support Int64 attribute value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension Int64: AnalyticsPropertyValue
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Decimal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension Decimal: AnalyticsPropertyValue
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/Typealiases.html b/docs/Typealiases.html new file mode 100644 index 0000000..54c6192 --- /dev/null +++ b/docs/Typealiases.html @@ -0,0 +1,145 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamAttribute + +
    +
    +
    +
    +
    +
    +

    the attribute for Clickstream which support String, Int, Int64, Double and Bool

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ClickstreamAttribute = AnalyticsProperties
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 0000000..c170357 --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 0000000..f84ef86 --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,442 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +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; } + +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; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +pre > code { + padding: 0; } + +a { + color: #0088cc; + text-decoration: none; } + a code { + color: inherit; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +hr { + height: 1px; + border: none; + background-color: #e2e2e2; } + +.footnote-ref { + display: inline-block; + scroll-margin-top: 70px; } + +.footnote-def { + scroll-margin-top: 70px; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 32px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 3; } + header img { + padding-right: 6px; + vertical-align: -3px; + 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: 26px; + padding-top: 12px; + position: fixed; + width: inherit; + z-index: 2; + margin-top: 32px; + white-space: nowrap; + overflow-x: scroll; } + #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; } + +.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; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.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; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + margin-top: 10px; + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + 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; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + +.declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + 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); + position: absolute; + width: 12px; } + +.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%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.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; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + 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] { + float: right; } + form[role=search] input { + font: Helvetica, freesans, Arial, sans-serif; + margin-top: 6px; + font-size: 13px; + line-height: 20px; + padding: 0px 10px; + 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: #fff; + color: #333; + border: 1px solid #e2e2e2; + z-index: 4; } + form[role=search] .tt-highlight { + font-weight: bold; } + form[role=search] .tt-suggestion { + font: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + 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/Clickstream.docset/Contents/Info.plist b/docs/docsets/Clickstream.docset/Contents/Info.plist new file mode 100644 index 0000000..4c32bf1 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.clickstream + CFBundleName + Clickstream + DocSetPlatformFamily + clickstream + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 0000000..8560825 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,277 @@ + + + + Classes Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamObjc + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics api for objective-c

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamObjc : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EventName + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset events

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class EventName : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Attr + +
    +
    +
    +
    +
    +
    +

    ClickstreamANalytics preset attributes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class Attr : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ClickstreamItemKey + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset item keys for objective-c +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamItemKey : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

ClickstreamContext +

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    The configuration object for clickstream, modify the params after sdk initialize

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +public class ClickstreamConfiguration : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/Attr.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/Attr.html new file mode 100644 index 0000000..6cfdc49 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/Attr.html @@ -0,0 +1,479 @@ + + + + Attr Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Attr

+
+
+ +
@objcMembers
+public class Attr : NSObject
+ +
+
+

ClickstreamANalytics preset attributes

+ +
+
+
+
    +
  • +
    + + + + SCREEN_NAME + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen name

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SCREEN_UNIQUE_ID + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen unique id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_UNIQUE_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_SOURCE + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source source

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_SOURCE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_MEDIUM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source medium

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_MEDIUM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_TERM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source term

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_TERM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source content

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CONTENT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_CLID + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid platform

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID_PLATFORM: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APP_INSTALL_CHANNEL + +
    +
    +
    +
    +
    +
    +

    Preset attribute app install channel

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let APP_INSTALL_CHANNEL: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VALUE + +
    +
    +
    +
    +
    +
    +

    Preset attribute event value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let VALUE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    Preset attribute event currency

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamConfiguration.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamConfiguration.html new file mode 100644 index 0000000..6c59bd7 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamConfiguration.html @@ -0,0 +1,440 @@ + + + + ClickstreamConfiguration Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamConfiguration

+
+
+ +
@objcMembers
+public class ClickstreamConfiguration : NSObject
+ +
+
+

The configuration object for clickstream, modify the params after sdk initialize

+ +
+
+
+
    +
  • +
    + + + + withAppId(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withAppId(_ appId: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withEndpoint(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withEndpoint(_ endpoint: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withSendEventInterval(_ sendEventsInterval: Int) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackAppExceptionEvents(_ isTrackAppExceptionEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackScreenViewEvents(_ isTrackScreenViewEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withTrackUserEngagementEvents(_ isTrackUserEngagementEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withCompressEvents(_ isCompressEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withLogEvents(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withLogEvents(_ isLogEvents: Bool) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + withAuthCookie(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withAuthCookie(_ authCookie: String) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withSessionTimeoutDuration(_ sessionTimeoutDuration: Int64) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withInitialGlobalAttributes(_ globalAttributes: ClickstreamAttribute) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func withInitialGlobalAttributesObjc(_ globalAttributes: NSDictionary) -> ClickstreamConfiguration
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamItemKey.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamItemKey.html new file mode 100644 index 0000000..dd85e24 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamItemKey.html @@ -0,0 +1,507 @@ + + + + ClickstreamItemKey Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamItemKey

+
+
+ +
@objcMembers
+public class ClickstreamItemKey : NSObject
+ +
+
+

ClickstreamAnalytics preset item keys for objective-c +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

+ +
+
+
+
    +
  • +
    + + + + ITEM_ID + +
    +
    +
    +
    +
    +
    +

    The id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_NAME + +
    +
    +
    +
    +
    +
    +

    The name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LOCATION_ID + +
    +
    +
    +
    +
    +
    +

    The location id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let LOCATION_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_BRAND + +
    +
    +
    +
    +
    +
    +

    The brand of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_BRAND: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    The currency of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PRICE + +
    +
    +
    +
    +
    +
    +

    The price of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let PRICE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + QUANTITY + +
    +
    +
    +
    +
    +
    +

    The quantity of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let QUANTITY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_NAME + +
    +
    +
    +
    +
    +
    +

    The creative name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_SLOT + +
    +
    +
    +
    +
    +
    +

    The creative slot of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_SLOT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY + +
    +
    +
    +
    +
    +
    +

    The category of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY2 + +
    +
    +
    +
    +
    +
    +

    The category2 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY3 + +
    +
    +
    +
    +
    +
    +

    The category3 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY4 + +
    +
    +
    +
    +
    +
    +

    The category4 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY5 + +
    +
    +
    +
    +
    +
    +

    The category5 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY5: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamObjc.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamObjc.html new file mode 100644 index 0000000..31a256b --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/ClickstreamObjc.html @@ -0,0 +1,652 @@ + + + + ClickstreamObjc Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamObjc

+
+
+ +
@objcMembers
+public class ClickstreamObjc : NSObject
+ +
+
+

ClickstreamAnalytics api for objective-c

+ +
+
+
+
    +
  • +
    + + + + initSDK() + +
    +
    +
    +
    +
    +
    +

    Init the Clickstream sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK() throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + initSDK(_:) + +
    +
    +
    +
    +
    +
    +

    Init the Clickstream sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK(_ configuration: ClickstreamConfiguration) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:) + +
    +
    +
    +
    +
    +
    +

    Use this method to record event

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String, _ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes which type is NSDictionary

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with attributes and items

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String, _ attributes: NSDictionary, _ items: [NSDictionary] = [])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes which type is NSDictionary

    +
    +
    + + items + + +
    +

    the event items which type is NSDictionary

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + flushEvents() + +
    +
    +
    +
    +
    +
    +

    Use this method to send events immediately

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func flushEvents()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Add global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addGlobalAttributes(_ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Delete global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func deleteGlobalAttributes(_ attributes: [String])
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes names to delete

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addUserAttributes(_:) + +
    +
    +
    +
    +
    +
    +

    Add user attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addUserAttributes(_ attributes: NSDictionary)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the user attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + setUserId(_:) + +
    +
    +
    +
    +
    +
    +

    Set user id for login and logout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func setUserId(_ userId: String?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Get Clickstream configuration, please config it after initialize sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func getClickstreamConfiguration() throws -> ClickstreamConfiguration
    + +
    +
    +
    +

    Return Value

    +

    ClickstreamContextConfiguration to modify the configuration of clickstream sdk

    +
    +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Disable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Enable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/EventName.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/EventName.html new file mode 100644 index 0000000..c43a385 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Classes/EventName.html @@ -0,0 +1,155 @@ + + + + EventName Class Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

EventName

+
+
+ +
@objcMembers
+public class EventName : NSObject
+ +
+
+

ClickstreamAnalytics preset events

+ +
+
+
+
    +
  • +
    + + + + SCREEN_VIEW + +
    +
    +
    +
    +
    +
    +

    Preset event screen view

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_VIEW: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 0000000..6de9299 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,146 @@ + + + + Enumerations Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamAnalytics + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics api for swift

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ClickstreamAnalytics
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics.html new file mode 100644 index 0000000..6808726 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics.html @@ -0,0 +1,679 @@ + + + + ClickstreamAnalytics Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

ClickstreamAnalytics

+
+
+ +
public enum ClickstreamAnalytics
+ +
+
+

ClickstreamAnalytics api for swift

+ +
+
+
+
    +
  • +
    + + + + initSDK(_:) + +
    +
    +
    +
    +
    +
    +

    Init ClickstreamAnalytics

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func initSDK(_ configuration: ClickstreamConfiguration? = nil) throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:) + +
    +
    +
    +
    +
    +
    +

    Use this method to record event

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + recordEvent(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    The method to record event with ClickstreamAttribute

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func recordEvent(_ eventName: String,
    +                               _ attributes: ClickstreamAttribute,
    +                               _ items: [ClickstreamAttribute] = [])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + eventName + + +
    +

    the event name

    +
    +
    + + attributes + + +
    +

    the event attributes

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + flushEvents() + +
    +
    +
    +
    +
    +
    +

    Use this method to send events immediately

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func flushEvents()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Add global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addGlobalAttributes(_ attributes: ClickstreamAttribute)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Delete global attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func deleteGlobalAttributes(_ attributes: String...)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the global attributes names to delete

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + addUserAttributes(_:) + +
    +
    +
    +
    +
    +
    +

    Add user attributes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func addUserAttributes(_ attributes: ClickstreamAttribute)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + attributes + + +
    +

    the user attributes to add

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + setUserId(_:) + +
    +
    +
    +
    +
    +
    +

    Set user id for login and logout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func setUserId(_ userId: String?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Get Clickstream configuration, please config it after initialize sdk

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func getClickstreamConfiguration() throws -> ClickstreamConfiguration
    + +
    +
    +
    +

    Return Value

    +

    ClickstreamContextConfiguration to modify the configuration of clickstream sdk

    +
    +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Disable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Enable the SDK

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userId + + +
    +

    current userId, nil for logout

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + EventName + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset events

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EventName
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Attr + +
    +
    +
    +
    +
    +
    +

    ClickstreamANalytics preset attributes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Attr
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Item + +
    +
    +
    +
    +
    +
    +

    ClickstreamAnalytics preset item attributes +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Item
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Attr.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Attr.html new file mode 100644 index 0000000..9bd3bbc --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Attr.html @@ -0,0 +1,480 @@ + + + + Attr Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Attr

+
+
+ +
public enum Attr
+ +
+
+

ClickstreamANalytics preset attributes

+ +
+
+
+
    +
  • +
    + + + + SCREEN_NAME + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen name

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SCREEN_UNIQUE_ID + +
    +
    +
    +
    +
    +
    +

    Preset attribute screen unique id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_UNIQUE_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_SOURCE + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source source

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_SOURCE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_MEDIUM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source medium

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_MEDIUM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source campaign id

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CAMPAIGN_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_TERM + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source term

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_TERM: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source content

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CONTENT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + TRAFFIC_SOURCE_CLID + +
    +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID: String
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Preset attribute traffic source clid platform

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let TRAFFIC_SOURCE_CLID_PLATFORM: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + APP_INSTALL_CHANNEL + +
    +
    +
    +
    +
    +
    +

    Preset attribute app install channel

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let APP_INSTALL_CHANNEL: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + VALUE + +
    +
    +
    +
    +
    +
    +

    Preset attribute event value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let VALUE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    Preset attribute event currency

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/EventName.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/EventName.html new file mode 100644 index 0000000..63b2ef2 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/EventName.html @@ -0,0 +1,155 @@ + + + + EventName Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

EventName

+
+
+ +
public enum EventName
+ +
+
+

ClickstreamAnalytics preset events

+ +
+
+
+
    +
  • +
    + + + + SCREEN_VIEW + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let SCREEN_VIEW: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Item.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Item.html new file mode 100644 index 0000000..f847a63 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Enums/ClickstreamAnalytics/Item.html @@ -0,0 +1,508 @@ + + + + Item Enumeration Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Item

+
+
+ +
public enum Item
+ +
+
+

ClickstreamAnalytics preset item attributes +In addition to the item attributes defined below, you can add up to 10 custom attributes to an item.

+ +
+
+
+
    +
  • +
    + + + + ITEM_ID + +
    +
    +
    +
    +
    +
    +

    The id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_NAME + +
    +
    +
    +
    +
    +
    +

    The name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LOCATION_ID + +
    +
    +
    +
    +
    +
    +

    The location id of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let LOCATION_ID: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_BRAND + +
    +
    +
    +
    +
    +
    +

    The brand of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_BRAND: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CURRENCY + +
    +
    +
    +
    +
    +
    +

    The currency of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CURRENCY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + PRICE + +
    +
    +
    +
    +
    +
    +

    The price of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let PRICE: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + QUANTITY + +
    +
    +
    +
    +
    +
    +

    The quantity of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let QUANTITY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_NAME + +
    +
    +
    +
    +
    +
    +

    The creative name of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_NAME: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + CREATIVE_SLOT + +
    +
    +
    +
    +
    +
    +

    The creative slot of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let CREATIVE_SLOT: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY + +
    +
    +
    +
    +
    +
    +

    The category of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY2 + +
    +
    +
    +
    +
    +
    +

    The category2 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY2: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY3 + +
    +
    +
    +
    +
    +
    +

    The category3 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY3: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY4 + +
    +
    +
    +
    +
    +
    +

    The category4 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY4: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ITEM_CATEGORY5 + +
    +
    +
    +
    +
    +
    +

    The category5 of the item

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let ITEM_CATEGORY5: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 0000000..136bc5f --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,171 @@ + + + + Extensions Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Int64 + +
    +
    +
    +
    +
    +
    +

    for support Int64 attribute value

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension Int64: AnalyticsPropertyValue
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Decimal + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension Decimal: AnalyticsPropertyValue
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Typealiases.html new file mode 100644 index 0000000..54c6192 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/Typealiases.html @@ -0,0 +1,145 @@ + + + + Type Aliases Reference + + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + ClickstreamAttribute + +
    +
    +
    +
    +
    +
    +

    the attribute for Clickstream which support String, Int, Int64, Double and Bool

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias ClickstreamAttribute = AnalyticsProperties
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 0000000..c170357 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 0000000..f84ef86 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,442 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +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; } + +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; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +pre > code { + padding: 0; } + +a { + color: #0088cc; + text-decoration: none; } + a code { + color: inherit; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +hr { + height: 1px; + border: none; + background-color: #e2e2e2; } + +.footnote-ref { + display: inline-block; + scroll-margin-top: 70px; } + +.footnote-def { + scroll-margin-top: 70px; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 32px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 3; } + header img { + padding-right: 6px; + vertical-align: -3px; + 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: 26px; + padding-top: 12px; + position: fixed; + width: inherit; + z-index: 2; + margin-top: 32px; + white-space: nowrap; + overflow-x: scroll; } + #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; } + +.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; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.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; } + .main-content .section-name p { + margin-bottom: inherit; + line-height: inherit; } + .main-content .section-name code { + background-color: inherit; + padding: inherit; + color: inherit; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + margin-top: 10px; + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section-name-container { + position: relative; + display: inline-block; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item { + padding-top: 8px; + width: 100%; + 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; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 35px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 20px; } + .item .discouraged { + text-decoration: line-through; } + +.declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + 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); + position: absolute; + width: 12px; } + +.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%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.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; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + 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] { + float: right; } + form[role=search] input { + font: Helvetica, freesans, Arial, sans-serif; + margin-top: 6px; + font-size: 13px; + line-height: 20px; + padding: 0px 10px; + 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: #fff; + color: #333; + border: 1px solid #e2e2e2; + z-index: 4; } + form[role=search] .tt-highlight { + font-weight: bold; } + form[role=search] .tt-suggestion { + font: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + 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/Clickstream.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/index.html b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/index.html new file mode 100644 index 0000000..1c7080c --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,398 @@ + + + + Clickstream Reference + + + + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+ +

AWS Solution Clickstream Analytics SDK for Swift

+

Introduction

+ +

Clickstream Swift SDK can help you easily collect and report in-app events from iOS devices to AWS. This SDK is part of an AWS solution - Clickstream Analytics on AWS, which provisions data pipeline to ingest and process event data into AWS services such as S3, Redshift.

+ +

The SDK relies on the Amplify for Swift Core Library and is developed according to the Amplify Swift SDK plug-in specification. In addition, we’ve added features that automatically collect common user events and attributes (e.g., screen view, first open) to simplify data collection for users.

+ +

Visit our Documentation site and to learn more about Clickstream Swift SDK.

+

Platform Support

+ +

The Clickstream SDK supports iOS 13+.

+ +

API Documentation

+ + +

Integrate SDK

+ +

Clickstream requires Xcode 13.4 or higher to build.

+

1.Add Package

+ +

We use Swift Package Manager to distribute Clickstream Swift SDK, open your project in Xcode and select File > Add Pckages.

+ +

+ +

Enter the Clickstream Library for Swift GitHub repo URL (https://github.com/awslabs/clickstream-swift) into the search bar, you’ll see the Clickstream Library for Swift repository rules for which version of Clickstream you want Swift Package Manager to install. Choose Up to Next Major Version, then click Add Package, make the Clickstream product checked as default, and click Add Package again.

+ +

+

2.Parameter configuration

+ +

Downlod your amplifyconfiguration.json file from your Clickstream solution control plane, and paste it to your project root folder:

+ +

+ +

the json file will be as follows:

+
{
+  "analytics": {
+    "plugins": {
+      "awsClickstreamPlugin ": {
+        "appId": "appId",
+        "endpoint": "https://example.com/collect",
+        "isCompressEvents": true,
+        "autoFlushEventsInterval": 10000,
+        "isTrackAppExceptionEvents": false
+      }
+    }
+  }
+}
+
+ +

Your appId and endpoint are already set up in it, here’s an explanation of each property:

+ +
    +
  • appId: the app id of your project in control plane.
  • +
  • endpoint: the endpoint url you will upload the event to AWS server.
  • +
  • isCompressEvents: whether to compress event content when uploading events, default is true
  • +
  • autoFlushEventsInterval: event sending interval, the default is 10s
  • +
  • isTrackAppExceptionEvents: whether auto track exception event in app, default is false
  • +
+

3.Initialize the SDK

+ +

Once you have configured the parameters, you need to initialize it in your app delegate’s application(_:didFinishLaunchingWithOptions:) lifecycle method:

+

3.1 Initialize the SDK with default configuration

+
import Clickstream
+...
+func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+    do {
+        try ClickstreamAnalytics.initSDK()
+    } catch {
+        assertionFailure("Fail to initialize ClickstreamAnalytics: \(error)")
+    }
+    return true
+}
+
+

3.2 Initialize the SDK with global attributes and custom configuration

+ +

The following example code shows how to add traffic source fields as global attributes when initializing the SDK.

+
import Clickstream
+...
+func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+    do {
+        let configuration = ClickstreamConfiguration()
+            .withAppId("your appId")
+            .withEndpoint("https://example.com/collect")
+            .withLogEvents(true)
+            .withInitialGlobalAttributes([
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_SOURCE: "amazon",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_MEDIUM: "cpc",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN: "summer_promotion",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN_ID: "summer_promotion_01",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_TERM: "running_shoes",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CONTENT: "banner_ad_1",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID: "amazon_ad_123",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID_PLATFORM: "amazon_ads",
+                ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "App Store"
+            ])
+        try ClickstreamAnalytics.initSDK(configuration)
+    } catch {
+        assertionFailure("Fail to initialize ClickstreamAnalytics: \(error)")
+    }
+    return true
+}
+
+ +

By default, we will use the configurations in amplifyconfiguration.json file. If you add a custom configuration, the added configuration items will override the default values.

+ +

You can also add all the configuration parameters you need in the initSDK method without using the amplifyconfiguration.json file.

+

3.3 SwiftUI configuration

+ +

If your project is developed with SwiftUI, you need to create an application delegate and attach it to your App through UIApplicationDelegateAdaptor.

+
@main
+struct YourApp: App {
+    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
+    var body: some Scene {
+        WindowGroup {
+            YourView()
+        }
+    }
+}
+
+ +

Clickstream Swift SDK depends on method swizzling to automatically record screen views. SwiftUI apps must record screen view events manually, and disable automatic tracking of screen view events by setting configuration.withTrackScreenViewEvents(false) when the SDK is initialized.

+

4. Update Configuration

+
import Clickstream
+
+// configure the sdk after initialize.
+do {
+    let configuration = try ClickstreamAnalytics.getClickstreamConfiguration()
+    configuration.withAppId("your appId")
+        .withEndpoint("https://example.com/collect")
+        .withLogEvents(true)
+        .withCompressEvents(true)
+        .withSessionTimeoutDuration(1800000)
+        .withTrackAppExceptionEvents(true)
+        .withTrackScreenViewEvents(true)
+        .withTrackUserEngagementEvents(true)
+} catch {
+    print("Failed to config ClickstreamAnalytics: \(error)")
+}
+
+
+

Note

+

this configuation will override the default configuation in amplifyconfiguration.json file

+ +
+

Start using

+

Recored event.

+ +

Add the following code where you need to complete the event report.

+
import Clickstream
+
+let attributes: ClickstreamAttribute = [
+    "Channel": "apple",
+    "Successful": true,
+    "ProcessDuration": 12.33,
+    "UserAge": 20,
+]
+ClickstreamAnalytics.recordEvent("testEvent", attributes)
+
+// for record an event with event name
+ClickstreamAnalytics.recordEvent("button_click")
+
+

Record event with items

+ +

You can add the following code to log an event with an item.

+ +

Note: Only pipelines from version 1.1+ can handle items with custom attribute.

+
import Clickstream
+
+let attributes: ClickstreamAttribute = [
+    ClickstreamAnalytics.Item.ITEM_ID: "123",
+    ClickstreamAnalytics.Item.CURRENCY: "USD",
+    "event_category": "recommended"
+]
+
+let item_book: ClickstreamAttribute = [
+    ClickstreamAnalytics.Item.ITEM_ID: 123,
+    ClickstreamAnalytics.Item.ITEM_NAME: "Nature",
+    ClickstreamAnalytics.Item.ITEM_CATEGORY: "book",
+    ClickstreamAnalytics.Item.PRICE: 99.9,
+    "book_publisher": "Nature Research"
+]
+ClickstreamAnalytics.recordEvent("view_item", attributes, [item_book])
+
+

Record Screen View events manually

+ +

By default, SDK will automatically track the preset _screen_view event when ViewController triggers viewDidAppear.

+ +

You can also manually record screen view events whether or not automatic screen view tracking is enabled, add the following code to record a screen view event with two attributes.

+ +
    +
  • SCREEN_NAME Required. Your screen’s name.
  • +
  • SCREEN_UNIQUE_ID Optional. Set the hashValue of your ViewController or UIView. If you do not set, SDK will set a default value based on the current ViewController’s hashValue.
  • +
+
import Clickstream
+
+ClickstreamAnalytics.recordEvent(ClickstreamAnalytics.EventName.SCREEN_VIEW, [
+    ClickstreamAnalytics.Attr.SCREEN_NAME: "HomeView",
+    ClickstreamAnalytics.Attr.SCREEN_UNIQUE_ID: homeView.hashValue
+])
+
+

Add global attribute

+
import Clickstream
+
+let globalAttribute: ClickstreamAttribute = [
+    ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "apple",
+    "class": 6,
+    "level": 5.1,
+    "isOpenNotification": true,
+]
+ClickstreamAnalytics.addGlobalAttributes(globalAttribute)
+
+// for delete an global attribute
+ClickstreamAnalytics.deleteGlobalAttributes("level")
+
+

Login and logout

+
import Clickstream
+
+// when user login usccess.
+ClickstreamAnalytics.setUserId("userId")
+
+// when user logout
+ClickstreamAnalytics.setUserId(nil)
+
+ +

When we log into another user, we will clear the before user’s user attributes, after setUserId() you need to add new user’s attribute.

+

Add user attribute

+
import Clickstream
+
+let userAttributes : ClickstreamAttribute=[
+    "_user_age": 21,
+    "_user_name": "carl"
+]
+ClickstreamAnalytics.addUserAttributes(userAttributes)
+
+ +

Current login user‘s attributes will be cached in disk, so the next time app launch you don’t need to set all user’s attribute again, of course you can update the current user’s attribute when it changes.

+

Log the event json in debug mode

+
import Clickstream
+
+// log the event in debug mode.
+do {
+    var configuration = try ClickstreamAnalytics.getClickstreamConfiguration()
+    configuration.isLogEvents = true
+} catch {
+    print("Failed to config ClickstreamAnalytics: \(error)")
+}
+
+ +

After config configuration.isLogEvents = true and when you record an event, you can see the event json at your Xcode log pannel by filter EventRecorder.

+

Send event immediately

+
import Clickstream
+// for send event immediately.
+ClickstreamAnalytics.flushEvents()
+
+

Disable SDK

+ +

You can disable the SDK in the scenario you need. After disabling the SDK, the SDK will not handle the logging and sending of any events. Of course you can enable the SDK when you need to continue logging events.

+
import Clickstream
+
+// disable SDK
+ClickstreamAnalytics.disable()
+
+// enable SDK
+ClickstreamAnalytics.enable()
+
+

How to build&test locally

+

Config your code format

+ +

Install swiftformat plugin in your Xcode, and config shortcut for code format.

+

Config your code lint

+ +

Install swiftlint, and execute the below command at the project root folder:

+
swiftlint
+
+

Build

+ +

Open an termial window, at the root project folder to execute:

+
swift build
+
+

Test

+
swift test
+
+

Security

+ +

See CONTRIBUTING for more information.

+

License

+ +

This library is licensed under Apache 2.0 License.

+ +
+
+ +
+
+ + diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 0000000..1984416 --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 0000000..359cdbb --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(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/Clickstream.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/typeahead.jquery.js new file mode 100644 index 0000000..bcb734b --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + 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) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + 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 = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + 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 ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + 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 (this.autoselect) { + 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.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + 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) { + if (typeof data.val === "string") { + 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, + menu: $menu + }, 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/Clickstream.docset/Contents/Resources/Documents/search.json b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/search.json new file mode 100644 index 0000000..6393e8b --- /dev/null +++ b/docs/docsets/Clickstream.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:11Clickstream0A9Attributea":{"name":"ClickstreamAttribute","abstract":"

the attribute for Clickstream which support String, Int, Int64, Double and Bool

"},"Extensions.html#/s:s5Int64V":{"name":"Int64","abstract":"

for support Int64 attribute value

"},"Extensions.html#/c:@SA@NSDecimal":{"name":"Decimal"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO7ITEM_IDSSvpZ":{"name":"ITEM_ID","abstract":"

The id of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO9ITEM_NAMESSvpZ":{"name":"ITEM_NAME","abstract":"

The name of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO11LOCATION_IDSSvpZ":{"name":"LOCATION_ID","abstract":"

The location id of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO10ITEM_BRANDSSvpZ":{"name":"ITEM_BRAND","abstract":"

The brand of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO8CURRENCYSSvpZ":{"name":"CURRENCY","abstract":"

The currency of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO5PRICESSvpZ":{"name":"PRICE","abstract":"

The price of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO8QUANTITYSSvpZ":{"name":"QUANTITY","abstract":"

The quantity of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13CREATIVE_NAMESSvpZ":{"name":"CREATIVE_NAME","abstract":"

The creative name of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13CREATIVE_SLOTSSvpZ":{"name":"CREATIVE_SLOT","abstract":"

The creative slot of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13ITEM_CATEGORYSSvpZ":{"name":"ITEM_CATEGORY","abstract":"

The category of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY2SSvpZ":{"name":"ITEM_CATEGORY2","abstract":"

The category2 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY3SSvpZ":{"name":"ITEM_CATEGORY3","abstract":"

The category3 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY4SSvpZ":{"name":"ITEM_CATEGORY4","abstract":"

The category4 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY5SSvpZ":{"name":"ITEM_CATEGORY5","abstract":"

The category5 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO11SCREEN_NAMESSvpZ":{"name":"SCREEN_NAME","abstract":"

Preset attribute screen name

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO16SCREEN_UNIQUE_IDSSvpZ":{"name":"SCREEN_UNIQUE_ID","abstract":"

Preset attribute screen unique id

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO015TRAFFIC_SOURCE_E0SSvpZ":{"name":"TRAFFIC_SOURCE_SOURCE","abstract":"

Preset attribute traffic source source

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO21TRAFFIC_SOURCE_MEDIUMSSvpZ":{"name":"TRAFFIC_SOURCE_MEDIUM","abstract":"

Preset attribute traffic source medium

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO23TRAFFIC_SOURCE_CAMPAIGNSSvpZ":{"name":"TRAFFIC_SOURCE_CAMPAIGN","abstract":"

Preset attribute traffic source campaign

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO26TRAFFIC_SOURCE_CAMPAIGN_IDSSvpZ":{"name":"TRAFFIC_SOURCE_CAMPAIGN_ID","abstract":"

Preset attribute traffic source campaign id

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19TRAFFIC_SOURCE_TERMSSvpZ":{"name":"TRAFFIC_SOURCE_TERM","abstract":"

Preset attribute traffic source term

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO22TRAFFIC_SOURCE_CONTENTSSvpZ":{"name":"TRAFFIC_SOURCE_CONTENT","abstract":"

Preset attribute traffic source content

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19TRAFFIC_SOURCE_CLIDSSvpZ":{"name":"TRAFFIC_SOURCE_CLID","abstract":"

Preset attribute traffic source clid

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO28TRAFFIC_SOURCE_CLID_PLATFORMSSvpZ":{"name":"TRAFFIC_SOURCE_CLID_PLATFORM","abstract":"

Preset attribute traffic source clid platform

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19APP_INSTALL_CHANNELSSvpZ":{"name":"APP_INSTALL_CHANNEL","abstract":"

Preset attribute app install channel

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO5VALUESSvpZ":{"name":"VALUE","abstract":"

Preset attribute event value

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO8CURRENCYSSvpZ":{"name":"CURRENCY","abstract":"

Preset attribute event currency

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/EventName.html#/s:11Clickstream0A9AnalyticsO9EventNameO11SCREEN_VIEWSSvpZ":{"name":"SCREEN_VIEW","parent_name":"EventName"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO7initSDKyyAA0A13ConfigurationCSgKFZ":{"name":"initSDK(_:)","abstract":"

Init ClickstreamAnalytics

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11recordEventyySSFZ":{"name":"recordEvent(_:)","abstract":"

Use this method to record event

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11recordEventyySS_SDySS7Amplify0B13PropertyValue_pGSayAGGtFZ":{"name":"recordEvent(_:_:_:)","abstract":"

The method to record event with ClickstreamAttribute

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11flushEventsyyFZ":{"name":"flushEvents()","abstract":"

Use this method to send events immediately

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO19addGlobalAttributesyySDySS7Amplify0B13PropertyValue_pGFZ":{"name":"addGlobalAttributes(_:)","abstract":"

Add global attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO22deleteGlobalAttributesyySSd_tFZ":{"name":"deleteGlobalAttributes(_:)","abstract":"

Delete global attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO17addUserAttributesyySDySS7Amplify0B13PropertyValue_pGFZ":{"name":"addUserAttributes(_:)","abstract":"

Add user attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO9setUserIdyySSSgFZ":{"name":"setUserId(_:)","abstract":"

Set user id for login and logout

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO03getA13ConfigurationAA0aD0CyKFZ":{"name":"getClickstreamConfiguration()","abstract":"

Get Clickstream configuration, please config it after initialize sdk

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO7disableyyFZ":{"name":"disable()","abstract":"

Disable the SDK

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO6enableyyFZ":{"name":"enable()","abstract":"

Enable the SDK

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/EventName.html":{"name":"EventName","abstract":"

ClickstreamAnalytics preset events

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/Attr.html":{"name":"Attr","abstract":"

ClickstreamANalytics preset attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/Item.html":{"name":"Item","abstract":"

ClickstreamAnalytics preset item attributes","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html":{"name":"ClickstreamAnalytics","abstract":"

ClickstreamAnalytics api for swift

"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withAppId:":{"name":"withAppId(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withEndpoint:":{"name":"withEndpoint(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withSendEventInterval:":{"name":"withSendEventInterval(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackAppExceptionEvents:":{"name":"withTrackAppExceptionEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackScreenViewEvents:":{"name":"withTrackScreenViewEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackUserEngagementEvents:":{"name":"withTrackUserEngagementEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withCompressEvents:":{"name":"withCompressEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withLogEvents:":{"name":"withLogEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withAuthCookie:":{"name":"withAuthCookie(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withSessionTimeoutDuration:":{"name":"withSessionTimeoutDuration(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/s:11Clickstream0A13ConfigurationC27withInitialGlobalAttributesyACSDySS7Amplify22AnalyticsPropertyValue_pGF":{"name":"withInitialGlobalAttributes(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withInitialGlobalAttributesObjc:":{"name":"withInitialGlobalAttributesObjc(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_ID":{"name":"ITEM_ID","abstract":"

The id of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_NAME":{"name":"ITEM_NAME","abstract":"

The name of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)LOCATION_ID":{"name":"LOCATION_ID","abstract":"

The location id of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_BRAND":{"name":"ITEM_BRAND","abstract":"

The brand of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CURRENCY":{"name":"CURRENCY","abstract":"

The currency of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)PRICE":{"name":"PRICE","abstract":"

The price of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)QUANTITY":{"name":"QUANTITY","abstract":"

The quantity of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CREATIVE_NAME":{"name":"CREATIVE_NAME","abstract":"

The creative name of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CREATIVE_SLOT":{"name":"CREATIVE_SLOT","abstract":"

The creative slot of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY":{"name":"ITEM_CATEGORY","abstract":"

The category of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY2":{"name":"ITEM_CATEGORY2","abstract":"

The category2 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY3":{"name":"ITEM_CATEGORY3","abstract":"

The category3 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY4":{"name":"ITEM_CATEGORY4","abstract":"

The category4 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY5":{"name":"ITEM_CATEGORY5","abstract":"

The category5 of the item

","parent_name":"ClickstreamItemKey"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)SCREEN_NAME":{"name":"SCREEN_NAME","abstract":"

Preset attribute screen name

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)SCREEN_UNIQUE_ID":{"name":"SCREEN_UNIQUE_ID","abstract":"

Preset attribute screen unique id

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_SOURCE":{"name":"TRAFFIC_SOURCE_SOURCE","abstract":"

Preset attribute traffic source source

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_MEDIUM":{"name":"TRAFFIC_SOURCE_MEDIUM","abstract":"

Preset attribute traffic source medium

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CAMPAIGN":{"name":"TRAFFIC_SOURCE_CAMPAIGN","abstract":"

Preset attribute traffic source campaign

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CAMPAIGN_ID":{"name":"TRAFFIC_SOURCE_CAMPAIGN_ID","abstract":"

Preset attribute traffic source campaign id

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_TERM":{"name":"TRAFFIC_SOURCE_TERM","abstract":"

Preset attribute traffic source term

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CONTENT":{"name":"TRAFFIC_SOURCE_CONTENT","abstract":"

Preset attribute traffic source content

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CLID":{"name":"TRAFFIC_SOURCE_CLID","abstract":"

Preset attribute traffic source clid

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CLID_PLATFORM":{"name":"TRAFFIC_SOURCE_CLID_PLATFORM","abstract":"

Preset attribute traffic source clid platform

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)APP_INSTALL_CHANNEL":{"name":"APP_INSTALL_CHANNEL","abstract":"

Preset attribute app install channel

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)VALUE":{"name":"VALUE","abstract":"

Preset attribute event value

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)CURRENCY":{"name":"CURRENCY","abstract":"

Preset attribute event currency

","parent_name":"Attr"},"Classes/EventName.html#/c:@M@Clickstream@objc(cs)EventName(cpy)SCREEN_VIEW":{"name":"SCREEN_VIEW","abstract":"

Preset event screen view

","parent_name":"EventName"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)initSDKAndReturnError:":{"name":"initSDK()","abstract":"

Init the Clickstream sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)initSDK:error:":{"name":"initSDK(_:)","abstract":"

Init the Clickstream sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent:":{"name":"recordEvent(_:)","abstract":"

Use this method to record event

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent::":{"name":"recordEvent(_:_:)","abstract":"

The method to record event with attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent:::":{"name":"recordEvent(_:_:_:)","abstract":"

The method to record event with attributes and items

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)flushEvents":{"name":"flushEvents()","abstract":"

Use this method to send events immediately

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)addGlobalAttributes:":{"name":"addGlobalAttributes(_:)","abstract":"

Add global attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)deleteGlobalAttributes:":{"name":"deleteGlobalAttributes(_:)","abstract":"

Delete global attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)addUserAttributes:":{"name":"addUserAttributes(_:)","abstract":"

Add user attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)setUserId:":{"name":"setUserId(_:)","abstract":"

Set user id for login and logout

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)getClickstreamConfigurationAndReturnError:":{"name":"getClickstreamConfiguration()","abstract":"

Get Clickstream configuration, please config it after initialize sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)disable":{"name":"disable()","abstract":"

Disable the SDK

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)enable":{"name":"enable()","abstract":"

Enable the SDK

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html":{"name":"ClickstreamObjc","abstract":"

ClickstreamAnalytics api for objective-c

"},"Classes/EventName.html":{"name":"EventName","abstract":"

ClickstreamAnalytics preset events

"},"Classes/Attr.html":{"name":"Attr","abstract":"

ClickstreamANalytics preset attributes

"},"Classes/ClickstreamItemKey.html":{"name":"ClickstreamItemKey","abstract":"

ClickstreamAnalytics preset item keys for objective-c"},"Classes/ClickstreamConfiguration.html":{"name":"ClickstreamConfiguration","abstract":"

The configuration object for clickstream, modify the params after sdk initialize

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/Clickstream.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Clickstream.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..1014c58ba834a653b4e5723025cbcfb3fd85fb37 GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/docs/docsets/Clickstream.tgz b/docs/docsets/Clickstream.tgz new file mode 100644 index 0000000000000000000000000000000000000000..30517177644c34a1cab90d18d35a7e222f9c5aeb GIT binary patch literal 88412 zcmaHxb8IHi*XOIJwr$(CJ)QEY?N04!r?zcRZQHhO+wBz7_SyNpyYFtYn{4vUy(cHR zf869I_nhzfkVL_P$-iV+fI(jQ!Wj{0Wz-!>xDy&O{YYy1okOc+LbJlOUT-RpV9w`s zxE5|=aZO8CqqXI^VR>gk8Ia%MG?i!*vxnZj~xtDNqUf;+#?UU|! zt)Wh#vksJMdJfvjlHe%9BWmH)%*3;@o9%k(x&1l%(sSv{f=V%1ikC`#*Cr$$f*0tP zKJm$$Geew*A|cY*o~PWJ_IF$)eRA{q`p=W64>Qh*>)Y10Fvbak05$!$NMk4beDP9r zxWE-=n8@kbQ|qu&i4U(_!GNuM6cxBs**e8_YVq^K-NP$)g2UR;B!`bu*iiX-W0Pi% zf~I>9Q{~plbGDUU=5IasBuZ0if6SuI)|UIhKIgBWZDM;Tm#TC0|T~7y;*|Nn(i8Fm}!s zR(72J+CPxPL^7h$kVo&HSh@MQ@iRw636NzRw<5KR7_+WicvDkTuXq{FQPiA(@lJ{h z>WTU5PqSl#xs+$W zV0_}_{n?GgAwOWidH>RVT&*_=W#^oHB7fQ1yBvCEtNfsiZ+&OQLPonXL$o}l;};Gb z9S7dbl`CI}B-gU~qd{=iB| zrz(Ucq=7mG>HqeQ9zNlH7{<}KdPbYUA+j@P4-1yKC#~CUgcPbGrCHda(U<2Ey?QJ@7K1>Bi{$Hs*&)#Q-B4xE?ay*ZB$9i^nIkA)(p>0sr~fdWxGac_)g5^&oAeh2`qVv>?m zK6C~l)Bm8v0E(~O;?cnD`P)QzLzI+bh#$TY4I)Fwxf!D(auapAX9f*};K2(G1unrg znt!l}9b|5Nt^EOQ7}&f?OzJabWs2+&0zuEuVOhWCTt7QbSD84!I-JV)k3%_9{Tc}? zLGqtF9p9GLZFUVdH6IHy4IVA0el2>edRkG=o-<)D)+pf-CQaMj4m+ZS;UvSRtBBBv{UBgd>Paa1y530bL1e0NXN1mV=t~KWk{F> znn?`8OhT1~IWXt^`J3}AjYgE}WIO~jrjarQHW(W@mQch43#^Ne0|UZ^oLBg#8K>tH zta6g$gH@0_=~O{ZCoHA+@PNM~T)K)Co0p(_@oAv2NxD03LyhTOP={Td7rm& zd&IW*AneA6MU?g6N%U#BpB**OUPX9`J}{}=w|e+!J)7?;FFTuv2u11d=!gX*%*Wwj zf4y^%+j9ljeqGxWd=y<9A4YEOLtJz;w1or)hg!g%ospfZr@Ql%h!8uQTiMoGo5yL; z$ji*J-fdYjqu*`Wzk|Tmag&SfY`zLcR&dnSf~MG zr+Mh8@m@ZT%AqAcs|Aq`KcAM5!NZ%C(Bb{2FZL+w*^?=@7-w^tu_EyB!IFK|sB#!b z1*rmw{{8uk2NtR{dR*kB4h2+dj7ajWIA_xX*EdYZK;__(_En%_%XCJNpzbMUD*P0N zRx3IL#H?O4H;V|!Y0Izd>UWebwjCk3lA#%!oBhlcNe(hG#3H1u0*2bCk5nI#d4wmM zqj5W2n%0gmOou+8sdXT~oA8VqYc3Z)=#OK*u7+qQ1L8)EC`&U?QGnYru;H6|*i{18 zEV%s%7=@hg6D)Ae6l3^GjtV06U(%o!Oz)^rht9}JdpMI-K zKJac0D!sP|Lkb?QxZhO{Uq%$;8GBJ9i{mFMb4q%Cx5*^zPC0+ndE|5k@l(qO6#O+g zuxG=25lf2*pL)QIFb4MH1GFS`kS-7e{c~CxZ01Pb8ITuH10bn?yZp zwRL;(UH;PdN1hddZF}c=m=aIb-}4TuL%$~B)l9q2?&G-WI4%?(W}c6o5ADhOcaWN8 zt*^}XVJZ&(*}E?nN=BICuC7Fg;oA_S$|uidA;>|yMf7>Ms`D#u+b-au*DK};RC$0s zMm+s~2GU{%k}mRS>40{#%Ns@AX1Yq=LAD%e+WGGeHSC`t_yUg=bx^P1qFKO&A2POW zKFDF=49)i$6q6Cfr1Cj?p1`#P;xWto7q1S;8GeEq6pH{AAbGo|RS?Vcl7u34a{5^n z$k4g*U-pD+0c1EhFg@w8q5v)%5qx*5qM%(Rem`X z{O8J*7a&m=-L$%^wdDH@yuch|SZ~h6ox~fziB8KKkE-UqZ6K74may=h2i)1f*a;m7YmBesD}@ zPJ1-xRHL+B^K5UtSMztdja=EkX-}Fc6j`^tT~41~{8I1Tei}VNiz@$$J#l*$(F3(S z>)QCuKdCUSn^nF&cZ}MUxe1+sY(Df33qtcaDH;7*d?p`oQY*pbfS*`eb{vndVd1Q* zhV8wm7f0G-P14I5n(O1KVt5xdyUpNr3U42xtdB~~W1L3_NPIqGWfU1GnP>g%gyKFF z9Ho1hTiM?(^}heLfj?1l{3cvR2Bl$95@Cc~2L5sZxz%Zi)Fwl+my5==XYcFZ8T3J~ zh80SW@DteHSA3vyjLjR2&Z{C)w_oNOFj;Md&!DdfyN~AfXSI`?knr84a%rOAZoL*b=9HWB#qBj<|Lzbpw7qJ_Oped zCEeIOun5QqyD4F=oS}F!3)!yohJaanR`qc>vSNH$3N zhF|W_Q}_#s`*jif48(f54_2-q3WSsgrjXgYdd3yZ5M1~SFTZhpp8^~6haa1$qJ%Q3 z>;0-wux!jy0Z(PvO?7u$HFR1gb1BcA-Kh88g?8SS7s}9cfakgk@ZK$M5Yidq7GWy0 z?(Es<>FH^t3~td>dkzTi0OG6h1)?JH2(}-49hfVyeV*78R@mRv-bQZ(RmD+ ziu8=K>`?x5;3@bm$|CO^lXL2M0?EZZ&$R5>ms%}`B$|UbLR2Dl3^H9F80GB$G@Yr~ zoS~Ef=Mo%_##k>RJ-uH)L0*7dej7RktuR|MrP`AV)bEq{raXD>YQ;+g|NMG5j?0(l zj@&LN&Yef$$tX2N{SrsGo7+CnV5xQ@9iHwEszPoyNNI@@zqwGH&Ri45AybivqYok; z&YFAx+G&|Ft64h~%5OEpg%78G0F#3(ZbthroYE>Wm}Pzw2D>oDYN*-Cp%*qZgV7)7 z=Qubw=nTf%2U_t(idQmjll}0l;5W%#;>*R1aQ^L%l}x@fQnZ}0JN}1zS4UyG zRrpkk_*ily3UakmvNcrTZXvY6ws>xsdOc~O*2V$;sJImAD^lj37H9UvNR4)qf8`;n zRTTc*GAdvbZ<*&Tn5TfYAVuFE2kiAZ(mA00ttGw3*5+r`bxTW7wTOLj^do5G4Mfh{ z==9a=tjTxy(d+cJ%L{VI2G!<^jsI7`GXv5hHR}8CnBWvt`TWsKZUcP*(#jAvwxQ4g zE%9$Y1f_OQ@7faUf-avO^!z+OQ?reZnzl<{i_ z;e%g#aO8#5oi$%A*v3LDZy0mKRreEpTv`T$QsIEjd5%OL7}uVjNfV`S;P|-yBg>v+&|#62SQx1& zKQIE|6A&JR?p;(GA#Qj=A2;0Or$)_$jSylTC`(8dQOwn^3fIHZxQv9SaFPui%2R|+ z8)Owc>CHl z(x=Z5Y_RdPAFb&|Q1;D$J&TJLZN)F8jCpakiOPYQYfT4Y_itvY04u#;&BIWT0hMgX zp2iHB)H#p!m>9>c1rMGPR7`~-_477tUfkyP2|s`DgXj-Za+zd(V88u+xrKp*diJY4 zH&)xs+F-W!&3~RqMQPI8{wO%fx$N!!QePy=y0P78y6Jc887U=*w`)?0kqBN$y-FwhJ-1m zXe?L1L#8K>FL=PC~t_sUfPKKSXU<~d-MLBz6??#0ltj7jpB>6n55*^*@b$&AFs?j$Q9~!?gJ1w z3DOyU@T5=bSqE4^x}F6by=gXoWOe`dx!vx%X0^W;v3KDi&QvwE+Z3@2 zW>hk<(hlk^f5*FtUWN$jn9?9zZWd^qhk%rs(!k+6nBWxOhvK=!JWMHX70q+$9|ESh z@jF1O|Bd<3^LljIM!eVQM6}V!B}OFY$s}o?;D4`Kz3kyQ13B2d6_sCa|JZNY{z0Gv zYJZ-t9$%?n`LS1gj~n-Ys|!Cj7T9gQiPb{x0n$@CLUpZ$kzM@vw&*a5|(Ggk2 zqwh4#eNC|cN9Ixqk|5Sb`*&n-v-PZa_jt3IH?S;NA*&{{mPfw>ynOj0joS_VxulZY zjN|uld(${hInVV5s=C!z2umhHQKM+fg!gDxpQM#FV&=xqyt~}xHdC){1ec%LC&Q(h z5@=zm@n$-v7d$U|)boGKIZrXneBf?^z`$#e!7#w1b|JA)Zv>YJG`3p(brIW!}y z$ai78N?x(=4kIQ3+JaNI*&~A)?Q0N?*XfnC+p#SFihHkwDUEpCavIaXe$UY<+tkw` zF>$CR3YE#MUX!rjW&bQJF>n~s=#Zd;baGsJsW9;NL3Lg%nOjYA;{U&^)%nxghk8oO zo=@spj*U?nQvFPwTx@RRShW7_P4N28HC$visdVXnR_7ry4E()l^Ku#AFRipwhVN@9 z*FFu-MKkv5$|WGq50tte(f3q8P6|EhT31f;)o0>qV%#TBSrw#&yFx;B2m1l|m`JpX z#!c4oWV4G*r?DbOqkbpavaGR+R?Hr;BIhD@WWIAac`m^S72u( zKO-EI3#-9knYlwxhW#~6cVs8U&A>v>Q0^>)^)NS(UF^nNBq5VwH|UeWixY#upm~tS zB!ht`U1&k*JE7pnBcimQvA>%N=XhaOqzA`Mr(3Yi*C`iI9U1+r`M50qIdd>QLqm6b zBWN?+_7Xyn6$$r%n#+Ec*pM=z3}Bs!XEagW4b3`aIbWqIYK1p$N?#jJJFXmT>LDdI zc*qGIf9yQwm8!iRI3_3kz^+kMd2khSnG|&*oo0h~6_7nNEP@sb(g?bWOdTWYu8KGY zJ)M;|YIEp~W^e#}K0f~jtSt&M?K3FLXdoS%qtFOAHs zS~(>J$rEmd+5j|8xpR8RR|5aC5lTU?S$7d&ZRB9eT6(?)8oJI(d0daNA(rEk^n(iq zWi5}bp^Efz;;ey>;%^m)jcRQXBHdTe%vt!1Bp&l!HF5YDQR#}<{cWNDi-0N{Usz%q ztrwhmh<>Hw$-FNX*4(?9Db=rvBY&)%`33&hk7|cud4kc0L&|+&)Es%2d=u3u=kz|2 zRV#Z26CUVBmZ!WOK#go2@>s(W~owxxxA1@JA zofkcJQR>(bgtRP`d^Rj$*1DD*LKBlbuhuYK4wykG2a^c$pgL~tfkwgAPE z{!H(bG6s4bL&|u6bL}5uA2>BM@x!Dt^Aipo`6h{LXy+w$UhxV--rkxD2(dG+3(f@8 zXr#C4Dk+CiLBudkoN;w}a}Ud9$uiPHI^>cLMYffSzz;Cd=H#V$D2=OzF$6k?zYqAL ztrph#(>C03D``3~rk;sVQL!U)h$=NSQW(SXn&k6iHJA#UxOGUwq*7#oeFvD;BU6&J z!{|h0eJq4QV=^8~2t48iltzL(f+1AX5-tYthAQ@Kk?@6VP+{-oNb7cB877t|mGV&^ znoa%2ff`WLH@~POqBzc6hxpSKrvsE>^pLwqhMa{ZQp>**mURruSbNjK1~?NOJ|1Hg zbDQ%=QV^EZQd9`#m9x~e0m&N-#!li4qk>ZP@X%l@6MtA!6mR>t=1y{tE$3S3>o^$J zM9%<$M0GPW0qqbw6h#c+l;rqNEUEcrlmTnOBC&aZzF2e@V0b>xI4e!SS^zKlV0>{T zxEtPGMEF{LEL*m5y*hhfqvUTCV$`X#-Fk!pF|x#69TA6A=_gJRA8TqB_{I|K+98 z;pZ6_^Daw(oW&>|Ita~>H8^rtjoXvrTxjvCiMSiNuUpQl9O^)YBQw~l3I_LYLFC8D zc94oSTLKJE5Q+M?vZ*ryCO3bp3Nlyu5Mc2AfE-|=S-ssezVbI=%mA*jor&NNi2ER< ztB;Ru#QrmL6Ry*FJjBzK{gz_(lHgKH$mxO|>^F-NYx8q|)|JcI=bdCqf(>{=M4{JH zrk1GU25^`$#)Omu5uX5|G~}YIN~)Yu0m^^}Ch7b+PrKZb16)2dhzWv*R%6Bx@W87z z*W{x+XpuxCGgceoCWu~RaSvneD)nXB&GP(KG4OWH)N59Fv4bfKh41LJtEGyXfp9C;k|tpj?P<*`YE@G;n-eMG3@D7qE_|fGdA0 z({cboMqfJRUc#eUdXiK9JXEL*Ipqf=>NmU63=TS*S#t2*z|d2;Y^8a}--W#Se8Z|v zDr|_`J_n9LH*t_%YW^n1`DB4@o()i!q*n-kn4`sLhU%p9L*0!ZDUrO^!}q}?R>0Hr3BUcm!@YHb z%!*Ja0KhsU!p%dY#)7AC1$0s43d?{WYr5q)%D%`5S-pYhq=iIQ#>i3aKaA-ICi%cI z4yAxi&L!p0vZER)zFFWlmFVT_uQSuvn?fc2?cY^5F`g6QiyR-j^|&)s!MQUcwFP7i zPWT^d(f8Fle&E3Af(4DqGP=y!{A*-KH>k2>fd0}RW1-{FvQXjreBsX0#6v`q>|9BQUOm{T2w z;gjLcQGUKu1Tp77Gdt*cmcK{R-u zdFA*?5|BMMZ-$C>{Q4NkD zdxF_dvJhgIk{cR@(cl2l%t*0Av%tL$x(E)V^?*-k#5B8rdCcK~zI0fzm*ZP<;#O_s zcJ1(G#vy56xPGT#Dc0aSbhwjSLU5TlgaKn-ql;fQGfx!{-9KIu_8wo zeTI?5z1gc&l<&rkq^bK56m$0d2(ia9d1gnWK9k}j=XGxJ#cGo4^&x@pvVU3-_uGDH z$HykEh~c;*YURgqC2}TLH=f?(7Hw?4X^DWj)u@l8^eUHgY3djdi$l4mnach+Xi;pN zdqcOXJTyQ+(D;Dh%Eo;PD-Iw9m>T8V$wAOTj1314z-kCb14I8(mokIPMfCA0;TI#H zsa+s;MfX$mgOb*u`LE~TQ z1j523gJVk2QW}E6CAHV-DNAD{pO~l@;1`DUtBfuhA>V~~DfZDNB4$qcK8ODlID0*2x8SqtxD52Au;mC(1+qtNMsngEPqsA$S& zI0TevUsmV?d~gmUKrsH_yr;u%n1|PNM2)^^?CcPkMun!H^k}gVjBya=77)*Hi>q{1 z^rWch`<$GjBj4Gf3@W0$y$NXYeB8&G zWpij?B0C*Ta*j`^tcZ1P*Sy2E2%~g-Z@wPt(%5*xXKawT7D7$5T;9}UESVNo(y^5O z1lW3%OSB-Lu&lPH(nBoCuP$S74lq+?PYWi!_ke8N@puijp(R|Dqi z#iBwjk|Z#(7B2u|e@-akeslGgsYq$4RZc9Nn`lZY?>Vr2B3g?0F=Vey-7Zloknf?=DNwFJ&f+0l$ljM{e7D%~{lI&kHHFtv+1_h;17)jByk zuU318>bn&)H2B-IWjlYJee>lS_1pE*wz;-4JE1*zM^m{bHvNYz5lV4WBXM@*w=#9% zR%@2l;_MX4^qW76>0Tt!N_&jQfa8+oRM3#1K01FHa+QkoJeomVoSvxZBuT~rQCnGN zBTD0lCkjj0uyUce;i0wl=$z@bb@`ojli>FX|G^UA^93amW@8xyJ=5{-vHJaVYe;0q zg#30XRJG`)W{dYwptf5J<(8%qo~}@X3H^v_9g`8bu8=1FIC8V2U;#9%2Y9mBFNrBI zKzfR%rT2sgJ3D?llG2nSAn+qDaSb(_jFAn_+zHe#<$2kD*& z=Q+u?h=DT=Yq@83zGV_8R;dc%Vr8|Ag-n>%HeI9gYGsLGNswAG3zlaIV)&0nQBfMs z>-$rEEhy@d(xAgds+SQ$1V>|;oT#H?U2Q*Ih55U#Tj0H-3wGwXl>2zjtJuaA`TkK)v+$2 zC#A1R`W2ueBYo~Cin7O=^-%#1)@YTAu?s(7GIDIv9VSTnlNj{`%V0$e80zhAf?$Z% zOL;!vS3K#fe!K*WLBZalyF)cqhP%nLsf*b?x=F*lQg$_PNZJ`}$3kmQDIO5<5#V5;| z=@Q_)jEsHNHhg(YJ+QFDI^hK{W8cVmon)mO`WXs0ySbTnmB@N7noT*%NU_I|)|N-F z$@2t^)7<9v$Dn;2=l2s9afML^BO9S?Uo9fJV;CwmCKwI8_B{fOw9GwOv>9u#i+to{ ztBb{YC?(z4M$&@6E1&7PzFK0QtAq;0 zQn_{smtSDm6H!S!<-!_DtJFs&$*L3!O#Rj~fWYU`{H*$X z1W6ylMa3!CCwJ2j;v$S1!WV32&Pw3;J@hEMqCg#&_*>q$6xfzAQ@RULns$!+ z0c9QhBVHp%=GN^)Z8WQ~lTU=qoMLcvyWJacOKoT1!t+I>L`JZaa+Ks>_3~_DVhb58 z1f>kZi0-}jb9KYit_A?gQOwKv zYJ71>4mGv@`@Z@_x*Ry9TDveQTSsi!#~}!*Qia_uvdwVF97^$UXoTzPlHbK(tM^xg zQaRk30~eYQs<+$42$Z(Ur)?mWbEkkq+U?o5<}0*jaFDAbXh{9smZT=(F=}VLd>)-b zxB$4lX?v@W78gXs8CAn;rNqqGR|Z+bUd5>>{V`4%5H;iU41@-^!~*4sraD&PS#iS2Cq64` zYCbI|AWBo_Q?M+g$XMa17wLIs*G)5jPi$0lKeqOg{7%b?g&6x7opV`0$84=J6k8DV zsdsqrW>)4ZH(Rfun}J6nB#0r|Nw$jVQ3i-xuSdnjl$FA?ER-=a3ire`WP{HSvXI^v zVB@9|FJOioq{s8)9cvR@g321iBPajeiBM{V|0lT1D*+J=rSmHPRp*Svb~0w7`BL`b zDpfNfPe4XGNJeX7p1w7$hH~b6%WwIuHDnbhh?%wKBw|gmdb77QQSP;XLcwJ!B`*~v z;9%yaUqB85^@bX;iH2MpJZ{~CSy^rblKjFv_EA`(L3QSa&M-;sfOG6GrtR3RZgL|w zTq9sd4&nAw6NDorM*=1KAtr-GKy|c-sNoxNU6{%2tF>dfcuyj!Y4NmBvNBF$izI0;>;xbR5)10WA%4pa z^%t&%o%F>BAsfmf_uy<{Y(NKfrN7&KLEzRC#`!sF5N&afbJ;VMKR=DF$_2OF#4s+f zCLWbywA4llH{1fbbv%JhlXAdHj&&G;)p2@C9MSR~%PT~yrPmpCUIU3LiqSYbwmKmI zQE>{dxu4PfuX+v~Rn-BQ10*Ugo0y2-WhbuoFC1Ykdt4Nmc2jD!M8541HoZTmP*cTI ziB8OZq-g@dt#Yu~XqtKrW0d_lQ{S~4^bQW0t^UBO(Pi$7o94qsAcUvlF>z+@HO%)t zP4afJip~JQ5@>}`PFX^o#JTI-q{G{n0-2EcrQI%*gAejQ`syH!kPugZkJX&i5-Op( z?L}3OIsL4KRZ+`ha?*H|dUhgMUc58m-pR&l@l-ahMewyxvzCoTmBfIAXeMrdIn_w= zeS&)Gv3bmUetq&R4D=I)Hl!J6YNH!f@V1R4+CrpU`3xFUZDY8AV;|_?Eo>G?k@TEo zOJ6fVWl7mS)n!5yG8N@LnssN})Kb;LL$-=^4b30vvnRexV+>1JoL_wj-qg#+U!3S^ zq8ez?l!O}S-;kW#e^M(_I%fWsv|fvKQcGfBk?UWf8pp?pA|nAOafI3pT5keFaM99m zEVrFU61Co;G99IMZZVlTPyC^kzO)Xz0;NE$y1w#Ovcl*Yktc#?Eu-bwbLR*@gQY?F zHdDp>Nb znmEm-MsVc84U11(u6-(uyUz?5*@8Ck>>@fDD#hoI>mdQrku5U@jK<~iTZRdv#sEC>WSgKNB;_-R zJf}$r0!N4Ai6sPF>4IH&b|@l8_ol%JrSt>_$mC2iU`stCe#V9eumz*3Z3WouL{vEu zg^i%cq1UI^4M}5^%4i9ar>h3;?^KQ$3R+Bp%5%s`OrQ9ku=3)>iL#l;gvQfjE^ta`>8W>p%B(pYiHS=a zsy8X$_v^8C8I|i4$9mGP0B>SNf_0_Cv)})15h}Oh91NnMb?Ff5~q%+tat7+)m7>IgBBm*rY8MU*BMe`>}J}ah#(_ zZ@z=ELs-(39~dk3<6EuVPp&ifis=8x6!aMX?Wh3dhvC^9)R{*-CCE)oV8@R4jqe|L zViKof9BM=ae)9krVUu#)q&-BfX*MNHyu64C-FM~h>^4CBx;p<;kmpEOn5SIYI(qG9 z%#Rwc%S5FM@#tTqIK5>?u5 z$awv>;IJZTULQaUmuc z20;75FqAIj5bUJUVo9f3m$5*&fp!EVqr4np7V6Ae{3HC!A zi-P1X;S>S=iTvp5$0!YP7mMH)uoO6}k=kbSC^1TkwuLAnCo*{v->>lVSp*IXCb)v* zF3uilnx00t7$jzLaNIl$wzh3!x@cG)a=XTUuHbt)7#z7!G0;8iG)wQK;dmJu9QhuL z62lJ80Sb9=SYD9Qp0K3VqWe70ca25tNq!}))dNXGaA%R z=4A~G{kaR);L8vW?(T$H5#sQ@=>w1!L8?Z^Jn+k zmlscP@Of*N%Y$*A$X94R)b%kwY2u|)0TWsBy+GX5ILR^3l^-0bND?KeRUmU8)J zR*!)nNN_ICM}%6ye$)wqIYQCldD73aE38?fesBb)vAfw^In_ae5=T)_NNq%ZI8#2F z+b8mYb8S-KaVoSspU)be?Bq+c;QT%Pl(`7m=2 zFlkRT_Br;MgcuLrrf;eiBwQZ!TWA*iTztrQx0ttNXGwc3Jx6%87ND`rMM#Z(cL=JM zfxi_JxWsp&2;Q9Fo*Z+)l=M@~GJbT9!qhjz6vE~} z4VlCbWF#u0hgyxWE>Ci$h}PGF3za{mMzyM?a^#kfsJ-e$3l}_@N6wnfsww2uGCS&- zZU6WxX4`LnA=$TQuCdJn39-J3l}JZv@L1t{D*IndBuuI`5t@lb+><6S2axti%kXC0 zV3PAsVjpH8lsbDBdDg*cRPe2l?X-Y=H}o zl?mp{B>pTjBq22k{_V*y$!Oj=J}6Mw4F!&AQuNL##}@Nd8ykJ(LAek<#3L2q(azNZ z3(Bb`oVM9WF-L++E0_l-K)XJC3Tt0Ia@?3JAPvHKf>uEZaX3&F4H}?o6QWf?K3PE9 z&Mk$dpv_nkDT**%L?zoemWdzh@lcTZC21CEq~=Nvs|J!|Y7l2Ek*1`^G@_cu#&CfU z(+Un37Dw=!7G0%iP>qF0>E%;l5>AiNrSpq_h*yK|D+S4bNd(P{ zT&-Cu=mNpAy6@nyP@Ms7UgwutJMPK@Ofz;+xi=VPg|_My1t|)3hAyR@u{o64v5Cd9 zdJ_9c4>q@0MLi3( z?2$vn-nssZR7Q8H*5iW^gUUj(_RK_vkO1qL{U}~M376c>cNKP9VK?09tLY5YJu0zB zZNA4KGD<0gfy7d}BnZr2Ob8lmMkvJ$CS@BX@H|$LmufIUZ0zH#ag_Tl9h$M9DI$r> zK=rRt)Q z{pul|+sC(*o)4{tuWsfvwl8nN;#d(6vvN*c1|Vq0zV<&Es<>XgHAZ;pua8+~!#J4? zQ2XY&6W&|iv*&v&;y0+0I3;K{=4x+|kAUI3p#iYDr|;CCztTVQW=CfJ!)8n=Lm+06 zpTM2LKweToTNEfC~)G`Foc^ zn5k?F6@ETN=MFe+>Hz@5j9i@2g};0$JpgLl8o04j6guzp2T9}WEZ*cq}V!10Ot0oo8&G^v*gM4&_&HTHgnpk+)y z`F~i8_W#LR?CkgL&gZ`dW$FDd)MAf|*d^bA!kGVG?e#lI-{|*n`OrL~G*k=Lh&3T9 zBQo;4F1xU%OiSVgA=bG(z5Q?6#NSZNsm5clY+;ksj`Y+9ctI>1*jDr@W=9gl6fW{> z@xxMVV+Y%;s*fwAptLH7Ca_IlHs3Vu#&RDR_B35aRLIcNxS@62Dd%l?f;k{#7nQH< zS=(~SEOn!Q3x&TZskt46e&-?}d;ngA_Ddi0?w1Tb_35_CTWbqh1Pb$LhUEAf6pt7-;Z=pJRxOjyDk-K ztTt!n_#{0tnsDo_yorE_4l`T82OX$~y;LWF;Fhy~aL@nVv^1bjl7AX|CI{)^=ETsV z6xQ{tLJ_gXxA_IvueAQ1=6h>0Ge=590b_1aWTff-UX9m8WmrWM!xN%grYx*Q@By~S zZm>j@e1`DvtNN-~m}UV^iGD>5J)JTGz%d26l{Jx)%J9rZSNuZ@OD&oA&t~`{fa=n+ zu9D7P=Ezu{|spx~Kgx8qMVdFK}%TkKR$lo(SwAF=Val%Yr=$Yx=JhCm>UggACh zmxe;Gh4v9wCJ)nNlJ@h$p76BJ1)oH)#gRvq?Lv~r)`OxEmpw2)H&ZwiupU4^v$us?AHFO-JX-fbtB2YNpu9Y&&_~dK>lZ@8gOvA|i)GaQ zpIH;Lw$J)z_rIsgDhafMrw*?llVO?rk32qKp|iaMym-POJwl{BKX6LKJU_NGy?9~2 z@0s*xcPs~XcYw=l7VhJ|2|`P&=;T7Bw`@x(69ZuQff(LSb0P(d{P=DBXr)>*C*wj4 zqI`W*4EW}EM06~2SVrY}8$~53_<4c6Nm~N-UuhGAj zT|bW*#ZsKTe8Ub4;5aj8SRD2@8t&{Wk~LUw?I^G;Hqq@K%jv}}39336tN3X|l;IS0 z3e54Z-nz_Z69Ja27IGQzY!=C;Hdumq%eAZmCyq;X3$R4CtozHX`yUxY@q@)PPiO=M=<3~_D}R!Sm}Vc~w?l^Kjh5nJ??*R?qiOc$*n1}V@IIWScZ z0HO`R%$gX%W9r6Nm8V70@ZzSfjDr~Iq zN1&&tw&c^^4t?QLr!Sc}OQ}=8-(uDyWcdh>sPR`VVO{iMe<_jwPmfG0d{z*k_~(Y zC~*e`%sj&oZ&ms&sop@6|DHc9{4waU!{wpZ%g25YR5a=`d-VF1S~9u+VT~umDhT-1 z5(F~Xv;qf7>;Ghd5#g@yw_Qi&nq>xGUp|Ucae?B-hY>(apGtVjs73qCpF1oX{5n7O z%Z-vMf>F*Dd>a_3Zbde3O}Aa$?zq`EE%^yznsa_$RlMqHwd=RZ;@9`kuhXEobKgD*YLM)F&Xr3q-DaY0^>HCUJCO)G8PSI2S3Z8HO{5d-DbH#rnar07N5rGCtT;}op{Nqt_u;O=Z z?fkCuXG6l&*NC9yurAt{FISTF{e_w4{?0mZ_#_;_&SvyEZP{xj1u^k`m+Z8_%s)I4 zW@bV1?CRC^_3GTwVWp$Zqt|=3z42-@gq5pVkAsb8 za2Vk0z}>5EoP~*LJx$O((%@hJ_wy%_a_iuAO8`1IHPTY4xo+S(eG{vqW3C2mK!5K& zA3b1O0Rry+s6fJG5H9qVmbRVoP%dop#&zfrxqx#}8SU{+fnyGxj9Fd9rxHs2tD=sy zufzc&+?oG zVbv$jx!qtqR=i?hWQ3|5BWfQ%^1gAtZ(y&${_9;CIwxH4JX&U?X<5);SuCiN)1Tyz zJC3!}m)BHw2D|ogNVm`E+%)qXx49IsmaPsu6RUA$ZrOfjo@<9rUivrovVHcu;T&g# zH*PLP2jmS!iA+}`;%^Ql;!VD z%Jj?U=QqY#5}%N&?seCb1}3Cd;f<}HmsyOTJ&m`O7FQ0dB0>s1j;$_b%fYw9UxaHL zcYKe8!b_1q*39`$Z9xaIr#HgRU8_$WwPps~`s;UmlUoO$qj84(S7RT0Tpq2TPhUtU z?L?!yUZZgwow~Jft1ZIao32l}pZb#}rM*rkl}94NCcS@@0xowPB`$9|Ay)qfRc{$o zM;EkfRZ{Q&9Llx%VN!VZ_6pley@G$8AH2rc)zb4 z!gb^p-V}LCVm4a8KABmn09#KGcb%1c(QkmmNWp!5mnE-9xCN|+AL~2WjctxC7fp-f z6Bc?#V;boG2Lndtz|D7~XTjCWe-~p+M)&;_hv-|b;QJ`8b-!zpTVn9@pO?Bc()un} z*OaCkTyW!6(P|rb=zbRA@s|&+z8*nlMF6O)(yu99X{nafvE!)wJx<)=@iYNjvlh%L zhjp3s2+Oe*n(B8u6u>XMNpkQ$)k)GcvBqUH$lcS{ zvy5DKBk0AYzb@!U7mOPaMf4Zz5S@?-E%x0X>#?gd#qVe7*WASQ04SL&7 zgaW9m{qf+9RCPlUd^!zuXxAr#VgS!&Xnxm{Z$8SVh>HG5^kTqiJxX|7 zn;6r(Dt9a?^BMgZ20KfmS~aB@A91+Q6WV%C9i``M(lpycwN72E+^YBaz_@!=hDo)9t?RZ6F zZhq5QZ{l~uK&}4=D(_~8>+x~0eG^e_g2}o?;{aW7y&Kn!=lI zg+<5n_Gcxna`5C1FaP7l$4#4k#RaZqdsE}mLcmMk2+;A&Pp$3a$h9$wa1-21n@DO6 zIt^165nQ>6y&PN%xZU<)4R9X3p|vyEd(AR%_i$TW0G_+(JH{xjpLlL4gHL$3ZWn!) zNPXA*o(!+LTH4-v93Ybf=o#3#qzH|>vw@*mcAJVngwO3Qu@Rc+^i9v0%@%N?)32)IHj1$Gek6*uWqs!r zOXtkK>#Za)NAxy+?5d=U*!u%n_Hc(wR^C`}qU2%T`4-R1^Vwfq%}*}r zFHW;H2-{g3EjiWZRn*lLwB$7gwU|Gqznxu@WOh_G7|Wi0c&hCAX+^DfnMqnz8= zICU&EvV_0cm}F6~#PAExy=3PI-**y!JQ0De^+X=mMZ5COSaY7Y7F(M(vD+&tfp0z{ z?S66SK7Fniol#*|Ufy#Rlem?jkRu+DV^(97QNYQ2PJKt?!^#Ayr_0{j>E`pnS|WUV zO8pY4&QfQ^uX6i;_O`b2*{QXg^_7R6>4S^Bj`rTU76y7A!d|}g?e%Ki7Fhy32Jl;r zcTXxp26wMvnO8<}T|QHy9Up>m>2Vj6<5~9~95+3TOQH|c)0roYEmJIAkH`-Oq~KW( z*46u8yrR!Hj{1+k96Jv!r-0>c%{yf|0dAa{O`S8f71q^_d4)Cpey)i=mIjh~6CK>i zJT6DC?y;}0osaN90|UJ_I+Ho70UBx(Y{8rB1yO77^Ylkf+K0g{f{bxAK(J$#JhcIqi1|;0Z?Nr@5W`$dP;k~ zFu;0+$Id3LzJ95J_z}pv1Z}1}%%(H9$>%@XGVdZ=-28X3>@lk2WgM5p=5*Dl?xSF- zKI1qxuH$p9c<}OW;&|Rz3bM97RW6|lZ$5M%IJVzyH94L;wsN{|?SX4gc8`ZL;x_GU z!Rr|+B5MtmFO?pkCwN}qyLWYC(MD}?iTTsKXTZ|ys^Hq2!JPfYlAcZaCQhZ#ouEg3 zCcmHioJjaYwuXJ9#&fyUhaTO?tJ?I(p0l?w(#zD^hJ8Qy?Do&ZhpW5$$|s4VdhTNP zTy)bg1$iYv2rXr9=dz(i-)}QpM61adJX5`af{xx2n%P0w)&?z}!gzf1=64C0{+ytN z8Aw7pdWfu{8u6w!IY6!{{qx}-%*dTus9U>we0qG%f`Im@+BzUaYR=qr0ACswd+_D# zgjNau)$v#e&EVC)OAg>jv)P=)cOVHkYEtPsbb8}d$Qf0XMhBgQjZGOYg1`5{i_Crp z8((dV#dWxx6~}fxN1?Z0ol9Q5#Z_fm5x!1LdI5HbtR)f#@6zFxf zBj9eM%WDf&rSs%*Gp8-vfN$xskg&^j1blMYaUOvV-VX|z@jE0{(y0u%;S?sV0eNU` zUms!idb-_9=2cN!_S$`APRIw4;+5rY zhPEo;{>o=c2(#lh4c(94^>E_q<;BqviTHW@&Zyg=!+J?zs4|rF{qg;*>ydv8`7-A4 z$)n@8!z2DmblUkgbV~pJocgMHO67g~9Sj_3GJNwO#cMlwsM2}5^!V5iOc4aXGRo>F zlY$vu5_7;&Po|>U;3-0f=ffsLkUyB$-}kyjA>jJX(U%gm8$n7U*M-+?c{nm3Raqr` z+t(K-0xI@#Z1tFH5Dj=boa%a8F#->R_NMAZUt_SrTsLd|=!ci!`6)sYgXT-MwU6Hp z{(VPX?1g;5KLI;G7)RZzh-!i4w%1bb zMRn98Qyr=JAGA3mtUBl?=G&tX|0q&;RqR~3j?}%-G((W?FH7Bp8oe>oic`Fbi4jdi z77bu?gElaPLBrobV*_)kov&hpehFlC;ycYP%Aw)9h?B1)J!IfIqmzMMW#g$nlBX4@ zo0R3F(R2J$=(Th*G)Weqz>lYOkI&mcsd*q;Cj$|xIq%%S^e~Xg#mLiUm)AClcSB|L zQD>ZP`f4M@#B@I^g{~+>Kp>K;{PwQgHAb2E6Z*fI=#UmL`x&E0rX)PrvD37%s?Oyo zT%mv_>IZn1NO;+rh?8ZHeNT0|r8Kg^8PH5Io)UCOaWQpQ67o9K-`i>}u+-n>9WI{EW8dS}ZXf5*U`TwmA_JRP8v_iyxE5 zHja!Xt6=*CL20%;eAAt?ep4+Jiw&(g_~SR0W{eOWlYsJ7b`R|eu=ASPCN#6`S?aJC z&lFK>FA}m_)W6G1!m=g@`PImnCOfVszY0L3)GG*$@Rd4qO0Y)z4_!pDanRtL>%7ZH z+JJ@dpH=f?5G)}6TONg16QT|~1q<;H3PULzrA>NP4ZN{kgb_hNf{Xqou@uT`EmFA# z|#>RYQ`D113KSNy?zto_95C?7?X!T;6fX z;MYX1{v_PSaj1`uHB~S=?L5QrI?hsxg=CPnk>l`;3BF`(GOjoG@Qf`-<&VJ^8+`2n zjWgIY0-GO?7rJF~{~-pXB~TKTtA0Gi*DvJ7EhYwcpukGnmXr@9lVi2-_5%J#6qQMB zVlAmvB48k0%T(`%lNHjTg?@HEKpFo|SJOck08OJleOW6{QU;~YD!amfpgFW!&772_ z@J5OG(Fj|pZo#&1V=~NuoNp)d_pXn}6c4wbBNVHYPCXqfz3(d54(V%ZUUaq*R?-?V zxd{NjbQmvh_}qrr_0;~1N)SgpoyI@(k2;Xv8tNKYfFM2D37~XO^)PgL)N%`9H%@0J$VljM$pIm2uK+ z{BpYTk9dODA4Dkp#pf={;eeI~6`AjsL3j;fG}Bol+q?|snbLiw%Ey>mQY#@@>Yaz0 zc-FY5!o z(%?|_e3{`G&3z|RmL7iLf~!ETr4CoUOQm9MY+jeAIn}7+ew6wK7YSb`65QQXFqTX! zs~cixXMTXPu;e-ujJG=+7Kg;WtQqrKKf!~S-?ocGbwH122&&&M|#3ip*{i_s8^qo!7vWTT9R zCqHb>>g{B4o1o{SawRviI}3dc-v5OF z6{S}HNJiKzQ^=Bvz%ZAI&krBDTV{xd*+P(vbavLQ1S`btV1ebmyq#CJledRNqN|?@ zobl!I8A){q5{>M<78vp+qN<9MdiSLF?@LKURd$x6p zaU;Ts&+z*2zn0G-Ok%~0gal2jn7Tdy8E7z&isic%Om}{$*yfhFKniFV)$n@K-|E5d@1}tN{Qowh?j9H7yh^E#ckLq^*v6jVtcZz{l;30KjB@AE!uhgXL4#5} zx3YIk}z zriTZf4N|<*rN>sgK(Yx|ah2)%vo=km3rZCvl2w&ND z+_31d*chfUE%0nL|3HJ`S)2WOVnz5h7k<0wWdwLG?ze+e3h9u`x~f zc@c1-$76SXIu`2rbCi)vZ1Yg@$U*sQ^b`3;L_j`_kw;iIAntPE8~p}~KF`%)G|*xr zYof$KBASbikbIlaAr6-PW`YP!+|w~UpitBz&z^{6bN7XK$O`F^jkgm52@3%8y!-FS z5Ki%bjQorL*T~=fzeavRnBsSU7_i@d*Y^+dFa~}J6Lowpb%2wa65fHyARY?lm*OKa zQQ2NM1`*nhm$v4b6zd?XXh4+lzfzr~zF(X2GUKPyA)!1GUH9civ31VbbjJiN%AZ!;IDQd+*shXJFPYgiVO0M3-ES{~%_T z2VbKe9vN25949fB%`*sUyf$n>hGT%Yl?tK!oIlrzXPyefbV=%Y)LrI-tUb zymD_P?FM7>!!k|LCZ6+&S`HkKn+JwLV*x%5L}++BO;K4Rl6>_}JVhO?B9vT$P}K6) z7WO746dtBOCC%&Snhs&udviTEC-TGN`eUynV=r=QV5@2~zXLNChUM+ig^8qr0b@3c zyy(kYXFxeeax}Xz^v*3t;q3rm@RegP)wp82RFj>Sgme7MEC)_XoJSc-_xXNmfVWvb z#Uql=+v~{a!0)uG@Sak4%LO(Ccw{wuJfXH%uST;xym37`H81>CQGR|w0h08`xR?nz zwCACrVAF%`6^4mZI!RmX|IRa>WHt^61(-oOMQWqa5GhcFr}o5@MH7~>AO$0SKFEm> zKUt6|r#U}<48d&7)abQL7h!pQLirbi;9zE#B^5%Z`ciE=(Rb7$`adOHbL+&ZY3WF@ z@Ucn3j!5<=g91s*$N>Z>^|vU0+7#I`c|5I>Zl=#Enjx0|Imi9{jMMP!t|z+8Di!=Y z@EGTJdBFY@`0BRBm;VLq<10c5?)oGT+=8Ph?e(Dm`cU0Xn%RU=b-a*YQcVZlAwJ_} zXt^0Jm!J}wt~z=ki02aKJG0F?B48ac7hYg63*s}pO)S$CdHg*`B2-vk8B*iJ0wWz6Tojn4~hGbF_W7NA0pt5;4CAM+($q$ppP^`FOWyXTEJ^ zvGjqi80l(f-u}xCF+!J-WVD-AuMwK zCFWl>suDUd1lYqc^@-T*HYLakYV=Ie1vc6Yh>R_n+I$1mf6Bjlq9gS*o`;I+oT)Pt zeMDr>e0rZa3@m$i3x^^A-0Lr0C^^pfQ_w1X)c8IByquj0WCIy{|7l$+eJy^6-IlAw zDq4wp_5I|$GT~eG54xFV@;^rf5RTW4k7LJn_J|~Dl*RbDsBHmqCDPX z=XrgsT2>T)T?>B!**(PI#6$H83T1{Y5FF)yMI}DF$r?+ehIf`qGu#h}9}^X=v|Lx3 z=>F$uoHjLRj+dXCfG*1X3-@2bqdz+_{=A+RX_1xs<+Gy_?3$eBnk~13*sX?Q&H3N)Q|ITr&&A)1b}dv?01U@DB*Ius z8Ip#Jx&DJH8WLt#D3!Vn#3a$M3M>Q;-VdL*rHgacyeTv@qp1)_m>z2z2IL3cbf zy2j(0r)7g>C2iSe>;v<)|m^5`Mm}3TS9HX`yAuJ#{J^%0|bfX8>(- z;+F{ypMwB23?TUh$nb06%I^93n8ZbUeCE}10`u(1=idZG1q=o4-$nGTeWPDbagPzaL)?=tS{CjvH$y4f{;II5xI8^!?{OEnVW8v7E3AXN_m?Zl94M? zkP4@2MUWO{+U1hLgr=>$%7>@HH~@Cj(^y9q0)nyc4EWf^FoAH7wo6bTcahLKpF*kI z)SH}hW1+8--%3*;CE;O+1;2RB5ks)htqgPn6X|JI2gt1GctrxU@S1P*aru8&*L`Vn z1QsG(Ykje#NydU0p%Sk#oJmM$z*^0xsKJvcFG699zbR|oA$cUZXL^ZH|X)OCcl z)3x1mlVdheJVch1Qx}m0HX6v^A#PgaYZzxM9)5{BJwTy}=!!5yq zaM~HhZ1LCtv;?MCs*@)+sZ?9nv9ElDCQ>FrF}mWSz2uFq0Y9yg>G!nGlclfU9xwD} zk7dJfimioEtpfWFU_`Y8c}4f6dY3QOvfj5z7Y~1$N_~5^%l^GHHldUXAne8Uhc7dZ z)}=Uxn8YB?!UzXV@JsDNJoD0*-v<%$)2t2wgK&_RB^gjsZArE7iB$b2S(0xh*Xz!7 z`=Mx?RRhoAm@L`s=f8Hb_1Dh&Np-ohf-YcckUzHHu3tqiHy(~!$&3(cJfG{!l^ni6 zz&b+>^Za9OgSm;FWT6=2giPzF7($1`P%xWv$MobY4W+ii@|R$yIQ%k{xZ;9XL-dnw zcM+1kCz04ClrcjGBn69%Tfd6fLb6}N&{1NA?}j_Xq`D@Su(waP+$$uTetx+ zIH!qs$6;-FRty{&@kke_^G8Z>Bm?f(HJ>4thhTiaHL z#;;xp{u9ot2Sp|*x-T{@?oYph=!GghI$t{W66pl_hLuZCqI(!KrutThHZ0#{ZN)eP1(sP3g{)tS z(F{p3p4)RiXmH`F1WtD}d3DO0z)KE>IBTk|AD7Q(p@s#WlC65Sbv*6?+8#{v(;@vh zB6;TJn2w5wVt&eb)uwIR=hI1Sg8t6lrwM~gla2yAa0B_B9N0{|Q8~Y7@O6tB=~tAk z`9WtjlTlETWaN=z!|EJ3?kz-}dE&HMK{BCx<_PY@iIJnf&@yXGi=T*5KI3KmJH`W{ z4|_O;v0BEHFDCAWEGp)Dv040}Ka*s_%#s2jLVa=bZc@y>cGn(qu+NJVtYdUZg~UvvqdJn9Ns2MO-Y_Enc@`3XO9d+*)O^kE>pJrZotS4b zE||df0-J7pp?sz{v`=7z-tbAONAU0X3(&K;lgk(@q+UFV(e$<{aV=_3XmL&Ppxh;) z5!bfqCNIUKd$mh<7cH&*imj?7yH{P`op$|Le86fH@E~M#{~c*3Hk^}T$&D%iw1ZP2 z6q-SF$V=r)c+d;XfVp_!_}-HLi_!X`N$)qtn9WQNq{>NO~9^pQSL{b&b>bU7SZwHO@4n>B} z`Z;P@9`Dm3F^w?b#CHPgM!=}7@Y^ncjpg7-_wOy$t%arK6)9;>mWHL}z={qK2o!mm z=SCcpQZWncd@AE@C%ds}et5TjJ_A0U;lDeQOvCyU!NoysZ08lXBV*y?GF9~D|B&h6 zgLrOAzGIq?bdsbB{~*S$H~-qO7)kp2^*~=?#dl? zro&c<@5`AvIjkMu&%{8c(oA>Lf`WIUTz|)!J!M>d^S}`GXECpo(i}#JVKGv8SPj59^4&<}f%yoM!Th^A!=Mt_bfYNr8k2ZCs zvkwd_68Ig`umeJR8x9RN(VY#s@CqvNd{yMh0Dt_r$(&fj$*aNBxh%0Ox3MYz3iRG& zf>|Imgw-29iAK)ylRh(esN$S*$R!@={JD)gpc@OZH*z(J`m&ev7<{^rF>dFZg< zB5ldv>2PNxt!Y6RUT+RHi(kb+%1}Gt?tJ{|y=&8>+FtYqI{nPI^C8ss^hLE=_%G1% zxv>@K3`y$Be{kA}E+_Qkm6f~s)P8$Pgzy92s8{2AlmFJo>uTO`&Djoa+Dz|?XU?_KyCsE3vtDTgdb^uL%VhBMqQls{ z+Wp!}N`;VfUzw&s6(k~lOp?c#gE0OS7?xD$3v>YpNm604J8SAEh0X$#wN z$ECwO_P4ioi+PUX-e&h4lMMsIvuyt-jCNdVRB3aEPqBsqzua|tMklNWCElO{wQ<-X zHM>%bpp1bfJ;(u5t6y~H`posC&y{Il#VpnVXP7AWJht{0>?l0j@q(@{3Ut4;+f{V>@1Zrkvv}+jrSI@<%+s9wGx36w3 zKZl0#3feZoyW6w`?eY}6?#c^wf%ami??qh^ofO`gOl;=Ean|)|F-PlgyQ{iPGE%nK z$D0i>w=WlE)a;)`OSK#0){uD%hfYotbrkwYd^;QW$&k19;=15qE$%yM#_{vVu-5)# zp1PsC)?eosh>nxAqf?G5d&mf~sYSaxw~9IA&~{P<2b{}QGmpW3tI2pGsNq_tE}B6- z>5ffqNXfcV$Yu+;s=qq4Fk)+-uO{{`9!ITDa%7Ft$AW`NBjU?clprG5pg`pan1RrF zrdKJo!VUQS3Mo=MpEgh9YhSD83?6JQ8k%!%C5kwZ#yu-aU-);5`=bKYY6@|>+p&@- zUPtXv!(pSR)GQ+Zt37)5tjfy^(T0Cf2#TQS?KGnG8~MGzQO;<6F7j4B6?%g*ehh z`JlPRit@pnL~mwz=s@QVeHlITr7@hKbSTxnYYo``R*7l%!Pgd}yA|Oggq~AHeqj-Q zyMN@s^^@I+4uj_ymPWmnFQsR&Z?B-eO%Y*r70bjWE^EcCBx7!kbnmif``U!$Nynos z8Td!(Xqt2Vq660>xGaSuG~*@65jxRlx#_3cJLmCbzr*oYT+zlle;w?Nb{<37K7D=_ z0;IuI`xTkH1bBv+$iqD4lkc>3Obiw$zGxeBOqARAjG!LJe5+?s!Osp#OoZ>4^YO{l zAl-ChOr^3G6M0k9^H-Cm(-hnceSFh!(sJIJjdj1(x%7UHjE<~UQMNSnVtW+Dq-c_P zbMK1W=tU!6yWD1{LRr;8sJOhRlSZRMX|@kMd=p~a%+N{ULAab1h+fG-n_P*ac=>B- zpJ&VdXrED`IqVWmvwZn&D#q246GC@w5QYr8Pby=tWF@^IqS#kres8B$efJrt$Bl=x zCX}CBH%Ew25swy3f_Gou;7!yYkbWk$kEnOs+Y{yhF*~RUZZGqhx}wJp$IvFM+{GM? z1`EO8es#V3lXNMNiD5361b1P5Dc1}#`b+hjQN6jI_(9&&YDZ}OW5m?*EJ8gC&s z&V3PD?Vz1&%7-Td5!iTV&V$EbG3QLLYPY~YhI>)Q+1&d7DbC8I9J*m- zp!7vsc;%~~6M;8qxzu{!%oq1Qi+cw{1$u>Cj9l@1ll8vwg0MsN@`*}a{%+M(=-7eD zr`)rbL@gV6Ir5Xwh%J%~l(mJY4Ib06yP9`07qQD^UtU4y$`Z$df zBzS)t>R~7Ka}#B9D!%1(nXjKt&xYjEA3ZvUQ{^ET;?Q075)k-Xm|W7x6&9+JYt6E}qGFzwj{ zejAu-+1iF=+_KcKvlb6G&e}YE*tV#uetoy|n(=cuy$^|d*jDw*<|1`w4lA+`HaT*W z+HtMbeMFp7i|oe{wv_H+KaMIYFE6BmU-kTN6n5>ks6u&}Q=Dif(a@sr!q?Or(&5x< zIMB24p9o!vY%DXaF&mr3@%i7Txt?oc10K%w(l6fN*MA5vn@QIWv)10nnY{$!-BHjh zcys!0ql(K}yYuMCryg??r?Onh-(t7P^?6QRQn}qfoOl~Rl42drw>vulzNAD5(72hh zY6em0)B&#pcSO7Se{yFJl#Qo$LQjz5Pzf8ZqH#Q@M>99?mur9DwFG8ADDRPwwzqoC ztzZB(4!Rb4RWLXB3DT|;O{qP>Z5%61ch`lx*tjBE4-S1hNFa=luOpFnyrCYOmWIn3 zDp9PInE?Q{3!&mQNuRcFm2ce_IVS7D+)8>xBO><=Zq-4*7@E(Jyiyq!^&jJy=^*o2aMMd{zeVFy~_pc zRKocdIFeL+QL0s*C#9*BeNQ06F_Apfh6vsCSHzjc%2tGKy%AP#Yi}tp`M&$#h5Ft1TCUZyusuU*~MPQ@T#a?zaQ8ZkdS+#Ss=~g@|HQ z(x*rkrx;LK3g)}heNRPO5j&8za`Otf;VVs({HKrI7#-QZ)dd@xlh51>6S-bdZFr(& zFe}!o=a#0NN@$)5nDmRg8VImeIAFHvXJpfO8n5>=L&~1#Q9ja_F4KC2#z8}p5UiWRwSL|RZeQsHox!I7{kg?5D z{DK!FDY91Gxnm;_&#Z-Pl4kATm7!8lIcgGU$xi9DwThhgmzM-rY zrkJEXh^Q5&ZTTUr)dUZJ)UzQ#0S6U1&!szIi0yKB1FyW)W5*vx%mI-enU4z(4;vlw ze23>Sb<@)`%HA`%+mbco^bOthH6R`Tp*eQWU`!`?La!s$H!mshXH@UDiXahn+1GtD9wL2W%* zU_2csPq~j1Nv1T=uvIcnU&POD*6&JwTca5E@mJiH12t~#t<;h*P@Gk(6Nd zZtO_uRXC5>CxR=f5QXx6nJU7SvaUFW()4z-CbjRsLlb%71*%o}#M`OKanQf&;IFeT zaQc_x)6um1q$=))k_~2D?M)+RY(YRFRe}O`vWK< zR}E`|u=y=%GuiRi5s9AVg3U0P!VPBgvG!(!2N~q7e9HPjKDhbw4l&5phTSrk++Tc40$kD@@BC;M%fOu!RP44fFN%QMXO?YMSg_ z5H>D>Z=|i5U4Fj~cCBbNw|)gY2eU^M>Slx~B>ZT|cVQLOT`Lg3j-mb6$P|^mB*b;P zp2gASZMnfl!OPTp$W78bYpCL0g-D@DU{Ko|zB>QcBSF!rFK;22lbb8kcNI5)!t@yb zqI))2@ZYB z&wYcCT-~@bugWS*+u{p<$Z-3dNFB|Oo0Q6pglnd~(nB@b0`4*yQ!Y7wNA7>B&nU5; zE7eGxp9-EqppiS#;0={v3C#+dH_^B87Narra4NCw-H)arQcs_S?9c;WS}Z2xP~9vu zHG=Dq<=->^Qd2i0WgKz+IuQJGSd*W#3vmQxl zh|>MQzs(xy?nw3_6SC&8Czhm3D7(?;fkYlM-YF^3RpW5{!y?cKAtHqKG^{h5u>u`EN|@9fJfIlXxQA&$|Td!dbSnAyDyF$hKN)QvDAO)40RK4W6>fmF*?5hh-y08 zZ?XOb76g}waTJLAnL+hO$ig{%d~6-?$@kUm4?8n8S5^v0YJ?XE?TAobDR_YqH)~XZ za+Zvklm_&uLSbokXvBDb6`fc99;%XT8+v4NqnkgS=lEAt;^*K=OIx16dK4-h5}(?m z`DEhUEjAIg5*3l*J_dt%B%to4;7(o8R4LV+#;;9G|56W@*UpSl#ogZSp3i!Xemj*C z4fjokmU5Yke1CC*H1H%w)E8u<`M}cs>R#cXp_EZo(r3GhbNVKb&$HxKjW}WcD*$16!fbL!zdeVkTg-S>IWqB20kScLq*Y!S^V$m)x=&m#9e4GB zAuB$z_E~s^vDB+IdSAfXQAlKpkc8OKzGFH+^Mhl;itUSgThvJ5EBKRE{bR0OsWDYg_znNQDb#SCy%qn;}h0g=Buq!x2lkjcpgD#G~{e(9E+0eio5{xcI@IGg@HO~^^;%kNJme_$Ka;ho&=}4mTSJR z10*?i^@~7h!PeXn%$}V9KTyOX0Wz8BAU}EA9l(-JJ8v=qp4ucuY{=Vz*lv(EW2d6S zMmGx?Img@KltvfZaHXW|M8TVY;wJ1X$WyQ7FPS;FH><8n>hNb1y>?_s2d_UC1w$D*1)dr)dz}`^^E*v zvY`wk7Noj#=O^wuREm;bD+GW;ZlWV~aVZ5~vFxx9N8u!tKw{$n1H02PF%Pu92TjM| z&X0x%{w;4W6Y4YthY=ydW?KKD(rO;Y)b_+4k>aY7HW?GXn+f7;$ulGRt;P-QqUfpO z@XfY#Fo9xsKgap1kBmQ{=m*g|HiKN}g&pacIs}IqBSw>|!Ah8Cb=2zi?p{J0cE$l-m z$S)+6^};iZg&RT^QlW=~M}5kJB%k^kw-wS88zq1^=U-%g8CCKw#;AM$d|PG7tdDpp z@XtH6FgbVVqT?CqA6XPCS(^59#AtNknZr+61F%c)xqd`<~O0=|r= zFImdYO@XXECG3ZC>@i#P&RmuKh=Z;B$;=Em_&XCeVT^*sDOm~DJAmTH!<2qiyxNP3 zU2}-5@z)qT23U&{3B|hhfhCHI^_|q#P;f`euAH$i9_Mijd)bni$r&ol2aJI0$zEOX zKrAgjgh5qK!SR8*O23DCzp7TRYFlhLeS%j+TN=(iv?_yz>KXQLg^kMl-RXQM)&@I4 z5&9w}lHmU6@z(46mUgZ#w^D2f4s15D=91R6nm8(rw#q1IZ1J##Fdqam8rWO%bxS4sl&L&0N36FTK}wtTGBrnqeT9uuFRD8 zm6m_f)#xd%q@>dJ_}N8sMy>=1kv4o?OsE%66scHw8YcUe@|X8v%%H6bzGbq1hd@7) zl#}N_s8hHGzJT@rQn^7p1fGpE^Yh!X8$} zEFDGCxymE==jbNQjbRaMaJ2Gl3&TI`3e6tw0MwJ7qSr9=nCNUYK~9|V0_(r5T)y%I z!nR=tVrsOpj>oZlv+De^d=!<#C*5+Uf(@)x6S(_$p~Kn&74%!=2{r4=4@PjZKWSu= zd1O;rg<;uvw2Q*Ul{*T$J~)GxaG@%C6_WHk-=+`Zbdo9?RkX^;_uwwJ7S#tVi4GuMIhMC{7*essIk(x(I;UQGeRLhhPbA_5& zY!lN|-wFz`DEr$}5yu&m1;Ohv$#~?>IWvBDBjw(kcjz&2xG+~Dl*IOnRf(>j>D}_e zIJ6Tkta?h1FBaxMM2R?(RwXzM7H}mpwFx#0?2(8uz)L$Jb?C0$e98}jfaQ}akL(%U zv1(VV$#|}hS3ec$IM>R8M&4kl%X)uh}KC2<ca854Zqq}<3lt!S#WOwXvNw={Jp6sj;8@v=z~b+)0HLQ5oN1q|Lx zgkJg2S(VmF(^w&a2%*W0`5nVC>|g~m78zDFisu0v>qcX>h+0fR9L30TfLygOe^H;4 zjbSP92CaOwF`7B8Y8VbzC)Q}huC(QBWegZ#WQmOszu?2N%Gcj!FXL62aK>lLC{)n^ zVM25ouJYoRRrm1uk}SwDwM7+-c5uK~=h0oHRMo7ET zGZ8baI*(M(q1USqvmYN>osbr$Ih@+Sn)EX09kY{Yb#Sm6jdteiZEn)?C)A_U9Xu$) zW4pl}Z??wj1H4TC+F!3P4S%!|(|3h{heqq3Z5`0lRqpZ>?T%pTAdr#%%;)h+Z+C;3 z-Mo^Y)2f|?*>ubBH%kyT%=v@03(3^@P}1(tYoJod<6ZA6`tBL)`Jwq}J3+qlUhjDG z-Of6{HIjQjN3O~u>8eSH?VfpAUZv-^9>{Edfe=DZxwy#p{ywumY(#>3EhAEorM#yz4`bmB2&5rsmp)lAW@52Jo zH55~`kLT<`AipN%3>bIrx4xNhRe}C04HKq+4yCj|S%44-@}Uz1RB7^A9O^yQi-c<~ zW)l`OApW5Tc=zV=v5Zq`*PlchAte@c5y$0gJB8J&*UO>m8xmJ70*7s%Nm|#t-R4cf zXN!8JRT8zAL{%(<`sv9=%rz(y;22^84)3sob4nvYn9$+7rxS3&lvLE9y-#1uCbN4aN00G}~`zw)*Gq^fL(k&2XshZ)ET0dh@U+0p3MzgKwDQ z(;Q0?foD;E32U(4T5c^%K|E;{mD2_+Gn?f*OppV`gs2t?ds=^)=kHkX?tcV$7O%ZP zZBC+e$YMN=?)RS2HsmFjU#(kbyHq3?bHN+@)R4@`CU(Y^*gvrX#g~{+_pO z6CnST)90P0S4qBMjhanB*L$vMrC>drJ(;siyz-A#LYrO?+Yx@FlEzjkm|fc~2|TLs z8-Dn>^N_1Z{2m0&bESXYBkW9T>cZ|rh@2^j3!StWlYUfGA?^#dhEL{`SWr-uVO*+U zyt7=o7%4@JK|XsjO6K&QN&I2%JaO+Fa|=*(Wflz=#MN-86>flh2C8JdGw%r}FS{5C zoT}CzhW#|T`4UaW&~P}X+NGuD5@w21SmMaht2dV|8C2G&Qx&C(pg7a48}MN#i6|V= zTo{61?1y4|AP)a;}62}sPR<3CzXN1(P?YUF~ zk_9apX7tH)7%nSJtmaIp<|1fW>vt|h(+CySXcT-UHWz%x_HLD<4pKJqF~j}Ud>o>`=8^q3ia>C5%eWAXF3|0uDL1OL%0h#|J7H> zBtPJ+s>dhISGL=48>i%%nk`t`uV>Fwi)4nVN^`YFVo;oiXVTy`4h69RST`*@x=%=2 zeAcOnvdmvEihQ-2Hh0~8lPKV`o}7aFwz1pN?4g{euX}vjz;YRH_a4t>I3U0lYx$iB zDtOlAm#{8Dqd?N>*W4kogtHRHNA7fDLU&epI@b7lh@UeeK?yd=59uVB9DaVdNteUnj{inu^|@Q6k5jPpDd}f! zcddL7cRTfv9hscKw`uE*s0y`xK=L@$!N$sMr?menmkB&iFE#}$BiLpipsrq-R2}8C zHZY3`i)Wy1R9!`Bkj`EbT_T=f(yX^6Pl}*fAt!BD8+0~a;GNyD8y^l^Ge=62#tj(( z$+C+Dk&S(-_PYD+c8|{2Hp!;eu7eSVV&*C3lKND&wUro55T~{dt6>goZ+7EwOUeUt z2_+_i_L_Clz~r)K`z6K_VZH&aaWN&nAgmf1(N=0|c=+mE%#cO1`F!WQE5TUaDg7m7 zL+^t-%_!Og&yA;$jV|Nzd0fSR9_Z`I6SD6N2+`4uhTpJL-skEM{r4B`N^vKC6pzk! z+q0SZJx9%fAETq$)6u^hm1BPD@uH~ry%T&4_k_q>(tJj4CXgSMH+p#BwPUN>K*fd2 z+ErOaSj-}?DmF|A3Atxn(GB`wuK5O08K~UjLSLL>C#9dmbm)20VH*A->{S{}|MB|U zZ^Rn{nMhJc0NwrJ0IbA07!k7eHgmX#zHQU({y5YReK=FTajtf1*?gyQzj73Z}xWkrqQkTo~#`SnqPt4TYFdOysBbPMsx-W=EY_c z%O=c->q^5iltzCr^2o)Z%uV1icq31gr&kfMQF;s(QQSPdVE$tk6!0MeL|h0n5>F^^cB{Mq@*kcpb)C;7e3m$k*_7yDq4S zScdbjgIul4l0El?()4l^oQ~{bmr!?t~3IL}EFtO%SZYG~cRy*rmnAvz$=6&99I|zo7nQ($gbfaI71cSLR zAzn~1TBEN;+V^#n$z%6jq}^k}lCzOaS^J~21N418AB`?@nkYg8_?WU?h7}ah^*96V zuZyUco?Cbmi(+IGGDdfHsWWvaR-b!R@on{vgMwz2-REpB+2cDXskKcObduCkax)==~OD9uKrZEHZ<*1|qwUT9s2ZB+>ZL-KDDy7H@aUM5R+I{XKg?T0+q2}}I{qEnsq#&qKUTXM%Vn(3uX`U};2 z8LWmN;z=ZBOUvq3GSYJ0y{#v?I~sQpo(L(>zP#Yn$nd7oEj+i{ebpCI6+K1;!J?bO z@BxYS8&t&Zx4SPiZDCJ?O;mEhL72@r`J^u`q}V3$BvTK$;NHVX*$8uJx1)JdD?$aU zgM;CQruHv!D6T&!i47KnCg?+G7~E}+qQ~^{6$vYJkG?S6Y`0_QY%KJ;2{9b50_BfK zdGLt-^^u1vIHDI0i6c5eA~7FX%+%s2$|s9Q)N}W39ZP2TB9LMF=wiFYhvC|p&BpWT zV(8=Va2!0!W{>CLFk`hpP9Pj6s%WL)=n*51g?^!YI0_-9teeOZSQG5l6-g_Kq?J&E zaE97Qi=9N3TaaKr$=&6l^0eB*H| z9*Xc80i=eQ+?jyN_to;rk%(2Vz=q3ud2eAj;gWmw?Pvq9%~0A5oK=!LN_b~yu|)la z-J)%=dm+XnyvUK}i+O7e@no-4b9tHH^c=-P(>LZ;FVkh88DF=7#W=sXSoP7qZmD?^ z?1inzhkfnTjt`jMZHk-duOP&Mf0#GzwYqI1CXxpq?><`* z3`Xyfy_J42{UKmzUD8V!Qrpn;C!oL*MVmH7$4*KMn|DEQ zB=RjN?_!m|jaRThdK{W7#HMOL3xeIdK%KKUm5wQi7;b1^vD918p4GsU=3$dt=sIzH=eR!w3~M8CP#u84Y$h)QN8 zmV;Qg-oRGaJiP1KQs;6gIDw4g_nE`9Cbd~hq82u)3bClP< z;?C`{<1Fq#v`L~%(A>0KT1(HJv0ipVcUk#JB5$TLE5%j;cVBY%6>NsN!~DRJg6*V* zWaWUK8yX{MolF;@egL&m+gg*MbwRC7TYc$_K<6_~gEaa*vAZ^~^->#&vU3&;QbpbL ziigBQc8+>GvoaH2Fv!|PucQf_705ptx~ zN~b$BE6Mx(5az=>WX5ISV4;x^QWlsyB;w{aVFT-J_r(hS1L=7(1M*oLZA^&HARc4(0}%c%E{%Z*A_)Tw<2k&Lq|m^5CF|CekI zl7m89;|or9ZLA=SO+yW`?kuB=$S&RDL==Z=AF6{O~R92b(Cj+ojt7@*;9f6P#Oesd8Ew?&U(vcZJ0hnZnM6 zvXRPwK$td5(+fcC$x&fUld48UmpV<#p~uR4<*$hgU|z@9KM^lsC-^MiWJpGNj$^r5 zqf#wxp}x|Qpak)kDn@FTj{8n;LD3~O4yZ?ZfVIY7)6;^msDXR~$;}&)tOv9=)3pgF zSvSW!9I9jF!Ph*b)axqIt@x8tRf9?p^cGrUgjXC&0U$aib9<< zsfQNuR(}b2i8I&>e!RVrU)&GBT#bNu(30!$w928JogD_=(7+H~5$kjK=nQIVSk8R> zLU|O}X`^*FHQ*vbDnW&yql*EuLmBWVeg&)+wwCY9-j^sBAwax1v@lGgB)}@TojDfZ zOCCMqu)^(jP~Qh!TQJEHb>zO&f}7EZpi&?L0ao(M7`+z6xW+V|b!}P(9~&3T{3f&K z!rU-#T`C8OE*fr%^mJK2HMTZBj63VUvxNW7Ca_y-4Oq(|0E1zbAbHYp)z~mx+UA~o z=7E4EYLP30cl$G%7@a5E7li$88?v0Lz6VD}(C#n_p84E%+ec$&8%cS^5Vz>U zt$hsrEErzoUDyyWGM-c&OEM=lDdAddpU?%4VA;$ z(|m50IUU}^+fdJ&!@`~y4V?L*d&g~Hq#pN#(W=R3Y2%_?(HauAqdxGbcDX`HlP))! z+heWSQt1hP+-LOMQzf=W&4;+>lfevFhZl3HH7dLqFf z=ZslJt41t2v$r}smfNlAbx>!lA7DFHwpMANvvy0e3qt;qy?w*_ANX+JQfnczT`_eB%Eh=Fy1LGg#3T>8T!WYu2xI;cw8DZ@mIg1399`Nm#3i1 zn92CtgbsSL$z*X|bk`h%LD`8$dr%KFAcTPbgRt{7;>B0sHAP3xw8RtaDrm>M`bfMH7910H?d#1G?N=?sR_+@LUxiR z^5?g1ZMU`mT<4*tV~M+V({GaSck@Xh^adCX4xR{U;48<|*W9VeL1^wtM@_~dXn;P#SX^>teudDcK9m$fK%k7rrADFCee61*Q&_KjzyMs{S z4q`Kph32{Ht~!>hk7ttm_pmx3eA@v8b~atqS) zmT3g%E?eN#uPnW~MEu}%ve(=^YO1%*k2pGRA2oMeKA?AI-~Je6Bs z=wUplw%|Y;!muh1oHAGyN!1#7kcg^pJnm~TMR$Ni{061AMpP?%9Tj`jW>fST0^k2- zVwK_GHd?D;%smr7ahD`T?naY?tVt7L19Fw@seOSgF@2*J7C1)57XR+|0#U6loD+(au(xag8ZKW+Y4- zy$EeuVb$8bHcX}8Nnsu9`ldGu+Zj(&J*2OUAGW@~Q+d`^aqnxc0F^|T_C+Fc+(eh- z!5zCehAnTb7$;?Hsp7?e;dh-ZbH91H5wb!nUO8@h-@@NT z+!eMb?6J5#S*6*#qf~uIkF-M>G8Rw6*{{)j8_{p$XLbl5y|3YyKsQeYXR~L|pPoKF zn{ChLXY1U@W4%<5tU+&sx!`6=Z1Sx|Y8PCRJS$x*{ zs{5svNv|4kq7`ygGhKbtB;=RIo*Y zD2=8rqicW3cCgFsc6@T)6Wa?3x#3TFaPXbhge+@$zIA*oLrD*iY;gkf3m0Qsy6I?D z#jZ}!2&;#QuY(8ad`)y2?h0n)rwQs6BRg%=7n)?n4Dm}Yl#481dq362A0p5J*Qn8| z))Hk)7LxRm{SRxmqgRQoabg{mHzaf~2>91*FI;FpPk)2d1E8rT3*_Q}6|2{HVmpNK zQ|I5GE#|Z-3!b2W&MJy$vCT8so}(UMtbRtSPj;9t^>||RWn7>(t_#$_#$9ciPJ=u~ zOYl}|BRc!CSkT6cmoRkHZf{K&Hh2NNNvN+MixnFsvixg)je9mvq)T;|A-XF>Bjiol zZd!PQZ^Nv;3c@RVvvxAG!NOmoMtH#18mnJ+94tRi47Ia0;ShT-)dqC>QAEM39O`tb zU{px)wMh=QbAtMTTcw%y9fxI^yc={fZr;!_?ox;ZVpbptK55d6 zK z4L&~6i{wCt#YFIER0G0pO{~K;pe*EdN0hSRQ$lLU9kMP6uEYI z8sK^QV=I~KGTb9i5d`#49_-qB$nuVu*_+jX8u=*_$!X$94mQz}b=vRE?E_`|w@F=9 zZSXFc*&u=Bz90d@%N#J?3;_UK7q`55Raho1cM4EDk;{nJzK2@5?z8|Lm)KGYtcZO^O$N+WpAdNj3Nu}Q(7%%eT@ z9sVChB>BZsTjh@gHjw!IBubg8S5eN{ZCGCABsh zhqO1R{+px~q^<+gr-SwTK%&!!COG{Ms4qsNBlSzu&)AsI8`6wr!P4Z$sjg8S=4KE5dk*GuG zUL$nkG(!(&jKxm<)L4`6wL|5WRshRTYiYhndb#uH592%#aKbzOjP72_PW{3>G)Gco zn7;7>VRn`C#v?&L#LSo*#huc*#>|aaW1`%|#s1URuHbH*Hex$S5?H72lhx<>dtTns zhueZ4Vobk(vcr`+mWMa#l5?4C4zJSeXTHdB5x^r4j>h=k`u&9G8-99BKdRelqeob6G6IgB?| zZa(IYz#ZrROn7|%04=46CK&^d8LP0mEVYlTUS1z70vt-r-T!@0rz!JhS?Qpv|XNhhnj1xH@_g(1cu(d=u!D zla4~IaybYtmYi>h0&<$Lm#aMHB2&9gqJeJoGY1D!|NRdpE1Pw|%mf*6F8FKDR_QwO zbdeYACZM7jSKR*!#|?8L7Z&q*E1Dg#V`AUSP8OzBqVA~eYlf*Gl2y8=1_MGG3#6uZ zG0C2Gxo&4lweD$_ft!#IerksG) z>9T(FGLa)kk6@^8-u%0J(8VeG<*QpOd%mQY6>;I{(8%UR31O z>DhbUNLd&4&t@i)e0PGFWs-TyP$LZ;#A?&aL{o_`e!Y$t07%rVKPRC4nfD{~ zK0ZG7+!QWVgK3I%W}7-ucQIvDOdNtw;@a%-d?Xh6U`V{~6P+3-2&)>6r&UjQZsalX z;0#;Safs|b$Ul5cSo&D%f5Jn4>IqnRp~0MOa`hv5C{Bx0{$c*gCQT2vZ7v3ui@AFYU+KkE(QW0V2)n>S= zcROzZ&@Wnk^18r8STMAy4~VgA06`por!`;51j<=F=GCI;BYPA>b*2urTfxh$yB*| z2yiv~zx|Lbs?x7j*M1uP`9(wiC^6u(z`}`&I83!MDt4?fr2%OcI*@l}mn5#>;%%cn%P%HsU&i8FS(213@e1iOzu{Ydyy60<_?72ZJdJd<`nK+e}C10m-GfJ=0s=ik@;>}<(jOcGB+dZB&;v(~;Weoe@*0tu|oD6Y<2wsXv@5uKn zE8io&h?N@uPB`^etd9!=9jA12uS+MxOpPSy)Dle6$;Hpw#*-ph0*AlLv7M&j3gL6L zCK84@lkg$nqpQhk7I2xT@mz9W3Q|jfVXA$Blq{lo#SlV`rNo7MMmq>e3 z+Ld)myP!uNfmInqhYmjbtJq|`wLAhm=3_b$&HFMbQlJ2=MA=%2h^<|*&g#I0d|>&T zu5hQ0qk;b%cb9PiqD3dsc_Zzg-c-YT)H~~LrT?M53>q8f?$M&BhHi(ZTCIc@|9$$bOo_k3Pq?6WrEKs09yf%Cvoh zE&P$!s8U@y&$fX*;J&QScpAU4~-gutDyA)5ZiN{S`ws<@?MhL0RZK+%zU2DI{I4nZt-g?MeF# zFF8A{4H(yo__a!v)%jprMgTX)V#U zP0`V6MZycOHJLI4wjh&e1S|>kw10#9jvasfoPc-JtxE>u)dxQ2uE61PBmA(g;hv-P zs$I32vz&8d+it)4C{f31-2Y5FX-K!mHcl(-n{^%4>mNL-hV@mmzp_f!+9vAWs+|}m zAl~#Z=0?T2G3caCGaH7nZ&mGcsY$g9SYUBr(-mfj?QlAY?re-ki#(g^0VYWoGqM<{ z<4a*`ljHU*k&QC>#B^h!3i{c!*%Y-@%(;^_kOy$rV_FI^bif5^fScP9&pwNoi`MQNJ5+M~IB1WbIs2QiMkS3&@WUZjC+7g#KywSHbk-aDD7Tpi-nHl0 z8a7TE-)Q&}_KnJh*fBP_gPaxba}6wSK%~0Q4nG+Qdy&%yJ>s9=y$X&VJApkOzw7b0 z&fiBJsae%K0zD@e?5fnJQiRMFMB6J#PAiFXx5#L_MH*XFk6F{RI?MV)C(GWFsPEkd z{46`+KRXmPBA2-O+fq2)8If;;coiSK}67rTti(jQvtWf_kvZz7j|sd95Be#pzqcEW)$tsD z8m)>4t2yFS;2j;6w(fu=(8y7CVO@re5CO&m@JlIETE5PiX@1S$|gDq)vD*&%}5 z1Qu)AIZY6lW^R5f1TZ9Nz^rFzSKO>%SlPu?vQS8!tCNc2y0?^w;mc^^D-c?VZjzse zjXAJ2ML&=k*!8zNrYpF>nh2FqPi_Y=;mNeM#UV4Xv75VNBL2>UW8%a!=EUvxSF-)% z+N*o&|M|^T$vgmZW~5GEs$LX8_lB_^sJk)Ky!mkl&v&{6m{dGm$U?Ph19s& zTs2wqTogj639K7LD2gjtAq&pHUeGON3zcQ_j>@B86^DpAtmO#oAdrh*9w42o?W8~& zQyC=;VDeQO8`9ZCsrIBs#k(lo`HSA&59~2yb4>%c;6O5pTG5i2*Da>H_A?G;4@4+( zi?6JN^y}~OgMiyc@(QP0lWr( zS3}o#@!O2Yl>OB8(e+*YwrEq|ldGEKT_uHIV}p${$OAg*aHXVZj5}+Tvs^(zZV9au zg>+k~J3}$TJ0cn3tnVa?2vZ+-$?jo}R6@HTe3r6m3B@OMzEisQHiAI99$n={C{>8~ zFq4_jVt+$@lQzPJJ3N7&OYjKZnwOl>ta;0pSgOReSwmTK)_cM*)VVP=rflss$~Ii7 zwWLQ{LU6t`x?*+FR5i22d~I`_dgt%KUwJZJcGS;g&!CEBzE_TCv$zx&$O>pCd>7dp zV|x+7{24nXpOkyyQrr3+B3~#{pz1rrp<4G)@4kEWOQR8B)KsD3LF!H0ZsTSVDqUjL zAhkJhohC^pvjN6?i;)ZDV^7#oR^cfW{_`)UFjXfcCd(4?d-5Af5|SpaoeVM8Kx{BP zrP(H#Tp%&Z5-92V;NY6m_BzUkB0w%?e-rgpUJOJ`Y2IE2b)?04yI>;p@rTB5E1F%} z->Uxki}U+mbEUU_#ltgx8eCAM2Ax_DTUYY%7kveB_{AxaozO2Nojn)JZP(Tz`m1{1 zSMnC(-F(;9NV_6eBXJSHJrUOi(W<{l&p9-Mteo6%Mo7kv4lrHTl|goaUWOGHo3T%5 z;C07PlPqXl^?S`B0lC|SrGDyFj;y0YA5c5(>i0RavfeWH$=H4JFZapg`Hriz49031 zVA9u9^JM}Sq$#~XN?*Pcgx78vJA)n6o$BpBap$99C9(mISG&H!I~ff{as@=I7Az*V!7b3Luj|m9sM^tCLwKJ zquX}Ty=haLFeo|+!sY|!02AZ#O)LcAyI#Bv7yoYf`LxAZhj)ewha@5lNLsB>h#r>h zq~?4R!(7XARAjwo587(y@C`(o^Yim*VcF#9IIPWUdIa@Tu8CwWu$WpX$COI97x(_G zzCRE5w6To8vGx^$k!jRiTi22o{fjH)A-*wRE$OLQ5LN$lX~wnB4QcZHx7L@T2mPHz zs}7xh0R7^wrJX*H2}S1nb0RR;VPYi^-(I4&ptjSiV^ePjAO~ra*&C9kjLo{*NhWZ_ z>d3QBl5lMxjCwG=ly&4))mBK7qdSV&Tb+)j0a|!Dm_ROcGw+og8ONylO$~m=0W32#{<<-ws9JD2(lxAn$qxu~9(cJh*%auZb3^STeJ%f}( z*}<%V{Mxd7T8ApbN$U!N{ka!p#gHyY#|gpI+^E|pNr{-pEp6pbhA)ZiEV%S5{^cW3}lwu%`svNi~hjjma=l=+%s5qI{!XP4tqQl}vagF|Z^$o+KyvBw_Pe0{t-FlhHOV9OPu90raC? z&@`HB=28j!sD!a>n9f~9ah{=kyZO-}Kn+)8_(k*-8cX}57UXanJa&NsYrL3J)!8*@ zmMa?Kb0jRHR+mln|8`S354b0JpgXFc z>F##B)>`$%Lp2tsG0&noK>oCRdvu3SlUu z#6`_}z$#rAVpR^}PgI}Eps9ZcSWK$U98&E_WSV6X%Dd|E!Pkjc)uQK_q#^P?P}NRM zeeAzf=~Q>71fOS%%YBUq{8)U93^tAvp{-nu2;laJ;eQJ(2d#&fH&cE|l>I~O!?JfD; z8Cui3pcaoo*x{m=i)SAFd5k|nr=&^Ls1;`uj)19$I@Nd$__}scGsOj5P$Rt>+K$}{ z&=niJQ^5mh+wct2D^qLT4Pqmz$w;1l@V(~BU^`G3#JIPmuA^T;^wGGtRY5QJ;m*sMS(wNLKaj#c8%+yGJf zzCf-Nu@=W<1Lyjrqn73p*w1;S^^z15v8*N zIr_W#rG&~{b z#@*0v-h}Vn6CK-vVe2r&&`vMsbH)Ek9WaKQSobo`8DRAD6d_+aPWY`h0Q3HC1=np& z8kVijn2%beH@acG#S`4B?ZKx`z@4AC1y|;Qj-&+bcop1_T$`EiKY(1Fu+^FF|7H4~tz*f& zgJe5H{O^$LgMBEINst)>ptBOW!SM!~H}K(~M|TN3?*2*CmT-D~`&GhR@mujS@Ar^t zqdOhSN~~;$;u}*W@RJ>^Pn$hR@hDv&7A#;0D__Qi{0wL`;voU`jZ~wogk>-|$bU zS}*_Eue8N0y;~>`oW#p-v(+tP@#6Pi@kzl-C99Q=D$`frX`cytCBLCZ8SdvR{cBSu zU&m|uaSoS}&$W-Ni7a`sl-dcd2*-Sj1!d02(;)vWm3G`GX%Nq_d5+%52q3kU)|w)T zPv|++EF0*0(564XYUIm%rUiH6^@)K=qIYa*(1@h3Po~jD^sE;6J85<3U_J1Lgold& zr9@025~Q23wlsDG;j~gn>1;gq>9v$!;iMdh2;i$p9GzAi_$itR@vZAY%+N>eM3yx; z@c(oXoi6WN$2LNq{{OtNce1iNjB_+T>09C;i!z(?!QNI(9RG{;)(Qk*J@e4>Y!&qO zE*NT&m|d``RS^nThn&RQZQBR_2)(ZUZVC_QdfQUkwj$!xBB+s6O3wu`ON~zzL73NrDYW*{QoD*H3S=IVvBP&j ziYtlOEZ*LmHN48(5m7JmM~Y@-0YWmC7cQ*R?_q8FE~aEQbhp7 z1b}E_kR=^ap(_G&nqB8S5N!MUOgsa`%DJ%6ZtH^#Ot8dYY?#g0#6zAHM;9%@mc)a4 zc$TM02uf|9C#yH_9P>1~_Oo6fupYEMhuYZNt0{msJcZVKr@!qIU@QegC5SeIFUPbtxVF^*;U_*~?@&NFQuaR1HnPW*!hOIfpAx{RmO9Qb8W+ZYA5~0#dY`1yy_1O|;&#viV%gZp@bB-_}?f zJ{#{6b6#A3RY5@UXcYMDuo^qFi<))G9iY^GGngUJn|&ZM6dQGA0aO#;;RT#$f678$PUj(SoghUQl}7t&tD(n;;Dfqd%a z866-wW$?*il>7qOx(-+QLcBeHL!o6%(7`M%d zHhl#K$T{$;$VZGfefjyfUw?-_i$MB*S>#u*`F)n;=l~wQzgiJjQzy7Hor#Kw=Bkyk z<>$Aj@dZ$m?{Qy6QWPYbAul@8$_+9J>A_9kdzH~b5GtX`gb(1tJ=Hinb23l&q3=e* z#GTP^oMnWlkd>qoC;R7GU81Y2@Sm-z?1H)~@UZ`;xs82Qg(fwYTj)Hl>aJT8WmTPeUFT{K6Lsl6wE6$JMP0M9E`Ce+3j3W$=TRJS^0Q|OItQ0i z_}|v`;JFsCmqRm`x=1z7ES-vF%{Cvh>(DatFQcXNW%vQWUj%+YQh^svE6#hN$T9%; z;ZhN0xwlx}QgvNNNb0B0*i!IOF?}39QO-g{PDN+BUsv^voJQ0CvW~B)>P+c3ZHls0 zbEL9`l->c~WAkp#l6lxft%|*WdTPAt+Qd?|SMPu=#;ULDl!KZUAQ1>PHA#wY2t3>UUYGbZHQI=lG?i|k4_b5ln! zuPZUJW3jAl4h=a{XdfKp2m`iH4h|lQd$$FG#w)hiohd2Uu7g&)v&(Fj*y^OGxEjo( z3+qIrYu45`^hasM*)EFc`2jLfZ?`mLV!Kf`S;GMh7FiEv8b1CqU^-R6?MbKM?AroV zfbJ<>{tYY%^f5oU_sza?Ir4JPAoQ_{&1hrJg=?$RntE0J3RlOa+C?UWgYPstZPdd% z-f^+$#t={r0q495x>>XP@cReNbj{u|S_$;5Ygc`#i`?&X`G%au+0<)Cw{E8y=j+zo z!|&h>W@mGvWnZyuH$BUaF4UKr_?4TtS81iK2-_5CQMRb# zBnwrWzRme<$H72Q(i5^%x^_f}62{9-GmwYaz$leDN}63vWyPE1jQEGJr78W>;4PKQ?f zZ^T?<$#|u;ej+W2)iJ^xSfy``)0?X$0Dk_ms*_mD(}k%WF}Se_u4xaN^J|25xk`~{ zenqj1x6~k6VA<&&9{LV*2`hmDUGLZm{a=yLe^!8>hMu#hY1ZFVG9w$z^flp?|9N~& z$mj?9^|!-EgrZ*2FMl>YmC@ZJ3Bf%I#Qok2mpD*|Nc=$-lHSW#AbSrh&BAB$73XRQw{$J zKTKN=sH)a0&4T@Pg3$ON49JZImQBQA{2{!Q`NIy8R^lc>_nnP?S;s=qhe#| zY~Jg0RQd9WeQvB7XE{O~&~!5$_(cStd-09%)5B$4#bE7f4|HOuSNI1Jn=p}^kVLmJ zBJAkcNW3jEY`o9)#J{N8nh&_4{1(4|om3SKt~@*^o@fIDrC4^Cd6*}c)_e;fA%jkvtZMfR^irS53MyG^kQO)t#acytszVsF06NmvZUCEzW|v|Hj8@!yDK*aC$9a5&;`BEuci zdyxL^O}gYd$PbSM@4V0f>x-OtMJaQ{#aN3RaS>cah10CvW(!?79bz}v5k%H^f?4JR zkKT`NZf-`jm{%hjvJkoDnTKAAikDE-~Onio``4})*xP<6e5s2 z`01(lxNdyuYNZ}n#f18;HpGRkJ>Cf5QBl#p<;_s34 zM_2euPhnFliB6Zv%QRUn^~;{Q`ODW|d3qM+7Bb12VVQgXc>V1+GJ@-*sC4ij577%n z+akJ_2Rvu4#mkrI#S8JaXlL|oOgwb7K|AF@wZM$otM|z0wzE*R+2dqUP3h$D;c1;0 zNFCu9tc`VVb2S*;sH-j!D*YVVM7nue#2HPzsBrU*zS;V4pVY6>t8sX*qKc0w4l^rK zi1{T^N?oc8MsC;6;ohuuD8OxWeW+)?-CnD!`jYy;b@E@_YVHY?(!b>dIHKNp-;AqQ zZ*l!BUagQ^4IvTPB6)B{vQB|;tsDA4S;f_+L|Fi=KvTbDmg{3+Ta9u(DdbEXf;x@v zV35CkT|urnR&)-3(D3mk-ES4Hvb^=BNqKpPoJU%quA-kSiTzv$@S^XOz<^O`9{GD8 zHS!o#v&Zvbhtft#Pt#q4-Kd1!s5Bp_U^~TBo~~BS+4Nl5*VB&6uf-2qGa zq*R_O+k>0;+#;q}#h_u@F1b^P4J*=R@^yM8l~DI8ZZA33>q@ta64OJyyZsx);o_IU zsflb$W~Uk=I-wFta05@A8UAJAqmkB!Am=R(O^>e#QBoWJL?q{s8*-vVWEL~w?ikH` zo9Ey(P}hfq3nCw7l=N2Zr9!k%xC#cTpW)CDmn4ylSNj+Fjc_ z(u7)C@*Mf~1v4_ie$L4AOzb5c(IO{mlV1@HKn=!TrVWbgLg*?_M(GRrqZ*w=zqIBv z1WC@z3L#p}2L<1+_1n#UfIPv#@vIOZ>QKhI(4%E}OgsHTWaS>Y#-hT+f!&Q)L7;vD z(p1+ZV$p708o~e6*4FSZto9He7XnRU#4*Qt3NJAn3KP;$6?lvn;p|>-rTl5;#iM61 zQS0(UgO^%Vk)|kp$4hM?WM$dKCu2-FQojbOB&KR zh92|6dW6D0pBsNbX^&4}Oo150A$l zlulvYjb!m;_24l8SJZpp!Q2d^DU?Yl9FPzax9Ka zUaQL@zj=^MR{m%V?sLbKm9M;S@&}gXbfx>%Uc+2eO)g2QN0d~AE_dAnwhTOz}e985UEF@|k zk6?|uLMqc>V{L9W$3nq*NfXPj;LLS6%GMzZ7?6s(D02zc1z>t`z;%}yQxyT~^BAE# z4JL1C;_pBOF&1Ra2yz}4GdFdSaY<%7*hm@d!&=yxv6~$yWt|6id6eoNW3H=|20KnV z5#tNiNje|M)DI5oq2#baO(zAZWCkg_LphdwQwh|?5mK?&wqTj6@ti#`uiXKQ zn5FxgyCGD_V%FN$KJX&mf8lPaCQrQn3*yM71}w9L&Ub^=EN=6-jfITolRR1&V9;=q zV-wkQ;>f8pT_v>VJ~PLI&A~wd+ZBfRk|j8iznmKg+qP3+D{rox&*QTKqd5S=YU2g7 zQvVzFdS{@ZeO}Er3kuq_wFf z3v>;i2gQHF7*-3yPO^p2#5_1B?i`1Krc&itgWYb|>__8pPhsi9Y6o~P3F6a0rBlDf z9uQeL?K}5h5#hHCfn+7=vIEhEi29xmK=$o>ng@uG%=ocjIKqig$a+l5z)DRyRfs7! z5NbpycdIKilF&ygHl8WLQYoBO8Ua8`O{>7w(KafCa-#?_^#!uM{{uv^f$m5S$er;zsi8Fo0> zIQ#+p3vX5R1>KDXW+=;klJ{h6aR!a<>gww1?&|95Do%$i54NmZZlUd=hq0J4{VsQe zhocw_u+;CwMG+wn*4ZB3ruQw?d{1jXW_swGuvBJU)6_JvyE;55>r` zgd?u0uPkP(`L11xdom0dS?^GgByGATlL1AJ^<`1I(1X_DRJ925UUp+!G+S*fQ~b&X z%ax8cAc~T9N~&?EbcLh3rm4D_jSVlK^Gye{4Av1mcarzU&4a(yBv`?qokbEV$_-k} zUFPovZGv*6UlefaB!l;PW!9D>F0asv@Msv7Y9Ct*7vLZ>aUY1mJ2`(R9V4!pny=vCkBt z5^v?p%NI@FNiJQi3toNyC08PK6JrA`)X}PKwXP!=;wIvw;}{ zHc}!bq6n-8P^*aF!0ORXsV*%gs?KLJ0U-0)t=3Ws4(4R8rsyT(cCkBz;6w<%VEvWJoosFg)QH${u`7cw-7#iBky z!F&Q^x$nyRiW`RDJtGYE$$+n~BkZwA)AR|sM+(4KfDzk? z;uDN~I-`z&pVD+SPCDq(1WGfxH+QV5CMM)HGf#lWX(glBTag1MLyv4rbMqotxzbeV z{n^^58@#*1PJ;p)&yfpHOS)gv`xmVo>q$}9zzj6%uqm(%E`@($5`zODQ0{f(phG`M zsG?uAIj3KIOHRLOyGxQ>5CDK%R?4X@_VbT>au~5Kl6iz9qn%I@WP0Hn}P#qGgtVBNGK`!yx z(Z7DICl8HT9)3EUAMJXMcKTbA9=4aQ>6aS$8|{#o*EVr(-koV7)OE~QXUTLjJc4u; zYJ#*POQDs3m0nV=)1)b(^$DfEng2qHc}2Q12Ph~pD)h|f>S86ia*FKF^tr3Yy9X~d zq!qI^1zoQlV40sm2QhfhM=Om7q;+Pmb(tFnv_ytO?Ac3`Hl)G)4mkmI4ab(lw}6p8 z(+SUtc)5_7ZG#->Dzg#Wnm#%CBrS&Q5lM201ar-U4Mu^fTeutjrZMiOrS%h;_sI+m z0zZr9On&{`j637+UEfn*KR3f~X(-H#+pLvVt<8^*nPI?+I882w8u?_#jD6X*kJ-$R z*Ul@)1)5OJtaU;=Ct+1&LaU?!Xm=6w7k z&vHJ?&T__+ddr{_(MLHl67&+MJUk~^eI_(W6$K;XcxK?CDHw(RQ@JaXjMtpiAay`I zc94;fWFGn&-|%#D_*}Ue`4PEmroSq1kO9O6&JC|;amAWPR70zXC=~a<(c~L%;xdSl zhhIbjo$8rEP~>JbPQ#FFF`BGL7&gyke$rz<%0okl8Hu@UV5h&&oh9!Wgs<Y&C8I7)uI_Z37MnlvvS%lnk zC=}m#K79AlV@NZ^(GGlN)w9;8uZ9%=xCS;8`tC34QIijHXgm8iMicmhStzd zbnzMKVa-(;5xa$M(c*Z-wM-0S=stZp4hoy-p6Uq^rWoaTfQ0G{V<&9LZFFJ#%bf@+ zJ)~<2VbY{~yUf$2ZNu-2;6fW>_e-^~oibhLJV`&x9qq_7mUbSTnMWC{vD;QI87^Gj zz(AhB{cUpimWSw*K?(g@5_SVrvZC)szs<35xieZ0ob;?-UrFgwd_B+AVjXtTQ(tt6 zT&IykZoH=-kN4G;5W_hE;|1h5Orin1h$gy(jr@c{>XG_e3GEkSd|!C0B=uSR=8NLG zdnRrU_H@^{IL5eVV$@XPsDCjhd;r=R%HPONe$(*3*Na_U3p%*cBMV-BTirZo$<- zCVfJ%@W;KncU}fto?!zZUuXa&k1a7QjhL(eNO-W<1vKQaUZ^w4hux>Rbyl1j;DQNaG#&h7JVUl-h@fyS z5zJQ}VpQ@E&qF*kN#5Y)vdx+S`^QSO;hvmIQdlDH$m}8bff66Pbi`zCnkN3*syJ8^awif*rFF=A&)teFSUHCbl%D1^a zsh6KWd&cp#dJwK1k$bs8nR%C}YRI$6jN%7auIb|C@Up{hQ8MJWe6dAdzgH+?6j)f0 zB_O}JQa>bSLYxOUz&c7w$uhW775peE)z=<>yv9%aFabcLCH3PqYQhqpIaIZv=hl|v zej4Kaax|H!=SeVtE}~mlSbeogsfPYA9CD7~aDN$&aFyY}{vdiKbQl*pz+LSNPG`Q$ zeh}CW$OP+q`P^Db;!A7x8^%oUTF|mFtpQzAW_M$HDD^9`BmID%q~{yS z{dL^K7iES}Z2s2QX(CL-^^XDwa_L9vMs#MAf00g#X(7Fcr2M70+c}LV5xOH4=FS(A zUkajZe7q$dDFz3#%OGn!U%Ry`^(|<{;w!hF+POzie<5V$kMjEbi|m;>p704s8!~p$ zBEvsQKJHN&eu+U@l}_tfu@lhZBx+m2cJP9bz!wKMcR_|1lN6VID7cORtl)$js=?($ z?oJ*uE|)tDBF9>8sNKj2d(47-!>fsMIa4qn-Fx@4?`E*v5x?CUyVHbWK`f!%+aYJ- zj2yI&7~xhoN0^yJNYswt?_Q6BlSqilOP-MRaJGTQ*c^;& zISF8!{P_c}kA0;0IfOG0&^`>7aVdqRZ-Sp+r4y$^<^ejL5L=XV;^lM#YYIs9#mLiq zIkf;*K9iG^Pe1vjgWn&0`YHOJ+|Qoj$J7)1_dnrGJ^A#LPe1X|C!U&`awhkGbpI1i ze#Duq2K#6}eT-oMs3d)qM#}R+wuOZXIMkR)M}GfrkYPQpTN|m zEL%xi6BCP3w$z_T3;Bt5oP_zIpvns=mN*oztR*P*I{PQ5o@ngHem=VzWw1zj&aqy* z=>)xw6K6}XXyNKZUcKTZopz2#?XU;SpY!~&vjA!0vBw_Ew_`~hXP&bVv?1?W-MRdj z1D|NYakVk*z)*4W5$^2W>*Rx4l)?`m-m{Jv;Le~O=Ivufo@%|Glw7x0KH~wY!ax= ziQJEE)S1wpw{?%GALp_2Sf!li6tL*C*ue=Jnvl1gQ$;6Lls=zEVapE3C^_LSL*Dfa zjXru=eInwnOoEFMNPKZZW+(?2@trf{SdxWndV=GuCl_0F_grV(ZNi`W3;?Xp?w@l2 znE=Q%t)a2u8E8M-4SE;Y?O_FbXmmvb#^ANHzV1wbyz;oX1CB*1>k89$uo99hEjpte zxjJ|&m$Zr5a}D%Wb8h0?<#QY7+;jDFkDnVqH*>Ce?%cW0o!fJ6eQsjWb86?#?b%za z#wSV(%?5U@z=QKQWMa(Cm+m2zoS^0Yp)29i!jMXszY}MV6oQQRLe61X#FLqe8Mv}M zip8s$?Neg;edtEz3;2+B@!jpn6^)Hy2Apo-OYWGd(y3wG@ClkWMy?9$iF&X+_S)FC zJ(bY27X0i{Ky6?*<8|zcnwFyj45E}ZM1&(RB5|LzPrfr*O2tYbNA5}5)E=Co8 zMxA)nzAc;a@bl1PDc4kqS!1;MvN$0~T77uKmMI&w<=!okEtMT4UxF#)49b+S!qbt6 z1V`_xIfu zz|`IEIsZ~ZYM~>-9dV-u2AEn`~hhSX@+3}GH! zI=6@dEPAN^dMWDhxA@C=i3hCgB^|XI@>q}sXbMB``Gb)q?Jq9Ewutmrm@9uaGt#Lq z`q1SW<+G6yBv;&*U>^EuyvDnM>@EH>Ubg#58Yk>E`(2>L;!>APU^qeeW6kVg{BX{i z@8gAFnJNborMs~?l(2VKS64wU#J&xU>6|A*Z=Y|{4h^k0i`)QvB7;c*WPwEpV4AiV zDu>b()~aF#R%1*2DCQu)m<+~qXqn72T41qGixW}h8SyO3=mSe{f>kRo+W-wj!<91h z@HPIbXdpo-YovlY=97=boP6V)Z)eLUOVNX|haiV%xXb2iy0J*csHOQYommPx@har*VQ4RVwiv^m()uwq5+(TB z`F{HXuX{zX$vg~CoKf1=%}Ph;5PT9YUeG0wQL0L^?vSboRCR66q@}K^#TfTk zxc$I0ao4K67Rwt?$Fb`eqdBw2oone z0yga#ixARr&_fAs@WXDwP(XVk6V5$h7YMk=rK)V}wqR&c74r{FUPcVe&Wpf6Ia9D~ zq`N3l!0o|q-ovAvfk}@#nCbyMu5uZ}E} zT4MJzCz*4zk`w3B@d?lAg_p9kXlL%@QQryv(Qd|}nEF>vd{{FMGUj`f?BoS` zjoxq1Lq4I8o*|o)L+r`b5N|(ZP8Oq$P(PcDdaG2xA{fS!IYd~ZJ zqF578$NH>8g?0JtoLyK7#Ova)C>!`j&9kh_=a{zx=(-U^5WNpA+epr#?r=5|c1^0! zI9RK(bj`|!L+U;AeyV-gTJfq2x#Jyuj2M0K;S88vaxnKAZ)KZD!6oVvR7yK`8cj8e zgFx)2qg`NEkMTeK{(GVEZlwy|CncS-cP~5XEt#hHDr;303Bs@yh<@gvnzVp$JAhfL z)tQr*YEXc&thB)pn8CvUl`vgutynkRys}3!BNfs0^z-F1GxQ>FNtg>9ZMzu8qUUtO zPO;4(FFG#y-Nut?4>rX;T*)LMc}R0-Ou|6YM9u-sISoI?(XzB;!N|)fAkjm*?a-2J zJ4=kXN)M*SN}9GYqyus($THSN#~ z9)(v1p^yJ^6=ARX(70!ggVLFL(wwdeM*`XoLY};-+lNlv9&HD~&&!Gmb~Gn%kr9I~ z0j>nN`1EYAG8W3dMVAHQ-lC~u5odC?vgmy@J=yE7@rxWr(ICaBAE*eu7+Q0{xM?Tw zx_zvd8X0YS589!(+q4NTH2om7VD@0}zkhY_)yBQ6_kP^C_ltL5ZM=K+{u}qNJ$SY8 z;ENCbf?Q5?#wy#~;zV?;vYhT^I_MhBK&W@NuYG6x+J7-1+&=-798IN3fWsBe*KN@*RSo|`NhuNt7c6{v8JO7TYviT)~z3H-TL>zm9Gx2{GNLF zCxaV*8EpRR_O-78x?kVE_Pw3AUTy5Wb!F$yf9%}-k_qVJ2L{rcAtC+OB|ZvgD;+t)U?uf4T>{Y%@| zzq)<>2Jy=;ckX`Ktm8SX()@&5Ju-+1tq#)H?l-oCkY^QT+4-rBnLUt53qN@MFUuMfTel!8G4 zlz(S%^(%v`KW+@J{%mmd7x4Aw;OegiSARXY`a5{|_rKh@|MmO7`=38- zz5S=b)vpe2{9D@oyfAc;t&Y!n#Uf;U) zJ0RK3!IfVPZv4k!^VPxT_i5~2rI7%=@y+dP-`&3UqwQ-y-M;o8+t+@zeeKrvwZCp( zf0eojy6pP(ojbqYx%;|V-Epk$c=z3R8t=V|xPJBj{ABCxTU)pOv~}yxTeogQt#=1k zZVaw$BCB3~YjE|>;KnZpn_n1g{s2b_8;jSW!>(@vRkp8x8(HD4*NExf+PV96v%crC zzUP;>-hOB6<~O!({k5_64h;4m53c-la0O`o+ribp4Q{+S*nDlU`9nDXzqozvOWW73 zZC|^weeK)8*1#TbZeRQL_O(B5U;Fd+HOO&y``X{OuYZ9iuxo%1%sUN2=DXY1zqft; zM=+=D-1)DayKk8IoIrd|^zME0-tXW0V&lE9-v1i**RA{SY`uMZ>zylr9`MZH23P)d zaOK;B8~-`j{Ni8}W}Yu>UweJ~8gv41>&@+Je<7y$=FXkp?A*O(R&f%mI2r%%+xKoX z?tS~-9~$@m^xoGS?|t*XfBfG+x&O`kH}3!H{;wZ=z474sgWo*(?bh3Owr<|o`pegW zTdxmZyFn8n43xJAH-0tPyfWDQ(e@iRVZNh5_wAiKzumce-K_8wR(NV<>+Qd8-Td~} zJKusvd}nawdxIOl9&BD6Z2mh=Ffhz;Dt#5^3O4z_wSDb(+t*SnfEm2J)OMwt;T!bd+?3MgU$be z>GyA2H-EPE4orpb{9x;yA8oz!?}OLg99;PUOa-ut{MTUf%Y)6I;B13y37>eszkU4& zJ9qxDbN7Z>!x^mMO#0sU8}I$(y}v#9?t}0BpPz2M1Iyn#KO?YTK<>Kno5AK+2AeQA zeo3tJn+EdE^&f0s|KZMCU)s6z$DO;ICg8IO_-yvxPaE(3;=%VH{9x-x@HR|)LfJ9ocjg8dYN{Z#+n_Zs(pc<-IY zy*ux{*?8}d|NYzl{@wk}``>!-t;U1zY~B3A*3Iv3-Te91JAZ)6{=D^%;^)vVz~tl`CrTQ>paUu?Z|2SEG{COMeRehKp$eEoTF z9wuf zufi(!)vep#9o+cCVDsyPO_+FYH)tTjivQ=GyWcTEd>TP~`qKaT+171Xd~d%ocx@Bc zt*dV~Xx_cmpsDtcgUvSvo4h8vwwsSxtj5?09Nn_y$8cN{E?4hV?NVfMLO{fzSAfnaSz6Al@?_}1s8vicavFc; zK%fy#O>)KrDQM$^O=>pUoh1QXW^`HGJ%!5X{}Nrw86_eHlGS)JV=V$hU3<_$+t8m+tauy_cWw2Q{X9Y zd^KMQB&ET0J&t2fx;`WxYh$zQUZ?@WEQeuVxMwwcSru{B)vXGX?xwL$L<8WmiwFYs z+~c6Q&dxw8RcZY^^n?vR^41Y!FXd*Yj&TnRVH5Rv};+gm=lT4DGrj<`yQL-&Sb{DBfD-_V3V_- zROZ_GP^tDMK$uo1)0c&8BL!=s;M87BJ%MnTOFzBDzo1>6X;u28_MT>kU&Qj9OM&l{X`_fX_JBpq#L)raHK}snu3K9y`mgSBl zs|S5xE_CD7=fds^SvS%BfRkFPtDt1V=6ri8Y+pDY^cMTUVt6=8LO!t-$DzVNY@H+t z%6cu7vSNffHi+nPQGcWxqt=9D3&(muyofEUcss80@Sl0uB+C-bAhqW47WP+QdlMdp z$r6oPdv(l7x7Yigmn*zI1FSi<+BK^5ly4z}2RZ zfC%xhhKb(2@1Emi`Yk`#+j@Boc+gA-Sp62c;-QQdY*ZAhNuujkJ37e}+5p1bp zmWJOK*c;0hgmK|=(1QWSZA!U?smtM`1#F3kC@_GHGlP>Z#r;5FSoS=hNDsCirGMAzcT(SP70;0I^s-bHpSL2O1p-3 zTM6f^XeBI$HLDS-V+1IB-=SzrLRhQxCCOs8*N%Y#@bDO#xAQ37iEHh4{80Gv>BlVZ zxZZEX>P9wPF-iif??IQw8p((BqBbg&?kgWHWiDM<*7wz6D6QLR#G!xSeUaB=cR*IE zGqN_{B({B^DO4{TiDf475n`%JD&$eV))6I{C|v7iNv*EO#kNnH1PP&zfq(+vl`|u& z9sZW6>I|_Nv8s6lwW5Grpt?W>puizizyPL;96Y)VeS(x^+WLGAPnlJLmq z`w`^Cr~nQKnunu>g%CB5FD*qGyEjtANh?MULr5%&!Zc52)#vNArD^u+7(4~OD)S2Y z61xvxi$|;XQb}?lgF^v3SBx<#k&7U$?vWPG8o|%|v9isoUy;04J0(V|eO2Zk6@^NU zGG$_gv&>g6&BM66EM42Roh#dKwNV?>VL$@BWQ*l1rxoUua;T@ZY$?cnWHB+<6GEn! z3w555NQ#tUg=lj@#%WA?5TGmy0al1=D3;rKNAqH^~K_E4d-a zG;RnowhJgZAlS{xk;UNNaF%Lp@)oMMc)W9XuIgDp-^b2Z?qWGymZ=gfY&VXxmAIvy zM)1Tc*W5x#7zW>5p+(YA*lgiK0jE}3$NP{1gg!>uaut0%$&BZ%U@LKhrR@b}eLNHO z+Tn2+X{I)yGT(@lLaD&2IT+SMdF%CVQa7SQFeumU6+6pXU7-`~{*KMcSjPWbn`A>< zq%^0XM;eX!N+p+Kr!kikYIkAE@QxyheWZReYTzlu`bNUHbxpxxE$<+8k0jD6X+{}p zL)2Tv{fZ&{gDN8C%ZBv87F*G*yjpjgA%UnY3!XA(`iF*2gU zPiw3JN7Vd`uV7c%{3ty{hXDt(BO~oAXc!--ji$$)S3q_OOy@ZXu2xny6=iIPKf;`# zs7uno>qXHDNq=t_zRx#B90^y?UaAMyTutSbvpu$GN9A5tMkbUnO6#J?Yh*2El;Fl= zr!hm>g(fQ9#9(iPqg!h)1qo~^@sQeSDA-mzfYiDNn#sT-OP2Obg<{OqqZNEf<8>ZY zIO8c5;ww#Ict5#@82WI9c2yBZm)LO%KBM{|G-o)mK&Z z&1jO3qEL`$vLZ-C*_oilv4o)q(A}vS$EAC$rUt@0h`a9q>?a-NoZPP=XP}chc=61> zI%zJ8ts2ce)x{`{=A$n2C&tg=i@8V@bOu#HkPB+HWLb!N+0kG*!i!?6MitW=3-qF9 zakq%C&qS|;mO>b-v9t&V{Ir$9^s+)PA`wv{DipiO-jo%5iG`FcmRn^pW-Z0gEC~rl zk$u#1_@a@rH@1S^5RY4}McJ#W!Z^_!9H<+;(IO&uI~PQks1Itq;wb~j*BoAup%b^Yc6 zO39E7n?X1GWVpulH0>Eo_efYD+WaLc~Zg zG2?KE0FWC6h^+{oN%CZ?0H_$sG20r>MAW5Za1givmP6Z^Jh!m9y6^F z1~j};&{G=674`~Lwi{tEU+ir53ram@$;Jl&UDF4yJuDvGSiEAK!5?7o+bUCe5}=$F zkFLT}o>8F<4r3U?n*D5^Kc8g>JHZNir<$=QyJ);BURYp~Ck}o+CJzo4vvg@n#^LgV zv}c_C02I52a#^6BC&dnG=FUh5+jb*F=>(5hoQrH|mIsm=N+&5S3jsUCZ3dkVxtw_XgOcnP9RxD3daOaAsUF2~hu-rLAG88U zn`Kd$O8qC}M^5TGEI|aO2QKlOiZi@kjPxEAMQExoVoigr-|ZInKUJe&2`;RVKL06f z*F+zTY`q2|_-Ybms$x;5xuhoa6vyvYS3$~awANCd$eW>k53OVqH-9Q!;xW-H9}%ey zxyl{1GGvABC|{KDMiB;(7y*Y(Nd`QM( z;o?T+s{)O*Ly{5bSLWn(Aqf^ygH~*qd?h`Pfo!7Ga+JRwt+#AFgbSglgk7|Qrl4LE za+T|qV70-(39c+!M`J!3WfINj!T?BO!>rD)R_1w+#&K4Xca*Vi?~{>6(Xc-89D`sV zbSFKM{xL>jz;^tyvqoo)sO&&qW$3R|AdaSD#_h`)6iU|e!zDlcE-=*d&UP08|R8JbMo&_`pr2r}f*KIg3k0wMGySLkppp3}@Kpl*)A@6KaV-6bZ%B|KSK_SszUMDRcEGU5$z&*s!HW znH-f`EmLN7Y-m(2o}?235gAG19uyxJc{%JJ%2_*IENvqdi$rw@^F)WwfE!=+n= zTvLFGkV8RNOA~uQ$7(>t<}m_PDhIIFs;W^GsB{F(t~*-q=rGVY-3!orESF)moQjeM z*EO-j4Oo*|eXz~tU7oLEmbIXynM{u?$2WPDW}4<=fiZ>BfD^f#x5gF8jRY{ukVykS zq{NWGt4yw|%&qOF)*5@1_l&LyQjzB2Q<&RYj5tbkrc;Via}~*bMb%72cb~6RlG+Qh zu)e&$0}5`EZTP`KIZZ9hbvgtD(ri@j!p|^|HTcPQ>!WhUt`&5GCS!6u0v)Ub8cLFp z#wmW72MqK^Mp18r`84m6#&CAQkIX;rBdGF>j8RIJoH>^Ql(M@65>D0payo2>c;)BO zae!&%O5|;E>RK#dO{3R}yU5jhx*=1&Y&X?1^zwO>9x*nZJY~4WC+t4S+>^znt*+)_ z?9ccvsKm5OK3Pnv_z_Q@t_p$qDJ$RZm>7toSKm<%VbA9QsC7gX8RV$++${jlNDwVY zZm#t5IYIK%-%4o*-p=y8rI9r3&aLv3VdY#nKN7Z^s1)(&NhOcPk^zR_c_9{Kux^Xm zyeQMI2*q1LX;uMGoJSSGEpgGmAhnkRV;QVAU2MNq*eaF7Vi|1lf)yFtwyg(t>8GkH zUUZnF?g>Pq-t{F+WrydMc*w_(sfV-RS+SAL%o^&d3n1YxsM3lfm$!C>w_*gD2k(tn z=xiS?A8lwb1Mqy{Nu+l%u2c(`ayKj!pPM}&G+sH_`0QlkV~x4-JrhuOno$YUP(U;2 zdY-vw+J!Zj#0-m8c)3zGB6@R&xw{%_EkyoRqZHcy`F>zm!yLxAXh@0vfO^^4Ac1vnnA$z=o#q0ohLA|)VGgB!RZ}UK?niRY zZD#S}B4SuD9wNy}ID&#*9q$AofDIM#I7+AUGvX>FhY{fr6Bsob@U#jk?L%qdp^;?S z^T3EJ!J@8{k!j^^5D`aNa2KYTk+EEco#Gm8QV($p&8<>lg%_pwp?qfIx2cuIhC^fk zJLQuPerPAh>PBIfPbE^mFWbAzUbSCv7~=q{Z@2JF7Tpc^4KTtflpNftar%_M7`{u% zCtZGPk%zJ`Kc6V-Nb#l$yRW4nqNSH!+}e{@queY!NDe6ScGx;YEs0Kt@<)Dm#xmTP zhq+;=jJ>p_cdwfsEaSRnIY zY1K=iSp0-5&VpW;Atr?dmQdI8D~A-LWLI>KL$WJIe!_8zkm<~w)8WQx zg-BT?K+&mQHI}6dyaiENv~pM#ufkTj$g{n6OI+0z+FRy=u7HA=u}+7mL%SHBjSE6n zc_z0LcC%mvu?uF2J#n|gO2M?-?clY?OBiN-m3~=7FPZ=0Wwt!xt|_rvmLiT5%0+qA zGa5MNOv26I;|XQg`+6%gIr0$q53`ph8iB!dZ;kN&r9rw^1X$}%4g)rV3<@!9)c%@rq>(zQkYcMQ#Wv$g-z2ByO@QryW zOB$|u{}g2f{B8cX?88$lS-Hg#YUL7O_^}J7+)t%dpG*WOBd3O2v7G4$lk0Cs6n{0c z?sD{xZk%kV2uZHx1R0{mmszUBxUfVorJua-l4kt0ewWmGm;-ONryA-=MV^M(PsZ_M z?*WcMc^{a#?vhfng+pnTpC}X$@9{{1C29v@XR;t852p`v6vhg>>^QJso@1CBq#&t3 zb6|qLYUUvZAL5_h94tmy=Jf1X&l_6RafTHemb2_1i1UoLU~ zB(v)18ZqRmN>fLSs>wek-0t`W0MUK(b= z4Wpx0vRr|LPi7W!1Ig}+5VB2%hmjbiln`7DqAt^D;_TjEae`jQA$Qe5lEkabEln0X zz2IVmYPIGlo+!g%x?~;eqIb)xwTm&kW%c5LB6e@hK>^y(7E?QDw=8i=4TWY=VfA!# zc8-}=HrqkB>&mlE52n`2!K_rGj%f2)uYFW?-dNcwu@+v&>he-J4IFY~3k6hp)WKUe>hX4i%)jcxVrn?uSxU8~(`1w_96>e`MnE zc0C%}eK3k+6ox6%3A(?`K*HE%j`5!)(28 zi4LUtz-660oL)8QKFz7kcjNYj-I++|Gr48C!U)6x+QdHOeoL0Gus@82V{{SwAz?p{ zV7O0;{)JCxgL(P;NZOXaKeZx%9tMd(J{%9pNgjJRjoT0Tq`G#;=aR8d_fXQb->RYv7^9OZHM#G&Ji(Tmw9WP~ zV>!lZR829-Q%N#cvy@`dpcDXVkO)iu^GiYdLgC0s5`=C2^224DIc140gxn=o9jUXD z2elX0V%o{NQc9$k)TNxSYgMsyvry4mQWQI^zbPqrNI81f${o_S&BiRE1deR;6{sfq z7^iNOSn>P3%xMljIXkK#I-v^Wyv$Q9oX@9f`6y)vA~pJbGDjlMUIZm30$a+oSP`_el^tzHEb`Qz;(CuC-J?8XN}h(^ zmMe}{M8NcX5oHH5!;0Bro{bRViy|b_FvA!p2l+3M8`w{~wpU6Y(r*q+InoX7u6FPv zpyMeBwJS(9g z&cmRDpWI2S+Yv)`mp+)8n4k^F#O!C@rL zm9~F0{a~72Fb%2>>qC7fqIIGE%DnPbYKKySE#Z|gXt~RQU7;zqK1D3Wn@55q^Cs|+ zIEtN?jgsumBO)XL+dYz8mekPWX%(}AR5m;xX3EB#1_3{u)OX-Kkm68uxZJ9t!_%sj z&Qe)W6`inB4PB&co1h4xZAe?FJwsZT%iCH5^JF>yk6?~wpZYBJYSb%M^S&zgJlbNT z7(_m5Sz`nd!?N0&4!MWU^=6Ya${41AePp{5xT!GA3ent)oa-57p5X zxSL&F=@W=o*p8Q1x?vVRTob4nyPqofc3Ph(cw+g?%#UD)O|yI>t^wz1<**f-?uID~ zS%g8cjn~CMkvdW}(=BdCc-o-;RlCsxW*(yh6?W7DmilZ z%Sx`|(2u%h@`zNRQ^kK+DyR#;MhEqU8x9k&blHaIohiyU{7p-FV|7YZM6{qZ(y%SO zeMFlxUE!pU7VQ<1sN^_WV;Qs}FUcn{WQQ?@*xOnjB3wt(aK;iuPBR;rl9DkxB@Zcxrw z1*5~#fX9YV!FC`X3rWoPBw^YPR>IB;>}es1d)f0r)?PXtE*`n$Im`IlqQx0`F)xlD#eM%SOO6ohI^8h-gCf@(L?OknnS-=+}h{dnHCx(YITe|wYu9J-&3a}8Jm_D zKh)EB@~c32Tee##!i$TVaMdU zyFivU^inWCVy_&XERW`tqVxvS&~tn9N=B3#zzJYW@XB)CQV>b<{RL} zaj)uNMw$v#Di0(QW#g|jh%ljH#>r7TTnIW+y)Yjx#7XF~6Yj7!tV#=2l{%}$F>&xv z<(=5BQR0}{3ssY%lDk4n59NuaeKhunJIUT3QK$Q1^hOB;nbEp~({dC$jG_LhyX#>+ z8}O5{lfxyaQO%xJCddsw$L#$`mI>866}f6?5v@xc<;YU(G|AE`E!U9a37N0hiwyBm z4ggeYk3{IvEwz<7aVVt;%0rR5%)f&yMzkJ26h>IBjlATqzgmKmB`g|Y*5Y0C(b(vn z1c<$e0U}jPVMt&?W7&>Hke5krwz+X#IAZWw#tvf<&h}5Ar@gpo{!0B=>4-@UbDu0Lw)l+90SYB zEag)*ybJ-GksWOHGa)MFq%lhIH>D+Mq$sVQQ66%K(sutO_)+Maud+lTdHNc4EX~aO zPrBt8;ZV9v+o1%IAdnR@kB(aje^rlRq45+hb*j2kV28k~4y#CRTU!a^1vyJGr9Sh? zUmIqTrB5!3fHY)=!H+!-OXZ%(sB%Q9OqLo!$hIR@CfAMDs~_%+_z?av7&R-LOyvAm zlBx1Wl(a$3-{e~gx1C+GU1C}ev!$3WU6)=fGmrTMiH7;J1P~Q)EzRd13OGuNAs|Z` zviXMw&a#Yi{JI>ZkRN2L-Iht&{Lye?Z?~H)zw8`$J09Ka_5^YB_wbGa*evv#S+Te1 zI=FfJeRUO`OJrFCei*miaRN`-OZsWNmNl>}@-e>h<@C_`&>&Lk3--FoB1gx4><^pYDlWh6x#duVE3WJ(|~ zd|7hl0ygC+HLlfcy3w=83ObnIvlR7&kvICcAv=ZVD6NxUaP%B8DS8eE!3r=BE?(Z% z>?-@AxCgA+N8?8Oq{v5_%?)YQQq)mmRkAx|^0{Q1FPW63_4*#$4Lq5PlZo=-ojnY6 z+vJI5WssoEJ@d)r1PC=QB594gOxd|HyqcZvFxs;#9YlBWs50Dp(0W0F2_aBf`g!#x zpIO>&?QhnN#^$1>^ZlsX!PKKkyiBXKEBFjAu2#2%a3N@d5ILcV4s=r&lkny;rBo6g z&2I1q$|ObC6Ed&pehge*M7cuFQfL4}Txmq5Q5a_#tu57Tlw--Rb}RMHI06J~MN5Bv zDaw{k#LtzpoB|qga0Pbt=1P!IEMOVWU9Xl=n2G8#jJw*8Gn}1ymfc8R#;k$c3=OdA z{-dRMxH3P=y;(esJi;GK;#g7%j5$W+*wqXoI0$QD98_M#5*?MZskU51M<4=~@@z=p z7NfHr-zpa7V+?UN2ws6b3*F0Bi1L}4&*UxnYxmft!a*70#~qGU460obtejqDx)J39 zKjM>L$gkLCF^on=s63Bg<5s@#mctVp+m?FIyF7nxB#8y`r`>lLpG7({5H@7pRenWm zkUu~8BXx?vU^`03PnI2#j{o>o3`IIAwJTLl(beFFGMmSykJ0gXC>iIzs zr21qmtUeht=<$J&pm0j}$VqTfGgZKyKS=B^+U+9bd0??dI_8nuJ#HLbI=UZ@F!+&& zhfQHsu{-6JYQk-yWu>v%?xrv*(&UCF!g_?$_Ti8&PH$AGdZFLdL5IDC`9@<;soODz z=EX1(+Mr=u!%BbMyPD$VlcF=$we+eVIs0)0vM<-7i*twya~&h+Xb%3S3T8uP%%<1U z%oX;d#fThEk7h4E6!#VY%}gPUlcyHAqd?ENYwWeG{i9$YYvD`=^EonEA@Db*GX?k1 zGb&RNt!#vg{Nt+Fmv5%)bh^D@<9dV4%CjXf^AN?Z(IOGdLKxk}y-@XHKsrhuWq|bI zJVXmY|X{Ua=@+5@>JS>%x42N3KORh={4& zVoRPu5RTPBZkpiq(B@&K8??hEV3#nd)wR%4wLC&IGiNB`ldgo_ZhI-jV7)b}(&95Z z3+5?05e6jMO&8hq*CsofoI;0nHoyFxC=m)ZB@~q<5W6mgX(cr4AzKW0g&tbL{Drj` z_P$vH(`xlnf+>x+@*(4-Q991XDtbK`Ea^oUV?|=p5rvtGF71GB1+S4#o9?r?XeGB% zKHMsK#5#zIA~FY9Y{R@Pe2`8Ual&p<+#zzJn!j!Y^1ZDG^NfcmAb|}6hAJ3RHtwRN zYb}hgs!JbR4i-au=?Gs{mp++9i&4*BJf?Tm|1CG=0|U3K|0 zbdqi>ox&S)FjX>^E-P7VJ4hWYj+b=KW(VOm1+qDQl`~kDTb@$!5K=gzb5}a{V>N!> zY@Z2L!JTY$;gxN@MmvE|!7RNH^}-IbyPgq9Da!_x)@Le6qPvb2>o2ucg>~4nuoqq- zy$Xp~rM^rRCq2Dl@`@l1Da-dgf_xz}GyqU3Fu*|y`mv|{JX1nuC{@@L6?sfK7oUIG z#$(*9mUi++qok=WcHAeJaV9}oU#BGQ%#G5Fjv%do005m#dBi@CEJCc3qZW(}ftYrU z+_a~TG=Sd!$Ui?H-iMs1!G0|amYbcp4ZGS2*ehhX{g^l%rg1-Mhv~#&?(i?2cp3f= zUU_8=CYK;-FEw9Ihu1MVIr;RHPdfPh(WjrH@5%k_89z_LTW9LYr=NWKiH|<<)YOzS zx&P@Wo__ix&g2K*{EvL3pJqVe>d!YpT%7>6=q|Gke++USidWXiRj6|sUpU8l?Ixz5Id%BcjpML4hN-V{ ztOJY^EkqbA>iJ`5AA4+%vf;z2igtL~rp?_qi>ps=3^%ur<{rwq5GNR_Juku6y42l= zukxIXBR_TeIOfJzY?;{?P~DjCF*Oz$b8~+-1fd*HGFZqMF`4qIizPO3zk{`GXb^IX z*AgHUJ{*wQhweKaT59}SH%hYx3KuJlC<~Wa^q7U{Qtg?2Y(~tSaV&yy!bBMum<_}M z@;KuvQt-5ohZN(bana%#7@5vvKDkDe0B2dL4yPN;hh42E1yHfV4HfAL^i#@T2)%(M zoYI514ce2~P}5c83M`W&;#sTcM#~XootjjE@B!O0N3NPD<7sKj zxvY%OmSwE!3RSkyDIuKr?U>XOM~(Ggw|#~>Nks8%X7TZOHB1f##nUZTf(OUKh+;Vp zve=Y43x3|}@1zOBH8E#jHl%PCH0CEgBQ#_9{rueN1KI!o+3=uvGkplC;JZu4zGaFMn zyOW;Ns7aX%_QPUFGF_Nj-F>-@IU9BABnuOS-Uq8uuM@8}yKy_-m`O@W}+YJ+npV*5tCrF)nwmoP# z`E%7qkztCh_mnVa+r9`v*=54(m6_6GD-;XRozSY zj`oyZRKCyHxnJT@UOEMG>l@Qy6Pl6&PJWG=TmzW>Eb6BI+3nNy0FchhE>p|ZH~_+*fz{0un{6tcP|mCsDT4`UgS?sM+by9 zZ8{nsXC2w|li6s_OZ{-RH#ZHn(#<1z11YW7GkD>rd@-y~;{hvTC$4Ia`TQbhx_57_ zN8z6IG>~;*qt#Oq>)8@U`xIu(M_9}%qJa~o#L%5E6wyILmXh{YR^lXsQs~dyiK%%Q z*NWk{u_1OnNY$gb5jY(#C?xeV;GfIP&tKfecaS7E4S4U#&sf5F)-t-==_e|<=F2hg zXX4i;YHI325-*#aAje78q?5Fh3vK~U9qFAww>G92Nop{xQM!Tl5mq1tEI6Fb)1+Ml za6&49(a@8R2|6F;6ksD$)aCZP$jjpk$fOfb})Fv*BzuH|LK{ZjkYS z3T~3))f6X){^bbWU#GaCvW$9YN56;Lo+3FB?1l$ZN)|-Dw3q>^7nPA`PHRmDG@~vJ zkBXY6WKB6Ei0qcRY;4RR*Ico<#I-mAfc<(fzs%C?lHnw#QM9gFIcPbE4D$7~(k}-x z{$mD)51DSjz^J$I0e{gX-P2~kM514ptPuli#0PqUFJdtz27Yfgo|_JwsOLno+}^!u zbETgyxj}tH8)$$kOp`^DQ0Hjm5KSr2U`Bsz88n!|7Pa!))P`wYQ^#(E&4ivKe_bau zqmDi=ikWIsQYONthxOWdnz~@-j$q6u7)RWt5H78v!<|-z0~cu0j|PFIR#j$l|2Fz8?F2kBHNKW|9GF`zEHy zV${E69f>AA+- z_yoKcVzA1{V!aI77l0xgO0H%SE=C{`C1K|%&tI}o7K?}i2InL=`neLe0DJFVRkU_% z=nQr>i86{ddI@slkGz}|v|CPXoMd@Ya{I}UCd~4TbAG0^7ArlrAhMl^v(vJyRrVqv zd-w7mRSla?*4Oo>iC01NsZsrn4NZIqd-5AizX04^wXHtS*IU51*i^ zA;n|OmO#QK<>R?tjZ0;+ZK%a6-Drti({hl)SURHF^zjmrKa8|A`o|(g4Cf;Fp`eEi zMMNCfh}wHGgL$2{Xc3HPFVUKiPl1p@Wndn<^$u_1-xv0B#1)RL4_A2v;ZLc zK7ikDZ+xoWV*GEV5i{blZ3+4-_=Yq&8snhiq|?XYkB5tF%c6FkChZr1ORbRFqw0ic zb{fq;TC<}$Y^#wrJ~ihjZZQ#>)6zRmnIJvbUlWXC*Umft@`RW8_26Px38++#T?Z zf!BwBUFfv_f!^M|-2>@#J@%8?{v5oFWqvfa@fY`fMx^slKLed1=un7{mu(z&Lz1hyj2zP$whNcC5PH$*)=UoBumrQJNmqc`$Tj+=+!y+n>3lQjwrUjKTs)9< zu^0B*QL6@j;Y~ol1Nx0yq*e`$fW7%Hq=HBd8M^p0=wh*~OXV{7O}}bh+)wcrd|`2_ zltbXZse0UTiJu^sFEe=2#jqEqDdfk%gbV#Hdx9SXmpu_=D3nE_5dEYg^ASrYJiGBC z{Di+X5Iz0NG&MoKHeqrReiE2hLJp?Qz_jrvQU-rP&6tf<3}6z!Hv73CjN<+rWP=C# zy#^03I>yDjwYkS@I7Y_#dwh)j+UMNbcyGK`pQ(+f<2@J{M#^~2#cz1rQ-kqjzQr$+X$erE_&m zS{6xR*n!83GDp~12N|OdX^Z|u6TU9_6K;^L&v)0OS1@^1t+3__0(H|@=IZCpP3@`G zy%)4BpTpKgl9a2L*5)wN1zx3~etivqpOJWQ-d^Wl$jx|ddk;|~9M%?H|#9Qmg zRtRw&L1B^OIsRQlH$=qYPXbxj(SgN!gnxowwoU_lo&MmzxWA5QVm$~M&_k55wFq}U z@747T@QHhvdP;U8Je>6>x?T7_ISTQQ<+F(pPf?xh#a`g`y)K=g2(9oFV);ujIrU{M z+)3CJc(t{f@24c&q%f&{3QfS7#%Wv$np=m_vI65{&5N5^m}XGxOyZ-hINiE(W3RSn zYR~>!y%mV}1TxPNh#UxN89-gkL9rGb^J5k~1|;j)Z;RK*FbWI+i~U8J#{&nbD;N8TT#EQfR)=rcb8wAf!V!R(@A#tD@G zU<4)%!s6737zBO?`tqdbN>tX@6^LVf@mqoyo-+KiRDGQHrpm?kzBdPsqN>#gPO>2c z3G1$qJ2gIr=jfH{$o%ZztMMN-EU*akVgew}XqE&Pr2&HM^q~RzCPH8W5|5vGAnaV; zsM|1xzJM)IHmh!A=f?0vCV!Ua@EaQi+XlZ3Rd==))Vx|i5(0e1{S3d`Nt~wm1JzLY z-R;uf(Jc4gV$tlE7f0`H=pQK9YWgSYn@U5Dmgz73hTRE6 zZ~{wA1EOn6h`?V&JtcCaOS}Wph=ku7^?4c-w%HPO7JOy&#nM8&r-|Ro?2Bay6aF^k z-)ro)U$8;8`2*Fw#w>VWmT*$iPWgQ#J;=iIc9&C=?kk} zjfj&`S&m=4g=^F~YjL0bO=@$)X9LZ2sHQ*D+`#ROY`ZZz^H|@Bxo+Zf=Uy70zzHu; zf|Na!WT>$$C<;5L8vj8^kpk^ZQO`A7TZlkZtj+mjT+7b$ytf8+4()5Sf<Kf>jhjCfQI%n*YoOBK|Swf@;e!MSaW(hTn?bcy~S4I!SdJ2Hs+?KApu*4Qoq++ ziC0|G{L)!2e=p7*L4x&JIzPsotTUT~w24(Qo|uV!^>H?sYr!&YU}xm;VKX-6`)ZxI zxGP*YS@*cMn6)Z4Ta`BT1ZpG$$PPHCa7>`aa?CgL(gIq0yk@kd&JJxgTp`ySGbm#( z^>$4c^7{P^rX@An)~{$=e^}cZQ+ew)>YmnBQ+xMnz!*lmfvC{S(kTp{j=hF}KUGD} zZWTGZ!^zp*D5BJ@pk?4B${-3n1wbG61pSg0ji|qzo%1r7L06J+A-Y6LEhI2m z&&*9{`n-v!_B3xo^K}a@h4~d5k?BMqL%2_AvYHgG3R%yJH}%{Ug`M8@v}3#36wzY5 zz>&^jG7Br1W2q4;T0kxAd{vujrBu;SNow+ek?O{oR-$O{HR)ldHdSlYCTm{i7cIhw zOwBY-&=FW78A#Xxs|LUsGXT!Zp(SwWhp6`hS!7sy?52MeOwA5|Xife631S2fc0%Z? zIMEnGSx_UnnC9K4wmE7NB*7hVZln_!`BWzA!w#Ki!{dYQfq1$LWD!-sEQ6;9OYmyx zK!18kP^{wzvrA+{(eeHE`Z|rdHhZ_=NBX?ut@s*pv+X$#Mv20%EAqFu%xS}>yr{{@ z!Y4g<+1FDL`f@&K^PlVMYxNdnHz=>*X4MI-50$%QaG!<3xK1*KO6E#Hxyx?gyYgAHeN7?9Ii zbKM9Bt~e6bX(P;EB|Te~Ota+$8&h*IIRfF7mPATR@--$kdx|YO)5-#o+ImmSo^*j3 z26heS;u=VrRBbCo(;+|INYn+`EAmV>q_5e&qri8PhLiOn07T9z%a9ThPG`^f;dIt$ z$c4++2XnZLGh!?Hqv=T6qUr2ClkiL5oW4LHqTC!mw$pRN%-wPYbX+U^$Tnv1gqr87 z+dB*ARvK4Dy9Bl+?V)d-u)|)5`m=J6f}I|weyBaN44K#thw`UVQkLPlg>@Yyi=Prd z^(2(gz&+k^~4e=?)>Z*Gd@cG>R!GQ+Rc<%n+7TeIxdoJ6YwXmt*>1v(vp z&Vt{DwQQPY_ZP^HW5u^BBk&Az&DS_Hmu1|Qx)5pE4jyk`t;xB(i?dXUCuU@+&#q{T zq~_@(FMR6Q=_7}8_E-jVmk)G}E?E{>U-ZSRS!iQCdvQ*s-^M(2@P!QlYY|{A9uT-p zFDeqtC4X&pan4)yi(_{7(wz5#zuIIb{oZa6@-FzRfRcAc6QwTHy(9jm@!CXf{GxZ< z&u=H3A$qA4DkTue>P!9-yD8xwuY2;I8z|pOpW}y^%5|%= z-bFmMyfAxqZd$g-Jq4SJlXLYM{L4!`k9O+hCF_!R(K}Xeog%AR_OO9y;FTnHx+DPw zj4*-0A}||ZN{?sMNw1IU&p7mI1`t>fT}hWq#id+jLsq@Ny618R1d&nSnd# zJ?j@*H~aFO_oCmMeL26}H>a3Cxz7^Cq&=&9&_6$W80dbmnYQC39QR-J4zep5*e2wK zd6@Lw2;kOpWyC8!jKYQ1VUG&6Ui4&%7UtZTMxg#H-U%jFzM^bIPOwd`bx3CniAKo2 z?TdQRzDc`Qn|Hc4pNhS8i52WDzg()%!QtE-w?sEC=oXo32wbg;phs9E+`53zHS?GG z73r3|EbZ~dRT){H3JgSb4QJS#i

iuiK)^Tx=}6!Ekv4gdq5X=LwovSSIddhI|>6 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 Up&(_T9RL6T07*qoM6N<$f_$DaJpcdz literal 0 HcmV?d00001 diff --git a/docs/images/add_package_url.png b/docs/images/add_package_url.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8f63c72f9a872a3784551096bbaf5a55403ec2 GIT binary patch literal 105988 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�ZlDtlrL*fRk!K3eRK0T#pRXx#7-tV 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%0DLGtz* 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 SUZ=kR0000!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/img/dash.png b/docs/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..1c7080c --- /dev/null +++ b/docs/index.html @@ -0,0 +1,398 @@ + + + + Clickstream Reference + + + + + + + + + + + + +

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

AWS Solution Clickstream Analytics SDK for Swift

+

Introduction

+ +

Clickstream Swift SDK can help you easily collect and report in-app events from iOS devices to AWS. This SDK is part of an AWS solution - Clickstream Analytics on AWS, which provisions data pipeline to ingest and process event data into AWS services such as S3, Redshift.

+ +

The SDK relies on the Amplify for Swift Core Library and is developed according to the Amplify Swift SDK plug-in specification. In addition, we’ve added features that automatically collect common user events and attributes (e.g., screen view, first open) to simplify data collection for users.

+ +

Visit our Documentation site and to learn more about Clickstream Swift SDK.

+

Platform Support

+ +

The Clickstream SDK supports iOS 13+.

+ +

API Documentation

+ + +

Integrate SDK

+ +

Clickstream requires Xcode 13.4 or higher to build.

+

1.Add Package

+ +

We use Swift Package Manager to distribute Clickstream Swift SDK, open your project in Xcode and select File > Add Pckages.

+ +

+ +

Enter the Clickstream Library for Swift GitHub repo URL (https://github.com/awslabs/clickstream-swift) into the search bar, you’ll see the Clickstream Library for Swift repository rules for which version of Clickstream you want Swift Package Manager to install. Choose Up to Next Major Version, then click Add Package, make the Clickstream product checked as default, and click Add Package again.

+ +

+

2.Parameter configuration

+ +

Downlod your amplifyconfiguration.json file from your Clickstream solution control plane, and paste it to your project root folder:

+ +

+ +

the json file will be as follows:

+
{
+  "analytics": {
+    "plugins": {
+      "awsClickstreamPlugin ": {
+        "appId": "appId",
+        "endpoint": "https://example.com/collect",
+        "isCompressEvents": true,
+        "autoFlushEventsInterval": 10000,
+        "isTrackAppExceptionEvents": false
+      }
+    }
+  }
+}
+
+ +

Your appId and endpoint are already set up in it, here’s an explanation of each property:

+ +
    +
  • appId: the app id of your project in control plane.
  • +
  • endpoint: the endpoint url you will upload the event to AWS server.
  • +
  • isCompressEvents: whether to compress event content when uploading events, default is true
  • +
  • autoFlushEventsInterval: event sending interval, the default is 10s
  • +
  • isTrackAppExceptionEvents: whether auto track exception event in app, default is false
  • +
+

3.Initialize the SDK

+ +

Once you have configured the parameters, you need to initialize it in your app delegate’s application(_:didFinishLaunchingWithOptions:) lifecycle method:

+

3.1 Initialize the SDK with default configuration

+
import Clickstream
+...
+func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+    do {
+        try ClickstreamAnalytics.initSDK()
+    } catch {
+        assertionFailure("Fail to initialize ClickstreamAnalytics: \(error)")
+    }
+    return true
+}
+
+

3.2 Initialize the SDK with global attributes and custom configuration

+ +

The following example code shows how to add traffic source fields as global attributes when initializing the SDK.

+
import Clickstream
+...
+func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+    do {
+        let configuration = ClickstreamConfiguration()
+            .withAppId("your appId")
+            .withEndpoint("https://example.com/collect")
+            .withLogEvents(true)
+            .withInitialGlobalAttributes([
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_SOURCE: "amazon",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_MEDIUM: "cpc",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN: "summer_promotion",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CAMPAIGN_ID: "summer_promotion_01",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_TERM: "running_shoes",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CONTENT: "banner_ad_1",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID: "amazon_ad_123",
+                ClickstreamAnalytics.Attr.TRAFFIC_SOURCE_CLID_PLATFORM: "amazon_ads",
+                ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "App Store"
+            ])
+        try ClickstreamAnalytics.initSDK(configuration)
+    } catch {
+        assertionFailure("Fail to initialize ClickstreamAnalytics: \(error)")
+    }
+    return true
+}
+
+ +

By default, we will use the configurations in amplifyconfiguration.json file. If you add a custom configuration, the added configuration items will override the default values.

+ +

You can also add all the configuration parameters you need in the initSDK method without using the amplifyconfiguration.json file.

+

3.3 SwiftUI configuration

+ +

If your project is developed with SwiftUI, you need to create an application delegate and attach it to your App through UIApplicationDelegateAdaptor.

+
@main
+struct YourApp: App {
+    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
+    var body: some Scene {
+        WindowGroup {
+            YourView()
+        }
+    }
+}
+
+ +

Clickstream Swift SDK depends on method swizzling to automatically record screen views. SwiftUI apps must record screen view events manually, and disable automatic tracking of screen view events by setting configuration.withTrackScreenViewEvents(false) when the SDK is initialized.

+

4. Update Configuration

+
import Clickstream
+
+// configure the sdk after initialize.
+do {
+    let configuration = try ClickstreamAnalytics.getClickstreamConfiguration()
+    configuration.withAppId("your appId")
+        .withEndpoint("https://example.com/collect")
+        .withLogEvents(true)
+        .withCompressEvents(true)
+        .withSessionTimeoutDuration(1800000)
+        .withTrackAppExceptionEvents(true)
+        .withTrackScreenViewEvents(true)
+        .withTrackUserEngagementEvents(true)
+} catch {
+    print("Failed to config ClickstreamAnalytics: \(error)")
+}
+
+
+

Note

+

this configuation will override the default configuation in amplifyconfiguration.json file

+ +
+

Start using

+

Recored event.

+ +

Add the following code where you need to complete the event report.

+
import Clickstream
+
+let attributes: ClickstreamAttribute = [
+    "Channel": "apple",
+    "Successful": true,
+    "ProcessDuration": 12.33,
+    "UserAge": 20,
+]
+ClickstreamAnalytics.recordEvent("testEvent", attributes)
+
+// for record an event with event name
+ClickstreamAnalytics.recordEvent("button_click")
+
+

Record event with items

+ +

You can add the following code to log an event with an item.

+ +

Note: Only pipelines from version 1.1+ can handle items with custom attribute.

+
import Clickstream
+
+let attributes: ClickstreamAttribute = [
+    ClickstreamAnalytics.Item.ITEM_ID: "123",
+    ClickstreamAnalytics.Item.CURRENCY: "USD",
+    "event_category": "recommended"
+]
+
+let item_book: ClickstreamAttribute = [
+    ClickstreamAnalytics.Item.ITEM_ID: 123,
+    ClickstreamAnalytics.Item.ITEM_NAME: "Nature",
+    ClickstreamAnalytics.Item.ITEM_CATEGORY: "book",
+    ClickstreamAnalytics.Item.PRICE: 99.9,
+    "book_publisher": "Nature Research"
+]
+ClickstreamAnalytics.recordEvent("view_item", attributes, [item_book])
+
+

Record Screen View events manually

+ +

By default, SDK will automatically track the preset _screen_view event when ViewController triggers viewDidAppear.

+ +

You can also manually record screen view events whether or not automatic screen view tracking is enabled, add the following code to record a screen view event with two attributes.

+ +
    +
  • SCREEN_NAME Required. Your screen’s name.
  • +
  • SCREEN_UNIQUE_ID Optional. Set the hashValue of your ViewController or UIView. If you do not set, SDK will set a default value based on the current ViewController’s hashValue.
  • +
+
import Clickstream
+
+ClickstreamAnalytics.recordEvent(ClickstreamAnalytics.EventName.SCREEN_VIEW, [
+    ClickstreamAnalytics.Attr.SCREEN_NAME: "HomeView",
+    ClickstreamAnalytics.Attr.SCREEN_UNIQUE_ID: homeView.hashValue
+])
+
+

Add global attribute

+
import Clickstream
+
+let globalAttribute: ClickstreamAttribute = [
+    ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "apple",
+    "class": 6,
+    "level": 5.1,
+    "isOpenNotification": true,
+]
+ClickstreamAnalytics.addGlobalAttributes(globalAttribute)
+
+// for delete an global attribute
+ClickstreamAnalytics.deleteGlobalAttributes("level")
+
+

Login and logout

+
import Clickstream
+
+// when user login usccess.
+ClickstreamAnalytics.setUserId("userId")
+
+// when user logout
+ClickstreamAnalytics.setUserId(nil)
+
+ +

When we log into another user, we will clear the before user’s user attributes, after setUserId() you need to add new user’s attribute.

+

Add user attribute

+
import Clickstream
+
+let userAttributes : ClickstreamAttribute=[
+    "_user_age": 21,
+    "_user_name": "carl"
+]
+ClickstreamAnalytics.addUserAttributes(userAttributes)
+
+ +

Current login user‘s attributes will be cached in disk, so the next time app launch you don’t need to set all user’s attribute again, of course you can update the current user’s attribute when it changes.

+

Log the event json in debug mode

+
import Clickstream
+
+// log the event in debug mode.
+do {
+    var configuration = try ClickstreamAnalytics.getClickstreamConfiguration()
+    configuration.isLogEvents = true
+} catch {
+    print("Failed to config ClickstreamAnalytics: \(error)")
+}
+
+ +

After config configuration.isLogEvents = true and when you record an event, you can see the event json at your Xcode log pannel by filter EventRecorder.

+

Send event immediately

+
import Clickstream
+// for send event immediately.
+ClickstreamAnalytics.flushEvents()
+
+

Disable SDK

+ +

You can disable the SDK in the scenario you need. After disabling the SDK, the SDK will not handle the logging and sending of any events. Of course you can enable the SDK when you need to continue logging events.

+
import Clickstream
+
+// disable SDK
+ClickstreamAnalytics.disable()
+
+// enable SDK
+ClickstreamAnalytics.enable()
+
+

How to build&test locally

+

Config your code format

+ +

Install swiftformat plugin in your Xcode, and config shortcut for code format.

+

Config your code lint

+ +

Install swiftlint, and execute the below command at the project root folder:

+
swiftlint
+
+

Build

+ +

Open an termial window, at the root project folder to execute:

+
swift build
+
+

Test

+
swift test
+
+

Security

+ +

See CONTRIBUTING for more information.

+

License

+ +

This library is licensed under Apache 2.0 License.

+ +
+
+ +
+
+ + diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js new file mode 100755 index 0000000..1984416 --- /dev/null +++ b/docs/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 0000000..359cdbb --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(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/jquery.min.js b/docs/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/docs/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/js/typeahead.jquery.js b/docs/js/typeahead.jquery.js new file mode 100644 index 0000000..bcb734b --- /dev/null +++ b/docs/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + 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) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + 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 = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + 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 ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + 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 (this.autoselect) { + 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.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + 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) { + if (typeof data.val === "string") { + 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, + menu: $menu + }, 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/search.json b/docs/search.json new file mode 100644 index 0000000..6393e8b --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +{"Typealiases.html#/s:11Clickstream0A9Attributea":{"name":"ClickstreamAttribute","abstract":"

the attribute for Clickstream which support String, Int, Int64, Double and Bool

"},"Extensions.html#/s:s5Int64V":{"name":"Int64","abstract":"

for support Int64 attribute value

"},"Extensions.html#/c:@SA@NSDecimal":{"name":"Decimal"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO7ITEM_IDSSvpZ":{"name":"ITEM_ID","abstract":"

The id of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO9ITEM_NAMESSvpZ":{"name":"ITEM_NAME","abstract":"

The name of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO11LOCATION_IDSSvpZ":{"name":"LOCATION_ID","abstract":"

The location id of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO10ITEM_BRANDSSvpZ":{"name":"ITEM_BRAND","abstract":"

The brand of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO8CURRENCYSSvpZ":{"name":"CURRENCY","abstract":"

The currency of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO5PRICESSvpZ":{"name":"PRICE","abstract":"

The price of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO8QUANTITYSSvpZ":{"name":"QUANTITY","abstract":"

The quantity of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13CREATIVE_NAMESSvpZ":{"name":"CREATIVE_NAME","abstract":"

The creative name of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13CREATIVE_SLOTSSvpZ":{"name":"CREATIVE_SLOT","abstract":"

The creative slot of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO13ITEM_CATEGORYSSvpZ":{"name":"ITEM_CATEGORY","abstract":"

The category of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY2SSvpZ":{"name":"ITEM_CATEGORY2","abstract":"

The category2 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY3SSvpZ":{"name":"ITEM_CATEGORY3","abstract":"

The category3 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY4SSvpZ":{"name":"ITEM_CATEGORY4","abstract":"

The category4 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Item.html#/s:11Clickstream0A9AnalyticsO4ItemO14ITEM_CATEGORY5SSvpZ":{"name":"ITEM_CATEGORY5","abstract":"

The category5 of the item

","parent_name":"Item"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO11SCREEN_NAMESSvpZ":{"name":"SCREEN_NAME","abstract":"

Preset attribute screen name

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO16SCREEN_UNIQUE_IDSSvpZ":{"name":"SCREEN_UNIQUE_ID","abstract":"

Preset attribute screen unique id

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO015TRAFFIC_SOURCE_E0SSvpZ":{"name":"TRAFFIC_SOURCE_SOURCE","abstract":"

Preset attribute traffic source source

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO21TRAFFIC_SOURCE_MEDIUMSSvpZ":{"name":"TRAFFIC_SOURCE_MEDIUM","abstract":"

Preset attribute traffic source medium

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO23TRAFFIC_SOURCE_CAMPAIGNSSvpZ":{"name":"TRAFFIC_SOURCE_CAMPAIGN","abstract":"

Preset attribute traffic source campaign

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO26TRAFFIC_SOURCE_CAMPAIGN_IDSSvpZ":{"name":"TRAFFIC_SOURCE_CAMPAIGN_ID","abstract":"

Preset attribute traffic source campaign id

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19TRAFFIC_SOURCE_TERMSSvpZ":{"name":"TRAFFIC_SOURCE_TERM","abstract":"

Preset attribute traffic source term

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO22TRAFFIC_SOURCE_CONTENTSSvpZ":{"name":"TRAFFIC_SOURCE_CONTENT","abstract":"

Preset attribute traffic source content

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19TRAFFIC_SOURCE_CLIDSSvpZ":{"name":"TRAFFIC_SOURCE_CLID","abstract":"

Preset attribute traffic source clid

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO28TRAFFIC_SOURCE_CLID_PLATFORMSSvpZ":{"name":"TRAFFIC_SOURCE_CLID_PLATFORM","abstract":"

Preset attribute traffic source clid platform

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO19APP_INSTALL_CHANNELSSvpZ":{"name":"APP_INSTALL_CHANNEL","abstract":"

Preset attribute app install channel

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO5VALUESSvpZ":{"name":"VALUE","abstract":"

Preset attribute event value

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/Attr.html#/s:11Clickstream0A9AnalyticsO4AttrO8CURRENCYSSvpZ":{"name":"CURRENCY","abstract":"

Preset attribute event currency

","parent_name":"Attr"},"Enums/ClickstreamAnalytics/EventName.html#/s:11Clickstream0A9AnalyticsO9EventNameO11SCREEN_VIEWSSvpZ":{"name":"SCREEN_VIEW","parent_name":"EventName"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO7initSDKyyAA0A13ConfigurationCSgKFZ":{"name":"initSDK(_:)","abstract":"

Init ClickstreamAnalytics

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11recordEventyySSFZ":{"name":"recordEvent(_:)","abstract":"

Use this method to record event

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11recordEventyySS_SDySS7Amplify0B13PropertyValue_pGSayAGGtFZ":{"name":"recordEvent(_:_:_:)","abstract":"

The method to record event with ClickstreamAttribute

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO11flushEventsyyFZ":{"name":"flushEvents()","abstract":"

Use this method to send events immediately

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO19addGlobalAttributesyySDySS7Amplify0B13PropertyValue_pGFZ":{"name":"addGlobalAttributes(_:)","abstract":"

Add global attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO22deleteGlobalAttributesyySSd_tFZ":{"name":"deleteGlobalAttributes(_:)","abstract":"

Delete global attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO17addUserAttributesyySDySS7Amplify0B13PropertyValue_pGFZ":{"name":"addUserAttributes(_:)","abstract":"

Add user attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO9setUserIdyySSSgFZ":{"name":"setUserId(_:)","abstract":"

Set user id for login and logout

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO03getA13ConfigurationAA0aD0CyKFZ":{"name":"getClickstreamConfiguration()","abstract":"

Get Clickstream configuration, please config it after initialize sdk

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO7disableyyFZ":{"name":"disable()","abstract":"

Disable the SDK

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html#/s:11Clickstream0A9AnalyticsO6enableyyFZ":{"name":"enable()","abstract":"

Enable the SDK

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/EventName.html":{"name":"EventName","abstract":"

ClickstreamAnalytics preset events

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/Attr.html":{"name":"Attr","abstract":"

ClickstreamANalytics preset attributes

","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics/Item.html":{"name":"Item","abstract":"

ClickstreamAnalytics preset item attributes","parent_name":"ClickstreamAnalytics"},"Enums/ClickstreamAnalytics.html":{"name":"ClickstreamAnalytics","abstract":"

ClickstreamAnalytics api for swift

"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withAppId:":{"name":"withAppId(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withEndpoint:":{"name":"withEndpoint(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withSendEventInterval:":{"name":"withSendEventInterval(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackAppExceptionEvents:":{"name":"withTrackAppExceptionEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackScreenViewEvents:":{"name":"withTrackScreenViewEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withTrackUserEngagementEvents:":{"name":"withTrackUserEngagementEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withCompressEvents:":{"name":"withCompressEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withLogEvents:":{"name":"withLogEvents(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withAuthCookie:":{"name":"withAuthCookie(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withSessionTimeoutDuration:":{"name":"withSessionTimeoutDuration(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/s:11Clickstream0A13ConfigurationC27withInitialGlobalAttributesyACSDySS7Amplify22AnalyticsPropertyValue_pGF":{"name":"withInitialGlobalAttributes(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamConfiguration.html#/c:@M@Clickstream@objc(cs)ClickstreamConfiguration(im)withInitialGlobalAttributesObjc:":{"name":"withInitialGlobalAttributesObjc(_:)","parent_name":"ClickstreamConfiguration"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_ID":{"name":"ITEM_ID","abstract":"

The id of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_NAME":{"name":"ITEM_NAME","abstract":"

The name of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)LOCATION_ID":{"name":"LOCATION_ID","abstract":"

The location id of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_BRAND":{"name":"ITEM_BRAND","abstract":"

The brand of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CURRENCY":{"name":"CURRENCY","abstract":"

The currency of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)PRICE":{"name":"PRICE","abstract":"

The price of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)QUANTITY":{"name":"QUANTITY","abstract":"

The quantity of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CREATIVE_NAME":{"name":"CREATIVE_NAME","abstract":"

The creative name of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)CREATIVE_SLOT":{"name":"CREATIVE_SLOT","abstract":"

The creative slot of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY":{"name":"ITEM_CATEGORY","abstract":"

The category of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY2":{"name":"ITEM_CATEGORY2","abstract":"

The category2 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY3":{"name":"ITEM_CATEGORY3","abstract":"

The category3 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY4":{"name":"ITEM_CATEGORY4","abstract":"

The category4 of the item

","parent_name":"ClickstreamItemKey"},"Classes/ClickstreamItemKey.html#/c:@M@Clickstream@objc(cs)ClickstreamItemKey(cpy)ITEM_CATEGORY5":{"name":"ITEM_CATEGORY5","abstract":"

The category5 of the item

","parent_name":"ClickstreamItemKey"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)SCREEN_NAME":{"name":"SCREEN_NAME","abstract":"

Preset attribute screen name

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)SCREEN_UNIQUE_ID":{"name":"SCREEN_UNIQUE_ID","abstract":"

Preset attribute screen unique id

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_SOURCE":{"name":"TRAFFIC_SOURCE_SOURCE","abstract":"

Preset attribute traffic source source

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_MEDIUM":{"name":"TRAFFIC_SOURCE_MEDIUM","abstract":"

Preset attribute traffic source medium

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CAMPAIGN":{"name":"TRAFFIC_SOURCE_CAMPAIGN","abstract":"

Preset attribute traffic source campaign

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CAMPAIGN_ID":{"name":"TRAFFIC_SOURCE_CAMPAIGN_ID","abstract":"

Preset attribute traffic source campaign id

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_TERM":{"name":"TRAFFIC_SOURCE_TERM","abstract":"

Preset attribute traffic source term

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CONTENT":{"name":"TRAFFIC_SOURCE_CONTENT","abstract":"

Preset attribute traffic source content

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CLID":{"name":"TRAFFIC_SOURCE_CLID","abstract":"

Preset attribute traffic source clid

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)TRAFFIC_SOURCE_CLID_PLATFORM":{"name":"TRAFFIC_SOURCE_CLID_PLATFORM","abstract":"

Preset attribute traffic source clid platform

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)APP_INSTALL_CHANNEL":{"name":"APP_INSTALL_CHANNEL","abstract":"

Preset attribute app install channel

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)VALUE":{"name":"VALUE","abstract":"

Preset attribute event value

","parent_name":"Attr"},"Classes/Attr.html#/c:@M@Clickstream@objc(cs)Attr(cpy)CURRENCY":{"name":"CURRENCY","abstract":"

Preset attribute event currency

","parent_name":"Attr"},"Classes/EventName.html#/c:@M@Clickstream@objc(cs)EventName(cpy)SCREEN_VIEW":{"name":"SCREEN_VIEW","abstract":"

Preset event screen view

","parent_name":"EventName"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)initSDKAndReturnError:":{"name":"initSDK()","abstract":"

Init the Clickstream sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)initSDK:error:":{"name":"initSDK(_:)","abstract":"

Init the Clickstream sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent:":{"name":"recordEvent(_:)","abstract":"

Use this method to record event

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent::":{"name":"recordEvent(_:_:)","abstract":"

The method to record event with attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)recordEvent:::":{"name":"recordEvent(_:_:_:)","abstract":"

The method to record event with attributes and items

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)flushEvents":{"name":"flushEvents()","abstract":"

Use this method to send events immediately

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)addGlobalAttributes:":{"name":"addGlobalAttributes(_:)","abstract":"

Add global attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)deleteGlobalAttributes:":{"name":"deleteGlobalAttributes(_:)","abstract":"

Delete global attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)addUserAttributes:":{"name":"addUserAttributes(_:)","abstract":"

Add user attributes

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)setUserId:":{"name":"setUserId(_:)","abstract":"

Set user id for login and logout

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)getClickstreamConfigurationAndReturnError:":{"name":"getClickstreamConfiguration()","abstract":"

Get Clickstream configuration, please config it after initialize sdk

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)disable":{"name":"disable()","abstract":"

Disable the SDK

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html#/c:@M@Clickstream@objc(cs)ClickstreamObjc(cm)enable":{"name":"enable()","abstract":"

Enable the SDK

","parent_name":"ClickstreamObjc"},"Classes/ClickstreamObjc.html":{"name":"ClickstreamObjc","abstract":"

ClickstreamAnalytics api for objective-c

"},"Classes/EventName.html":{"name":"EventName","abstract":"

ClickstreamAnalytics preset events

"},"Classes/Attr.html":{"name":"Attr","abstract":"

ClickstreamANalytics preset attributes

"},"Classes/ClickstreamItemKey.html":{"name":"ClickstreamItemKey","abstract":"

ClickstreamAnalytics preset item keys for objective-c"},"Classes/ClickstreamConfiguration.html":{"name":"ClickstreamConfiguration","abstract":"

The configuration object for clickstream, modify the params after sdk initialize

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json new file mode 100644 index 0000000..f5325ca --- /dev/null +++ b/docs/undocumented.json @@ -0,0 +1,96 @@ +{ + "warnings": [ + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/ClickstreamAnalytics.swift", + "line": 111, + "symbol": "ClickstreamAnalytics.EventName.SCREEN_VIEW", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 73, + "symbol": "ClickstreamConfiguration.withAppId(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 78, + "symbol": "ClickstreamConfiguration.withEndpoint(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 83, + "symbol": "ClickstreamConfiguration.withSendEventInterval(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 88, + "symbol": "ClickstreamConfiguration.withTrackAppExceptionEvents(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 93, + "symbol": "ClickstreamConfiguration.withTrackScreenViewEvents(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 98, + "symbol": "ClickstreamConfiguration.withTrackUserEngagementEvents(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 103, + "symbol": "ClickstreamConfiguration.withCompressEvents(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 108, + "symbol": "ClickstreamConfiguration.withLogEvents(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 113, + "symbol": "ClickstreamConfiguration.withAuthCookie(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 118, + "symbol": "ClickstreamConfiguration.withSessionTimeoutDuration(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 123, + "symbol": "ClickstreamConfiguration.withInitialGlobalAttributes(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/runner/work/clickstream-swift/clickstream-swift/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift", + "line": 128, + "symbol": "ClickstreamConfiguration.withInitialGlobalAttributesObjc(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + } + ], + "source_directory": "/Users/runner/work/clickstream-swift/clickstream-swift" +} \ No newline at end of file