~stephen-stewart/ulysses/tidy-up-dropdown

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        clean: {
            build: ['tmp', 'public'],
            release: ['release/']
        },

        compress: {
            release: {
                options: {
                    archive: 'release/<%= pkg.version %>/<%= pkg.name %>-<%= pkg.version %>.tar.gz'
                },

                expand : true,
                flatten: true,
                src : 'public/*',
                dest : '<%= pkg.name %>/<%= pkg.version %>/'
            }
        },

        copy: {
            release: {
                src : '{LICENSE.md,README.md,HISTORY.md}',
                dest: 'public/'
            }
        },

        csslint: {
            /** consider a lax and strict mode **/
            options: {
                csslintrc: '.csslintrc'
            },

            src: {
                src: 'src/*.css'
            }
        },

        concat: {
            build: {
                files: [
                    {'public/base.css': [
                        'bower_components/normalize-css/normalize.css',
                        'public/base.css'
                    ]},
                    {'public/grids.css': [
                        'tmp/grids-prefixed.css',
                        'public/grids.css'
                    ]},
                    // rollup
                    {'public/<%= pkg.name %>.css': [
                        'public/base.css',
                        'public/buttons.css',
                        'public/dropdowns.css',
                        'public/forms.css',
                        'public/grids.css',
                        'public/layout.css',
                        'public/feedback.css',
                        'public/navigation.css',
                        'public/tables.css',
                        'public/typography.css'
                    ]}
                ]
            }
        },

        cssmin: {
            minify: {
                expand: true,
                cwd: 'public/',
                src: ['**.css', '!*-min.css'],
                dest: 'public/',
                ext: '-min.css'
            }
        },

        watch: {
            css: {
                files: 'src/**/*.css',
                tasks: ['rework', 'concat', 'test'],
                options: {
                    spawn: false
                }
            }
        },

        connect: {
            server: {
                options: {
                    port: 9001,
                    hostname: '*',
                    base: 'test'
                }
            }
        },
        rework: {
            files: {
                expand: true,
                cwd: 'src/',
                src: ['**/*.css'],
                dest: 'public/',
                ext: '.css'
            },
            options: {
                use: [
                    ['rework.keyframes'],
                    ['rework.prefix', 'border-radius'],
                    ['rework.prefix', 'box-shadow'],
                    ['rework.prefix', 'animation'],
                    ['rework.prefix', 'transition'],
                    ['rework.prefixValue', 'linear-gradient']
                ],
                vendors: ['-o-', '-ms-', '-moz-', '-webkit-']
            }
        },

        css_selectors: {
            options: {
                mutations: [
                    {search: /^\.pure/g, replace: '.ues'}
                ]
            },
            pure_grids: {
                files: [
                    {dest: 'tmp/grids-prefixed.css', src: 'bower_components/pure/grids.css'}
                ]
            }
        },

        phantomcss: {
            ulysses: {
                options: {
                    screenshots: 'test/visual/screenshots',
                    results: 'test_results/visual/'
                },
                src: [
                    'test/visual/config/phantomcss-tests.js'
                ]
            },
        }
    });

    // configure csslint to only run on changed file
    grunt.event.on('watch', function(action, filepath) {
        grunt.config('csslint.src', filepath);
    });


    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-compress');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-csslint');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-rework');
    grunt.loadNpmTasks('grunt-css-selectors');
    grunt.loadNpmTasks('grunt-phantomcss');

    grunt.registerTask('default',['run']);
    grunt.registerTask('test', ['build', 'connect', 'phantomcss']);
    grunt.registerTask('run', ['build', 'connect', 'watch']);
    grunt.registerTask('build', [
                       'clean:build',
                       'rework',
                       'csslint',
                       'css_selectors',
                       'concat',
                       'cssmin'
    ]);
    grunt.registerTask('release', [
        'build',
        'clean:release',
        'copy:release',
        'compress:release'
    ]);
}