new.jade 20 KB

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