mirror of https://github.com/metafizzy/isotope
David DeSandro
9 years ago
3 changed files with 147 additions and 94 deletions
@ -1,87 +0,0 @@
|
||||
/*jshint node: true, strict: false */ |
||||
|
||||
// -------------------------- grunt -------------------------- //
|
||||
|
||||
module.exports = function( grunt ) { |
||||
|
||||
var banner = ( function() { |
||||
var src = grunt.file.read('js/isotope.js'); |
||||
var re = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); |
||||
var matches = src.match( re ); |
||||
var banner = matches[0].replace( 'Isotope', 'Isotope PACKAGED' ); |
||||
return banner; |
||||
})(); |
||||
|
||||
grunt.initConfig({ |
||||
// ----- global settings ----- //
|
||||
namespace: 'isotope', |
||||
dataDir: 'tasks/data', |
||||
|
||||
// ----- tasks settings ----- //
|
||||
|
||||
jshint: { |
||||
docs: [ 'js/**/*.js' ], |
||||
options: grunt.file.readJSON('.jshintrc') |
||||
}, |
||||
|
||||
requirejs: { |
||||
pkgd: { |
||||
options: { |
||||
baseUrl: 'bower_components', |
||||
include: [ |
||||
'jquery-bridget/jquery-bridget', |
||||
'isotope/js/isotope' |
||||
], |
||||
out: 'dist/isotope.pkgd.js', |
||||
optimize: 'none', |
||||
paths: { |
||||
isotope: '../', |
||||
jquery: 'empty:' |
||||
}, |
||||
wrap: { |
||||
start: banner |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
|
||||
uglify: { |
||||
pkgd: { |
||||
files: { |
||||
'dist/isotope.pkgd.min.js': [ 'dist/isotope.pkgd.js' ] |
||||
}, |
||||
options: { |
||||
banner: banner |
||||
} |
||||
} |
||||
} |
||||
|
||||
}); |
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint'); |
||||
grunt.loadNpmTasks('grunt-contrib-uglify'); |
||||
grunt.loadNpmTasks('grunt-requirejs'); |
||||
|
||||
grunt.registerTask( 'pkgd-edit', function() { |
||||
var outFile = grunt.config.get('requirejs.pkgd.options.out'); |
||||
var contents = grunt.file.read( outFile ); |
||||
// get requireJS definition code
|
||||
var definitionRE = /define\(\s*'isotope\/js\/isotope'(.|\n)+function\( Outlayer/; |
||||
var definition = contents.match( definitionRE )[0]; |
||||
// remove name module
|
||||
var fixDefinition = definition.replace( "'isotope/js/isotope',", '' ) |
||||
// ./item -> isotope/js/item
|
||||
.replace( /'.\//g, "'isotope/js/" ); |
||||
contents = contents.replace( definition, fixDefinition ); |
||||
grunt.file.write( outFile, contents ); |
||||
grunt.log.writeln( 'Edited ' + outFile ); |
||||
}); |
||||
|
||||
grunt.registerTask( 'default', [ |
||||
'jshint', |
||||
'requirejs', |
||||
'pkgd-edit', |
||||
'uglify' |
||||
]); |
||||
|
||||
}; |
@ -0,0 +1,135 @@
|
||||
/*jshint node: true, strict: false */ |
||||
|
||||
var fs = require('fs'); |
||||
var gulp = require('gulp'); |
||||
var rename = require('gulp-rename'); |
||||
var replace = require('gulp-replace'); |
||||
|
||||
// ----- hint ----- //
|
||||
|
||||
var jshint = require('gulp-jshint'); |
||||
|
||||
gulp.task( 'hint-js', function() { |
||||
return gulp.src('js/*.js') |
||||
.pipe( jshint() ) |
||||
.pipe( jshint.reporter('default') ); |
||||
}); |
||||
|
||||
gulp.task( 'hint-test', function() { |
||||
return gulp.src('test/unit/*.js') |
||||
.pipe( jshint() ) |
||||
.pipe( jshint.reporter('default') ); |
||||
}); |
||||
|
||||
gulp.task( 'hint-task', function() { |
||||
return gulp.src('gulpfile.js') |
||||
.pipe( jshint() ) |
||||
.pipe( jshint.reporter('default') ); |
||||
}); |
||||
|
||||
var jsonlint = require('gulp-json-lint'); |
||||
|
||||
gulp.task( 'jsonlint', function() { |
||||
return gulp.src( '*.json' ) |
||||
.pipe( jsonlint() ) |
||||
.pipe( jsonlint.report('verbose') ); |
||||
}); |
||||
|
||||
gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]); |
||||
|
||||
// -------------------------- make pkgd -------------------------- //
|
||||
|
||||
// regex for banner comment
|
||||
var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); |
||||
|
||||
function getBanner() { |
||||
var src = fs.readFileSync( 'js/isotope.js', 'utf8' ); |
||||
var matches = src.match( reBannerComment ); |
||||
var banner = matches[0].replace( 'Isotope', 'Isotope PACKAGED' ); |
||||
return banner; |
||||
} |
||||
|
||||
function addBanner( str ) { |
||||
return replace( /^/, str ); |
||||
} |
||||
|
||||
var rjsOptimize = require('gulp-requirejs-optimize'); |
||||
|
||||
gulp.task( 'requirejs', function() { |
||||
var banner = getBanner(); |
||||
// HACK src is not needed
|
||||
// should refactor rjsOptimize to produce src
|
||||
return gulp.src('js/isotope.js') |
||||
.pipe( rjsOptimize({ |
||||
baseUrl: 'bower_components', |
||||
optimize: 'none', |
||||
include: [ |
||||
'jquery-bridget/jquery-bridget', |
||||
'isotope/isotope' |
||||
], |
||||
paths: { |
||||
isotope: '../js/', |
||||
jquery: 'empty:' |
||||
} |
||||
}) ) |
||||
// remove named module
|
||||
.pipe( replace( "'isotope/isotope',", '' ) ) |
||||
// add banner
|
||||
.pipe( addBanner( banner ) ) |
||||
.pipe( rename('isotope.pkgd.js') ) |
||||
.pipe( gulp.dest('dist') ); |
||||
}); |
||||
|
||||
|
||||
// ----- uglify ----- //
|
||||
|
||||
var uglify = require('gulp-uglify'); |
||||
|
||||
gulp.task( 'uglify', [ 'requirejs' ], function() { |
||||
var banner = getBanner(); |
||||
gulp.src('dist/isotope.pkgd.js') |
||||
.pipe( uglify() ) |
||||
// add banner
|
||||
.pipe( addBanner( banner ) ) |
||||
.pipe( rename('isotope.pkgd.min.js') ) |
||||
.pipe( gulp.dest('dist') ); |
||||
}); |
||||
|
||||
// ----- version ----- //
|
||||
|
||||
// set version in source files
|
||||
|
||||
var minimist = require('minimist'); |
||||
var gutil = require('gulp-util'); |
||||
var chalk = require('chalk'); |
||||
|
||||
// use gulp version -t 1.2.3
|
||||
gulp.task( 'version', function() { |
||||
var args = minimist( process.argv.slice(3) ); |
||||
var version = args.t; |
||||
if ( !version || !/^\d\.\d+\.\d+/.test( version ) ) { |
||||
gutil.log( 'invalid version: ' + chalk.red( version ) ); |
||||
return; |
||||
} |
||||
gutil.log( 'ticking version to ' + chalk.green( version ) ); |
||||
|
||||
gulp.src('js/isotope.js') |
||||
.pipe( replace( /Packery v\d\.\d+\.\d+/, 'Isotope v' + version ) ) |
||||
.pipe( gulp.dest('js') ); |
||||
|
||||
gulp.src( [ 'package.json' ] ) |
||||
.pipe( replace( /"version": "\d\.\d+\.\d+"/, '"version": "' + version + '"' ) ) |
||||
.pipe( gulp.dest('.') ); |
||||
// replace CDN links in README
|
||||
var minorVersion = version.match( /^\d\.\d+/ )[0]; |
||||
gulp.src('README.mdown') |
||||
.pipe( replace( /isotope-layout@\d\.\d+/g, 'isotope-layout@' + minorVersion )) |
||||
.pipe( gulp.dest('.') ); |
||||
}); |
||||
|
||||
// ----- default ----- //
|
||||
|
||||
gulp.task( 'default', [ |
||||
'hint', |
||||
'uglify' |
||||
]); |
Loading…
Reference in new issue