Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

131 lignes
3.7 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = getBrowserInformation;
  6. var _bowser = require('bowser');
  7. var _bowser2 = _interopRequireDefault(_bowser);
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. var prefixByBrowser = {
  10. chrome: 'Webkit',
  11. safari: 'Webkit',
  12. ios: 'Webkit',
  13. android: 'Webkit',
  14. phantom: 'Webkit',
  15. opera: 'Webkit',
  16. webos: 'Webkit',
  17. blackberry: 'Webkit',
  18. bada: 'Webkit',
  19. tizen: 'Webkit',
  20. chromium: 'Webkit',
  21. vivaldi: 'Webkit',
  22. firefox: 'Moz',
  23. seamoney: 'Moz',
  24. sailfish: 'Moz',
  25. msie: 'ms',
  26. msedge: 'ms'
  27. };
  28. var browserByCanIuseAlias = {
  29. chrome: 'chrome',
  30. chromium: 'chrome',
  31. safari: 'safari',
  32. firfox: 'firefox',
  33. msedge: 'edge',
  34. opera: 'opera',
  35. vivaldi: 'opera',
  36. msie: 'ie'
  37. };
  38. function getBrowserName(browserInfo) {
  39. if (browserInfo.firefox) {
  40. return 'firefox';
  41. }
  42. if (browserInfo.mobile || browserInfo.tablet) {
  43. if (browserInfo.ios) {
  44. return 'ios_saf';
  45. } else if (browserInfo.android) {
  46. return 'android';
  47. } else if (browserInfo.opera) {
  48. return 'op_mini';
  49. }
  50. }
  51. for (var browser in browserByCanIuseAlias) {
  52. if (browserInfo.hasOwnProperty(browser)) {
  53. return browserByCanIuseAlias[browser];
  54. }
  55. }
  56. }
  57. /**
  58. * Uses bowser to get default browser browserInformation such as version and name
  59. * Evaluates bowser browserInfo and adds vendorPrefix browserInformation
  60. * @param {string} userAgent - userAgent that gets evaluated
  61. */
  62. function getBrowserInformation(userAgent) {
  63. var browserInfo = _bowser2.default._detect(userAgent);
  64. if (browserInfo.yandexbrowser) {
  65. browserInfo = _bowser2.default._detect(userAgent.replace(/YaBrowser\/[0-9.]*/, ''));
  66. }
  67. for (var browser in prefixByBrowser) {
  68. if (browserInfo.hasOwnProperty(browser)) {
  69. var prefix = prefixByBrowser[browser];
  70. browserInfo.jsPrefix = prefix;
  71. browserInfo.cssPrefix = '-' + prefix.toLowerCase() + '-';
  72. break;
  73. }
  74. }
  75. browserInfo.browserName = getBrowserName(browserInfo);
  76. // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN
  77. if (browserInfo.version) {
  78. browserInfo.browserVersion = parseFloat(browserInfo.version);
  79. } else {
  80. browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10);
  81. }
  82. browserInfo.osVersion = parseFloat(browserInfo.osversion);
  83. // iOS forces all browsers to use Safari under the hood
  84. // as the Safari version seems to match the iOS version
  85. // we just explicitely use the osversion instead
  86. // https://github.com/rofrischmann/inline-style-prefixer/issues/72
  87. if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) {
  88. browserInfo.browserVersion = browserInfo.osVersion;
  89. }
  90. // seperate native android chrome
  91. // https://github.com/rofrischmann/inline-style-prefixer/issues/45
  92. if (browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37) {
  93. browserInfo.browserName = 'and_chr';
  94. }
  95. // For android < 4.4 we want to check the osversion
  96. // not the chrome version, see issue #26
  97. // https://github.com/rofrischmann/inline-style-prefixer/issues/26
  98. if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) {
  99. browserInfo.browserVersion = browserInfo.osVersion;
  100. }
  101. // Samsung browser are basically build on Chrome > 44
  102. // https://github.com/rofrischmann/inline-style-prefixer/issues/102
  103. if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) {
  104. browserInfo.browserName = 'and_chr';
  105. browserInfo.browserVersion = 44;
  106. }
  107. return browserInfo;
  108. }
  109. module.exports = exports['default'];