new.jade 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  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. script(type="text/javascript").
  198. window.ab = [
  199. {step:1, bucket:"red", testName:"button_color"},
  200. {step:1, bucket:"blue", testName:"button_color"}
  201. ]
  202. mixin countries_options()
  203. option(value='', disabled, selected) #{translate("country")}
  204. option(value='-') --------------
  205. option(value='AF') Afghanistan
  206. option(value='AL') Albania
  207. option(value='DZ') Algeria
  208. option(value='AS') American Samoa
  209. option(value='AD') Andorra
  210. option(value='AO') Angola
  211. option(value='AI') Anguilla
  212. option(value='AQ') Antarctica
  213. option(value='AG') Antigua and Barbuda
  214. option(value='AR') Argentina
  215. option(value='AM') Armenia
  216. option(value='AW') Aruba
  217. option(value='AC') Ascension Island
  218. option(value='AU') Australia
  219. option(value='AT') Austria
  220. option(value='AZ') Azerbaijan
  221. option(value='BS') Bahamas
  222. option(value='BH') Bahrain
  223. option(value='BD') Bangladesh
  224. option(value='BB') Barbados
  225. option(value='BE') Belgium
  226. option(value='BZ') Belize
  227. option(value='BJ') Benin
  228. option(value='BM') Bermuda
  229. option(value='BT') Bhutan
  230. option(value='BO') Bolivia
  231. option(value='BA') Bosnia and Herzegovina
  232. option(value='BW') Botswana
  233. option(value='BV') Bouvet Island
  234. option(value='BR') Brazil
  235. option(value='BQ') British Antarctic Territory
  236. option(value='IO') British Indian Ocean Territory
  237. option(value='VG') British Virgin Islands
  238. option(value='BN') Brunei
  239. option(value='BG') Bulgaria
  240. option(value='BF') Burkina Faso
  241. option(value='BI') Burundi
  242. option(value='KH') Cambodia
  243. option(value='CM') Cameroon
  244. option(value='CA') Canada
  245. option(value='IC') Canary Islands
  246. option(value='CT') Canton and Enderbury Islands
  247. option(value='CV') Cape Verde
  248. option(value='KY') Cayman Islands
  249. option(value='CF') Central African Republic
  250. option(value='EA') Ceuta and Melilla
  251. option(value='TD') Chad
  252. option(value='CL') Chile
  253. option(value='CN') China
  254. option(value='CX') Christmas Island
  255. option(value='CP') Clipperton Island
  256. option(value='CC') Cocos [Keeling] Islands
  257. option(value='CO') Colombia
  258. option(value='KM') Comoros
  259. option(value='CD') Congo [DRC]
  260. option(value='CK') Cook Islands
  261. option(value='CR') Costa Rica
  262. option(value='HR') Croatia
  263. option(value='CU') Cuba
  264. option(value='CY') Cyprus
  265. option(value='CZ') Czech Republic
  266. option(value='DK') Denmark
  267. option(value='DG') Diego Garcia
  268. option(value='DJ') Djibouti
  269. option(value='DM') Dominica
  270. option(value='DO') Dominican Republic
  271. option(value='NQ') Dronning Maud Land
  272. option(value='TL') East Timor
  273. option(value='EC') Ecuador
  274. option(value='EG') Egypt
  275. option(value='SV') El Salvador
  276. option(value='EE') Estonia
  277. option(value='ET') Ethiopia
  278. option(value='FK') Falkland Islands [Islas Malvinas]
  279. option(value='FO') Faroe Islands
  280. option(value='FJ') Fiji
  281. option(value='FI') Finland
  282. option(value='FR') France
  283. option(value='GF') French Guiana
  284. option(value='PF') French Polynesia
  285. option(value='TF') French Southern Territories
  286. option(value='FQ') French Southern and Antarctic Territories
  287. option(value='GA') Gabon
  288. option(value='GM') Gambia
  289. option(value='GE') Georgia
  290. option(value='DE') Germany
  291. option(value='GH') Ghana
  292. option(value='GI') Gibraltar
  293. option(value='GR') Greece
  294. option(value='GL') Greenland
  295. option(value='GD') Grenada
  296. option(value='GP') Guadeloupe
  297. option(value='GU') Guam
  298. option(value='GT') Guatemala
  299. option(value='GG') Guernsey
  300. option(value='GW') Guinea-Bissau
  301. option(value='GY') Guyana
  302. option(value='HT') Haiti
  303. option(value='HM') Heard Island and McDonald Islands
  304. option(value='HN') Honduras
  305. option(value='HK') Hong Kong
  306. option(value='HU') Hungary
  307. option(value='IS') Iceland
  308. option(value='IN') India
  309. option(value='ID') Indonesia
  310. option(value='IE') Ireland
  311. option(value='IM') Isle of Man
  312. option(value='IL') Israel
  313. option(value='IT') Italy
  314. option(value='JM') Jamaica
  315. option(value='JP') Japan
  316. option(value='JE') Jersey
  317. option(value='JT') Johnston Island
  318. option(value='JO') Jordan
  319. option(value='KZ') Kazakhstan
  320. option(value='KE') Kenya
  321. option(value='KI') Kiribati
  322. option(value='KW') Kuwait
  323. option(value='KG') Kyrgyzstan
  324. option(value='LA') Laos
  325. option(value='LV') Latvia
  326. option(value='LS') Lesotho
  327. option(value='LY') Libya
  328. option(value='LI') Liechtenstein
  329. option(value='LT') Lithuania
  330. option(value='LU') Luxembourg
  331. option(value='MO') Macau
  332. option(value='MK') Macedonia [FYROM]
  333. option(value='MG') Madagascar
  334. option(value='MW') Malawi
  335. option(value='MY') Malaysia
  336. option(value='MV') Maldives
  337. option(value='ML') Mali
  338. option(value='MT') Malta
  339. option(value='MH') Marshall Islands
  340. option(value='MQ') Martinique
  341. option(value='MR') Mauritania
  342. option(value='MU') Mauritius
  343. option(value='YT') Mayotte
  344. option(value='FX') Metropolitan France
  345. option(value='MX') Mexico
  346. option(value='FM') Micronesia
  347. option(value='MI') Midway Islands
  348. option(value='MD') Moldova
  349. option(value='MC') Monaco
  350. option(value='MN') Mongolia
  351. option(value='ME') Montenegro
  352. option(value='MS') Montserrat
  353. option(value='MA') Morocco
  354. option(value='MZ') Mozambique
  355. option(value='NA') Namibia
  356. option(value='NR') Nauru
  357. option(value='NP') Nepal
  358. option(value='NL') Netherlands
  359. option(value='AN') Netherlands Antilles
  360. option(value='NT') Neutral Zone
  361. option(value='NC') New Caledonia
  362. option(value='NZ') New Zealand
  363. option(value='NI') Nicaragua
  364. option(value='NE') Niger
  365. option(value='NG') Nigeria
  366. option(value='NU') Niue
  367. option(value='NF') Norfolk Island
  368. option(value='VD') North Vietnam
  369. option(value='MP') Northern Mariana Islands
  370. option(value='NO') Norway
  371. option(value='OM') Oman
  372. option(value='QO') Outlying Oceania
  373. option(value='PC') Pacific Islands Trust Territory
  374. option(value='PK') Pakistan
  375. option(value='PW') Palau
  376. option(value='PS') Palestinian Territories
  377. option(value='PA') Panama
  378. option(value='PZ') Panama Canal Zone
  379. option(value='PY') Paraguay
  380. option(value='YD') People's Democratic Republic of Yemen
  381. option(value='PE') Peru
  382. option(value='PH') Philippines
  383. option(value='PN') Pitcairn Islands
  384. option(value='PL') Poland
  385. option(value='PT') Portugal
  386. option(value='PR') Puerto Rico
  387. option(value='QA') Qatar
  388. option(value='RO') Romania
  389. option(value='RU') Russia
  390. option(value='RW') Rwanda
  391. option(value='RE') Réunion
  392. option(value='BL') Saint Barthélemy
  393. option(value='SH') Saint Helena
  394. option(value='KN') Saint Kitts and Nevis
  395. option(value='LC') Saint Lucia
  396. option(value='MF') Saint Martin
  397. option(value='PM') Saint Pierre and Miquelon
  398. option(value='VC') Saint Vincent and the Grenadines
  399. option(value='WS') Samoa
  400. option(value='SM') San Marino
  401. option(value='SA') Saudi Arabia
  402. option(value='SN') Senegal
  403. option(value='RS') Serbia
  404. option(value='CS') Serbia and Montenegro
  405. option(value='SC') Seychelles
  406. option(value='SL') Sierra Leone
  407. option(value='SG') Singapore
  408. option(value='SK') Slovakia
  409. option(value='SI') Slovenia
  410. option(value='SB') Solomon Islands
  411. option(value='ZA') South Africa
  412. option(value='GS') South Georgia and the South Sandwich Islands
  413. option(value='KR') South Korea
  414. option(value='ES') Spain
  415. option(value='LK') Sri Lanka
  416. option(value='SR') Suriname
  417. option(value='SJ') Svalbard and Jan Mayen
  418. option(value='SZ') Swaziland
  419. option(value='SE') Sweden
  420. option(value='CH') Switzerland
  421. option(value='ST') São Tomé and Príncipe
  422. option(value='TW') Taiwan
  423. option(value='TJ') Tajikistan
  424. option(value='TZ') Tanzania
  425. option(value='TH') Thailand
  426. option(value='TG') Togo
  427. option(value='TK') Tokelau
  428. option(value='TO') Tonga
  429. option(value='TT') Trinidad and Tobago
  430. option(value='TA') Tristan da Cunha
  431. option(value='TN') Tunisia
  432. option(value='TR') Turkey
  433. option(value='TM') Turkmenistan
  434. option(value='TC') Turks and Caicos Islands
  435. option(value='TV') Tuvalu
  436. option(value='UM') U.S. Minor Outlying Islands
  437. option(value='PU') U.S. Miscellaneous Pacific Islands
  438. option(value='VI') U.S. Virgin Islands
  439. option(value='UG') Uganda
  440. option(value='UA') Ukraine
  441. option(value='AE') United Arab Emirates
  442. option(value='GB') United Kingdom
  443. option(value='US') United States
  444. option(value='UY') Uruguay
  445. option(value='UZ') Uzbekistan
  446. option(value='VU') Vanuatu
  447. option(value='VA') Vatican City
  448. option(value='VE') Venezuela
  449. option(value='VN') Vietnam
  450. option(value='WK') Wake Island
  451. option(value='WF') Wallis and Futuna
  452. option(value='EH') Western Sahara
  453. option(value='YE') Yemen
  454. option(value='ZM') Zambia
  455. option(value='AX') Åland Islands