From a9b4b2b162d6f6e2d938de052d5c28a18295c71d Mon Sep 17 00:00:00 2001 From: wes Date: Wed, 9 Apr 2025 18:09:10 -0400 Subject: [PATCH] Release 1.7.2 --- .gitignore | 1 + ButtonMerchant.podspec | 4 +- Gemfile.lock | 78 +- Source/Info.plist | 2 +- Source/Version/Version.generated.swift | 2 +- .../Version/VersionTests.generated.swift | 4 +- docs/history/1.7.2/Classes.html | 225 +++ .../history/1.7.2/Classes/ButtonMerchant.html | 554 ++++++ docs/history/1.7.2/Classes/ButtonProduct.html | 372 ++++ docs/history/1.7.2/Classes/Order.html | 359 ++++ .../history/1.7.2/Classes/Order/Customer.html | 231 +++ .../history/1.7.2/Classes/Order/LineItem.html | 364 ++++ docs/history/1.7.2/Enums.html | 218 +++ .../1.7.2/Enums/ButtonMerchantError.html | 191 ++ .../1.7.2/Enums/ConfigurationError.html | 203 ++ docs/history/1.7.2/Enums/NetworkError.html | 166 ++ docs/history/1.7.2/Protocols.html | 217 +++ docs/history/1.7.2/Protocols/Activity.html | 232 +++ .../Protocols/ButtonProductCompatible.html | 382 ++++ .../history/1.7.2/Protocols/Configurable.html | 170 ++ docs/history/1.7.2/Structs.html | 163 ++ docs/history/1.7.2/badge.svg | 28 + docs/history/1.7.2/css/highlight.css | 202 ++ docs/history/1.7.2/css/jazzy.css | 404 ++++ .../ButtonMerchant.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 225 +++ .../Documents/Classes/ButtonMerchant.html | 554 ++++++ .../Documents/Classes/ButtonProduct.html | 372 ++++ .../Resources/Documents/Classes/Order.html | 359 ++++ .../Documents/Classes/Order/Customer.html | 231 +++ .../Documents/Classes/Order/LineItem.html | 364 ++++ .../Contents/Resources/Documents/Enums.html | 218 +++ .../Documents/Enums/ButtonMerchantError.html | 191 ++ .../Documents/Enums/ConfigurationError.html | 203 ++ .../Documents/Enums/NetworkError.html | 166 ++ .../Resources/Documents/Protocols.html | 217 +++ .../Documents/Protocols/Activity.html | 232 +++ .../Protocols/ButtonProductCompatible.html | 382 ++++ .../Documents/Protocols/Configurable.html | 170 ++ .../Contents/Resources/Documents/Structs.html | 163 ++ .../Resources/Documents/css/highlight.css | 202 ++ .../Resources/Documents/css/jazzy.css | 404 ++++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 162 ++ .../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 | 1694 +++++++++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 28672 bytes docs/history/1.7.2/docsets/ButtonMerchant.tgz | Bin 0 -> 80257 bytes docs/history/1.7.2/img/carat.png | Bin 0 -> 274 bytes docs/history/1.7.2/img/dash.png | Bin 0 -> 1338 bytes docs/history/1.7.2/img/spinner.gif | Bin 0 -> 1849 bytes docs/history/1.7.2/index.html | 162 ++ docs/history/1.7.2/js/jazzy.js | 74 + docs/history/1.7.2/js/jazzy.search.js | 74 + docs/history/1.7.2/js/jquery.min.js | 2 + docs/history/1.7.2/js/lunr.min.js | 6 + docs/history/1.7.2/js/typeahead.jquery.js | 1694 +++++++++++++++++ docs/history/1.7.2/search.json | 1 + docs/history/1.7.2/undocumented.json | 19 + docs/latest | 2 +- fastlane/Build | 68 + fastlane/Fastfile | 1 + fastlane/README.md | 8 + 69 files changed, 13526 insertions(+), 43 deletions(-) create mode 100644 docs/history/1.7.2/Classes.html create mode 100644 docs/history/1.7.2/Classes/ButtonMerchant.html create mode 100644 docs/history/1.7.2/Classes/ButtonProduct.html create mode 100644 docs/history/1.7.2/Classes/Order.html create mode 100644 docs/history/1.7.2/Classes/Order/Customer.html create mode 100644 docs/history/1.7.2/Classes/Order/LineItem.html create mode 100644 docs/history/1.7.2/Enums.html create mode 100644 docs/history/1.7.2/Enums/ButtonMerchantError.html create mode 100644 docs/history/1.7.2/Enums/ConfigurationError.html create mode 100644 docs/history/1.7.2/Enums/NetworkError.html create mode 100644 docs/history/1.7.2/Protocols.html create mode 100644 docs/history/1.7.2/Protocols/Activity.html create mode 100644 docs/history/1.7.2/Protocols/ButtonProductCompatible.html create mode 100644 docs/history/1.7.2/Protocols/Configurable.html create mode 100644 docs/history/1.7.2/Structs.html create mode 100644 docs/history/1.7.2/badge.svg create mode 100644 docs/history/1.7.2/css/highlight.css create mode 100644 docs/history/1.7.2/css/jazzy.css create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Info.plist create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonMerchant.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonProduct.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/Customer.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/LineItem.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ButtonMerchantError.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ConfigurationError.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/NetworkError.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Activity.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/ButtonProductCompatible.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Configurable.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Structs.html create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/img/dash.png create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/index.html create mode 100755 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/search.json create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/history/1.7.2/docsets/ButtonMerchant.tgz create mode 100755 docs/history/1.7.2/img/carat.png create mode 100755 docs/history/1.7.2/img/dash.png create mode 100644 docs/history/1.7.2/img/spinner.gif create mode 100644 docs/history/1.7.2/index.html create mode 100755 docs/history/1.7.2/js/jazzy.js create mode 100644 docs/history/1.7.2/js/jazzy.search.js create mode 100644 docs/history/1.7.2/js/jquery.min.js create mode 100644 docs/history/1.7.2/js/lunr.min.js create mode 100644 docs/history/1.7.2/js/typeahead.jquery.js create mode 100644 docs/history/1.7.2/search.json create mode 100644 docs/history/1.7.2/undocumented.json create mode 100644 fastlane/Build diff --git a/.gitignore b/.gitignore index d89780c..02e2f06 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ ## Build generated build/ +builds/ DerivedData/ ## Various settings diff --git a/ButtonMerchant.podspec b/ButtonMerchant.podspec index b436c84..47d41d5 100644 --- a/ButtonMerchant.podspec +++ b/ButtonMerchant.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'ButtonMerchant' - s.version = '1.7.1' + s.version = '1.7.2' s.summary = 'An open source client library for Button merchants.' s.description = <<-DESC The Button Merchant library is a light-weight, open-source method @@ -18,7 +18,7 @@ and join the Button Marketplace. s.swift_version = '5.0' s.source_files = 'Source/**/*.{swift,h}' - s.resources = ["Source/Resources/PrivacyInfo.xcprivacy"] + s.resource_bundle = { 'ButtonMerchant' => "Source/Resources/PrivacyInfo.xcprivacy" } s.pod_target_xcconfig = { "SWIFT_VERSION" => 5.3 } end diff --git a/Gemfile.lock b/Gemfile.lock index d7e4074..6dff5b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -22,21 +22,23 @@ GEM json (>= 1.5.1) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.970.0) - aws-sdk-core (3.202.2) + aws-eventstream (1.3.2) + aws-partitions (1.1084.0) + aws-sdk-core (3.222.1) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) + aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) + base64 jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.88.0) - aws-sdk-core (~> 3, >= 3.201.0) + logger + aws-sdk-kms (1.99.0) + aws-sdk-core (~> 3, >= 3.216.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.159.0) - aws-sdk-core (~> 3, >= 3.201.0) + aws-sdk-s3 (1.183.0) + aws-sdk-core (~> 3, >= 3.216.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.9.1) + aws-sigv4 (1.11.0) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) @@ -87,7 +89,7 @@ GEM concurrent-ruby (1.2.3) connection_pool (2.4.1) declarative (0.0.20) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) @@ -96,8 +98,8 @@ GEM escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - excon (0.111.0) - faraday (1.10.3) + excon (0.112.0) + faraday (1.10.4) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -116,17 +118,17 @@ GEM faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) + faraday-multipart (1.1.0) + multipart-post (~> 2.0) faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - faraday_middleware (1.2.0) + faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.222.0) + fastimage (2.4.0) + fastlane (2.227.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -142,6 +144,7 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -165,8 +168,10 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) ffi (1.16.3) fourflusher (2.3.1) fuzzy_match (2.0.4) @@ -208,9 +213,10 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.7) + http-cookie (1.0.8) domain_name (~> 0.5) - httpclient (2.8.3) + httpclient (2.9.0) + mutex_m i18n (1.14.4) concurrent-ruby (~> 1.0) jazzy (0.14.4) @@ -224,10 +230,11 @@ GEM sqlite3 (~> 1.3) xcinvoke (~> 0.3.0) jmespath (1.6.2) - json (2.7.2) - jwt (2.8.2) + json (2.10.2) + jwt (2.10.1) base64 liferaft (0.0.6) + logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) mini_portile2 (2.8.6) @@ -237,7 +244,7 @@ GEM multipart-post (2.4.1) mustache (1.1.1) mutex_m (0.2.0) - nanaimo (0.3.0) + nanaimo (0.4.0) nap (1.1.0) naturally (2.2.1) netrc (0.11.0) @@ -246,9 +253,9 @@ GEM mini_portile2 (~> 2.8.2) racc (~> 1.4) open4 (1.3.4) - optparse (0.5.0) + optparse (0.6.0) os (1.1.4) - plist (3.7.1) + plist (3.7.2) public_suffix (4.0.7) racc (1.7.3) rake (13.2.1) @@ -258,12 +265,11 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.3.6) - strscan - rouge (2.0.7) + rexml (3.4.1) + rouge (3.28.0) ruby-macho (2.5.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) sassc (2.4.0) ffi (~> 1.9) security (0.1.5) @@ -283,7 +289,7 @@ GEM xcodeproj (~> 1.21) sqlite3 (1.5.4) mini_portile2 (~> 2.8.0) - strscan (3.1.0) + sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -297,19 +303,19 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - unicode-display_width (2.5.0) + unicode-display_width (2.6.0) word_wrap (1.0.0) xcinvoke (0.3.0) liferaft (~> 0.0.6) - xcodeproj (1.25.0) + xcodeproj (1.27.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (>= 3.3.2, < 4.0) - xcpretty (0.3.0) - rouge (~> 2.0.7) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) diff --git a/Source/Info.plist b/Source/Info.plist index b39269b..dcf056e 100644 --- a/Source/Info.plist +++ b/Source/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.7.1 + 1.7.2 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Source/Version/Version.generated.swift b/Source/Version/Version.generated.swift index f9a0743..709ec91 100644 --- a/Source/Version/Version.generated.swift +++ b/Source/Version/Version.generated.swift @@ -35,5 +35,5 @@ public struct Version { /** Library version string. */ - static let stringValue = "1.7.1" + static let stringValue = "1.7.2" } diff --git a/Tests/UnitTests/Version/VersionTests.generated.swift b/Tests/UnitTests/Version/VersionTests.generated.swift index ec39d3d..88eca75 100644 --- a/Tests/UnitTests/Version/VersionTests.generated.swift +++ b/Tests/UnitTests/Version/VersionTests.generated.swift @@ -30,11 +30,11 @@ import XCTest class VersionTests: XCTestCase { func testLibraryVersion() { - XCTAssertEqual(Version.stringValue, "1.7.1") + XCTAssertEqual(Version.stringValue, "1.7.2") } func testPlistVersion() { let libraryBundle = Bundle(for: ButtonMerchant.self) - XCTAssertEqual(libraryBundle.infoDictionary!["CFBundleShortVersionString"] as? String, "1.7.1") + XCTAssertEqual(libraryBundle.infoDictionary!["CFBundleShortVersionString"] as? String, "1.7.2") } } diff --git a/docs/history/1.7.2/Classes.html b/docs/history/1.7.2/Classes.html new file mode 100644 index 0000000..522f228 --- /dev/null +++ b/docs/history/1.7.2/Classes.html @@ -0,0 +1,225 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ButtonMerchant + +
    +
    +
    +
    +
    +
    +
    +

    Note

    + ButtonMerchant is the main entry point to the library. + +
    + +

    To get started with your integration, get your application Id from from the Button Dashboard and follow our simple + integration guide.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +final public class ButtonMerchant : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ButtonProduct + +
    +
    +
    +
    +
    +
    +

    A concrete implementation of the ButtonProductCompatible protocol.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    final public class ButtonProduct : NSObject, ButtonProductCompatible, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Order + +
    +
    +
    +
    +
    +
    +

    Represents an order placed by the user to be reported using ButtonMerchant.reportOrder(order).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(BTNOrder)
    +final public class Order : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Classes/ButtonMerchant.html b/docs/history/1.7.2/Classes/ButtonMerchant.html new file mode 100644 index 0000000..40b5f50 --- /dev/null +++ b/docs/history/1.7.2/Classes/ButtonMerchant.html @@ -0,0 +1,554 @@ + + + + ButtonMerchant Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonMerchant

