new.jade 17 KB

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