source: node_modules/autoprefixer/lib/info.js@ 2058e5c

Last change on this file since 2058e5c was 2058e5c, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Working / before login

  • Property mode set to 100644
File size: 3.1 KB
Line 
1let browserslist = require('browserslist')
2
3function capitalize(str) {
4 return str.slice(0, 1).toUpperCase() + str.slice(1)
5}
6
7const NAMES = {
8 and_chr: 'Chrome for Android',
9 and_ff: 'Firefox for Android',
10 and_qq: 'QQ Browser',
11 and_uc: 'UC for Android',
12 baidu: 'Baidu Browser',
13 ie: 'IE',
14 ie_mob: 'IE Mobile',
15 ios_saf: 'iOS Safari',
16 kaios: 'KaiOS Browser',
17 op_mini: 'Opera Mini',
18 op_mob: 'Opera Mobile',
19 samsung: 'Samsung Internet'
20}
21
22function prefix(name, prefixes, note) {
23 let out = ` ${name}`
24 if (note) out += ' *'
25 out += ': '
26 out += prefixes.map(i => i.replace(/^-(.*)-$/g, '$1')).join(', ')
27 out += '\n'
28 return out
29}
30
31module.exports = function (prefixes) {
32 if (prefixes.browsers.selected.length === 0) {
33 return 'No browsers selected'
34 }
35
36 let versions = {}
37 for (let browser of prefixes.browsers.selected) {
38 let parts = browser.split(' ')
39 let name = parts[0]
40 let version = parts[1]
41
42 name = NAMES[name] || capitalize(name)
43 if (versions[name]) {
44 versions[name].push(version)
45 } else {
46 versions[name] = [version]
47 }
48 }
49
50 let out = 'Browsers:\n'
51 for (let browser in versions) {
52 let list = versions[browser]
53 list = list.sort((a, b) => parseFloat(b) - parseFloat(a))
54 out += ` ${browser}: ${list.join(', ')}\n`
55 }
56
57 let coverage = browserslist.coverage(prefixes.browsers.selected)
58 let round = Math.round(coverage * 100) / 100.0
59 out += `\nThese browsers account for ${round}% of all users globally\n`
60
61 let atrules = []
62 for (let name in prefixes.add) {
63 let data = prefixes.add[name]
64 if (name[0] === '@' && data.prefixes) {
65 atrules.push(prefix(name, data.prefixes))
66 }
67 }
68 if (atrules.length > 0) {
69 out += `\nAt-Rules:\n${atrules.sort().join('')}`
70 }
71
72 let selectors = []
73 for (let selector of prefixes.add.selectors) {
74 if (selector.prefixes) {
75 selectors.push(prefix(selector.name, selector.prefixes))
76 }
77 }
78 if (selectors.length > 0) {
79 out += `\nSelectors:\n${selectors.sort().join('')}`
80 }
81
82 let values = []
83 let props = []
84 let hadGrid = false
85 for (let name in prefixes.add) {
86 let data = prefixes.add[name]
87 if (name[0] !== '@' && data.prefixes) {
88 let grid = name.indexOf('grid-') === 0
89 if (grid) hadGrid = true
90 props.push(prefix(name, data.prefixes, grid))
91 }
92
93 if (!Array.isArray(data.values)) {
94 continue
95 }
96 for (let value of data.values) {
97 let grid = value.name.includes('grid')
98 if (grid) hadGrid = true
99 let string = prefix(value.name, value.prefixes, grid)
100 if (!values.includes(string)) {
101 values.push(string)
102 }
103 }
104 }
105
106 if (props.length > 0) {
107 out += `\nProperties:\n${props.sort().join('')}`
108 }
109 if (values.length > 0) {
110 out += `\nValues:\n${values.sort().join('')}`
111 }
112 if (hadGrid) {
113 out += '\n* - Prefixes will be added only on grid: true option.\n'
114 }
115
116 if (!atrules.length && !selectors.length && !props.length && !values.length) {
117 out +=
118 "\nAwesome! Your browsers don't require any vendor prefixes." +
119 '\nNow you can remove Autoprefixer from build steps.'
120 }
121
122 return out
123}
Note: See TracBrowser for help on using the repository browser.