Subversion-Projekte lars-tiefland.ci

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
875 lars 1
/*global module:false, require:false, __dirname:false*/
2
 
3
module.exports = function(grunt) {
4
  grunt.util.linefeed = "\n";
5
 
6
  // Project configuration.
7
  grunt.initConfig({
8
    pkg: grunt.file.readJSON('package.json'),
9
    concat: {
10
      options : {
11
        separator : "\n"
12
      },
13
      dist: {
14
        src: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js', 'src/vakata-jstree.js'],
15
        dest: 'dist/<%= pkg.name %>.js'
16
      }
17
    },
18
    copy: {
19
      libs : {
20
        files : [
21
          { expand: true, cwd : 'libs/', src: ['*'], dest: 'dist/libs/' }
22
        ]
23
      },
24
      docs : {
25
        files : [
26
          { expand: true, cwd : 'dist/', src: ['**/*'], dest: 'docs/assets/dist/' }
27
        ]
28
      }
29
    },
30
    uglify: {
31
      options: {
32
        banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> - (<%= _.pluck(pkg.licenses, "type").join(", ") %>) */\n',
33
        preserveComments: false,
34
        //sourceMap: "dist/jstree.min.map",
35
        //sourceMappingURL: "jstree.min.map",
36
        report: "min",
37
        beautify: {
38
                ascii_only: true
39
        },
40
        compress: {
41
                hoist_funs: false,
42
                loops: false,
43
                unused: false
44
        }
45
      },
46
      dist: {
47
        src: ['<%= concat.dist.dest %>'],
48
        dest: 'dist/<%= pkg.name %>.min.js'
49
      }
50
    },
51
    qunit: {
52
      files: ['test/unit/**/*.html']
53
    },
54
    jshint: {
55
      options: {
56
        'curly' : true,
57
        'eqeqeq' : true,
58
        'latedef' : true,
59
        'newcap' : true,
60
        'noarg' : true,
61
        'sub' : true,
62
        'undef' : true,
63
        'boss' : true,
64
        'eqnull' : true,
65
        'browser' : true,
66
        'trailing' : true,
67
        'globals' : {
68
          'console' : true,
69
          'jQuery' : true,
70
          'browser' : true,
71
          'XSLTProcessor' : true,
72
          'ActiveXObject' : true
73
        }
74
      },
75
      beforeconcat: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js'],
76
      afterconcat: ['dist/<%= pkg.name %>.js']
77
    },
78
    dox: {
79
      files: {
80
        src: ['src/*.js'],
81
        dest: 'docs'
82
      }
83
    },
84
    amd : {
85
      files: {
86
        src: ['dist/jstree.js'],
87
        dest: 'dist/jstree.js'
88
      }
89
    },
90
    less: {
91
      production: {
92
        options : {
93
          cleancss : true,
94
          compress : true
95
        },
96
        files: {
97
          "dist/themes/default/style.min.css" : "src/themes/default/style.less",
98
          "dist/themes/default-dark/style.min.css" : "src/themes/default-dark/style.less"
99
        }
100
      },
101
      development: {
102
        files: {
103
          "src/themes/default/style.css" : "src/themes/default/style.less",
104
          "dist/themes/default/style.css" : "src/themes/default/style.less",
105
          "src/themes/default-dark/style.css" : "src/themes/default-dark/style.less",
106
          "dist/themes/default-dark/style.css" : "src/themes/default-dark/style.less"
107
        }
108
      }
109
    },
110
    watch: {
111
      js : {
112
        files: ['src/**/*.js'],
113
        tasks: ['js'],
114
        options : {
115
          atBegin : true
116
        }
117
      },
118
      css : {
119
        files: ['src/**/*.less','src/**/*.png','src/**/*.gif'],
120
        tasks: ['css'],
121
        options : {
122
          atBegin : true
123
        }
124
      },
125
    },
126
    resemble: {
127
      options: {
128
        screenshotRoot: 'test/visual/screenshots/',
129
        url: 'http://127.0.0.1/jstree/test/visual/',
130
        gm: false
131
      },
132
      desktop: {
133
        options: {
134
          width: 1280,
135
        },
136
        src: ['desktop'],
137
        dest: 'desktop',
138
      },
139
      mobile: {
140
        options: {
141
          width: 360,
142
        },
143
        src: ['mobile'],
144
        dest: 'mobile'
145
      }
146
    },
147
    imagemin: {
148
      dynamic: {
149
        options: {                       // Target options
150
          optimizationLevel: 7,
151
          pngquant : true
152
        },
153
        files: [{
154
          expand: true,                  // Enable dynamic expansion
155
          cwd:  'src/themes/default/',    // Src matches are relative to this path
156
          src: ['**/*.{png,jpg,gif}'],   // Actual patterns to match
157
          dest: 'dist/themes/default/'   // Destination path prefix
158
        },{
159
          expand: true,                  // Enable dynamic expansion
160
          cwd:  'src/themes/default-dark/',    // Src matches are relative to this path
161
          src: ['**/*.{png,jpg,gif}'],   // Actual patterns to match
162
          dest: 'dist/themes/default-dark/'   // Destination path prefix
163
        }]
164
      }
165
    },
166
    replace: {
167
      files: {
168
        src: ['dist/*.js', 'bower.json', 'component.json', 'jstree.jquery.json'],
169
        overwrite: true,
170
        replacements: [
171
          {
172
            from: '{{VERSION}}',
173
            to: "<%= pkg.version %>"
174
          },
175
          {
176
            from: /"version": "[^"]+"/g,
177
            to: "\"version\": \"<%= pkg.version %>\""
178
          },
179
        ]
180
      }
181
    }
182
  });
