new.jade 17 KB

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