text:
[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.5...v4.22.6)

**Merged Pull Requests**

- Set type of kount fraud_session_id input to 'hidden' [#774](https://github.com/recurly/recurly-js/pull/774) ([abachman](https://github.com/abachman))

**Closed Issues**

- Apple Pay via Braintree causes CSP violation [#767](https://github.com/recurly/recurly-js/issues/767)

## [v4.22.5](https://github.com/recurly/recurly-js/tree/v4.22.5) (2022-11-14)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.4...v4.22.5)

**Merged Pull Requests**

- Update Minimum Apple Pay Version to v4 [#773](https://github.com/recurly/recurly-js/pull/773) ([cbarton](https://github.com/cbarton))
- Replace denodeify [#772](https://github.com/recurly/recurly-js/pull/772) ([wsethbrown](https://github.com/wsethbrown))
- Revert "Cartes Bancaires and Co-Branding support" [#760](https://github.com/recurly/recurly-js/pull/760) ([douglaslise](https://github.com/douglaslise))
- Adding challenge window size selections [#757](https://github.com/recurly/recurly-js/pull/757) ([tilley-kyle](https://github.com/tilley-kyle))
- Replace $ExpectError with @ts-expect-error [#755](https://github.com/recurly/recurly-js/pull/755) ([douglasmiller](https://github.com/douglasmiller))
- Cartes Bancaires and Co-Branding support [#752](https://github.com/recurly/recurly-js/pull/752) ([douglaslise](https://github.com/douglaslise))

## [v4.22.4](https://github.com/recurly/recurly-js/tree/v4.22.4) (2022-09-22)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.3...v4.22.4)

**Merged Pull Requests**

- Add google-pay type definition to recurly.d.ts [#753](https://github.com/recurly/recurly-js/pull/753) ([cyberxander90](https://github.com/cyberxander90))

## [v4.22.3](https://github.com/recurly/recurly-js/tree/v4.22.3) (2022-09-16)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.2...v4.22.3)

**Merged Pull Requests**

- Sequential Preflight Calls [#749](https://github.com/recurly/recurly-js/pull/749) ([isaacvance1027](https://github.com/isaacvance1027))

## [v4.22.2](https://github.com/recurly/recurly-js/tree/v4.22.2) (2022-07-26)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.1...v4.22.2)

**Merged Pull Requests**

- Adyen 3ds risk strategy frame update [#744](https://github.com/recurly/recurly-js/pull/744) ([isaacvance1027](https://github.com/isaacvance1027))

## [v4.22.1](https://github.com/recurly/recurly-js/tree/v4.22.1) (2022-07-20)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.22.0...v4.22.1)

**Merged Pull Requests**

- Update Adyen sdk libUrl for 3ds risk strategy [#742](https://github.com/recurly/recurly-js/pull/742) ([isaacvance1027](https://github.com/isaacvance1027))
- Credit card types refactor [#736](https://github.com/recurly/recurly-js/pull/736) ([douglaslise](https://github.com/douglaslise))

## [v4.22.0](https://github.com/recurly/recurly-js/tree/v4.22.0) (2022-07-11)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.21.1...v4.22.0)

**Merged Pull Requests**

- Add more BIN ranges for UnionPay [#735](https://github.com/recurly/recurly-js/pull/735) ([douglaslise](https://github.com/douglaslise))
- Adding support to google-pay [#733](https://github.com/recurly/recurly-js/pull/733) ([cyberxander90](https://github.com/cyberxander90))

## [v4.21.1](https://github.com/recurly/recurly-js/tree/v4.21.1) (2022-05-26)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.21.0...v4.21.1)

**Merged Pull Requests**

- ApplePay tokenize tax fields [#730](https://github.com/recurly/recurly-js/pull/730) ([cyberxander90](https://github.com/cyberxander90))
- Allow CNPJ as new tax id [#729](https://github.com/recurly/recurly-js/pull/729) ([horozcorecurly](https://github.com/horozcorecurly))

## [v4.21.0](https://github.com/recurly/recurly-js/tree/v4.21.0) (2022-05-21)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.20.2...v4.21.0)

**Merged Pull Requests**

- Fix snapshots for android10 [#728](https://github.com/recurly/recurly-js/pull/728) ([cyberxander90](https://github.com/cyberxander90))
- Select PayPal gateway [#727](https://github.com/recurly/recurly-js/pull/727) ([rlew421](https://github.com/rlew421))

## [v4.20.2](https://github.com/recurly/recurly-js/tree/v4.20.2) (2022-05-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.20.1...v4.20.2)

**Merged Pull Requests**

- Accepts custom udf on kount [#720](https://github.com/recurly/recurly-js/pull/720) ([cyberxander90](https://github.com/cyberxander90))

## [v4.20.1](https://github.com/recurly/recurly-js/tree/v4.20.1) (2022-05-04)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.20.0...v4.20.1)

**Merged Pull Requests**

- add gateway suggested field to braintree 3ds flow [#724](https://github.com/recurly/recurly-js/pull/724) ([isaacvance1027](https://github.com/isaacvance1027))

## [v4.20.0](https://github.com/recurly/recurly-js/tree/v4.20.0) (2022-04-28)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.19.1...v4.20.0)

**Merged Pull Requests**

- ApplePay through Braintree [#715](https://github.com/recurly/recurly-js/pull/715) ([cyberxander90](https://github.com/cyberxander90))

## [v4.19.1](https://github.com/recurly/recurly-js/tree/v4.19.1) (2022-03-31)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.19.0...v4.19.1)

**Merged Pull Requests**

- Worldpay 3ds prod fix [#717](https://github.com/recurly/recurly-js/pull/717) ([smagdicatrecurly](https://github.com/smagdicatrecurly))
- remove redirectURL from WorldpayStrategy [#714](https://github.com/recurly/recurly-js/pull/714) ([ajkelso](https://github.com/ajkelso))

## [v4.19.0](https://github.com/recurly/recurly-js/tree/v4.19.0) (2022-02-24)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.18.1...v4.19.0)

**Merged Pull Requests**

- Added Sofort selection form and validations [#707](https://github.com/recurly/recurly-js/pull/707) ([gilv93](https://github.com/gilv93))
- IDeal and Sofort [#701](https://github.com/recurly/recurly-js/pull/701) ([cyberxander90](https://github.com/cyberxander90))
- Adding the eu api url for eu on rjs [#700](https://github.com/recurly/recurly-js/pull/700) ([flaviomuller](https://github.com/flaviomuller))

**Closed Issues**

- Error during 3DS fingerprint check with Stripe [#706](https://github.com/recurly/recurly-js/issues/706)

## [v4.18.1](https://github.com/recurly/recurly-js/tree/v4.18.1) (2021-11-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.18.0...v4.18.1)

**Merged Pull Requests**

- Round tax amount instead of ceil [#690](https://github.com/recurly/recurly-js/pull/690) ([judith](https://github.com/judith))

**Closed Issues**

- Outdated types on DefinitelyTyped [#694](https://github.com/recurly/recurly-js/issues/694)

## [v4.18.0](https://github.com/recurly/recurly-js/tree/v4.18.0) (2021-10-20)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.17.1...v4.18.0)

**Merged Pull Requests**

- Add elements to fix failing e2e tests [#696](https://github.com/recurly/recurly-js/pull/696) ([efeygelson](https://github.com/efeygelson))
- Update jsdoc [#695](https://github.com/recurly/recurly-js/pull/695) ([cyberxander90](https://github.com/cyberxander90))
- Add chase orbital 3ds strategy [#692](https://github.com/recurly/recurly-js/pull/692) ([cyberxander90](https://github.com/cyberxander90))

## [v4.17.1](https://github.com/recurly/recurly-js/tree/v4.17.1) (2021-08-19)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.17.0...v4.17.1)

**Merged Pull Requests**

- Add BIN range for Tarjeta Naranja [#689](https://github.com/recurly/recurly-js/pull/689) ([efeygelson](https://github.com/efeygelson))

## [v4.17.0](https://github.com/recurly/recurly-js/tree/v4.17.0) (2021-08-12)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.16.2...v4.17.0)

**Merged Pull Requests**

- Revert "add security to github CODEOWNER file" [#688](https://github.com/recurly/recurly-js/pull/688) ([eternal44](https://github.com/eternal44))
- Add support to SagePay 3DS2 [#687](https://github.com/recurly/recurly-js/pull/687) ([cyberxander90](https://github.com/cyberxander90))
- add security to github CODEOWNER file [#685](https://github.com/recurly/recurly-js/pull/685) ([eternal44](https://github.com/eternal44))
- Add test to support cuit tax identifiers [#684](https://github.com/recurly/recurly-js/pull/684) ([cyberxander90](https://github.com/cyberxander90))
- Add fields and details types to RecurlyError [#680](https://github.com/recurly/recurly-js/pull/680) ([cyberxander90](https://github.com/cyberxander90))

**Closed Issues**

- Add a line item for trial in apple pay payment sheet  [#686](https://github.com/recurly/recurly-js/issues/686)
- Better validation on fly ? [#679](https://github.com/recurly/recurly-js/issues/679)

## [v4.16.2](https://github.com/recurly/recurly-js/tree/v4.16.2) (2021-05-05)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.16.1...v4.16.2)

**Merged Pull Requests**

- Venmo Desktop [#670](https://github.com/recurly/recurly-js/pull/670) ([efeygelson](https://github.com/efeygelson))

## [v4.16.1](https://github.com/recurly/recurly-js/tree/v4.16.1) (2021-04-07)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.16.0...v4.16.1)

**Merged Pull Requests**

- Allow recurly.js implementer to specify if 3ds2 device data collection calls occur [#671](https://github.com/recurly/recurly-js/pull/671) ([glaubenstein](https://github.com/glaubenstein))

## [v4.16.0](https://github.com/recurly/recurly-js/tree/v4.16.0) (2021-02-25)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.15.1...v4.16.0)

**Merged Pull Requests**

- Allows a PricingPromise to be provided to the ApplePay constructor [#665](https://github.com/recurly/recurly-js/pull/665) ([chrissrogers](https://github.com/chrissrogers))
- Venmo support [#661](https://github.com/recurly/recurly-js/pull/661) ([efeygelson](https://github.com/efeygelson))

**Closed Issues**

- Is there a way to configure inputs to remove Chrome's autofill styles?  [#659](https://github.com/recurly/recurly-js/issues/659)

## [v4.15.1](https://github.com/recurly/recurly-js/tree/v4.15.1) (2020-11-18)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.15.0...v4.15.1)

**Merged Pull Requests**

- Support setup intents on 3ds2 [#653](https://github.com/recurly/recurly-js/pull/653) ([glaubenstein](https://github.com/glaubenstein))

## [v4.15.0](https://github.com/recurly/recurly-js/tree/v4.15.0) (2020-11-10)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.14.0...v4.15.0)

**Merged Pull Requests**

- Add support for 3ds2 transactions with cybersource [#652](https://github.com/recurly/recurly-js/pull/652) ([glaubenstein](https://github.com/glaubenstein))
- TypeScript updates and fixes [#648](https://github.com/recurly/recurly-js/pull/648) ([dbrudner](https://github.com/dbrudner))
- Adjust ELO BIN ranges [#647](https://github.com/recurly/recurly-js/pull/647) ([billkauf1](https://github.com/billkauf1))
- Fixes test-unit-debug Make target [#643](https://github.com/recurly/recurly-js/pull/643) ([chrissrogers](https://github.com/chrissrogers))
- Fixes DefinitelyTyped GitHub action trigger [#641](https://github.com/recurly/recurly-js/pull/641) ([dbrudner](https://github.com/dbrudner))
- Fixes error reporting [#638](https://github.com/recurly/recurly-js/pull/638) ([dbrudner](https://github.com/dbrudner))
- Fix dt checkout action [#637](https://github.com/recurly/recurly-js/pull/637) ([dbrudner](https://github.com/dbrudner))
- Adds e2e test for kount [#636](https://github.com/recurly/recurly-js/pull/636) ([dbrudner](https://github.com/dbrudner))
- Enhances types for BankAccount [#633](https://github.com/recurly/recurly-js/pull/633) ([dbrudner](https://github.com/dbrudner))

**Closed Issues**

- Incomplete typings [#646](https://github.com/recurly/recurly-js/issues/646)
- Not able to add new attribute maxlenth to element card element [#639](https://github.com/recurly/recurly-js/issues/639)

## [v4.14.0](https://github.com/recurly/recurly-js/tree/v4.14.0) (2020-07-30)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.13.1...v4.14.0)

**Merged Pull Requests**

- Adds support to tokenize tax_identifier [#629](https://github.com/recurly/recurly-js/pull/629) ([lexac1](https://github.com/lexac1))
- Adds tsdoc comments for types [#627](https://github.com/recurly/recurly-js/pull/627) ([dbrudner](https://github.com/dbrudner))
- Removes nonexistent token method from PayPal.d.ts [#626](https://github.com/recurly/recurly-js/pull/626) ([dbrudner](https://github.com/dbrudner))
- Adds Element.focus method to types [#625](https://github.com/recurly/recurly-js/pull/625) ([dbrudner](https://github.com/dbrudner))
- Fixes previous tabbing for Elements on non-mobile browsers [#618](https://github.com/recurly/recurly-js/pull/618) ([chrissrogers](https://github.com/chrissrogers))
- Adds Becs support [#614](https://github.com/recurly/recurly-js/pull/614) ([calebbarde](https://github.com/calebbarde))

## [v4.13.1](https://github.com/recurly/recurly-js/tree/v4.13.1) (2020-07-16)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.13.0...v4.13.1)

**Merged Pull Requests**

- Patches dtslint config to match DefinitelyTyped [#620](https://github.com/recurly/recurly-js/pull/620) ([dbrudner](https://github.com/dbrudner))

## [v4.13.0](https://github.com/recurly/recurly-js/tree/v4.13.0) (2020-06-23)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.12.0...v4.13.0)

**Merged Pull Requests**

- Use more inclusive terms [#616](https://github.com/recurly/recurly-js/pull/616) ([aaron-junot](https://github.com/aaron-junot))
- Fixes BankAccount type test [#615](https://github.com/recurly/recurly-js/pull/615) ([dbrudner](https://github.com/dbrudner))
- Updates dependencies [#613](https://github.com/recurly/recurly-js/pull/613) ([dbrudner](https://github.com/dbrudner))
- Adds e2e tests for electron [#610](https://github.com/recurly/recurly-js/pull/610) ([dbrudner](https://github.com/dbrudner))
- Adds Bacs Support [#608](https://github.com/recurly/recurly-js/pull/608) ([calebbarde](https://github.com/calebbarde))
- Throws missing plan code error if plan is an empty string [#603](https://github.com/recurly/recurly-js/pull/603) ([dbrudner](https://github.com/dbrudner))
- Sends requested currency in `GET /apple_pay/info` requests [#600](https://github.com/recurly/recurly-js/pull/600) ([chrissrogers](https://github.com/chrissrogers))
- Caches plan requests [#599](https://github.com/recurly/recurly-js/pull/599) ([chrissrogers](https://github.com/chrissrogers))
- Restructures types for DT [#595](https://github.com/recurly/recurly-js/pull/595) ([dbrudner](https://github.com/dbrudner))
- Increases the report collation period to 30 seconds [#594](https://github.com/recurly/recurly-js/pull/594) ([chrissrogers](https://github.com/chrissrogers))
- Adds electron as env for unit tests [#593](https://github.com/recurly/recurly-js/pull/593) ([dbrudner](https://github.com/dbrudner))
- Adds PayPal#destroy [#592](https://github.com/recurly/recurly-js/pull/592) ([dbrudner](https://github.com/dbrudner))
- Adds exports for types [#591](https://github.com/recurly/recurly-js/pull/591) ([dbrudner](https://github.com/dbrudner))

**Closed Issues**

- Add support for SEPA billing info [#606](https://github.com/recurly/recurly-js/issues/606)

## [v4.12.0](https://github.com/recurly/recurly-js/tree/v4.12.0) (2020-03-21)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.11.0...v4.12.0)

**Merged Pull Requests**

- Adds union pay [#590](https://github.com/recurly/recurly-js/pull/590) ([lexac1](https://github.com/lexac1))
- Fixes webpack-dev-server options in makefile [#585](https://github.com/recurly/recurly-js/pull/585) ([dbrudner](https://github.com/dbrudner))
- Adds support for tokenizing IBAN Bank accounts [#579](https://github.com/recurly/recurly-js/pull/579) ([chrissrogers](https://github.com/chrissrogers))
- Updates fraud detection endpoint consumer [#577](https://github.com/recurly/recurly-js/pull/577) ([chrissrogers](https://github.com/chrissrogers))
- Fixes discount calculations on free trial subscriptions with a single-use coupon [#574](https://github.com/recurly/recurly-js/pull/574) ([chrissrogers](https://github.com/chrissrogers))
- Fixes HostedFields reset on re-configuration preceding initialization [#573](https://github.com/recurly/recurly-js/pull/573) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Wrong discount and subtotal next values [#572](https://github.com/recurly/recurly-js/issues/572)
- Subsequent calls to `recurly.configure()` fail if hosted field(s) didn't fully load [#570](https://github.com/recurly/recurly-js/issues/570)

## [v4.11.0](https://github.com/recurly/recurly-js/tree/v4.11.0) (2019-12-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.10.3...v4.11.0)

**Merged Pull Requests**

- Add new Discover BINs [#569](https://github.com/recurly/recurly-js/pull/569) ([billkauf1](https://github.com/billkauf1))
- Elements [#568](https://github.com/recurly/recurly-js/pull/568) ([chrissrogers](https://github.com/chrissrogers))
- Checkout pricing items [#566](https://github.com/recurly/recurly-js/pull/566) ([chrissrogers](https://github.com/chrissrogers))
- Fixes an issue with paypal incorrectly emitting a cancel event on success [#564](https://github.com/recurly/recurly-js/pull/564) ([dbrudner](https://github.com/dbrudner))
- updates Frame to use enum instead of string types [#557](https://github.com/recurly/recurly-js/pull/557) ([dbrudner](https://github.com/dbrudner))

**Closed Issues**

- Recurly Issue on Internet Explorer - Can't Proceed with Payment [#562](https://github.com/recurly/recurly-js/issues/562)
- Safari Autofill does not seem to propagate Recurly change event state properly [#561](https://github.com/recurly/recurly-js/issues/561)
- Fix spacing of expiry and CVV in the Card field [#502](https://github.com/recurly/recurly-js/issues/502)

## [v4.10.3](https://github.com/recurly/recurly-js/tree/v4.10.3) (2019-09-24)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.10.2...v4.10.3)

**Merged Pull Requests**

- Fixes Braintree authentication amount display [#556](https://github.com/recurly/recurly-js/pull/556) ([chrissrogers](https://github.com/chrissrogers))
- Renders Wirecard 3DS challenge as an iframe instead of new window [#555](https://github.com/recurly/recurly-js/pull/555) ([chrissrogers](https://github.com/chrissrogers))
- adds lint step to travis-ci .yml [#554](https://github.com/recurly/recurly-js/pull/554) ([dbrudner](https://github.com/dbrudner))
- runs npm audit fix [#550](https://github.com/recurly/recurly-js/pull/550) ([dbrudner](https://github.com/dbrudner))

## [v4.10.2](https://github.com/recurly/recurly-js/tree/v4.10.2) (2019-09-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.10.1...v4.10.2)

**Merged Pull Requests**

- Fixes loading Braintree libraries [#549](https://github.com/recurly/recurly-js/pull/549) ([miscer](https://github.com/miscer))
- Adds 3D Secure support for Worldpay [#547](https://github.com/recurly/recurly-js/pull/547) ([chrissrogers](https://github.com/chrissrogers))
- adds error emission instead of throwing in Fraud [#546](https://github.com/recurly/recurly-js/pull/546) ([dbrudner](https://github.com/dbrudner))
- implement CIT for sagepay [#543](https://github.com/recurly/recurly-js/pull/543) ([calebbarde](https://github.com/calebbarde))
- Adds 'aria-hidden' tag to hidden input field [#542](https://github.com/recurly/recurly-js/pull/542) ([dbrudner](https://github.com/dbrudner))
- Emit PayPal cancel event on frame close [#525](https://github.com/recurly/recurly-js/pull/525) ([aaron-junot](https://github.com/aaron-junot))

**Closed Issues**

- Return an Error when actionTokenID is not provided to ThreeDSecure constructor [#536](https://github.com/recurly/recurly-js/issues/536)

## [v4.10.1](https://github.com/recurly/recurly-js/tree/v4.10.1) (2019-08-27)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.10.0...v4.10.1)

**Merged Pull Requests**

- Sets ThreeDSecureStrategy#container height and width to 100% [#538](https://github.com/recurly/recurly-js/pull/538) ([chrissrogers](https://github.com/chrissrogers))
- Requires actionTokenId to be provided when instantiating ThreeDSecure [#537](https://github.com/recurly/recurly-js/pull/537) ([chrissrogers](https://github.com/chrissrogers))
- Adds Wirecard 3D Secure support [#535](https://github.com/recurly/recurly-js/pull/535) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Return an Error when actionTokenID is not provided to ThreeDSecure constructor [#536](https://github.com/recurly/recurly-js/issues/536)

## [v4.10.0](https://github.com/recurly/recurly-js/tree/v4.10.0) (2019-06-21)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.7...v4.10.0)

**Merged Pull Requests**

- Updates StripeStrategy to resolve only the PaymentIntent.id [#531](https://github.com/recurly/recurly-js/pull/531) ([chrissrogers](https://github.com/chrissrogers))
- Corrects ApplePay completeShippingMethodSelection call signature [#529](https://github.com/recurly/recurly-js/pull/529) ([chrissrogers](https://github.com/chrissrogers))
- 3D Secure 2.0 [#527](https://github.com/recurly/recurly-js/pull/527) ([chrissrogers](https://github.com/chrissrogers))
- Use handleCardAction for post SCA [#524](https://github.com/recurly/recurly-js/pull/524) ([jpgnotgif](https://github.com/jpgnotgif))

## [v4.9.7](https://github.com/recurly/recurly-js/tree/v4.9.7) (2019-05-23)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.6...v4.9.7)

**Merged Pull Requests**

- Adds 'details' to token validation errors [#522](https://github.com/recurly/recurly-js/pull/522) ([chrissrogers](https://github.com/chrissrogers))

## [v4.9.6](https://github.com/recurly/recurly-js/tree/v4.9.6) (2019-03-25)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.5...v4.9.6)

**Merged Pull Requests**

- Adds specific tax amount overrides to SubscriptionPricing and CheckoutPricing [#515](https://github.com/recurly/recurly-js/pull/515) ([chrissrogers](https://github.com/chrissrogers))

## [v4.9.5](https://github.com/recurly/recurly-js/tree/v4.9.5) (2019-01-31)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.4...v4.9.5)

**Merged Pull Requests**

- Fixes Edge 44 bug when adding an iframe as a bus recipient [#510](https://github.com/recurly/recurly-js/pull/510) ([chrissrogers](https://github.com/chrissrogers))
- Adds adyen-error [#507](https://github.com/recurly/recurly-js/pull/507) ([chrissrogers](https://github.com/chrissrogers))
- Fixes detection of tabbing order on mobile browsers [#504](https://github.com/recurly/recurly-js/pull/504) ([chrissrogers](https://github.com/chrissrogers))
- Adds field type to reporter events on field focus and blur [#501](https://github.com/recurly/recurly-js/pull/501) ([chrissrogers](https://github.com/chrissrogers))
- Isolates buses across instances [#500](https://github.com/recurly/recurly-js/pull/500) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Unable click and fill up security code and expiration date using Microsoft Edge [#509](https://github.com/recurly/recurly-js/issues/509)
- Add "adyen-error" to ERRORS [#506](https://github.com/recurly/recurly-js/issues/506)
- Tabbing with multiple hosted fields in mobile Safari [#503](https://github.com/recurly/recurly-js/issues/503)

## [v4.9.4](https://github.com/recurly/recurly-js/tree/v4.9.4) (2018-12-11)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.3...v4.9.4)

**Merged Pull Requests**

- Fixes reference to Promise library [#499](https://github.com/recurly/recurly-js/pull/499) ([chrissrogers](https://github.com/chrissrogers))
- Fixes determination of individual field formatting configuration [#498](https://github.com/recurly/recurly-js/pull/498) ([chrissrogers](https://github.com/chrissrogers))
- Make fsevents optional to allow for builds on linux systems [#495](https://github.com/recurly/recurly-js/pull/495) ([jss79](https://github.com/jss79))
- Fixes coupon resolving when switching subscription plans [#489](https://github.com/recurly/recurly-js/pull/489) ([chrissrogers](https://github.com/chrissrogers))
- Fixes SubscriptionPricing addon removal [#487](https://github.com/recurly/recurly-js/pull/487) ([chrissrogers](https://github.com/chrissrogers))
- Fix pricing calculation for multiple addons [#471](https://github.com/recurly/recurly-js/pull/471) ([rstrand](https://github.com/rstrand))

**Closed Issues**

- Object doesn't support property or method 'assign' [#496](https://github.com/recurly/recurly-js/issues/496)
- Plan-restricted coupon works for another plan too [#488](https://github.com/recurly/recurly-js/issues/488)
- Removing an addon from Pricing instance causes "invalid-item" error [#486](https://github.com/recurly/recurly-js/issues/486)
- [Hosted pages] Current email address can be changed into an invalid email address with no error generated [#481](https://github.com/recurly/recurly-js/issues/481)
- [Payment form] The "Pay $10.00 USD/mo." button becomes clickable even though the invalid CC number error is displayed [#480](https://github.com/recurly/recurly-js/issues/480)
- Problem with Diners club number, the caret wrongly moves inside the string. [#476](https://github.com/recurly/recurly-js/issues/476)

## [v4.9.3](https://github.com/recurly/recurly-js/tree/v4.9.3) (2018-10-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.2...v4.9.3)

**Merged Pull Requests**

- Fixes storage availability check within hosted fields [#482](https://github.com/recurly/recurly-js/pull/482) ([chrissrogers](https://github.com/chrissrogers))

## [v4.9.2](https://github.com/recurly/recurly-js/tree/v4.9.2) (2018-10-03)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.1...v4.9.2)

**Merged Pull Requests**

- Adds Storage availability check and generic object fallback scenario [#478](https://github.com/recurly/recurly-js/pull/478) ([chrissrogers](https://github.com/chrissrogers))
- Catches non-critical worker init errors and reports them via debug [#477](https://github.com/recurly/recurly-js/pull/477) ([chrissrogers](https://github.com/chrissrogers))

## [v4.9.1](https://github.com/recurly/recurly-js/tree/v4.9.1) (2018-09-05)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.9.0...v4.9.1)

**Merged Pull Requests**

- Fixes issue where tax exemption results in negative taxes [#475](https://github.com/recurly/recurly-js/pull/475) ([chrissrogers](https://github.com/chrissrogers))
- Allow specifying requiredShippingContactFields in Apple Pay [#474](https://github.com/recurly/recurly-js/pull/474) ([emcro](https://github.com/emcro))

## [v4.9.0](https://github.com/recurly/recurly-js/tree/v4.9.0) (2018-08-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.7...v4.9.0)

**Merged Pull Requests**

- Recurly.Event [#459](https://github.com/recurly/recurly-js/pull/459) ([chrissrogers](https://github.com/chrissrogers))

## [v4.8.7](https://github.com/recurly/recurly-js/tree/v4.8.7) (2018-07-31)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.6...v4.8.7)

**Merged Pull Requests**

- Fixes Kount fraud detection when using Card field [#470](https://github.com/recurly/recurly-js/pull/470) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Fraud module and card field [#469](https://github.com/recurly/recurly-js/issues/469)

## [v4.8.6](https://github.com/recurly/recurly-js/tree/v4.8.6) (2018-05-17)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.5...v4.8.6)

**Merged Pull Requests**

- fix: switch to using window over global [#456](https://github.com/recurly/recurly-js/pull/456) ([thisislawatts](https://github.com/thisislawatts))
- chore: remove eval from minified file [#455](https://github.com/recurly/recurly-js/pull/455) ([thisislawatts](https://github.com/thisislawatts))
- Adds deviceId and sessionId [#454](https://github.com/recurly/recurly-js/pull/454) ([chrissrogers](https://github.com/chrissrogers))
- Moves request concerns out of main Recurly class module [#452](https://github.com/recurly/recurly-js/pull/452) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Hosted field focus issue in Firefox 59.0.2 (64-bit) [#460](https://github.com/recurly/recurly-js/issues/460)

## [v4.8.5](https://github.com/recurly/recurly-js/tree/v4.8.5) (2018-03-29)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.4...v4.8.5)

**Merged Pull Requests**

- Adds tabIndex configuration support [#448](https://github.com/recurly/recurly-js/pull/448) ([chrissrogers](https://github.com/chrissrogers))
- Cleans up errors and adds select generation to createHiddenInput [#445](https://github.com/recurly/recurly-js/pull/445) ([chrissrogers](https://github.com/chrissrogers))
- Removes dates from CHANGELOG [#443](https://github.com/recurly/recurly-js/pull/443) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Incorrect validation of card number [#441](https://github.com/recurly/recurly-js/issues/441)
- Checkout with PayPal in private window mode [#419](https://github.com/recurly/recurly-js/issues/419)
- Loading Font Weight 300 from Google Font [#360](https://github.com/recurly/recurly-js/issues/360)

## [v4.8.4](https://github.com/recurly/recurly-js/tree/v4.8.4) (2018-03-16)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.3...v4.8.4)

**Merged Pull Requests**

- Fixes hosted field forced-focus binding [#439](https://github.com/recurly/recurly-js/pull/439) ([chrissrogers](https://github.com/chrissrogers))
- Adds displayIcon field configuration option pass-through [#433](https://github.com/recurly/recurly-js/pull/433) ([chrissrogers](https://github.com/chrissrogers))
- Small cleanup for field injections [#431](https://github.com/recurly/recurly-js/pull/431) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Option to prevent font fetching [#424](https://github.com/recurly/recurly-js/issues/424)

## [v4.8.3](https://github.com/recurly/recurly-js/tree/v4.8.3) (2018-02-27)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.2...v4.8.3)

**Merged Pull Requests**

- Mobile Tabbing for multiple/combined card fields [#421](https://github.com/recurly/recurly-js/pull/421) ([jpgnotgif](https://github.com/jpgnotgif))

## [v4.8.2](https://github.com/recurly/recurly-js/tree/v4.8.2) (2018-02-15)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.1...v4.8.2)

**Merged Pull Requests**

- Apple pay zero amount authorizations [#426](https://github.com/recurly/recurly-js/pull/426) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Firefox: Red border around hosted fields [#427](https://github.com/recurly/recurly-js/issues/427)

## [v4.8.1](https://github.com/recurly/recurly-js/tree/v4.8.1) (2018-01-17)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.8.0...v4.8.1)

**Merged Pull Requests**

- Revert "Mobile Tabbing for Recurly.js" [#420](https://github.com/recurly/recurly-js/pull/420) ([chrissrogers](https://github.com/chrissrogers))
- Adds support for logo assignment in PayPal flow [#418](https://github.com/recurly/recurly-js/pull/418) ([chrissrogers](https://github.com/chrissrogers))
- Mobile Tabbing for Recurly.js [#396](https://github.com/recurly/recurly-js/pull/396) ([jpgnotgif](https://github.com/jpgnotgif))

## [v4.8.0](https://github.com/recurly/recurly-js/tree/v4.8.0) (2017-12-13)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.7.2...v4.8.0)

**Merged Pull Requests**

- Fix checkout coupon currency safety [#417](https://github.com/recurly/recurly-js/pull/417) ([chrissrogers](https://github.com/chrissrogers))
- Fixes vestigial coupons on Checkout Calculations [#416](https://github.com/recurly/recurly-js/pull/416) ([chrissrogers](https://github.com/chrissrogers))
- Adds safety check to calculation of discount amount [#415](https://github.com/recurly/recurly-js/pull/415) ([chrissrogers](https://github.com/chrissrogers))
- Updates recurly.css for cross-device standard appearance [#414](https://github.com/recurly/recurly-js/pull/414) ([chrissrogers](https://github.com/chrissrogers))
- Fix checkout deferred emitters [#413](https://github.com/recurly/recurly-js/pull/413) ([chrissrogers](https://github.com/chrissrogers))
- fix bug with listener not registered for cancel event on paypal [#412](https://github.com/recurly/recurly-js/pull/412) ([keemy](https://github.com/keemy))
- Fixes subscription sort for discount selection [#411](https://github.com/recurly/recurly-js/pull/411) ([chrissrogers](https://github.com/chrissrogers))
- Fixes taxation of credit adjustments [#410](https://github.com/recurly/recurly-js/pull/410) ([chrissrogers](https://github.com/chrissrogers))
- Fixes CheckoutPricing discount taxation [#408](https://github.com/recurly/recurly-js/pull/408) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with reporting of negative pricing amounts [#407](https://github.com/recurly/recurly-js/pull/407) ([chrissrogers](https://github.com/chrissrogers))
- Removes lodash.after dependency from BraintreeStrategy [#406](https://github.com/recurly/recurly-js/pull/406) ([chrissrogers](https://github.com/chrissrogers))
- Ensures an invalid coupon emits an error on CheckoutPricing [#405](https://github.com/recurly/recurly-js/pull/405) ([chrissrogers](https://github.com/chrissrogers))
- Adds Card Hosted Field support [#404](https://github.com/recurly/recurly-js/pull/404) ([chrissrogers](https://github.com/chrissrogers))
- Fixes dynamic removal of subscriptions and adjustments from CheckoutPricing/Attachment [#403](https://github.com/recurly/recurly-js/pull/403) ([chrissrogers](https://github.com/chrissrogers))
- Fixes CheckoutPricing attachment orphaned element discovery [#402](https://github.com/recurly/recurly-js/pull/402) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with detachment reference to observer [#401](https://github.com/recurly/recurly-js/pull/401) ([chrissrogers](https://github.com/chrissrogers))
- CheckoutPricing [#399](https://github.com/recurly/recurly-js/pull/399) ([chrissrogers](https://github.com/chrissrogers))
- CheckoutPricing: Attachment and Shipping Addresses [#398](https://github.com/recurly/recurly-js/pull/398) ([chrissrogers](https://github.com/chrissrogers))
- CheckoutPricing: Apply Pay & PayPal support [#394](https://github.com/recurly/recurly-js/pull/394) ([chrissrogers](https://github.com/chrissrogers))
- CheckoutPricing: Taxes and Adjustment Currencies [#393](https://github.com/recurly/recurly-js/pull/393) ([chrissrogers](https://github.com/chrissrogers))
- add support for adyen hpp checkout [#392](https://github.com/recurly/recurly-js/pull/392) ([adeitrick](https://github.com/adeitrick))
- CheckoutPricing: Gift cards [#391](https://github.com/recurly/recurly-js/pull/391) ([chrissrogers](https://github.com/chrissrogers))
- Updates README build status display [#387](https://github.com/recurly/recurly-js/pull/387) ([chrissrogers](https://github.com/chrissrogers))
- CheckoutPricing: Coupons [#385](https://github.com/recurly/recurly-js/pull/385) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Coupon impact on total price [#343](https://github.com/recurly/recurly-js/issues/343)
- Pricing.attach: check that event target is a valid data-recurly element [#181](https://github.com/recurly/recurly-js/issues/181)
- How to interrupt previous Pricing API call with promise? [#164](https://github.com/recurly/recurly-js/issues/164)
- Plan add-ons don't return a property indicating editable quantity [#162](https://github.com/recurly/recurly-js/issues/162)
- Error: Plan Undefined (Firefox/IE) when using Pricing on a form with add-ons [#158](https://github.com/recurly/recurly-js/issues/158)
- Use a Decimal implementation in place of Number. [#148](https://github.com/recurly/recurly-js/issues/148)
- Customer-facing error messages [#129](https://github.com/recurly/recurly-js/issues/129)
- Have the properties in Tokenized billing info be available w/o additional request [#116](https://github.com/recurly/recurly-js/issues/116)

## [v4.7.2](https://github.com/recurly/recurly-js/tree/v4.7.2) (2017-10-23)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.7.1...v4.7.2)

**Merged Pull Requests**

- Don't require form for Apple Pay [#381](https://github.com/recurly/recurly-js/pull/381) ([snodgrass23](https://github.com/snodgrass23))

## [v4.7.1](https://github.com/recurly/recurly-js/tree/v4.7.1) (2017-10-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.7.0...v4.7.1)

**Merged Pull Requests**

- use Apple Pay contact data when form name and address are not supplied [#380](https://github.com/recurly/recurly-js/pull/380) ([snodgrass23](https://github.com/snodgrass23))

## [v4.7.0](https://github.com/recurly/recurly-js/tree/v4.7.0) (2017-09-15)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.6.4...v4.7.0)

**Merged Pull Requests**

- Fixes field style propagation [#378](https://github.com/recurly/recurly-js/pull/378) ([chrissrogers](https://github.com/chrissrogers))
- Adds 'attached' event to Pricing [#377](https://github.com/recurly/recurly-js/pull/377) ([chrissrogers](https://github.com/chrissrogers))
- Adds inputType configuration to HostedField.fieldConfig [#375](https://github.com/recurly/recurly-js/pull/375) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Recurly doesn't support authorization amounts greater than 1$ [#379](https://github.com/recurly/recurly-js/issues/379)
- Error styling [#376](https://github.com/recurly/recurly-js/issues/376)
- Autocomplete / Autofill does not work [#368](https://github.com/recurly/recurly-js/issues/368)
- Event/Promise when pricing.attach() is complete? [#270](https://github.com/recurly/recurly-js/issues/270)

## [v4.6.4](https://github.com/recurly/recurly-js/tree/v4.6.4) (2017-09-05)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.6.3...v4.6.4)

**Merged Pull Requests**

- Fixes Apple Pay pricing initialization [#374](https://github.com/recurly/recurly-js/pull/374) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Documentation: (1) Full list of recurly.configure options and (2) calling recurly.token with an object rather than form element [#373](https://github.com/recurly/recurly-js/issues/373)
- React compatible version? [#372](https://github.com/recurly/recurly-js/issues/372)
- Apple Pay init error - "" is not a valid amount [#371](https://github.com/recurly/recurly-js/issues/371)

## [v4.6.3](https://github.com/recurly/recurly-js/tree/v4.6.3) (2017-08-10)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.6.2...v4.6.3)

**Merged Pull Requests**

- Passes PayPal amount param to API start endpoint [#369](https://github.com/recurly/recurly-js/pull/369) ([chrissrogers](https://github.com/chrissrogers))
- Adds a missing error type [#367](https://github.com/recurly/recurly-js/pull/367) ([chrissrogers](https://github.com/chrissrogers))

## [v4.6.2](https://github.com/recurly/recurly-js/tree/v4.6.2) (2017-07-06)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.6.1...v4.6.2)

**Merged Pull Requests**

- Adds support for Braintree deviceData [#363](https://github.com/recurly/recurly-js/pull/363) ([chrissrogers](https://github.com/chrissrogers))
- Adds company attribute collection to ApplePay tokenizer [#361](https://github.com/recurly/recurly-js/pull/361) ([chrissrogers](https://github.com/chrissrogers))
- Adds support for 'company' field [#358](https://github.com/recurly/recurly-js/pull/358) ([chrissrogers](https://github.com/chrissrogers))
- Adds field container click event deference [#356](https://github.com/recurly/recurly-js/pull/356) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Can't make the Paypal example work w/ sandbox account [#359](https://github.com/recurly/recurly-js/issues/359)
- Add company name field to the supported data-recurly fields [#357](https://github.com/recurly/recurly-js/issues/357)

## [v4.6.1](https://github.com/recurly/recurly-js/tree/v4.6.1) (2017-06-08)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.6.0...v4.6.1)

**Merged Pull Requests**

- Adds package-lock.json [#355](https://github.com/recurly/recurly-js/pull/355) ([chrissrogers](https://github.com/chrissrogers))
- Fixes error handler within bus relay handler [#354](https://github.com/recurly/recurly-js/pull/354) ([chrissrogers](https://github.com/chrissrogers))
- Adds polyfill for Object.assign [#352](https://github.com/recurly/recurly-js/pull/352) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Object.assign not supported in IE [#350](https://github.com/recurly/recurly-js/issues/350)
- Option to show paypal in a popup window (instead of a new tab) [#296](https://github.com/recurly/recurly-js/issues/296)

## [v4.6.0](https://github.com/recurly/recurly-js/tree/v4.6.0) (2017-04-22)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.5.3...v4.6.0)

**Merged Pull Requests**

- PayPal Express Checkout [#348](https://github.com/recurly/recurly-js/pull/348) ([chrissrogers](https://github.com/chrissrogers))
- Adds support for local certificate assignment [#346](https://github.com/recurly/recurly-js/pull/346) ([chrissrogers](https://github.com/chrissrogers))

## [v4.5.3](https://github.com/recurly/recurly-js/tree/v4.5.3) (2017-03-28)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.5.2...v4.5.3)

**Merged Pull Requests**

- Fixes issue with new PayPal API usage of deprecated method [#345](https://github.com/recurly/recurly-js/pull/345) ([chrissrogers](https://github.com/chrissrogers))
- Removes old dependencies [#344](https://github.com/recurly/recurly-js/pull/344) ([chrissrogers](https://github.com/chrissrogers))
- Adds BraintreePayPal failure fallback [#336](https://github.com/recurly/recurly-js/pull/336) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Change placeholder text at runtime [#342](https://github.com/recurly/recurly-js/issues/342)
- After several times quickly open and close dialog with form, recurly fields are invisible [#337](https://github.com/recurly/recurly-js/issues/337)
- Hosted fields should force numbers-only for ALL browsers [#290](https://github.com/recurly/recurly-js/issues/290)

## [v4.5.2](https://github.com/recurly/recurly-js/tree/v4.5.2) (2017-03-14)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.5.1...v4.5.2)

**Merged Pull Requests**

- Makes origin checking compatible with IE11 + possibly others [#341](https://github.com/recurly/recurly-js/pull/341) ([davedevelopment](https://github.com/davedevelopment))
- Prevents relay from polluting main Recurly instance [#340](https://github.com/recurly/recurly-js/pull/340) ([chrissrogers](https://github.com/chrissrogers))
- Sends Braintree device fingerprint along with PayPal requests [#338](https://github.com/recurly/recurly-js/pull/338) ([chrissrogers](https://github.com/chrissrogers))
- Adds device data collection to Braintree PayPal instantiation [#333](https://github.com/recurly/recurly-js/pull/333) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Reset the recurly form on error [#334](https://github.com/recurly/recurly-js/issues/334)
- Bug: Recurly returns random 302 responses [#324](https://github.com/recurly/recurly-js/issues/324)
- Can labels be put into iframes for better accessibility? [#283](https://github.com/recurly/recurly-js/issues/283)

## [v4.5.1](https://github.com/recurly/recurly-js/tree/v4.5.1) (2017-02-27)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.5.0...v4.5.1)

**Merged Pull Requests**

- Fixes dependent module resolution to main [#332](https://github.com/recurly/recurly-js/pull/332) ([chrissrogers](https://github.com/chrissrogers))
- Patch for issue #329 [#330](https://github.com/recurly/recurly-js/pull/330) ([jchayan](https://github.com/jchayan))
- Adds parentVersion property [#325](https://github.com/recurly/recurly-js/pull/325) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Hosted fields change event should be compatible with HTML5 input change event [#331](https://github.com/recurly/recurly-js/issues/331)
- window.addEventListener('message') should verify the message origin [#329](https://github.com/recurly/recurly-js/issues/329)
- Month field validation when year is empty [#328](https://github.com/recurly/recurly-js/issues/328)

## [v4.5.0](https://github.com/recurly/recurly-js/tree/v4.5.0) (2017-02-21)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.4.1...v4.5.0)

**Merged Pull Requests**

- Removes some superfluous comments [#326](https://github.com/recurly/recurly-js/pull/326) ([chrissrogers](https://github.com/chrissrogers))
- Update Apple Pay init to receive payment form [#322](https://github.com/recurly/recurly-js/pull/322) ([snodgrass23](https://github.com/snodgrass23))
- Braintree-PayPal [#317](https://github.com/recurly/recurly-js/pull/317) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Hosted fields change event should be compatible with HTML5 input change event [#331](https://github.com/recurly/recurly-js/issues/331)

## [v4.4.1](https://github.com/recurly/recurly-js/tree/v4.4.1) (2017-02-10)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.1.1...v4.4.1)

**Merged Pull Requests**

- Also send name, address, etc fields for apple pay token creation [#320](https://github.com/recurly/recurly-js/pull/320) ([snodgrass23](https://github.com/snodgrass23))
- Apple Pay part 2 [#315](https://github.com/recurly/recurly-js/pull/315) ([chrissrogers](https://github.com/chrissrogers))
- Revert "Add support for tabbing in a Mobile browser." [#314](https://github.com/recurly/recurly-js/pull/314) ([chrissrogers](https://github.com/chrissrogers))
- Apple Pay [#313](https://github.com/recurly/recurly-js/pull/313) ([chrissrogers](https://github.com/chrissrogers))
- Include the responseText when json is invalid [#307](https://github.com/recurly/recurly-js/pull/307) ([geoffdutton](https://github.com/geoffdutton))
- Ensures configuration objects are not externally mutable [#303](https://github.com/recurly/recurly-js/pull/303) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with address attachment [#302](https://github.com/recurly/recurly-js/pull/302) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with config coercion [#301](https://github.com/recurly/recurly-js/pull/301) ([chrissrogers](https://github.com/chrissrogers))
- Adds support for shipping address [#300](https://github.com/recurly/recurly-js/pull/300) ([chrissrogers](https://github.com/chrissrogers))
- Restructures config object to nest fields more logically [#297](https://github.com/recurly/recurly-js/pull/297) ([chrissrogers](https://github.com/chrissrogers))
- Sends initial field config over hash instead of query [#295](https://github.com/recurly/recurly-js/pull/295) ([chrissrogers](https://github.com/chrissrogers))
- Add support for tabbing in a Mobile browser. [#293](https://github.com/recurly/recurly-js/pull/293) ([SteveDugas](https://github.com/SteveDugas))
- Fixes bug with pricing attachment of addons [#288](https://github.com/recurly/recurly-js/pull/288) ([chrissrogers](https://github.com/chrissrogers))
- Adds safety check to dom value get method [#282](https://github.com/recurly/recurly-js/pull/282) ([chrissrogers](https://github.com/chrissrogers))
- Allows a label tag paired to a field container to defer focus to the field [#279](https://github.com/recurly/recurly-js/pull/279) ([chrissrogers](https://github.com/chrissrogers))
- Fixes expiry validation for invalid input [#278](https://github.com/recurly/recurly-js/pull/278) ([chrissrogers](https://github.com/chrissrogers))
- Add giftcard support. [#275](https://github.com/recurly/recurly-js/pull/275) ([SteveDugas](https://github.com/SteveDugas))
- Refactors Pricing into class pattern [#273](https://github.com/recurly/recurly-js/pull/273) ([chrissrogers](https://github.com/chrissrogers))
- Don't try to calculate addons if there aren't any addons defined for … [#272](https://github.com/recurly/recurly-js/pull/272) ([SteveDugas](https://github.com/SteveDugas))
- Enables CORS by default [#269](https://github.com/recurly/recurly-js/pull/269) ([chrissrogers](https://github.com/chrissrogers))
- Remove UsageAddons from Calculations [#268](https://github.com/recurly/recurly-js/pull/268) ([SteveDugas](https://github.com/SteveDugas))
- Multiple instances [#267](https://github.com/recurly/recurly-js/pull/267) ([chrissrogers](https://github.com/chrissrogers))
- Fixes bug around initial pricing not respecting coupons [#264](https://github.com/recurly/recurly-js/pull/264) ([chrissrogers](https://github.com/chrissrogers))
- Emits a pricing error when a coupon is not found [#263](https://github.com/recurly/recurly-js/pull/263) ([chrissrogers](https://github.com/chrissrogers))
- Version 4.0.4 [#258](https://github.com/recurly/recurly-js/pull/258) ([snodgrass23](https://github.com/snodgrass23))
- Adding data-collector module for fraud checking [#254](https://github.com/recurly/recurly-js/pull/254) ([snodgrass23](https://github.com/snodgrass23))
- Version 4.0.3 [#251](https://github.com/recurly/recurly-js/pull/251) ([chrissrogers](https://github.com/chrissrogers))
- Updates discount type indication [#250](https://github.com/recurly/recurly-js/pull/250) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with trial ext coupon not zeroing totals [#249](https://github.com/recurly/recurly-js/pull/249) ([chrissrogers](https://github.com/chrissrogers))
- Version 4.0.2 [#247](https://github.com/recurly/recurly-js/pull/247) ([chrissrogers](https://github.com/chrissrogers))
- Adds pricing case for trial extension coupons [#246](https://github.com/recurly/recurly-js/pull/246) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- REXML::ParseException: #<REXML::ParseException: Missing end tag for 'meta' ﴾got "head"﴿ [#318](https://github.com/recurly/recurly-js/issues/318)
-  Tokenization error by recurly.token is not user friendly  [#316](https://github.com/recurly/recurly-js/issues/316)
- Is there a reason the tax estimation always rounds up partial cents? [#312](https://github.com/recurly/recurly-js/issues/312)
- Recurly 4.3.0 broken reinitialize: visibility:hidden on fields afterwards [#311](https://github.com/recurly/recurly-js/issues/311)
- Error in iFrame? [#310](https://github.com/recurly/recurly-js/issues/310)
- Allow first_name and last_name as text input [#308](https://github.com/recurly/recurly-js/issues/308)
- Help me : Could not verify Recurly's SSL certificate. [#306](https://github.com/recurly/recurly-js/issues/306)
- [4.3.0] Card fields invisible [#305](https://github.com/recurly/recurly-js/issues/305)
- Support for Amazon Payments [#304](https://github.com/recurly/recurly-js/issues/304)
- npm deployment or a commonjs build [#299](https://github.com/recurly/recurly-js/issues/299)
- Recurly js hosted field  iframe style visibility set to hidden [#298](https://github.com/recurly/recurly-js/issues/298)
- User-facing validation messages [#294](https://github.com/recurly/recurly-js/issues/294)
- Display validation messages next to hosted fields [#292](https://github.com/recurly/recurly-js/issues/292)
- Recurly returns a token when the credit card is valid and cvv is not present [#291](https://github.com/recurly/recurly-js/issues/291)
- Generic font family is requested from Google Web Fonts [#289](https://github.com/recurly/recurly-js/issues/289)
- Letter spacing css property [#287](https://github.com/recurly/recurly-js/issues/287)
- 'field:submit' event is not emitted when the enter key is pressed on a hosted field [#285](https://github.com/recurly/recurly-js/issues/285)
- Official NodeJS client [#284](https://github.com/recurly/recurly-js/issues/284)
- Allow setting textAlign via recurly.configure() [#281](https://github.com/recurly/recurly-js/issues/281)
- Onchange event crashes browser [#280](https://github.com/recurly/recurly-js/issues/280)
- hosted month/year fields incorrectly validate [#277](https://github.com/recurly/recurly-js/issues/277)
- Testing with WebDriver, but trouble with PhantomJsDriver [#274](https://github.com/recurly/recurly-js/issues/274)
- Focus input fields on click, tap, and focus within field containers [#271](https://github.com/recurly/recurly-js/issues/271)
- Surface coupon not-found errors [#262](https://github.com/recurly/recurly-js/issues/262)
- Include appropriate currency separator for prices over $999 USD [#261](https://github.com/recurly/recurly-js/issues/261)
- Set CSS padding via recurly.configure() [#260](https://github.com/recurly/recurly-js/issues/260)
- Configuring tax with recurly.Pricing() [#259](https://github.com/recurly/recurly-js/issues/259)
- V4 does not work when month and year fields are <select> items [#256](https://github.com/recurly/recurly-js/issues/256)
- Provide a NPM package or SRI signatures [#255](https://github.com/recurly/recurly-js/issues/255)
- recurly.configure does not reinject iframes. [#253](https://github.com/recurly/recurly-js/issues/253)
- Placeholder font color does not get set in chrome [#252](https://github.com/recurly/recurly-js/issues/252)
- Basic usage of library doesn't work. [#248](https://github.com/recurly/recurly-js/issues/248)
- Incorrect information when using recurly.Pricing in Chrome Beta Version 50.0.2661.57 beta (64-bit) [#245](https://github.com/recurly/recurly-js/issues/245)
- Incorrect information when using recurly.Pricing in Chrome Beta Version 50.0.2661.57 beta (64-bit) [#244](https://github.com/recurly/recurly-js/issues/244)
- Styling for Recurly fields [#241](https://github.com/recurly/recurly-js/issues/241)
- Is it possible to programmatically focus field in iframe? [#240](https://github.com/recurly/recurly-js/issues/240)
- Add DOM state check to configure call [#239](https://github.com/recurly/recurly-js/issues/239)
- Add max length support to hosted fields [#238](https://github.com/recurly/recurly-js/issues/238)
- iframe form divs empty [#235](https://github.com/recurly/recurly-js/issues/235)
- NPM package [#227](https://github.com/recurly/recurly-js/issues/227)
- Credit card validation bug [#226](https://github.com/recurly/recurly-js/issues/226)
- get coupon description - hosted_description [#225](https://github.com/recurly/recurly-js/issues/225)
- Example of how to implement backend-less recurly usage with CORS [#224](https://github.com/recurly/recurly-js/issues/224)
- allow `catch` a pricePromise after `done` [#223](https://github.com/recurly/recurly-js/issues/223)
- Add safety check to valueGet function [#220](https://github.com/recurly/recurly-js/issues/220)
- Token not updated when using recurly.paypal [#219](https://github.com/recurly/recurly-js/issues/219)
- Billing info form defaults to 'United States' regardless of country specified. [#218](https://github.com/recurly/recurly-js/issues/218)
- Update account details with v3 [#217](https://github.com/recurly/recurly-js/issues/217)
- Bower support [#216](https://github.com/recurly/recurly-js/issues/216)
- discount_next not shown correctly with coupon [#209](https://github.com/recurly/recurly-js/issues/209)
- Coupon handling suggestion [#203](https://github.com/recurly/recurly-js/issues/203)
- Enforce String passage of credit card number [#200](https://github.com/recurly/recurly-js/issues/200)
- Update cardType to validate new MasterCard BIN ranges [#185](https://github.com/recurly/recurly-js/issues/185)
- Single use coupons are included in `discount_next` calculation [#167](https://github.com/recurly/recurly-js/issues/167)
- Lack of VAT rate in Pricing API output [#163](https://github.com/recurly/recurly-js/issues/163)
- Strip `name` attributes out of PCI-concerned fields [#133](https://github.com/recurly/recurly-js/issues/133)

## [v3.1.1](https://github.com/recurly/recurly-js/tree/v3.1.1) (2017-02-09)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.4.0...v3.1.1)

**Merged Pull Requests**

- fix test that is now failing because expiry isn't a future date anymore [#321](https://github.com/recurly/recurly-js/pull/321) ([snodgrass23](https://github.com/snodgrass23))

## [v4.4.0](https://github.com/recurly/recurly-js/tree/v4.4.0) (2017-01-25)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.3.0...v4.4.0)

**Merged Pull Requests**

- Apple Pay part 2 [#315](https://github.com/recurly/recurly-js/pull/315) ([chrissrogers](https://github.com/chrissrogers))
- Revert "Add support for tabbing in a Mobile browser." [#314](https://github.com/recurly/recurly-js/pull/314) ([chrissrogers](https://github.com/chrissrogers))
- Apple Pay [#313](https://github.com/recurly/recurly-js/pull/313) ([chrissrogers](https://github.com/chrissrogers))
- Include the responseText when json is invalid [#307](https://github.com/recurly/recurly-js/pull/307) ([geoffdutton](https://github.com/geoffdutton))
- Add support for tabbing in a Mobile browser. [#293](https://github.com/recurly/recurly-js/pull/293) ([SteveDugas](https://github.com/SteveDugas))

**Closed Issues**

- Is there a reason the tax estimation always rounds up partial cents? [#312](https://github.com/recurly/recurly-js/issues/312)
- Error in iFrame? [#310](https://github.com/recurly/recurly-js/issues/310)
- Allow first_name and last_name as text input [#308](https://github.com/recurly/recurly-js/issues/308)
- Help me : Could not verify Recurly's SSL certificate. [#306](https://github.com/recurly/recurly-js/issues/306)
- [4.3.0] Card fields invisible [#305](https://github.com/recurly/recurly-js/issues/305)
- Support for Amazon Payments [#304](https://github.com/recurly/recurly-js/issues/304)
- Recurly js hosted field  iframe style visibility set to hidden [#298](https://github.com/recurly/recurly-js/issues/298)
- recurly.configure does not reinject iframes. [#253](https://github.com/recurly/recurly-js/issues/253)
- Add DOM state check to configure call [#239](https://github.com/recurly/recurly-js/issues/239)
- Add max length support to hosted fields [#238](https://github.com/recurly/recurly-js/issues/238)

## [v4.3.0](https://github.com/recurly/recurly-js/tree/v4.3.0) (2016-11-01)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.2.0...v4.3.0)

**Merged Pull Requests**

- Ensures configuration objects are not externally mutable [#303](https://github.com/recurly/recurly-js/pull/303) ([chrissrogers](https://github.com/chrissrogers))
- Multiple instances [#267](https://github.com/recurly/recurly-js/pull/267) ([chrissrogers](https://github.com/chrissrogers))

## [v4.2.0](https://github.com/recurly/recurly-js/tree/v4.2.0) (2016-10-18)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.1.1...v4.2.0)

**Merged Pull Requests**

- Fixes issue with address attachment [#302](https://github.com/recurly/recurly-js/pull/302) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with config coercion [#301](https://github.com/recurly/recurly-js/pull/301) ([chrissrogers](https://github.com/chrissrogers))
- Adds support for shipping address [#300](https://github.com/recurly/recurly-js/pull/300) ([chrissrogers](https://github.com/chrissrogers))
- Restructures config object to nest fields more logically [#297](https://github.com/recurly/recurly-js/pull/297) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- npm deployment or a commonjs build [#299](https://github.com/recurly/recurly-js/issues/299)

## [v4.1.1](https://github.com/recurly/recurly-js/tree/v4.1.1) (2016-08-30)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.1.0...v4.1.1)

**Merged Pull Requests**

- Sends initial field config over hash instead of query [#295](https://github.com/recurly/recurly-js/pull/295) ([chrissrogers](https://github.com/chrissrogers))

## [v4.1.0](https://github.com/recurly/recurly-js/tree/v4.1.0) (2016-08-02)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.5...v4.1.0)

**Merged Pull Requests**

- Fixes bug with pricing attachment of addons [#288](https://github.com/recurly/recurly-js/pull/288) ([chrissrogers](https://github.com/chrissrogers))
- Adds safety check to dom value get method [#282](https://github.com/recurly/recurly-js/pull/282) ([chrissrogers](https://github.com/chrissrogers))
- Allows a label tag paired to a field container to defer focus to the field [#279](https://github.com/recurly/recurly-js/pull/279) ([chrissrogers](https://github.com/chrissrogers))
- Fixes expiry validation for invalid input [#278](https://github.com/recurly/recurly-js/pull/278) ([chrissrogers](https://github.com/chrissrogers))
- Add giftcard support. [#275](https://github.com/recurly/recurly-js/pull/275) ([SteveDugas](https://github.com/SteveDugas))
- Refactors Pricing into class pattern [#273](https://github.com/recurly/recurly-js/pull/273) ([chrissrogers](https://github.com/chrissrogers))
- Enables CORS by default [#269](https://github.com/recurly/recurly-js/pull/269) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Official NodeJS client [#284](https://github.com/recurly/recurly-js/issues/284)
- Allow setting textAlign via recurly.configure() [#281](https://github.com/recurly/recurly-js/issues/281)
- Onchange event crashes browser [#280](https://github.com/recurly/recurly-js/issues/280)
- hosted month/year fields incorrectly validate [#277](https://github.com/recurly/recurly-js/issues/277)
- Focus input fields on click, tap, and focus within field containers [#271](https://github.com/recurly/recurly-js/issues/271)
- Set CSS padding via recurly.configure() [#260](https://github.com/recurly/recurly-js/issues/260)
- Styling for Recurly fields [#241](https://github.com/recurly/recurly-js/issues/241)
- Is it possible to programmatically focus field in iframe? [#240](https://github.com/recurly/recurly-js/issues/240)
- Add safety check to valueGet function [#220](https://github.com/recurly/recurly-js/issues/220)
- Enforce String passage of credit card number [#200](https://github.com/recurly/recurly-js/issues/200)

## [v4.0.5](https://github.com/recurly/recurly-js/tree/v4.0.5) (2016-07-06)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.4...v4.0.5)

**Merged Pull Requests**

- Don't try to calculate addons if there aren't any addons defined for … [#272](https://github.com/recurly/recurly-js/pull/272) ([SteveDugas](https://github.com/SteveDugas))
- Remove UsageAddons from Calculations [#268](https://github.com/recurly/recurly-js/pull/268) ([SteveDugas](https://github.com/SteveDugas))
- Fixes bug around initial pricing not respecting coupons [#264](https://github.com/recurly/recurly-js/pull/264) ([chrissrogers](https://github.com/chrissrogers))
- Emits a pricing error when a coupon is not found [#263](https://github.com/recurly/recurly-js/pull/263) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Surface coupon not-found errors [#262](https://github.com/recurly/recurly-js/issues/262)

## [v4.0.4](https://github.com/recurly/recurly-js/tree/v4.0.4) (2016-05-23)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.3...v4.0.4)

**Merged Pull Requests**

- Version 4.0.4 [#258](https://github.com/recurly/recurly-js/pull/258) ([snodgrass23](https://github.com/snodgrass23))
- Adding data-collector module for fraud checking [#254](https://github.com/recurly/recurly-js/pull/254) ([snodgrass23](https://github.com/snodgrass23))

**Closed Issues**

- V4 does not work when month and year fields are <select> items [#256](https://github.com/recurly/recurly-js/issues/256)
- Provide a NPM package or SRI signatures [#255](https://github.com/recurly/recurly-js/issues/255)

## [v4.0.3](https://github.com/recurly/recurly-js/tree/v4.0.3) (2016-04-28)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.2...v4.0.3)

**Merged Pull Requests**

- Version 4.0.3 [#251](https://github.com/recurly/recurly-js/pull/251) ([chrissrogers](https://github.com/chrissrogers))
- Updates discount type indication [#250](https://github.com/recurly/recurly-js/pull/250) ([chrissrogers](https://github.com/chrissrogers))
- Fixes issue with trial ext coupon not zeroing totals [#249](https://github.com/recurly/recurly-js/pull/249) ([chrissrogers](https://github.com/chrissrogers))

## [v4.0.2](https://github.com/recurly/recurly-js/tree/v4.0.2) (2016-04-20)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.1...v4.0.2)

**Merged Pull Requests**

- Version 4.0.2 [#247](https://github.com/recurly/recurly-js/pull/247) ([chrissrogers](https://github.com/chrissrogers))
- Adds pricing case for trial extension coupons [#246](https://github.com/recurly/recurly-js/pull/246) ([chrissrogers](https://github.com/chrissrogers))

**Closed Issues**

- Incorrect information when using recurly.Pricing in Chrome Beta Version 50.0.2661.57 beta (64-bit) [#244](https://github.com/recurly/recurly-js/issues/244)
- iframe form divs empty [#235](https://github.com/recurly/recurly-js/issues/235)
- NPM package [#227](https://github.com/recurly/recurly-js/issues/227)
- get coupon description - hosted_description [#225](https://github.com/recurly/recurly-js/issues/225)
- Example of how to implement backend-less recurly usage with CORS [#224](https://github.com/recurly/recurly-js/issues/224)
- Token not updated when using recurly.paypal [#219](https://github.com/recurly/recurly-js/issues/219)
- Update account details with v3 [#217](https://github.com/recurly/recurly-js/issues/217)
- Lack of VAT rate in Pricing API output [#163](https://github.com/recurly/recurly-js/issues/163)
- Strip `name` attributes out of PCI-concerned fields [#133](https://github.com/recurly/recurly-js/issues/133)

## [v4.0.1](https://github.com/recurly/recurly-js/tree/v4.0.1) (2016-02-17)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v4.0.0...v4.0.1)

**Closed Issues**

- iframe form divs empty [#235](https://github.com/recurly/recurly-js/issues/235)
- NPM package [#227](https://github.com/recurly/recurly-js/issues/227)
- Credit card validation bug [#226](https://github.com/recurly/recurly-js/issues/226)
- get coupon description - hosted_description [#225](https://github.com/recurly/recurly-js/issues/225)
- Example of how to implement backend-less recurly usage with CORS [#224](https://github.com/recurly/recurly-js/issues/224)
- allow `catch` a pricePromise after `done` [#223](https://github.com/recurly/recurly-js/issues/223)
- Token not updated when using recurly.paypal [#219](https://github.com/recurly/recurly-js/issues/219)
- Update account details with v3 [#217](https://github.com/recurly/recurly-js/issues/217)
- Bower support [#216](https://github.com/recurly/recurly-js/issues/216)
- Lack of VAT rate in Pricing API output [#163](https://github.com/recurly/recurly-js/issues/163)

## [v4.0.0](https://github.com/recurly/recurly-js/tree/v4.0.0) (2016-01-14)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.1.0...v4.0.0)

**Closed Issues**

- Billing info form defaults to 'United States' regardless of country specified. [#218](https://github.com/recurly/recurly-js/issues/218)
- discount_next not shown correctly with coupon [#209](https://github.com/recurly/recurly-js/issues/209)
- Coupon handling suggestion [#203](https://github.com/recurly/recurly-js/issues/203)
- Single use coupons are included in `discount_next` calculation [#167](https://github.com/recurly/recurly-js/issues/167)

## [v3.1.0](https://github.com/recurly/recurly-js/tree/v3.1.0) (2015-05-07)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.11...v3.1.0)

**Closed Issues**

- price object emitted by the change event doesn't update total with discount [#201](https://github.com/recurly/recurly-js/issues/201)
- the example of coupon code doesn' work from the 3.0.11 version [#193](https://github.com/recurly/recurly-js/issues/193)

## [v3.0.11](https://github.com/recurly/recurly-js/tree/v3.0.11) (2015-03-19)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.10...v3.0.11)

**Closed Issues**

- Validating plan-restricted coupons [#175](https://github.com/recurly/recurly-js/issues/175)
- Invalid signature Error with Recurly.buildSubscriptionForm [#174](https://github.com/recurly/recurly-js/issues/174)
- Single use coupon not applied after recalculation [#173](https://github.com/recurly/recurly-js/issues/173)
- Error thrown on empty credit card number [#161](https://github.com/recurly/recurly-js/issues/161)

## [v3.0.10](https://github.com/recurly/recurly-js/tree/v3.0.10) (2014-12-18)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.9...v3.0.10)

**Closed Issues**

- Add plan price to pricing module [#145](https://github.com/recurly/recurly-js/issues/145)
- pricing.remove does not have documentation at https://docs.recurly.com/ [#136](https://github.com/recurly/recurly-js/issues/136)

## [v3.0.9](https://github.com/recurly/recurly-js/tree/v3.0.9) (2014-11-13)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.8...v3.0.9)

## [v3.0.8](https://github.com/recurly/recurly-js/tree/v3.0.8) (2014-11-06)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.7...v3.0.8)

**Closed Issues**

- Dankort (PBS) 76009244561 is not passing validation [#156](https://github.com/recurly/recurly-js/issues/156)
- IE: PayPal relay messages lost [#152](https://github.com/recurly/recurly-js/issues/152)
- Recommended currency based on ip [#149](https://github.com/recurly/recurly-js/issues/149)

## [v3.0.7](https://github.com/recurly/recurly-js/tree/v3.0.7) (2014-09-17)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.6...v3.0.7)

**Closed Issues**

- IE: PayPal relay messages lost [#152](https://github.com/recurly/recurly-js/issues/152)
- Submit button enabled AFTER successful payment [#114](https://github.com/recurly/recurly-js/issues/114)
- buildTransactionForm and Card Failure [#109](https://github.com/recurly/recurly-js/issues/109)
- Add a custom ID to the form generated by buildSubscriptionForm [#104](https://github.com/recurly/recurly-js/issues/104)
- Add a check for jquery version [#100](https://github.com/recurly/recurly-js/issues/100)
- generic.png referenced in css but missing in images resources [#84](https://github.com/recurly/recurly-js/issues/84)
- Translation requires separate scripts. [#79](https://github.com/recurly/recurly-js/issues/79)
- vat as part of buildTransactionForm [#77](https://github.com/recurly/recurly-js/issues/77)
- Provide form validation error callback [#76](https://github.com/recurly/recurly-js/issues/76)

## [v3.0.6](https://github.com/recurly/recurly-js/tree/v3.0.6) (2014-09-08)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.5...v3.0.6)

**Closed Issues**

- Rounding errors in tax calculation [#147](https://github.com/recurly/recurly-js/issues/147)
- Pricing module does not update elements with setup fee values [#144](https://github.com/recurly/recurly-js/issues/144)
- Another documentation typo [#143](https://github.com/recurly/recurly-js/issues/143)
- Documentation typo? [#142](https://github.com/recurly/recurly-js/issues/142)
- Documentation typo? [#141](https://github.com/recurly/recurly-js/issues/141)
- billing info tokenizes without phone number field [#135](https://github.com/recurly/recurly-js/issues/135)

## [v3.0.5](https://github.com/recurly/recurly-js/tree/v3.0.5) (2014-08-06)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.4...v3.0.5)

## [v3.0.4](https://github.com/recurly/recurly-js/tree/v3.0.4) (2014-07-24)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.3...v3.0.4)

**Closed Issues**

- Is it possible to get `plans` list from api.recurly.com? [#134](https://github.com/recurly/recurly-js/issues/134)

## [v3.0.3](https://github.com/recurly/recurly-js/tree/v3.0.3) (2014-06-10)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.2...v3.0.3)

**Closed Issues**

- `phone` field not included in billing info token [#119](https://github.com/recurly/recurly-js/issues/119)

## [v3.0.2](https://github.com/recurly/recurly-js/tree/v3.0.2) (2014-06-06)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.1...v3.0.2)

**Closed Issues**

- Uncaught ReferenceError: parse is not defined  for recurly.validate.cardType [#118](https://github.com/recurly/recurly-js/issues/118)

## [v3.0.1](https://github.com/recurly/recurly-js/tree/v3.0.1) (2014-05-29)

[Full Changelog](https://github.com/recurly/recurly-js/compare/v3.0.0...v3.0.1)

## [v3.0.0](https://github.com/recurly/recurly-js/tree/v3.0.0) (2014-05-13)


text:
package org.kuali.rice.kew.api.rule;

import java.io.Serializable;
import java.util.Collection;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.kuali.rice.core.api.CoreConstants;
import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
import org.kuali.rice.core.api.mo.ModelBuilder;
import org.kuali.rice.kew.api.KewApiConstants;
import org.w3c.dom.Element;

@XmlRootElement(name = RuleDelegation.Constants.ROOT_ELEMENT_NAME)
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(name = RuleDelegation.Constants.TYPE_NAME, propOrder = {
    RuleDelegation.Elements.DELEGATION_TYPE,
    RuleDelegation.Elements.DELEGATION_RULE,
    CoreConstants.CommonElements.FUTURE_ELEMENTS
})
public final class RuleDelegation
    extends AbstractDataTransferObject
    implements RuleDelegationContract
{

    @XmlElement(name = Elements.DELEGATION_TYPE, required = false)
    private final String delegationType;
    @XmlElement(name = Elements.DELEGATION_RULE, required = false)
    private final Rule delegationRule;
    @SuppressWarnings("unused")
    @XmlAnyElement
    private final Collection<Element> _futureElements = null;

    /**
     * Private constructor used only by JAXB.
     *
     */
    private RuleDelegation() {
        this.delegationType = null;
        this.delegationRule = null;
    }

    private RuleDelegation(Builder builder) {
        this.delegationType = builder.getDelegationType();
        this.delegationRule = builder.getDelegationRule() == null ? null : builder.getDelegationRule().build();
    }

    @Override
    public String getDelegationType() {
        return this.delegationType;
    }

    @Override
    public Rule getDelegationRule() {
        return this.delegationRule;
    }

    /**
     * A builder which can be used to construct {@link RuleDelegation} instances.  Enforces the constraints of the {@link RuleDelegationContract}.
     *
     */
    public final static class Builder
        implements Serializable, ModelBuilder, RuleDelegationContract
    {

        private String delegationType;
        private Rule.Builder delegationRule;

        private Builder() {
        }

        public static Builder create() {
            return new Builder();
        }

        public static Builder create(RuleDelegationContract contract) {
            if (contract == null) {
                throw new IllegalArgumentException("contract was null");
            }
            Builder builder = create();
            builder.setDelegationType(contract.getDelegationType());
            if (contract.getDelegationRule() != null) {
                builder.setDelegationRule(Rule.Builder.create(contract.getDelegationRule()));
            }
            return builder;
        }

        public RuleDelegation build() {
            return new RuleDelegation(this);
        }

        @Override
        public String getDelegationType() {
            return this.delegationType;
        }

        @Override
        public Rule.Builder getDelegationRule() {
            return this.delegationRule;
        }

        public void setDelegationType(String delegationType) {
            this.delegationType = delegationType;
        }

        public void setDelegationRule(Rule.Builder delegationRule) {
            this.delegationRule = delegationRule;
        }

    }

    /**
     * Defines some internal constants used on this class.
     *
     */
    static class Constants {

        final static String ROOT_ELEMENT_NAME = "ruleDelegation";
        final static String TYPE_NAME = "RuleDelegationType";

    }

    /**
     * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
     *
     */
    static class Elements {

        final static String DELEGATION_TYPE = "delegationType";
        final static String DELEGATION_RULE = "delegationRule";

    }

    public static class Cache {
        public static final String NAME = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0 + "/" + RuleDelegation.Constants.TYPE_NAME;
    }
}

redpajama_set_name: RedPajamaGithub


text:
package edu.umass.ciir.kbbridge.tac;

import org.xml.sax.SAXException;

/**
*
*/
public class ResultFoundException extends SAXException {
    private final String resultStr;

    public ResultFoundException(String result){

        this.resultStr = result;
    }

    public String getResultStr() {
        return resultStr;
    }
}


text: @import "//fonts.googleapis.com/css?family=Droid+Sans"


text:
<?php

/**
 * User field group.
 *
 * @since 2.0
 */
final class WPCF_Field_Group_User extends WPCF_Field_Group {

	const POST_TYPE = 'wp-types-user-group';

	/**
	 * @param WP_Post $field_group_post Post object representing a user field group.
	 * @throws InvalidArgumentException
	 */
	public function __construct( $field_group_post ) {
		parent::__construct( $field_group_post );
		if( self::POST_TYPE != $field_group_post->post_type ) {
			throw new InvalidArgumentException( 'incorrect post type' );
		}
	}

	/**
	 * @return WPCF_Field_Definition_Factory Field definition factory of the correct type.
	 */
	protected function get_field_definition_factory() {
		return WPCF_Field_Definition_Factory_User::get_instance();
	}

}


text:
using System;
using System.Linq;

namespace FigLeaf.Console
{
	public class CommandLineArgs
	{
		private readonly string[] _prmDetailedLogging = new[] { "l", "log" };
		private readonly string[] _prmUnpackTarget = new[] { "r", "restore" };
		private readonly string[] _prmUnpackSource = new[] { "f", "from" };

		public bool DetailedLogging { get; private set; }
		public string UnpackTarget { get; private set; }
		public string UnpackSource { get; private set; }

		public CommandLineArgs(string[] args)
		{
			for (int i = 0; i < args.Length; i++)
			{
				string arg = args[i];
				if (arg == null || arg.Length < 2)
					continue;

				if (!(arg.StartsWith("-") || arg.StartsWith("/")))
					continue;

				arg = arg.Substring(1);
				if (_prmDetailedLogging.Any(a => string.Equals(a, arg, StringComparison.OrdinalIgnoreCase)))
					DetailedLogging = true;
				else if (i == args.Length - 1) // all other options require next arg
					break;

				if (_prmUnpackTarget.Any(a => string.Equals(a, arg, StringComparison.OrdinalIgnoreCase)))
					UnpackTarget = args[i + 1];

				if (_prmUnpackSource.Any(a => string.Equals(a, arg, StringComparison.OrdinalIgnoreCase)))
					UnpackSource = args[i + 1];
			}
		}
	}
}


text:
package org.terasology.weatherManager.weather;

/**
* Created by Linus on 15-2-2015.
*/
public enum Severity {
    NONE("none",  0.00f),
    LIGHT("light", 0.33f),
    MODERATE("moderate", 0.66f),
    HEAVY("heavy", 1.00f);

    private final String string;
    private final float numericValue;

    private Severity(String string, float numericValue) {
        this.string = string;
        this.numericValue = numericValue;
    }

    @Override
    public String toString() {
        return string;
    }
}


text:
package org.apache.flink.table.planner.utils

import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.api.java.tuple.{Tuple2 => JTuple2}
import org.apache.flink.api.java.typeutils.TupleTypeInfo
import org.apache.flink.table.api.Types
import org.apache.flink.table.functions.AggregateFunction
import org.apache.flink.table.planner.calcite.FlinkTypeSystem
import org.apache.flink.table.runtime.typeutils.BigDecimalTypeInfo
import org.apache.flink.table.types.logical.DecimalType

import java.lang.{Iterable => JIterable}
import java.math.{BigDecimal, BigInteger, MathContext}

/** The initial accumulator for Integral Avg aggregate function */
class IntegralAvgAccumulator extends JTuple2[Long, Long] {
  f0 = 0L //sum
  f1 = 0L //count
}

/**
  * Base class for built-in Integral Avg aggregate function
  *
  * @tparam T the type for the aggregation result
  */
// NOTE: T is always scala.Double in subclasses; however it's problematics
//       if we remove [T] and replace T with Double;
//       specifically, null.asInstanceOf[Double] == 0.0 !
abstract class IntegralAvgAggFunction[T] extends AggregateFunction[T, IntegralAvgAccumulator] {

  override def createAccumulator(): IntegralAvgAccumulator = {
    new IntegralAvgAccumulator
  }

  def accumulate(acc: IntegralAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Number].longValue()
      acc.f0 += v
      acc.f1 += 1L
    }
  }

  def retract(acc: IntegralAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Number].longValue()
      acc.f0 -= v
      acc.f1 -= 1L
    }
  }

  override def getValue(acc: IntegralAvgAccumulator): T = {
    if (acc.f1 == 0) {
      null.asInstanceOf[T]
    } else {
      resultTypeConvert(acc.f0 / acc.f1)
    }
  }

  def merge(acc: IntegralAvgAccumulator, its: JIterable[IntegralAvgAccumulator]): Unit = {
    val iter = its.iterator()
    while (iter.hasNext) {
      val a = iter.next()
      acc.f1 += a.f1
      acc.f0 += a.f0
    }
  }

  def resetAccumulator(acc: IntegralAvgAccumulator): Unit = {
    acc.f0 = 0L
    acc.f1 = 0L
  }

  override def getAccumulatorType: TypeInformation[IntegralAvgAccumulator] = {
    new TupleTypeInfo(classOf[IntegralAvgAccumulator], Types.LONG, Types.LONG)
  }

  /**
    * Convert the intermediate result to the expected aggregation result type
    *
    * @param value the intermediate result. We use a Long container to save
    *              the intermediate result to avoid the overflow by sum operation.
    * @return the result value with the expected aggregation result type
    */
  def resultTypeConvert(value: Long): T
}

/**
  * Built-in Byte Avg aggregate function
  */
class ByteAvgAggFunction extends IntegralAvgAggFunction[Byte] {
  override def resultTypeConvert(value: Long): Byte = value.toByte
}

/**
  * Built-in Short Avg aggregate function
  */
class ShortAvgAggFunction extends IntegralAvgAggFunction[Short] {
  override def resultTypeConvert(value: Long): Short = value.toShort
}

/**
  * Built-in Int Avg aggregate function
  */
class IntAvgAggFunction extends IntegralAvgAggFunction[Int] {
  override def resultTypeConvert(value: Long): Int = value.toInt
}

/** The initial accumulator for Big Integral Avg aggregate function */
class BigIntegralAvgAccumulator
  extends JTuple2[BigInteger, Long] {
  f0 = BigInteger.ZERO //sum
  f1 = 0L //count
}

/**
  * Base Class for Built-in Big Integral Avg aggregate function
  *
  * @tparam T the type for the aggregation result
  */
abstract class BigIntegralAvgAggFunction[T]
  extends AggregateFunction[T, BigIntegralAvgAccumulator] {

  override def createAccumulator(): BigIntegralAvgAccumulator = {
    new BigIntegralAvgAccumulator
  }

  def accumulate(acc: BigIntegralAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Long]
      acc.f0 = acc.f0.add(BigInteger.valueOf(v))
      acc.f1 += 1L
    }
  }

  def retract(acc: BigIntegralAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Long]
      acc.f0 = acc.f0.subtract(BigInteger.valueOf(v))
      acc.f1 -= 1L
    }
  }

  override def getValue(acc: BigIntegralAvgAccumulator): T = {
    if (acc.f1 == 0) {
      null.asInstanceOf[T]
    } else {
      resultTypeConvert(acc.f0.divide(BigInteger.valueOf(acc.f1)))
    }
  }

  def merge(acc: BigIntegralAvgAccumulator, its: JIterable[BigIntegralAvgAccumulator]): Unit = {
    val iter = its.iterator()
    while (iter.hasNext) {
      val a = iter.next()
      acc.f1 += a.f1
      acc.f0 = acc.f0.add(a.f0)
    }
  }

  def resetAccumulator(acc: BigIntegralAvgAccumulator): Unit = {
    acc.f0 = BigInteger.ZERO
    acc.f1 = 0
  }

  override def getAccumulatorType: TypeInformation[BigIntegralAvgAccumulator] = {
    new TupleTypeInfo(classOf[BigIntegralAvgAccumulator], Types.INT, Types.LONG)
  }

  /**
    * Convert the intermediate result to the expected aggregation result type
    *
    * @param value the intermediate result. We use a BigInteger container to
    *              save the intermediate result to avoid the overflow by sum
    *              operation.
    * @return the result value with the expected aggregation result type
    */
  def resultTypeConvert(value: BigInteger): T
}

/**
  * Built-in Long Avg aggregate function
  */
class LongAvgAggFunction extends BigIntegralAvgAggFunction[Long] {
  override def resultTypeConvert(value: BigInteger): Long = value.longValue()
}

/** The initial accumulator for Floating Avg aggregate function */
class FloatingAvgAccumulator extends JTuple2[Double, Long] {
  f0 = 0 //sum
  f1 = 0L //count
}

/**
  * Base class for built-in Floating Avg aggregate function
  *
  * @tparam T the type for the aggregation result
  */
abstract class FloatingAvgAggFunction[T] extends AggregateFunction[T, FloatingAvgAccumulator] {

  override def createAccumulator(): FloatingAvgAccumulator = {
    new FloatingAvgAccumulator
  }

  def accumulate(acc: FloatingAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Number].doubleValue()
      acc.f0 += v
      acc.f1 += 1L
    }
  }

  def retract(acc: FloatingAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[Number].doubleValue()
      acc.f0 -= v
      acc.f1 -= 1L
    }
  }

  override def getValue(acc: FloatingAvgAccumulator): T = {
    if (acc.f1 == 0) {
      null.asInstanceOf[T]
    } else {
      resultTypeConvert(acc.f0 / acc.f1)
    }
  }

  def merge(acc: FloatingAvgAccumulator, its: JIterable[FloatingAvgAccumulator]): Unit = {
    val iter = its.iterator()
    while (iter.hasNext) {
      val a = iter.next()
      acc.f1 += a.f1
      acc.f0 += a.f0
    }
  }

  def resetAccumulator(acc: FloatingAvgAccumulator): Unit = {
    acc.f0 = 0
    acc.f1 = 0L
  }

  override def getAccumulatorType: TypeInformation[FloatingAvgAccumulator] = {
    new TupleTypeInfo(classOf[FloatingAvgAccumulator], Types.DOUBLE, Types.LONG)
  }

  /**
    * Convert the intermediate result to the expected aggregation result type
    *
    * @param value the intermediate result. We use a Double container to save
    *              the intermediate result to avoid the overflow by sum operation.
    * @return the result value with the expected aggregation result type
    */
  def resultTypeConvert(value: Double): T
}

/**
  * Built-in Float Avg aggregate function
  */
class FloatAvgAggFunction extends FloatingAvgAggFunction[Float] {
  override def resultTypeConvert(value: Double): Float = value.toFloat
}

/**
  * Built-in Int Double aggregate function
  */
class DoubleAvgAggFunction extends FloatingAvgAggFunction[Double] {
  override def resultTypeConvert(value: Double): Double = value
}

/** The initial accumulator for Big Decimal Avg aggregate function */
class DecimalAvgAccumulator extends JTuple2[BigDecimal, Long] {
  f0 = BigDecimal.ZERO //sum
  f1 = 0L //count
}

/**
  * Base class for built-in Big Decimal Avg aggregate function
  */
class DecimalAvgAggFunction(argType: DecimalType)
  extends AggregateFunction[BigDecimal, DecimalAvgAccumulator] {

  override def createAccumulator(): DecimalAvgAccumulator = {
    new DecimalAvgAccumulator
  }

  def accumulate(acc: DecimalAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[BigDecimal]
      acc.f0 = acc.f0.add(v)
      acc.f1 += 1L
    }
  }

  def retract(acc: DecimalAvgAccumulator, value: Any): Unit = {
    if (value != null) {
      val v = value.asInstanceOf[BigDecimal]
      acc.f0 = acc.f0.subtract(v)
      acc.f1 -= 1L
    }
  }

  override def getValue(acc: DecimalAvgAccumulator): BigDecimal = {
    if (acc.f1 == 0) {
      null.asInstanceOf[BigDecimal]
    } else {
      acc.f0.divide(BigDecimal.valueOf(acc.f1), MathContext.DECIMAL128)
    }
  }

  def merge(acc: DecimalAvgAccumulator, its: JIterable[DecimalAvgAccumulator]): Unit = {
    val iter = its.iterator()
    while (iter.hasNext) {
      val a = iter.next()
      acc.f0 = acc.f0.add(a.f0)
      acc.f1 += a.f1
    }
  }

  def resetAccumulator(acc: DecimalAvgAccumulator): Unit = {
    acc.f0 = BigDecimal.ZERO
    acc.f1 = 0L
  }

  override def getAccumulatorType: TypeInformation[DecimalAvgAccumulator] = {
    val decimalType = getSumType
    new TupleTypeInfo(
      classOf[DecimalAvgAccumulator],
      new BigDecimalTypeInfo(decimalType.getPrecision, decimalType.getScale),
      Types.LONG)
  }

  def getSumType: DecimalType =
    FlinkTypeSystem.inferAggSumType(argType.getScale)

  override def getResultType: BigDecimalTypeInfo = {
    val t = FlinkTypeSystem.inferAggAvgType(argType.getScale)
    new BigDecimalTypeInfo(t.getPrecision, t.getScale)
  }

}


text:
define(['text!landingpages/html/landingpage_template_tile.html', 'moment', 'jquery.highlight', 'common/tags_row', 'jquery.customScroll'],
        function (template, moment, highlighter, tagView) {
            /////////////////////////////////////////////////////////////////////////////////////////////////////////
            //
            // Nurture track View to show on listing page
            //
            /////////////////////////////////////////////////////////////////////////////////////////////////////////
            'use strict';
            return Backbone.View.extend({
                tagName: 'li',
                className: 'spane3',
                /**
                 * Attach events on elements in view.
                 */
                events: {
                    'click .use-track': 'useTemplate',
                    'click .page-view': 'pageView',
                    'click .view-template': 'pageView'
                },
                /**
                 * Initialize view - backbone
                 */
                initialize: function () {
                    this.parent = this.options.sub
                    this.app = this.parent.app;
                    this.template = _.template(template);
                    this.isTrim = false;
                    this.render();
                },
                /**
                 * Render view on page.
                 */
                render: function () {

                    this.$el.html(this.template({
                        model: this.model,
                        ntDate: this.getDate()
                    }));
                    var _$this = this;
                    $(window).scroll(function () {
                        if (_$this.isTrim) {
                            _$this.collapseTags(window);
                        }
                    });
                    this.initControls();

                },
                /**
                 * Render Row view on page.
                 */
                renderRow: function () {

                },
                /**
                 * Initializing all controls here which need to show in view.
                 */
                initControls: function () {
                    this.$(".showtooltip").tooltip({'placement': 'bottom', delay: {show: 0, hide: 0}, animation: false});
                    this.showTagsTemplate();
                    if (this.parent.templateSearchTxt) {
                        this.$(".view-template").highlight($.trim(this.parent.templateSearchTxt));
                        this.$(".t-scroll").highlight($.trim(this.parent.templateSearchTxt));
                    }
                },
                showTagsTemplate: function () {
                    this.tmPr = new tagView(
                    {parent: this,
                        app: this.app,
                        parents: this.parent,
                        type: 'NT',
                        tagSearchCall: _.bind(this.tagSearch, this),
                        rowElement: this.$el,
                        helpText: 'Tracks',
                        tags: this.model.get('tags')});
                    this.$('.t-scroll').append(this.tmPr.$el);
                },
                tagSearch: function (val) {
                    this.trigger('tagclicktile', val);
                    return false;
                },
                getDate: function () {
                    var dateUpdated = this.model.get('updationDate') ? this.model.get('updationDate') : this.model.get('creationDate');
                    var _date = moment(dateUpdated, 'M-D-YY');
                    return _date.format("DD MMM YYYY")
                },
                pageView: function () {
                    var dialog_width = $(document.documentElement).width() - 60;
                    var dialog_height = $(document.documentElement).height() - 182;
                    var dialog = this.app.showDialog({title: 'Preview of template "' + this.model.get('name') + '"',
                        css: {"width": dialog_width + "px", "margin-left": "-" + (dialog_width / 2) + "px", "top": "10px"},
                        headerEditable: false,
                        headerIcon: 'dlgpreview',
                        bodyCss: {"min-height": dialog_height + "px"}
                    });
                    this.app.showLoading("Loading Preview...", dialog.getBody());
                    var preview_url =  this.app.decodeHTML(this.model.get('previewURL')).replace("http","https");
                    require(["common/templatePreview"], _.bind(function (templatePreview) {
                        var tmPr = new templatePreview({frameSrc: preview_url, app: this.app, frameHeight: dialog_height}); // isText to Dynamic
                        dialog.getBody().append(tmPr.$el);
                        this.app.showLoading(false, dialog.getBody());
                        tmPr.init();
                        var dialogArrayLength = this.app.dialogArray.length; // New Dialog
                        tmPr.$el.addClass('dialogWrap-' + dialogArrayLength); // New Dialog
                        dialog.$el.find('#dialog-title .preview').remove();
                    }, this));

                },
                ReattachEvents: function(){

                },
                useTemplate: function(){
                     var bms_token = this.app.get('bms_token');
                    this.app.showLoading("Loading Template HTML...", this.parent.dialog.getBody().parents(".modal"));
                    var URL = "/pms/io/publish/getLandingPages/?BMS_REQ_TK=" + bms_token + "&pageId=" + this.model.get('pageId.encode') + "&type=get";
                    jQuery.getJSON(URL, _.bind(function(tsv, state, xhr) {
                        this.app.showLoading(false, this.$el);
                        var _json = jQuery.parseJSON(xhr.responseText);
                        if (this.app.checkError(_json)) {
                            return false;
                        }
                        this.app.showLoading(false, this.parent.dialog.getBody().parents(".modal"));
                        var html = $('<div/>').html(_json.html).text().replace(/&line;/g,"");
                        this.parent.$("#mee_editor").setMEEHTML(html);
                        this.parent.dialog.hide();
                    },this))
                }

            });
        });


text:
package edu.internet2.middleware.shibboleth.common.config.service;

import java.util.List;

import org.opensaml.xml.util.XMLHelper;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;

import edu.internet2.middleware.shibboleth.common.config.SpringConfigurationUtils;

/** Base bean definition parser for service objects. */
public abstract class AbstractServiceBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {

    /** {@inheritDoc} */
    protected void doParse(Element configElement, ParserContext parserContext, BeanDefinitionBuilder builder) {
        List<Element> configurationResources = XMLHelper.getChildElementsByTagNameNS(configElement,
                ServiceNamespaceHandler.NAMESPACE, "ConfigurationResource");
        builder.addPropertyValue("serviceConfigurations", SpringConfigurationUtils.parseInnerCustomElements(
                configurationResources, parserContext));

        builder.addDependsOn("shibboleth.LogbackLogging");
        for (String dependency : XMLHelper
                .getAttributeValueAsList(configElement.getAttributeNodeNS(null, "depends-on"))) {
            builder.addDependsOn(dependency);
        }

        builder.setInitMethodName("initialize");
    }

    /** {@inheritDoc} */
    protected String resolveId(Element configElement, AbstractBeanDefinition beanDef, ParserContext parserContext) {
        return getServiceId(configElement);
    }

    /**
     * Gets the ID of the service.
     *
     * @param configElement service configuration element
     *
     * @return ID of the service
     */
    protected String getServiceId(Element configElement){
        return configElement.getAttributeNS(null, "id");
    }
}


text:
function AirPad(serverURL, port){
    port = port || 1337;
    this.socket = new WebSocket("ws://"+serverURL+":"+port);

    this.verbose = false;

    this.socket.onopen = this.onopen;
    this.socket.onmessage = this.onmessage;
    this.socket.onerror = this.onerror;
    this.socket.onclose = this.onclose;

    window.AP = this;
    window.onload = function(){
        window.buttons = document.getElementsByTagName("button");
        for(var i=0;i<buttons.length;++i){
            buttons[i].addEventListener("touchstart", function(){
                window.AP.send("cmd", {button: this.value, press: true});
            }, false);
            buttons[i].addEventListener("touchend", function(){
                window.AP.send("cmd", {button: this.value, press: false});
            }, false);
        }
    };

    this.send = function(t, d){
        var message = JSON.stringify({
            type: t,
            data: d
        });
        this.socket.send(message);
    };
}