Merge branch 'next' of github.com:lhorie/mithril.js into next
This commit is contained in:
commit
64d1ce1d7d
12 changed files with 37 additions and 211 deletions
|
|
@ -1,5 +1,8 @@
|
||||||
# Most of these are build artifacts.
|
# The second line is because Git is mysteriously not recursing.
|
||||||
node_modules
|
node_modules
|
||||||
|
**/node_modules
|
||||||
|
|
||||||
|
# Build artifacts.
|
||||||
**/*.min.js
|
**/*.min.js
|
||||||
archive
|
archive
|
||||||
deploy
|
deploy
|
||||||
|
|
@ -7,3 +10,9 @@ mithril.closure-compiler-externs.js
|
||||||
|
|
||||||
# This is merely a dependency for the documentation.
|
# This is merely a dependency for the documentation.
|
||||||
docs/layout/lib
|
docs/layout/lib
|
||||||
|
|
||||||
|
# This is probably going to disappear eventually, anyways.
|
||||||
|
tests
|
||||||
|
|
||||||
|
# TODO: These are temporary, and need to be eventually enabled.
|
||||||
|
mithril.js
|
||||||
|
|
|
||||||
1
.gitattributes
vendored
1
.gitattributes
vendored
|
|
@ -1 +1,2 @@
|
||||||
* text eol=crlf
|
* text eol=crlf
|
||||||
|
*.min.js binary
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
node_modules
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ module.exports = function (grunt) { // eslint-disable-line
|
||||||
grunt.loadNpmTasks("grunt-mocha-phantomjs")
|
grunt.loadNpmTasks("grunt-mocha-phantomjs")
|
||||||
|
|
||||||
grunt.registerTask("build", [
|
grunt.registerTask("build", [
|
||||||
//"lint",
|
// "lint",
|
||||||
"test",
|
"test",
|
||||||
"uglify",
|
"uglify",
|
||||||
"zip",
|
"zip",
|
||||||
|
|
|
||||||
4
mithril.d.ts
vendored
4
mithril.d.ts
vendored
|
|
@ -658,7 +658,7 @@ declare module _mithril {
|
||||||
*
|
*
|
||||||
* @see m.prop which returns objects that implement this interface.
|
* @see m.prop which returns objects that implement this interface.
|
||||||
*/
|
*/
|
||||||
interface MithrilPromiseProperty<T> extends MithrilPromise<T>,
|
interface MithrilPromiseProperty<T> extends MithrilPromise<T | MithrilPromise<T>>,
|
||||||
MithrilProperty<MithrilPromise<T>> {
|
MithrilProperty<MithrilPromise<T>> {
|
||||||
/**
|
/**
|
||||||
* Gets the contained promise.
|
* Gets the contained promise.
|
||||||
|
|
@ -747,7 +747,7 @@ declare module _mithril {
|
||||||
/**
|
/**
|
||||||
* This represents a Mithril promise object.
|
* This represents a Mithril promise object.
|
||||||
*/
|
*/
|
||||||
interface MithrilPromise<T> extends Thennable<T>, MithrilProperty<MithrilPromise<T>> {
|
interface MithrilPromise<T> extends Thennable<T>, MithrilProperty<T | MithrilPromise<T>> {
|
||||||
/**
|
/**
|
||||||
* Chain this promise with a simple success callback, propogating
|
* Chain this promise with a simple success callback, propogating
|
||||||
* rejections.
|
* rejections.
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,11 @@
|
||||||
* or splat (optional)
|
* or splat (optional)
|
||||||
*/
|
*/
|
||||||
function m(tag, pairs) {
|
function m(tag, pairs) {
|
||||||
var args = [].slice.call(arguments, 1)
|
var args = []
|
||||||
|
|
||||||
|
for (var i = 1, length = arguments.length; i < length; i++) {
|
||||||
|
args[i - 1] = arguments[i]
|
||||||
|
}
|
||||||
|
|
||||||
if (isObject(tag)) return parameterize(tag, args)
|
if (isObject(tag)) return parameterize(tag, args)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
"url" : "http://github.com/lhorie/mithril.js/issues"
|
"url" : "http://github.com/lhorie/mithril.js/issues"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "grunt test"
|
"test": "grunt lint test"
|
||||||
},
|
},
|
||||||
"main": "mithril.js",
|
"main": "mithril.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,10 @@
|
||||||
|
|
||||||
Object.keys = Object.keys || function (obj) {
|
Object.keys = Object.keys || function (obj) {
|
||||||
var keys = []
|
var keys = []
|
||||||
for (var i in obj) if ({}.hasOwnProperty.call(obj, i)) {
|
for (var i in obj) {
|
||||||
keys.push(i)
|
if ({}.hasOwnProperty.call(obj, i)) {
|
||||||
|
keys.push(i)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return keys
|
return keys
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -293,12 +293,13 @@ describe("m.deferred()", function () {
|
||||||
prmA.resolve("A")
|
prmA.resolve("A")
|
||||||
prmB.resolve("B")
|
prmB.resolve("B")
|
||||||
|
|
||||||
prmA.promise.then(function (A) {
|
prmA.promise.then(function () {
|
||||||
return prmB.promise
|
return prmB.promise
|
||||||
}).then(function (B) {
|
}).then(function (B) {
|
||||||
expect(B).to.equal("B")
|
expect(B).to.equal("B")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it("yields immutable promises", function () {
|
it("yields immutable promises", function () {
|
||||||
var d = m.deferred()
|
var d = m.deferred()
|
||||||
d.resolve(5)
|
d.resolve(5)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ describe("m.trust()", function () {
|
||||||
// FIXME: implement document.createRange().createContextualFragment() in the
|
// FIXME: implement document.createRange().createContextualFragment() in the
|
||||||
// mock window for these tests
|
// mock window for these tests
|
||||||
dom(function () {
|
dom(function () {
|
||||||
|
|
||||||
it("isn't escaped in m.render()", function () {
|
it("isn't escaped in m.render()", function () {
|
||||||
var root = document.createElement("div")
|
var root = document.createElement("div")
|
||||||
m.render(root, m("div", "a", m.trust("&"), "b"))
|
m.render(root, m("div", "a", m.trust("&"), "b"))
|
||||||
|
|
@ -42,7 +41,8 @@ describe("m.trust()", function () {
|
||||||
expect(root.childNodes[3].tagName).to.equal("I")
|
expect(root.childNodes[3].tagName).to.equal("I")
|
||||||
})
|
})
|
||||||
|
|
||||||
it("works with mixed trusted content in td", function () {
|
// TODO: m.trust's contents are having their tags stripped.
|
||||||
|
xit("works with mixed trusted content in td", function () {
|
||||||
var root = document.createElement("table")
|
var root = document.createElement("table")
|
||||||
root.appendChild(root = document.createElement("tr"))
|
root.appendChild(root = document.createElement("tr"))
|
||||||
|
|
||||||
|
|
@ -57,12 +57,13 @@ describe("m.trust()", function () {
|
||||||
it("works with trusted content in div", function () {
|
it("works with trusted content in div", function () {
|
||||||
var root = document.createElement("div")
|
var root = document.createElement("div")
|
||||||
m.render(root, m("div", [
|
m.render(root, m("div", [
|
||||||
m("p", "©"),
|
m("p", "©"),
|
||||||
m("p", m.trust("©")),
|
m("p", m.trust("©")),
|
||||||
m.trust("©"),
|
m.trust("©")
|
||||||
]))
|
]))
|
||||||
expect(root.innerHTML).to.equal("<div><p>&copy;</p><p>©</p>©</div>")
|
|
||||||
})
|
|
||||||
|
|
||||||
|
expect(root.innerHTML)
|
||||||
|
.to.equal("<div><p>&copy;</p><p>©</p>©</div>")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.0.3/es5-shim.min.js"></script>-->
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.0.3/es5-shim.min.js"></script>
|
||||||
<script src="test.js"></script>
|
<script src="test.js"></script>
|
||||||
<script src="mock.js"></script>
|
<script src="../test-deps/mock.js"></script>
|
||||||
<script src="../mithril.js"></script>
|
<script src="../mithril.js"></script>
|
||||||
<script src="mithril-tests.js"></script>
|
<script src="mithril-tests.js"></script>
|
||||||
|
|
||||||
|
|
|
||||||
193
tests/mock.js
193
tests/mock.js
|
|
@ -1,193 +0,0 @@
|
||||||
(function (global) { // eslint-disable-line max-statements
|
|
||||||
"use strict"
|
|
||||||
|
|
||||||
/* eslint-disable no-extend-native */
|
|
||||||
if (!Array.prototype.indexOf) {
|
|
||||||
Array.prototype.indexOf = function (item) {
|
|
||||||
for (var i = 0; i < this.length; i++) {
|
|
||||||
if (this[i] === item) return i
|
|
||||||
}
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.prototype.map) {
|
|
||||||
Array.prototype.map = function (callback) {
|
|
||||||
var results = []
|
|
||||||
for (var i = 0; i < this.length; i++) {
|
|
||||||
results[i] = callback(this[i], i, this)
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.prototype.filter) {
|
|
||||||
Array.prototype.filter = function (callback) {
|
|
||||||
var results = []
|
|
||||||
for (var i = 0; i < this.length; i++) {
|
|
||||||
if (callback(this[i], i, this)) results.push(this[i])
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Object.keys) {
|
|
||||||
Object.keys = function () {
|
|
||||||
var keys = []
|
|
||||||
for (var i in this) if ({}.hasOwnProperty.call(this, i)) {
|
|
||||||
keys.push(i)
|
|
||||||
}
|
|
||||||
return keys
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* eslint-enable no-extend-native */
|
|
||||||
|
|
||||||
var window = global.mock = {window: window}
|
|
||||||
window.window = window
|
|
||||||
window.document = {}
|
|
||||||
window.document.childNodes = []
|
|
||||||
window.document.createElement = function (tag) {
|
|
||||||
return {
|
|
||||||
style: {},
|
|
||||||
childNodes: [],
|
|
||||||
nodeType: 1,
|
|
||||||
nodeName: tag.toUpperCase(),
|
|
||||||
appendChild: window.document.appendChild,
|
|
||||||
removeChild: window.document.removeChild,
|
|
||||||
replaceChild: window.document.replaceChild,
|
|
||||||
|
|
||||||
insertBefore: function (node, reference) {
|
|
||||||
node.parentNode = this
|
|
||||||
var referenceIndex = this.childNodes.indexOf(reference)
|
|
||||||
var index = this.childNodes.indexOf(node)
|
|
||||||
if (index > -1) this.childNodes.splice(index, 1)
|
|
||||||
if (referenceIndex < 0) this.childNodes.push(node)
|
|
||||||
else this.childNodes.splice(referenceIndex, 0, node)
|
|
||||||
},
|
|
||||||
|
|
||||||
insertAdjacentHTML: function (position, html) {
|
|
||||||
// todo: accept markup
|
|
||||||
if (position === "beforebegin") {
|
|
||||||
this.parentNode.insertBefore(
|
|
||||||
window.document.createTextNode(html),
|
|
||||||
this)
|
|
||||||
} else if (position === "beforeend") {
|
|
||||||
this.appendChild(window.document.createTextNode(html))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
setAttribute: function (name, value) {
|
|
||||||
this[name] = value.toString()
|
|
||||||
},
|
|
||||||
setAttributeNS: function (namespace, name, value) {
|
|
||||||
this.namespaceURI = namespace
|
|
||||||
this[name] = value.toString()
|
|
||||||
},
|
|
||||||
getAttribute: function (name) {
|
|
||||||
return this[name]
|
|
||||||
},
|
|
||||||
addEventListener: function () {},
|
|
||||||
removeEventListener: function () {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
window.document.createElementNS = function (namespace, tag) {
|
|
||||||
var element = window.document.createElement(tag)
|
|
||||||
element.namespaceURI = namespace
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
window.document.createTextNode = function (text) {
|
|
||||||
return {nodeValue: text.toString()}
|
|
||||||
}
|
|
||||||
window.document.documentElement = window.document.createElement("html")
|
|
||||||
window.document.replaceChild = function (newChild, oldChild) {
|
|
||||||
var index = this.childNodes.indexOf(oldChild)
|
|
||||||
if (index > -1) this.childNodes.splice(index, 1, newChild)
|
|
||||||
else this.childNodes.push(newChild)
|
|
||||||
newChild.parentNode = this
|
|
||||||
oldChild.parentNode = null
|
|
||||||
}
|
|
||||||
window.document.appendChild = function (child) {
|
|
||||||
var index = this.childNodes.indexOf(child)
|
|
||||||
if (index > -1) this.childNodes.splice(index, 1)
|
|
||||||
this.childNodes.push(child)
|
|
||||||
child.parentNode = this
|
|
||||||
}
|
|
||||||
window.document.removeChild = function (child) {
|
|
||||||
var index = this.childNodes.indexOf(child)
|
|
||||||
this.childNodes.splice(index, 1)
|
|
||||||
child.parentNode = null
|
|
||||||
}
|
|
||||||
// getElementsByTagName is only used by JSONP tests, it's not required by
|
|
||||||
// Mithril
|
|
||||||
window.document.getElementsByTagName = function (name){
|
|
||||||
name = name.toLowerCase()
|
|
||||||
var out = []
|
|
||||||
|
|
||||||
function traverse(node) {
|
|
||||||
if (node.childNodes && node.childNodes.length > 0){
|
|
||||||
node.childNodes.map(function (curr){
|
|
||||||
if (curr.nodeName.toLowerCase() === name) {
|
|
||||||
out.push(curr)
|
|
||||||
}
|
|
||||||
traverse(curr)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
traverse(window.document)
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
window.scrollTo = function () {}
|
|
||||||
window.cancelAnimationFrame = function () {}
|
|
||||||
window.requestAnimationFrame = function (callback) {
|
|
||||||
window.requestAnimationFrame.$callback = callback
|
|
||||||
return window.requestAnimationFrame.$id++
|
|
||||||
}
|
|
||||||
window.requestAnimationFrame.$id = 1
|
|
||||||
window.requestAnimationFrame.$resolve = function () {
|
|
||||||
if (window.requestAnimationFrame.$callback) {
|
|
||||||
var callback = window.requestAnimationFrame.$callback
|
|
||||||
window.requestAnimationFrame.$callback = null
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.XMLHttpRequest = (function () {
|
|
||||||
function XMLHttpRequest() {
|
|
||||||
this.$headers = {}
|
|
||||||
this.setRequestHeader = function (key, value) {
|
|
||||||
this.$headers[key] = value
|
|
||||||
}
|
|
||||||
this.open = function (method, url) {
|
|
||||||
this.method = method
|
|
||||||
this.url = url
|
|
||||||
}
|
|
||||||
this.send = function () {
|
|
||||||
this.responseText = JSON.stringify(this)
|
|
||||||
this.readyState = 4
|
|
||||||
this.status = 200
|
|
||||||
XMLHttpRequest.$instances.push(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
XMLHttpRequest.$instances = []
|
|
||||||
return XMLHttpRequest
|
|
||||||
})()
|
|
||||||
|
|
||||||
window.location = {search: "", pathname: "", hash: ""}
|
|
||||||
|
|
||||||
window.history = {}
|
|
||||||
window.history.$$length = 0
|
|
||||||
|
|
||||||
window.history.pushState = function (data, title, url) {
|
|
||||||
window.history.$$length++
|
|
||||||
window.location.pathname =
|
|
||||||
window.location.search =
|
|
||||||
window.location.hash = url
|
|
||||||
}
|
|
||||||
|
|
||||||
window.history.replaceState = function (data, title, url) {
|
|
||||||
window.location.pathname =
|
|
||||||
window.location.search =
|
|
||||||
window.location.hash = url
|
|
||||||
}
|
|
||||||
})(this)
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue