new.jade 18 KB

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