Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

generateStaticPrefixMap.js 2.4 KiB

3 år sedan
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = generateStaticPrefixMap;
  6. var _caniuseApi = require('caniuse-api');
  7. var _propertyMap = require('./maps/propertyMap');
  8. var _propertyMap2 = _interopRequireDefault(_propertyMap);
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. var prefixBrowserMap = {
  11. chrome: 'Webkit',
  12. safari: 'Webkit',
  13. firefox: 'Moz',
  14. opera: 'Webkit',
  15. ie: 'ms',
  16. edge: 'ms',
  17. ios_saf: 'Webkit',
  18. android: 'Webkit',
  19. and_chr: 'Webkit',
  20. and_uc: 'Webkit',
  21. op_mini: 'Webkit',
  22. ie_mob: 'ms'
  23. // remove flexprops from IE
  24. };var flexPropsIE = ['alignContent', 'alignSelf', 'alignItems', 'justifyContent', 'order', 'flexGrow', 'flexShrink', 'flexBasis'];
  25. function filterAndRemoveIfEmpty(map, property, filter) {
  26. map[property] = map[property].filter(filter);
  27. if (map[property].length === 0) {
  28. delete map[property];
  29. }
  30. }
  31. function generateStaticPrefixMap(browserList) {
  32. var prefixMap = {};
  33. for (var browser in prefixBrowserMap) {
  34. var prefix = prefixBrowserMap[browser];
  35. for (var keyword in _propertyMap2.default) {
  36. var keywordProperties = [].concat(_propertyMap2.default[keyword]);
  37. var versions = (0, _caniuseApi.getSupport)(keyword);
  38. for (var i = 0, len = keywordProperties.length; i < len; ++i) {
  39. if (versions[browser].x >= browserList[browser]) {
  40. var property = keywordProperties[i];
  41. if (!prefixMap[property]) {
  42. prefixMap[property] = [];
  43. }
  44. if (prefixMap[property].indexOf(prefix) === -1) {
  45. prefixMap[property].push(prefix);
  46. }
  47. }
  48. }
  49. }
  50. }
  51. // remove flexProps from IE and Firefox due to alternative syntax
  52. for (var _i = 0, _len = flexPropsIE.length; _i < _len; ++_i) {
  53. filterAndRemoveIfEmpty(prefixMap, flexPropsIE[_i], function (prefix) {
  54. return prefix !== 'ms' && prefix !== 'Moz';
  55. });
  56. }
  57. // remove transition from Moz and Webkit as they are handled
  58. // specially by the transition plugins
  59. filterAndRemoveIfEmpty(prefixMap, 'transition', function (prefix) {
  60. return prefix !== 'Moz' && prefix !== 'Webkit';
  61. });
  62. // remove WebkitFlexDirection as it does not exist
  63. filterAndRemoveIfEmpty(prefixMap, 'flexDirection', function (prefix) {
  64. return prefix !== 'Moz';
  65. });
  66. return prefixMap;
  67. }
  68. module.exports = exports['default'];