Clean up tests, resolve style differences, reduce upstream diff
This is in preparation for a PR, to reduce potential for merge conflicts with either my PR or others', since mine will modify a large amount of the main file.
This commit is contained in:
parent
565f9cf334
commit
3de01a1554
14 changed files with 1987 additions and 3578 deletions
|
|
@ -1,5 +0,0 @@
|
||||||
node_modules
|
|
||||||
**/*.min.js
|
|
||||||
docs/layout/lib/**/*.js
|
|
||||||
tests/e2e/libs/**
|
|
||||||
mithril.closure-compiler-externs.js
|
|
||||||
27
.eslintrc
27
.eslintrc
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"env": {
|
|
||||||
"browser": true
|
|
||||||
},
|
|
||||||
"rules": {
|
|
||||||
"no-cond-assign": [2, "except-parens"],
|
|
||||||
"no-shadow": 0,
|
|
||||||
"semi-spacing": 0,
|
|
||||||
"quotes": [2, "double", "avoid-escape"],
|
|
||||||
"curly": [2, "multi-line"],
|
|
||||||
"semi": [2, "never"],
|
|
||||||
"eqeqeq": [2, "allow-null"],
|
|
||||||
"no-throw-literal": 2,
|
|
||||||
"wrap-iife": 2,
|
|
||||||
"strict": [2, "function"],
|
|
||||||
"brace-style": [2, "1tbs", { "allowSingleLine": true }],
|
|
||||||
"linebreak-style": [1, "windows"],
|
|
||||||
"one-var": [2, {
|
|
||||||
"initialized": "never"
|
|
||||||
}],
|
|
||||||
"new-cap": 0,
|
|
||||||
"no-use-before-define": [2, "nofunc"],
|
|
||||||
"max-len": [2, 80, 4],
|
|
||||||
"dot-notation": 2,
|
|
||||||
"indent": [2, "tab"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
297
Gruntfile.js
297
Gruntfile.js
|
|
@ -1,14 +1,11 @@
|
||||||
/* eslint-env node */
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
"use strict"
|
var _ = require("lodash");
|
||||||
|
var version = "0.4.0";
|
||||||
|
|
||||||
var _ = require("lodash")
|
var inputFolder = "./docs";
|
||||||
var version = "0.4.0"
|
var tempFolder = "./temp";
|
||||||
|
var archiveFolder = "./archive";
|
||||||
var inputFolder = "./docs"
|
var outputFolder = "../mithril";
|
||||||
var tempFolder = "./temp"
|
|
||||||
var archiveFolder = "./archive"
|
|
||||||
var outputFolder = "../mithril"
|
|
||||||
|
|
||||||
var guide = [
|
var guide = [
|
||||||
"auto-redrawing",
|
"auto-redrawing",
|
||||||
|
|
@ -25,7 +22,7 @@ module.exports = function(grunt) {
|
||||||
"routing",
|
"routing",
|
||||||
"tools",
|
"tools",
|
||||||
"web-services"
|
"web-services"
|
||||||
]
|
];
|
||||||
var api = [
|
var api = [
|
||||||
"change-log",
|
"change-log",
|
||||||
"roadmap",
|
"roadmap",
|
||||||
|
|
@ -45,68 +42,53 @@ module.exports = function(grunt) {
|
||||||
"mithril.trust",
|
"mithril.trust",
|
||||||
"mithril.withAttr",
|
"mithril.withAttr",
|
||||||
"mithril.xhr"
|
"mithril.xhr"
|
||||||
]
|
];
|
||||||
|
|
||||||
var md2htmlTasks = {}
|
var md2htmlTasks = {};
|
||||||
var makeTasks = function(layout, pages) {
|
var makeTasks = function(layout, pages) {
|
||||||
pages.map(function(name) {
|
pages.map(function(name) {
|
||||||
var src = inputFolder + "/" + name + ".md"
|
var src = inputFolder + "/" + name + ".md";
|
||||||
var title
|
var title = (grunt.file.exists(src)) ? grunt.file.read(src).split(/\n/)[0].substring(3) + ' - ' : '';
|
||||||
if (grunt.file.exist(src)) {
|
|
||||||
title = grunt.file.read(src)
|
|
||||||
.split(/\n/)[0]
|
|
||||||
.substring(3) + " - "
|
|
||||||
} else {
|
|
||||||
title = ""
|
|
||||||
}
|
|
||||||
md2htmlTasks[name] = {
|
md2htmlTasks[name] = {
|
||||||
options: {
|
options: {layout: inputFolder + "/layout/" + layout + ".html", templateData: { "topic": title }},
|
||||||
layout: inputFolder + "/layout/" + layout + ".html",
|
|
||||||
templateData: { "topic": title }
|
|
||||||
},
|
|
||||||
files: [{src: [src], dest: tempFolder + "/" + name + ".html"}]
|
files: [{src: [src], dest: tempFolder + "/" + name + ".html"}]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};
|
||||||
makeTasks("guide", guide)
|
makeTasks("guide", guide);
|
||||||
makeTasks("api", api)
|
makeTasks("api", api);
|
||||||
|
|
||||||
var sauceBrowsers = [
|
var sauceBrowsers =[
|
||||||
{ browserName: "firefox", version: "19", platform: "XP" },
|
{ browserName: 'firefox', version: '19', platform: 'XP' },
|
||||||
{ browserName: "internet explorer", platform: "XP", version: "6"},
|
{ browserName: "internet explorer", platform: "XP", version: "6"},
|
||||||
{ browserName: "safari", platform: "OS X 10.9", version: "7"},
|
{ browserName: "safari", platform: "OS X 10.9", version: "7"},
|
||||||
{ browserName: "iPad", platform: "OS X 10.9", version: "7.1"},
|
{ browserName: "iPad", platform: "OS X 10.9", version: "7.1"},
|
||||||
{ browserName: "opera", platform: "Linux", version: "12"},
|
{ browserName: "opera", platform: "Linux", version: "12"},
|
||||||
{ browserName: "chrome", platform: "XP", version: "26"},
|
{ browserName: "chrome", platform: "XP", version: "26"},
|
||||||
{ browserName: "chrome", platform: "Windows 8", version: "26"}
|
{ browserName: "chrome", platform: "Windows 8", version: "26"}
|
||||||
]
|
];
|
||||||
|
|
||||||
var sauceOnTestComplete = function(result, callback) {
|
var sauceOnTestComplete = function(result, callback) {
|
||||||
var request = require("request")
|
var request = require('request');
|
||||||
|
|
||||||
var user = process.env.SAUCE_USERNAME
|
var user = process.env.SAUCE_USERNAME;
|
||||||
var pass = process.env.SAUCE_ACCESS_KEY
|
var pass = process.env.SAUCE_ACCESS_KEY;
|
||||||
|
|
||||||
request.put({
|
request.put({
|
||||||
url: [
|
url: ['https://saucelabs.com/rest/v1', user, 'jobs', result.job_id].join('/'),
|
||||||
"https://saucelabs.com/rest/v1",
|
|
||||||
user,
|
|
||||||
"jobs",
|
|
||||||
result.job_id
|
|
||||||
].join("/"),
|
|
||||||
auth: { user: user, pass: pass },
|
auth: { user: user, pass: pass },
|
||||||
json: { passed: result.passed }
|
json: { passed: result.passed }
|
||||||
}, function (error, response) {
|
}, function (error, response) {
|
||||||
if (error) {
|
if (error) {
|
||||||
callback(error)
|
callback(error);
|
||||||
} else if (response.statusCode !== 200) {
|
} else if (response.statusCode !== 200) {
|
||||||
callback(new Error("Unexpected response status: "
|
callback(new Error('Unexpected response status: '
|
||||||
+ response.statusCode + "\n "))
|
+ response.statusCode + "\n "));
|
||||||
} else {
|
} else {
|
||||||
callback(null, result.passed)
|
callback(null, result.passed);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
var sauceBaseOptions = {
|
var sauceBaseOptions = {
|
||||||
username: process.env.SAUCE_USERNAME,
|
username: process.env.SAUCE_USERNAME,
|
||||||
|
|
@ -115,164 +97,74 @@ module.exports = function(grunt) {
|
||||||
browsers: sauceBrowsers,
|
browsers: sauceBrowsers,
|
||||||
sauceConfig: {
|
sauceConfig: {
|
||||||
"record-video": false,
|
"record-video": false,
|
||||||
"record-screenshots": false
|
"record-screenshots": false,
|
||||||
},
|
},
|
||||||
build: process.env.TRAVIS_JOB_ID,
|
build: process.env.TRAVIS_JOB_ID,
|
||||||
onTestComplete: sauceOnTestComplete,
|
onTestComplete: sauceOnTestComplete,
|
||||||
tunnelTimeout: 5
|
tunnelTimeout: 5,
|
||||||
}
|
};
|
||||||
var sauceCustomOptions = {
|
var sauceCustomOptions = {
|
||||||
testname: "Mithril Custom Tests " + new Date().toJSON(),
|
testname: "Mithril Custom Tests "+ new Date().toJSON(),
|
||||||
urls: ["http://127.0.0.1:8000/tests/index.html"]
|
urls: ["http://127.0.0.1:8000/tests/index.html"],
|
||||||
}
|
};
|
||||||
_.assign(sauceCustomOptions, sauceBaseOptions)
|
_.assign(sauceCustomOptions, sauceBaseOptions);
|
||||||
var sauceQunitOptions = {
|
var sauceQunitOptions = {
|
||||||
testname: "qUnit Tests " + new Date().toJSON(),
|
testname: "qUnit Tests "+ new Date().toJSON(),
|
||||||
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"]
|
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"],
|
||||||
}
|
};
|
||||||
_.assign(sauceQunitOptions, sauceBaseOptions)
|
_.assign(sauceQunitOptions, sauceBaseOptions);
|
||||||
|
|
||||||
var currentVersionArchiveFolder = archiveFolder + "/v" + version
|
var currentVersionArchiveFolder = archiveFolder + "/v" + version;
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
md2html: md2htmlTasks,
|
md2html: md2htmlTasks,
|
||||||
uglify: {
|
uglify: {
|
||||||
options: {
|
options: {banner: "/*\nMithril v" + version + "\nhttp://github.com/lhorie/mithril.js\n(c) Leo Horie\nLicense: MIT\n*/", sourceMap: true},
|
||||||
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"}
|
mithril: {src: "mithril.js", dest: "mithril.min.js"}
|
||||||
},
|
},
|
||||||
concat: {
|
concat: {
|
||||||
test: {
|
test: {src: ["mithril.js", "./tests/test.js", "./tests/mock.js", "./tests/mithril-tests.js"], dest: currentVersionArchiveFolder + "/mithril-tests.js"}
|
||||||
src: [
|
|
||||||
"mithril.js",
|
|
||||||
"./tests/test.js",
|
|
||||||
"./tests/mock.js",
|
|
||||||
"./tests/mithril-tests.js"
|
|
||||||
],
|
|
||||||
dest: currentVersionArchiveFolder + "/mithril-tests.js"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
zip: {
|
zip: {
|
||||||
distribution: {
|
distribution: {
|
||||||
cwd: currentVersionArchiveFolder + "/",
|
cwd: currentVersionArchiveFolder + "/",
|
||||||
src: [
|
src: [currentVersionArchiveFolder + "/mithril.min.js", currentVersionArchiveFolder + "/mithril.min.js.map", currentVersionArchiveFolder + "/mithril.js"],
|
||||||
currentVersionArchiveFolder + "/mithril.min.js",
|
|
||||||
currentVersionArchiveFolder + "/mithril.min.js.map",
|
|
||||||
currentVersionArchiveFolder + "/mithril.js"
|
|
||||||
],
|
|
||||||
dest: currentVersionArchiveFolder + "/mithril.min.zip"
|
dest: currentVersionArchiveFolder + "/mithril.min.zip"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
replace: {
|
replace: {
|
||||||
options: {
|
options: {force: true, patterns: [{match: /\.md/g, replacement: ".html"}, {match: /\$version/g, replacement: version}]},
|
||||||
force: true,
|
links: {expand: true, flatten: true, src: [tempFolder + "/**/*.html"], dest: currentVersionArchiveFolder + "/"},
|
||||||
patterns: [
|
index: {src: inputFolder + "/layout/index.html", dest: currentVersionArchiveFolder + "/index.html"},
|
||||||
{match: /\.md/g, replacement: ".html"},
|
commonjs: {expand: true, flatten: true, src: [inputFolder + "/layout/*.json"], dest: currentVersionArchiveFolder},
|
||||||
{match: /\$version/g, replacement: version}
|
cdnjs: {src: "deploy/cdnjs-package.json", dest: "../cdnjs/ajax/libs/mithril/package.json"}
|
||||||
]
|
|
||||||
},
|
|
||||||
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: {
|
copy: {
|
||||||
style: {
|
style: {src: inputFolder + "/layout/style.css", dest: currentVersionArchiveFolder + "/style.css"},
|
||||||
src: inputFolder + "/layout/style.css",
|
pages: {src: inputFolder + "/layout/pages.json", dest: currentVersionArchiveFolder + "/pages.json"},
|
||||||
dest: currentVersionArchiveFolder + "/style.css"
|
lib: {expand: true, cwd: inputFolder + "/layout/lib/", src: "./**", dest: currentVersionArchiveFolder + "/lib/"},
|
||||||
},
|
tools: {expand: true, cwd: inputFolder + "/layout/tools/", src: "./**", dest: currentVersionArchiveFolder + "/tools/"},
|
||||||
pages: {
|
comparisons: {expand: true, cwd: inputFolder + "/layout/comparisons/", src: "./**", dest: currentVersionArchiveFolder + "/comparisons/"},
|
||||||
src: inputFolder + "/layout/pages.json",
|
unminified: {src: "mithril.js", dest: currentVersionArchiveFolder + "/mithril.js"},
|
||||||
dest: currentVersionArchiveFolder + "/pages.json"
|
minified: {src: "mithril.min.js", dest: currentVersionArchiveFolder + "/mithril.min.js"},
|
||||||
},
|
readme: {src: "README.md", dest: currentVersionArchiveFolder + "/README.md"},
|
||||||
lib: {
|
map: {src: "mithril.min.js.map", dest: currentVersionArchiveFolder + "/mithril.min.js.map"},
|
||||||
expand: true,
|
typescript: {src: "mithril.d.ts", dest: currentVersionArchiveFolder + "/mithril.d.ts"},
|
||||||
cwd: inputFolder + "/layout/lib/",
|
publish: {expand: true, cwd: currentVersionArchiveFolder, src: "./**", dest: outputFolder},
|
||||||
src: "./**",
|
archive: {expand: true, cwd: currentVersionArchiveFolder, src: "./**", dest: outputFolder + "/archive/v" + version},
|
||||||
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: {
|
execute: {
|
||||||
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
|
tests: {src: [currentVersionArchiveFolder + "/mithril-tests.js"]}
|
||||||
},
|
},
|
||||||
qunit: {
|
qunit: {
|
||||||
all: ["tests/e2e/**/*.html"]
|
all: ['tests/e2e/**/*.html']
|
||||||
},
|
},
|
||||||
"saucelabs-custom": {
|
"saucelabs-custom": {
|
||||||
all: {
|
all:{
|
||||||
options: sauceCustomOptions
|
options: sauceCustomOptions
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"saucelabs-qunit": {
|
"saucelabs-qunit": {
|
||||||
all: {
|
all:{
|
||||||
options: sauceQunitOptions
|
options: sauceQunitOptions
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -282,7 +174,7 @@ module.exports = function(grunt) {
|
||||||
server: {
|
server: {
|
||||||
options: {
|
options: {
|
||||||
port: 8888,
|
port: 8888,
|
||||||
base: "."
|
base: '.'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -294,45 +186,34 @@ module.exports = function(grunt) {
|
||||||
default: {
|
default: {
|
||||||
files: [{
|
files: [{
|
||||||
expand: true,
|
expand: true,
|
||||||
src: ["mithril.js"],
|
src: ['mithril.js'],
|
||||||
cwd: ".",
|
cwd: '.',
|
||||||
dest: "."
|
dest: '.'
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
eslint: {
|
|
||||||
target: [
|
|
||||||
"**/*.js",
|
|
||||||
"!node_modules/**",
|
|
||||||
"!**/*.min.js",
|
|
||||||
"!docs/layout/lib/**/*.js"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
grunt.loadNpmTasks("grunt-contrib-clean")
|
grunt.loadNpmTasks("grunt-contrib-clean");
|
||||||
grunt.loadNpmTasks("grunt-contrib-concat")
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||||
grunt.loadNpmTasks("grunt-contrib-copy")
|
grunt.loadNpmTasks("grunt-contrib-copy");
|
||||||
grunt.loadNpmTasks("grunt-contrib-uglify")
|
grunt.loadNpmTasks("grunt-contrib-uglify");
|
||||||
grunt.loadNpmTasks("grunt-execute")
|
grunt.loadNpmTasks('grunt-execute');
|
||||||
grunt.loadNpmTasks("grunt-md2html")
|
grunt.loadNpmTasks("grunt-md2html");
|
||||||
grunt.loadNpmTasks("grunt-replace")
|
grunt.loadNpmTasks("grunt-replace");
|
||||||
grunt.loadNpmTasks("grunt-zip")
|
grunt.loadNpmTasks('grunt-zip');
|
||||||
grunt.loadNpmTasks("grunt-contrib-qunit")
|
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||||
grunt.loadNpmTasks("grunt-contrib-connect")
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||||
grunt.loadNpmTasks("grunt-saucelabs")
|
grunt.loadNpmTasks('grunt-saucelabs');
|
||||||
grunt.loadNpmTasks("grunt-jsfmt")
|
grunt.loadNpmTasks('grunt-jsfmt');
|
||||||
grunt.loadNpmTasks("grunt-eslint")
|
|
||||||
|
|
||||||
grunt.registerTask("build", [
|
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
|
||||||
"test", "uglify", "zip", "md2html", "replace", "copy", "clean"])
|
grunt.registerTask("testall", ["test", "teste2e"]);
|
||||||
grunt.registerTask("testall", ["test", "teste2e"])
|
grunt.registerTask("test", ["concat", "execute"]);
|
||||||
grunt.registerTask("test", ["eslint", "concat", "execute"])
|
grunt.registerTask('teste2e', ['connect', 'qunit']);
|
||||||
grunt.registerTask("teste2e", ["connect", "qunit"])
|
grunt.registerTask("default", ["build"]);
|
||||||
grunt.registerTask("default", ["build"])
|
|
||||||
|
|
||||||
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"])
|
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"]);
|
||||||
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"])
|
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"]);
|
||||||
grunt.registerTask("sauce-all", [
|
grunt.registerTask("sauce-all", ["connect", "saucelabs-qunit", "saucelabs-custom"]);
|
||||||
"connect", "saucelabs-qunit", "saucelabs-custom"])
|
};
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
**Note: This is a WIP partial rewrite of Mithril.**
|
|
||||||
|
|
||||||
[](http://js.org)
|
[](http://js.org)
|
||||||
[](https://gitter.im/lhorie/mithril.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/lhorie/mithril.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
[](https://travis-ci.org/lhorie/mithril.js)
|
[](https://travis-ci.org/lhorie/mithril.js)
|
||||||
|
|
|
||||||
|
|
@ -1,128 +1,90 @@
|
||||||
/* globals m */
|
var templateConverter = {};
|
||||||
|
|
||||||
var templateConverter = {}
|
|
||||||
|
|
||||||
templateConverter.DOMFragment = function(markup) {
|
templateConverter.DOMFragment = function(markup) {
|
||||||
"use strict"
|
if (markup.indexOf("<!doctype") > -1) return [new DOMParser().parseFromString(markup, "text/html").childNodes[1]]
|
||||||
if (markup.indexOf("<!doctype") > -1) {
|
var container = document.createElement("div");
|
||||||
return [
|
container.insertAdjacentHTML("beforeend", markup);
|
||||||
new DOMParser().parseFromString(markup, "text/html").childNodes[1]
|
return container.childNodes;
|
||||||
]
|
|
||||||
}
|
|
||||||
var container = document.createElement("div")
|
|
||||||
container.insertAdjacentHTML("beforeend", markup)
|
|
||||||
return container.childNodes
|
|
||||||
}
|
}
|
||||||
templateConverter.VirtualFragment = function recurse(domFragment) {
|
templateConverter.VirtualFragment = function recurse(domFragment) {
|
||||||
"use strict"
|
var virtualFragment = [];
|
||||||
var virtualFragment = []
|
for (var i = 0, el; el = domFragment[i]; i++) {
|
||||||
for (var i = 0; i < domFragment.length; i++) {
|
if (el.nodeType == 3) {
|
||||||
var el = domFragment[i]
|
virtualFragment.push(el.nodeValue);
|
||||||
if (el.nodeType === 3) {
|
}
|
||||||
virtualFragment.push(el.nodeValue)
|
else if (el.nodeType == 1) {
|
||||||
} else if (el.nodeType === 1) {
|
var attrs = {};
|
||||||
var attrs = {}
|
for (var j = 0, attr; attr = el.attributes[j]; j++) {
|
||||||
for (var j = 0; el.attributes.length; j++) {
|
attrs[attr.name] = attr.value;
|
||||||
var attr = el.attributes[j]
|
|
||||||
attrs[attr.name] = attr.value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtualFragment.push({
|
virtualFragment.push({tag: el.nodeName.toLowerCase(), attrs: attrs, children: recurse(el.childNodes)});
|
||||||
tag: el.nodeName.toLowerCase(),
|
|
||||||
attrs: attrs,
|
|
||||||
children: recurse(el.childNodes)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return virtualFragment
|
return virtualFragment;
|
||||||
}
|
}
|
||||||
templateConverter.Template = function recurse() {
|
templateConverter.Template = function recurse() {
|
||||||
"use strict"
|
if (Object.prototype.toString.call(arguments[0]) == "[object String]") {
|
||||||
if (Object.prototype.toString.call(arguments[0]) === "[object String]") {
|
return new recurse(new templateConverter.VirtualFragment(new templateConverter.DOMFragment(arguments[0])));
|
||||||
return new recurse(new templateConverter.VirtualFragment(
|
|
||||||
new templateConverter.DOMFragment(arguments[0])))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var virtualFragment = arguments[0]
|
var virtualFragment = arguments[0], level = arguments[1]
|
||||||
var level = arguments[1]
|
if (!level) level = 1;
|
||||||
if (!level) level = 1
|
|
||||||
|
var tab = "\n" + new Array(level + 1).join("\t");
|
||||||
var tab = "\n" + new Array(level + 1).join("\t")
|
var virtuals = [];
|
||||||
var virtuals = []
|
for (var i = 0, el; el = virtualFragment[i]; i++) {
|
||||||
for (var i = 0; i < virtualFragment.length; i++) {
|
if (typeof el == "string") {
|
||||||
var el = virtualFragment[i]
|
if (el.match(/\t| {2,}/g) && el.trim().length == 0) virtuals.indented = true;
|
||||||
if (typeof el === "string") {
|
else virtuals.push('"' + el.replace(/"/g, '\\"').replace(/\r/g, "\\r").replace(/\n/g, "\\n") + '"');
|
||||||
if (el.match(/\t| {2,}/g) && el.trim().length === 0) {
|
}
|
||||||
virtuals.indented = true
|
else {
|
||||||
} else {
|
var virtual = "";
|
||||||
virtuals.push('"' + el
|
if (el.tag != "div") virtual += el.tag;
|
||||||
.replace(/"/g, '\\"')
|
if (el.attrs["class"]) {
|
||||||
.replace(/\r/g, "\\r")
|
virtual += "." + el.attrs["class"].replace(/\t+/g, " ").split(" ").join(".");
|
||||||
.replace(/\n/g, "\\n") + '"')
|
delete el.attrs["class"];
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var virtual = ""
|
|
||||||
if (el.tag !== "div") virtual += el.tag
|
|
||||||
if (el.attrs.class) {
|
|
||||||
virtual += "." + el.attrs.class
|
|
||||||
.replace(/\t+/g, " ")
|
|
||||||
.split(" ")
|
|
||||||
.join(".")
|
|
||||||
delete el.attrs.class
|
|
||||||
}
|
}
|
||||||
var attrNames = Object.keys(el.attrs).sort()
|
var attrNames = Object.keys(el.attrs).sort()
|
||||||
for (var j = 0; j < attrNames.length; j++) {
|
for (var j = 0, attrName; attrName = attrNames[j]; j++) {
|
||||||
var attrName = attrNames[j]
|
if (attrName != "style") virtual += "[" + attrName + "='" + el.attrs[attrName].replace(/'/g, "\\'") + "']";
|
||||||
if (attrName !== "style") {
|
|
||||||
virtual += "[" + attrName + "='" +
|
|
||||||
el.attrs[attrName].replace(/'/g, "\\'") + "']"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (virtual === "") virtual = "div"
|
if (virtual == "") virtual = "div"
|
||||||
virtual = '"' + virtual + '"'
|
virtual = '"' + virtual + '"';
|
||||||
|
|
||||||
|
var style = ""
|
||||||
if (el.attrs.style) {
|
if (el.attrs.style) {
|
||||||
virtual += ", {style: " + ("{\"" + el.attrs.style
|
virtual += ", {style: " + ("{\"" + el.attrs.style.replace(/:/g, "\": \"").replace(/;/g, "\", \"") + "}").replace(/, "}|"}/, "}") + "}"
|
||||||
.replace(/:/g, "\": \"")
|
|
||||||
.replace(/;/g, "\", \"") + "}")
|
|
||||||
.replace(/, "}|"}/, "}") + "}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (el.children.length > 0) {
|
if (el.children.length > 0) {
|
||||||
virtual += ", " + recurse(el.children, level + 1)
|
virtual += ", " + recurse(el.children, level + 1);
|
||||||
}
|
}
|
||||||
virtual = "m(" + virtual + ")"
|
virtual = "m(" + virtual + ")";
|
||||||
virtuals.push(virtual)
|
virtuals.push(virtual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!virtuals.indented) tab = ""
|
if (!virtuals.indented) tab = "";
|
||||||
|
|
||||||
var isInline = virtuals.length === 1 && virtuals[0].charAt(0) === '"'
|
var isInline = virtuals.length == 1 && virtuals[0].charAt(0) == '"';
|
||||||
var template = isInline ?
|
var template = isInline ? virtuals.join(", ") : "[" + tab + virtuals.join("," + tab) + tab.slice(0, -1) + "]";
|
||||||
virtuals.join(", ") :
|
return new String(template);
|
||||||
"[" + tab + virtuals.join("," + tab) + tab.slice(0, -1) + "]"
|
|
||||||
return new String(template) // eslint-disable-line no-new-wrappers
|
|
||||||
}
|
}
|
||||||
|
|
||||||
templateConverter.controller = function() {
|
templateConverter.controller = function() {
|
||||||
"use strict"
|
this.source = m.prop("");
|
||||||
this.source = m.prop("")
|
this.output = m.prop("");
|
||||||
this.output = m.prop("")
|
|
||||||
|
|
||||||
this.convert = function() {
|
this.convert = function() {
|
||||||
return this.output(new templateConverter.Template(this.source()))
|
return this.output(new templateConverter.Template(this.source()));
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
};
|
||||||
|
|
||||||
templateConverter.view = function(ctrl) {
|
templateConverter.view = function(ctrl) {
|
||||||
"use strict"
|
|
||||||
return m("div", [
|
return m("div", [
|
||||||
m("textarea", {
|
m("textarea", {autofocus: true, style: {width:"100%", height: "40%"}, onchange: m.withAttr("value", ctrl.source)}, ctrl.source()),
|
||||||
autofocus: true,
|
|
||||||
style: {width: "100%", height: "40%"},
|
|
||||||
onchange: m.withAttr("value", ctrl.source)
|
|
||||||
}, ctrl.source()),
|
|
||||||
m("button", {onclick: ctrl.convert.bind(ctrl)}, "Convert"),
|
m("button", {onclick: ctrl.convert.bind(ctrl)}, "Convert"),
|
||||||
m("textarea", {style: {width: "100%", height: "40%"}}, ctrl.output())
|
m("textarea", {style: {width:"100%", height: "40%"}}, ctrl.output())
|
||||||
])
|
]);
|
||||||
}
|
};
|
||||||
2319
mithril.js
2319
mithril.js
File diff suppressed because it is too large
Load diff
4
mithril.min.js
vendored
4
mithril.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
97
package.json
97
package.json
|
|
@ -1,55 +1,46 @@
|
||||||
{
|
{
|
||||||
"name": "mithril",
|
"name": "mithril",
|
||||||
"description": "Mithril.js beta build - use this to help us test the releases before they are released",
|
"description": "Mithril.js beta build - use this to help us test the releases before they are released",
|
||||||
"version": "0.1.34-beta.0",
|
"version": "0.1.34-beta.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@github.com:lhorie/mithril.js.git"
|
"url": "git@github.com:lhorie/mithril.js.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "grunt test"
|
"test": "grunt test"
|
||||||
},
|
},
|
||||||
"main": "mithril.js",
|
"main": "mithril.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"colors": "~0.6.2",
|
"grunt": "*",
|
||||||
"grunt": "*",
|
"grunt-cli": "*",
|
||||||
"grunt-cli": "*",
|
"grunt-contrib-copy": "*",
|
||||||
"grunt-contrib-clean": "*",
|
"grunt-contrib-uglify": "*",
|
||||||
"grunt-contrib-concat": "*",
|
"grunt-contrib-clean": "*",
|
||||||
"grunt-contrib-connect": "~0.7.1",
|
"grunt-contrib-concat": "*",
|
||||||
"grunt-contrib-copy": "*",
|
"grunt-execute": "*",
|
||||||
"grunt-contrib-jshint": "~0.10.0",
|
"grunt-md2html": "*",
|
||||||
"grunt-contrib-qunit": "*",
|
"grunt-replace": "*",
|
||||||
"grunt-contrib-uglify": "*",
|
"grunt-contrib-qunit": "*",
|
||||||
"grunt-contrib-watch": "~0.6.1",
|
"grunt-zip": "*",
|
||||||
"grunt-eslint": "^16.0.0",
|
"grunt-jsfmt": "git://github.com/ysimonson/grunt-jsfmt",
|
||||||
"grunt-execute": "*",
|
|
||||||
"grunt-jscs": "^1.1.0",
|
"grunt-contrib-connect": "~0.7.1",
|
||||||
"grunt-jsfmt": "git://github.com/ysimonson/grunt-jsfmt",
|
"grunt-contrib-jshint": "~0.10.0",
|
||||||
"grunt-md2html": "*",
|
"grunt-contrib-watch": "~0.6.1",
|
||||||
"grunt-replace": "*",
|
"grunt-jscs": "^1.1.0",
|
||||||
"grunt-sauce-tunnel": "^0.2.1",
|
"grunt-sauce-tunnel": "^0.2.1",
|
||||||
"grunt-saucelabs": "*",
|
"load-grunt-config": "^0.9.2",
|
||||||
"grunt-zip": "*",
|
"merge": "^1.1.3",
|
||||||
"load-grunt-config": "^0.9.2",
|
"publish": "~0.3.2",
|
||||||
"lodash": "~2.4.1",
|
"grunt-saucelabs": "*",
|
||||||
"merge": "^1.1.3",
|
"request": "~2.35.0",
|
||||||
"publish": "~0.3.2",
|
"q": "~1.0.0",
|
||||||
"q": "~1.0.0",
|
"saucelabs": "~0.1.1",
|
||||||
"request": "~2.35.0",
|
"sauce-tunnel": "~2.0.6",
|
||||||
"sauce-tunnel": "~2.0.6",
|
"colors": "~0.6.2",
|
||||||
"saucelabs": "~0.1.1"
|
"lodash": "~2.4.1"
|
||||||
},
|
},
|
||||||
"licenses": [
|
"main": "mithril.js",
|
||||||
{
|
"licenses": [{"type": "MIT", "url": "http://opensource.org/licenses/MIT"}],
|
||||||
"type": "MIT",
|
"files": ["mithril.min.js", "mithril.min.js.map", "mithril.js", "README.*"]
|
||||||
"url": "http://opensource.org/licenses/MIT"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"files": [
|
|
||||||
"mithril.min.js",
|
|
||||||
"mithril.min.js.map",
|
|
||||||
"mithril.js",
|
|
||||||
"README.*"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"extend": "../../.eslintrc",
|
|
||||||
"globals": {
|
|
||||||
"asyncTest": false,
|
|
||||||
"deepEqual": false,
|
|
||||||
"equal": false,
|
|
||||||
"expect": false,
|
|
||||||
"module": false,
|
|
||||||
"notDeepEqual": false,
|
|
||||||
"notEqual": false,
|
|
||||||
"notPropEqual": false,
|
|
||||||
"notStrictEqual": false,
|
|
||||||
"ok": false,
|
|
||||||
"propEqual": false,
|
|
||||||
"QUnit": false,
|
|
||||||
"raises": false,
|
|
||||||
"start": false,
|
|
||||||
"stop": false,
|
|
||||||
"strictEqual": false,
|
|
||||||
"test": false,
|
|
||||||
"throws": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +1,8 @@
|
||||||
/* eslint-disable camelcase */
|
//saucelabs reporting; see https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
|
||||||
/* global m, Syn */
|
|
||||||
|
|
||||||
// saucelabs reporting; see
|
|
||||||
// https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
|
|
||||||
|
|
||||||
var log = []
|
var log = []
|
||||||
|
|
||||||
QUnit.done(function (test_results) {
|
QUnit.done(function (test_results) {
|
||||||
"use strict"
|
|
||||||
var tests = []
|
var tests = []
|
||||||
for (var i = 0, len = log.length; i < len; i++) {
|
for (var i = 0, len = log.length; i < len; i++) {
|
||||||
var details = log[i]
|
var details = log[i]
|
||||||
|
|
@ -24,7 +19,6 @@ QUnit.done(function (test_results) {
|
||||||
window.global_test_results = test_results
|
window.global_test_results = test_results
|
||||||
})
|
})
|
||||||
QUnit.testStart(function (testDetails) {
|
QUnit.testStart(function (testDetails) {
|
||||||
"use strict"
|
|
||||||
QUnit.log(function (details) {
|
QUnit.log(function (details) {
|
||||||
if (!details.result) {
|
if (!details.result) {
|
||||||
details.name = testDetails.name
|
details.name = testDetails.name
|
||||||
|
|
@ -33,11 +27,9 @@ QUnit.testStart(function (testDetails) {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// qunit doesn't support Function.prototype.bind...
|
//qunit doesn't support Function.prototype.bind...
|
||||||
if (!Function.prototype.bind) {
|
if (!Function.prototype.bind) {
|
||||||
/* eslint-disable */
|
|
||||||
Function.prototype.bind = function (oThis) {
|
Function.prototype.bind = function (oThis) {
|
||||||
"use strict"
|
|
||||||
if (typeof this !== "function") {
|
if (typeof this !== "function") {
|
||||||
// closest thing possible to the ECMAScript 5
|
// closest thing possible to the ECMAScript 5
|
||||||
// internal IsCallable function
|
// internal IsCallable function
|
||||||
|
|
@ -59,181 +51,165 @@ if (!Function.prototype.bind) {
|
||||||
|
|
||||||
return fBound
|
return fBound
|
||||||
}
|
}
|
||||||
/* eslint-enable */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//tests
|
//tests
|
||||||
var dummyEl = document.getElementById("dummy")
|
var dummyEl = document.getElementById('dummy')
|
||||||
|
|
||||||
test("Mithril accessible as window.m", function() {
|
test('Mithril accessible as window.m', function() {
|
||||||
"use strict"
|
|
||||||
expect(1)
|
expect(1)
|
||||||
ok(window.m)
|
ok(window.m)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("m.trust w/ html entities", function() {
|
test('m.trust w/ html entities', function() {
|
||||||
"use strict"
|
|
||||||
expect(1)
|
expect(1)
|
||||||
var view1 = m("div", "a", m.trust("&"), "b")
|
var view1 = m('div', "a", m.trust("&"), "b")
|
||||||
|
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
equal(dummyEl.innerHTML, "<div>a&b</div>", "view1 rendered correctly")
|
equal(dummyEl.innerHTML, '<div>a&b</div>', 'view1 rendered correctly')
|
||||||
})
|
})
|
||||||
|
|
||||||
test("m.trust w/ html entities 2", function() {
|
test('m.trust w/ html entities 2', function() {
|
||||||
"use strict"
|
|
||||||
expect(1)
|
expect(1)
|
||||||
var view1 = m("div", "a", m.trust("&"), "b", m.trust("&"), "c")
|
var view1 = m('div', "a", m.trust("&"), "b", m.trust("&"), "c")
|
||||||
|
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
equal(dummyEl.innerHTML, "<div>a&b&c</div>",
|
equal(dummyEl.innerHTML, '<div>a&b&c</div>', 'view1 rendered correctly')
|
||||||
"view1 rendered correctly")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test("array item removal", function() {
|
test('array item removal', function() {
|
||||||
"use strict"
|
|
||||||
expect(2)
|
expect(2)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {}, "0"),
|
m('div', {}, '0'),
|
||||||
m("div", {}, "1"),
|
m('div', {}, '1'),
|
||||||
m("div", {}, "2")
|
m('div', {}, '2')
|
||||||
])
|
])
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {}, "0")
|
m('div', {}, '0')
|
||||||
])
|
])
|
||||||
|
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
equal(dummyEl.innerHTML, "<div><div>0</div><div>1</div><div>2</div></div>",
|
equal(dummyEl.innerHTML, '<div><div>0</div><div>1</div><div>2</div></div>', 'view1 rendered correctly')
|
||||||
"view1 rendered correctly")
|
|
||||||
|
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
equal(dummyEl.innerHTML, "<div><div>0</div></div>",
|
equal(dummyEl.innerHTML, '<div><div>0</div></div>', 'view2 should be rendered correctly')
|
||||||
"view2 should be rendered correctly")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test("issue99 regression", function() {
|
test('issue99 regression', function() {
|
||||||
"use strict"
|
|
||||||
// see https://github.com/lhorie/mithril.js/issues/99
|
// see https://github.com/lhorie/mithril.js/issues/99
|
||||||
expect(2)
|
expect(2)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {}, "0"),
|
m('div', {}, '0'),
|
||||||
m("div", {}, "1"),
|
m('div', {}, '1'),
|
||||||
m("div", {}, "2")
|
m('div', {}, '2')
|
||||||
])
|
])
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("span", {}, "0")
|
m('span', {}, '0')
|
||||||
])
|
])
|
||||||
|
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
equal(dummyEl.innerHTML, "<div><div>0</div><div>1</div><div>2</div></div>",
|
equal(dummyEl.innerHTML, '<div><div>0</div><div>1</div><div>2</div></div>', 'view1 rendered correctly')
|
||||||
"view1 rendered correctly")
|
|
||||||
|
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
equal(dummyEl.innerHTML, "<div><span>0</span></div>",
|
equal(dummyEl.innerHTML, '<div><span>0</span></div>', 'view2 should be rendered correctly')
|
||||||
"view2 should be rendered correctly")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test("config handler context", function() {
|
test('config handler context', function() {
|
||||||
"use strict"
|
|
||||||
expect(3)
|
expect(3)
|
||||||
var view = m("div", {config: function(evt, isInitialized, context) {
|
var view = m('div', {config: function(evt, isInitialized, context) {
|
||||||
equal(context instanceof Object, true)
|
equal(context instanceof Object, true)
|
||||||
context.data = 1
|
context.data = 1
|
||||||
}})
|
}})
|
||||||
m.render(dummyEl, view)
|
m.render(dummyEl, view)
|
||||||
|
|
||||||
view = m("div", {config: function(evt, isInitialized, context) {
|
view = m('div', {config: function(evt, isInitialized, context) {
|
||||||
equal(context instanceof Object, true)
|
equal(context instanceof Object, true)
|
||||||
equal(context.data, 1)
|
equal(context.data, 1)
|
||||||
}})
|
}})
|
||||||
m.render(dummyEl, view)
|
m.render(dummyEl, view)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("node identity remove firstChild", function() {
|
test('node identity remove firstChild', function() {
|
||||||
"use strict"
|
|
||||||
expect(2)
|
expect(2)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2")
|
m('div', {key:2}, 'E2')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
|
|
||||||
var node2 = dummyEl.firstChild.lastChild
|
var node2 = dummyEl.firstChild.lastChild
|
||||||
equal(node2.innerHTML, "E2")
|
equal(node2.innerHTML, 'E2')
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {key: 2}, "E2")
|
m('div', {key:2}, 'E2')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
|
|
||||||
equal(dummyEl.firstChild.firstChild, node2)
|
equal(dummyEl.firstChild.firstChild, node2)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("node identity change order", function() {
|
test('node identity change order', function() {
|
||||||
"use strict"
|
|
||||||
expect(2)
|
expect(2)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2"),
|
m('div', {key:2}, 'E2'),
|
||||||
m("div", {key: 3}, "E3")
|
m('div', {key:3}, 'E3')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
|
|
||||||
var e2 = dummyEl.firstChild.firstChild.nextSibling
|
var e2 = dummyEl.firstChild.firstChild.nextSibling
|
||||||
equal(e2.innerHTML, "E2")
|
equal(e2.innerHTML, 'E2')
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {key: 2}, "E2"),
|
m('div', {key:2}, 'E2'),
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 3}, "E3")
|
m('div', {key:3}, 'E3')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
|
|
||||||
equal(dummyEl.firstChild.firstChild, e2)
|
equal(dummyEl.firstChild.firstChild, e2)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("node identity remove in the middle", function() {
|
test('node identity remove in the middle', function() {
|
||||||
"use strict"
|
|
||||||
expect(2)
|
expect(2)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2"),
|
m('div', {key:2}, 'E2'),
|
||||||
m("div", {key: 3}, "E3")
|
m('div', {key:3}, 'E3')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
|
|
||||||
var e3 = dummyEl.firstChild.lastChild
|
var e3 = dummyEl.firstChild.lastChild
|
||||||
equal(e3.innerHTML, "E3")
|
equal(e3.innerHTML, 'E3')
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 3}, "E3")
|
m('div', {key:3}, 'E3')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
|
|
||||||
equal(dummyEl.firstChild.firstChild.nextSibling, e3)
|
equal(dummyEl.firstChild.firstChild.nextSibling, e3)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("node identity remove last", function() {
|
test('node identity remove last', function() {
|
||||||
"use strict"
|
|
||||||
expect(4)
|
expect(4)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2"),
|
m('div', {key:2}, 'E2'),
|
||||||
m("div", {key: 3}, "E3")
|
m('div', {key:3}, 'E3')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
|
|
||||||
var e1 = dummyEl.firstChild.firstChild
|
var e1 = dummyEl.firstChild.firstChild
|
||||||
equal(e1.innerHTML, "E1")
|
equal(e1.innerHTML, 'E1')
|
||||||
var e2 = dummyEl.firstChild.firstChild.nextSibling
|
var e2 = dummyEl.firstChild.firstChild.nextSibling
|
||||||
equal(e2.innerHTML, "E2")
|
equal(e2.innerHTML, 'E2')
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2")
|
m('div', {key:2}, 'E2')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
|
|
||||||
|
|
@ -241,176 +217,168 @@ test("node identity remove last", function() {
|
||||||
equal(dummyEl.firstChild.firstChild.nextSibling, e2)
|
equal(dummyEl.firstChild.firstChild.nextSibling, e2)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("node identity shuffle and remove", function() {
|
test('node identity shuffle and remove', function() {
|
||||||
"use strict"
|
|
||||||
expect(8)
|
expect(8)
|
||||||
var view1 = m("div", {}, [
|
var view1 = m('div', {}, [
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2"),
|
m('div', {key:2}, 'E2'),
|
||||||
m("div", {key: 3}, "E3"),
|
m('div', {key:3}, 'E3'),
|
||||||
m("div", {key: 4}, "E4"),
|
m('div', {key:4}, 'E4'),
|
||||||
m("div", {key: 5}, "E5")
|
m('div', {key:5}, 'E5')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view1)
|
m.render(dummyEl, view1)
|
||||||
|
|
||||||
var e1 = dummyEl.firstChild.firstChild
|
var e1 = dummyEl.firstChild.firstChild
|
||||||
equal(e1.innerHTML, "E1")
|
equal(e1.innerHTML, 'E1')
|
||||||
var e2 = e1.nextSibling
|
var e2 = e1.nextSibling
|
||||||
equal(e2.innerHTML, "E2")
|
equal(e2.innerHTML, 'E2')
|
||||||
var e3 = e2.nextSibling
|
var e3 = e2.nextSibling
|
||||||
equal(e3.innerHTML, "E3")
|
equal(e3.innerHTML, 'E3')
|
||||||
var e4 = e3.nextSibling
|
var e4 = e3.nextSibling
|
||||||
equal(e4.innerHTML, "E4")
|
equal(e4.innerHTML, 'E4')
|
||||||
var e5 = e4.nextSibling
|
var e5 = e4.nextSibling
|
||||||
equal(e5.innerHTML, "E5")
|
equal(e5.innerHTML, 'E5')
|
||||||
|
|
||||||
var view2 = m("div", {}, [
|
var view2 = m('div', {}, [
|
||||||
m("div", {key: 4}, "E4"),
|
m('div', {key:4}, 'E4'),
|
||||||
m("div", {key: 10}, "E10"),
|
m('div', {key:10}, 'E10'),
|
||||||
m("div", {key: 1}, "E1"),
|
m('div', {key:1}, 'E1'),
|
||||||
m("div", {key: 2}, "E2")
|
m('div', {key:2}, 'E2')
|
||||||
])
|
])
|
||||||
m.render(dummyEl, view2)
|
m.render(dummyEl, view2)
|
||||||
|
|
||||||
equal(dummyEl.firstChild.firstChild, e4, "e4 is first element")
|
equal(dummyEl.firstChild.firstChild, e4, 'e4 is first element')
|
||||||
equal(dummyEl.firstChild.firstChild.nextSibling.nextSibling, e1,
|
equal(dummyEl.firstChild.firstChild.nextSibling.nextSibling, e1, 'e1 is third element')
|
||||||
"e1 is third element")
|
equal(dummyEl.firstChild.firstChild.nextSibling.nextSibling.nextSibling, e2, 'e2 is fourth element')
|
||||||
equal(dummyEl.firstChild.firstChild.nextSibling.nextSibling.nextSibling, e2,
|
|
||||||
"e2 is fourth element")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
asyncTest("issue214 regression", function() {
|
asyncTest('issue214 regression', function() {
|
||||||
"use strict"
|
|
||||||
// see https://github.com/lhorie/mithril.js/issues/214
|
// see https://github.com/lhorie/mithril.js/issues/214
|
||||||
expect(2)
|
expect(2)
|
||||||
|
|
||||||
function controller() {
|
function controller() {
|
||||||
this.inputValue = m.prop("")
|
this.inputValue = m.prop('')
|
||||||
}
|
}
|
||||||
|
|
||||||
function view(ctrl) {
|
function view(ctrl) {
|
||||||
return m("input#testinput", {
|
return m('input#testinput', {
|
||||||
value: ctrl.inputValue(),
|
value: ctrl.inputValue(),
|
||||||
onkeyup: m.withAttr("value", ctrl.inputValue)
|
onkeyup: m.withAttr('value', ctrl.inputValue)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var ctrl = m.module(dummyEl, { controller: controller, view: view })
|
var ctrl = m.module(dummyEl, { controller: controller, view: view })
|
||||||
|
|
||||||
Syn.click({}, "testinput")
|
Syn.click({}, 'testinput')
|
||||||
.type("0").delay(10)
|
.type('0').delay(10)
|
||||||
.type("1").delay(10)
|
.type('1').delay(10)
|
||||||
.type("2").delay(10)
|
.type('2').delay(10)
|
||||||
.type("3").delay(10)
|
.type('3').delay(10)
|
||||||
.type("4").delay(10)
|
.type('4').delay(10)
|
||||||
.type("5").delay(10)
|
.type('5').delay(10)
|
||||||
.type("6").delay(10)
|
.type('6').delay(10)
|
||||||
.type("7").delay(10)
|
.type('7').delay(10)
|
||||||
.type("8").delay(10)
|
.type('8').delay(10)
|
||||||
.type("9").delay(10)
|
.type('9').delay(10)
|
||||||
.type("a").delay(10)
|
.type('a').delay(10)
|
||||||
.type("b").delay(10)
|
.type('b').delay(10)
|
||||||
.type("c").delay(10)
|
.type('c').delay(10)
|
||||||
.type("d").delay(10)
|
.type('d').delay(10)
|
||||||
.type("e").delay(10)
|
.type('e').delay(10)
|
||||||
.type("f").delay(10)
|
.type('f').delay(10)
|
||||||
.type("0").delay(10)
|
.type('0').delay(10)
|
||||||
.type("1").delay(10)
|
.type('1').delay(10)
|
||||||
.type("2").delay(10)
|
.type('2').delay(10)
|
||||||
.type("3").delay(10)
|
.type('3').delay(10)
|
||||||
.type("4").delay(10)
|
.type('4').delay(10)
|
||||||
.type("5").delay(10)
|
.type('5').delay(10)
|
||||||
.type("6").delay(10)
|
.type('6').delay(10)
|
||||||
.type("7").delay(10)
|
.type('7').delay(10)
|
||||||
.type("8").delay(10)
|
.type('8').delay(10)
|
||||||
.type("9").delay(10)
|
.type('9').delay(10)
|
||||||
.type("a").delay(10)
|
.type('a').delay(10)
|
||||||
.type("b").delay(10)
|
.type('b').delay(10)
|
||||||
.type("c").delay(10)
|
.type('c').delay(10)
|
||||||
.type("d").delay(10)
|
.type('d').delay(10)
|
||||||
.type("e").delay(10)
|
.type('e').delay(10)
|
||||||
.type("f").delay(10)
|
.type('f').delay(10)
|
||||||
.type("0").delay(10)
|
.type('0').delay(10)
|
||||||
.type("1").delay(10)
|
.type('1').delay(10)
|
||||||
.type("2").delay(10)
|
.type('2').delay(10)
|
||||||
.type("3").delay(10)
|
.type('3').delay(10)
|
||||||
.type("4").delay(10)
|
.type('4').delay(10)
|
||||||
.type("5").delay(10)
|
.type('5').delay(10)
|
||||||
.type("6").delay(10)
|
.type('6').delay(10)
|
||||||
.type("7").delay(10)
|
.type('7').delay(10)
|
||||||
.type("8").delay(10)
|
.type('8').delay(10)
|
||||||
.type("9").delay(10)
|
.type('9').delay(10)
|
||||||
.type("a").delay(10)
|
.type('a').delay(10)
|
||||||
.type("b").delay(10)
|
.type('b').delay(10)
|
||||||
.type("c").delay(10)
|
.type('c').delay(10)
|
||||||
.type("d").delay(10)
|
.type('d').delay(10)
|
||||||
.type("e").delay(10)
|
.type('e').delay(10)
|
||||||
.type("f").delay(10)
|
.type('f').delay(10)
|
||||||
.type("0").delay(10)
|
.type('0').delay(10)
|
||||||
.type("1").delay(10)
|
.type('1').delay(10)
|
||||||
.type("2").delay(10)
|
.type('2').delay(10)
|
||||||
.type("3").delay(10)
|
.type('3').delay(10)
|
||||||
.type("4").delay(10)
|
.type('4').delay(10)
|
||||||
.type("5").delay(10)
|
.type('5').delay(10)
|
||||||
.type("6").delay(10)
|
.type('6').delay(10)
|
||||||
.type("7").delay(10)
|
.type('7').delay(10)
|
||||||
.type("8").delay(10)
|
.type('8').delay(10)
|
||||||
.type("9").delay(10)
|
.type('9').delay(10)
|
||||||
.type("a").delay(10)
|
.type('a').delay(10)
|
||||||
.type("b").delay(10)
|
.type('b').delay(10)
|
||||||
.type("c").delay(10)
|
.type('c').delay(10)
|
||||||
.type("d").delay(10)
|
.type('d').delay(10)
|
||||||
.type("e").delay(10)
|
.type('e').delay(10)
|
||||||
.type("f", function() {
|
.type('f', function() {
|
||||||
equal(ctrl.inputValue(),
|
equal(ctrl.inputValue(), '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef')
|
||||||
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
|
equal(document.getElementById('testinput').value, '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef')
|
||||||
equal(document.getElementById("testinput").value,
|
|
||||||
"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
|
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
asyncTest("issue288 regression", function() {
|
asyncTest('issue288 regression', function() {
|
||||||
"use strict"
|
|
||||||
// see https://github.com/lhorie/mithril.js/issues/288
|
// see https://github.com/lhorie/mithril.js/issues/288
|
||||||
expect(2)
|
expect(2)
|
||||||
|
|
||||||
function controller() {
|
function controller() {
|
||||||
this.inputValue = m.prop("")
|
this.inputValue = m.prop('')
|
||||||
|
|
||||||
this.submit = function() {
|
this.submit = function() {
|
||||||
if (this.inputValue()) {
|
if (this.inputValue()) {
|
||||||
this.inputValue("")
|
this.inputValue('')
|
||||||
}
|
}
|
||||||
}.bind(this)
|
}.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
function view(ctrl) {
|
function view(ctrl) {
|
||||||
return m("form", { onsubmit: ctrl.submit }, [
|
return m('form', { onsubmit: ctrl.submit }, [
|
||||||
m("input#testinput", {
|
m('input#testinput', {
|
||||||
onkeyup: m.withAttr("value", ctrl.inputValue),
|
onkeyup: m.withAttr('value', ctrl.inputValue),
|
||||||
value: ctrl.inputValue()
|
value: ctrl.inputValue()
|
||||||
}),
|
}),
|
||||||
m("button[type=submit]")
|
m('button[type=submit]')
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
var ctrl = m.module(dummyEl, { controller: controller, view: view })
|
var ctrl = m.module(dummyEl, { controller: controller, view: view })
|
||||||
|
|
||||||
Syn.click({}, "testinput")
|
Syn.click({}, 'testinput')
|
||||||
.type("a").delay(10)
|
.type('a').delay(10)
|
||||||
.type("b").delay(10)
|
.type('b').delay(10)
|
||||||
.type("c").delay(10)
|
.type('c').delay(10)
|
||||||
.type("d").delay(10)
|
.type('d').delay(10)
|
||||||
.type("[enter]", function() {
|
.type('[enter]', function() {
|
||||||
equal(ctrl.inputValue(), "")
|
equal(ctrl.inputValue(), '')
|
||||||
equal(document.getElementById("testinput").value, "")
|
equal(document.getElementById('testinput').value, '')
|
||||||
start()
|
start()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
test("issue278 regression", function() {
|
test('issue278 regression', function() {
|
||||||
"use strict"
|
|
||||||
// see https://github.com/lhorie/mithril.js/issues/278
|
// see https://github.com/lhorie/mithril.js/issues/278
|
||||||
expect(1)
|
expect(1)
|
||||||
|
|
||||||
|
|
@ -421,24 +389,22 @@ test("issue278 regression", function() {
|
||||||
},
|
},
|
||||||
|
|
||||||
view: function(ctrl) {
|
view: function(ctrl) {
|
||||||
return m("select#testselect", {
|
return m('select#testselect', {
|
||||||
size: ctrl.values.length,
|
size: ctrl.values.length,
|
||||||
multiple: "multiple"
|
multiple: 'multiple'
|
||||||
}, [
|
}, [
|
||||||
ctrl.values.map(function(v){
|
ctrl.values.map(function(v){
|
||||||
var opts = {value: v}
|
var opts = {value: v}
|
||||||
if (ctrl.value().indexOf(v) !== -1) {
|
if (ctrl.value().indexOf(v) !== -1) opts.selected = 'selected'
|
||||||
opts.selected = "selected"
|
return m('option', opts, v)
|
||||||
}
|
|
||||||
return m("option", opts, v)
|
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m.render(dummyEl, test.view(new test.controller()))
|
m.render(dummyEl, test.view(new test.controller))
|
||||||
|
|
||||||
var select = document.getElementById("testselect")
|
var select = document.getElementById('testselect')
|
||||||
|
|
||||||
for (var i = 0, selected = 0; i < select.options.length; i++) {
|
for (var i = 0, selected = 0; i < select.options.length; i++) {
|
||||||
if (select.options[i].selected) selected++
|
if (select.options[i].selected) selected++
|
||||||
|
|
@ -447,30 +413,25 @@ test("issue278 regression", function() {
|
||||||
equal(selected, 2)
|
equal(selected, 2)
|
||||||
})
|
})
|
||||||
test("mixing trusted content", function() {
|
test("mixing trusted content", function() {
|
||||||
"use strict"
|
|
||||||
m.render(dummyEl, [m.trust("<p>1</p><p>2</p>"), m("i", "foo")])
|
m.render(dummyEl, [m.trust("<p>1</p><p>2</p>"), m("i", "foo")])
|
||||||
equal(dummyEl.childNodes[2].nodeName, "I")
|
equal(dummyEl.childNodes[2].nodeName, "I")
|
||||||
})
|
})
|
||||||
test("mixing trusted content w/ text nodes", function() {
|
test("mixing trusted content w/ text nodes", function() {
|
||||||
"use strict"
|
|
||||||
m.render(dummyEl, [m.trust("<p>1</p>123<p>2</p>"), m("i", "foo")])
|
m.render(dummyEl, [m.trust("<p>1</p>123<p>2</p>"), m("i", "foo")])
|
||||||
equal(dummyEl.childNodes[3].nodeName, "I")
|
equal(dummyEl.childNodes[3].nodeName, "I")
|
||||||
})
|
})
|
||||||
test("mixing trusted content w/ td", function() {
|
test("mixing trusted content w/ td", function() {
|
||||||
"use strict"
|
|
||||||
m.render(dummyEl, [m.trust("<td>1</td><td>2</td>"), m("i", "foo")])
|
m.render(dummyEl, [m.trust("<td>1</td><td>2</td>"), m("i", "foo")])
|
||||||
equal(dummyEl.childNodes[1].nodeName, "I")
|
equal(dummyEl.childNodes[1].nodeName, "I")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("0 should not be treated as empty string", function() {
|
test("0 should not be treated as empty string", function() {
|
||||||
"use strict"
|
|
||||||
m.render(dummyEl, m("input", {value: ""}))
|
m.render(dummyEl, m("input", {value: ""}))
|
||||||
m.render(dummyEl, m("input", {value: 0}))
|
m.render(dummyEl, m("input", {value: 0}))
|
||||||
equal(dummyEl.childNodes[0].value, "0")
|
equal(dummyEl.childNodes[0].value, "0")
|
||||||
})
|
})
|
||||||
|
|
||||||
test("empty value in <option> should show as attribute", function() {
|
test("empty value in <option> should show as attribute", function() {
|
||||||
"use strict"
|
|
||||||
m.render(dummyEl, m("select", m("option", {value: ""}, "aaa")))
|
m.render(dummyEl, m("select", m("option", {value: ""}, "aaa")))
|
||||||
equal(dummyEl.childNodes[0].innerHTML, '<option value="">aaa</option>')
|
equal(dummyEl.childNodes[0].innerHTML, '<option value="">aaa</option>')
|
||||||
})
|
})
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable no-extend-native, strict */
|
|
||||||
if (!Array.prototype.indexOf) {
|
if (!Array.prototype.indexOf) {
|
||||||
Array.prototype.indexOf = function(item) {
|
Array.prototype.indexOf = function(item) {
|
||||||
for (var i = 0; i < this.length; i++) {
|
for (var i = 0; i < this.length; i++) {
|
||||||
|
|
@ -32,11 +31,9 @@ if (!Object.keys) {
|
||||||
return keys
|
return keys
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* eslint-enable no-extend-native, strict */
|
|
||||||
|
|
||||||
var mock = {}
|
var mock = {}
|
||||||
mock.window = (function() {
|
mock.window = (function() {
|
||||||
"use strict"
|
|
||||||
var window = {}
|
var window = {}
|
||||||
window.document = {}
|
window.document = {}
|
||||||
window.document.childNodes = []
|
window.document.childNodes = []
|
||||||
|
|
@ -60,10 +57,9 @@ mock.window = (function() {
|
||||||
insertAdjacentHTML: function(position, html) {
|
insertAdjacentHTML: function(position, html) {
|
||||||
// todo: accept markup
|
// todo: accept markup
|
||||||
if (position === "beforebegin") {
|
if (position === "beforebegin") {
|
||||||
this.parentNode.insertBefore(
|
this.parentNode.insertBefore(window.document.createTextNode(html), this)
|
||||||
window.document.createTextNode(html),
|
}
|
||||||
this)
|
else if (position === "beforeend") {
|
||||||
} else if (position === "beforeend") {
|
|
||||||
this.appendChild(window.document.createTextNode(html))
|
this.appendChild(window.document.createTextNode(html))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -74,7 +70,7 @@ mock.window = (function() {
|
||||||
this.namespaceURI = namespace
|
this.namespaceURI = namespace
|
||||||
this[name] = value.toString()
|
this[name] = value.toString()
|
||||||
},
|
},
|
||||||
getAttribute: function(name) {
|
getAttribute: function(name, value) {
|
||||||
return this[name]
|
return this[name]
|
||||||
},
|
},
|
||||||
addEventListener: function () {},
|
addEventListener: function () {},
|
||||||
|
|
@ -111,22 +107,22 @@ mock.window = (function() {
|
||||||
// getElementsByTagName is only used by JSONP tests, it's not required by
|
// getElementsByTagName is only used by JSONP tests, it's not required by
|
||||||
// Mithril
|
// Mithril
|
||||||
window.document.getElementsByTagName = function(name){
|
window.document.getElementsByTagName = function(name){
|
||||||
name = name.toLowerCase()
|
name = name.toLowerCase();
|
||||||
var out = []
|
var out = [];
|
||||||
|
|
||||||
var traverse = function(node){
|
var traverse = function(node){
|
||||||
if(node.childNodes && node.childNodes.length > 0){
|
if(node.childNodes && node.childNodes.length > 0){
|
||||||
node.childNodes.map(function(curr){
|
node.childNodes.map(function(curr){
|
||||||
if (curr.nodeName.toLowerCase() === name) {
|
if (curr.nodeName.toLowerCase() === name) {
|
||||||
out.push(curr)
|
out.push(curr);
|
||||||
}
|
}
|
||||||
traverse(curr)
|
traverse(curr);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
traverse(window.document)
|
traverse(window.document);
|
||||||
return out
|
return out;
|
||||||
}
|
}
|
||||||
window.scrollTo = function() {}
|
window.scrollTo = function() {}
|
||||||
window.cancelAnimationFrame = function() {}
|
window.cancelAnimationFrame = function() {}
|
||||||
|
|
@ -167,12 +163,10 @@ mock.window = (function() {
|
||||||
window.history.$$length = 0
|
window.history.$$length = 0
|
||||||
window.history.pushState = function(data, title, url) {
|
window.history.pushState = function(data, title, url) {
|
||||||
window.history.$$length++
|
window.history.$$length++
|
||||||
window.location.pathname = window.location.search =
|
window.location.pathname = window.location.search = window.location.hash = url
|
||||||
window.location.hash = url
|
|
||||||
}
|
}
|
||||||
window.history.replaceState = function(data, title, url) {
|
window.history.replaceState = function(data, title, url) {
|
||||||
window.location.pathname = window.location.search =
|
window.location.pathname = window.location.search = window.location.hash = url
|
||||||
window.location.hash = url
|
|
||||||
}
|
}
|
||||||
return window
|
return window
|
||||||
}())
|
}())
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
/* eslint-disable no-console */
|
|
||||||
if (!this.console) {
|
if (!this.console) {
|
||||||
var log = function(value) {
|
var log = function(value) {document.write("<pre>" + value + "</pre>")}
|
||||||
"use strict"
|
|
||||||
document.write("<pre>" + value + "</pre>")
|
|
||||||
}
|
|
||||||
this.console = {log: log, error: log}
|
this.console = {log: log, error: log}
|
||||||
}
|
}
|
||||||
|
|
||||||
function test(condition) {
|
function test(condition) {
|
||||||
"use strict"
|
|
||||||
test.total++
|
test.total++
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!condition()) throw new Error("failed")
|
if (!condition()) throw new Error("failed")
|
||||||
} catch (e) {
|
}
|
||||||
|
catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
test.failures.push(condition)
|
test.failures.push(condition)
|
||||||
}
|
}
|
||||||
|
|
@ -21,7 +17,6 @@ function test(condition) {
|
||||||
test.total = 0
|
test.total = 0
|
||||||
test.failures = []
|
test.failures = []
|
||||||
test.print = function(print) {
|
test.print = function(print) {
|
||||||
"use strict"
|
|
||||||
for (var i = 0; i < test.failures.length; i++) {
|
for (var i = 0; i < test.failures.length; i++) {
|
||||||
print(test.failures[i].toString())
|
print(test.failures[i].toString())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue