new.pug 11 KB

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