UNPKG

alpaca

Version:

Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide

200 lines (178 loc) 5.13 kB
module.exports = function (grunt) { var semver = require('semver'), f = require('util').format; grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), version: '<%= pkg.version %>', banner: [ '/*!', ' * bootstrap-tokenfield <%= version %>', ' * https://github.com/sliptree/bootstrap-tokenfield', ' * Copyright 2013-2014 Sliptree and other contributors; Licensed MIT', ' */\n\n' ].join('\n'), copy: { dist: { files: { 'dist/<%= pkg.name %>.js': 'js/<%= pkg.name %>.js' } }, assets: { files: [{ expand: true, flatten: true, src: [ 'bower_components/bootstrap/js/affix.js', 'bower_components/bootstrap/js/scrollspy.js', 'bower_components/typeahead.js/dist/typeahead.bundle.min.js' ], dest: 'docs-assets/js/' }] } }, uglify: { options: { banner: '<%= banner %>' }, dist: { files: { 'dist/<%= pkg.name %>.min.js': 'dist/<%= pkg.name %>.js' } }, docs: { files: { 'docs-assets/js/docs.min.js': 'docs-assets/js/docs.js' } } }, less: { compile: { files: { 'dist/css/<%= pkg.name %>.css': 'less/<%= pkg.name %>.less', 'dist/css/tokenfield-typeahead.css': 'less/tokenfield-typeahead.less' } }, minify: { options: { cleancss: true, report: 'min' }, files: { 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', 'dist/css/tokenfield-typeahead.min.css': 'dist/css/tokenfield-typeahead.css' } } }, jekyll: { docs: {} }, watch: { copy: { files: 'js/**/*', tasks: ['copy'] }, less: { files: 'less/**/*', tasks: ['less'] }, jekyll: { files: ['dist/**/*', 'index.html', 'docs-assets/**/*'], tasks: ['uglify:docs', 'jekyll'] }, livereload: { options: { livereload: true }, files: ['dist/**/*'], } }, exec: { 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' }, update_docs: { cmd: [ 'git checkout gh-pages', 'git reset master --hard', 'sed -i.bak \'s/%VERSION%/v<%= version %>/\' index.html', 'rm -rf index.html.bak', 'git add index.html', 'git commit -m "Update docs to <%= version %>"', 'git checkout master' ].join(' && ') }, npm_publish: { cmd: 'npm publish' } } }); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-jekyll'); grunt.loadNpmTasks('grunt-sed'); grunt.loadNpmTasks('grunt-exec'); grunt.registerTask('manifests', 'Update manifests.', function(version) { var _ = grunt.util._, pkg = grunt.file.readJSON('package.json'), bower = grunt.file.readJSON('bower.json'), jqueryPlugin = grunt.file.readJSON('bootstrap-tokenfield.jquery.json'); bower = JSON.stringify(_.extend(bower, { 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('bower.json', bower); grunt.file.write('bootstrap-tokenfield.jquery.json', jqueryPlugin); }); 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', 'manifests:' + version, 'build', 'exec:git_add', 'exec:git_commit:' + version, 'exec:git_tag:' + version, 'exec:update_docs' //'exec:git_push', //'exec:npm_publish', ]); }); // Build task grunt.registerTask('build', ['copy', 'uglify', 'less']); }