new.pug 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. extends ../layout
  2. block scripts
  3. script(type='text/javascript').
  4. window.countryCode = '#{countryCode}'
  5. window.plan_code = '#{plan_code}'
  6. window.recurlyApiKey = "!{settings.apis.recurly.publicKey}"
  7. window.couponCode = !{JSON.stringify(couponCode)}
  8. window.recomendedCurrency = !{JSON.stringify(currency.slice(0,3))}
  9. block content
  10. .content.content-alt
  11. .container(ng-controller="NewSubscriptionController" ng-cloak)
  12. .row.card-group
  13. .col-md-5.col-md-push-4
  14. .card.card-highlighted.card-border
  15. .page-header
  16. .row
  17. .col-xs-9
  18. h2 {{planName}}
  19. .col-xs-3
  20. div.dropdown.changePlanButton.pull-right(ng-cloak, dropdown)
  21. a.btn.btn-default.dropdown-toggle(
  22. href="#",
  23. data-toggle="dropdown",
  24. dropdown-toggle
  25. )
  26. | {{currencyCode}} ({{plans[currencyCode]['symbol']}})
  27. span.caret
  28. ul.dropdown-menu(role="menu")
  29. li(ng-repeat="(currency, value) in plans")
  30. a(
  31. ng-click="changeCurrency(currency)",
  32. ) {{currency}} ({{value['symbol']}})
  33. .row(ng-if="planCode == 'student-annual' || planCode == 'student-monthly'")
  34. .col-xs-12
  35. p.student-disclaimer #{translate('student_disclaimer')}
  36. hr.thin
  37. .row
  38. .col-md-12.text-center
  39. div(ng-if="trialLength")
  40. span !{translate("first_few_days_free", {trialLen:'{{trialLength}}'})}
  41. span(ng-if="discountMonths && discountRate")   - {{discountMonths}} #{translate("month")}s {{discountRate}}% Off
  42. div(ng-if="price")
  43. strong {{plans[currencyCode]['symbol']}}{{price.next.total}}
  44. span(ng-if="monthlyBilling") #{translate("every")} #{translate("month")}
  45. span(ng-if="!monthlyBilling") #{translate("every")} #{translate("year")}
  46. div(ng-if="normalPrice")
  47. span.small Normally {{plans[currencyCode]['symbol']}}{{normalPrice}}
  48. .row
  49. div()
  50. .col-md-12()
  51. form(
  52. name="simpleCCForm"
  53. novalidate
  54. )
  55. div.payment-method-toggle
  56. a.payment-method-toggle-switch(
  57. href
  58. ng-click="setPaymentMethod('credit_card');"
  59. ng-class="paymentMethod.value === 'credit_card' ? 'payment-method-toggle-switch-selected' : ''"
  60. )
  61. i.fa.fa-cc-mastercard.fa-2x
  62. span  
  63. i.fa.fa-cc-visa.fa-2x
  64. span  
  65. i.fa.fa-cc-amex.fa-2x
  66. a.payment-method-toggle-switch(
  67. href
  68. ng-click="setPaymentMethod('paypal');"
  69. ng-class="paymentMethod.value === 'paypal' ? 'payment-method-toggle-switch-selected' : ''"
  70. )
  71. i.fa.fa-cc-paypal.fa-2x
  72. .alert.alert-warning.small(ng-show="genericError")
  73. strong {{genericError}}
  74. div(ng-show="paymentMethod.value === 'credit_card'")
  75. .row
  76. .col-xs-6
  77. .form-group(ng-class="validation.errorFields.first_name || inputHasError(simpleCCForm.firstName) ? 'has-external-error' : ''")
  78. label(for="first-name") #{translate('first_name')}
  79. input#first-name.form-control(
  80. type="text"
  81. maxlength='255'
  82. data-recurly="first_name"
  83. name="firstName"
  84. ng-model="data.first_name"
  85. required
  86. )
  87. span.input-feedback-message {{ simpleCCForm.firstName.$error.required ? 'This field is required' : '' }}
  88. .col-xs-6
  89. .form-group(for="last-name",ng-class="validation.errorFields.last_name || inputHasError(simpleCCForm.lastName)? 'has-external-error' : ''")
  90. label(for="last-name") #{translate('last_name')}
  91. input#last-name.form-control(
  92. type="text"
  93. maxlength='255'
  94. data-recurly="last_name"
  95. name="lastName"
  96. ng-model="data.last_name"
  97. required
  98. )
  99. .form-group(ng-class="validation.errorFields.number ? 'has-external-error' : ''")
  100. label(for="card-no") #{translate("credit_card_number")}
  101. div#card-no(
  102. type="text"
  103. name="ccNumber"
  104. data-recurly='number'
  105. )
  106. .row
  107. .col-xs-3
  108. .form-group.has-feedback(ng-class="validation.errorFields.month ? 'has-external-error' : ''")
  109. label(for="month").capitalised #{translate("month")}
  110. div(
  111. type="number"
  112. name="month"
  113. data-recurly="month"
  114. )
  115. .col-xs-3
  116. .form-group.has-feedback(ng-class="validation.errorFields.year ? 'has-external-error' : ''")
  117. label(for="year").capitalised #{translate("year")}
  118. div(
  119. type="number"
  120. name="year"
  121. data-recurly="year"
  122. )
  123. .col-xs-6
  124. .form-group.has-feedback(ng-class="validation.errorFields.cvv ? 'has-external-error' : ''")
  125. label #{translate("security_code")}
  126. div(
  127. type="number"
  128. ng-model="data.cvv"
  129. data-recurly="cvv"
  130. name="cvv"
  131. cc-format-sec-code
  132. )
  133. .form-control-feedback
  134. a.form-helper(
  135. href
  136. tabindex="-1"
  137. tooltip-template="'cvv-tooltip-tpl.html'"
  138. tooltip-trigger="mouseenter"
  139. tooltip-append-to-body="true"
  140. ) ?
  141. div
  142. .form-group(ng-class="validation.errorFields.country || inputHasError(simpleCCForm.country) ? 'has-external-error' : ''")
  143. label(for="country") #{translate('country')}
  144. select#country.form-control(
  145. data-recurly="country"
  146. ng-model="data.country"
  147. name="country"
  148. ng-change="updateCountry()"
  149. required,
  150. ng-options="country.code as country.name for country in countries",
  151. ng-selected="{{country.code == data.country}}"
  152. )
  153. option(value='', disabled, selected) #{translate("country")}
  154. option(value='-') --------------
  155. span.input-feedback-message {{ simpleCCForm.country.$error.required ? 'This field is required' : '' }}
  156. if (showVatField)
  157. .form-group
  158. label(for="vat-no") #{translate('vat_number')}
  159. input#vat-no.form-control(
  160. type="text"
  161. ng-blur="applyVatNumber()"
  162. ng-model="data.vat_number"
  163. )
  164. if (showCouponField)
  165. .form-group
  166. label(for="coupon-code") #{translate('coupon_code')}
  167. input#coupon-code.form-control(
  168. type="text"
  169. ng-blur="applyCoupon()"
  170. ng-model="data.coupon"
  171. )
  172. p(ng-if="paymentMethod.value === 'paypal'") #{translate("paypal_upgrade")}
  173. div.price-breakdown(ng-if="price.next.tax !== '0.00'")
  174. hr.thin
  175. span Total:
  176. strong {{plans[currencyCode]['symbol']}}{{price.next.total}}
  177. span ({{plans[currencyCode]['symbol']}}{{price.next.subtotal}} + {{plans[currencyCode]['symbol']}}{{price.next.tax}} tax)
  178. span(ng-if="monthlyBilling") #{translate("every")} #{translate("month")}
  179. span(ng-if="!monthlyBilling") #{translate("every")} #{translate("year")}
  180. hr.thin
  181. div.payment-submit
  182. button.btn.btn-success.btn-block(
  183. ng-click="submit()"
  184. ng-disabled="processing || !isFormValid(simpleCCForm);"
  185. )
  186. span(ng-show="processing")
  187. i.fa.fa-spinner.fa-spin
  188. |  
  189. span(ng-if="paymentMethod.value === 'credit_card'")
  190. | {{ monthlyBilling ? '#{translate("upgrade_cc_btn")}' : '#{translate("upgrade_now")}'}}
  191. span(ng-if="paymentMethod.value !== 'credit_card'") #{translate("upgrade_paypal_btn")}
  192. .col-md-3.col-md-pull-4
  193. if showStudentPlan == 'true'
  194. a.btn-primary.btn.plansPageStudentLink(
  195. href,
  196. ng-click="switchToStudent()"
  197. ) #{translate("half_price_student")}
  198. .card.card-first
  199. .paymentPageFeatures
  200. h3 #{translate("unlimited_projects")}
  201. p #{translate("create_unlimited_projects")}
  202. h3
  203. if plan.features.collaborators == -1
  204. - var collaboratorCount = 'Unlimited'
  205. else
  206. - var collaboratorCount = plan.features.collaborators
  207. | #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
  208. p #{translate("work_on_single_version")}. #{translate("view_collab_edits")} in real time.
  209. h3 #{translate("full_doc_history")}
  210. p #{translate("see_what_has_been")}
  211. span.added #{translate("added")}
  212. | #{translate("and")}
  213. span.removed #{translate("removed")}.
  214. | #{translate("restore_to_any_older_version")}.
  215. h3 #{translate("sync_to_dropbox")}
  216. p
  217. | #{translate("acces_work_from_anywhere")}.
  218. | #{translate("work_offline_and_sync_with_dropbox")}.
  219. hr
  220. p.small.text-center 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.
  221. script(type="text/javascript").
  222. ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
  223. script(
  224. type="text/ng-template"
  225. id="cvv-tooltip-tpl.html"
  226. )
  227. p For #[strong Visa, MasterCard and Discover], the #[strong 3 digits] on the #[strong back] of your card.
  228. p For #[strong American Express], the #[strong 4 digits] on the #[strong front] of your card.