aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-convert-values/dist/lib/convert.js
blob: 91400bc7a8a187af67e9e64a73d439e2210c8db2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'use strict';

exports.__esModule = true;

exports.default = function (number, unit, _ref) {
    var time = _ref.time,
        length = _ref.length,
        angle = _ref.angle;

    var value = dropLeadingZero(number) + (unit ? unit : '');
    var converted = void 0;

    if (length !== false && unit in lengthConv) {
        converted = transform(number, unit, lengthConv);
    }

    if (time !== false && unit in timeConv) {
        converted = transform(number, unit, timeConv);
    }

    if (angle !== false && unit in angleConv) {
        converted = transform(number, unit, angleConv);
    }

    if (converted && converted.length < value.length) {
        value = converted;
    }

    return value;
};

var lengthConv = {
    in: 96,
    px: 1,
    pt: 4 / 3,
    pc: 16
};

var timeConv = {
    s: 1000,
    ms: 1
};

var angleConv = {
    turn: 360,
    deg: 1
};

function dropLeadingZero(number) {
    var value = String(number);

    if (number % 1) {
        if (value[0] === '0') {
            return value.slice(1);
        }

        if (value[0] === '-' && value[1] === '0') {
            return '-' + value.slice(2);
        }
    }

    return value;
}

function transform(number, unit, conversion) {
    var one = void 0,
        base = void 0;
    var convertionUnits = Object.keys(conversion).filter(function (u) {
        if (conversion[u] === 1) {
            one = u;
        }
        return unit !== u;
    });

    if (unit === one) {
        base = number / conversion[unit];
    } else {
        base = number * conversion[unit];
    }

    return convertionUnits.map(function (u) {
        return dropLeadingZero(base / conversion[u]) + u;
    }).reduce(function (a, b) {
        return a.length < b.length ? a : b;
    });
}

module.exports = exports['default'];