new.jade 18 KB

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