CINXE.COM

Invoize Checkout | Freemius

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><!-- ███████╗██████╗ ███████╗███████╗███╗ ███╗██╗██╗ ██╗███████╗ ██╔════╝██╔══██╗██╔════╝██╔════╝████╗ ████║██║██║ ██║██╔════╝ █████╗ ██████╔╝█████╗ █████╗ ██╔████╔██║██║██║ ██║███████╗ ██╔══╝ ██╔══██╗██╔══╝ ██╔══╝ ██║╚██╔╝██║██║██║ ██║╚════██║ ██║ ██║ ██║███████╗███████╗██║ ╚═╝ ██║██║╚██████╔╝███████║ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚══════╝ --> <html lang="en" ng-app="checkoutApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Lang" content="en"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Invoize Checkout | Freemius</title> <script type="text/javascript"> (function () { window.__is_eu = false; window.__is_gdpr = false; }()); </script> <link rel="stylesheet" type="text/css" href="https://checkout.freemius.com/assets/css/style.css?v=381" /> <script src="//js.freemius.com/fs/prototype.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/vendors/jquery/jquery-1.11.2.min.js?v=381" type="text/javascript"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.4/js.cookie.min.js" type="text/javascript"></script> <script src="//js.freemius.com/fs/script-manager.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/fs/init.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/fs/action.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/fs/page.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/fs/user.js?v=381" type="text/javascript"></script> <script src="//js.freemius.com/fs/context.js?v=381" type="text/javascript"></script> <script src="//www.paypalobjects.com/api/checkout.src.js" type="text/javascript"></script> <script src="https://js.stripe.com/v2/" type="text/javascript"></script> <script src="https://js.stripe.com/v3/" type="text/javascript"></script> <script src="https://checkout.freemius.com/assets/js/vendor.min.js?v=381" type="text/javascript"></script> <script src="https://checkout.freemius.com/assets/js/checkout.min.js?v=381" type="text/javascript"></script> <script type="text/javascript"> FS.Scripts.addTrackingScript(function(){ // Dynamically inject gtag script. FS.Scripts.injectScript('//www.googletagmanager.com/gtag/js?id=G-38HH7RDY2C', { async: true }); window.dataLayer = window.dataLayer || []; window.gtag = function() {dataLayer.push(arguments);} gtag('js', new Date()); var gtagConfig = { send_page_view: false }; if ('8080' === window.location.port) { gtagConfig.debug_mode = true; } gtag('config', 'G-38HH7RDY2C', gtagConfig); }); </script> <script type="text/javascript"> // TODO: If we ever want to use Optimize, we would need to update the following code with the new GA4 syntax to require the relevant Optimize container. // if (window.ga) { // ga('require', 'GTM-PBQXZD6'); // } </script> <!--[if lt IE 9]> <script type="text/javascript"> document.createElement('header'); document.createElement('nav'); document.createElement('section'); document.createElement('article'); document.createElement('aside'); document.createElement('footer'); document.createElement('hgroup'); </script> <![endif]--> </head> <body class="rw-layout-main rw-context-freemius-checkout fs-checkout-dialog"> <section id="wrap_section"> <script type="text/javascript"> (function(){ FS.PostMessage.init_child(); }()); </script> <!-- Static Data --> <script type="text/javascript"> window.FS__EU_COUNTRIES_VAT = {"AT":0.2,"BE":0.21,"BG":0.2,"HR":0.25,"CY":0.19,"CZ":0.21,"DK":0.25,"EE":0.22,"FI":0.255,"FR":0.2,"DE":0.19,"GR":0.24,"HU":0.27,"IC":0,"GG":0,"IE":0.23,"IT":0.22,"LV":0.21,"LT":0.21,"LU":0.17,"MT":0.18,"NL":0.21,"PL":0.23,"PT":0.23,"RO":0.19,"SK":0.2,"SI":0.22,"ES":0.21,"SE":0.25,"GB":0.2}; window.FS__COUNTRIES_WITHOUT_POSTAL_OR_ZIP_CODE = ["AO","AG","AW","BS","BZ","BJ","BM","BO","BQ","BW","BF","BI","CM","CF","TD","KM","CG","CD","CK","CI","CW","DJ","DM","GQ","ER","FJ","TF","GA","GM","GH","GD","GY","HM","HK","KI","KP","LY","MO","MW","ML","MR","NR","NL","AN","NU","QA","RW","KN","ST","SC","SL","SX","SB","SO","SR","SY","TL","TG","TK","TO","TT","TV","UG","AE","VU","YE","ZW"]; window.FS__COUNTRIES_WITH_NON_NUMERIC_ZIP_CODES = ["AD","AL","AQ","AR","AX","AZ","BB","BM","BN","BN","CA","FK","GB","GG","GH","GI","GS","HN","IE","IM","IO","JE","KY","LC","LT","LV","MD","MT","NL","PE","PN","SH","SI","SO","SZ","TC","VC","VE","VG","WS"]; window.FS__GDPR_COMPLIANT_COUNTRIES = {"AL":true,"AD":true,"AT":true,"BY":true,"BE":true,"BA":true,"BG":true,"HR":true,"CY":true,"CZ":true,"DK":true,"EE":true,"FI":true,"FR":true,"DE":true,"GI":true,"GR":true,"HU":true,"IS":true,"IE":true,"IC":true,"GG":true,"IM":true,"IT":true,"LV":true,"LI":true,"LT":true,"LU":true,"MK":true,"MD":true,"MC":true,"ME":true,"MT":true,"NL":true,"PL":true,"PT":true,"RO":true,"RS":true,"SK":true,"SI":true,"SM":true,"ES":true,"SE":true,"GB":true,"VA":true,"NO":true,"IL":true,"BR":true}; window.FS__CHECKOUT_VERSION = "381"; </script> <!-- /Static Data --> <!-- PayPal clear session and forward --> <script type="text/javascript"> window.fsClearPayPalSessionAndReload = function() { const hasParent = FS.PostMessage.hasParent(); const inDashboardMode = false; if (hasParent && inDashboardMode) { // Remove __fs_pp_session and __fs_pp_token from the parent URL if running from the SDK. In the SDK we add the query params to persist the PayPal session when redirecting back from PayPal. const newUrl = FS.Page.url(FS.PostMessage.parent_url(), { __fs_pp_session: null, __fs_pp_token : null, paypal_token : null, paypal_payer_id: null, token : null, }); // Ask parent to forward to the new URL. FS.PostMessage.post('forward', { url: newUrl }); } else { window.location.reload(); } } </script> <!--/PayPal clear session and forward --> <div ng-controller="MainCtrl" ng-cloak id="checkout_wrapper" class="fs-checkout-wrapper " ng-class="{'fs-checkout-wrapper--is-independent': isIndependentPage(), 'fs-checkout-wrapper--is-full-size': appearanceConfig.isFullPageSize, 'fs-checkout-wrapper--is-completed': context.upgradeComplete}"> <!-- Objects Data Init --> <div> <b ng-init="context.countryGatekeeperData = {&quot;restricted_countries&quot;:[&quot;ir&quot;,&quot;cu&quot;,&quot;kp&quot;,&quot;sy&quot;,&quot;so&quot;,&quot;ye&quot;,&quot;ve&quot;,&quot;sd&quot;,&quot;ss&quot;,&quot;ni&quot;,&quot;ly&quot;,&quot;mm&quot;,&quot;ru&quot;],&quot;is_current_country_restricted&quot;:false}"></b> <b ng-init="context.plugin = {&quot;parent_plugin_id&quot;:null,&quot;slug&quot;:&quot;invoize&quot;,&quot;title&quot;:&quot;Invoize&quot;,&quot;money_back_period&quot;:30,&quot;refund_policy&quot;:&quot;strict&quot;,&quot;annual_renewals_discount&quot;:null,&quot;renewals_discount_type&quot;:&quot;percentage&quot;,&quot;type&quot;:&quot;plugin&quot;,&quot;is_static&quot;:false,&quot;public_key&quot;:&quot;pk_35932ea57247ebc4c8a4329274adb&quot;,&quot;id&quot;:&quot;16134&quot;}"></b> <b ng-init="context.pluginType = 'plugin'"></b> <b ng-init="context.plugin.developer_email = 'invoize@wpsora.com'"></b> <b ng-init="context.customCheckoutConfirmationSaas = false"></b> <b ng-init="context.pageMode = 'dialog'"></b> <b ng-init="context.plan = {&quot;plugin_id&quot;:&quot;16134&quot;,&quot;name&quot;:&quot;ivzpro&quot;,&quot;title&quot;:&quot;Pro&quot;,&quot;description&quot;:null,&quot;is_free_localhost&quot;:true,&quot;is_block_features&quot;:false,&quot;is_block_features_monthly&quot;:false,&quot;license_type&quot;:0,&quot;is_https_support&quot;:false,&quot;trial_period&quot;:14,&quot;is_require_subscription&quot;:false,&quot;support_kb&quot;:&quot;https:\/\/wpsora.com\/invoize\/docs&quot;,&quot;support_forum&quot;:null,&quot;support_email&quot;:&quot;support@wpsora.com&quot;,&quot;support_phone&quot;:null,&quot;support_skype&quot;:null,&quot;is_success_manager&quot;:false,&quot;is_featured&quot;:false,&quot;is_hidden&quot;:false,&quot;id&quot;:&quot;26921&quot;,&quot;created&quot;:&quot;2024-08-02 07:25:45&quot;,&quot;updated&quot;:&quot;2024-11-14 06:14:33&quot;}"></b> <b ng-init="context.plansOrder = [&quot;27772&quot;,&quot;26921&quot;,&quot;27475&quot;,&quot;27523&quot;,&quot;28439&quot;]"></b> <b ng-init="context.isFreePlan = false"></b> <b ng-init="context.isPreLaunch = false"></b> <b ng-init="context.hasFreeReleases = true"></b> <b ng-init="context.isGeoLocatedFromEU = false"></b> <b ng-init="context.isGeoLocationGdprOptinRequired = false"></b> <b ng-init="context.marketingOptinFromServer = null"></b> <b ng-init="context.isAffiliationEnabled = true"></b> <b ng-init="context.isCartEnabled = false"></b> <b ng-init="context.isMS = false"></b> <b ng-init="context.isProcessingCartAction = false"></b> <b ng-init="context.currencies = {&quot;usd&quot;:&quot;$&quot;}"></b> <b ng-init="context.currency = 'usd'"></b> <b ng-init="context.hasMultipleCurrencies = false"></b> <b ng-init="context.currencySymbol = '$'"></b> <b ng-init="context.pricingItemsByCurrencyAndLicenses = {&quot;usd&quot;:{&quot;1&quot;:{&quot;plan_id&quot;:&quot;26921&quot;,&quot;licenses&quot;:1,&quot;monthly_price&quot;:null,&quot;annual_price&quot;:39,&quot;lifetime_price&quot;:null,&quot;is_whitelabeled&quot;:false,&quot;is_hidden&quot;:false,&quot;id&quot;:&quot;33268&quot;,&quot;created&quot;:&quot;2024-08-03 01:15:18&quot;,&quot;updated&quot;:&quot;2024-10-28 02:47:18&quot;,&quot;currency&quot;:&quot;usd&quot;}}}"></b> <b ng-init="context.currencyToLicenseQuantities = {&quot;usd&quot;:[1]}"></b> <b ng-init="context.licenseQuantities = [1]"></b> <b ng-init="context.sdkInstallData = null"></b> <b ng-init="context.hasMultipleLicenseQuantities = false"></b> <b ng-init="context.disableLicensesSelector = false"></b> <b ng-init="context.hideLicenses = false"></b> <b ng-init="context.sdkVersion = &quot;1.0.0&quot;"></b> <b ng-init="context.pricing = {&quot;plan_id&quot;:&quot;26921&quot;,&quot;licenses&quot;:1,&quot;monthly_price&quot;:null,&quot;annual_price&quot;:39,&quot;lifetime_price&quot;:null,&quot;is_whitelabeled&quot;:false,&quot;is_hidden&quot;:false,&quot;id&quot;:&quot;33268&quot;,&quot;created&quot;:&quot;2024-08-03 01:15:18&quot;,&quot;updated&quot;:&quot;2024-10-28 02:47:18&quot;,&quot;currency&quot;:&quot;usd&quot;}"></b> <b ng-init="context.hasFreePlan = true"></b> <b ng-init="context.install = {}"></b> <b ng-init="context.proratedDiscountUnavailable = false"></b> <b ng-init="context.licenseQuotaUpdateDisabled = false"></b> <b ng-init="context.hideCoupon = false"></b> <b ng-init="context.billingCycles = [&quot;monthly&quot;,&quot;annual&quot;,&quot;lifetime&quot;]"></b> <b ng-init="context.billingCycle = 'annual'"></b> <b ng-init="context.hideBillingCycles = false"></b> <b ng-init="context.multiSiteDiscount = {&quot;monthly&quot;:0,&quot;annual&quot;:0,&quot;lifetime&quot;:0}"></b> <b ng-init="context.currenciesSingleSitePricing = {&quot;monthly_price&quot;:{&quot;usd&quot;:3.25},&quot;annual_price&quot;:{&quot;usd&quot;:39},&quot;lifetime_price&quot;:{&quot;usd&quot;:0}}"></b> <b ng-init="context.isTrialMode = &quot;free&quot;"></b> <b ng-init="context.trial = {}"></b> <b ng-init="context.countries = {&quot;AF&quot;:&quot;Afghanistan&quot;,&quot;AX&quot;:&quot;Aland Islands&quot;,&quot;AL&quot;:&quot;Albania&quot;,&quot;DZ&quot;:&quot;Algeria&quot;,&quot;AS&quot;:&quot;American Samoa&quot;,&quot;AD&quot;:&quot;Andorra&quot;,&quot;AO&quot;:&quot;Angola&quot;,&quot;AI&quot;:&quot;Anguilla&quot;,&quot;AQ&quot;:&quot;Antarctica&quot;,&quot;AG&quot;:&quot;Antigua And Barbuda&quot;,&quot;AR&quot;:&quot;Argentina&quot;,&quot;AM&quot;:&quot;Armenia&quot;,&quot;AW&quot;:&quot;Aruba&quot;,&quot;AU&quot;:&quot;Australia&quot;,&quot;AT&quot;:&quot;Austria&quot;,&quot;AZ&quot;:&quot;Azerbaijan&quot;,&quot;BS&quot;:&quot;Bahamas&quot;,&quot;BH&quot;:&quot;Bahrain&quot;,&quot;BD&quot;:&quot;Bangladesh&quot;,&quot;BB&quot;:&quot;Barbados&quot;,&quot;BY&quot;:&quot;Belarus&quot;,&quot;BE&quot;:&quot;Belgium&quot;,&quot;BZ&quot;:&quot;Belize&quot;,&quot;BJ&quot;:&quot;Benin&quot;,&quot;BM&quot;:&quot;Bermuda&quot;,&quot;BT&quot;:&quot;Bhutan&quot;,&quot;BO&quot;:&quot;Bolivia&quot;,&quot;BA&quot;:&quot;Bosnia And Herzegovina&quot;,&quot;BW&quot;:&quot;Botswana&quot;,&quot;BV&quot;:&quot;Bouvet Island&quot;,&quot;BR&quot;:&quot;Brazil&quot;,&quot;IO&quot;:&quot;British Indian Ocean Territory&quot;,&quot;BN&quot;:&quot;Brunei Darussalam&quot;,&quot;BG&quot;:&quot;Bulgaria&quot;,&quot;BF&quot;:&quot;Burkina Faso&quot;,&quot;BI&quot;:&quot;Burundi&quot;,&quot;KH&quot;:&quot;Cambodia&quot;,&quot;CM&quot;:&quot;Cameroon&quot;,&quot;CA&quot;:&quot;Canada&quot;,&quot;IC&quot;:&quot;Canary Islands&quot;,&quot;CV&quot;:&quot;Cape Verde&quot;,&quot;BQ&quot;:&quot;Caribbean Netherlands&quot;,&quot;KY&quot;:&quot;Cayman Islands&quot;,&quot;CF&quot;:&quot;Central African Republic&quot;,&quot;TD&quot;:&quot;Chad&quot;,&quot;CL&quot;:&quot;Chile&quot;,&quot;CN&quot;:&quot;China&quot;,&quot;CX&quot;:&quot;Christmas Island&quot;,&quot;CC&quot;:&quot;Cocos (Keeling) Islands&quot;,&quot;CO&quot;:&quot;Colombia&quot;,&quot;KM&quot;:&quot;Comoros&quot;,&quot;CG&quot;:&quot;Congo&quot;,&quot;CD&quot;:&quot;Congo, Democratic Republic&quot;,&quot;CK&quot;:&quot;Cook Islands&quot;,&quot;CR&quot;:&quot;Costa Rica&quot;,&quot;CI&quot;:&quot;Cote D'Ivoire&quot;,&quot;HR&quot;:&quot;Croatia&quot;,&quot;CU&quot;:&quot;Cuba&quot;,&quot;CW&quot;:&quot;Cura\u00e7ao&quot;,&quot;CY&quot;:&quot;Cyprus&quot;,&quot;CZ&quot;:&quot;Czech Republic&quot;,&quot;DK&quot;:&quot;Denmark&quot;,&quot;DJ&quot;:&quot;Djibouti&quot;,&quot;DM&quot;:&quot;Dominica&quot;,&quot;DO&quot;:&quot;Dominican Republic&quot;,&quot;EC&quot;:&quot;Ecuador&quot;,&quot;EG&quot;:&quot;Egypt&quot;,&quot;SV&quot;:&quot;El Salvador&quot;,&quot;GQ&quot;:&quot;Equatorial Guinea&quot;,&quot;ER&quot;:&quot;Eritrea&quot;,&quot;EE&quot;:&quot;Estonia&quot;,&quot;ET&quot;:&quot;Ethiopia&quot;,&quot;FK&quot;:&quot;Falkland Islands (Malvinas)&quot;,&quot;FO&quot;:&quot;Faroe Islands&quot;,&quot;FJ&quot;:&quot;Fiji&quot;,&quot;FI&quot;:&quot;Finland&quot;,&quot;FR&quot;:&quot;France&quot;,&quot;GF&quot;:&quot;French Guiana&quot;,&quot;PF&quot;:&quot;French Polynesia&quot;,&quot;TF&quot;:&quot;French Southern Territories&quot;,&quot;GA&quot;:&quot;Gabon&quot;,&quot;GM&quot;:&quot;Gambia&quot;,&quot;GE&quot;:&quot;Georgia&quot;,&quot;DE&quot;:&quot;Germany&quot;,&quot;GH&quot;:&quot;Ghana&quot;,&quot;GI&quot;:&quot;Gibraltar&quot;,&quot;GR&quot;:&quot;Greece&quot;,&quot;GL&quot;:&quot;Greenland&quot;,&quot;GD&quot;:&quot;Grenada&quot;,&quot;GP&quot;:&quot;Guadeloupe&quot;,&quot;GU&quot;:&quot;Guam&quot;,&quot;GT&quot;:&quot;Guatemala&quot;,&quot;GG&quot;:&quot;Guernsey&quot;,&quot;GN&quot;:&quot;Guinea&quot;,&quot;GW&quot;:&quot;Guinea-Bissau&quot;,&quot;GY&quot;:&quot;Guyana&quot;,&quot;HT&quot;:&quot;Haiti&quot;,&quot;HM&quot;:&quot;Heard Island &amp; Mcdonald Islands&quot;,&quot;VA&quot;:&quot;Holy See (Vatican City State)&quot;,&quot;HN&quot;:&quot;Honduras&quot;,&quot;HK&quot;:&quot;Hong Kong&quot;,&quot;HU&quot;:&quot;Hungary&quot;,&quot;IS&quot;:&quot;Iceland&quot;,&quot;IN&quot;:&quot;India&quot;,&quot;ID&quot;:&quot;Indonesia&quot;,&quot;IR&quot;:&quot;Iran, Islamic Republic Of&quot;,&quot;IQ&quot;:&quot;Iraq&quot;,&quot;IE&quot;:&quot;Ireland&quot;,&quot;IM&quot;:&quot;Isle Of Man&quot;,&quot;IL&quot;:&quot;Israel&quot;,&quot;IT&quot;:&quot;Italy&quot;,&quot;JM&quot;:&quot;Jamaica&quot;,&quot;JP&quot;:&quot;Japan&quot;,&quot;JE&quot;:&quot;Jersey&quot;,&quot;JO&quot;:&quot;Jordan&quot;,&quot;KZ&quot;:&quot;Kazakhstan&quot;,&quot;KE&quot;:&quot;Kenya&quot;,&quot;KI&quot;:&quot;Kiribati&quot;,&quot;KR&quot;:&quot;Korea, South&quot;,&quot;KP&quot;:&quot;Korea, North&quot;,&quot;XK&quot;:&quot;Kosovo&quot;,&quot;KW&quot;:&quot;Kuwait&quot;,&quot;KG&quot;:&quot;Kyrgyzstan&quot;,&quot;LA&quot;:&quot;Lao People's Democratic Republic&quot;,&quot;LV&quot;:&quot;Latvia&quot;,&quot;LB&quot;:&quot;Lebanon&quot;,&quot;LS&quot;:&quot;Lesotho&quot;,&quot;LR&quot;:&quot;Liberia&quot;,&quot;LY&quot;:&quot;Libyan Arab Jamahiriya&quot;,&quot;LI&quot;:&quot;Liechtenstein&quot;,&quot;LT&quot;:&quot;Lithuania&quot;,&quot;LU&quot;:&quot;Luxembourg&quot;,&quot;MO&quot;:&quot;Macao&quot;,&quot;MK&quot;:&quot;Macedonia&quot;,&quot;MG&quot;:&quot;Madagascar&quot;,&quot;MW&quot;:&quot;Malawi&quot;,&quot;MY&quot;:&quot;Malaysia&quot;,&quot;MV&quot;:&quot;Maldives&quot;,&quot;ML&quot;:&quot;Mali&quot;,&quot;MT&quot;:&quot;Malta&quot;,&quot;MH&quot;:&quot;Marshall Islands&quot;,&quot;MQ&quot;:&quot;Martinique&quot;,&quot;MR&quot;:&quot;Mauritania&quot;,&quot;MU&quot;:&quot;Mauritius&quot;,&quot;YT&quot;:&quot;Mayotte&quot;,&quot;MX&quot;:&quot;Mexico&quot;,&quot;FM&quot;:&quot;Micronesia, Federated States Of&quot;,&quot;MD&quot;:&quot;Moldova&quot;,&quot;MC&quot;:&quot;Monaco&quot;,&quot;MN&quot;:&quot;Mongolia&quot;,&quot;ME&quot;:&quot;Montenegro&quot;,&quot;MS&quot;:&quot;Montserrat&quot;,&quot;MA&quot;:&quot;Morocco&quot;,&quot;MZ&quot;:&quot;Mozambique&quot;,&quot;MM&quot;:&quot;Myanmar&quot;,&quot;NA&quot;:&quot;Namibia&quot;,&quot;NR&quot;:&quot;Nauru&quot;,&quot;NP&quot;:&quot;Nepal&quot;,&quot;NL&quot;:&quot;Netherlands&quot;,&quot;AN&quot;:&quot;Netherlands Antilles&quot;,&quot;NC&quot;:&quot;New Caledonia&quot;,&quot;NZ&quot;:&quot;New Zealand&quot;,&quot;NI&quot;:&quot;Nicaragua&quot;,&quot;NE&quot;:&quot;Niger&quot;,&quot;NG&quot;:&quot;Nigeria&quot;,&quot;NU&quot;:&quot;Niue&quot;,&quot;NF&quot;:&quot;Norfolk Island&quot;,&quot;MP&quot;:&quot;Northern Mariana Islands&quot;,&quot;NO&quot;:&quot;Norway&quot;,&quot;OM&quot;:&quot;Oman&quot;,&quot;PK&quot;:&quot;Pakistan&quot;,&quot;PW&quot;:&quot;Palau&quot;,&quot;PS&quot;:&quot;Palestinian Territory, Occupied&quot;,&quot;PA&quot;:&quot;Panama&quot;,&quot;PG&quot;:&quot;Papua New Guinea&quot;,&quot;PY&quot;:&quot;Paraguay&quot;,&quot;PE&quot;:&quot;Peru&quot;,&quot;PH&quot;:&quot;Philippines&quot;,&quot;PN&quot;:&quot;Pitcairn&quot;,&quot;PL&quot;:&quot;Poland&quot;,&quot;PT&quot;:&quot;Portugal&quot;,&quot;PR&quot;:&quot;Puerto Rico&quot;,&quot;QA&quot;:&quot;Qatar&quot;,&quot;RE&quot;:&quot;Reunion&quot;,&quot;RO&quot;:&quot;Romania&quot;,&quot;RU&quot;:&quot;Russia&quot;,&quot;RW&quot;:&quot;Rwanda&quot;,&quot;BL&quot;:&quot;Saint Barthelemy&quot;,&quot;SH&quot;:&quot;Saint Helena&quot;,&quot;KN&quot;:&quot;Saint Kitts And Nevis&quot;,&quot;LC&quot;:&quot;Saint Lucia&quot;,&quot;MF&quot;:&quot;Saint Martin&quot;,&quot;PM&quot;:&quot;Saint Pierre And Miquelon&quot;,&quot;VC&quot;:&quot;Saint Vincent And Grenadines&quot;,&quot;WS&quot;:&quot;Samoa&quot;,&quot;SM&quot;:&quot;San Marino&quot;,&quot;ST&quot;:&quot;Sao Tome And Principe&quot;,&quot;SA&quot;:&quot;Saudi Arabia&quot;,&quot;SN&quot;:&quot;Senegal&quot;,&quot;RS&quot;:&quot;Serbia&quot;,&quot;SC&quot;:&quot;Seychelles&quot;,&quot;SL&quot;:&quot;Sierra Leone&quot;,&quot;SG&quot;:&quot;Singapore&quot;,&quot;SX&quot;:&quot;Sint Maarten&quot;,&quot;SK&quot;:&quot;Slovakia&quot;,&quot;SI&quot;:&quot;Slovenia&quot;,&quot;SB&quot;:&quot;Solomon Islands&quot;,&quot;SO&quot;:&quot;Somalia&quot;,&quot;ZA&quot;:&quot;South Africa&quot;,&quot;GS&quot;:&quot;South Georgia And Sandwich Isl.&quot;,&quot;SS&quot;:&quot;South Sudan&quot;,&quot;ES&quot;:&quot;Spain&quot;,&quot;LK&quot;:&quot;Sri Lanka&quot;,&quot;SD&quot;:&quot;Sudan&quot;,&quot;SR&quot;:&quot;Suriname&quot;,&quot;SJ&quot;:&quot;Svalbard And Jan Mayen&quot;,&quot;SZ&quot;:&quot;Swaziland&quot;,&quot;SE&quot;:&quot;Sweden&quot;,&quot;CH&quot;:&quot;Switzerland&quot;,&quot;SY&quot;:&quot;Syrian Arab Republic&quot;,&quot;TW&quot;:&quot;Taiwan&quot;,&quot;TJ&quot;:&quot;Tajikistan&quot;,&quot;TZ&quot;:&quot;Tanzania&quot;,&quot;TH&quot;:&quot;Thailand&quot;,&quot;TL&quot;:&quot;Timor-Leste&quot;,&quot;TG&quot;:&quot;Togo&quot;,&quot;TK&quot;:&quot;Tokelau&quot;,&quot;TO&quot;:&quot;Tonga&quot;,&quot;TT&quot;:&quot;Trinidad And Tobago&quot;,&quot;TN&quot;:&quot;Tunisia&quot;,&quot;TR&quot;:&quot;Turkey&quot;,&quot;TM&quot;:&quot;Turkmenistan&quot;,&quot;TC&quot;:&quot;Turks And Caicos Islands&quot;,&quot;TV&quot;:&quot;Tuvalu&quot;,&quot;UG&quot;:&quot;Uganda&quot;,&quot;UA&quot;:&quot;Ukraine&quot;,&quot;AE&quot;:&quot;United Arab Emirates&quot;,&quot;GB&quot;:&quot;United Kingdom&quot;,&quot;US&quot;:&quot;United States&quot;,&quot;UM&quot;:&quot;United States Outlying Islands&quot;,&quot;UY&quot;:&quot;Uruguay&quot;,&quot;UZ&quot;:&quot;Uzbekistan&quot;,&quot;VU&quot;:&quot;Vanuatu&quot;,&quot;VE&quot;:&quot;Venezuela&quot;,&quot;VN&quot;:&quot;Viet Nam&quot;,&quot;VG&quot;:&quot;Virgin Islands, British&quot;,&quot;VI&quot;:&quot;Virgin Islands, U.S.&quot;,&quot;WF&quot;:&quot;Wallis And Futuna&quot;,&quot;EH&quot;:&quot;Western Sahara&quot;,&quot;YE&quot;:&quot;Yemen&quot;,&quot;ZM&quot;:&quot;Zambia&quot;,&quot;ZW&quot;:&quot;Zimbabwe&quot;}"></b> <b ng-init="context.associatedTaxRate = 0"></b> <b ng-init="context.billing.address_country = &quot;SG&quot;"></b> <b ng-init="context.billing.tax_id = &quot;&quot;"></b> <b ng-init="context.countriesPhoneCodes = {&quot;AD&quot;:&quot;376&quot;,&quot;AE&quot;:&quot;971&quot;,&quot;AF&quot;:&quot;93&quot;,&quot;AG&quot;:&quot;1268&quot;,&quot;AI&quot;:&quot;1264&quot;,&quot;AL&quot;:&quot;355&quot;,&quot;AM&quot;:&quot;374&quot;,&quot;AN&quot;:&quot;599&quot;,&quot;AO&quot;:&quot;244&quot;,&quot;AQ&quot;:&quot;672&quot;,&quot;AR&quot;:&quot;54&quot;,&quot;AS&quot;:&quot;1684&quot;,&quot;AT&quot;:&quot;43&quot;,&quot;AU&quot;:&quot;61&quot;,&quot;AW&quot;:&quot;297&quot;,&quot;AZ&quot;:&quot;994&quot;,&quot;BA&quot;:&quot;387&quot;,&quot;BB&quot;:&quot;1246&quot;,&quot;BD&quot;:&quot;880&quot;,&quot;BE&quot;:&quot;32&quot;,&quot;BF&quot;:&quot;226&quot;,&quot;BG&quot;:&quot;359&quot;,&quot;BH&quot;:&quot;973&quot;,&quot;BI&quot;:&quot;257&quot;,&quot;BJ&quot;:&quot;229&quot;,&quot;BL&quot;:&quot;590&quot;,&quot;BM&quot;:&quot;1441&quot;,&quot;BN&quot;:&quot;673&quot;,&quot;BO&quot;:&quot;591&quot;,&quot;BR&quot;:&quot;55&quot;,&quot;BS&quot;:&quot;1242&quot;,&quot;BT&quot;:&quot;975&quot;,&quot;BW&quot;:&quot;267&quot;,&quot;BY&quot;:&quot;375&quot;,&quot;BZ&quot;:&quot;501&quot;,&quot;CA&quot;:&quot;1&quot;,&quot;CC&quot;:&quot;61&quot;,&quot;CD&quot;:&quot;243&quot;,&quot;CF&quot;:&quot;236&quot;,&quot;CG&quot;:&quot;242&quot;,&quot;CH&quot;:&quot;41&quot;,&quot;CI&quot;:&quot;225&quot;,&quot;CK&quot;:&quot;682&quot;,&quot;CL&quot;:&quot;56&quot;,&quot;CM&quot;:&quot;237&quot;,&quot;CN&quot;:&quot;86&quot;,&quot;CO&quot;:&quot;57&quot;,&quot;CR&quot;:&quot;506&quot;,&quot;CU&quot;:&quot;53&quot;,&quot;CV&quot;:&quot;238&quot;,&quot;CX&quot;:&quot;61&quot;,&quot;CY&quot;:&quot;357&quot;,&quot;CZ&quot;:&quot;420&quot;,&quot;DE&quot;:&quot;49&quot;,&quot;DJ&quot;:&quot;253&quot;,&quot;DK&quot;:&quot;45&quot;,&quot;DM&quot;:&quot;1767&quot;,&quot;DO&quot;:&quot;1809&quot;,&quot;DZ&quot;:&quot;213&quot;,&quot;EC&quot;:&quot;593&quot;,&quot;EE&quot;:&quot;372&quot;,&quot;EG&quot;:&quot;20&quot;,&quot;ER&quot;:&quot;291&quot;,&quot;ES&quot;:&quot;34&quot;,&quot;ET&quot;:&quot;251&quot;,&quot;FI&quot;:&quot;358&quot;,&quot;FJ&quot;:&quot;679&quot;,&quot;FK&quot;:&quot;500&quot;,&quot;FM&quot;:&quot;691&quot;,&quot;FO&quot;:&quot;298&quot;,&quot;FR&quot;:&quot;33&quot;,&quot;GA&quot;:&quot;241&quot;,&quot;GB&quot;:&quot;44&quot;,&quot;GD&quot;:&quot;1473&quot;,&quot;GE&quot;:&quot;995&quot;,&quot;GH&quot;:&quot;233&quot;,&quot;GI&quot;:&quot;350&quot;,&quot;GL&quot;:&quot;299&quot;,&quot;GM&quot;:&quot;220&quot;,&quot;GN&quot;:&quot;224&quot;,&quot;GQ&quot;:&quot;240&quot;,&quot;GR&quot;:&quot;30&quot;,&quot;GT&quot;:&quot;502&quot;,&quot;GU&quot;:&quot;1671&quot;,&quot;GW&quot;:&quot;245&quot;,&quot;GY&quot;:&quot;592&quot;,&quot;HK&quot;:&quot;852&quot;,&quot;HN&quot;:&quot;504&quot;,&quot;HR&quot;:&quot;385&quot;,&quot;HT&quot;:&quot;509&quot;,&quot;HU&quot;:&quot;36&quot;,&quot;ID&quot;:&quot;62&quot;,&quot;IE&quot;:&quot;353&quot;,&quot;IL&quot;:&quot;972&quot;,&quot;IM&quot;:&quot;44&quot;,&quot;IN&quot;:&quot;91&quot;,&quot;IQ&quot;:&quot;964&quot;,&quot;IR&quot;:&quot;98&quot;,&quot;IS&quot;:&quot;354&quot;,&quot;IT&quot;:&quot;39&quot;,&quot;JM&quot;:&quot;1876&quot;,&quot;JO&quot;:&quot;962&quot;,&quot;JP&quot;:&quot;81&quot;,&quot;KE&quot;:&quot;254&quot;,&quot;KG&quot;:&quot;996&quot;,&quot;KH&quot;:&quot;855&quot;,&quot;KI&quot;:&quot;686&quot;,&quot;KM&quot;:&quot;269&quot;,&quot;KN&quot;:&quot;1869&quot;,&quot;KP&quot;:&quot;850&quot;,&quot;KR&quot;:&quot;82&quot;,&quot;KW&quot;:&quot;965&quot;,&quot;BQ&quot;:&quot;599&quot;,&quot;KY&quot;:&quot;1345&quot;,&quot;KZ&quot;:&quot;7&quot;,&quot;LA&quot;:&quot;856&quot;,&quot;LB&quot;:&quot;961&quot;,&quot;LC&quot;:&quot;1758&quot;,&quot;LI&quot;:&quot;423&quot;,&quot;LK&quot;:&quot;94&quot;,&quot;LR&quot;:&quot;231&quot;,&quot;LS&quot;:&quot;266&quot;,&quot;LT&quot;:&quot;370&quot;,&quot;LU&quot;:&quot;352&quot;,&quot;LV&quot;:&quot;371&quot;,&quot;LY&quot;:&quot;218&quot;,&quot;MA&quot;:&quot;212&quot;,&quot;MC&quot;:&quot;377&quot;,&quot;MD&quot;:&quot;373&quot;,&quot;ME&quot;:&quot;382&quot;,&quot;MF&quot;:&quot;1599&quot;,&quot;MG&quot;:&quot;261&quot;,&quot;MH&quot;:&quot;692&quot;,&quot;MK&quot;:&quot;389&quot;,&quot;ML&quot;:&quot;223&quot;,&quot;MM&quot;:&quot;95&quot;,&quot;MN&quot;:&quot;976&quot;,&quot;MO&quot;:&quot;853&quot;,&quot;MP&quot;:&quot;1670&quot;,&quot;MR&quot;:&quot;222&quot;,&quot;MS&quot;:&quot;1664&quot;,&quot;MT&quot;:&quot;356&quot;,&quot;MU&quot;:&quot;230&quot;,&quot;MV&quot;:&quot;960&quot;,&quot;MW&quot;:&quot;265&quot;,&quot;MX&quot;:&quot;52&quot;,&quot;MY&quot;:&quot;60&quot;,&quot;MZ&quot;:&quot;258&quot;,&quot;NA&quot;:&quot;264&quot;,&quot;NC&quot;:&quot;687&quot;,&quot;NE&quot;:&quot;227&quot;,&quot;NG&quot;:&quot;234&quot;,&quot;NI&quot;:&quot;505&quot;,&quot;NL&quot;:&quot;31&quot;,&quot;NO&quot;:&quot;47&quot;,&quot;NP&quot;:&quot;977&quot;,&quot;NR&quot;:&quot;674&quot;,&quot;NU&quot;:&quot;683&quot;,&quot;NZ&quot;:&quot;64&quot;,&quot;OM&quot;:&quot;968&quot;,&quot;PA&quot;:&quot;507&quot;,&quot;PE&quot;:&quot;51&quot;,&quot;PF&quot;:&quot;689&quot;,&quot;PG&quot;:&quot;675&quot;,&quot;PH&quot;:&quot;63&quot;,&quot;PK&quot;:&quot;92&quot;,&quot;PL&quot;:&quot;48&quot;,&quot;PM&quot;:&quot;508&quot;,&quot;PN&quot;:&quot;870&quot;,&quot;PR&quot;:&quot;1&quot;,&quot;PT&quot;:&quot;351&quot;,&quot;PW&quot;:&quot;680&quot;,&quot;PY&quot;:&quot;595&quot;,&quot;QA&quot;:&quot;974&quot;,&quot;RO&quot;:&quot;40&quot;,&quot;RS&quot;:&quot;381&quot;,&quot;RU&quot;:&quot;7&quot;,&quot;RW&quot;:&quot;250&quot;,&quot;SA&quot;:&quot;966&quot;,&quot;SB&quot;:&quot;677&quot;,&quot;SC&quot;:&quot;248&quot;,&quot;SD&quot;:&quot;249&quot;,&quot;SE&quot;:&quot;46&quot;,&quot;SG&quot;:&quot;65&quot;,&quot;SH&quot;:&quot;290&quot;,&quot;SI&quot;:&quot;386&quot;,&quot;SK&quot;:&quot;421&quot;,&quot;SL&quot;:&quot;232&quot;,&quot;SM&quot;:&quot;378&quot;,&quot;SN&quot;:&quot;221&quot;,&quot;SO&quot;:&quot;252&quot;,&quot;SR&quot;:&quot;597&quot;,&quot;ST&quot;:&quot;239&quot;,&quot;SV&quot;:&quot;503&quot;,&quot;SY&quot;:&quot;963&quot;,&quot;SZ&quot;:&quot;268&quot;,&quot;TC&quot;:&quot;1649&quot;,&quot;TD&quot;:&quot;235&quot;,&quot;TG&quot;:&quot;228&quot;,&quot;TH&quot;:&quot;66&quot;,&quot;TJ&quot;:&quot;992&quot;,&quot;TK&quot;:&quot;690&quot;,&quot;TL&quot;:&quot;670&quot;,&quot;TM&quot;:&quot;993&quot;,&quot;TN&quot;:&quot;216&quot;,&quot;TO&quot;:&quot;676&quot;,&quot;TR&quot;:&quot;90&quot;,&quot;TT&quot;:&quot;1868&quot;,&quot;TV&quot;:&quot;688&quot;,&quot;TW&quot;:&quot;886&quot;,&quot;TZ&quot;:&quot;255&quot;,&quot;UA&quot;:&quot;380&quot;,&quot;UG&quot;:&quot;256&quot;,&quot;US&quot;:&quot;1&quot;,&quot;UY&quot;:&quot;598&quot;,&quot;UZ&quot;:&quot;998&quot;,&quot;VA&quot;:&quot;39&quot;,&quot;VC&quot;:&quot;1784&quot;,&quot;VE&quot;:&quot;58&quot;,&quot;VG&quot;:&quot;1284&quot;,&quot;VI&quot;:&quot;1340&quot;,&quot;VN&quot;:&quot;84&quot;,&quot;VU&quot;:&quot;678&quot;,&quot;WF&quot;:&quot;681&quot;,&quot;WS&quot;:&quot;685&quot;,&quot;XK&quot;:&quot;381&quot;,&quot;YE&quot;:&quot;967&quot;,&quot;YT&quot;:&quot;262&quot;,&quot;ZA&quot;:&quot;27&quot;,&quot;ZM&quot;:&quot;260&quot;,&quot;ZW&quot;:&quot;263&quot;}"></b> <b ng-init="context.vat = {&quot;id&quot;:&quot;&quot;,&quot;tid&quot;:&quot;&quot;,&quot;isValid&quot;:false,&quot;country&quot;:&quot;SG&quot;}"></b> <b ng-init="context.license = {}"></b> <b ng-init="context.licenses = 1"></b> <b ng-init="context.annualOverMonthlyDiscount = 0"></b> <b ng-init="context.isPaypalSupported = true"></b> <b ng-init="context.isPaypalRecurringProfileSupported = true"></b> <b ng-init="context.inPaypalCheckout = false"></b> <b ng-init="context.fsSession = {&quot;__fs_pp_session&quot;:&quot;foslivl0k0vjcmhv9tbblk8uu4&quot;}"></b> <b ng-init="context.isReady4Review = context.inPaypalCheckout"></b> <b ng-init="context.selectedMethod = 'cc'"></b> <b ng-init="context.geolocationCountryCode = 'SG'"></b> <b ng-init="context.hideLicenseKey = false"></b> <b ng-init="context.hasInitialLicenseKey = false"></b> <b ng-init="context.licenseAction = 'create'"></b> <b ng-init="context.user = {}"></b> <b ng-init="context.firstName = &quot;&quot;"></b> <b ng-init="context.lastName = &quot;&quot;"></b> <b ng-init="context.email = &quot;&quot;"></b> <b ng-init="context.readonlyEmail = false"></b> <b ng-init="context.readonlyFirstName = false"></b> <b ng-init="context.readonlyLastName = false"></b> <b ng-init="context.company = &quot;&quot;"></b> <b ng-init="context.isSandbox = false"></b> <b ng-init="context.fromEmailAddress = &quot;invoize@wpsora.com&quot;"></b> <b ng-init="context.sandboxToken = false"></b> <b ng-init="context.unitLabel = 'Site'"></b> <b ng-init="context.links = {&quot;userDashboard&quot;:&quot;https:\/\/users.freemius.com\/store\/7201\/login\/&quot;,&quot;eulaUrl&quot;:&quot;https:\/\/freemius.com\/plugin\/16134\/invoize\/legal\/eula\/&quot;,&quot;saleTermsUrl&quot;:&quot;https:\/\/freemius.com\/plugin\/16134\/invoize\/legal\/terms-of-sale\/&quot;}"></b> <b ng-init="context.requestedLocale = null"></b> <b ng-init="context.appearanceConfig = {&quot;layout&quot;:null,&quot;formPosition&quot;:null,&quot;fullscreen&quot;:null,&quot;isShowingUpsells&quot;:true,&quot;isShowingReviews&quot;:null,&quot;isShowingRefundBadge&quot;:null,&quot;defaultTitle&quot;:&quot;&quot;,&quot;productIcon&quot;:&quot;https:\/\/s3-us-west-2.amazonaws.com\/freemius\/plugins\/16134\/icons\/b11fc8f9ed9bdb280310a36dc9dd604b.png&quot;,&quot;isBundleCollapsed&quot;:true,&quot;cancelUrl&quot;:null,&quot;cancelIcon&quot;:null,&quot;refundPolicyPosition&quot;:&quot;dynamic&quot;,&quot;reviews&quot;:[]}"></b> <b ng-init="context.cartConfig = {&quot;showMonthlySwitch&quot;:null,&quot;annualDiscount&quot;:null,&quot;multiSiteDiscount&quot;:null,&quot;bundleDiscount&quot;:null,&quot;maximizeBundleDiscount&quot;:true,&quot;alwaysShowRenewalsAmount&quot;:false,&quot;showInlineCurrencySelector&quot;:true}"></b> <b ng-init="context.promotionData = null"></b> <b ng-init="init()"></b> </div> <!--/ Objects Data Init --> <div id="mode" class="dialog-mode badges-variant-{{ ui.securityBadgesVariant }}" ng-class="{ 'sandbox': context.isSandbox, 'trial' : isTrialMode(), 'trial-without-payment-method': isFreePlanOrFreeTrialMode(), 'processing': context.isProcessingUpgrade, 'plan--free': context.isFreePlan, 'account-details-hidden': entity.hasUserContext() || entity.hasLicenseContext(), 'licenses-hidden': context.hideLicenses, 'payment-method-update': context.isPaymentMethodUpdate, 'is-full-coupon-discount': hasFullCouponDiscount(), 'is-two-column': appearanceConfig.isTwoColumn, 'is-form-on-right': appearanceConfig.isFormOnRight, 'is-shrunk': context.upgradeComplete, 'is-full-size': appearanceConfig.isFullPageSize, 'dashboard-mode--independent': isDashboardPage() && isIndependentPage() }"> <div id="overlay" ng-class="{'active': ui.showOverlay}"> <div id="content_container" ng-class="{'completed': context.upgradeComplete, 'is-showing-slot-in-fulfillment': isShowingSlotInFulfillment()}"> <div id="checkout_main" fs-scroll-on-change="getScrollOnChange()" fs-scroll-direction="getScrollDirection()" fs-scroll-animation-element="getScrollAnimationElement()"><section id="content" ng-class="{'shake': ui.shake}"> <fs-signal-bar ng-if="appearanceConfig.shouldShowSignalBar" appearance-config="appearanceConfig" on-close="closeDialog()" is-upgrade-complete="context.upgradeComplete"></fs-signal-bar> <div id="checkout_form" ng-show="!context.upgradeComplete" class="animate fs-checkout-form" ng-class="{ 'is-free-plan': context.isFreePlan, 'fs-checkout-form--is-two-column': appearanceConfig.isTwoColumn, 'fs-checkout-form--is-form-on-right': appearanceConfig.isFormOnRight, 'fs-checkout-form--is-full-page-size': appearanceConfig.isFullPageSize }"> <div class="fs-checkout-form__details"> <fs-cancel-button ng-if="appearanceConfig.shouldShowCancelButton" appearance-config="appearanceConfig"></fs-cancel-button> <!-- Mini Cart --> <fs-cart-header appearance-config="appearanceConfig" cart-title="checkoutTitle()" cart-subtitle="checkoutSubtitle()" is-titles-only="context.isFreePlan || context.isPaymentMethodUpdate" is-bold-title="isTrialMode() && isTrialModePaid()" plugin="context.plugin"> <fs-cart-header-line-items ng-if=" ! context.isPaymentMethodUpdate && ! isFreePlanOrFreeTrialMode() && context.billingCycle"> <fs-line-item amount="contextManager.preDiscount.getUnDiscountedPrice()" currency-symbol="context.currencySymbol" is-bold=" ! isTrialMode() || ! isTrialModePaid()" is-stroked-out="contextManager.preDiscount.hasAnyDiscount()"> {{ itemOrderDescription() }} <fs-line-item-breakdown> <fs-animated-line content="{{ itemOrderFullPriceBreakdown() }}"></fs-animated-line> </fs-line-item-breakdown> </fs-line-item> </fs-cart-header-line-items> <fs-cart-header-licensing ng-if=" ! context.isFreePlan && ! context.hideLicenses && ! context.isPaymentMethodUpdate"> <span ng-if="context.disableLicensesSelector || ! context.hasMultipleLicenseQuantities" class="fs-fake-select fs-control-small fs-cart-header__licensing-dropdown">{{ licensesLabel(context.pricing.licenses, context.unitLabel, true) }}</span> <div ng-if="! context.disableLicensesSelector && context.hasMultipleLicenseQuantities" class="fs-cart-header__licensing-dropdown"> <fs-select id="license_quantities_dropdown" ng-model="context.licenses" is-small="true" is-text-like="true" ng-disabled="isCompletedState()" aria-label="{{ context.unitLabel }}"> <fs-select-option ng-repeat="licenseQuantity in context.licenseQuantities" ng-disabled="('update' === context.licenseAction) && null != licenseQuantity && licenseQuantity < context.license.activations" value="licenseQuantity"> {{ licensesLabel(licenseQuantity, context.unitLabel, true) }} </fs-select-option> </fs-select> </div> <fs-smart-input ng-if=" ! context.hideLicenseKey && ! context.isTrialMode && ! context.isFreePlan && ! isSaas()" id="license_actions" class="fs-cart-header__licensing-input" initial-value="context.license.license_key" on-submit="submitLicenseKey" on-clear="cancelLicense" is-masking-value="true" is-disabled-edit="context.inPaypalCheckout || isCompletedState()" is-muted="true" is-darker="true" is-floating-right="true" is-smaller-input="appearanceConfig.isTwoColumn" icon="license" label="{{ 'Enter license key' | translate }}"> <span translate>Renewing or upgrading? <u>Enter license key</u></span> </fs-smart-input> </fs-cart-header-licensing> <!-- Annual Upsell --> <fs-cart-header-footer ng-if="! isFreePlanOrFreeTrialMode() && contextManager.preDiscount.hasApplicableAnnualDiscount() && ! context.isPaymentMethodUpdate"> <fs-line-item is-muted=" ! upsells.annual.isSelected" is-bold="true" amount="contextManager.preDiscount.annual.amount" is-stroked-out=" ! upsells.annual.isSelected" is-discount="true" currency-symbol="context.currencySymbol"> <fs-line-item-control> <fs-switch ng-if="! upsells.annual.isDisabled || cartConfig.shouldShowMonthlySwitch" is-active="upsells.annual.isSelected" on-toggle="upsells.annual.toggle()" is-bordered="true"> <fs-badge ng-hide="contextManager.preDiscount.shouldHideAnnualDiscountPercentage"> <span translate-params-percentage="contextManager.preDiscount.annual.percentage" translate>Save {{ percentage }}%</span> </fs-badge> </fs-switch> <fs-badge ng-if="upsells.annual.isDisabled && ! cartConfig.shouldShowMonthlySwitch"> <span translate-params-percentage="contextManager.preDiscount.annual.percentage" translate>{{ percentage }}% Off</span> </fs-badge> </fs-line-item-control> <span class="description" translate>Annual discount</span> </fs-line-item> </fs-cart-header-footer> <!--/ Annual Upsell --> </fs-cart-header> <!--/ Mini Cart --> <!-- License Actions for the in SDK checkout mode --> <!--/ License Actions for the in SDK checkout mode --> <!-- Order Summary --> <fs-line-items id="order_summary" ng-if=" ! context.isPaymentMethodUpdate && ! isFreePlanOrFreeTrialMode() && context.billingCycle"> <!-- Multi-License Discount --> <fs-line-item ng-if="contextManager.preDiscount.hasMultiSiteDiscount()" class="discount discount--multisite" amount="contextManager.preDiscount.multiSite.amount" is-discount="true" currency-symbol="context.currencySymbol" is-muted="true"> <span class="description" ng-if="contextManager.preDiscount.hasAnnualDiscount()" translate-params-license-unit-label="licenseUnitLabel()" translate-params-percentage="contextManager.preDiscount.multiSite.percentage" translate>Multi-{{ licenseUnitLabel }} license discount (Extra {{ percentage }}%)</span> <span class="description" ng-if=" ! contextManager.preDiscount.hasAnnualDiscount()" translate-params-license-unit-label="licenseUnitLabel()" translate-params-percentage="contextManager.preDiscount.multiSite.percentage" translate>Multi-{{ licenseUnitLabel }} license discount (Save {{ percentage }}%)</span> </fs-line-item> <!--/ Multi-License Discount --> <!-- Bundle Discount --> <fs-line-item ng-if="contextManager.preDiscount.hasBundleDiscount()" class="discount bundle-discount discount--bundle" is-discount="true" amount="contextManager.preDiscount.bundle.amount" currency-symbol="context.currencySymbol"> <span class="description" ng-if="contextManager.preDiscount.hasAnnualOrMultiSiteDiscount()" translate-params-percentage="contextManager.preDiscount.bundle.percentage" translate>Bundle discount (Extra {{ percentage }}%)</span> <span class="description" ng-if=" ! contextManager.preDiscount.hasAnnualOrMultiSiteDiscount()" translate-params-percentage="contextManager.preDiscount.bundle.percentage" translate>Bundle discount (Save {{ percentage }}%)</span> </fs-line-item> <!--/ Bundle Discount --> <!-- Subtotal --> <fs-line-item ng-if="(contextManager.preDiscount.hasAnyDiscount() || hasCouponDiscount() || tax.shouldShowTaxRow() || pluginHasRenewalsDiscount()) && ! isFreePlanOrFreeTrialMode()" class="subtotal" amount="price(context.billingCycle)" currency-symbol="context.currencySymbol" has-separator="true" is-bold="true"> <span class="description"> <span translate translate-context="Subtotal row">Subtotal</span> </span> </fs-line-item> <!--/ Subtotal --> <!-- Prorated Discount --> <fs-line-item ng-if="hasProrationDiscount()" class="discount discount--prorated" amount="context.proratedDiscountAmount" currency-symbol="context.currencySymbol" is-discount="true"> <span class="description">{{ proratedDiscountLabel() }}</span> </fs-line-item> <!--/ Prorated Discount --> <!-- Plugin Renewals Discount --> <fs-line-item ng-if="showPluginRenewalDiscount()" class="discount discount--plugin-renewals" currency-symbol="context.currencySymbol" is-discount="true" amount="context.renewalDiscount.initialRenewalDiscount"> <span class="description">{{ getPluginFirstRenewalsDiscountDesc() }}</span> </fs-line-item> <!--/ Plugin Renewals Discount --> <!-- Coupon Discount --> <fs-line-item class="promotional-code has-smart-input" has-smart-input="true" currency-symbol="context.currencySymbol" amount="hasCouponDiscount() && ! showPluginRenewalDiscount() ? context.couponDiscount : null" is-discount="true"> <div class="description promotional-code__description"> <div id="promotional_code" ng-if=" ! context.isFreePlan" ng-hide="context.hideCoupon || context.isPaymentMethodUpdate" class="promotional-code__input"> <fs-smart-input current-value="context.coupon ? context.coupon.code : ''" on-submit="submitPromotionalCode" icon="tag" on-clear="cancelPromotionalCode" is-disabled-edit="context.inPaypalCheckout" is-darker="true" label="{{ 'Enter promotion code' | translate }}"> <span translate>Have a promotional code?</span> </fs-smart-input> </div> <div class="promotional-code__text" ng-if="hasCouponDiscount() && ! showPluginRenewalDiscount()"> {{ getCouponDiscountDesc() }} <fs-tooltip ng-if="pricing.shouldGetRelativeRenewalsDiscount()"> <fs-tooltip-trigger> <button class="fs-tooltip__trigger-button"> <span class="fsds-sr-only" translate translate-context="Tooltip Trigger Button Question Mark">?</span> <fs-icon icon="question" aria-label="Help"></fs-icon> </button> </fs-tooltip-trigger> <fs-tooltip-content> <div> <p>{{ getCouponRelativeDiscountTooltip() }}</p> </div> </fs-tooltip-content> </fs-tooltip> </div> <span title="expires in" ng-if="context.coupon.is_special_promo" class="countdown-fomo promotional-code__fomo"> <fs-icon icon="fire"></fs-icon> <span class="expires-in"> <span id="count-timer">{{ '00' == context.couponCountdown.days ? '' : (context.couponCountdown.days + ' ' + (1 == context.couponCountdown.days ? 'day' : 'days') + ' & ') }}{{ context.couponCountdown.hours }}:{{ context.couponCountdown.minutes }}:{{ context.couponCountdown.seconds }}</span> </span> </span> </div> </fs-line-item> <!--/ Coupon Discount --> <!-- Tax --> <fs-line-item ng-if="tax.shouldShowTaxRow() && ! isFreePlanOrFreeTrialMode() && ! hasFullCouponDiscount()" class="tax" is-loading="tax.isCalculatingTax" currency-symbol="context.currencySymbol" amount="tax.isCalculatingTax ? null : calcFirstPaymentTax()" is-muted="tax.hasExemption()" is-stroked-out="tax.hasExemption()"> <div class="description description--tax"> <span ng-if=" ! tax.isCalculatingTax"> <span>{{ tax.getTaxLabel() }}</span> <span>({{ tax.getTaxInPercentage() }})</span> </span> <span ng-if="tax.isCalculatingTax" translate>Calculating tax...</span> <div class="vat-tooltip"> <fs-tooltip> <fs-tooltip-trigger> <button class="vat-tooltip__trigger fs-tooltip__trigger-button"> <span class="fsds-sr-only" translate translate-context="Tooltip Trigger Button Question Mark">?</span> <fs-icon icon="question" aria-label="Help"></fs-icon> </button> </fs-tooltip-trigger> <fs-tooltip-content> <div> <p translate>Tax is calculated based on your billing address.</p> </div> </fs-tooltip-content> </fs-tooltip> </div> </div> </fs-line-item> <!--/ Tax --> <!-- After Trial --> <fs-line-item ng-if="isTrialModePaid()" currency-symbol="context.currencySymbol" currency="context.currency" has-separator="true" is-muted="true" is-trial-line="true" amount="priceWithTax()"> <span class="description description--after-trial" translate>Total after trial</span> </fs-line-item> <!--/ After Trial --> <!-- Order Total --> <fs-line-item ng-if=" ! isFreePlanOrFreeTrialMode()" amount="isTrialMode() ? '0.00' : priceWithTax()" currency-symbol="context.currencySymbol" currency=" ! entity.hasLicenseContext() && hasMultipleVisibleCurrencies() ? null : context.currency" is-bold="true" has-separator=" ! isTrialModePaid()" size="large" class="order-total"> <span class="description description--total">{{ getTodayTotalLabel() }}</span> <fs-line-item-secondary-control ng-if=" ! entity.hasLicenseContext() && hasMultipleVisibleCurrencies() && cartConfig.shouldShowInlineCurrencySelector"> <fs-select id="currencies_secondary" is-small="true" is-dark="true" is-text-like="true" aria-label="Currency Selection" is-hiding-main-badge="true" is-transparent="true" ng-model="context.currency" ng-disabled="! canChangeCurrency()"> <fs-select-option ng-repeat="(currency,currencySymbol) in context.currencies" badge="currencySymbol" value="currency"> {{ currency | uppercase }} </fs-select-option> </fs-select> </fs-line-item-secondary-control> <fs-line-item-breakdown ng-if="shouldShowRenewalsLineInTotal()" ng-class="{'fs-line-item__breakdown--with-badge': hasTotalRenewalsDiscount()}"> <fs-badge ng-if="hasTotalRenewalsDiscount()" is-muted="true"> <span translate-params-renewals-discount-value="calcTotalRenewalsDiscountPercentage()" translate> {{ renewalsDiscountValue }} Off Renewals </span> </fs-badge> <span ng-if="pricing.isAnnual()" class="description description--renewals-discount" translate-params-renewals-price="renewalPaymentWithTax() | currency:context.currencySymbol:2" translate> Renews at {{ renewalsPrice }} per year </span> <span ng-if="pricing.isMonthly()" class="description description--renewals-discount" translate-params-renewals-price="renewalPaymentWithTax() | currency:context.currencySymbol:2" translate> Renews at {{ renewalsPrice }} per month </span> </fs-line-item-breakdown> </fs-line-item> <!--/ Order Total --> </fs-line-items> <!--/ Order Summary --> <!-- Trial Summary Notice --> <div ng-if="isTrialModePaid() && !hasFullCouponDiscount()" id="trial_summary_notice"> <fs-alert has-bottom-gutter="appearanceConfig.isTwoColumn" type="warn"> <p translate-params-trial-start-date="context.trial.start | date:'MMMM d, yyyy'" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-trial-email-reminder-day="context.trial.reminder" translate> Your free trial begins on <strong>{{ trialStartDate }}</strong> and will end on <strong>{{ trialEndDate }}</strong>. You can cancel anytime before <strong>{{ trialEndDate }}</strong> to avoid being charged and we’ll send an email reminder {{ trialEmailReminderDay }} days before the trial ends. </p> </fs-alert> </div> <!--/ Trial Summary Notice --> <!-- Promotional --> <fs-promotion promotion-data="context.promotionData"></fs-promotion> <!--/ Promotional --> <!-- Review --> <div ng-if=" ! isCompletedState() && (appearanceConfig.isShowingReviews || (hasRefundPolicy() && appearanceConfig.hasRefundBadgeBelowBreakdown))" class="fs-social-proofing fs-social-proofing--two-column row row--has-horizontal-padding row--has-bottom-padding" ng-class="{'fs-social-proofing--two-column--dynamic-refund-badge': appearanceConfig.isRefundBadgeDynamic}"> <div ng-if="hasRefundPolicy() && appearanceConfig.hasRefundBadgeBelowBreakdown" class="col s4 fs-social-proofing__refund-badge"> <fs-money-back-guarantee refund-policy="context.plugin.refund_policy" money-back-period="context.plugin.money_back_period"></fs-money-back-guarantee> </div> <div class="col s4" ng-if="appearanceConfig.isShowingReviews"> <fs-reviews reviews="appearanceConfig.reviews"></fs-reviews> </div> </div> <!--/ Review --> </div> <!--/ .fs-checkout-form__details --> <div class="fs-checkout-form__form"> <fs-cancel-button ng-if="appearanceConfig.shouldShowCancelButton" appearance-config="appearanceConfig"></fs-cancel-button> <!-- User and Billing Form --> <!-- @todo - Refactor to have only one form instead of a userForm and a billingForm --> <div class="user-and-billing-form animate" ng-show=" ! context.isReady4Review"> <!-- Account Details --> <h2 ng-if="! entity.hasUserContext() && ! entity.hasLicenseContext()" class="fsds-sr-only" translate>Enter your account details</h2> <form id="account_details" ng-if="! entity.hasUserContext() && ! entity.hasLicenseContext()" name="userForm" ng-submit="reviewOrder()" required> <div class="row row--no-vertical-gutter" ng-init="connectUserForm(userForm)"> <div id="user_{{ f.name }}_container" ng-repeat="f in accountDetailsFields" class="col s{{ 2*f.columns }} l{{ f.columns }}"> <fs-input-container is-required="f.required" is-showing-error="userForm[f.name].$dirty" control-id="user_{{ f.name }}"> <fs-input-control-label>{{ f.label() }}</fs-input-control-label> <fs-input-control> <input id="user_{{ f.name }}" type="{{ 'email' == f.name ? 'email' : 'text' }}" name="{{ f.name }}" autocomplete="{{ f.autocomplete }}" autocorrect="no" ng-model="context[f.name]" placeholder="{{ f.placeholder }}" ng-blur="userForm[f.name].$setDirty()" ng-model-options="{ updateOn: 'blur' }" ng-pattern="f.pattern" aria-required="true" fs-focus-me="f.name == context.focusField" fs-focus-me-desktop-only="true" ng-disabled="context.isProcessingUpgrade" ng-required="f.required && ! isReadonlyUserField(f.name)" ng-readonly="isReadonlyUserField(f.name)" /> </fs-input-control> <fs-input-control-error ng-messages="userForm[f.name].$error"> <span ng-message="required" translate-context="Form error" translate>Required</span> <span ng-message="pattern" translate-context="Form error" translate-params-label="f.label() | lowercase" translate>Invalid {{ label }}</span> </fs-input-control-error> </fs-input-container> </div> </div> <div id="user_email_confirmation_container" class="animate" ng-show="context.email && context.firstName"> <div class="row row--no-vertical-gutter"> <div class="col s2"> <fs-input-container control-id="user_email_confirmation" is-required="true" is-showing-error="userForm.email_confirmation.$dirty && areEmailsInvalid()" is-valid="userForm.email_confirmation.$dirty && ! areEmailsInvalid()"> <fs-input-control-label> <span translate-context="Form field" translate>Confirm email address</span> </fs-input-control-label> <fs-input-control> <input id="user_email_confirmation" type="text" name="email_confirmation" autocomplete="no" autocorrect="no" ng-model="context.email_confirmation" ng-blur="userForm.email_confirmation.$dirty = true" ng-model-options="{ updateOn: 'default blur', debounce: {default: 700, blur: 1, cut: 1, paste: 1, mouseup: 1} }" aria-required="true" fs-focus-me="'email_confirmation' == context.focusField" fs-focus-me-desktop-only="true" ng-disabled="context.isProcessingUpgrade" required /> </fs-input-control> <fs-input-control-error> {{ emailsNotMatchingError() }} </fs-input-control-error> </fs-input-container> </div> <div class="col s2"> <fs-input-container control-id="user_phone" is-showing-error="userForm.phone.$dirty"> <fs-input-control-label> <span ng-if="ui.isMobile" translate-context="Form field" translate>Phone number</span> <span ng-if=" ! ui.isMobile" translate-context="Form field" translate>Phone number <span class="fsds-muted-text">(optional)</span></span> </fs-input-control-label> <fs-input-control> <input id="user_phone" type="tel" name="phone" autocomplete="no" ng-model="context.phone" fs-restrict="[^0-9\+\-\(\)\s\.]" ng-blur="userForm.phone.$dirty = true" ng-model-options="{ updateOn: 'default blur', debounce: {default: 700, blur: 1, cut: 1, paste: 1, mouseup: 1} }" fs-focus-me="shouldFocusPhone()" fs-focus-me-desktop-only="true" placeholder="+{{ context.countriesPhoneCodes[context.billing.address_country] }} 888 888 8888" ng-disabled="context.isProcessingUpgrade" /> </fs-input-control> <fs-input-control-error ng-messages="userForm.phone.$error"> <span ng-message="invalid" translate-context="Form error" translate>Please enter a valid phone number</span> </fs-input-control-error> </fs-input-container> </div> </div> </div> <div ng-if="showCartNotice()" class="email-cart-notice"> <span translate>Your email and cart are saved so we can send you email reminders about this order.</span> <span ng-if="isGdprOptinRequired()"> <span ng-if=" ! context.isProcessingCartAction"> <a ng-click="allowOrDisallowCart()" href="#"> <span ng-if="context.isCartAllowed" translate-context="Verb" translate>No thanks</span> <span ng-if=" ! context.isCartAllowed" translate-context="Verb" translate>Yes - please</span> </a>. </span> <span ng-if="context.isProcessingCartAction" translate-context="Verb" translate>Processing...</span> </span> </div> <!-- Single column Money Back Guarantee --> <div class="fs-social-proofing fs-social-proofing--single-column" ng-if="hasRefundPolicy() && appearanceConfig.isShowingRefundBadge"> <fs-money-back-guarantee refund-policy="context.plugin.refund_policy" money-back-period="context.plugin.money_back_period"></fs-money-back-guarantee> </div> <!--/ Single column Money Back Guarantee --> </form> <!--/ Account Details --> <!-- Billing Details --> <div id="billing_details" class="step billing-details" ng-if=" ! isFreePlanOrFreeTrialMode() && ! hasFullCouponDiscount()"> <header class="billing-details__header"> <h2 class="billing-details__title" translate>Billing information</h2> <div id="trial_payment_method_tip" class="billing-details__trial-tooltip" ng-if="isTrialMode()"> <fs-tooltip tooltip-width="350"> <fs-tooltip-trigger> <a href="javascript: void;" translate>Why do we need this for a free trial?</a> </fs-tooltip-trigger> <fs-tooltip-content> <p><strong translate>Don't worry, we won't charge you now...</strong></p> <p translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-trial-reminder-day="context.trial.reminder" translate> We ask for your payment information to reduce fraud and provide a seamless subscription experience. Your account will renew automatically on <em>{{ trialEndDate }}</em>. You can cancel anytime before then to avoid being charged, and we’ll send you an email reminder <em>{{ trialReminderDay }} days before</em> your free trial ends. You won't be charged now. </p> </fs-tooltip-content> </fs-tooltip> </div> </header> <fs-payment-method-chooser is-paypal-supported="isPayPalSupported()" ng-model="context.selectedMethod" change-payment-method="changePaymentMethod"></fs-payment-method-chooser> <div id="billing" class="fsds-container-padding fs-billing" ng-show=" ! context.inPaypalCheckout"> <form name="billingForm" required ng-submit="context.isBillingFormValid && submitBillingForm($event)"> <div class="row fs-billing__gutter-below fs-billing__show-hide animate" ng-show="isTrialMode() && isLifetime() && ! isCreditCard()"> <div class="col"> <fs-alert type="warn" id="paypal_lifetime_trial_notice"> <p translate> PayPal requires setting up automatic payments in order to start a trial, but you'll only get charged one time if you continue using the product after the trial ends. </p> </fs-alert> </div> </div> <div id="prefill_billing_details" class="row" ng-if="context.isSandbox"> <div class="col"> <a id="prefill_billing_details" ng-click="prefillCheckoutForm()" style="font-weight: bold">🐞 Prefill Form (Only visible in Sandbox mode)</a> </div> </div> <div class="fs-billing__credit-card fs-billing__show-hide animate" ng-show="isCreditCard()"> <div class="row row--no-vertical-gutter"> <div id="fs_credit_card_container" class="col s4 l2"> <fs-input-container is-required="true" control-id="billing_cc" is-showing-error="billingForm.number.$dirty"> <fs-input-control-label> <span translate-context="Form field" translate>Credit or debit card number</span> </fs-input-control-label> <fs-input-control> <input id="billing_cc" type="tel" name="number" ng-model="context.billing.number" ng-blur="billingForm.number.$setDirty()" ng-required="isCreditCard()" fs-cc-number="isCreditCard()" restrict-numeric card-number-formatter card-type="context.billing.cardType" inputmode="numeric" autocomplete="cc-number" autocorrect="off" autocapitalize="none" spellcheck="false" maxlength="19" fs-focus-me="'cc' == context.focusField" placeholder="• • • • • • • • • • • • • • • •"/> </fs-input-control> <fs-input-control-icon> <fs-card-icon type="{{ context.billing.cardType }}"></fs-card-icon> </fs-input-control-icon> <fs-input-control-error ng-messages="billingForm.number.$error"> <span ng-message="required" translate-context="Form error" translate>Credit card required</span> <span ng-message="minlength" translate-context="Form error" translate>Credit card must be 15-19 digits</span> <span ng-message="pattern" translate-context="Form error" translate>Credit card must consist of only numbers</span> <span ng-message="invalid" translate-context="Form error" translate>Please enter a valid card number</span> </fs-input-control-error> </fs-input-container> </div> <div class="col s4 l2"> <div class="row"> <div id="billing_expiry_container" class="col s2"> <fs-input-container control-id="billing_expiry" is-required="true" is-showing-error="billingForm.exp.$dirty"> <fs-input-control-label> <span translate-context="Form field" translate>Expiry</span> </fs-input-control-label> <fs-input-control> <input id="billing_expiry" type="tel" name="exp" ng-model="context.billing.exp" ng-blur="billingForm.exp.$setDirty()" aria-required="true" ng-required="isCreditCard()" fs-cc-expiry="isCreditCard()" inputmode="numeric" autocomplete="cc-exp" autocorrect="off" autocapitalize="none" spellcheck="false" maxlength="9" placeholder="{{ 'MM / YY' | translate}}" fs-focus-me="shouldFocusExpiry()"/> </fs-input-control> <fs-input-control-error ng-messages="billingForm.exp.$error"> <span ng-message="required" translate-context="Form error" translate>Required</span> <span ng-message="invalid" translate-context="Form error" translate>Please enter a valid expiry date</span> </fs-input-control-error> </fs-input-container> </div> <div id="billing_code_container" class="col s2"> <fs-input-container control-id="billing_code" is-showing-error="billingForm.cvc.$dirty" is-required="true"> <fs-input-control-label> <span translate-context="Form field" translate>Security code</span> </fs-input-control-label> <fs-input-control> <input id="billing_code" type="tel" name="cvc" ng-model="context.billing.cvc" placeholder="123" ng-blur="billingForm.cvc.$setDirty()" aria-required="true" fs-restrict="[^0-9]" ng-required="isCreditCard()" fs-cc-code="isCreditCard()" card-cvc-formatter ng-maxlength="4" inputmode="numeric" autocomplete="cc-csc" autocorrect="off" autocapitalize="none" spellcheck="false" fs-focus-me="shouldFocusCvv()"/> </fs-input-control> <fs-input-control-icon> <fs-tooltip tooltip-width="350"> <fs-tooltip-trigger> <fs-icon icon="cvc" aria-label="CVC Code"></fs-icon> </fs-tooltip-trigger> <fs-tooltip-content> <div class="cc-cvc-tooltip row"> <div ng-show="!isAmericanExpress() || isUnknownCC()" class="col"> <img src="/assets/img/security-code-visa.svg" class="fs-tooltip__image-left" height="150" width="240" alt="image showing 3-digit card security code on back of card" /> <h4 ng-if="ccTypeTitle()">{{ ccTypeTitle() }}</h4> <h4 ng-if=" ! ccTypeTitle()" translate-context="Credit card provider" translate>Visa/MasterCard</h4> <p translate>The security code is a 3-digit number on the back of your credit card</p> </div> <div ng-show="isAmericanExpress() || isUnknownCC()" class="col"> <img src="/assets/img/security-code-amex.svg" class="fs-tooltip__image-left" height="150" width="240" alt="image showing 4-digit card security code on back of card" /> <h4 translate>American Express</h4> <p translate>The security code is a 4-digit number on the front of your credit card</p> </div> </div> </fs-tooltip-content> </fs-tooltip> </fs-input-control-icon> <fs-input-control-error ng-messages="billingForm.cvc.$error"> <span ng-message="required" translate-context="Form error" translate>Required</span> <span ng-message="invalid" translate-context="Form error" translate>Invalid security code</span> </fs-input-control-error> </fs-input-container> </div> </div> </div> </div> </div> <div class="row"> <div class="col {{ tax.isSupportingTaxID ? 's4 l2' : 's2' }}"> <fs-input-container control-id="billing_country" is-showing-error="isShowingBillingFormTaxDisclaimerOutsideZip()" is-required="true"> <fs-input-control-label> <span translate-context="Form field" translate>Country</span> </fs-input-control-label> <fs-input-control> <fs-select id="billing_country" ng-model="context.billing.address_country" name="country" fs-focus-me="'billing_country' === context.focusField" search-placeholder="{{ 'Search countries...' | translate }}" no-item-placeholder="{{ 'No countries found.' | translate }}" ng-change="updateBilling()"> <fs-select-option ng-repeat="(code, countryName) in context.countries" value="code"> {{ countryName }} </fs-select-option> </fs-select> </fs-input-control> <fs-input-control-error> <span class="fs-input-container__error-with-bottom-gutter" ng-class="{'fs-input-container__error-with-bottom-gutter--expand': !isShowingBillingFormZipError(billingForm.zip)}"> {{ tax.getTaxDisclaimer() }} </span> </fs-input-control-error> </fs-input-container> </div> <div class="col s2 {{ tax.isSupportingTaxID ? 'l1' : '' }}"> <fs-input-container control-id="billing_zip" is-showing-error="isShowingBillingFormZipError(billingForm.zip)" is-required="tax.isZipCodeRequired || getBillingCountry().supportsPostalOrZipCode()"> <fs-input-control-label> <span>{{ getBillingCountry().getZipCodeUILabel() }}</span> </fs-input-control-label> <fs-input-control> <input id="billing_zip" type="{{ getBillingCountry().hasNonNumericZipCode() ? 'text' : 'tel' }}" name="zip" ng-model="context.billing.address_zip" ng-focus="billingForm.zip.$fsHidePattern = true;" ng-blur="billingForm.zip.$setDirty(); billingForm.zip.$fsHidePattern = false;" aria-required="true" ng-pattern="getBillingCountry().zipCodePattern" ng-required="tax.isZipCodeRequired || getBillingCountry().supportsPostalOrZipCode()" maxlength="10" inputmode="{{ getBillingCountry().hasNonNumericZipCode() ? 'text' : 'numeric' }}" autocomplete="postal-code" autocorrect="no" autocapitalize="none" spellcheck="false" ng-change="updateBilling()" fs-focus-me="shouldFocusZipCode()"/> </fs-input-control> <fs-input-control-error> <span ng-if=" ! context.isPaymentMethodUpdate && tax.shouldShowTaxRow() && tax.getTaxRateAfterExemption() && tax.isZipCodeRequired" class="tax-disclaimer"> <span>{{ tax.getTaxDisclaimer() }} </span> </span> <span ng-messages="billingForm.zip.$error"> <span ng-message="required" translate-context="Form error" translate-params-zip-code-ui-label="getBillingCountry().getZipCodeUILabel()" translate>{{ zipCodeUiLabel }} is required</span> <span ng-message="pattern" ng-show=" ! billingForm.zip.$fsHidePattern" translate-context="Form error" translate-params-zip-code-ui-label="getBillingCountry().getZipCodeUILabel().toLowerCase()" translate>Invalid {{ zipCodeUiLabel }} format</span> <span ng-message="invalid_us_zipcode" translate-context="Form error" translate-params-zip-code-ui-label="getBillingCountry().getZipCodeUILabel().toLowerCase()" translate>Invalid {{ zipCodeUiLabel }}</span> </span> </fs-input-control-error> </fs-input-container> </div> <!-- VAT ID --> <div ng-if="tax.isSupportingTaxID" class="col s2 l1"> <fs-tax-id is-disabled-edit="context.isPaymentMethodUpdate || context.inPaypalCheckout" billing="context.billing" tax="tax" product-type="context.plugin.type" ></fs-tax-id> </div> <!--/ VAT ID --> <!-- Upsells --> <fs-upsell ng-if="appearanceConfig.isShowingUpsells" class="col s14 {{ 0 === $index ? 'col--no-top-gutter' : '' }}" ng-repeat="upsell in upsells.getBeforeReviewUpsells(priceWithTax())" upsell="upsell" current-price="priceWithTax()"></fs-upsell> <!--/ Upsells --> </div> <div class="row" ng-show="context.upgradeCardError && isCreditCard()"> <div class="col"> <fs-alert type="error"> <p>{{ context.upgradeCardError }}</p> </fs-alert> </div> </div> <div class="fs-billing__show-hide animate" ng-show="isTrialMode()"> <div class="row fs-billing__gutter-above"> <fs-choice-container class="col" type="checkbox" is-dense="true" font-size="md"> <label id="trial_reminder"> <input type="checkbox" checked="checked" value="true" /> <span translate-params-trial-email-reminder-day="context.trial.reminder" translate> Send me an email reminder <em>{{ trialEmailReminderDay }} days before</em> the trial ends. </span> </label> </fs-choice-container> </div> </div> <fs-country-restricted-feedback ng-if="isCountryRestricted(context.billing.address_country)"></fs-country-restricted-feedback> <div class="fs-billing__show-hide animate fs-billing__paypal-instruction fs-billing__gutter-above" ng-show=" ! isCreditCard()"> <div class="row"> <div class="col"> <p class="fsds-text-size-md" translate> Click <b>Continue to PayPal</b> to log in and confirm your purchase. You'll be sent back to this page to finish up. </p> </div> </div> </div> <fs-cta-group> <fs-cta-left> <fs-cta ng-show="isCreditCard()" appearance="primary" is-icon-right="true" is-disabled="" on-click="validateBillingForm(billingForm, $event)" should-focus="context.prefilled" > <span translate-context="Verb" translate>Review Order</span> <fs-icon icon="arrow-right" aria-hidden="true"></fs-icon> </fs-cta> <fs-cta ng-show=" ! isCreditCard()" id="paypal_express_checkout_button" is-disabled="context.isProcessingUpgrade" is-icon-right="true" on-click="validateBillingForm(billingForm, $event)" should-focus="context.prefilled"> <fs-icon icon="{{ context.isProcessingUpgrade ? 'cog' : 'arrow-right' }}" is-spinning="context.isProcessingUpgrade" aria-hidden="true"></fs-icon> <span translate-context="Verb" translate>Continue to PayPal</span> </fs-cta> </fs-cta-left> </fs-cta-group> </form> </div> </div> <!--/ Billing Details --> </div> <!-- /User and Billing Form --> <!-- Trial Without Payment Method --> <div ng-if="isTrialModeFree()" id="trial_without_payment_method_notice"> <fs-alert type="info"> <p translate-params-trial-begin-date="context.trial.start | date:'MMMM d, yyyy'" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate> Your free trial begins on <strong>{{ trialBeginDate }}</strong> and ends on <strong>{{ trialEndDate }}</strong>. </p> </fs-alert> </div> <!--/ Trial Without Payment Method --> <!-- Order Review --> <div id="review_order" ng-show="isFreePlanOrFreeTrialMode() || context.isReady4Review || hasFullCouponDiscount()" class="step animate order-review" ng-class="{'is-free-upgrade': hasFullCouponDiscount()}"> <fs-payment-back ng-show="context.isReady4Review" payment-method="context.selectedMethod" card-type="context.billing.cardType" cc-suffix="ccSuffix()" on-edit="editCardDetails" is-disabled="ui.isBlockingSubmission || context.inPaypalCheckout || context.isProcessingUpgrade || context.upgradeComplete" user-email="context.email" ></fs-payment-back> <h2 ng-if=" ! isFreePlanOrFreeTrialMode() && ! hasFullCouponDiscount()" class="order-review__title" translate>Review your order</h2> <div class="row" ng-if="context.isPaymentMethodUpdate || ! isCreditCardDetailsUpdate()"> <div id="payment_terms" class="col order-review__list" ng-if=" ! isFreePlanOrFreeTrialMode() && ! hasFullCouponDiscount()"> <ul ng-if="isTrialMode()"> <li translate-params-trial-begin-date="context.trial.start | date:'MMMM d, yyyy'" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate> Your free trial begins on <em>{{ trialBeginDate }}</em> and ends on <em>{{ trialEndDate }}</em>. </li> <li> <span ng-if="isCreditCard()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate-params-first-payment-tax="calcFirstPaymentTaxAfterExemption() | currency:context.currencySymbol:2" translate> On <em>{{ trialEndDate }}</em>, your card ending in <em>{{ ccSuffix() }}</em> will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em> (plus {{ firstPaymentTax }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate> On <em>{{ trialEndDate }}</em>, your card ending in <em>{{ ccSuffix() }}</em> will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em>. </span> </span> <span ng-if=" ! isCreditCard()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate-params-first-payment-tax="calcFirstPaymentTaxAfterExemption() | currency:context.currencySymbol:2" translate> On <em>{{ trialEndDate }}</em>, your PayPal account will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em> (plus {{ firstPaymentTax }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-trial-end-date="context.trial.end | date:'MMMM d, yyyy'" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate> On <em>{{ trialEndDate }}</em>, your PayPal account will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em>. </span> </span> </li> <li ng-if=" ! isLifetime()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-renewal-payment-amount="renewalPaymentAmount() | currency:context.currencySymbol:2" translate> After the trial, your {{ planCycleAdjective() }} renewal payments will be <em>{{ renewalPaymentAmount }} {{ context.currency | uppercase }}</em> (plus {{ calcRenewalPaymentTaxWithExemption() | currency:context.currencySymbol:2 }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-renewal-payment-amount="renewalPaymentAmount() | currency:context.currencySymbol:2" translate> After the trial, your {{ planCycleAdjective() }} renewal payments will be <em>{{ renewalPaymentAmount }} {{ context.currency | uppercase }}</em>. </span> </li> <li translate-params-plan-cycle-adjective="!isLifetime() ? planCycleAdjective() : ''" translate> To avoid {{ planCycleAdjective }} charges, cancel before the renewal date. </li> <li translate-params-trial-email-reminder-day="context.trial.reminder" translate> We’ll send an email reminder <em>{{ trialEmailReminderDay }} days before</em> the trial ends. </li> </ul> <ul ng-if="!isTrialMode()"> <li ng-show="!isLifetime()"> <span ng-if="hasFullCouponDiscount()"> <span ng-if="context.isPaymentMethodUpdate" translate-params-plan-renewal-date="cycleEndDate() | date:'MMMM d, yyyy'" translate> Your plan renews automatically on <em>{{ planRenewalDate }}</em>. </span> <span ng-if=" ! context.isPaymentMethodUpdate" translate-params-plan-begin-date="context.now | date:'MMMM d, yyyy'" translate-params-plan-renewal-date="cycleEndDate() | date:'MMMM d, yyyy'" translate> Your plan begins on <em>{{ planBeginDate }}</em> and renews automatically on <em>{{ planRenewalDate }}</em>. </span> </span> <span ng-if=" ! hasFullCouponDiscount()"> <span ng-if="context.isPaymentMethodUpdate" translate-params-plan-renewal-date="cycleEndDate() | date:'MMMM d, yyyy'" translate> Your paid plan renews automatically on <em>{{ planRenewalDate }}</em>. </span> <span ng-if=" ! context.isPaymentMethodUpdate" translate-params-plan-begin-date="context.now | date:'MMMM d, yyyy'" translate-params-plan-renewal-date="cycleEndDate() | date:'MMMM d, yyyy'" translate> Your paid plan begins on <em>{{ planBeginDate }}</em> and renews automatically on <em>{{ planRenewalDate }}</em>. </span> </span> </li> <li ng-if=" ! context.isPaymentMethodUpdate"> <span ng-if="isCreditCard()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate-params-first-payment-tax="calcFirstPaymentTaxAfterExemption() | currency:context.currencySymbol:2" translate> Your card ending in <em>{{ ccSuffix() }}</em> will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em> (plus {{ firstPaymentTax }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate> Your card ending in <em>{{ ccSuffix() }}</em> will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em>. </span> </span> <span ng-if=" ! isCreditCard()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate-params-first-payment-tax="calcFirstPaymentTaxAfterExemption() | currency:context.currencySymbol:2" translate> Your PayPal account will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em> (plus {{ firstPaymentTax }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-first-payment-amount="firstPaymentAmount() | currency:context.currencySymbol:2" translate-params-first-payment-currency="context.currency | uppercase" translate> Your PayPal account will be charged <em>{{ firstPaymentAmount }} {{ firstPaymentCurrency }}</em>. </span> </span> </li> <li ng-if="!isLifetime()"> <span ng-if="tax.hasTaxAfterExemption()" translate-params-renewal-amount="renewalPaymentAmount() | currency:context.currencySymbol:2" translate> Your {{ planCycleAdjective() }} renewal payments will be <em>{{ renewalAmount }} {{ context.currency | uppercase }}</em> (plus {{ calcRenewalPaymentTaxWithExemption() | currency:context.currencySymbol:2 }} tax). </span> <span ng-if=" ! tax.hasTaxAfterExemption()" translate-params-renewal-amount="renewalPaymentAmount() | currency:context.currencySymbol:2" translate> Your {{ planCycleAdjective() }} renewal payments will be <em>{{ renewalAmount }} {{ context.currency | uppercase }}</em>. </span> </li> <li ng-if-start="!isLifetime()"> <span ng-if="'annual' == context.billingCycle" translate> To avoid charges for the next year, cancel before the renewal date. </span> <span ng-if="'annual' != context.billingCycle" translate> To avoid charges for the next month, cancel before the renewal date. </span> </li> <li ng-if-end ng-show="'annual' == context.billingCycle" translate> We'll send an email reminder 30 days before your subscription renews. </li> </ul> </div> </div> <!-- 14-day Cooling Off Period Waiver --> <fs-eu-waiver-control ng-if="isCoolingOffWaiverRequired()" ng-model="context.euWaiveRight" should-focus="ui.focusEUWaiveRight" has-refund-policy="hasRefundPolicy()" eula-url="eulaUrl" money-back-period="context.plugin.money_back_period" module-label="moduleLabel()" has-error=" ! isFreePlanOrFreeTrialMode() && !hasFullCouponDiscount() && isEUCountry() && ui.showEUError" purchase-button-text="getPurchaseButtonText()" ></fs-eu-waiver-control> <!--/ 14-day Cooling Off Period Waiver --> <!-- EU and CA GDPR Opt-in --> <fs-marketing-optin-control ng-if="isGdprOptinRequired()" ng-model="context.isMarketingAllowed" module-label="moduleLabel()" should-focus="ui.focusGdprOptin" show-gdpr-optin-error="ui.showGdprOptinError" has-gdpr-optin-selection-error="context.hasGdprOptinSelectionError" ></fs-marketing-optin-control> <!--/ EU and CA GDPR Opt-in --> <!-- Auto Install --> <label id="auto_install" ng-if="ui.showAutoInstall && shouldActivateLicenseAfterPurchase()" class="checkbox-container"> <input type="checkbox" ng-model="context.autoInstallAfterUpgrade"> <strong><b>NEW</b> ⚡ &nbsp;Automatically install the {{ context.bundleProduct ? context.bundleProduct.type : moduleLabel() }} after the {{ context.hasFreePlan ? 'upgrade' : (isLifetime() ? 'purchase' : 'checkout') }}.</strong> </label> <!--/ Auto Install --> <div class="row" ng-show="context.upgradeError"> <div class="col"> <fs-alert type="error" has-top-gutter="true"> <p ng-if=" ! context.isUpgradeErrorHtml">{{ context.upgradeError }}</p> <div ng-if="context.isUpgradeErrorHtml" ng-bind-html="context.upgradeError | fsAllowUnsanitizedHtml"></div> </fs-alert> </div> </div> <!-- reCAPTCHA --> <div ng-show="ui.showRecaptcha" id="recaptcha" class="g-recaptcha" data-sitekey="6LdrfQsTAAAAAImG9PKRAwAoD7CJpPXTDyi34rGU" hl="en" data-callback="afterRecaptchaComplete"></div> <!--/ reCAPTCHA --> <!-- 2FA --> <form name="twoFAForm" required ng-submit="subscribe($event)" ng-show="ui.showTwoFA" > <div id="two-fa" class="row"> <div class="col s4"> <fs-input-container is-required="true" is-showing-error="twoFAForm.two_fa.$dirty" control-id="two_fa"> <fs-input-control> <fs-two-fa control-id="two_fa" control-name="two_fa" ng-model="context.security.twoFA" ng-blur="twoFAForm.two_fa.$dirty = true" ng-disabled="context.isProcessingUpgrade" should-focus="'two_fa' === context.focusField" on-complete="subscribe()" ></fs-two-fa> </fs-input-control> <fs-input-control-error class="align-center" ng-messages="twoFAForm.two_fa.$error"> <span ng-message="required" translate-context="Form error" translate>2FA Security code is required.</span> <span ng-message="minlength, maxlength" translate-context="Form error" translate>Must be a 6-digit numeric code.</span> </fs-input-control-error> </fs-input-container> </div> </div> </form> <!--/ 2FA --> <fs-country-restricted-feedback ng-if="isCountryRestricted(context.billing.address_country)"></fs-country-restricted-feedback> <fs-cta-group class="fs-checkout-cta" no-top-gutter="context.isFreePlan"> <fs-cta-left> <fs-cta ng-if="ui.isShowingRetryButton" on-click="reloadClearingSession($event)"> <span translate>Pay with a different method</span> </fs-cta> <fs-cta ng-if=" ! ui.isShowingRetryButton" on-click="subscribe($event)" is-icon-right="true" is-disabled="context.isProcessingUpgrade || isCountryRestricted(context.billing.address_country) || ui.isBlockingSubmission"> <fs-icon icon="{{ context.isProcessingUpgrade ? 'cog' : 'none' }}" is-spinning="context.isProcessingUpgrade" aria-hidden="true"></fs-icon> {{ context.isProcessingUpgrade ? getProcessingText() : getPurchaseButtonText() }} </fs-cta> </fs-cta-left> <fs-cta-footer> <div id="legal_terms"> <fs-legal-terms is-credit-card-details-update="isCreditCardDetailsUpdate()" is-trial-mode-free="isTrialModeFree()" is-free-plan-or-free-trial-mode="isFreePlanOrFreeTrialMode()" eula-url="eulaUrl" sale-terms-url="saleTermsUrl" is-saas="isSaas()" is-downloadable-software="false"></fs-legal-terms> </div> </fs-cta-footer> </fs-cta-group> <fs-fulfillment-badge-disclaimer is-credit-card-details-update="isCreditCardDetailsUpdate()" is-trial-mode-free="isTrialModeFree()" module-label="moduleLabel()" fulfillment-link="getFreemiusCheckoutFulfillmentLink()" is-standalone="true" ></fs-fulfillment-badge-disclaimer> </div> <!--/ Order Review --> <!-- Promotional --> <fs-promotion promotion-data="context.promotionData"></fs-promotion> <!--/ Promotional --> <!-- Money Back and Review --> <div ng-if=" ! isCompletedState() && ((hasRefundPolicy() && appearanceConfig.isShowingRefundBadge) || appearanceConfig.isShowingReviews)" class="fs-social-proofing fs-social-proofing--mixed-column row row--has-horizontal-padding row--has-bottom-padding" ng-class="{ 'fs-social-proofing--mixed-column--dynamic-refund-badge': appearanceConfig.isRefundBadgeDynamic }"> <div class="col s4 fs-social-proofing__content fs-social-proofing__content--two-column fs-social-proofing__refund-badge" ng-if="hasRefundPolicy() && appearanceConfig.isShowingRefundBadge && appearanceConfig.hasRefundBadgeBelowForm"> <fs-money-back-guarantee refund-policy="context.plugin.refund_policy" money-back-period="context.plugin.money_back_period"></fs-money-back-guarantee> </div> <div class="col s4 fs-social-proofing__content fs-social-proofing__content--single-column" ng-if="appearanceConfig.isShowingReviews"> <fs-reviews reviews="appearanceConfig.reviews"></fs-reviews> </div> </div> <!--/ Money Back and Review --> </div> <!--/ .fs-checkout-form__form --> </div> <!-- Upsell --> <div id="upsell" ng-show="isUpsellState()" class="step animate"> <!-- <img class="upsell-icon" src="https://checkout.freemius.com/assets/img/partners/wpmatic-avatar-2.png" />--> <fs-alert type="success"> <fs-alert-icon> <fs-icon icon="fire" aria-label="Attention"></fs-icon> </fs-alert-icon> <h3 translate>You've Unlocked an Exclusive Offer</h3> <p translate> Have you ever calculated how much it would cost you if your website got hacked? Our friends at WPMatic are offering a <b>50% discount</b>, exclusive for {{ context.plugin.title }} customers, on all of their security and maintenance plans. </p> <p translate>Check out this special offer and save hundreds of dollars a year.</p> </fs-alert> <fs-cta-group is-showing-safety-badge="false"> <fs-cta-left> <a target="_blank" ng-href="https://wpmatic.io/amember/signup/?nfamm=true&ref=freemius&coupon=freemius50&name_f={{ context.firstName }}&name_l={{ context.lastName }}&email={{ context.email }}&_email={{ context.email }}"> <fs-cta on-click="getUpsell()"> <span translate>Sounds interesting!</span> </fs-cta> </a> </fs-cta-left> <fs-cta-right> <fs-cta appearance="secondary" on-click="skipUpsell()"> <span translate>No thanks</span> </fs-cta> </fs-cta-right> </fs-cta-group> </div> <!--/ Upsell --> <fs-post-upgrade-message-saas ng-if=" ! context.isPaymentMethodUpdate && isSaas() && context.customCheckoutConfirmationSaas" ng-show="isCompletedState()" settings="context.customCheckoutConfirmationSaas" on-resend-email="resendPostUpgradeEmail()" default-on-close="returnPostUpgradeData()" context="context" ></fs-post-upgrade-message-saas> <!-- Post Upgrade Message @todo - Extract to a component if/when modifying it --> <div id="post_upgrade_message" ng-if="context.isPaymentMethodUpdate || ! isSaas() || ! context.customCheckoutConfirmationSaas" ng-show="( ! isDashboardPage() || context.showDashboardPageCompletedState) && isCompletedState()" class="step animate fs-post-upgrade-message"> <h3 class="fs-post-upgrade-message__title"> <img class="fs-post-upgrade-message__icon" src="{{ appearanceConfig.productIcon }}" alt="{{ plugin.type }} icon"/> <span ng-if="isLifetime()" class="fs-post-upgrade-message__title-text" translate>Purchase was successful</span> <span ng-if=" ! isLifetime()" class="fs-post-upgrade-message__title-text" translate>Subscription was successful</span> </h3> <p> <span ng-if="isTrialMode()" translate>Thanks for giving <strong>{{ context.plugin.title }}</strong> {{ context.plan.title }} plan a spin!</span> <span ng-if="!isTrialMode() && entity.hasLicenseContext()"> <span ng-if="context.isPaymentMethodUpdate" translate>The payment method of your <strong>{{ context.plugin.title }}</strong> license was updated!</span> <span ng-if=" ! context.isPaymentMethodUpdate" translate>Thanks for renewing your <strong>{{ context.plugin.title }}</strong> license!</span> </span> <span ng-if="!isTrialMode() && !entity.hasLicenseContext()"> <span ng-if="context.hasFreePlan"> <span ng-if="context.isFreePlan" translate-context="Free subscription" translate> Thanks for subscribing for <strong>{{ context.plugin.title }}</strong>! </span> <span ng-if=" ! context.isFreePlan" translate> Thanks for upgrading <strong>{{ context.plugin.title }}</strong>! </span> </span> <span ng-if=" ! context.hasFreePlan"> <span ng-if="isLifetime()" translate> Thanks for purchasing <strong>{{ context.plugin.title }}</strong>! </span> <span ng-if=" ! isLifetime()" translate-context="Paid subscription" translate> Thanks for subscribing to <strong>{{ context.plugin.title }}</strong>! </span> </span> </span> <span ng-bind-html="postUpgradeSentEmailMessage() | fsAllowUnsanitizedHtml"></span> </p> <fs-alert has-top-gutter="true" type="error" ng-if="context.failedZipcodePurchasesCount > 0"> <p translate-n="context.failedZipcodePurchasesCount" translate-plural="Notice: Some of your checkout attempts failed due to an incorrect ZIP Code. These charges may temporarily appear as pending on your credit card statement before being removed." translate> Notice: One of your checkout attempts failed due to an incorrect ZIP Code. This charge may temporarily appear as pending on your credit card statement before being removed. </p> </fs-alert> <fs-cta-group ng-if=" ! isFreePlanOrFreeTrialMode() || context.hasFreeReleases" is-showing-safety-badge="false"> <fs-cta-left> <fs-cta on-click="returnPostUpgradeData()"> <span translate>Got it</span> </fs-cta> </fs-cta-left> <fs-cta-right> <fs-cta on-click="resendPostUpgradeEmail()" is-icon-right="true" appearance="secondary" is-disabled="context.isResendingEmail"> <span ng-if="context.isResendingEmail" translate>Sending...</span> <span ng-if=" ! context.isResendingEmail" translate>Didn't Get It - Resend email</span> <fs-icon icon="{{ context.isResendingEmail ? 'cog' : 'none' }}" is-spinning="true"></fs-icon> </fs-cta> </fs-cta-right> <fs-cta-footer> <p id="resend_email" translate> Didn't get the email? Try checking your spam folder or search for emails from <strong>{{ context.fromEmailAddress }}</strong>. Can't find it? <a href="#" ng-click="resendPostUpgradeEmail()">Click here</a> to resend it. </p> </fs-cta-footer> </fs-cta-group> </div> <!--/ Post Upgrade Message --> </section></div> <!-- Fulfillment Badge --> <fs-fulfillment-badge css-top="ui.fulfillmentTop" is-position-controlled="isDashboardPage() && ! isIndependentPage()" is-credit-card-details-update="isCreditCardDetailsUpdate()" is-trial-mode-free="isTrialModeFree()" module-label="moduleLabel()" fulfillment-link="getFreemiusCheckoutFulfillmentLink()" has-custom-slot="isShowingSlotInFulfillment()" > <!-- Language Selection --> <fs-language-selector i18n="i18n" ng-if="i18n.shouldShowUI" current-country-code="context.geolocationCountryCode"></fs-language-selector> <!--/ Language Selection --> <!-- Currency Selection --> <fs-select ng-if=" ! entity.hasLicenseContext() && hasMultipleVisibleCurrencies()" id="currencies" is-small="true" is-dark="true" aria-label="Currency Selection" ng-model="context.currency" ng-disabled="! canChangeCurrency()"> <fs-select-option ng-repeat="(currency,currencySymbol) in context.currencies" badge="currencySymbol" value="currency"> {{ currency | uppercase }} </fs-select-option> </fs-select> <!--/ Currency Selection --> <!-- Sandbox Mode Notice --> <div ng-if="context.isSandbox" id="sandbox_notice" class="fs-fake-select fs-control-small fs-control-darker"> <a href="https://freemius.com/help/documentation/selling-with-freemius/freemius-checkout-buy-button/" target="_blank"><span>API</span></a> <span class="fs-fake-select__text-divider">–</span> <a href="https://freemius.com/help/documentation/wordpress-sdk/testing/#sandbox_payments" target="_blank"><span>Testing</span></a> </div> <!--/ Sandbox Mode Notice --> </fs-fulfillment-badge> <!--/ Fulfillment Badge --> </div> <!-- #content_container --> </div> </div> </div> </section> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10