[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 /* jshint node:true */ 2 /* global module */ 3 module.exports = function( grunt ) { 4 var SOURCE_DIR = 'src/', 5 BUILD_DIR = 'build/', 6 7 BP_CSS = [ 8 '**/*.css' 9 ], 10 11 // CSS exclusions, for excluding files from certain tasks, e.g. rtlcss 12 BP_EXCLUDED_CSS = [ 13 '!**/*-rtl.css' 14 ], 15 16 BP_JS = [ 17 '**/*.js' 18 ], 19 20 BP_EXCLUDED_JS = [ 21 '!**/js/blocks/*.js', 22 '!**/js/blocks/**/*.js', 23 '!**/js/block-*/*.js', 24 '!**/js/block-*/**/*.js', 25 '!**/js/block-*.js', 26 '!**/js/friends.js', 27 '!**/js/dynamic-members.js', 28 '!**/js/dynamic-groups.js', 29 '!**/js/dynamic-widget-block.js', 30 '!**/js/sitewide-notices.js', 31 '!**/bp-core/admin/js/dismissible-admin-notices.js', 32 '!**/bp-members/admin/js/admin.js' 33 ], 34 35 BP_EXCLUDED_MISC = [ 36 ], 37 38 // SASS generated "Twenty*"" CSS files 39 BP_SCSS_CSS_FILES = [ 40 '!bp-templates/bp-legacy/css/twenty*.css', 41 '!bp-templates/bp-nouveau/css/buddypress.css', 42 '!bp-templates/bp-nouveau/css/twenty*.css', 43 '!bp-templates/bp-nouveau/css/primary-nav.css', 44 '!bp-core/admin/css/hello.css', 45 '!bp-members/css/blocks/member.css', 46 '!bp-groups/css/blocks/group.css', 47 '!bp-members/css/blocks/members.css', 48 '!bp-groups/css/blocks/groups.css', 49 '!bp-core/css/blocks/login-form.css', 50 '!bp-activity/css/blocks/latest-activities.css', 51 '!bp-friends/css/blocks/friends.css', 52 '!bp-members/css/blocks/dynamic-members.css', 53 '!bp-groups/css/blocks/dynamic-groups.css', 54 '!bp-messages/css/blocks/sitewide-notices.css', 55 '!bp-blogs/css/blocks/recent-posts.css', 56 '!bp-members/css/blocks/member-avatar-blocks.css' 57 ], 58 59 sass = require('node-sass'); 60 61 require( 'matchdep' ).filterDev( ['grunt-*', '!grunt-legacy-util'] ).forEach( grunt.loadNpmTasks ); 62 grunt.util = require( 'grunt-legacy-util' ); 63 require( 'phplint' ).gruntPlugin( grunt ); 64 65 grunt.initConfig( { 66 pkg: grunt.file.readJSON( 'package.json' ), 67 checkDependencies: { 68 options: { 69 packageManager: 'npm' 70 }, 71 src: {} 72 }, 73 jshint: { 74 options: grunt.file.readJSON( '.jshintrc' ), 75 grunt: { 76 src: ['Gruntfile.js'] 77 }, 78 core: { 79 expand: true, 80 cwd: SOURCE_DIR, 81 src: BP_JS, 82 83 /** 84 * Limit JSHint's run to a single specified file: 85 * 86 * grunt jshint:core --file=filename.js 87 * 88 * Optionally, include the file path: 89 * 90 * grunt jshint:core --file=path/to/filename.js 91 * 92 * @param {String} filepath 93 * @returns {Bool} 94 */ 95 filter: function( filepath ) { 96 var index, file = grunt.option( 'file' ); 97 98 // Don't filter when no target file is specified 99 if ( ! file ) { 100 return true; 101 } 102 103 // Normalise filepath for Windows 104 filepath = filepath.replace( /\\/g, '/' ); 105 index = filepath.lastIndexOf( '/' + file ); 106 107 // Match only the filename passed from cli 108 if ( filepath === file || ( -1 !== index && index === filepath.length - ( file.length + 1 ) ) ) { 109 return true; 110 } 111 112 return false; 113 } 114 } 115 }, 116 sass: { 117 options: { 118 implementation: sass, 119 outputStyle: 'expanded', 120 indentType: 'tab', 121 indentWidth: '1' 122 }, 123 legacy: { 124 cwd: SOURCE_DIR, 125 extDot: 'last', 126 expand: true, 127 ext: '.css', 128 flatten: true, 129 src: ['bp-templates/bp-legacy/css/*.scss'], 130 dest: SOURCE_DIR + 'bp-templates/bp-legacy/css/' 131 }, 132 nouveau: { 133 cwd: SOURCE_DIR, 134 extDot: 'last', 135 expand: true, 136 ext: '.css', 137 flatten: true, 138 src: ['bp-templates/bp-nouveau/sass/buddypress.scss', 'bp-templates/bp-nouveau/sass/twenty*.scss', 'bp-templates/bp-nouveau/sass/primary-nav.scss'], 139 dest: SOURCE_DIR + 'bp-templates/bp-nouveau/css/' 140 }, 141 admin: { 142 cwd: SOURCE_DIR, 143 extDot: 'last', 144 expand: true, 145 ext: '.css', 146 flatten: true, 147 src: ['bp-core/admin/sass/*.scss'], 148 dest: SOURCE_DIR + 'bp-core/admin/css/' 149 }, 150 members_blocks: { 151 cwd: SOURCE_DIR, 152 extDot: 'last', 153 expand: true, 154 ext: '.css', 155 flatten: true, 156 src: ['bp-members/sass/blocks/*.scss'], 157 dest: SOURCE_DIR + 'bp-members/css/blocks/' 158 }, 159 groups_blocks: { 160 cwd: SOURCE_DIR, 161 extDot: 'last', 162 expand: true, 163 ext: '.css', 164 flatten: true, 165 src: ['bp-groups/sass/blocks/*.scss'], 166 dest: SOURCE_DIR + 'bp-groups/css/blocks/' 167 }, 168 core_blocks: { 169 cwd: SOURCE_DIR, 170 extDot: 'last', 171 expand: true, 172 ext: '.css', 173 flatten: true, 174 src: ['bp-core/sass/blocks/*.scss'], 175 dest: SOURCE_DIR + 'bp-core/css/blocks/' 176 }, 177 activity_blocks: { 178 cwd: SOURCE_DIR, 179 extDot: 'last', 180 expand: true, 181 ext: '.css', 182 flatten: true, 183 src: ['bp-activity/sass/blocks/*.scss'], 184 dest: SOURCE_DIR + 'bp-activity/css/blocks/' 185 }, 186 friends_blocks: { 187 cwd: SOURCE_DIR, 188 extDot: 'last', 189 expand: true, 190 ext: '.css', 191 flatten: true, 192 src: ['bp-friends/sass/blocks/*.scss'], 193 dest: SOURCE_DIR + 'bp-friends/css/blocks/' 194 }, 195 messages_blocks: { 196 cwd: SOURCE_DIR, 197 extDot: 'last', 198 expand: true, 199 ext: '.css', 200 flatten: true, 201 src: ['bp-messages/sass/blocks/*.scss'], 202 dest: SOURCE_DIR + 'bp-messages/css/blocks/' 203 }, 204 blogs_blocks: { 205 cwd: SOURCE_DIR, 206 extDot: 'last', 207 expand: true, 208 ext: '.css', 209 flatten: true, 210 src: ['bp-blogs/sass/blocks/*.scss'], 211 dest: SOURCE_DIR + 'bp-blogs/css/blocks/' 212 } 213 }, 214 rtlcss: { 215 options: { 216 opts: { 217 processUrls: false, 218 autoRename: false, 219 clean: true 220 }, 221 saveUnmodified: true 222 }, 223 core: { 224 expand: true, 225 cwd: SOURCE_DIR, 226 dest: SOURCE_DIR, 227 extDot: 'last', 228 ext: '-rtl.css', 229 src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC ) 230 } 231 }, 232 checktextdomain: { 233 options: { 234 correct_domain: false, 235 text_domain: 'buddypress', 236 keywords: [ 237 '__:1,2d', 238 '_e:1,2d', 239 '_x:1,2c,3d', 240 '_n:1,2,4d', 241 '_ex:1,2c,3d', 242 '_nx:1,2,4c,5d', 243 'esc_attr__:1,2d', 244 'esc_attr_e:1,2d', 245 'esc_attr_x:1,2c,3d', 246 'esc_html__:1,2d', 247 'esc_html_e:1,2d', 248 'esc_html_x:1,2c,3d', 249 '_n_noop:1,2,3d', 250 '_nx_noop:1,2,3c,4d' 251 ] 252 }, 253 files: { 254 cwd: SOURCE_DIR, 255 src: ['**/*.php'].concat( BP_EXCLUDED_MISC ), 256 expand: true 257 } 258 }, 259 imagemin: { 260 core: { 261 expand: true, 262 cwd: SOURCE_DIR, 263 src: ['**/*.{gif,jpg,jpeg,png}'].concat( BP_EXCLUDED_MISC ), 264 dest: SOURCE_DIR 265 } 266 }, 267 clean: { 268 all: [ BUILD_DIR ], 269 bp_rest: [ BUILD_DIR + 'bp-rest/' ], 270 cli: [ 271 BUILD_DIR + 'cli/features/', 272 BUILD_DIR + 'cli/*.{yml,json,lock,xml,xml.dist,md}', 273 BUILD_DIR + 'cli/{.gitignore,.distignore,.editorconfig,.travis.yml}' 274 ] 275 }, 276 copy: { 277 files: { 278 files: [ 279 { 280 cwd: SOURCE_DIR, 281 dest: BUILD_DIR, 282 dot: true, 283 expand: true, 284 src: ['**', '!**/.{svn,git,cache}/**', '!js/**'].concat( BP_EXCLUDED_MISC ) 285 }, 286 { 287 dest: BUILD_DIR, 288 dot: true, 289 expand: true, 290 src: ['composer.json'] 291 } 292 ] 293 }, 294 bp_rest_components: { 295 cwd: BUILD_DIR + 'bp-rest/includes/', 296 dest: BUILD_DIR, 297 dot: true, 298 expand: true, 299 src: ['**/bp-activity/**', '**/bp-blogs/**', '**/bp-friends/**', '**/bp-groups/**', '**/bp-members/**', '**/bp-messages/**', '**/bp-notifications/**', '**/bp-settings/**', '**/bp-xprofile/**'], 300 options: { 301 process : function( content ) { 302 return content.replace( /\@since 0\.1\.0/g, '@since 5.0.0' ); 303 } 304 } 305 }, 306 bp_rest_core: { 307 cwd: BUILD_DIR + 'bp-rest/includes/', 308 dest: BUILD_DIR + 'bp-core/classes/', 309 dot: true, 310 expand: true, 311 flatten: true, 312 filter: 'isFile', 313 src: ['**', '!functions.php', '!**/bp-activity/**', '!**/bp-blogs/**', '!**/bp-friends/**', '!**/bp-groups/**', '!**/bp-members/**', '!**/bp-messages/**', '!**/bp-notifications/**', '!**/bp-settings/**', '!**/bp-xprofile/**'], 314 options: { 315 process : function( content ) { 316 return content.replace( /\@since 0\.1\.0/g, '@since 5.0.0' ); 317 } 318 } 319 } 320 }, 321 uglify: { 322 core: { 323 cwd: BUILD_DIR, 324 dest: BUILD_DIR, 325 extDot: 'last', 326 expand: true, 327 ext: '.min.js', 328 src: BP_JS.concat( BP_EXCLUDED_JS, BP_EXCLUDED_MISC ) 329 } 330 }, 331 stylelint: { 332 css: { 333 options: { 334 configFile: '.stylelintrc', 335 format: 'css' 336 }, 337 expand: true, 338 cwd: SOURCE_DIR, 339 src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC, BP_SCSS_CSS_FILES ) 340 }, 341 scss: { 342 options: { 343 configFile: '.stylelintrc', 344 format: 'scss' 345 }, 346 expand: true, 347 cwd: SOURCE_DIR, 348 src: [ '**/*.scss' ] 349 } 350 }, 351 phplint: { 352 files: ['src/**/*.php'].concat( BP_EXCLUDED_MISC ), 353 options: { 354 stdout: false, 355 stderr: true 356 } 357 }, 358 postcss: { 359 options: { 360 map: false, 361 processors: [ 362 require('autoprefixer')( { 363 cascade: false 364 } ) 365 ], 366 failOnError: false 367 }, 368 css: { 369 expand: true, 370 cwd: SOURCE_DIR, 371 dest: SOURCE_DIR, 372 src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC ) 373 } 374 }, 375 cssmin: { 376 minify: { 377 cwd: BUILD_DIR, 378 dest: BUILD_DIR, 379 extDot: 'last', 380 expand: true, 381 ext: '.min.css', 382 src: BP_CSS 383 } 384 }, 385 phpunit: { 386 'default': { 387 cmd: './vendor/phpunit/phpunit/phpunit', 388 args: ['-c', 'phpunit.xml.dist'] 389 }, 390 'multisite': { 391 cmd: './vendor/phpunit/phpunit/phpunit', 392 args: ['-c', 'tests/phpunit/multisite.xml'] 393 }, 394 'codecoverage': { 395 cmd: './vendor/phpunit/phpunit/phpunit', 396 args: ['-c', 'tests/phpunit/codecoverage.xml' ] 397 } 398 }, 399 exec: { 400 bpdefault: { 401 command: 'svn export --force https://github.com/buddypress/BP-Default.git/trunk bp-themes/bp-default', 402 cwd: BUILD_DIR, 403 stdout: false 404 }, 405 cli: { 406 command: 'svn export --force https://github.com/buddypress/wp-cli-buddypress.git/tags/2.0.1 cli', 407 cwd: BUILD_DIR, 408 stdout: false 409 }, 410 phpcompat: { 411 command: './vendor/bin/phpcs -p --standard=PHPCompatibilityWP --extensions=php --runtime-set testVersion 5.6- src tests', 412 stdout: true 413 }, 414 rest_api: { 415 command: 'svn export --force https://github.com/buddypress/BP-REST.git/trunk bp-rest', 416 cwd: BUILD_DIR, 417 stdout: false 418 }, 419 makepot: { 420 command: 'wp i18n make-pot build build/buddypress.pot --headers=\'{"Project-Id-Version": "BuddyPress", "Report-Msgid-Bugs-To": "https://buddypress.trac.wordpress.org", "Last-Translator": "JOHN JAMES JACOBY <jjj@buddypress.org>", "Language-Team": "ENGLISH <jjj@buddypress.org>"}\'', 421 stdout: true 422 }, 423 blocks_src: { 424 command: 'npm run dev', 425 cwd: SOURCE_DIR, 426 stdout: true 427 }, 428 blocks_build: { 429 command: 'npm run build', 430 cwd: SOURCE_DIR, 431 stdout: true 432 } 433 }, 434 jsvalidate:{ 435 options:{ 436 globals: {}, 437 esprimaOptions:{}, 438 verbose: false 439 }, 440 build: { 441 files: { 442 src: [BUILD_DIR + '/**/*.js'].concat( BP_EXCLUDED_JS, BP_EXCLUDED_MISC ) 443 } 444 }, 445 src: { 446 files: { 447 src: [SOURCE_DIR + '/**/*.js'].concat( BP_EXCLUDED_JS, BP_EXCLUDED_MISC ) 448 } 449 } 450 }, 451 patch: { 452 options: { 453 tracUrl: 'buddypress.trac.wordpress.org' 454 } 455 }, 456 upload_patch: { 457 options: { 458 tracUrl: 'buddypress.trac.wordpress.org' 459 } 460 } 461 }); 462 463 /** 464 * Register tasks. 465 */ 466 grunt.registerTask( 'src', ['checkDependencies', 'jsvalidate:src', 'jshint', 'stylelint', 'sass', 'postcss', 'rtlcss'] ); 467 grunt.registerTask( 'style', ['stylelint', 'sass', 'postcss', 'rtlcss'] ); 468 grunt.registerTask( 'makepot', ['exec:makepot'] ); 469 grunt.registerTask( 'commit', ['src', 'checktextdomain', 'imagemin', 'phplint', 'exec:phpcompat'] ); 470 grunt.registerTask( 'commit:blocks', ['commit', 'exec:blocks_src'] ); 471 grunt.registerTask( 'bp_rest', [ 'exec:rest_api', 'copy:bp_rest_components', 'copy:bp_rest_core', 'clean:bp_rest' ] ); 472 grunt.registerTask( 'build', ['commit', 'clean:all', 'copy:files', 'uglify:core', 'jsvalidate:build', 'exec:blocks_build', 'cssmin', 'bp_rest', 'makepot', 'exec:bpdefault', 'exec:cli', 'clean:cli'] ); 473 grunt.registerTask( 'release', ['build'] ); 474 475 // Testing tasks. 476 grunt.registerMultiTask( 'phpunit', 'Runs PHPUnit tests, including the ajax and multisite tests.', function() { 477 grunt.util.spawn( { 478 args: this.data.args, 479 cmd: this.data.cmd, 480 opts: { stdio: 'inherit' } 481 }, this.async() ); 482 }); 483 484 grunt.registerTask( 'test', 'Run all unit test tasks.', ['phpunit:default', 'phpunit:multisite'] ); 485 486 grunt.registerTask( 'jstest', 'Runs all JavaScript tasks.', [ 'jsvalidate:src', 'jshint' ] ); 487 488 // Patch task. 489 grunt.renameTask( 'patch_wordpress', 'patch' ); 490 491 // Default task. 492 grunt.registerTask( 'default', ['src'] ); 493 };
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sat Dec 21 01:00:58 2024 | Cross-referenced by PHPXref 0.7.1 |