new.pug 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  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") #{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") #{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. )
  148. +countries_options()
  149. span.input-feedback-message {{ simpleCCForm.country.$error.required ? 'This field is required' : '' }}
  150. if (showVatField)
  151. .form-group
  152. label(for="vat-no") #{translate('vat_number')}
  153. input#vat-no.form-control(
  154. type="text"
  155. ng-blur="applyVatNumber()"
  156. ng-model="data.vat_number"
  157. )
  158. if (showCouponField)
  159. .form-group
  160. label(for="coupon-code") #{translate('coupon_code')}
  161. input#coupon-code.form-control(
  162. type="text"
  163. ng-blur="applyCoupon()"
  164. ng-model="data.coupon"
  165. )
  166. p(ng-if="paymentMethod.value === 'paypal'") #{translate("paypal_upgrade")}
  167. div.price-breakdown(ng-if="price.next.tax !== '0.00'")
  168. hr.thin
  169. span Total:
  170. strong {{plans[currencyCode]['symbol']}}{{price.next.total}}
  171. span ({{plans[currencyCode]['symbol']}}{{price.next.subtotal}} + {{plans[currencyCode]['symbol']}}{{price.next.tax}} tax)
  172. span(ng-if="monthlyBilling") #{translate("every")} #{translate("month")}
  173. span(ng-if="!monthlyBilling") #{translate("every")} #{translate("year")}
  174. hr.thin
  175. div.payment-submit
  176. button.btn.btn-success.btn-block(
  177. ng-click="submit()"
  178. ng-disabled="processing || !isFormValid(simpleCCForm);"
  179. )
  180. span(ng-show="processing")
  181. i.fa.fa-spinner.fa-spin
  182. |  
  183. | {{ paymentMethod.value === 'credit_card' ? '#{translate("upgrade_cc_btn")}' : '#{translate("upgrade_paypal_btn")}' }}
  184. .col-md-3.col-md-pull-4
  185. if showStudentPlan == 'true'
  186. a.btn-primary.btn.plansPageStudentLink(
  187. href,
  188. ng-click="switchToStudent()"
  189. ) #{translate("half_price_student")}
  190. .card.card-first
  191. .paymentPageFeatures
  192. h3 #{translate("unlimited_projects")}
  193. p #{translate("create_unlimited_projects")}
  194. h3
  195. if plan.features.collaborators == -1
  196. - var collaboratorCount = 'Unlimited'
  197. else
  198. - var collaboratorCount = plan.features.collaborators
  199. | #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
  200. p #{translate("work_on_single_version")}. #{translate("view_collab_edits")} in real time.
  201. h3 #{translate("full_doc_history")}
  202. p #{translate("see_what_has_been")}
  203. span.added #{translate("added")}
  204. | #{translate("and")}
  205. span.removed #{translate("removed")}.
  206. | #{translate("restore_to_any_older_version")}.
  207. h3 #{translate("sync_to_dropbox")}
  208. p
  209. | #{translate("acces_work_from_anywhere")}.
  210. | #{translate("work_offline_and_sync_with_dropbox")}.
  211. hr
  212. 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.
  213. hr
  214. span                  
  215. a(href="https://www.positivessl.com" style="font-family: arial; font-size: 10px; color: #212121; text-decoration: none;")
  216. img(src="https://www.positivessl.com/images-new/PositiveSSL_tl_trans.png" alt="SSL Certificate" title="SSL Certificate" border="0")
  217. div(style="font-family: arial;font-weight:bold;font-size:15px;color:#86BEE0;")
  218. a(href="https://www.positivessl.com" style="color:#86BEE0; text-decoration: none;")
  219. script(type="text/javascript").
  220. ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
  221. script(
  222. type="text/ng-template"
  223. id="cvv-tooltip-tpl.html"
  224. )
  225. p For #[strong Visa, MasterCard and Discover], the #[strong 3 digits] on the #[strong back] of your card.
  226. p For #[strong American Express], the #[strong 4 digits] on the #[strong front] of your card.
  227. mixin countries_options()
  228. option(value='', disabled, selected) #{translate("country")}
  229. option(value='-') --------------
  230. option(value='AF') Afghanistan
  231. option(value='AL') Albania
  232. option(value='DZ') Algeria
  233. option(value='AS') American Samoa
  234. option(value='AD') Andorra
  235. option(value='AO') Angola
  236. option(value='AI') Anguilla
  237. option(value='AQ') Antarctica
  238. option(value='AG') Antigua and Barbuda
  239. option(value='AR') Argentina
  240. option(value='AM') Armenia
  241. option(value='AW') Aruba
  242. option(value='AC') Ascension Island
  243. option(value='AU') Australia
  244. option(value='AT') Austria
  245. option(value='AZ') Azerbaijan
  246. option(value='BS') Bahamas
  247. option(value='BH') Bahrain
  248. option(value='BD') Bangladesh
  249. option(value='BB') Barbados
  250. option(value='BE') Belgium
  251. option(value='BZ') Belize
  252. option(value='BJ') Benin
  253. option(value='BM') Bermuda
  254. option(value='BT') Bhutan
  255. option(value='BO') Bolivia
  256. option(value='BA') Bosnia and Herzegovina
  257. option(value='BW') Botswana
  258. option(value='BV') Bouvet Island
  259. option(value='BR') Brazil
  260. option(value='BQ') British Antarctic Territory
  261. option(value='IO') British Indian Ocean Territory
  262. option(value='VG') British Virgin Islands
  263. option(value='BN') Brunei
  264. option(value='BG') Bulgaria
  265. option(value='BF') Burkina Faso
  266. option(value='BI') Burundi
  267. option(value='KH') Cambodia
  268. option(value='CM') Cameroon
  269. option(value='CA') Canada
  270. option(value='IC') Canary Islands
  271. option(value='CT') Canton and Enderbury Islands
  272. option(value='CV') Cape Verde
  273. option(value='KY') Cayman Islands
  274. option(value='CF') Central African Republic
  275. option(value='EA') Ceuta and Melilla
  276. option(value='TD') Chad
  277. option(value='CL') Chile
  278. option(value='CN') China
  279. option(value='CX') Christmas Island
  280. option(value='CP') Clipperton Island
  281. option(value='CC') Cocos [Keeling] Islands
  282. option(value='CO') Colombia
  283. option(value='KM') Comoros
  284. option(value='CD') Congo [DRC]
  285. option(value='CK') Cook Islands
  286. option(value='CR') Costa Rica
  287. option(value='HR') Croatia
  288. option(value='CU') Cuba
  289. option(value='CY') Cyprus
  290. option(value='CZ') Czech Republic
  291. option(value='DK') Denmark
  292. option(value='DG') Diego Garcia
  293. option(value='DJ') Djibouti
  294. option(value='DM') Dominica
  295. option(value='DO') Dominican Republic
  296. option(value='NQ') Dronning Maud Land
  297. option(value='TL') East Timor
  298. option(value='EC') Ecuador
  299. option(value='EG') Egypt
  300. option(value='SV') El Salvador
  301. option(value='EE') Estonia
  302. option(value='ET') Ethiopia
  303. option(value='FK') Falkland Islands [Islas Malvinas]
  304. option(value='FO') Faroe Islands
  305. option(value='FJ') Fiji
  306. option(value='FI') Finland
  307. option(value='FR') France
  308. option(value='GF') French Guiana
  309. option(value='PF') French Polynesia
  310. option(value='TF') French Southern Territories
  311. option(value='FQ') French Southern and Antarctic Territories
  312. option(value='GA') Gabon
  313. option(value='GM') Gambia
  314. option(value='GE') Georgia
  315. option(value='DE') Germany
  316. option(value='GH') Ghana
  317. option(value='GI') Gibraltar
  318. option(value='GR') Greece
  319. option(value='GL') Greenland
  320. option(value='GD') Grenada
  321. option(value='GP') Guadeloupe
  322. option(value='GU') Guam
  323. option(value='GT') Guatemala
  324. option(value='GG') Guernsey
  325. option(value='GW') Guinea-Bissau
  326. option(value='GY') Guyana
  327. option(value='HT') Haiti
  328. option(value='HM') Heard Island and McDonald Islands
  329. option(value='HN') Honduras
  330. option(value='HK') Hong Kong
  331. option(value='HU') Hungary
  332. option(value='IS') Iceland
  333. option(value='IN') India
  334. option(value='ID') Indonesia
  335. option(value='IE') Ireland
  336. option(value='IM') Isle of Man
  337. option(value='IL') Israel
  338. option(value='IT') Italy
  339. option(value='JM') Jamaica
  340. option(value='JP') Japan
  341. option(value='JE') Jersey
  342. option(value='JT') Johnston Island
  343. option(value='JO') Jordan
  344. option(value='KZ') Kazakhstan
  345. option(value='KE') Kenya
  346. option(value='KI') Kiribati
  347. option(value='KW') Kuwait
  348. option(value='KG') Kyrgyzstan
  349. option(value='LA') Laos
  350. option(value='LV') Latvia
  351. option(value='LS') Lesotho
  352. option(value='LY') Libya
  353. option(value='LI') Liechtenstein
  354. option(value='LT') Lithuania
  355. option(value='LU') Luxembourg
  356. option(value='MO') Macau
  357. option(value='MK') Macedonia [FYROM]
  358. option(value='MG') Madagascar
  359. option(value='MW') Malawi
  360. option(value='MY') Malaysia
  361. option(value='MV') Maldives
  362. option(value='ML') Mali
  363. option(value='MT') Malta
  364. option(value='MH') Marshall Islands
  365. option(value='MQ') Martinique
  366. option(value='MR') Mauritania
  367. option(value='MU') Mauritius
  368. option(value='YT') Mayotte
  369. option(value='FX') Metropolitan France
  370. option(value='MX') Mexico
  371. option(value='FM') Micronesia
  372. option(value='MI') Midway Islands
  373. option(value='MD') Moldova
  374. option(value='MC') Monaco
  375. option(value='MN') Mongolia
  376. option(value='ME') Montenegro
  377. option(value='MS') Montserrat
  378. option(value='MA') Morocco
  379. option(value='MZ') Mozambique
  380. option(value='NA') Namibia
  381. option(value='NR') Nauru
  382. option(value='NP') Nepal
  383. option(value='NL') Netherlands
  384. option(value='AN') Netherlands Antilles
  385. option(value='NT') Neutral Zone
  386. option(value='NC') New Caledonia
  387. option(value='NZ') New Zealand
  388. option(value='NI') Nicaragua
  389. option(value='NE') Niger
  390. option(value='NG') Nigeria
  391. option(value='NU') Niue
  392. option(value='NF') Norfolk Island
  393. option(value='VD') North Vietnam
  394. option(value='MP') Northern Mariana Islands
  395. option(value='NO') Norway
  396. option(value='OM') Oman
  397. option(value='QO') Outlying Oceania
  398. option(value='PC') Pacific Islands Trust Territory
  399. option(value='PK') Pakistan
  400. option(value='PW') Palau
  401. option(value='PS') Palestinian Territories
  402. option(value='PA') Panama
  403. option(value='PZ') Panama Canal Zone
  404. option(value='PY') Paraguay
  405. option(value='YD') People's Democratic Republic of Yemen
  406. option(value='PE') Peru
  407. option(value='PH') Philippines
  408. option(value='PN') Pitcairn Islands
  409. option(value='PL') Poland
  410. option(value='PT') Portugal
  411. option(value='PR') Puerto Rico
  412. option(value='QA') Qatar
  413. option(value='RO') Romania
  414. option(value='RU') Russia
  415. option(value='RW') Rwanda
  416. option(value='RE') Réunion
  417. option(value='BL') Saint Barthélemy
  418. option(value='SH') Saint Helena
  419. option(value='KN') Saint Kitts and Nevis
  420. option(value='LC') Saint Lucia
  421. option(value='MF') Saint Martin
  422. option(value='PM') Saint Pierre and Miquelon
  423. option(value='VC') Saint Vincent and the Grenadines
  424. option(value='WS') Samoa
  425. option(value='SM') San Marino
  426. option(value='SA') Saudi Arabia
  427. option(value='SN') Senegal
  428. option(value='RS') Serbia
  429. option(value='CS') Serbia and Montenegro
  430. option(value='SC') Seychelles
  431. option(value='SL') Sierra Leone
  432. option(value='SG') Singapore
  433. option(value='SK') Slovakia
  434. option(value='SI') Slovenia
  435. option(value='SB') Solomon Islands
  436. option(value='ZA') South Africa
  437. option(value='GS') South Georgia and the South Sandwich Islands
  438. option(value='KR') South Korea
  439. option(value='ES') Spain
  440. option(value='LK') Sri Lanka
  441. option(value='SR') Suriname
  442. option(value='SJ') Svalbard and Jan Mayen
  443. option(value='SZ') Swaziland
  444. option(value='SE') Sweden
  445. option(value='CH') Switzerland
  446. option(value='ST') São Tomé and Príncipe
  447. option(value='TW') Taiwan
  448. option(value='TJ') Tajikistan
  449. option(value='TZ') Tanzania
  450. option(value='TH') Thailand
  451. option(value='TG') Togo
  452. option(value='TK') Tokelau
  453. option(value='TO') Tonga
  454. option(value='TT') Trinidad and Tobago
  455. option(value='TA') Tristan da Cunha
  456. option(value='TN') Tunisia
  457. option(value='TR') Turkey
  458. option(value='TM') Turkmenistan
  459. option(value='TC') Turks and Caicos Islands
  460. option(value='TV') Tuvalu
  461. option(value='UM') U.S. Minor Outlying Islands
  462. option(value='PU') U.S. Miscellaneous Pacific Islands
  463. option(value='VI') U.S. Virgin Islands
  464. option(value='UG') Uganda
  465. option(value='UA') Ukraine
  466. option(value='AE') United Arab Emirates
  467. option(value='GB') United Kingdom
  468. option(value='US') United States
  469. option(value='UY') Uruguay
  470. option(value='UZ') Uzbekistan
  471. option(value='VU') Vanuatu
  472. option(value='VA') Vatican City
  473. option(value='VE') Venezuela
  474. option(value='VN') Vietnam
  475. option(value='WK') Wake Island
  476. option(value='WF') Wallis and Futuna
  477. option(value='EH') Western Sahara
  478. option(value='YE') Yemen
  479. option(value='ZM') Zambia
  480. option(value='AX') Åland Islands