2014-02-12 05:23:40 -05:00
extends ../layout
2014-12-18 12:48:23 -05:00
2019-10-16 06:10:54 -04:00
block head-scripts
2021-03-25 10:02:21 -04:00
script(type="text/javascript", nonce=scriptNonce, src="https://js.recurly.com/v4/recurly.js")
script(type="text/javascript", nonce=scriptNonce).
2021-03-12 12:49:55 -05:00
window.countryCode = !{StringHelper.stringifyJsonForScript(countryCode || '')}
2014-12-23 07:08:01 -05:00
window.recurlyApiKey = "!{settings.apis.recurly.publicKey}"
2021-03-12 12:49:55 -05:00
window.recomendedCurrency = !{StringHelper.stringifyJsonForScript(String(currency).slice(0,3))}
2014-02-12 05:23:40 -05:00
block content
2021-03-04 11:11:09 -05:00
main.content.content-alt
2014-10-14 10:46:44 -04:00
.container(ng-controller="NewSubscriptionController" ng-cloak)
.row.card-group
2015-01-07 09:51:54 -05:00
.col-md-5.col-md-push-4
2019-08-22 07:57:50 -04:00
.card.card-highlighted.card-border(ng-hide="threeDSecureFlow")
2019-07-31 04:23:13 -04:00
.alert.alert-danger(ng-show="recurlyLoadError")
strong #{translate('payment_provider_unreachable_error')}
.page-header(ng-hide="recurlyLoadError")
2014-12-28 13:16:55 -05:00
.row
2015-01-29 05:44:42 -05:00
.col-xs-9
2018-04-16 05:35:12 -04:00
h2 {{planName}}
2015-01-29 05:44:42 -05:00
.col-xs-3
2015-06-03 06:14:26 -04:00
div.dropdown.changePlanButton.pull-right(ng-cloak, dropdown)
2014-12-28 13:16:55 -05:00
a.btn.btn-default.dropdown-toggle(
href="#",
2015-06-03 06:14:26 -04:00
data-toggle="dropdown",
dropdown-toggle
2014-12-28 13:16:55 -05:00
)
2019-07-31 04:23:13 -04:00
| {{currencyCode}} ({{allCurrencies[currencyCode]['symbol']}})
2014-12-28 13:16:55 -05:00
span.caret
ul.dropdown-menu(role="menu")
2018-11-13 08:35:50 -05:00
li(ng-repeat="(currency, value) in availableCurrencies")
2014-12-28 13:16:55 -05:00
a(
ng-click="changeCurrency(currency)",
2019-07-31 04:23:13 -04:00
) {{currency}} ({{value['symbol']}})
2019-03-04 07:00:17 -05:00
.row(ng-if="planCode == 'student-annual' || planCode == 'student-monthly' || planCode == 'student_free_trial_7_days'")
2018-04-12 17:11:52 -04:00
.col-xs-12
p.student-disclaimer #{translate('student_disclaimer')}
2018-06-13 12:22:34 -04:00
2015-01-29 05:44:42 -05:00
hr.thin
.row
.col-md-12.text-center
2019-07-31 04:23:13 -04:00
div(ng-if="trialLength")
2015-11-17 07:23:27 -05:00
span !{translate("first_few_days_free", {trialLen:'{{trialLength}}'})}
2020-05-28 06:07:37 -04:00
span(ng-if="coupon.discountMonths && coupon.discountRate") - {{coupon.discountMonths}} #{translate("month")}s {{coupon.discountRate}}% Off
2020-10-13 08:32:57 -04:00
2015-01-29 05:44:42 -05:00
div(ng-if="price")
2020-10-30 08:33:35 -04:00
- var priceVars = { price: "{{ availableCurrencies[currencyCode]['symbol'] }}{{ price.total }}"};
2020-05-28 06:07:37 -04:00
span(ng-if="!coupon.singleUse && monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_per_month", priceVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="!coupon.singleUse && !monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_per_year", priceVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="coupon.singleUse && monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_for_first_month", priceVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="coupon.singleUse && !monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_for_first_year", priceVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
div(ng-if="coupon && coupon.normalPrice")
- var noDiscountPriceAngularExp = "{{ availableCurrencies[currencyCode]['symbol']}}{{coupon.normalPrice | number:2 }}";
span.small(ng-if="!coupon.singleUse && monthlyBilling")
| !{translate("normally_x_price_per_month", { price: noDiscountPriceAngularExp } )}
span.small(ng-if="!coupon.singleUse && !monthlyBilling")
| !{translate("normally_x_price_per_year", { price: noDiscountPriceAngularExp } )}
span.small(ng-if="coupon.singleUse && monthlyBilling")
| !{translate("then_x_price_per_month", { price: noDiscountPriceAngularExp } )}
span.small(ng-if="coupon.singleUse && !monthlyBilling")
| !{translate("then_x_price_per_year", { price: noDiscountPriceAngularExp } )}
2019-07-31 04:23:13 -04:00
.row(ng-hide="recurlyLoadError")
2016-10-11 09:07:31 -04:00
div()
.col-md-12()
2018-04-13 11:29:01 -04:00
form(
name="simpleCCForm"
novalidate
)
2016-08-18 12:41:55 -04:00
2018-04-13 11:29:01 -04:00
div.payment-method-toggle
a.payment-method-toggle-switch(
href
ng-click="setPaymentMethod('credit_card');"
ng-class="paymentMethod.value === 'credit_card' ? 'payment-method-toggle-switch-selected' : ''"
)
2018-11-19 04:41:34 -05:00
i.fa.fa-cc-mastercard.fa-2x(aria-hidden="true")
2018-04-13 11:29:01 -04:00
span
2018-11-19 04:41:34 -05:00
i.fa.fa-cc-visa.fa-2x(aria-hidden="true")
2018-04-13 11:29:01 -04:00
span
2018-11-19 04:41:34 -05:00
i.fa.fa-cc-amex.fa-2x(aria-hidden="true")
2018-11-15 12:21:45 -05:00
span.sr-only Pay with Mastercard, Visa, or Amex
2018-04-13 11:29:01 -04:00
a.payment-method-toggle-switch(
href
ng-click="setPaymentMethod('paypal');"
ng-class="paymentMethod.value === 'paypal' ? 'payment-method-toggle-switch-selected' : ''"
)
2018-11-19 04:41:34 -05:00
i.fa.fa-cc-paypal.fa-2x(aria-hidden="true")
2018-11-15 12:21:45 -05:00
span.sr-only Pay with PayPal
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
.alert.alert-warning.small(ng-show="genericError")
strong {{genericError}}
2018-04-13 11:57:33 -04:00
div(ng-show="paymentMethod.value === 'credit_card'")
2018-04-13 11:29:01 -04:00
.row
.col-xs-6
2018-04-16 05:35:12 -04:00
.form-group(ng-class="validation.errorFields.first_name || inputHasError(simpleCCForm.firstName) ? 'has-external-error' : ''")
2018-04-13 11:29:01 -04:00
label(for="first-name") #{translate('first_name')}
input#first-name.form-control(
type="text"
maxlength='255'
data-recurly="first_name"
name="firstName"
ng-model="data.first_name"
required
)
span.input-feedback-message {{ simpleCCForm.firstName.$error.required ? 'This field is required' : '' }}
.col-xs-6
2021-02-01 06:20:54 -05:00
.form-group(ng-class="validation.errorFields.last_name || inputHasError(simpleCCForm.lastName)? 'has-external-error' : ''")
2018-04-13 11:29:01 -04:00
label(for="last-name") #{translate('last_name')}
input#last-name.form-control(
type="text"
maxlength='255'
data-recurly="last_name"
name="lastName"
ng-model="data.last_name"
required
)
2018-04-16 05:35:12 -04:00
.form-group(ng-class="validation.errorFields.number ? 'has-external-error' : ''")
2018-04-13 11:29:01 -04:00
label(for="card-no") #{translate("credit_card_number")}
2018-04-13 11:51:55 -04:00
div#card-no(
2018-04-13 11:29:01 -04:00
type="text"
name="ccNumber"
data-recurly='number'
)
.row
.col-xs-3
2018-04-16 05:35:12 -04:00
.form-group.has-feedback(ng-class="validation.errorFields.month ? 'has-external-error' : ''")
2018-04-17 06:26:02 -04:00
label(for="month").capitalised #{translate("month")}
2018-04-13 11:51:55 -04:00
div(
2018-04-16 05:10:25 -04:00
type="number"
2018-04-13 11:29:01 -04:00
name="month"
data-recurly="month"
)
.col-xs-3
2018-04-16 05:35:12 -04:00
.form-group.has-feedback(ng-class="validation.errorFields.year ? 'has-external-error' : ''")
2018-04-17 06:26:02 -04:00
label(for="year").capitalised #{translate("year")}
2018-04-13 11:51:55 -04:00
div(
2018-04-16 05:10:25 -04:00
type="number"
2018-04-13 11:29:01 -04:00
name="year"
data-recurly="year"
)
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
.col-xs-6
2018-04-16 05:35:12 -04:00
.form-group.has-feedback(ng-class="validation.errorFields.cvv ? 'has-external-error' : ''")
2018-04-13 11:29:01 -04:00
label #{translate("security_code")}
2018-04-13 11:51:55 -04:00
div(
2018-04-16 05:10:25 -04:00
type="number"
2018-04-13 11:29:01 -04:00
ng-model="data.cvv"
data-recurly="cvv"
name="cvv"
cc-format-sec-code
)
.form-control-feedback
a.form-helper(
href
tabindex="-1"
tooltip-template="'cvv-tooltip-tpl.html'"
tooltip-trigger="mouseenter"
tooltip-append-to-body="true"
) ?
div
2021-02-01 06:20:54 -05:00
.row
.col-xs-12
.form-group(ng-class="validation.errorFields.address1 || inputHasError(simpleCCForm.address1) ? 'has-external-error' : ''")
label(for="address-line-1") #{translate('address_line_1')}
input#address-line-1.form-control(
type="text"
maxlength="255"
data-recurly="address1"
name="address1"
ng-model="data.address1"
required
)
span.input-feedback-message {{ simpleCCForm.address1.$error.required ? 'This field is required' : '' }}
2021-03-12 12:49:55 -05:00
2021-02-01 06:20:54 -05:00
.row
.col-xs-12
.form-group.has-feedback(ng-class="validation.errorFields.address2 ? 'has-external-error' : ''")
label(for="address-line-2") #{translate('address_line_2')}
input#address-line-2.form-control(
type="text"
maxlength="255"
data-recurly="address2"
name="address2"
ng-model="data.address2"
)
2021-03-12 12:49:55 -05:00
2021-02-01 06:20:54 -05:00
.row
.col-xs-4
.form-group(ng-class="validation.errorFields.postal_code || inputHasError(simpleCCForm.postalCode) ? 'has-external-error' : ''")
label(for="postal-code") #{translate('postal_code')}
input#postal-code.form-control(
type="text"
maxlength="255"
data-recurly="postal_code"
name="postalCode"
ng-model="data.postal_code"
required
)
span.input-feedback-message {{ simpleCCForm.postalCode.$error.required ? 'This field is required' : '' }}
2021-03-12 12:49:55 -05:00
2021-02-01 06:20:54 -05:00
.col-xs-8
.form-group(ng-class="validation.errorFields.country || inputHasError(simpleCCForm.country) ? 'has-external-error' : ''")
label(for="country") #{translate('country')}
select#country.form-control(
data-recurly="country"
ng-model="data.country"
name="country"
ng-change="updateCountry()"
ng-selected="{{country.code == data.country}}"
ng-model-options="{ debounce: 200 }"
required
)
option(value='', disabled) #{translate("country")}
option(value='-', disabled) --------------
option(ng-repeat="country in countries" ng-bind-html="country.name" value="{{country.code}}")
span.input-feedback-message {{ simpleCCForm.country.$error.required ? 'This field is required' : '' }}
2018-04-13 11:29:01 -04:00
2020-04-29 08:43:45 -04:00
.form-group
.checkbox
label
input(
type="checkbox"
ng-model="ui.addCompanyDetails"
)
|
| #{translate("add_company_details")}
.form-group(ng-show="ui.addCompanyDetails")
label(for="company-name") #{translate("company_name")}
input#company-name.form-control(
type="text"
name="companyName"
ng-model="data.company"
)
2020-05-28 06:07:37 -04:00
.form-group(ng-show="ui.addCompanyDetails && taxes.length")
2020-04-29 08:43:45 -04:00
label(for="vat-number") #{translate("vat_number")}
input#vat-number.form-control(
type="text"
name="vatNumber"
ng-model="data.vat_number"
ng-blur="applyVatNumber()"
)
2018-04-13 11:29:01 -04:00
if (showCouponField)
.form-group
label(for="coupon-code") #{translate('coupon_code')}
input#coupon-code.form-control(
type="text"
ng-blur="applyCoupon()"
ng-model="data.coupon"
)
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
p(ng-if="paymentMethod.value === 'paypal'") #{translate("paypal_upgrade")}
2019-07-31 04:23:13 -04:00
2020-04-29 08:43:45 -04:00
div.price-breakdown(
2020-05-28 06:07:37 -04:00
ng-show="taxes.length"
2020-04-29 08:43:45 -04:00
)
2020-10-30 08:33:35 -04:00
- var priceBreakdownVars = { total: "{{ availableCurrencies[currencyCode]['symbol'] }}{{ price.total }}", subtotal: "{{availableCurrencies[currencyCode]['symbol']}}{{ price.subtotal }}", tax: "{{availableCurrencies[currencyCode]['symbol']}}{{ price.tax }}" };
2018-04-13 11:29:01 -04:00
hr.thin
2020-10-13 08:32:57 -04:00
span
2020-04-29 08:43:45 -04:00
| Total:
|
2020-05-28 06:07:37 -04:00
span(ng-if="!coupon.singleUse && monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_per_month_tax", priceBreakdownVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="!coupon.singleUse && !monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_per_year_tax", priceBreakdownVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="coupon.singleUse && monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_for_first_month_tax", priceBreakdownVars, ['strong'] )}
2020-05-28 06:07:37 -04:00
span(ng-if="coupon.singleUse && !monthlyBilling")
2020-10-30 08:33:35 -04:00
| !{translate("x_price_for_first_year_tax", priceBreakdownVars, ['strong'] )}
2018-04-13 11:29:01 -04:00
hr.thin
div.payment-submit
button.btn.btn-success.btn-block(
ng-click="submit()"
2019-07-31 04:23:13 -04:00
ng-disabled="processing || !isFormValid(simpleCCForm);"
)
span(ng-show="processing")
2018-11-19 04:41:34 -05:00
i.fa.fa-spinner.fa-spin(aria-hidden="true")
2018-11-15 12:21:45 -05:00
span.sr-only #{translate('processing')}
2018-04-13 11:29:01 -04:00
|
2018-04-13 12:04:35 -04:00
span(ng-if="paymentMethod.value === 'credit_card'")
| {{ monthlyBilling ? '#{translate("upgrade_cc_btn")}' : '#{translate("upgrade_now")}'}}
span(ng-if="paymentMethod.value !== 'credit_card'") #{translate("upgrade_paypal_btn")}
2018-04-13 11:29:01 -04:00
2020-04-16 08:01:49 -04:00
p.tos-agreement-notice
| By subscribing, you agree to our
|
a(
href="/legal#Terms"
target="_blank"
rel="noopener noreferrer"
) terms of service
| .
2019-08-22 07:57:50 -04:00
div.three-d-secure-container.card.card-highlighted.card-border(ng-show="threeDSecureFlow")
.alert.alert-info.small(aria-live="assertive")
strong #{translate('card_must_be_authenticated_by_3dsecure')}
div.three-d-secure-recurly-container
2018-04-13 11:29:01 -04:00
.col-md-3.col-md-pull-4
2021-03-12 12:49:55 -05:00
if showStudentPlan
2018-04-13 11:29:01 -04:00
a.btn-primary.btn.plansPageStudentLink(
href,
ng-click="switchToStudent()"
2020-10-13 08:32:57 -04:00
) #{translate("special_price_student")}
2018-04-13 11:29:01 -04:00
.card.card-first
.paymentPageFeatures
h3 #{translate("unlimited_projects")}
p #{translate("create_unlimited_projects")}
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
h3
if plan.features.collaborators == -1
- var collaboratorCount = 'Unlimited'
else
- var collaboratorCount = plan.features.collaborators
2020-10-13 08:32:57 -04:00
if plan.features.collaborators == 1
| #{translate("collabs_per_proj_single", {collabcount:collaboratorCount})}
else
| #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
2018-04-13 11:29:01 -04:00
p #{translate("work_on_single_version")}. #{translate("view_collab_edits")} in real time.
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
h3 #{translate("full_doc_history")}
2020-03-24 09:05:32 -04:00
p.track-changes-example
| #{translate("see_what_has_been")} #[span.added #{translate("added")}]
| #{translate("and")} #[span.removed #{translate("removed")}].
p
2018-04-13 11:29:01 -04:00
| #{translate("restore_to_any_older_version")}.
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
h3 #{translate("sync_to_dropbox")}
p
2019-07-31 04:23:13 -04:00
| #{translate("acces_work_from_anywhere")}.
2018-04-13 11:29:01 -04:00
| #{translate("work_offline_and_sync_with_dropbox")}.
2019-07-31 04:23:13 -04:00
2018-04-13 11:29:01 -04:00
hr
2019-07-31 04:23:13 -04:00
2019-03-18 06:24:54 -04:00
p.small.text-center(ng-non-bindable) We're confident that you'll love #{settings.appName}, but if not you can cancel anytime. We'll give you your money back, no questions asked, if you let us know within 30 days.
2015-11-11 12:59:35 -05:00
2014-02-12 05:23:40 -05:00
2021-03-25 10:02:21 -04:00
script(type="text/javascript", nonce=scriptNonce).
2014-03-08 13:31:07 -05:00
ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
2016-08-17 12:34:17 -04:00
script(
type="text/ng-template"
id="cvv-tooltip-tpl.html"
)
p For #[strong Visa, MasterCard and Discover], the #[strong 3 digits] on the #[strong back] of your card.
p For #[strong American Express], the #[strong 4 digits] on the #[strong front] of your card.