mirror of
https://github.com/zhigang1992/typeahead.js.git
synced 2026-01-12 22:53:14 +08:00
235 lines
5.8 KiB
JavaScript
235 lines
5.8 KiB
JavaScript
var semver = require('semver'),
|
|
f = require('util').format,
|
|
jsFiles = [
|
|
'src/version.js',
|
|
'src/utils.js',
|
|
'src/event_target.js',
|
|
'src/event_bus.js',
|
|
'src/persistent_storage.js',
|
|
'src/request_cache.js',
|
|
'src/transport.js',
|
|
'src/dataset.js',
|
|
'src/input_view.js',
|
|
'src/dropdown_view.js',
|
|
'src/typeahead_view.js',
|
|
'src/typeahead.js'
|
|
];
|
|
|
|
module.exports = function(grunt) {
|
|
grunt.initConfig({
|
|
version: grunt.file.readJSON('package.json').version,
|
|
|
|
buildDir: 'dist',
|
|
|
|
banner: [
|
|
'/*!',
|
|
' * typeahead.js <%= version %>',
|
|
' * https://github.com/twitter/typeahead',
|
|
' * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT',
|
|
' */\n\n'
|
|
].join('\n'),
|
|
|
|
uglify: {
|
|
options: {
|
|
banner: '<%= banner %>',
|
|
enclose: { 'window.jQuery': '$' }
|
|
},
|
|
js: {
|
|
options: {
|
|
mangle: false,
|
|
beautify: true,
|
|
compress: false
|
|
},
|
|
src: jsFiles,
|
|
dest: '<%= buildDir %>/typeahead.js'
|
|
},
|
|
jsmin: {
|
|
options: {
|
|
mangle: true,
|
|
compress: true
|
|
},
|
|
src: jsFiles,
|
|
dest: '<%= buildDir %>/typeahead.min.js'
|
|
}
|
|
},
|
|
|
|
sed: {
|
|
version: {
|
|
pattern: '%VERSION%',
|
|
replacement: '<%= version %>',
|
|
path: ['<%= uglify.js.dest %>', '<%= uglify.jsmin.dest %>']
|
|
}
|
|
},
|
|
|
|
jshint: {
|
|
options: {
|
|
jshintrc: '.jshintrc'
|
|
},
|
|
src: jsFiles,
|
|
tests: ['test/*.js'],
|
|
gruntfile: ['Gruntfile.js']
|
|
},
|
|
|
|
watch: {
|
|
js: {
|
|
files: jsFiles,
|
|
tasks: 'build:js'
|
|
}
|
|
},
|
|
|
|
jasmine: {
|
|
js: {
|
|
src: jsFiles,
|
|
options: {
|
|
specs: 'test/*_spec.js',
|
|
helpers: 'test/helpers/*',
|
|
vendor: 'test/vendor/*'
|
|
}
|
|
}
|
|
},
|
|
|
|
exec: {
|
|
open_spec_runner: {
|
|
cmd: 'open _SpecRunner.html'
|
|
},
|
|
git_is_clean: {
|
|
cmd: 'test -z "$(git status --porcelain)"'
|
|
},
|
|
git_on_master: {
|
|
cmd: 'test $(git symbolic-ref --short -q HEAD) = master'
|
|
},
|
|
git_add: {
|
|
cmd: 'git add .'
|
|
},
|
|
git_commit: {
|
|
cmd: function(m) { return f('git commit -m "%s"', m); }
|
|
},
|
|
git_tag: {
|
|
cmd: function(v) { return f('git tag v%s -am "%s"', v, v); }
|
|
},
|
|
git_push: {
|
|
cmd: 'git push && git push --tags'
|
|
},
|
|
publish_assets: {
|
|
cmd: [
|
|
'cp -r <%= buildDir %> typeahead.js',
|
|
'zip -r typeahead.js/typeahead.js.zip typeahead.js',
|
|
'git checkout gh-pages',
|
|
'rm -rf releases/latest',
|
|
'cp -r typeahead.js releases/<%= version %>',
|
|
'cp -r typeahead.js releases/latest',
|
|
'git add releases/<%= version %> releases/latest',
|
|
'sed -E -i "" \'s/v[0-9]+\\.[0-9]+\\.[0-9]+/v<%= version %>/\' index.html',
|
|
'git add index.html',
|
|
'git commit -m "Add assets for <%= version %>."',
|
|
'git push',
|
|
'git checkout -',
|
|
'rm -rf typeahead.js'
|
|
].join(' && ')
|
|
}
|
|
},
|
|
|
|
clean: {
|
|
dist: 'dist'
|
|
},
|
|
|
|
connect: {
|
|
server: {
|
|
options: {
|
|
port: 8888, keepalive: true
|
|
}
|
|
}
|
|
},
|
|
|
|
parallel: {
|
|
dev: [
|
|
{ grunt: true, args: ['server'] },
|
|
{ grunt: true, args: ['watch'] }
|
|
]
|
|
}
|
|
});
|
|
|
|
grunt.registerTask('release', 'Ship it.', function(version) {
|
|
var curVersion = grunt.config.get('version');
|
|
|
|
version = semver.inc(curVersion, version) || version;
|
|
|
|
if (!semver.valid(version) || semver.lte(version, curVersion)) {
|
|
grunt.fatal('invalid version dummy');
|
|
}
|
|
|
|
grunt.config.set('version', version);
|
|
|
|
grunt.task.run([
|
|
'exec:git_on_master',
|
|
'exec:git_is_clean',
|
|
'lint',
|
|
'test',
|
|
'manifests:' + version,
|
|
'build',
|
|
'exec:git_add',
|
|
'exec:git_commit:' + version,
|
|
'exec:git_tag:' + version,
|
|
'exec:git_push',
|
|
'exec:publish_assets'
|
|
]);
|
|
});
|
|
|
|
grunt.registerTask('manifests', 'Update manifests.', function(version) {
|
|
var _ = grunt.util._,
|
|
pkg = grunt.file.readJSON('package.json'),
|
|
component = grunt.file.readJSON('component.json'),
|
|
jqueryPlugin = grunt.file.readJSON('typeahead.js.jquery.json');
|
|
|
|
component = JSON.stringify(_.extend(component, {
|
|
name: pkg.name,
|
|
version: version
|
|
}), null, 2);
|
|
|
|
jqueryPlugin = JSON.stringify(_.extend(jqueryPlugin, {
|
|
name: pkg.name,
|
|
title: pkg.name,
|
|
version: version,
|
|
author: pkg.author,
|
|
description: pkg.description,
|
|
keywords: pkg.keywords,
|
|
homepage: pkg.homepage,
|
|
bugs: pkg.bugs,
|
|
maintainers: pkg.contributors
|
|
}), null, 2);
|
|
|
|
pkg = JSON.stringify(_.extend(pkg, {
|
|
version: version
|
|
}), null, 2);
|
|
|
|
grunt.file.write('package.json', pkg);
|
|
grunt.file.write('component.json', component);
|
|
grunt.file.write('typeahead.js.jquery.json', jqueryPlugin);
|
|
});
|
|
|
|
// aliases
|
|
// -------
|
|
|
|
grunt.registerTask('default', 'build');
|
|
grunt.registerTask('build', ['uglify', 'sed:version']);
|
|
grunt.registerTask('server', 'connect:server');
|
|
grunt.registerTask('lint', 'jshint');
|
|
grunt.registerTask('test', 'jasmine:js');
|
|
grunt.registerTask('test:browser', ['jasmine:js:build', 'exec:open_spec_runner']);
|
|
grunt.registerTask('dev', 'parallel:dev');
|
|
|
|
// load tasks
|
|
// ----------
|
|
|
|
grunt.loadNpmTasks('grunt-sed');
|
|
grunt.loadNpmTasks('grunt-exec');
|
|
grunt.loadNpmTasks('grunt-parallel');
|
|
grunt.loadNpmTasks('grunt-contrib-watch');
|
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
|
grunt.loadNpmTasks('grunt-contrib-jshint');
|
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
|
grunt.loadNpmTasks('grunt-contrib-jasmine');
|
|
};
|