browser.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // This is copied from CM6, which does not expose it publicly.
  2. // https://github.com/codemirror/view/blob/e7918b607753588a0b2a596e952068fa008bf84c/src/browser.ts
  3. const nav: any =
  4. typeof navigator !== 'undefined'
  5. ? navigator
  6. : { userAgent: '', vendor: '', platform: '' }
  7. const doc: any =
  8. typeof document !== 'undefined'
  9. ? document
  10. : { documentElement: { style: {} } }
  11. const ieEdge = /Edge\/(\d+)/.exec(nav.userAgent)
  12. const ieUpTo10 = /MSIE \d/.test(nav.userAgent)
  13. const ie11Up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(nav.userAgent)
  14. const ie = !!(ieUpTo10 || ie11Up || ieEdge)
  15. const gecko = !ie && /gecko\/(\d+)/i.test(nav.userAgent)
  16. const chrome = !ie && /Chrome\/(\d+)/.exec(nav.userAgent)
  17. const webkit = 'webkitFontSmoothing' in doc.documentElement.style
  18. const safari = !ie && /Apple Computer/.test(nav.vendor)
  19. const ios =
  20. safari && (/Mobile\/\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2)
  21. export default {
  22. mac: ios || /Mac/.test(nav.platform),
  23. windows: /Win/.test(nav.platform),
  24. linux: /Linux|X11/.test(nav.platform),
  25. ie,
  26. ie_version: ieUpTo10
  27. ? doc.documentMode || 6
  28. : ie11Up
  29. ? +ie11Up[1]
  30. : ieEdge
  31. ? +ieEdge[1]
  32. : 0,
  33. gecko,
  34. gecko_version: gecko
  35. ? +(/Firefox\/(\d+)/.exec(nav.userAgent) || [0, 0])[1]
  36. : 0,
  37. chrome: !!chrome,
  38. chrome_version: chrome ? +chrome[1] : 0,
  39. ios,
  40. android: /Android\b/.test(nav.userAgent),
  41. webkit,
  42. safari,
  43. webkit_version: webkit
  44. ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1]
  45. : 0,
  46. tabSize:
  47. doc.documentElement.style.tabSize != null ? 'tab-size' : '-moz-tab-size',
  48. }