new.pug 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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. .row(ng-if="plansVariant == 'more-details' && planCode == 'student-annual' || plansVariant == 'more-details' && 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 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.
  221. hr
  222. span                  
  223. a(href="https://www.positivessl.com" style="font-family: arial; font-size: 10px; color: #212121; text-decoration: none;")
  224. img(src="https://www.positivessl.com/images-new/PositiveSSL_tl_trans.png" alt="SSL Certificate" title="SSL Certificate" border="0")
  225. div(style="font-family: arial;font-weight:bold;font-size:15px;color:#86BEE0;")
  226. a(href="https://www.positivessl.com" style="color:#86BEE0; text-decoration: none;")
  227. script(type="text/javascript").
  228. ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
  229. script(
  230. type="text/ng-template"
  231. id="cvv-tooltip-tpl.html"
  232. )
  233. p For #[strong Visa, MasterCard and Discover], the #[strong 3 digits] on the #[strong back] of your card.
  234. p For #[strong American Express], the #[strong 4 digits] on the #[strong front] of your card.