From 8e267824752a7ac64e5de63386e8ff7f26c41bd3 Mon Sep 17 00:00:00 2001 From: runner Date: Fri, 19 Jul 2024 06:15:08 +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 -> 88400 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..09f982a4e3b0951a5d56a01fb64f473e458fde67 GIT binary patch literal 88400 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 bK%`j(1!vx-kTlL%=z&f^OFAKK%Yc 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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