new.jade 17 KB

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