๐Ÿ“ฆ EdwonLim / fekit-extension-cssdiff

๐Ÿ“„ index.js ยท 58 lines
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
58var fs = require('fs'),
    path = require('path'),
    css = require('css'),
    cssIsolate = require('css-isolate');

function diff(basePath, file1, file2) {

    var content1 = fs.readFileSync(path.join(basePath, file1), 'utf-8'),
        content2 = fs.readFileSync(path.join(basePath, file2), 'utf-8'),
        diff1 = css.parse(cssIsolate.diff(content1, content2)),
        diff2 = css.parse(cssIsolate.diff(content2, content1));

    diff1.stylesheet.rules.forEach(function (rule) {
        rule.declarations.forEach(function (declaration) {
            declaration.value += ' /* ' + file1 + ' */';
        });
    });

    diff2.stylesheet.rules.forEach(function (rule) {
        rule.declarations.forEach(function (declaration) {
            declaration.value += ' /* ' + file2 + ' */';
        });
    });

    var addRules = [];

    diff2.stylesheet.rules.forEach(function (rule2) {
        var has = false;
        diff1.stylesheet.rules.forEach(function (rule1) {
            if (rule1.selectors.join(',') == rule2.selectors.join(',')) {
                has = true;
                rule1.declarations = rule1.declarations.concat(rule2.declarations);
            }
        });
        if (!has) {
            addRules.push(rule2);
        }
    });

    diff1.stylesheet.rules = diff1.stylesheet.rules.concat(addRules);

    if (diff1.stylesheet.rules.length) {
        return css.stringify(diff1);
    } else {
        return '/* No Difference */'
    }

}

exports.usage = 'CSS ๆ–‡ไปถ Diff';

exports.run = function(options) {
    var argv = process.argv,
        file1 = argv[3],
        file2 = argv[4];
    console.log('/* CSS Diff Result:*/');
    console.log(diff(options.cwd, file1, file2));
};