new.jade 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. extends ../layout
  2. block scripts
  3. script(src="https://js.recurly.com/v3/recurly.js")
  4. script(type='text/javascript').
  5. window.recomendedCurrency = '#{currency}'
  6. window.countryCode = '#{countryCode}'
  7. window.plan_code = '#{plan_code}'
  8. window.recurlyApiKey = "!{settings.apis.recurly.publicKey}"
  9. window.couponCode = "#{couponCode}"
  10. block content
  11. - locals.supressDefaultJs = true
  12. script(data-main=jsPath+'main.js', src=jsPath+'libs/require.js', baseurl=jsPath)
  13. .content.content-alt
  14. .container(ng-controller="NewSubscriptionController" ng-cloak)
  15. .row.card-group
  16. .col-md-5.col-md-push-4
  17. .card.card-highlighted
  18. .page-header
  19. .row
  20. .col-xs-9
  21. h2 {{planName}}
  22. .col-xs-3
  23. div.dropdown.changePlanButton.pull-right(ng-cloak, dropdown)
  24. a.btn.btn-default.dropdown-toggle(
  25. href="#",
  26. data-toggle="dropdown",
  27. dropdown-toggle
  28. )
  29. | {{currencyCode}} ({{plans[currencyCode]['symbol']}})
  30. span.caret
  31. ul.dropdown-menu(role="menu")
  32. li(ng-repeat="(currency, value) in plans")
  33. a(
  34. ng-click="changeCurrency(currency)",
  35. ) {{currency}} ({{value['symbol']}})
  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 {{price.currency.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 {{price.currency.symbol}}{{normalPrice}}
  48. .row
  49. .col-md-12
  50. form(ng-show="planName")
  51. .row
  52. .col-md-12
  53. .form-group
  54. .row
  55. .col-md-6
  56. label.radio-inline
  57. input.paymentTypeOption(type="radio",value="credit_card", ng-model="paymentMethod")
  58. i.fa.fa-cc-mastercard.fa-3x
  59. span  
  60. i.fa.fa-cc-visa.fa-3x
  61. .col-md-6
  62. label.radio-inline
  63. input.paymentTypeOption(type="radio", value="paypal", ng-model="paymentMethod")
  64. i.fa.fa-cc-paypal.fa-3x
  65. .alert.alert-warning.small(ng-show="genericError")
  66. strong {{genericError}}
  67. span(ng-hide="paymentMethod == 'paypal'")
  68. .row
  69. .col-md-12
  70. .form-group
  71. div.alert.alert-warning.small(ng-hide="validation.correctCvv") #{translate("invalid")} CVV
  72. div.alert.alert-warning.small(ng-hide="validation.correctCardNumber") #{translate("invalid")} #{translate("credit_card_number")}
  73. .row
  74. .col-md-6
  75. .form-group(ng-class="validation.number == false || validation.errorFields.number ? 'has-error' : ''")
  76. input.form-control(ng-model='data.number', ng-blur="validateCardNumber()", placeholder="#{translate('credit_card_number')}")
  77. .col-md-3
  78. .form-group(ng-class="validation.correctCvv == false || validation.errorFields.cvv ? 'has-error' : ''")
  79. input.form-control(ng-model='data.cvv', ng-blur="validateCvv()", placeholder="CVV")
  80. .row
  81. .col-md-12
  82. div.alert.alert-warning.small(ng-hide="validation.correctExpiry") #{translate("invalid")} #{translate("expiry")}
  83. .row
  84. .col-md-3
  85. .form-group(ng-class="validation.correctExpiry == false || validation.errorFields.month ? 'has-error' : ''")
  86. select.form-control(data-recurly='month', ng-change="validateExpiry()", ng-model='data.month')
  87. option(value="", disabled, selected) Month
  88. option(value="01") 01
  89. option(value="02") 02
  90. option(value="03") 03
  91. option(value="04") 04
  92. option(value="05") 05
  93. option(value="06") 06
  94. option(value="07") 07
  95. option(value="08") 08
  96. option(value="09") 09
  97. option(value="10") 10
  98. option(value="11") 11
  99. option(value="12") 12
  100. .col-md-4
  101. .form-group(ng-class="validation.correctExpiry == false || validation.errorFields.year ? 'has-error' : ''")
  102. select.form-control(data-recurly='year', ng-change="validateExpiry()", ng-model='data.year')
  103. option(value="", disabled, selected) Year
  104. option(value="2016") 2016
  105. option(value="2017") 2017
  106. option(value="2018") 2018
  107. option(value="2019") 2019
  108. option(value="2020") 2020
  109. option(value="2021") 2021
  110. option(value="2022") 2022
  111. option(value="2023") 2023
  112. option(value="2024") 2024
  113. option(value="2025") 2025
  114. option(value="2026") 2026
  115. .row
  116. .col-md-6
  117. .form-group(ng-class="validation.errorFields.first_name ? 'has-error' : ''")
  118. input.form-control(type='text', value='', maxlength='255', , onkeyup='', data-recurly="first_name", ng-model="data.first_name", required, placeholder="#{translate('first_name')}")
  119. .col-md-6
  120. .form-group(ng-class="validation.errorFields.last_name ? 'has-error' : ''")
  121. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="last_name", ng-model="data.last_name", required, placeholder="#{translate('last_name')}")
  122. hr
  123. .row
  124. .col-md-12
  125. .form-group(ng-class="validation.errorFields.address1 ? 'has-error' : ''")
  126. label #{translate("billing_address")}
  127. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.address1", placeholder="#{translate('address')}")
  128. .form-group(ng-class="validation.errorFields.address2 ? 'has-error' : ''")
  129. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.address2", placeholder="#{translate('address')}")
  130. .form-group(ng-class="validation.errorFields.state ? 'has-error' : ''")
  131. input.form-control(type='text', value='', maxlength='255', onkeyup='', ng-model="data.state", placeholder="#{translate('state')}")
  132. .row
  133. .col-md-7
  134. .form-group(ng-class="validation.errorFields.city ? 'has-error' : ''")
  135. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="city", ng-model="data.city", placeholder="#{translate('city')}")
  136. .col-md-5(ng-class="validation.errorFields.postal_code ? 'has-error' : ''")
  137. input.form-control(type='text', value='', maxlength='255', onkeyup='', data-recurly="postal_code", ng-model="data.postal_code", placeholder="#{translate('zip_post_code')}")
  138. .row
  139. .col-md-7
  140. .form-group(ng-class="validation.errorFields.country ? 'has-error' : ''")
  141. select.form-control(data-recurly="country", ng-model="data.country", ng-change="updateCountry()", required)
  142. mixin countries_options()
  143. .row
  144. .col-md-8
  145. if (showCouponField)
  146. .form-group
  147. input.form-control(type='text', ng-blur="applyCoupon()", ng-model="data.coupon", placeholder="#{translate('coupon')}")
  148. .row
  149. .col-md-8
  150. if (showVatField)
  151. .form-group
  152. input.form-control(type='text', ng-blur="applyVatNumber()", ng-model="data.vat_number", placeholder="#{translate('vat_number')}")
  153. .row
  154. .col-xs-7
  155. .form-group
  156. button.btn.btn-success(ng-click="submit()", ng-disabled="processing", sixpack-convert="payment-left-menu-bottom") #{translate("upgrade_now")}
  157. .col-xs-3.pricingBreakdown
  158. div(ng-if="price.next.subtotal != price.next.total") Subtotal
  159. div(ng-if="price.next.tax!='0.00'") Tax
  160. div
  161. strong Total
  162. .col-xs-2
  163. div(ng-if="price.next.subtotal != price.next.total").pull-right {{price.currency.symbol}}{{price.next.subtotal}}
  164. div(ng-if="price.next.tax!='0.00'").pull-right {{price.currency.symbol}}{{price.next.tax}}
  165. div.pull-right
  166. strong {{price.currency.symbol}}{{price.next.total}}
  167. span(sixpack-switch="payment-left-menu-bottom")
  168. .col-md-3.col-md-pull-4(sixpack-default)
  169. if showStudentPlan == 'true'
  170. a.btn-primary.btn.plansPageStudentLink(
  171. href,
  172. ng-click="switchToStudent()"
  173. ) #{translate("half_price_student")}
  174. .card.card-first
  175. .paymentPageFeatures
  176. h3 #{translate("unlimited_projects")}
  177. p #{translate("create_unlimited_projects")}
  178. h3
  179. if plan.features.collaborators == -1
  180. - var collaboratorCount = 'Unlimited'
  181. else
  182. - var collaboratorCount = plan.features.collaborators
  183. | #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
  184. p #{translate("work_on_single_version")}. #{translate("view_collab_edits")} in real time.
  185. h3 #{translate("full_doc_history")}
  186. p #{translate("see_what_has_been")}
  187. span.added #{translate("added")}
  188. | #{translate("and")}
  189. span.removed #{translate("removed")}.
  190. | #{translate("restore_to_any_older_version")}.
  191. h3 #{translate("sync_to_dropbox")}
  192. p
  193. | #{translate("acces_work_from_anywhere")}.
  194. | #{translate("work_offline_and_sync_with_dropbox")}.
  195. hr
  196. 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.
  197. hr
  198. span                  
  199. a(href="https://www.positivessl.com" style="font-family: arial; font-size: 10px; color: #212121; text-decoration: none;")
  200. img(src="https://www.positivessl.com/images-new/PositiveSSL_tl_trans.png" alt="SSL Certificate" title="SSL Certificate" border="0")
  201. div(style="font-family: arial;font-weight:bold;font-size:15px;color:#86BEE0;")
  202. a(href="https://www.positivessl.com" style="color:#86BEE0; text-decoration: none;")
  203. .col-md-3.col-md-pull-4(sixpack-when="bolder")
  204. if showStudentPlan == 'true'
  205. a.btn-primary.btn.plansPageStudentLink(
  206. href,
  207. ng-click="switchToStudent()"
  208. ) #{translate("half_price_student")}
  209. .card.card-first
  210. .paymentPageFeatures
  211. .page-header
  212. h2 #{translate("features")}
  213. h3
  214. i.fa.fa-check  
  215. | #{translate("unlimited_projects")}
  216. h3
  217. i.fa.fa-check  
  218. if plan.features.collaborators == -1
  219. - var collaboratorCount = 'Unlimited'
  220. else
  221. - var collaboratorCount = plan.features.collaborators
  222. | #{translate("collabs_per_proj", {collabcount:collaboratorCount})}
  223. h3
  224. i.fa.fa-check  
  225. | #{translate("full_doc_history")}
  226. h3
  227. i.fa.fa-check  
  228. | #{translate("sync_to_dropbox")}
  229. h3
  230. i.fa.fa-check  
  231. | #{translate("sync_to_github")}
  232. h3
  233. i.fa.fa-check  
  234. | #{translate("Compile Larger Projects")}
  235. hr
  236. h2.text-center 30 Day Guarantee
  237. hr
  238. span                  
  239. a(href="https://www.positivessl.com" style="font-family: arial; font-size: 10px; color: #212121; text-decoration: none;")
  240. img(src="https://www.positivessl.com/images-new/PositiveSSL_tl_trans.png" alt="SSL Certificate" title="SSL Certificate" border="0")
  241. div(style="font-family: arial;font-weight:bold;font-size:15px;color:#86BEE0;")
  242. a(href="https://www.positivessl.com" style="color:#86BEE0; text-decoration: none;")
  243. script(type="text/javascript").
  244. ga('send', 'event', 'pageview', 'payment_form', "#{plan_code}")
  245. mixin countries_options()
  246. option(value='', disabled, selected) #{translate("country")}
  247. option(value='-') --------------
  248. option(value='AF') Afghanistan
  249. option(value='AL') Albania
  250. option(value='DZ') Algeria
  251. option(value='AS') American Samoa
  252. option(value='AD') Andorra
  253. option(value='AO') Angola
  254. option(value='AI') Anguilla
  255. option(value='AQ') Antarctica
  256. option(value='AG') Antigua and Barbuda
  257. option(value='AR') Argentina
  258. option(value='AM') Armenia
  259. option(value='AW') Aruba
  260. option(value='AC') Ascension Island
  261. option(value='AU') Australia
  262. option(value='AT') Austria
  263. option(value='AZ') Azerbaijan
  264. option(value='BS') Bahamas
  265. option(value='BH') Bahrain
  266. option(value='BD') Bangladesh
  267. option(value='BB') Barbados
  268. option(value='BE') Belgium
  269. option(value='BZ') Belize
  270. option(value='BJ') Benin
  271. option(value='BM') Bermuda
  272. option(value='BT') Bhutan
  273. option(value='BO') Bolivia
  274. option(value='BA') Bosnia and Herzegovina
  275. option(value='BW') Botswana
  276. option(value='BV') Bouvet Island
  277. option(value='BR') Brazil
  278. option(value='BQ') British Antarctic Territory
  279. option(value='IO') British Indian Ocean Territory
  280. option(value='VG') British Virgin Islands
  281. option(value='BN') Brunei
  282. option(value='BG') Bulgaria
  283. option(value='BF') Burkina Faso
  284. option(value='BI') Burundi
  285. option(value='KH') Cambodia
  286. option(value='CM') Cameroon
  287. option(value='CA') Canada
  288. option(value='IC') Canary Islands
  289. option(value='CT') Canton and Enderbury Islands
  290. option(value='CV') Cape Verde
  291. option(value='KY') Cayman Islands
  292. option(value='CF') Central African Republic
  293. option(value='EA') Ceuta and Melilla
  294. option(value='TD') Chad
  295. option(value='CL') Chile
  296. option(value='CN') China
  297. option(value='CX') Christmas Island
  298. option(value='CP') Clipperton Island
  299. option(value='CC') Cocos [Keeling] Islands
  300. option(value='CO') Colombia
  301. option(value='KM') Comoros
  302. option(value='CD') Congo [DRC]
  303. option(value='CK') Cook Islands
  304. option(value='CR') Costa Rica
  305. option(value='HR') Croatia
  306. option(value='CU') Cuba
  307. option(value='CY') Cyprus
  308. option(value='CZ') Czech Republic
  309. option(value='DK') Denmark
  310. option(value='DG') Diego Garcia
  311. option(value='DJ') Djibouti
  312. option(value='DM') Dominica
  313. option(value='DO') Dominican Republic
  314. option(value='NQ') Dronning Maud Land
  315. option(value='TL') East Timor
  316. option(value='EC') Ecuador
  317. option(value='EG') Egypt
  318. option(value='SV') El Salvador
  319. option(value='EE') Estonia
  320. option(value='ET') Ethiopia
  321. option(value='FK') Falkland Islands [Islas Malvinas]
  322. option(value='FO') Faroe Islands
  323. option(value='FJ') Fiji
  324. option(value='FI') Finland
  325. option(value='FR') France
  326. option(value='GF') French Guiana
  327. option(value='PF') French Polynesia
  328. option(value='TF') French Southern Territories
  329. option(value='FQ') French Southern and Antarctic Territories
  330. option(value='GA') Gabon
  331. option(value='GM') Gambia
  332. option(value='GE') Georgia
  333. option(value='DE') Germany
  334. option(value='GH') Ghana
  335. option(value='GI') Gibraltar
  336. option(value='GR') Greece
  337. option(value='GL') Greenland
  338. option(value='GD') Grenada
  339. option(value='GP') Guadeloupe
  340. option(value='GU') Guam
  341. option(value='GT') Guatemala
  342. option(value='GG') Guernsey
  343. option(value='GW') Guinea-Bissau
  344. option(value='GY') Guyana
  345. option(value='HT') Haiti
  346. option(value='HM') Heard Island and McDonald Islands
  347. option(value='HN') Honduras
  348. option(value='HK') Hong Kong
  349. option(value='HU') Hungary
  350. option(value='IS') Iceland
  351. option(value='IN') India
  352. option(value='ID') Indonesia
  353. option(value='IE') Ireland
  354. option(value='IM') Isle of Man
  355. option(value='IL') Israel
  356. option(value='IT') Italy
  357. option(value='JM') Jamaica
  358. option(value='JP') Japan
  359. option(value='JE') Jersey
  360. option(value='JT') Johnston Island
  361. option(value='JO') Jordan
  362. option(value='KZ') Kazakhstan
  363. option(value='KE') Kenya
  364. option(value='KI') Kiribati
  365. option(value='KW') Kuwait
  366. option(value='KG') Kyrgyzstan
  367. option(value='LA') Laos
  368. option(value='LV') Latvia
  369. option(value='LS') Lesotho
  370. option(value='LY') Libya
  371. option(value='LI') Liechtenstein
  372. option(value='LT') Lithuania
  373. option(value='LU') Luxembourg
  374. option(value='MO') Macau
  375. option(value='MK') Macedonia [FYROM]
  376. option(value='MG') Madagascar
  377. option(value='MW') Malawi
  378. option(value='MY') Malaysia
  379. option(value='MV') Maldives
  380. option(value='ML') Mali
  381. option(value='MT') Malta
  382. option(value='MH') Marshall Islands
  383. option(value='MQ') Martinique
  384. option(value='MR') Mauritania
  385. option(value='MU') Mauritius
  386. option(value='YT') Mayotte
  387. option(value='FX') Metropolitan France
  388. option(value='MX') Mexico
  389. option(value='FM') Micronesia
  390. option(value='MI') Midway Islands
  391. option(value='MD') Moldova
  392. option(value='MC') Monaco
  393. option(value='MN') Mongolia
  394. option(value='ME') Montenegro
  395. option(value='MS') Montserrat
  396. option(value='MA') Morocco
  397. option(value='MZ') Mozambique
  398. option(value='NA') Namibia
  399. option(value='NR') Nauru
  400. option(value='NP') Nepal
  401. option(value='NL') Netherlands
  402. option(value='AN') Netherlands Antilles
  403. option(value='NT') Neutral Zone
  404. option(value='NC') New Caledonia
  405. option(value='NZ') New Zealand
  406. option(value='NI') Nicaragua
  407. option(value='NE') Niger
  408. option(value='NG') Nigeria
  409. option(value='NU') Niue
  410. option(value='NF') Norfolk Island
  411. option(value='VD') North Vietnam
  412. option(value='MP') Northern Mariana Islands
  413. option(value='NO') Norway
  414. option(value='OM') Oman
  415. option(value='QO') Outlying Oceania
  416. option(value='PC') Pacific Islands Trust Territory
  417. option(value='PK') Pakistan
  418. option(value='PW') Palau
  419. option(value='PS') Palestinian Territories
  420. option(value='PA') Panama
  421. option(value='PZ') Panama Canal Zone
  422. option(value='PY') Paraguay
  423. option(value='YD') People's Democratic Republic of Yemen
  424. option(value='PE') Peru
  425. option(value='PH') Philippines
  426. option(value='PN') Pitcairn Islands
  427. option(value='PL') Poland
  428. option(value='PT') Portugal
  429. option(value='PR') Puerto Rico
  430. option(value='QA') Qatar
  431. option(value='RO') Romania
  432. option(value='RU') Russia
  433. option(value='RW') Rwanda
  434. option(value='RE') Réunion
  435. option(value='BL') Saint Barthélemy
  436. option(value='SH') Saint Helena
  437. option(value='KN') Saint Kitts and Nevis
  438. option(value='LC') Saint Lucia
  439. option(value='MF') Saint Martin
  440. option(value='PM') Saint Pierre and Miquelon
  441. option(value='VC') Saint Vincent and the Grenadines
  442. option(value='WS') Samoa
  443. option(value='SM') San Marino
  444. option(value='SA') Saudi Arabia
  445. option(value='SN') Senegal
  446. option(value='RS') Serbia
  447. option(value='CS') Serbia and Montenegro
  448. option(value='SC') Seychelles
  449. option(value='SL') Sierra Leone
  450. option(value='SG') Singapore
  451. option(value='SK') Slovakia
  452. option(value='SI') Slovenia
  453. option(value='SB') Solomon Islands
  454. option(value='ZA') South Africa
  455. option(value='GS') South Georgia and the South Sandwich Islands
  456. option(value='KR') South Korea
  457. option(value='ES') Spain
  458. option(value='LK') Sri Lanka
  459. option(value='SR') Suriname
  460. option(value='SJ') Svalbard and Jan Mayen
  461. option(value='SZ') Swaziland
  462. option(value='SE') Sweden
  463. option(value='CH') Switzerland
  464. option(value='ST') São Tomé and Príncipe
  465. option(value='TW') Taiwan
  466. option(value='TJ') Tajikistan
  467. option(value='TZ') Tanzania
  468. option(value='TH') Thailand
  469. option(value='TG') Togo
  470. option(value='TK') Tokelau
  471. option(value='TO') Tonga
  472. option(value='TT') Trinidad and Tobago
  473. option(value='TA') Tristan da Cunha
  474. option(value='TN') Tunisia
  475. option(value='TR') Turkey
  476. option(value='TM') Turkmenistan
  477. option(value='TC') Turks and Caicos Islands
  478. option(value='TV') Tuvalu
  479. option(value='UM') U.S. Minor Outlying Islands
  480. option(value='PU') U.S. Miscellaneous Pacific Islands
  481. option(value='VI') U.S. Virgin Islands
  482. option(value='UG') Uganda
  483. option(value='UA') Ukraine
  484. option(value='AE') United Arab Emirates
  485. option(value='GB') United Kingdom
  486. option(value='US') United States
  487. option(value='UY') Uruguay
  488. option(value='UZ') Uzbekistan
  489. option(value='VU') Vanuatu
  490. option(value='VA') Vatican City
  491. option(value='VE') Venezuela
  492. option(value='VN') Vietnam
  493. option(value='WK') Wake Island
  494. option(value='WF') Wallis and Futuna
  495. option(value='EH') Western Sahara
  496. option(value='YE') Yemen
  497. option(value='ZM') Zambia
  498. option(value='AX') Åland Islands