123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- module.exports = function (grunt) {
- // Full list of files that must be included by RequireJS
- includes = [
- 'jquery.select2',
- 'almond',
- 'jquery-mousewheel' // shimmed for non-full builds
- ];
- fullIncludes = [
- 'jquery',
- 'select2/compat/containerCss',
- 'select2/compat/dropdownCss',
- 'select2/compat/initSelection',
- 'select2/compat/inputData',
- 'select2/compat/matcher',
- 'select2/compat/query',
- 'select2/dropdown/attachContainer',
- 'select2/dropdown/stopPropagation',
- 'select2/selection/stopPropagation'
- ].concat(includes);
- var i18nModules = [];
- var i18nPaths = {};
- var i18nFiles = grunt.file.expand({
- cwd: 'src/js'
- }, 'select2/i18n/*.js');
- var testFiles = grunt.file.expand('tests/**/*.html');
- var testUrls = testFiles.map(function (filePath) {
- return 'http://localhost:9999/' + filePath;
- });
- var testBuildNumber = "unknown";
- if (process.env.TRAVIS_JOB_ID) {
- testBuildNumber = "travis-" + process.env.TRAVIS_JOB_ID;
- } else {
- var currentTime = new Date();
- testBuildNumber = "manual-" + currentTime.getTime();
- }
- for (var i = 0; i < i18nFiles.length; i++) {
- var file = i18nFiles[i];
- var name = file.split('.')[0];
- i18nModules.push({
- name: name
- });
- i18nPaths[name] = '../../' + name;
- }
- var minifiedBanner = '/*! Select2 <%= package.version %> | https://github.com/select2/select2/blob/master/LICENSE.md */';
- grunt.initConfig({
- package: grunt.file.readJSON('package.json'),
- clean: {
- docs: ['docs/_site']
- },
- concat: {
- 'dist': {
- options: {
- banner: grunt.file.read('src/js/wrapper.start.js'),
- },
- src: [
- 'dist/js/select2.js',
- 'src/js/wrapper.end.js'
- ],
- dest: 'dist/js/select2.js'
- },
- 'dist.full': {
- options: {
- banner: grunt.file.read('src/js/wrapper.start.js'),
- },
- src: [
- 'dist/js/select2.full.js',
- 'src/js/wrapper.end.js'
- ],
- dest: 'dist/js/select2.full.js'
- }
- },
- connect: {
- tests: {
- options: {
- base: '.',
- hostname: '127.0.0.1',
- port: 9999
- }
- }
- },
- uglify: {
- 'dist': {
- src: 'dist/js/select2.js',
- dest: 'dist/js/select2.min.js',
- options: {
- banner: minifiedBanner
- }
- },
- 'dist.full': {
- src: 'dist/js/select2.full.js',
- dest: 'dist/js/select2.full.min.js',
- options: {
- banner: minifiedBanner
- }
- }
- },
- qunit: {
- all: {
- options: {
- urls: testUrls
- }
- }
- },
- 'saucelabs-qunit': {
- all: {
- options: {
- build: testBuildNumber,
- tags: ['tests', 'qunit'],
- urls: testUrls,
- testname: 'QUnit test for Select2',
- browsers: [
- {
- browserName: 'internet explorer',
- version: '8'
- },
- {
- browserName: 'internet explorer',
- version: '9'
- },
- {
- browserName: 'internet explorer',
- version: '10'
- },
- {
- browserName: 'internet explorer',
- version: '11'
- },
- {
- browserName: 'firefox',
- platform: 'linux'
- },
- {
- browserName: 'chrome'
- },
- {
- browserName: 'opera',
- version: '12',
- platform: 'linux'
- }
- ]
- }
- }
- },
- 'gh-pages': {
- options: {
- base: 'docs',
- branch: 'master',
- clone: 'node_modules/grunt-gh-pages/repo',
- message: 'Updated docs with master',
- push: true,
- repo: 'git@github.com:select2/select2.github.io.git'
- },
- src: '**'
- },
- jekyll: {
- options: {
- src: 'docs',
- dest: 'docs/_site'
- },
- build: {
- d: null
- },
- serve: {
- options: {
- serve: true,
- watch: true
- }
- }
- },
- jshint: {
- options: {
- jshintrc: true
- },
- code: {
- src: ['src/js/**/*.js']
- },
- tests: {
- src: ['tests/**/*.js']
- }
- },
- sass: {
- dist: {
- options: {
- outputStyle: 'compressed'
- },
- files: {
- 'dist/css/select2.min.css': [
- 'src/scss/core.scss',
- 'src/scss/theme/default/layout.css'
- ]
- }
- },
- dev: {
- options: {
- outputStyle: 'nested'
- },
- files: {
- 'dist/css/select2.css': [
- 'src/scss/core.scss',
- 'src/scss/theme/default/layout.css'
- ]
- }
- }
- },
- symlink: {
- docs: {
- cwd: 'dist',
- expand: true,
- overwrite: false,
- src: [
- '*'
- ],
- dest: 'docs/dist',
- filter: 'isDirectory'
- }
- },
- requirejs: {
- 'dist': {
- options: {
- baseUrl: 'src/js',
- optimize: 'none',
- name: 'select2/core',
- out: 'dist/js/select2.js',
- include: includes,
- namespace: 'S2',
- paths: {
- 'almond': require.resolve('almond').slice(0, -3),
- 'jquery': 'jquery.shim',
- 'jquery-mousewheel': 'jquery.mousewheel.shim'
- },
- wrap: {
- startFile: 'src/js/banner.start.js',
- endFile: 'src/js/banner.end.js'
- }
- }
- },
- 'dist.full': {
- options: {
- baseUrl: 'src/js',
- optimize: 'none',
- name: 'select2/core',
- out: 'dist/js/select2.full.js',
- include: fullIncludes,
- namespace: 'S2',
- paths: {
- 'almond': require.resolve('almond').slice(0, -3),
- 'jquery': 'jquery.shim',
- 'jquery-mousewheel': require.resolve('jquery-mousewheel').slice(0, -3)
- },
- wrap: {
- startFile: 'src/js/banner.start.js',
- endFile: 'src/js/banner.end.js'
- }
- }
- },
- 'i18n': {
- options: {
- baseUrl: 'src/js/select2/i18n',
- dir: 'dist/js/i18n',
- paths: i18nPaths,
- modules: i18nModules,
- namespace: 'S2',
- wrap: {
- start: minifiedBanner + grunt.file.read('src/js/banner.start.js'),
- end: grunt.file.read('src/js/banner.end.js')
- }
- }
- }
- },
- watch: {
- js: {
- files: [
- 'src/js/select2/**/*.js',
- 'tests/**/*.js'
- ],
- tasks: [
- 'compile',
- 'test',
- 'minify'
- ]
- },
- css: {
- files: [
- 'src/scss/**/*.scss'
- ],
- tasks: [
- 'compile',
- 'minify'
- ]
- }
- }
- });
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-concat');
- grunt.loadNpmTasks('grunt-contrib-connect');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-qunit');
- grunt.loadNpmTasks('grunt-contrib-requirejs');
- grunt.loadNpmTasks('grunt-contrib-symlink');
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-watch');
- grunt.loadNpmTasks('grunt-gh-pages');
- grunt.loadNpmTasks('grunt-jekyll');
- grunt.loadNpmTasks('grunt-saucelabs');
- grunt.loadNpmTasks('grunt-sass');
- grunt.registerTask('default', ['compile', 'test', 'minify']);
- grunt.registerTask('compile', [
- 'requirejs:dist', 'requirejs:dist.full', 'requirejs:i18n',
- 'concat:dist', 'concat:dist.full',
- 'sass:dev'
- ]);
- grunt.registerTask('minify', ['uglify', 'sass:dist']);
- grunt.registerTask('test', ['connect:tests', 'qunit', 'jshint']);
- var ciTasks = [];
- ciTasks.push('compile')
- ciTasks.push('connect:tests');
- // Can't run Sauce Labs tests in pull requests
- if (process.env.TRAVIS_PULL_REQUEST == 'false') {
- ciTasks.push('saucelabs-qunit');
- }
- ciTasks.push('qunit');
- ciTasks.push('jshint');
- grunt.registerTask('ci', ciTasks);
- grunt.registerTask('docs', ['symlink:docs', 'jekyll:serve']);
- grunt.registerTask('docs-release', ['default', 'clean:docs', 'gh-pages']);
- };
|