module.exports = function (grunt){ "use strict"; var coreFiles = ["core.js", "widget.js", "widgets/mouse.js", "widgets/draggable.js", "widgets/droppable.js", "widgets/resizable.js", "widgets/selectable.js", "widgets/sortable.js", "effect.js"] , uiFiles = coreFiles.map(function (file){ return "ui/" + file; } ).concat(expandFiles("ui/**/*.js").filter(function (file){ return coreFiles.indexOf(file.substring(3)) === -1; } )), allI18nFiles = expandFiles("ui/i18n/*.js"), cssFiles = ["core", "accordion", "autocomplete", "button", "checkboxradio", "controlgroup", "datepicker", "dialog", "draggable", "menu", "progressbar", "resizable", "selectable", "selectmenu", "sortable", "slider", "spinner", "tabs", "tooltip", "theme"] .map(function (component){ return "themes/base/" + component + ".css"; } ), minify = { options: { preserveComments: false } , main: { options: { banner: createBanner(uiFiles)} , files: { "dist/jquery-ui.min.js": "dist/jquery-ui.js"} } , i18n: { options: { banner: createBanner(allI18nFiles)} , files: { "dist/i18n/jquery-ui-i18n.min.js": "dist/i18n/jquery-ui-i18n.js"} } } , compareFiles = { all: ["dist/jquery-ui.js", "dist/jquery-ui.min.js"] } , component = grunt.option("component") || "**", htmllintBad = ["demos/tabs/ajax/content*.html", "demos/tooltip/ajax/content*.html", "tests/unit/core/core.html", "tests/unit/tabs/data/test.html"] ; function mapMinFile(file){ return "dist/" + _AN_Call_replace("replace", file, /ui\//, "minified/"); } function expandFiles(files){ return grunt.util._.pluck(grunt.file.expandMapping(files), "src").map(function (values){ return values[0]; } ); } uiFiles.concat(allI18nFiles).forEach(function (file){ minify[file] = { options: { banner: createBanner()} , files: { } } ; minify[file].files[mapMinFile(file)] = file; } ); uiFiles.forEach(function (file){ compareFiles[file] = [file, mapMinFile(file)] ; } ); require("load-grunt-tasks")(grunt); grunt.loadTasks("build/tasks"); function stripDirectory(file){ return _AN_Call_replace("replace", file, /.+\/(.+?)>?$/, "$1"); } function createBanner(files){ var fileNames = files && files.map(stripDirectory); return "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " + "<%= grunt.template.today('isoDate') %>\n" + "<%= pkg.homepage ? '* ' + pkg.homepage + '\\n' : '' %>" + (files? "* Includes: " + fileNames.join(", ") + "\n": "") + "* Copyright <%= pkg.author.name %>;" + " Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */\n"; } grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), files: { dist: "<%= pkg.name %>-<%= pkg.version %>"} , compare_size: compareFiles, concat: { css: { options: { banner: createBanner(cssFiles), stripBanners: { block: true } } , src: cssFiles, dest: "dist/jquery-ui.css"} } , requirejs: { js: { options: { baseUrl: "./", paths: { jquery: "./external/jquery/jquery", external: "./external/"} , preserveLicenseComments: false , optimize: "none", findNestedDependencies: true , skipModuleInsertion: true , exclude: ["jquery"] , include: expandFiles(["ui/**/*.js", "!ui/core.js", "!ui/i18n/*"] ), out: "dist/jquery-ui.js", wrap: { start: createBanner(uiFiles)} } } } , jscs: { ui: { options: { config: true } , files: { src: ["demos/**/*.js", "build/**/*.js", "ui/**/*.js"] } } , tests: { options: { config: true , maximumLineLength: null } , files: { src: ["tests/**/*.js"] } } } , uglify: minify, htmllint: { good: { options: { ignore: [/The text content of element “script” was not in the required format: Expected space, tab, newline, or slash but found “.” instead/] } , src: ["demos/**/*.html", "tests/**/*.html"] .concat(htmllintBad.map(function (file){ return "!" + file; } ))} , bad: { options: { ignore: [/Start tag seen without seeing a doctype first/, /Element “head” is missing a required instance of child element “title”/, /Element “object” is missing one or more of the following/, /The “codebase” attribute on the “object” element is obsolete/] } , src: htmllintBad} } , qunit: { files: expandFiles("tests/unit/" + component + "/*.html").filter(function (file){ return !(/(all|index|test)\.html$/).test(file); } ), options: { inject: false , page: { viewportSize: { width: 700, height: 500} } } } , jshint: { options: { jshintrc: true } , all: ["ui/*.js", "Gruntfile.js", "build/**/*.js", "tests/unit/**/*.js", "tests/lib/**/*.js", "demos/**/*.js"] } , csslint: { base_theme: { src: "themes/base/*.css", options: { csslintrc: ".csslintrc"} } } , bowercopy: { all: { options: { clean: true , ignore: ["jquery"] , destPrefix: "external"} , files: { "qunit/qunit.js": "qunit/qunit/qunit.js", "qunit/qunit.css": "qunit/qunit/qunit.css", "qunit/LICENSE.txt": "qunit/LICENSE.txt", "qunit-assert-classes/qunit-assert-classes.js": "qunit-assert-classes/qunit-assert-classes.js", "qunit-assert-classes/LICENSE.txt": "qunit-assert-classes/LICENSE", "qunit-assert-close/qunit-assert-close.js": "qunit-assert-close/qunit-assert-close.js", "qunit-assert-close/MIT-LICENSE.txt": "qunit-assert-close/MIT-LICENSE.txt", "qunit-composite/qunit-composite.js": "qunit-composite/qunit-composite.js", "qunit-composite/qunit-composite.css": "qunit-composite/qunit-composite.css", "qunit-composite/LICENSE.txt": "qunit-composite/LICENSE.txt", "requirejs/require.js": "requirejs/require.js", "jquery-mousewheel/jquery.mousewheel.js": "jquery-mousewheel/jquery.mousewheel.js", "jquery-mousewheel/LICENSE.txt": "jquery-mousewheel/LICENSE.txt", "jquery-simulate/jquery.simulate.js": "jquery-simulate/jquery.simulate.js", "jquery-simulate/LICENSE.txt": "jquery-simulate/LICENSE.txt", "jshint/jshint.js": "jshint/dist/jshint.js", "jshint/LICENSE": "jshint/LICENSE", "jquery/jquery.js": "jquery-1.x/dist/jquery.js", "jquery/LICENSE.txt": "jquery-1.x/LICENSE.txt", "jquery-1.7.0/jquery.js": "jquery-1.7.0/jquery.js", "jquery-1.7.0/MIT-LICENSE.txt": "jquery-1.7.0/MIT-LICENSE.txt", "jquery-1.7.1/jquery.js": "jquery-1.7.1/jquery.js", "jquery-1.7.1/MIT-LICENSE.txt": "jquery-1.7.1/MIT-LICENSE.txt", "jquery-1.7.2/jquery.js": "jquery-1.7.2/jquery.js", "jquery-1.7.2/MIT-LICENSE.txt": "jquery-1.7.2/MIT-LICENSE.txt", "jquery-1.8.0/jquery.js": "jquery-1.8.0/jquery.js", "jquery-1.8.0/MIT-LICENSE.txt": "jquery-1.8.0/MIT-LICENSE.txt", "jquery-1.8.1/jquery.js": "jquery-1.8.1/jquery.js", "jquery-1.8.1/MIT-LICENSE.txt": "jquery-1.8.1/MIT-LICENSE.txt", "jquery-1.8.2/jquery.js": "jquery-1.8.2/jquery.js", "jquery-1.8.2/MIT-LICENSE.txt": "jquery-1.8.2/MIT-LICENSE.txt", "jquery-1.8.3/jquery.js": "jquery-1.8.3/jquery.js", "jquery-1.8.3/MIT-LICENSE.txt": "jquery-1.8.3/MIT-LICENSE.txt", "jquery-1.9.0/jquery.js": "jquery-1.9.0/jquery.js", "jquery-1.9.0/MIT-LICENSE.txt": "jquery-1.9.0/MIT-LICENSE.txt", "jquery-1.9.1/jquery.js": "jquery-1.9.1/jquery.js", "jquery-1.9.1/MIT-LICENSE.txt": "jquery-1.9.1/MIT-LICENSE.txt", "jquery-1.10.0/jquery.js": "jquery-1.10.0/jquery.js", "jquery-1.10.0/MIT-LICENSE.txt": "jquery-1.10.0/MIT-LICENSE.txt", "jquery-1.10.1/jquery.js": "jquery-1.10.1/jquery.js", "jquery-1.10.1/MIT-LICENSE.txt": "jquery-1.10.1/MIT-LICENSE.txt", "jquery-1.10.2/jquery.js": "jquery-1.10.2/jquery.js", "jquery-1.10.2/MIT-LICENSE.txt": "jquery-1.10.2/MIT-LICENSE.txt", "jquery-1.11.0/jquery.js": "jquery-1.11.0/dist/jquery.js", "jquery-1.11.0/MIT-LICENSE.txt": "jquery-1.11.0/MIT-LICENSE.txt", "jquery-1.11.1/jquery.js": "jquery-1.11.1/dist/jquery.js", "jquery-1.11.1/MIT-LICENSE.txt": "jquery-1.11.1/MIT-LICENSE.txt", "jquery-1.11.2/jquery.js": "jquery-1.11.2/dist/jquery.js", "jquery-1.11.2/MIT-LICENSE.txt": "jquery-1.11.2/MIT-LICENSE.txt", "jquery-1.11.3/jquery.js": "jquery-1.11.3/dist/jquery.js", "jquery-1.11.3/MIT-LICENSE.txt": "jquery-1.11.3/MIT-LICENSE.txt", "jquery-1.12.0/jquery.js": "jquery-1.12.0/dist/jquery.js", "jquery-1.12.0/LICENSE.txt": "jquery-1.12.0/LICENSE.txt", "jquery-1.12.1/jquery.js": "jquery-1.12.1/dist/jquery.js", "jquery-1.12.1/LICENSE.txt": "jquery-1.12.1/LICENSE.txt", "jquery-1.12.2/jquery.js": "jquery-1.12.2/dist/jquery.js", "jquery-1.12.2/LICENSE.txt": "jquery-1.12.2/LICENSE.txt", "jquery-1.12.3/jquery.js": "jquery-1.12.3/dist/jquery.js", "jquery-1.12.3/LICENSE.txt": "jquery-1.12.3/LICENSE.txt", "jquery-1.12.4/jquery.js": "jquery-1.12.4/dist/jquery.js", "jquery-1.12.4/LICENSE.txt": "jquery-1.12.4/LICENSE.txt", "jquery-2.0.0/jquery.js": "jquery-2.0.0/jquery.js", "jquery-2.0.0/MIT-LICENSE.txt": "jquery-2.0.0/MIT-LICENSE.txt", "jquery-2.0.1/jquery.js": "jquery-2.0.1/jquery.js", "jquery-2.0.1/MIT-LICENSE.txt": "jquery-2.0.1/MIT-LICENSE.txt", "jquery-2.0.2/jquery.js": "jquery-2.0.2/jquery.js", "jquery-2.0.2/MIT-LICENSE.txt": "jquery-2.0.2/MIT-LICENSE.txt", "jquery-2.0.3/jquery.js": "jquery-2.0.3/jquery.js", "jquery-2.0.3/MIT-LICENSE.txt": "jquery-2.0.3/MIT-LICENSE.txt", "jquery-2.1.0/jquery.js": "jquery-2.1.0/dist/jquery.js", "jquery-2.1.0/MIT-LICENSE.txt": "jquery-2.1.0/MIT-LICENSE.txt", "jquery-2.1.1/jquery.js": "jquery-2.1.1/dist/jquery.js", "jquery-2.1.1/MIT-LICENSE.txt": "jquery-2.1.1/MIT-LICENSE.txt", "jquery-2.1.2/jquery.js": "jquery-2.1.2/dist/jquery.js", "jquery-2.1.2/MIT-LICENSE.txt": "jquery-2.1.2/MIT-LICENSE.txt", "jquery-2.1.3/jquery.js": "jquery-2.1.3/dist/jquery.js", "jquery-2.1.3/MIT-LICENSE.txt": "jquery-2.1.3/MIT-LICENSE.txt", "jquery-2.1.4/jquery.js": "jquery-2.1.4/dist/jquery.js", "jquery-2.1.4/MIT-LICENSE.txt": "jquery-2.1.4/MIT-LICENSE.txt", "jquery-2.2.0/jquery.js": "jquery-2.2.0/dist/jquery.js", "jquery-2.2.0/LICENSE.txt": "jquery-2.2.0/LICENSE.txt", "jquery-2.2.1/jquery.js": "jquery-2.2.1/dist/jquery.js", "jquery-2.2.1/LICENSE.txt": "jquery-2.2.1/LICENSE.txt", "jquery-2.2.2/jquery.js": "jquery-2.2.2/dist/jquery.js", "jquery-2.2.2/LICENSE.txt": "jquery-2.2.2/LICENSE.txt", "jquery-2.2.3/jquery.js": "jquery-2.2.3/dist/jquery.js", "jquery-2.2.3/LICENSE.txt": "jquery-2.2.3/LICENSE.txt", "jquery-2.2.4/jquery.js": "jquery-2.2.4/dist/jquery.js", "jquery-2.2.4/LICENSE.txt": "jquery-2.2.4/LICENSE.txt", "jquery-3.0.0/jquery.js": "jquery-3.0.0/dist/jquery.js", "jquery-3.0.0/LICENSE.txt": "jquery-3.0.0/LICENSE.txt", "jquery-3.1.0/jquery.js": "jquery-3.1.0/dist/jquery.js", "jquery-3.1.0/LICENSE.txt": "jquery-3.1.0/LICENSE.txt", "jquery-3.1.1/jquery.js": "jquery-3.1.1/dist/jquery.js", "jquery-3.1.1/LICENSE.txt": "jquery-3.1.1/LICENSE.txt", "jquery-migrate-1.4.1/jquery-migrate.js": "jquery-migrate-1.4.1/dist/jquery-migrate.js", "jquery-migrate-1.4.1/LICENSE.txt": "jquery-migrate-1.4.1/LICENSE.txt", "jquery-migrate-3.0.0/jquery-migrate.js": "jquery-migrate-3.0.0/dist/jquery-migrate.js", "jquery-migrate-3.0.0/LICENSE.txt": "jquery-migrate-3.0.0/LICENSE.txt"} } } , authors: { prior: ["Paul Bakaus ", "Richard Worth ", "Yehuda Katz ", "Sean Catchpole ", "John Resig ", "Tane Piper ", "Dmitri Gaskin ", "Klaus Hartl ", "Stefan Petre ", "Gilles van den Hoven ", "Micheil Bryan Smith ", "Jörn Zaefferer ", "Marc Grabanski ", "Keith Wood ", "Brandon Aaron ", "Scott González ", "Eduardo Lundgren ", "Aaron Eisenberger ", "Joan Piedra ", "Bruno Basto ", "Remy Sharp ", "Bohdan Ganicky "] } } ); grunt.registerTask("update-authors", function (){ var getAuthors = require("grunt-git-authors").getAuthors, done = this.async(); getAuthors({ priorAuthors: grunt.config("authors.prior")} , function (error, authors){ if (error) { grunt.log.error(error); return done(false ); } authors = authors.map(function (author){ if (author.match(/^Jacek Jędrzejewski