Offset: return zeros for disconnected/hidden elements
[jquery.git] / Gruntfile.js
blobba4186a221ab4757cf37dddddca0f47e17b8b4a1
1 module.exports = function( grunt ) {
2         "use strict";
4         function readOptionalJSON( filepath ) {
5                 var data = {};
6                 try {
7                         data = grunt.file.readJSON( filepath );
8                 } catch ( e ) {}
9                 return data;
10         }
12         var gzip = require( "gzip-js" ),
13                 srcHintOptions = readOptionalJSON( "src/.jshintrc" );
15         // The concatenated file won't pass onevar
16         // But our modules can
17         delete srcHintOptions.onevar;
19         grunt.initConfig({
20                 pkg: grunt.file.readJSON( "package.json" ),
21                 dst: readOptionalJSON( "dist/.destination.json" ),
22                 "compare_size": {
23                         files: [ "dist/jquery.js", "dist/jquery.min.js" ],
24                         options: {
25                                 compress: {
26                                         gz: function( contents ) {
27                                                 return gzip.zip( contents, {} ).length;
28                                         }
29                                 },
30                                 cache: "build/.sizecache.json"
31                         }
32                 },
33                 build: {
34                         all: {
35                                 dest: "dist/jquery.js",
36                                 minimum: [
37                                         "core",
38                                         "selector"
39                                 ],
40                                 removeWith: {
41                                         ajax: [ "manipulation/_evalUrl", "event/ajax" ],
42                                         callbacks: [ "deferred" ],
43                                         css: [ "effects", "dimensions", "offset" ]
44                                 }
45                         }
46                 },
47                 npmcopy: {
48                         all: {
49                                 options: {
50                                         destPrefix: "external"
51                                 },
52                                 files: {
53                                         "sizzle/dist": "sizzle/dist",
54                                         "sizzle/LICENSE.txt": "sizzle/LICENSE.txt",
56                                         "npo/npo.js": "native-promise-only/npo.js",
58                                         "qunit/qunit.js": "qunitjs/qunit/qunit.js",
59                                         "qunit/qunit.css": "qunitjs/qunit/qunit.css",
60                                         "qunit/LICENSE.txt": "qunitjs/LICENSE.txt",
62                                         "requirejs/require.js": "requirejs/require.js",
64                                         "sinon/fake_timers.js": "sinon/lib/sinon/util/fake_timers.js",
65                                         "sinon/timers_ie.js": "sinon/lib/sinon/util/timers_ie.js",
66                                         "sinon/LICENSE.txt": "sinon/LICENSE"
67                                 }
68                         }
69                 },
70                 jsonlint: {
71                         pkg: {
72                                 src: [ "package.json" ]
73                         }
74                 },
75                 jshint: {
76                         all: {
77                                 src: [
78                                         "src/**/*.js", "Gruntfile.js", "test/**/*.js", "build/**/*.js"
79                                 ],
80                                 options: {
81                                         jshintrc: true
82                                 }
83                         },
84                         dist: {
85                                 src: "dist/jquery.js",
86                                 options: srcHintOptions
87                         }
88                 },
89                 jscs: {
90                         src: "src/**/*.js",
91                         gruntfile: "Gruntfile.js",
93                         // Right now, check only test helpers
94                         test: [ "test/data/testrunner.js" ],
95                         release: [ "build/*.js", "!build/release-notes.js" ],
96                         tasks: "build/tasks/*.js"
97                 },
98                 testswarm: {
99                         tests: [
100                                 "ajax",
101                                 "attributes",
102                                 "callbacks",
103                                 "core",
104                                 "css",
105                                 "data",
106                                 "deferred",
107                                 "dimensions",
108                                 "effects",
109                                 "event",
110                                 "manipulation",
111                                 "offset",
112                                 "queue",
113                                 "selector",
114                                 "serialize",
115                                 "support",
116                                 "traversing"
117                         ]
118                 },
119                 watch: {
120                         files: [ "<%= jshint.all.src %>" ],
121                         tasks: [ "dev" ]
122                 },
123                 uglify: {
124                         all: {
125                                 files: {
126                                         "dist/jquery.min.js": [ "dist/jquery.js" ]
127                                 },
128                                 options: {
129                                         preserveComments: false,
130                                         sourceMap: true,
131                                         sourceMapName: "dist/jquery.min.map",
132                                         report: "min",
133                                         beautify: {
134                                                 "ascii_only": true
135                                         },
136                                         banner: "/*! jQuery Compat v<%= pkg.version %> | " +
137                                                 "(c) jQuery Foundation | jquery.org/license */",
138                                         compress: {
139                                                 "hoist_funs": false,
140                                                 loops: false,
141                                                 unused: false
142                                         }
143                                 }
144                         }
145                 }
146         });
148         // Load grunt tasks from NPM packages
149         require( "load-grunt-tasks" )( grunt );
151         // Integrate jQuery specific tasks
152         grunt.loadTasks( "build/tasks" );
154         grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] );
156         // Only defined for master at this time, but kept for cross-branch consistency
157         grunt.registerTask( "test_fast", [] );
159         // gh-2133 TODO: cherry-pick 76df9e4e389d80bff410a9e5f08b848de1d21a2f for promises-aplus-tests
160         grunt.registerTask( "test", [ "test_fast"/*, "promises-aplus-tests"*/ ] );
162         // Short list as a high frequency watch task
163         grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] );
165         grunt.registerTask( "default", [ "dev", "test_fast", "compare_size" ] );