Do some local style modifications and profile.

1. Do some temporary style modifications to help make the code more readable
   for profiling (with help from ESLint).
2. Profile the code, and optimize accordingly.
This commit is contained in:
impinball 2015-07-09 16:14:08 -04:00
parent 83a30a4d3c
commit 9ae592ee4d
12 changed files with 4426 additions and 2695 deletions

View file

@ -1,14 +1,15 @@
/* eslint-env node */
module.exports = function(grunt) {
_ = require('lodash');
"use strict"
var version = "0.2.0";
var _ = require("lodash")
var version = "0.4.0"
var inputFolder = "./docs";
var tempFolder = "./temp";
var archiveFolder = "./archive";
var outputFolder = "../mithril";
var inputFolder = "./docs"
var tempFolder = "./temp"
var archiveFolder = "./archive"
var outputFolder = "../mithril"
var guideLayout = "guide";
var guide = [
"auto-redrawing",
"benchmarks",
@ -24,8 +25,7 @@ module.exports = function(grunt) {
"routing",
"tools",
"web-services"
];
var apiLayout = "api";
]
var api = [
"change-log",
"roadmap",
@ -45,55 +45,68 @@ module.exports = function(grunt) {
"mithril.trust",
"mithril.withAttr",
"mithril.xhr"
];
]
var md2htmlTasks = {};
var md2htmlTasks = {}
var makeTasks = function(layout, pages) {
pages.map(function(name) {
var src = inputFolder + "/" + name + ".md";
var title = (grunt.file.exists(src)) ? grunt.file.read(src).split(/\n/)[0].substring(3) + ' - ' : '';
var src = inputFolder + "/" + name + ".md"
var title
if (grunt.file.exist(src)) {
title = grunt.file.read(src)
.split(/\n/)[0]
.substring(3) + " - "
} else {
title = ""
}
md2htmlTasks[name] = {
options: {layout: inputFolder + "/layout/" + layout + ".html", templateData: { "topic": title }},
options: {
layout: inputFolder + "/layout/" + layout + ".html",
templateData: { "topic": title }
},
files: [{src: [src], dest: tempFolder + "/" + name + ".html"}]
}
})
};
makeTasks("guide", guide);
makeTasks("api", api);
}
makeTasks("guide", guide)
makeTasks("api", api)
var sauceBrowsers =[
{ browserName: 'firefox', version: '19', platform: 'XP' },
var sauceBrowsers = [
{ browserName: "firefox", version: "19", platform: "XP" },
{ browserName: "internet explorer", platform: "XP", version: "6"},
{ browserName: "safari", platform: "OS X 10.9", version: "7"},
{ browserName: "iPad", platform: "OS X 10.9", version: "7.1"},
{ browserName: "opera", platform: "Linux", version: "12"},
{ browserName: "chrome", platform: "XP", version: "26"},
{ browserName: "chrome", platform: "Windows 8", version: "26"}
];
]
var sauceOnTestComplete = function(result, callback) {
var request = require('request');
var request = require("request")
var user = process.env.SAUCE_USERNAME;
var pass = process.env.SAUCE_ACCESS_KEY;
var user = process.env.SAUCE_USERNAME
var pass = process.env.SAUCE_ACCESS_KEY
request.put({
url: ['https://saucelabs.com/rest/v1', user, 'jobs', result.job_id].join('/'),
url: [
"https://saucelabs.com/rest/v1",
user,
"jobs",
result.job_id
].join("/"),
auth: { user: user, pass: pass },
json: { passed: result.passed }
}, function (error, response, body) {
}, function (error, response) {
if (error) {
callback(error);
callback(error)
} else if (response.statusCode !== 200) {
callback(new Error('Unexpected response status: '
+ response.statusCode + "\n "));
callback(new Error("Unexpected response status: "
+ response.statusCode + "\n "))
} else {
callback(null, result.passed);
callback(null, result.passed)
}
});
};
})
}
var sauceBaseOptions = {
username: process.env.SAUCE_USERNAME,
@ -102,74 +115,164 @@ module.exports = function(grunt) {
browsers: sauceBrowsers,
sauceConfig: {
"record-video": false,
"record-screenshots": false,
"record-screenshots": false
},
build: process.env.TRAVIS_JOB_ID,
onTestComplete: sauceOnTestComplete,
tunnelTimeout: 5,
};
tunnelTimeout: 5
}
var sauceCustomOptions = {
testname: "Mithril Custom Tests "+ new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/index.html"],
};
_.assign(sauceCustomOptions, sauceBaseOptions);
testname: "Mithril Custom Tests " + new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/index.html"]
}
_.assign(sauceCustomOptions, sauceBaseOptions)
var sauceQunitOptions = {
testname: "qUnit Tests "+ new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"],
};
_.assign(sauceQunitOptions, sauceBaseOptions);
testname: "qUnit Tests " + new Date().toJSON(),
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"]
}
_.assign(sauceQunitOptions, sauceBaseOptions)
var currentVersionArchiveFolder = archiveFolder + "/v" + version;
var currentVersionArchiveFolder = archiveFolder + "/v" + version
grunt.initConfig({
md2html: md2htmlTasks,
uglify: {
options: {banner: "/*\nMithril v" + version + "\nhttp://github.com/lhorie/mithril.js\n(c) Leo Horie\nLicense: MIT\n*/", sourceMap: true},
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"}
},
concat: {
test: {src: ["mithril.js", "./tests/test.js", "./tests/mock.js", "./tests/mithril-tests.js"], dest: currentVersionArchiveFolder + "/mithril-tests.js"}
test: {
src: [
"mithril.js",
"./tests/test.js",
"./tests/mock.js",
"./tests/mithril-tests.js"
],
dest: currentVersionArchiveFolder + "/mithril-tests.js"
}
},
zip: {
distribution: {
cwd: currentVersionArchiveFolder + "/",
src: [currentVersionArchiveFolder + "/mithril.min.js", currentVersionArchiveFolder + "/mithril.min.js.map", currentVersionArchiveFolder + "/mithril.js"],
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"}
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},
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
}
},
execute: {
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
},
qunit: {
all: ['tests/e2e/**/*.html']
all: ["tests/e2e/**/*.html"]
},
"saucelabs-custom": {
all:{
all: {
options: sauceCustomOptions
}
},
"saucelabs-qunit": {
all:{
all: {
options: sauceQunitOptions
}
},
@ -179,7 +282,7 @@ module.exports = function(grunt) {
server: {
options: {
port: 8888,
base: '.'
base: "."
}
}
},
@ -191,34 +294,45 @@ module.exports = function(grunt) {
default: {
files: [{
expand: true,
src: ['mithril.js'],
cwd: '.',
dest: '.'
src: ["mithril.js"],
cwd: ".",
dest: "."
}]
}
},
eslint: {
target: [
"**/*.js",
"!node_modules/**",
"!**/*.min.js",
"!docs/layout/lib/**/*.js"
]
}
});
})
grunt.loadNpmTasks("grunt-contrib-clean");
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks("grunt-contrib-copy");
grunt.loadNpmTasks("grunt-contrib-uglify");
grunt.loadNpmTasks('grunt-execute');
grunt.loadNpmTasks("grunt-md2html");
grunt.loadNpmTasks("grunt-replace");
grunt.loadNpmTasks('grunt-zip');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-saucelabs');
grunt.loadNpmTasks('grunt-jsfmt');
grunt.loadNpmTasks("grunt-contrib-clean")
grunt.loadNpmTasks("grunt-contrib-concat")
grunt.loadNpmTasks("grunt-contrib-copy")
grunt.loadNpmTasks("grunt-contrib-uglify")
grunt.loadNpmTasks("grunt-execute")
grunt.loadNpmTasks("grunt-md2html")
grunt.loadNpmTasks("grunt-replace")
grunt.loadNpmTasks("grunt-zip")
grunt.loadNpmTasks("grunt-contrib-qunit")
grunt.loadNpmTasks("grunt-contrib-connect")
grunt.loadNpmTasks("grunt-saucelabs")
grunt.loadNpmTasks("grunt-jsfmt")
grunt.loadNpmTasks("grunt-eslint")
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
grunt.registerTask("testall", ["test", "teste2e"]);
grunt.registerTask("test", ["concat", "execute"]);
grunt.registerTask('teste2e', ['connect', 'qunit']);
grunt.registerTask("default", ["build"]);
grunt.registerTask("build", [
"test", "uglify", "zip", "md2html", "replace", "copy", "clean"])
grunt.registerTask("testall", ["test", "teste2e"])
grunt.registerTask("test", ["eslint", "concat", "execute"])
grunt.registerTask("teste2e", ["connect", "qunit"])
grunt.registerTask("default", ["build"])
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"]);
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"]);
grunt.registerTask("sauce-all", ["connect", "saucelabs-qunit", "saucelabs-custom"]);
};
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"])
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"])
grunt.registerTask("sauce-all", [
"connect", "saucelabs-qunit", "saucelabs-custom"])
}