+
+
+ +
@objcMembers
+final public class ButtonMerchant : NSObject
+ +
+
+
+

Note

+ ButtonMerchant is the main entry point to the library. + +
+ +

To get started with your integration, get your application Id from from the Button Dashboard and follow our simple + integration guide.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributionToken + +
    +
    +
    +
    +
    +
    +

    The last attributionToken from an inbound Button attributed URL.

    +
    +

    Attention

    +

    For attribution to work correctly, you must:

    + +
      +
    • Always access this token directly—never cache it.

    • +
    • Never manage the lifecycle of this token—Button manages the token validity window server-side.

    • +
    • Always include this value when reporting orders to your order API

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var attributionToken: String? { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Configures ButtonMerchant with your application Id.

    +
    +

    Note

    +

    Get your application Id from from the Button Dashboard

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func configure(applicationId: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + applicationId + + +
    +

    Your application Id (required)

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + trackIncomingURL(_:) + +
    +
    +
    +
    +
    +
    +

    Checks the passed URL for a Button attribution and if present stores the token.

    +
    +

    Attention

    +

    To correctly attribute customers, you must call this method with every +incoming url and userActivity from the following UIApplicationDelegate methods:

    + +
      +
    • application(_:open:options:)

    • +
    • application(_:userActivity:restorationHandler:)

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func trackIncomingURL(_ url: URL)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + url + + +
    +

    A URL that has entered your app from a third party source.

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

    Checks the URL in the passed NSUserActivity for Button attribution and if present stores the token.

    +
    +

    Attention

    +

    To correctly attribute customers, you must call this method with every +incoming userActivity from the following UIApplicationDelegate method:

    + +
      +
    • application(_:userActivity:restorationHandler:)

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func trackIncomingUserActivity(_ userActivity: NSUserActivity)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userActivity + + +
    +

    A NSUserActivity with which your app has been continued.

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

    Checks to see if the user visited a url destined for your app prior to installing your app.

    + +

    If a url is found, your completion handler will be called with the url and you are responsible +for navigating the user to the relevant content in your app. If a url is not found or an error occurs, your +completion handler will be called without a url and you can continue with your normal launch sequence.

    +
    +

    Attention

    +

    This method checks for a post-install url exactly one time after a user has installed your app. +Subsequent calls will result in your completion handler being called without a url. You do not need to wait +for the completion handler before continuing with your normal launch sequence but you should be prepared +to handle a post-install url if one is found. All subsequent incoming urls will be routed to your +UIApplicationDelegate as usual.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func handlePostInstallURL(_ completion: @escaping (URL?, Error?) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    A completion block taking an optional url and optional error.

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

    Reports an order to Button.

    +
    +

    See also

    +

    Reporting Orders to Button

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func reportOrder(_ order: Order, completion: ((Error?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + order + + +
    +

    Your order object to be reported.

    +
    +
    + + completion + + +
    +

    An optional completion block taking an optional error.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + clearAllData() + +
    +
    +
    +
    +
    +
    +

    Discards the current session and all persisted data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func clearAllData()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + features + +
    +
    +
    +
    +
    +
    +

    An interface through which library features can be enabled/disabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var features: Configurable { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + activity + +
    +
    +
    +
    +
    +
    +

    An interface through which user activity can be reported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var activity: Activity { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Classes/ButtonProduct.html b/docs/history/1.7.2/Classes/ButtonProduct.html new file mode 100644 index 0000000..735f19b --- /dev/null +++ b/docs/history/1.7.2/Classes/ButtonProduct.html @@ -0,0 +1,372 @@ + + + + ButtonProduct Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonProduct

+
+
+ +
final public class ButtonProduct : NSObject, ButtonProductCompatible, Codable
+ +
+
+

A concrete implementation of the ButtonProductCompatible protocol.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var upc: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var categories: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currency + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currency: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var quantity: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var url: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: [String : String]?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Classes/Order.html b/docs/history/1.7.2/Classes/Order.html new file mode 100644 index 0000000..79bbdc4 --- /dev/null +++ b/docs/history/1.7.2/Classes/Order.html @@ -0,0 +1,359 @@ + + + + Order Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Order

+
+
+ +
@objcMembers
+@objc(BTNOrder)
+final public class Order : NSObject, Codable
+ +
+
+

Represents an order placed by the user to be reported using ButtonMerchant.reportOrder(order).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + currencyCode + +
    +
    +
    +
    +
    +
    +

    The ISO 4217 currency code (default is USD).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currencyCode: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customerOrderId + +
    +
    +
    +
    +
    +
    +

    The customer-facing order id.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customerOrderId: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customer + +
    +
    +
    +
    +
    +
    +

    The customer related to the order

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customer: Customer?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an order object with the passed parameters.

    + +
      +
    • id: The order identifier (required).
    • +
    • purchaseDate: The date of the purchase for the order.
    • +
    • lineItems: A list of the line item details that comprise the order.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String, purchaseDate: Date, lineItems: [LineItem])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Customer + +
    +
    +
    +
    +
    +
    +

    Represents a customer in the order.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(BTNCustomer)
    +final public class Customer : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineItem + +
    +
    +
    +
    +
    +
    +

    Represents a line item in the order.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(LineItem)
    +final public class LineItem : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Deprecations +

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

    Deprecated.

    + +

    If you’re migrating to client side order reporting, please use init(id:purchaseDate:lineItems:) instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Use init(id:purchaseDate:lineItems:﹚ instead")
    +@objc
    +public init(id: String, amount: Int64 = 0, currencyCode: String = "USD")
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Classes/Order/Customer.html b/docs/history/1.7.2/Classes/Order/Customer.html new file mode 100644 index 0000000..5f112c9 --- /dev/null +++ b/docs/history/1.7.2/Classes/Order/Customer.html @@ -0,0 +1,231 @@ + + + + Customer Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Customer

+
+
+ +
@objcMembers
+@objc(BTNCustomer)
+final public class Customer : NSObject, Codable
+ +
+
+

Represents a customer in the order.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + email + +
    +
    +
    +
    +
    +
    +
    +

    Important

    + Deprecated. This property is a no-op. Data is not collected. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Setting this property is a no-op. Data is not collected.")
    +public var email: String? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isNew + +
    +
    +
    +
    +
    +
    +

    A flag indicating whether the customer is new (or not).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isNew: Bool?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:) + +
    +
    +
    +
    +
    +
    +

    Initializes a customer object with the passed parameters.

    + +
      +
    • id: The id for your customer (required).
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Classes/Order/LineItem.html b/docs/history/1.7.2/Classes/Order/LineItem.html new file mode 100644 index 0000000..64daaf9 --- /dev/null +++ b/docs/history/1.7.2/Classes/Order/LineItem.html @@ -0,0 +1,364 @@ + + + + LineItem Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

LineItem

+
+
+ +
@objcMembers
+@objc(LineItem)
+final public class LineItem : NSObject, Codable
+ +
+
+

Represents a line item in the order.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    +

    The number of unique units represented by this line item (default is 1).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var quantity: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemDescription + +
    +
    +
    +
    +
    +
    +

    Text describing the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemDescription: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sku + +
    +
    +
    +
    +
    +
    +

    The Stock Keeping Unit of the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var sku: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    +

    The Universal Product Code of the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var upc: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + category + +
    +
    +
    +
    +
    +
    +

    The category of the line item. +An ordered list of strings, starting with the topmost (or most general) category.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var category: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    A key/value store for strings to specify additional information about a line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: [String : String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:total:) + +
    +
    +
    +
    +
    +
    +

    An array of the line item details that comprise the order

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String, total: Int64)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + id + + +
    +

    The unique identifier for this line item, within the scope of this order. + This must be unique across all line-items within the order. + We suggest using the SKU or UPC of the product. (required)

    +
    +
    + + total + + +
    +

    The total price of all items bought in a particular line item. (required)

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Enums.html b/docs/history/1.7.2/Enums.html new file mode 100644 index 0000000..6fb6f4f --- /dev/null +++ b/docs/history/1.7.2/Enums.html @@ -0,0 +1,218 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ButtonMerchantError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Errors.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ButtonMerchantError : Error
    +
    extension ButtonMerchantError: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ConfigurationError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Configuration Error.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ConfigurationError : Error
    +
    extension ConfigurationError: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NetworkError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Configuration Error.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum NetworkError : Error
    +
    extension NetworkError: Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Enums/ButtonMerchantError.html b/docs/history/1.7.2/Enums/ButtonMerchantError.html new file mode 100644 index 0000000..1c3e520 --- /dev/null +++ b/docs/history/1.7.2/Enums/ButtonMerchantError.html @@ -0,0 +1,191 @@ + + + + ButtonMerchantError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonMerchantError

+
+
+ +
public enum ButtonMerchantError : Error
+
extension ButtonMerchantError: Equatable
+ +
+
+

Button Merchant Library Errors.

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

    Declaration

    +
    +

    Swift

    +
    case trackOrderDeprecationError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + noEventsError + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noEventsError
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Enums/ConfigurationError.html b/docs/history/1.7.2/Enums/ConfigurationError.html new file mode 100644 index 0000000..49ac16f --- /dev/null +++ b/docs/history/1.7.2/Enums/ConfigurationError.html @@ -0,0 +1,203 @@ + + + + ConfigurationError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ConfigurationError

+
+
+ +
public enum ConfigurationError : Error
+
extension ConfigurationError: Equatable
+ +
+
+

Button Merchant Library Configuration Error.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + noApplicationId + +
    +
    +
    +
    +
    +
    +

    Library is not configured with an applicationId

    +
    +

    Note

    + Get your application Id from from the Button Dashboard + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noApplicationId
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Library is not configured with a valid applicationId

    +
    +

    Note

    + Get your application Id from from the Button Dashboard + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invalidApplicationId(appicationId: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Enums/NetworkError.html b/docs/history/1.7.2/Enums/NetworkError.html new file mode 100644 index 0000000..fc2d32f --- /dev/null +++ b/docs/history/1.7.2/Enums/NetworkError.html @@ -0,0 +1,166 @@ + + + + NetworkError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

NetworkError

+
+
+ +
public enum NetworkError : Error
+
extension NetworkError: Equatable
+ +
+
+

Button Merchant Library Configuration Error.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unknown + +
    +
    +
    +
    +
    +
    +

    There was an unknown network error.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unknown
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Protocols.html b/docs/history/1.7.2/Protocols.html new file mode 100644 index 0000000..eb202e0 --- /dev/null +++ b/docs/history/1.7.2/Protocols.html @@ -0,0 +1,217 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Activity + +
    +
    +
    +
    +
    +
    +

    A protocol through which user activities can be reported.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol Activity
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A protocol that defines the product properties that may be provided when reporting user activity.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol ButtonProductCompatible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Configurable + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol Configurable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Protocols/Activity.html b/docs/history/1.7.2/Protocols/Activity.html new file mode 100644 index 0000000..52c2300 --- /dev/null +++ b/docs/history/1.7.2/Protocols/Activity.html @@ -0,0 +1,232 @@ + + + + Activity Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Activity

+
+
+ +
@objc
+public protocol Activity
+ +
+
+

A protocol through which user activities can be reported.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + productViewed(_:) + +
    +
    +
    +
    +
    +
    +

    Report that the user has viewed a product.

    + +
      +
    • product: The product being viewed.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func productViewed(_ product: ButtonProductCompatible?)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Report that the user added a product to their cart.

    + +
      +
    • product: The product added to the cart.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func productAddedToCart(_ product: ButtonProductCompatible?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cartViewed(_:) + +
    +
    +
    +
    +
    +
    +

    Report that the user viewed their cart.

    + +
      +
    • products: The list of products in the cart.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func cartViewed(_ products: [ButtonProductCompatible]?)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Protocols/ButtonProductCompatible.html b/docs/history/1.7.2/Protocols/ButtonProductCompatible.html new file mode 100644 index 0000000..6710dd8 --- /dev/null +++ b/docs/history/1.7.2/Protocols/ButtonProductCompatible.html @@ -0,0 +1,382 @@ + + + + ButtonProductCompatible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonProductCompatible

+
+
+ +
@objc
+public protocol ButtonProductCompatible
+ +
+
+

A protocol that defines the product properties that may be provided when reporting user activity.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The product identifier.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var id: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    +

    The UPC (Universal Product Code) of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var upc: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    +

    A flat array of the names of the categories to which the product belongs.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var categories: [String]? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currency + +
    +
    +
    +
    +
    +
    +

    The ISO-4217 currency code in which the product’s value is reported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var currency: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    +

    The value of the order. Includes any discounts, if applicable. Example: 1234 for $12.34.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var value: Int { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    +

    The quantity of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var quantity: Int { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    The URL of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var url: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    Any additional attributes to be included with the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var attributes: [String : String]? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Protocols/Configurable.html b/docs/history/1.7.2/Protocols/Configurable.html new file mode 100644 index 0000000..e77a98d --- /dev/null +++ b/docs/history/1.7.2/Protocols/Configurable.html @@ -0,0 +1,170 @@ + + + + Configurable Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Configurable

+
+
+ +
@objc
+public protocol Configurable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + includesIFA + +
    +
    +
    +
    +
    +
    +
    +

    Important

    + Deprecated. This library does not read the advertising identifier even when permission is granted by the user. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Advertising identifier is not accessed by this library.")
    +var includesIFA: Bool { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/Structs.html b/docs/history/1.7.2/Structs.html new file mode 100644 index 0000000..ca070f1 --- /dev/null +++ b/docs/history/1.7.2/Structs.html @@ -0,0 +1,163 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Version + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Version.

    +
    +

    Note

    + The Button Merchant Library follows Semantic Versioning + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Version
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/badge.svg b/docs/history/1.7.2/badge.svg new file mode 100644 index 0000000..7c971c6 --- /dev/null +++ b/docs/history/1.7.2/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 96% + + + 96% + + + diff --git a/docs/history/1.7.2/css/highlight.css b/docs/history/1.7.2/css/highlight.css new file mode 100644 index 0000000..c170357 --- /dev/null +++ b/docs/history/1.7.2/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/history/1.7.2/css/jazzy.css b/docs/history/1.7.2/css/jazzy.css new file mode 100644 index 0000000..c7bb9fe --- /dev/null +++ b/docs/history/1.7.2/css/jazzy.css @@ -0,0 +1,404 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .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-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.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: #4183c4; } + +.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 #ddd; + 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 { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Info.plist b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Info.plist new file mode 100644 index 0000000..49cb17c --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.buttonmerchant + CFBundleName + ButtonMerchant + DocSetPlatformFamily + buttonmerchant + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 0000000..522f228 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,225 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ButtonMerchant + +
    +
    +
    +
    +
    +
    +
    +

    Note

    + ButtonMerchant is the main entry point to the library. + +
    + +

    To get started with your integration, get your application Id from from the Button Dashboard and follow our simple + integration guide.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +final public class ButtonMerchant : NSObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ButtonProduct + +
    +
    +
    +
    +
    +
    +

    A concrete implementation of the ButtonProductCompatible protocol.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    final public class ButtonProduct : NSObject, ButtonProductCompatible, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Order + +
    +
    +
    +
    +
    +
    +

    Represents an order placed by the user to be reported using ButtonMerchant.reportOrder(order).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(BTNOrder)
    +final public class Order : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonMerchant.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonMerchant.html new file mode 100644 index 0000000..40b5f50 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonMerchant.html @@ -0,0 +1,554 @@ + + + + ButtonMerchant Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonMerchant

+
+
+ +
@objcMembers
+final public class ButtonMerchant : NSObject
+ +
+
+
+

Note

+ ButtonMerchant is the main entry point to the library. + +
+ +

To get started with your integration, get your application Id from from the Button Dashboard and follow our simple + integration guide.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + attributionToken + +
    +
    +
    +
    +
    +
    +

    The last attributionToken from an inbound Button attributed URL.

    +
    +

    Attention

    +

    For attribution to work correctly, you must:

    + +
      +
    • Always access this token directly—never cache it.

    • +
    • Never manage the lifecycle of this token—Button manages the token validity window server-side.

    • +
    • Always include this value when reporting orders to your order API

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var attributionToken: String? { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Configures ButtonMerchant with your application Id.

    +
    +

    Note

    +

    Get your application Id from from the Button Dashboard

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func configure(applicationId: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + applicationId + + +
    +

    Your application Id (required)

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + trackIncomingURL(_:) + +
    +
    +
    +
    +
    +
    +

    Checks the passed URL for a Button attribution and if present stores the token.

    +
    +

    Attention

    +

    To correctly attribute customers, you must call this method with every +incoming url and userActivity from the following UIApplicationDelegate methods:

    + +
      +
    • application(_:open:options:)

    • +
    • application(_:userActivity:restorationHandler:)

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func trackIncomingURL(_ url: URL)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + url + + +
    +

    A URL that has entered your app from a third party source.

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

    Checks the URL in the passed NSUserActivity for Button attribution and if present stores the token.

    +
    +

    Attention

    +

    To correctly attribute customers, you must call this method with every +incoming userActivity from the following UIApplicationDelegate method:

    + +
      +
    • application(_:userActivity:restorationHandler:)

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func trackIncomingUserActivity(_ userActivity: NSUserActivity)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + userActivity + + +
    +

    A NSUserActivity with which your app has been continued.

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

    Checks to see if the user visited a url destined for your app prior to installing your app.

    + +

    If a url is found, your completion handler will be called with the url and you are responsible +for navigating the user to the relevant content in your app. If a url is not found or an error occurs, your +completion handler will be called without a url and you can continue with your normal launch sequence.

    +
    +

    Attention

    +

    This method checks for a post-install url exactly one time after a user has installed your app. +Subsequent calls will result in your completion handler being called without a url. You do not need to wait +for the completion handler before continuing with your normal launch sequence but you should be prepared +to handle a post-install url if one is found. All subsequent incoming urls will be routed to your +UIApplicationDelegate as usual.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func handlePostInstallURL(_ completion: @escaping (URL?, Error?) -> Void)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    A completion block taking an optional url and optional error.

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

    Reports an order to Button.

    +
    +

    See also

    +

    Reporting Orders to Button

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func reportOrder(_ order: Order, completion: ((Error?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + order + + +
    +

    Your order object to be reported.

    +
    +
    + + completion + + +
    +

    An optional completion block taking an optional error.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + clearAllData() + +
    +
    +
    +
    +
    +
    +

    Discards the current session and all persisted data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static func clearAllData()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + features + +
    +
    +
    +
    +
    +
    +

    An interface through which library features can be enabled/disabled.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var features: Configurable { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + activity + +
    +
    +
    +
    +
    +
    +

    An interface through which user activity can be reported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public static var activity: Activity { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonProduct.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonProduct.html new file mode 100644 index 0000000..735f19b --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/ButtonProduct.html @@ -0,0 +1,372 @@ + + + + ButtonProduct Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonProduct

+
+
+ +
final public class ButtonProduct : NSObject, ButtonProductCompatible, Codable
+ +
+
+

A concrete implementation of the ButtonProductCompatible protocol.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var upc: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var categories: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currency + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currency: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var value: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var quantity: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var url: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: [String : String]?
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order.html new file mode 100644 index 0000000..79bbdc4 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order.html @@ -0,0 +1,359 @@ + + + + Order Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Order

+
+
+ +
@objcMembers
+@objc(BTNOrder)
+final public class Order : NSObject, Codable
+ +
+
+

Represents an order placed by the user to be reported using ButtonMerchant.reportOrder(order).

+ +
+
+ +
+
+
+
    +
  • +
    + + + + currencyCode + +
    +
    +
    +
    +
    +
    +

    The ISO 4217 currency code (default is USD).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currencyCode: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customerOrderId + +
    +
    +
    +
    +
    +
    +

    The customer-facing order id.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customerOrderId: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customer + +
    +
    +
    +
    +
    +
    +

    The customer related to the order

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var customer: Customer?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes an order object with the passed parameters.

    + +
      +
    • id: The order identifier (required).
    • +
    • purchaseDate: The date of the purchase for the order.
    • +
    • lineItems: A list of the line item details that comprise the order.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String, purchaseDate: Date, lineItems: [LineItem])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Customer + +
    +
    +
    +
    +
    +
    +

    Represents a customer in the order.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(BTNCustomer)
    +final public class Customer : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LineItem + +
    +
    +
    +
    +
    +
    +

    Represents a line item in the order.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objcMembers
    +@objc(LineItem)
    +final public class LineItem : NSObject, Codable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + +
+ +

Deprecations +

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

    Deprecated.

    + +

    If you’re migrating to client side order reporting, please use init(id:purchaseDate:lineItems:) instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Use init(id:purchaseDate:lineItems:﹚ instead")
    +@objc
    +public init(id: String, amount: Int64 = 0, currencyCode: String = "USD")
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/Customer.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/Customer.html new file mode 100644 index 0000000..5f112c9 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/Customer.html @@ -0,0 +1,231 @@ + + + + Customer Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Customer

+
+
+ +
@objcMembers
+@objc(BTNCustomer)
+final public class Customer : NSObject, Codable
+ +
+
+

Represents a customer in the order.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + email + +
    +
    +
    +
    +
    +
    +
    +

    Important

    + Deprecated. This property is a no-op. Data is not collected. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Setting this property is a no-op. Data is not collected.")
    +public var email: String? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isNew + +
    +
    +
    +
    +
    +
    +

    A flag indicating whether the customer is new (or not).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isNew: Bool?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:) + +
    +
    +
    +
    +
    +
    +

    Initializes a customer object with the passed parameters.

    + +
      +
    • id: The id for your customer (required).
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/LineItem.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/LineItem.html new file mode 100644 index 0000000..64daaf9 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Classes/Order/LineItem.html @@ -0,0 +1,364 @@ + + + + LineItem Class Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

LineItem

+
+
+ +
@objcMembers
+@objc(LineItem)
+final public class LineItem : NSObject, Codable
+ +
+
+

Represents a line item in the order.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    +

    The number of unique units represented by this line item (default is 1).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var quantity: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + itemDescription + +
    +
    +
    +
    +
    +
    +

    Text describing the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var itemDescription: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sku + +
    +
    +
    +
    +
    +
    +

    The Stock Keeping Unit of the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var sku: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    +

    The Universal Product Code of the line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var upc: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + category + +
    +
    +
    +
    +
    +
    +

    The category of the line item. +An ordered list of strings, starting with the topmost (or most general) category.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var category: [String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    A key/value store for strings to specify additional information about a line item.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var attributes: [String : String]?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(id:total:) + +
    +
    +
    +
    +
    +
    +

    An array of the line item details that comprise the order

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public init(id: String, total: Int64)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + id + + +
    +

    The unique identifier for this line item, within the scope of this order. + This must be unique across all line-items within the order. + We suggest using the SKU or UPC of the product. (required)

    +
    +
    + + total + + +
    +

    The total price of all items bought in a particular line item. (required)

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 0000000..6fb6f4f --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,218 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ButtonMerchantError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Errors.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ButtonMerchantError : Error
    +
    extension ButtonMerchantError: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ConfigurationError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Configuration Error.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ConfigurationError : Error
    +
    extension ConfigurationError: Equatable
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + NetworkError + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Configuration Error.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum NetworkError : Error
    +
    extension NetworkError: Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ButtonMerchantError.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ButtonMerchantError.html new file mode 100644 index 0000000..1c3e520 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ButtonMerchantError.html @@ -0,0 +1,191 @@ + + + + ButtonMerchantError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonMerchantError

+
+
+ +
public enum ButtonMerchantError : Error
+
extension ButtonMerchantError: Equatable
+ +
+
+

Button Merchant Library Errors.

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

    Declaration

    +
    +

    Swift

    +
    case trackOrderDeprecationError
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + noEventsError + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noEventsError
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ConfigurationError.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ConfigurationError.html new file mode 100644 index 0000000..49ac16f --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/ConfigurationError.html @@ -0,0 +1,203 @@ + + + + ConfigurationError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ConfigurationError

+
+
+ +
public enum ConfigurationError : Error
+
extension ConfigurationError: Equatable
+ +
+
+

Button Merchant Library Configuration Error.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + noApplicationId + +
    +
    +
    +
    +
    +
    +

    Library is not configured with an applicationId

    +
    +

    Note

    + Get your application Id from from the Button Dashboard + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noApplicationId
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Library is not configured with a valid applicationId

    +
    +

    Note

    + Get your application Id from from the Button Dashboard + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invalidApplicationId(appicationId: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/NetworkError.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/NetworkError.html new file mode 100644 index 0000000..fc2d32f --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Enums/NetworkError.html @@ -0,0 +1,166 @@ + + + + NetworkError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

NetworkError

+
+
+ +
public enum NetworkError : Error
+
extension NetworkError: Equatable
+ +
+
+

Button Merchant Library Configuration Error.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + unknown + +
    +
    +
    +
    +
    +
    +

    There was an unknown network error.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unknown
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 0000000..eb202e0 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,217 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Activity + +
    +
    +
    +
    +
    +
    +

    A protocol through which user activities can be reported.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol Activity
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A protocol that defines the product properties that may be provided when reporting user activity.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol ButtonProductCompatible
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Configurable + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +public protocol Configurable
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Activity.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Activity.html new file mode 100644 index 0000000..52c2300 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Activity.html @@ -0,0 +1,232 @@ + + + + Activity Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Activity

+
+
+ +
@objc
+public protocol Activity
+ +
+
+

A protocol through which user activities can be reported.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + productViewed(_:) + +
    +
    +
    +
    +
    +
    +

    Report that the user has viewed a product.

    + +
      +
    • product: The product being viewed.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func productViewed(_ product: ButtonProductCompatible?)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Report that the user added a product to their cart.

    + +
      +
    • product: The product added to the cart.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func productAddedToCart(_ product: ButtonProductCompatible?)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cartViewed(_:) + +
    +
    +
    +
    +
    +
    +

    Report that the user viewed their cart.

    + +
      +
    • products: The list of products in the cart.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func cartViewed(_ products: [ButtonProductCompatible]?)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/ButtonProductCompatible.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/ButtonProductCompatible.html new file mode 100644 index 0000000..6710dd8 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/ButtonProductCompatible.html @@ -0,0 +1,382 @@ + + + + ButtonProductCompatible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

ButtonProductCompatible

+
+
+ +
@objc
+public protocol ButtonProductCompatible
+ +
+
+

A protocol that defines the product properties that may be provided when reporting user activity.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The product identifier.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var id: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + upc + +
    +
    +
    +
    +
    +
    +

    The UPC (Universal Product Code) of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var upc: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + categories + +
    +
    +
    +
    +
    +
    +

    A flat array of the names of the categories to which the product belongs.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var categories: [String]? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currency + +
    +
    +
    +
    +
    +
    +

    The ISO-4217 currency code in which the product’s value is reported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var currency: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    +

    The value of the order. Includes any discounts, if applicable. Example: 1234 for $12.34.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var value: Int { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + quantity + +
    +
    +
    +
    +
    +
    +

    The quantity of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var quantity: Int { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    The URL of the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var url: String? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attributes + +
    +
    +
    +
    +
    +
    +

    Any additional attributes to be included with the product.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var attributes: [String : String]? { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Configurable.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Configurable.html new file mode 100644 index 0000000..e77a98d --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Protocols/Configurable.html @@ -0,0 +1,170 @@ + + + + Configurable Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Configurable

+
+
+ +
@objc
+public protocol Configurable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + includesIFA + +
    +
    +
    +
    +
    +
    +
    +

    Important

    + Deprecated. This library does not read the advertising identifier even when permission is granted by the user. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(*, deprecated, message: "Advertising identifier is not accessed by this library.")
    +var includesIFA: Bool { get set }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Structs.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 0000000..ca070f1 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,163 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Version + +
    +
    +
    +
    +
    +
    +

    Button Merchant Library Version.

    +
    +

    Note

    + The Button Merchant Library follows Semantic Versioning + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Version
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/highlight.css b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 0000000..c170357 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/jazzy.css b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 0000000..c7bb9fe --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,404 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .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-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.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: #4183c4; } + +.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 #ddd; + 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 { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/img/carat.png b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/img/dash.png b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/index.html b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/index.html new file mode 100644 index 0000000..c2753ae --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,162 @@ + + + + ButtonMerchant Reference + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Button Merchant Library

+ +

License: MIT +Version +Platform

+

Documentation

+ +

Documentation for the Merchant Library can be found on the Button Developer site.

+ +

Reference docs are also available.

+

Example

+ +

To run the example project, clone the repo, run pod install, and run the Example scheme.

+

Installation

+ +

ButtonMerchant is available through CocoaPods and Carthage.

+

Swift Pacakage Manager

+ +

In Xcode, navigate to File → Swift Packages → Add Package Dependency

+ +

Enter the package repository URL:

+ +

https://github.com/button/button-merchant-ios

+ +

Note: Ensure to select ‘Up to Next Major’ version when prompted.

+

CocoaPods

+ +

Add this line to your Podfile:

+
pod 'ButtonMerchant'
+
+

Carthage

+ +

Or, add this to your Cartfile:

+
github "button/button-merchant-ios" ~> 1.0
+
+

Author

+ +

Button, Inc.

+

License

+ +

ButtonMerchant is available under the MIT license. See the LICENSE file for more info.

+ +
+
+ + +
+
+ + + diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.js b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 0000000..1984416 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 0000000..359cdbb --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/typeahead.jquery.js new file mode 100644 index 0000000..3a2d2ab --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/js/typeahead.jquery.js @@ -0,0 +1,1694 @@ +/*! + * typeahead.js 1.3.1 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2020 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", + 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/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/search.json b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/search.json new file mode 100644 index 0000000..0a77d75 --- /dev/null +++ b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Structs.html#/s:14ButtonMerchant7VersionV":{"name":"Version","abstract":"\u003cp\u003eButton Merchant Library Version.\u003c/p\u003e"},"Protocols/Configurable.html#/c:@M@ButtonMerchant@objc(pl)Configurable(py)includesIFA":{"name":"includesIFA","abstract":"\u003cdiv class=\"aside aside-important\"\u003e","parent_name":"Configurable"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)id":{"name":"id","abstract":"\u003cp\u003eThe product identifier.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)upc":{"name":"upc","abstract":"\u003cp\u003eThe UPC (Universal Product Code) of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)categories":{"name":"categories","abstract":"\u003cp\u003eA flat array of the names of the categories to which the product belongs.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)name":{"name":"name","abstract":"\u003cp\u003eThe name of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)currency":{"name":"currency","abstract":"\u003cp\u003eThe ISO-4217 currency code in which the product\u0026rsquo;s value is reported.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)value":{"name":"value","abstract":"\u003cp\u003eThe value of the order. Includes any discounts, if applicable. Example: 1234 for $12.34.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)quantity":{"name":"quantity","abstract":"\u003cp\u003eThe quantity of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)url":{"name":"url","abstract":"\u003cp\u003eThe URL of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)attributes":{"name":"attributes","abstract":"\u003cp\u003eAny additional attributes to be included with the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)productViewed:":{"name":"productViewed(_:)","abstract":"\u003cp\u003eReport that the user has viewed a product.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)productAddedToCart:":{"name":"productAddedToCart(_:)","abstract":"\u003cp\u003eReport that the user added a product to their cart.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)cartViewed:":{"name":"cartViewed(_:)","abstract":"\u003cp\u003eReport that the user viewed their cart.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html":{"name":"Activity","abstract":"\u003cp\u003eA protocol through which user activities can be reported.\u003c/p\u003e"},"Protocols/ButtonProductCompatible.html":{"name":"ButtonProductCompatible","abstract":"\u003cp\u003eA protocol that defines the product properties that may be provided when reporting user activity.\u003c/p\u003e"},"Protocols/Configurable.html":{"name":"Configurable"},"Enums/NetworkError.html#/s:14ButtonMerchant12NetworkErrorO7unknownyA2CmF":{"name":"unknown","abstract":"\u003cp\u003eThere was an unknown network error.\u003c/p\u003e","parent_name":"NetworkError"},"Enums/ConfigurationError.html#/s:14ButtonMerchant18ConfigurationErrorO15noApplicationIdyA2CmF":{"name":"noApplicationId","abstract":"\u003cp\u003eLibrary is not configured with an \u003ccode\u003eapplicationId\u003c/code\u003e\u003c/p\u003e","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:14ButtonMerchant18ConfigurationErrorO20invalidApplicationIdyACSS_tcACmF":{"name":"invalidApplicationId(appicationId:)","abstract":"\u003cp\u003eLibrary is not configured with a \u003cstrong\u003evalid\u003c/strong\u003e \u003ccode\u003eapplicationId\u003c/code\u003e\u003c/p\u003e","parent_name":"ConfigurationError"},"Enums/ButtonMerchantError.html#/s:14ButtonMerchant0aB5ErrorO021trackOrderDeprecationC0yA2CmF":{"name":"trackOrderDeprecationError","parent_name":"ButtonMerchantError"},"Enums/ButtonMerchantError.html#/s:14ButtonMerchant0aB5ErrorO08noEventsC0yA2CmF":{"name":"noEventsError","parent_name":"ButtonMerchantError"},"Enums/ButtonMerchantError.html":{"name":"ButtonMerchantError","abstract":"\u003cp\u003eButton Merchant Library Errors.\u003c/p\u003e"},"Enums/ConfigurationError.html":{"name":"ConfigurationError","abstract":"\u003cp\u003eButton Merchant Library Configuration Error.\u003c/p\u003e"},"Enums/NetworkError.html":{"name":"NetworkError","abstract":"\u003cp\u003eButton Merchant Library Configuration Error.\u003c/p\u003e"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC8quantitySivp":{"name":"quantity","abstract":"\u003cp\u003eThe number of unique units represented by this line item (default is 1).\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC15itemDescriptionSSSgvp":{"name":"itemDescription","abstract":"\u003cp\u003eText describing the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC3skuSSSgvp":{"name":"sku","abstract":"\u003cp\u003eThe Stock Keeping Unit of the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC3upcSSSgvp":{"name":"upc","abstract":"\u003cp\u003eThe Universal Product Code of the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC8categorySaySSGSgvp":{"name":"category","abstract":"\u003cp\u003eThe category of the line item.","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC10attributesSDyS2SGSgvp":{"name":"attributes","abstract":"\u003cp\u003eA key/value store for strings to specify additional information about a line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC2id5totalAESS_s5Int64Vtcfc":{"name":"init(id:total:)","abstract":"\u003cp\u003eAn array of the line item details that comprise the order\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC5emailSSSgvp":{"name":"email","abstract":"\u003cdiv class=\"aside aside-important\"\u003e","parent_name":"Customer"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC5isNewSbSgvp":{"name":"isNew","abstract":"\u003cp\u003eA flag indicating whether the customer is new (or not).\u003c/p\u003e","parent_name":"Customer"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC2idAESS_tcfc":{"name":"init(id:)","abstract":"\u003cp\u003eInitializes a customer object with the passed parameters.\u003c/p\u003e","parent_name":"Customer"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)currencyCode":{"name":"currencyCode","abstract":"\u003cp\u003eThe ISO 4217 currency code (default is USD).\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)customerOrderId":{"name":"customerOrderId","abstract":"\u003cp\u003eThe customer-facing order id.\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)customer":{"name":"customer","abstract":"\u003cp\u003eThe customer related to the order\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(im)initWithId:purchaseDate:lineItems:":{"name":"init(id:purchaseDate:lineItems:)","abstract":"\u003cp\u003eInitializes an order object with the passed parameters.\u003c/p\u003e","parent_name":"Order"},"Classes/Order/Customer.html":{"name":"Customer","abstract":"\u003cp\u003eRepresents a customer in the order.\u003c/p\u003e","parent_name":"Order"},"Classes/Order/LineItem.html":{"name":"LineItem","abstract":"\u003cp\u003eRepresents a line item in the order.\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(im)initWithId:amount:currencyCode:":{"name":"init(id:amount:currencyCode:)","abstract":"\u003cp\u003eDeprecated.\u003c/p\u003e","parent_name":"Order"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)id":{"name":"id","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)upc":{"name":"upc","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)categories":{"name":"categories","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)name":{"name":"name","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)currency":{"name":"currency","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)value":{"name":"value","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)quantity":{"name":"quantity","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)url":{"name":"url","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)attributes":{"name":"attributes","parent_name":"ButtonProduct"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)attributionToken":{"name":"attributionToken","abstract":"\u003cp\u003eThe last \u003ccode\u003eattributionToken\u003c/code\u003e from an inbound Button attributed URL.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)configureWithApplicationId:":{"name":"configure(applicationId:)","abstract":"\u003cp\u003eConfigures ButtonMerchant with your application Id.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)trackIncomingURL:":{"name":"trackIncomingURL(_:)","abstract":"\u003cp\u003eChecks the passed URL for a Button attribution and if present stores the token.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)trackIncomingUserActivity:":{"name":"trackIncomingUserActivity(_:)","abstract":"\u003cp\u003eChecks the URL in the passed NSUserActivity for Button attribution and if present stores the token.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)handlePostInstallURL:":{"name":"handlePostInstallURL(_:)","abstract":"\u003cp\u003eChecks to see if the user visited a url destined for your app prior to installing your app.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)reportOrder:completion:":{"name":"reportOrder(_:completion:)","abstract":"\u003cp\u003eReports an order to Button.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)clearAllData":{"name":"clearAllData()","abstract":"\u003cp\u003eDiscards the current session and all persisted data.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)features":{"name":"features","abstract":"\u003cp\u003eAn interface through which library features can be enabled/disabled.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)activity":{"name":"activity","abstract":"\u003cp\u003eAn interface through which user activity can be reported.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html":{"name":"ButtonMerchant","abstract":"\u003cdiv class=\"aside aside-note\"\u003e"},"Classes/ButtonProduct.html":{"name":"ButtonProduct","abstract":"\u003cp\u003eA concrete implementation of the ButtonProductCompatible protocol.\u003c/p\u003e"},"Classes/Order.html":{"name":"Order","abstract":"\u003cp\u003eRepresents an order placed by the user to be reported using \u003ccode\u003eButtonMerchant.reportOrder(order)\u003c/code\u003e.\u003c/p\u003e"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/docSet.dsidx b/docs/history/1.7.2/docsets/ButtonMerchant.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..db1c239a312ed51870a0cb45c2049c4f63dde317 GIT binary patch literal 28672 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 OPHt15+1-9_qvU^NYa#3a literal 0 HcmV?d00001 diff --git a/docs/history/1.7.2/docsets/ButtonMerchant.tgz b/docs/history/1.7.2/docsets/ButtonMerchant.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9ed4cd9d6462b8443dfe880c8edf396ddfd95da1 GIT binary patch literal 80257 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 literal 0 HcmV?d00001 diff --git a/docs/history/1.7.2/img/carat.png b/docs/history/1.7.2/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/history/1.7.2/img/dash.png b/docs/history/1.7.2/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/history/1.7.2/index.html b/docs/history/1.7.2/index.html new file mode 100644 index 0000000..c2753ae --- /dev/null +++ b/docs/history/1.7.2/index.html @@ -0,0 +1,162 @@ + + + + ButtonMerchant Reference + + + + + + + + + + + + + + + +
+

+ + ButtonMerchant 1.7.2 Docs + + (96% documented) +

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

Button Merchant Library

+ +

License: MIT +Version +Platform

+

Documentation

+ +

Documentation for the Merchant Library can be found on the Button Developer site.

+ +

Reference docs are also available.

+

Example

+ +

To run the example project, clone the repo, run pod install, and run the Example scheme.

+

Installation

+ +

ButtonMerchant is available through CocoaPods and Carthage.

+

Swift Pacakage Manager

+ +

In Xcode, navigate to File → Swift Packages → Add Package Dependency

+ +

Enter the package repository URL:

+ +

https://github.com/button/button-merchant-ios

+ +

Note: Ensure to select ‘Up to Next Major’ version when prompted.

+

CocoaPods

+ +

Add this line to your Podfile:

+
pod 'ButtonMerchant'
+
+

Carthage

+ +

Or, add this to your Cartfile:

+
github "button/button-merchant-ios" ~> 1.0
+
+

Author

+ +

Button, Inc.

+

License

+ +

ButtonMerchant is available under the MIT license. See the LICENSE file for more info.

+ +
+
+ + +
+
+ + + diff --git a/docs/history/1.7.2/js/jazzy.js b/docs/history/1.7.2/js/jazzy.js new file mode 100755 index 0000000..1984416 --- /dev/null +++ b/docs/history/1.7.2/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/history/1.7.2/js/jazzy.search.js b/docs/history/1.7.2/js/jazzy.search.js new file mode 100644 index 0000000..359cdbb --- /dev/null +++ b/docs/history/1.7.2/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/history/1.7.2/js/jquery.min.js b/docs/history/1.7.2/js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/docs/history/1.7.2/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/history/1.7.2/js/typeahead.jquery.js b/docs/history/1.7.2/js/typeahead.jquery.js new file mode 100644 index 0000000..3a2d2ab --- /dev/null +++ b/docs/history/1.7.2/js/typeahead.jquery.js @@ -0,0 +1,1694 @@ +/*! + * typeahead.js 1.3.1 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2020 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", + 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/history/1.7.2/search.json b/docs/history/1.7.2/search.json new file mode 100644 index 0000000..0a77d75 --- /dev/null +++ b/docs/history/1.7.2/search.json @@ -0,0 +1 @@ +{"Structs.html#/s:14ButtonMerchant7VersionV":{"name":"Version","abstract":"\u003cp\u003eButton Merchant Library Version.\u003c/p\u003e"},"Protocols/Configurable.html#/c:@M@ButtonMerchant@objc(pl)Configurable(py)includesIFA":{"name":"includesIFA","abstract":"\u003cdiv class=\"aside aside-important\"\u003e","parent_name":"Configurable"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)id":{"name":"id","abstract":"\u003cp\u003eThe product identifier.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)upc":{"name":"upc","abstract":"\u003cp\u003eThe UPC (Universal Product Code) of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)categories":{"name":"categories","abstract":"\u003cp\u003eA flat array of the names of the categories to which the product belongs.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)name":{"name":"name","abstract":"\u003cp\u003eThe name of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)currency":{"name":"currency","abstract":"\u003cp\u003eThe ISO-4217 currency code in which the product\u0026rsquo;s value is reported.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)value":{"name":"value","abstract":"\u003cp\u003eThe value of the order. Includes any discounts, if applicable. Example: 1234 for $12.34.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)quantity":{"name":"quantity","abstract":"\u003cp\u003eThe quantity of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)url":{"name":"url","abstract":"\u003cp\u003eThe URL of the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/ButtonProductCompatible.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)attributes":{"name":"attributes","abstract":"\u003cp\u003eAny additional attributes to be included with the product.\u003c/p\u003e","parent_name":"ButtonProductCompatible"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)productViewed:":{"name":"productViewed(_:)","abstract":"\u003cp\u003eReport that the user has viewed a product.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)productAddedToCart:":{"name":"productAddedToCart(_:)","abstract":"\u003cp\u003eReport that the user added a product to their cart.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html#/c:@M@ButtonMerchant@objc(pl)Activity(im)cartViewed:":{"name":"cartViewed(_:)","abstract":"\u003cp\u003eReport that the user viewed their cart.\u003c/p\u003e","parent_name":"Activity"},"Protocols/Activity.html":{"name":"Activity","abstract":"\u003cp\u003eA protocol through which user activities can be reported.\u003c/p\u003e"},"Protocols/ButtonProductCompatible.html":{"name":"ButtonProductCompatible","abstract":"\u003cp\u003eA protocol that defines the product properties that may be provided when reporting user activity.\u003c/p\u003e"},"Protocols/Configurable.html":{"name":"Configurable"},"Enums/NetworkError.html#/s:14ButtonMerchant12NetworkErrorO7unknownyA2CmF":{"name":"unknown","abstract":"\u003cp\u003eThere was an unknown network error.\u003c/p\u003e","parent_name":"NetworkError"},"Enums/ConfigurationError.html#/s:14ButtonMerchant18ConfigurationErrorO15noApplicationIdyA2CmF":{"name":"noApplicationId","abstract":"\u003cp\u003eLibrary is not configured with an \u003ccode\u003eapplicationId\u003c/code\u003e\u003c/p\u003e","parent_name":"ConfigurationError"},"Enums/ConfigurationError.html#/s:14ButtonMerchant18ConfigurationErrorO20invalidApplicationIdyACSS_tcACmF":{"name":"invalidApplicationId(appicationId:)","abstract":"\u003cp\u003eLibrary is not configured with a \u003cstrong\u003evalid\u003c/strong\u003e \u003ccode\u003eapplicationId\u003c/code\u003e\u003c/p\u003e","parent_name":"ConfigurationError"},"Enums/ButtonMerchantError.html#/s:14ButtonMerchant0aB5ErrorO021trackOrderDeprecationC0yA2CmF":{"name":"trackOrderDeprecationError","parent_name":"ButtonMerchantError"},"Enums/ButtonMerchantError.html#/s:14ButtonMerchant0aB5ErrorO08noEventsC0yA2CmF":{"name":"noEventsError","parent_name":"ButtonMerchantError"},"Enums/ButtonMerchantError.html":{"name":"ButtonMerchantError","abstract":"\u003cp\u003eButton Merchant Library Errors.\u003c/p\u003e"},"Enums/ConfigurationError.html":{"name":"ConfigurationError","abstract":"\u003cp\u003eButton Merchant Library Configuration Error.\u003c/p\u003e"},"Enums/NetworkError.html":{"name":"NetworkError","abstract":"\u003cp\u003eButton Merchant Library Configuration Error.\u003c/p\u003e"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC8quantitySivp":{"name":"quantity","abstract":"\u003cp\u003eThe number of unique units represented by this line item (default is 1).\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC15itemDescriptionSSSgvp":{"name":"itemDescription","abstract":"\u003cp\u003eText describing the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC3skuSSSgvp":{"name":"sku","abstract":"\u003cp\u003eThe Stock Keeping Unit of the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC3upcSSSgvp":{"name":"upc","abstract":"\u003cp\u003eThe Universal Product Code of the line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC8categorySaySSGSgvp":{"name":"category","abstract":"\u003cp\u003eThe category of the line item.","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC10attributesSDyS2SGSgvp":{"name":"attributes","abstract":"\u003cp\u003eA key/value store for strings to specify additional information about a line item.\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/LineItem.html#/s:14ButtonMerchant5OrderC8LineItemC2id5totalAESS_s5Int64Vtcfc":{"name":"init(id:total:)","abstract":"\u003cp\u003eAn array of the line item details that comprise the order\u003c/p\u003e","parent_name":"LineItem"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC5emailSSSgvp":{"name":"email","abstract":"\u003cdiv class=\"aside aside-important\"\u003e","parent_name":"Customer"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC5isNewSbSgvp":{"name":"isNew","abstract":"\u003cp\u003eA flag indicating whether the customer is new (or not).\u003c/p\u003e","parent_name":"Customer"},"Classes/Order/Customer.html#/s:14ButtonMerchant5OrderC8CustomerC2idAESS_tcfc":{"name":"init(id:)","abstract":"\u003cp\u003eInitializes a customer object with the passed parameters.\u003c/p\u003e","parent_name":"Customer"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)currencyCode":{"name":"currencyCode","abstract":"\u003cp\u003eThe ISO 4217 currency code (default is USD).\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)customerOrderId":{"name":"customerOrderId","abstract":"\u003cp\u003eThe customer-facing order id.\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(py)customer":{"name":"customer","abstract":"\u003cp\u003eThe customer related to the order\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(im)initWithId:purchaseDate:lineItems:":{"name":"init(id:purchaseDate:lineItems:)","abstract":"\u003cp\u003eInitializes an order object with the passed parameters.\u003c/p\u003e","parent_name":"Order"},"Classes/Order/Customer.html":{"name":"Customer","abstract":"\u003cp\u003eRepresents a customer in the order.\u003c/p\u003e","parent_name":"Order"},"Classes/Order/LineItem.html":{"name":"LineItem","abstract":"\u003cp\u003eRepresents a line item in the order.\u003c/p\u003e","parent_name":"Order"},"Classes/Order.html#/c:@M@ButtonMerchant@objc(cs)BTNOrder(im)initWithId:amount:currencyCode:":{"name":"init(id:amount:currencyCode:)","abstract":"\u003cp\u003eDeprecated.\u003c/p\u003e","parent_name":"Order"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)id":{"name":"id","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)upc":{"name":"upc","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)categories":{"name":"categories","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)name":{"name":"name","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)currency":{"name":"currency","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)value":{"name":"value","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)quantity":{"name":"quantity","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)url":{"name":"url","parent_name":"ButtonProduct"},"Classes/ButtonProduct.html#/c:@M@ButtonMerchant@objc(pl)ButtonProductCompatible(py)attributes":{"name":"attributes","parent_name":"ButtonProduct"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)attributionToken":{"name":"attributionToken","abstract":"\u003cp\u003eThe last \u003ccode\u003eattributionToken\u003c/code\u003e from an inbound Button attributed URL.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)configureWithApplicationId:":{"name":"configure(applicationId:)","abstract":"\u003cp\u003eConfigures ButtonMerchant with your application Id.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)trackIncomingURL:":{"name":"trackIncomingURL(_:)","abstract":"\u003cp\u003eChecks the passed URL for a Button attribution and if present stores the token.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)trackIncomingUserActivity:":{"name":"trackIncomingUserActivity(_:)","abstract":"\u003cp\u003eChecks the URL in the passed NSUserActivity for Button attribution and if present stores the token.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)handlePostInstallURL:":{"name":"handlePostInstallURL(_:)","abstract":"\u003cp\u003eChecks to see if the user visited a url destined for your app prior to installing your app.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)reportOrder:completion:":{"name":"reportOrder(_:completion:)","abstract":"\u003cp\u003eReports an order to Button.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cm)clearAllData":{"name":"clearAllData()","abstract":"\u003cp\u003eDiscards the current session and all persisted data.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)features":{"name":"features","abstract":"\u003cp\u003eAn interface through which library features can be enabled/disabled.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html#/c:@M@ButtonMerchant@objc(cs)ButtonMerchant(cpy)activity":{"name":"activity","abstract":"\u003cp\u003eAn interface through which user activity can be reported.\u003c/p\u003e","parent_name":"ButtonMerchant"},"Classes/ButtonMerchant.html":{"name":"ButtonMerchant","abstract":"\u003cdiv class=\"aside aside-note\"\u003e"},"Classes/ButtonProduct.html":{"name":"ButtonProduct","abstract":"\u003cp\u003eA concrete implementation of the ButtonProductCompatible protocol.\u003c/p\u003e"},"Classes/Order.html":{"name":"Order","abstract":"\u003cp\u003eRepresents an order placed by the user to be reported using \u003ccode\u003eButtonMerchant.reportOrder(order)\u003c/code\u003e.\u003c/p\u003e"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docs/history/1.7.2/undocumented.json b/docs/history/1.7.2/undocumented.json new file mode 100644 index 0000000..ee9a897 --- /dev/null +++ b/docs/history/1.7.2/undocumented.json @@ -0,0 +1,19 @@ +{ + "warnings": [ + { + "file": "/Users/wes/Developer/button-merchant-ios/Source/ButtonMerchantError.swift", + "line": 32, + "symbol": "ButtonMerchantError.trackOrderDeprecationError", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/wes/Developer/button-merchant-ios/Source/ButtonMerchantError.swift", + "line": 33, + "symbol": "ButtonMerchantError.noEventsError", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + } + ], + "source_directory": "/Users/wes/Developer/button-merchant-ios" +} \ No newline at end of file diff --git a/docs/latest b/docs/latest index b164bf6..f1374d2 120000 --- a/docs/latest +++ b/docs/latest @@ -1 +1 @@ -./history/1.7.1 \ No newline at end of file +./history/1.7.2 \ No newline at end of file diff --git a/fastlane/Build b/fastlane/Build new file mode 100644 index 0000000..8b2bf2d --- /dev/null +++ b/fastlane/Build @@ -0,0 +1,68 @@ +@fastfile_dir = File.expand_path(File.dirname(__FILE__)) +@build_dir = "#{@fastfile_dir}/builds/ButtonMerchant" +@ios_archive = "#{@build_dir}/ButtonMerchant.iphoneos.xcarchive" +@sim_archive = "#{@build_dir}/ButtonMerchant.iphonesimulator.xcarchive" +@xcframework_path = "#{@build_dir}/ButtonMerchant.xcframework" +@relative_framework_path = 'Products/Library/Frameworks/ButtonMerchant.framework' + +platform :ios do + + desc "Build an XCFramework" + lane :build do + ENV["CI"] = "true" + archive_framework(destination: 'generic/platform=ios', output: @ios_archive) + archive_framework(destination: 'generic/platform=iOS Simulator', output: @sim_archive) + make_xcframework + end + + desc "Archives a framework for specific destinations" + private_lane :archive_framework do |options| + UI.user_error! "❌ You must specify a destination platform!" unless !options[:destination].nil? + UI.user_error! "❌ You must specify an output location for the archive!" unless !options[:output].nil? + UI.message "🛠 Building #{options[:output]}..." + xcodebuild( + workspace: 'ButtonMerchant.xcworkspace', + scheme: 'ButtonMerchant', + configuration: 'Release', + destination: options[:destination], + archive: true, + archive_path: options[:output], + build_settings: { + "SKIP_INSTALL" => "NO", + "BUILD_LIBRARY_FOR_DISTRIBUTION" => "YES", + "SWIFT_TREAT_WARNINGS_AS_ERRORS" => "NO", + "OTHER_SWIFT_FLAGS" => "-Xfrontend -module-interface-preserve-types-as-written" + } + ) + end + + desc "Merges multiple framework archives into an XCFramework" + private_lane :make_xcframework do + sh "rm -rf #{@xcframework_path}" + + ios_framework = "#{@ios_archive}/#{@relative_framework_path}" + sim_framework = "#{@sim_archive}/#{@relative_framework_path}" + + ios_debug_symbols = "-debug-symbols #{Dir["#{@ios_archive}/dSYMs/*"].first}" + sim_debug_symbols = "-debug-symbols #{Dir["#{@sim_archive}/dSYMs/*"].first}" + + sh "xcodebuild -create-xcframework -framework #{ios_framework} #{ios_debug_symbols} -framework #{sim_framework} #{sim_debug_symbols} -output #{@xcframework_path}" + + patch_swiftinterface + end + + desc "Strips the conflicting module interface declaration https://github.com/swiftlang/swift/issues/56573" + private_lane :patch_swiftinterface do + swiftinterface_files = Dir.glob(File.join(@xcframework_path, "**", "*.swiftinterface")) + if swiftinterface_files.empty? + UI.user_error!("No swiftinterface files found in #{xcframework_path}") + end + swiftinterface_files.each do |swiftinterface_file| + UI.message("Patching swiftinterface file: #{swiftinterface_file}") + content = File.read(swiftinterface_file) + new_content = content.gsub("ButtonMerchant.", "") + File.open(swiftinterface_file, "w") { |file| file.write(new_content) } + end + UI.success("Successfully patched #{swiftinterface_files.count} swiftinterface file(s).") + end +end diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 941e327..aeea003 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,3 +1,4 @@ +import 'Build' fastlane_require 'timeout' @fastfile_dir = File.expand_path(File.dirname(__FILE__)) diff --git a/fastlane/README.md b/fastlane/README.md index 4d79cf3..c74f88e 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -15,6 +15,14 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do ## iOS +### ios build + +```sh +[bundle exec] fastlane ios build +``` + +Build an XCFramework + ### ios version ```sh