/* eslint-env node */ module.exports = function (grunt) { // eslint-disable-line var version = "0.2.1" var inputFolder = "./docs" var tempFolder = "./temp" var archiveFolder = "./archive" var outputFolder = "../mithril" var guide = [ "auto-redrawing", "benchmarks", "community", "optimizing-performance", "comparison", "components", "getting-started", "installation", "integration", "practices", "refactoring", "routing", "tools", "web-services", ] var api = [ "change-log", "roadmap", "how-to-read-signatures", "mithril", "mithril.computation", "mithril.deferred", "mithril.mount", "mithril.component", "mithril.prop", "mithril.redraw", "mithril.render", "mithril.deps", "mithril.request", "mithril.route", "mithril.sync", "mithril.trust", "mithril.withAttr", "mithril.xhr", ] var md2htmlTasks = {} function makeTasks(layout, pages) { pages.forEach(function (name) { var src = inputFolder + "/" + name + ".md" var title = "" if (grunt.file.exists(src)) { title = grunt.file.read(src).split(/\n/)[0].substring(3) + " - " } md2htmlTasks[name] = { options: { layout: inputFolder + "/layout/" + layout + ".html", templateData: {topic: title}, }, files: [{ src: [src], dest: tempFolder + "/" + name + ".html", }], } }) } makeTasks("guide", guide) makeTasks("api", api) var currentVersionArchiveFolder = archiveFolder + "/v" + version grunt.initConfig({ // Keep this in sync with the .eslintignore eslint: { options: { extensions: [".js"], fix: true, }, all: [ "**/*.js", "!node_modules/**", "!**/*.min.js", "!archive/**", "!deploy/**", "!mithril.closure-compiler-externs.js", "!docs/layout/lib/**", ], }, mocha_phantomjs: { // eslint-disable-line camelcase test: { src: ["test/index.html"], options: { reporter: "dot", }, }, }, md2html: md2htmlTasks, uglify: { options: { banner: [ "/*", "Mithril v" + version, "http://github.com/lhorie/mithril.js", "(c) Leo Horie", "License: MIT", "*/", ].join("\n"), sourceMap: true, }, mithril: {src: "mithril.js", dest: "mithril.min.js"}, }, zip: { distribution: { cwd: currentVersionArchiveFolder + "/", src: [ currentVersionArchiveFolder + "/mithril.min.js", currentVersionArchiveFolder + "/mithril.min.js.map", currentVersionArchiveFolder + "/mithril.js", ], dest: currentVersionArchiveFolder + "/mithril.min.zip", }, }, replace: { options: { force: true, patterns: [ {match: /\.md/g, replacement: ".html"}, {match: /\$version/g, replacement: version}, ], }, links: { expand: true, flatten: true, src: [tempFolder + "/**/*.html"], dest: currentVersionArchiveFolder + "/", }, index: { src: inputFolder + "/layout/index.html", dest: currentVersionArchiveFolder + "/index.html", }, commonjs: { expand: true, flatten: true, src: [inputFolder + "/layout/*.json"], dest: currentVersionArchiveFolder, }, cdnjs: { src: "deploy/cdnjs-package.json", dest: "../cdnjs/ajax/libs/mithril/package.json", }, }, copy: { style: { src: inputFolder + "/layout/style.css", dest: currentVersionArchiveFolder + "/style.css", }, pages: { src: inputFolder + "/layout/pages.json", dest: currentVersionArchiveFolder + "/pages.json", }, lib: { expand: true, cwd: inputFolder + "/layout/lib/", src: "./**", dest: currentVersionArchiveFolder + "/lib/", }, tools: { expand: true, cwd: inputFolder + "/layout/tools/", src: "./**", dest: currentVersionArchiveFolder + "/tools/", }, comparisons: { expand: true, cwd: inputFolder + "/layout/comparisons/", src: "./**", dest: currentVersionArchiveFolder + "/comparisons/", }, unminified: { src: "mithril.js", dest: currentVersionArchiveFolder + "/mithril.js", }, minified: { src: "mithril.min.js", dest: currentVersionArchiveFolder + "/mithril.min.js", }, readme: { src: "README.md", dest: currentVersionArchiveFolder + "/README.md", }, map: { src: "mithril.min.js.map", dest: currentVersionArchiveFolder + "/mithril.min.js.map", }, typescript: { src: "mithril.d.ts", dest: currentVersionArchiveFolder + "/mithril.d.ts", }, publish: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", dest: outputFolder, }, archive: { expand: true, cwd: currentVersionArchiveFolder, src: "./**", dest: outputFolder + "/archive/v" + version, }, }, "saucelabs-browsers": { firefox: { filter: function (browsers) { return browsers.filter(function (browser) { if (browser.browserName !== "firefox") return false var version = browser.version return version === "dev" || version === "beta" || +version >= 38 // The latest ESR version }) }, }, chrome: { filter: function (browsers) { return browsers.filter(function (browser) { if (browser.browserName !== "chrome") return false var version = browser.version return version === "dev" || version === "beta" || +version >= 41 }) }, }, ie: { filter: function (browsers) { return browsers.filter(function (browser) { return browser.browserName === "internet explorer" && !/2003/.test(browser.platform) }) }, }, edge: { filter: function (browsers) { return browsers.filter(function (browser) { return browser.browserName === "microsoftedge" }) }, }, safari: { filter: function (browsers) { return browsers.filter(function (browser) { return browser.browserName === "safari" }) }, }, opera: { filter: function (browsers) { return browsers.filter(function (browser) { return browser.browserName === "opera" }) }, }, }, saucelabs: { all: { options: { username: process.env.SAUCE_USERNAME, key: process.env.SAUCE_ACCESS_KEY, testname: "Mithril Tests " + new Date().toJSON(), browsers: "<%= saucelabs.browsers %>", urls: ["http://localhost:8000/test/index.html"], sauceConfig: { "record-video": false, "record-screenshots": false, }, build: process.env.TRAVIS_JOB_ID, onTestComplete: function (result, callback) { var user = process.env.SAUCE_USERNAME var pass = process.env.SAUCE_ACCESS_KEY var url = [ "https://saucelabs.com/rest/v1", user, "jobs", result.job_id, ].join("/") require("request").put({ url: url, auth: {user: user, pass: pass}, json: {passed: result.passed}, }, function (error, response) { if (error) { return callback(error) } else if (response.statusCode !== 200) { return callback(new Error( "Unexpected response status: " + response.statusCode + "\n ")) } else { return callback(null, result.passed) } }) }, tunnelTimeout: 5, }, }, }, connect: { server: { options: { port: 8888, base: ".", }, }, }, clean: { options: {force: true}, generated: [tempFolder], }, }) grunt.loadNpmTasks("grunt-saucelabs-browsers") grunt.loadNpmTasks("grunt-contrib-clean") grunt.loadNpmTasks("grunt-contrib-copy") grunt.loadNpmTasks("grunt-contrib-uglify") grunt.loadNpmTasks("grunt-md2html") grunt.loadNpmTasks("grunt-replace") grunt.loadNpmTasks("grunt-zip") grunt.loadNpmTasks("grunt-contrib-connect") grunt.loadNpmTasks("grunt-saucelabs") grunt.loadNpmTasks("grunt-eslint") grunt.loadNpmTasks("grunt-mocha-phantomjs") grunt.registerTask("build", [ "test", "uglify", "zip", "md2html", "replace", "copy", "clean", ]) grunt.registerTask("test", ["eslint:all", "mocha_phantomjs"]) grunt.registerTask("default", ["build"]) grunt.registerTask("sauce", [ "saucelabs-browsers:all", "connect", "saucelabs", ]) }