new.pug 10 KB

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