183
 
184
  grunt.loadNpmTasks('grunt-contrib-jshint');
185
  grunt.loadNpmTasks('grunt-contrib-concat');
186
  grunt.loadNpmTasks('grunt-contrib-copy');
187
  grunt.loadNpmTasks('grunt-contrib-uglify');
188
  grunt.loadNpmTasks('grunt-contrib-less');
189
  grunt.loadNpmTasks('grunt-contrib-qunit');
190
  grunt.loadNpmTasks('grunt-resemble-cli');
191
  grunt.loadNpmTasks('grunt-contrib-watch');
192
  grunt.loadNpmTasks('grunt-contrib-imagemin');
193
  grunt.loadNpmTasks('grunt-text-replace');
194
 
195
  grunt.registerMultiTask('amd', 'Clean up AMD', function () {
196
    var s, d;
197
    this.files.forEach(function (f) {
198
      s = f.src;
199
      d = f.dest;
200
    });
201
    grunt.file.copy(s, d, {
202
      process: function (contents) {
203
        contents = contents.replace(/\s*if\(\$\.jstree\.plugins\.[a-z]+\)\s*\{\s*return;\s*\}/ig, '');
204
        contents = contents.replace(/\/\*globals[^\/]+\//ig, '');
205
        //contents = contents.replace(/\(function \(factory[\s\S]*?undefined/mig, '(function ($, undefined');
206
        //contents = contents.replace(/\}\)\);/g, '}(jQuery));');
207
        contents = contents.replace(/\(function \(factory[\s\S]*?undefined\s*\)[^\n]+/mig, '');
208
        contents = contents.replace(/\}\)\);/g, '');
209
        contents = contents.replace(/\s*("|')use strict("|');/g, '');
210
        contents = contents.replace(/\s*return \$\.fn\.jstree;/g, '');
211
        return grunt.file.read('src/intro.js') + contents + grunt.file.read('src/outro.js');
212
      }
213
    });
214
  });
215
 
216
  grunt.registerMultiTask('dox', 'Generate dox output ', function() {
217
    var exec = require('child_process').exec,
218
        path = require('path'),
219
        done = this.async(),
220
        doxPath = path.resolve(__dirname),
221
        formatter = [doxPath, 'node_modules', '.bin', 'dox'].join(path.sep);
222
    exec(formatter + ' < "dist/jstree.js" > "docs/jstree.json"', {maxBuffer: 5000*1024}, function(error, stout, sterr){
223
      if (error) {
224
        grunt.log.error(formatter);
225
        grunt.log.error("WARN: "+ error);
226
      }
227
      if (!error) {
228
        grunt.log.writeln('dist/jstree.js doxxed.');
229
        done();
230
      }
231
    });
232
  });
233
 
234
  grunt.util.linefeed = "\n";
235
 
236
  // Default task.
237
  grunt.registerTask('default', ['jshint:beforeconcat','concat','amd','jshint:afterconcat','copy:libs','uglify','less','imagemin','replace','copy:docs','qunit','resemble','dox']);
238
  grunt.registerTask('js', ['concat','amd','uglify']);
239
  grunt.registerTask('css', ['copy','less']);
240
 
241
};