create only one renderer
This commit is contained in:
parent
749b952392
commit
9b602edf4e
6 changed files with 62 additions and 64 deletions
|
|
@ -3,8 +3,7 @@
|
||||||
var coreRenderer = require("../render/render")
|
var coreRenderer = require("../render/render")
|
||||||
var autoredraw = require("../api/autoredraw")
|
var autoredraw = require("../api/autoredraw")
|
||||||
|
|
||||||
module.exports = function($window, pubsub) {
|
module.exports = function(renderer, pubsub) {
|
||||||
var renderer = coreRenderer($window)
|
|
||||||
return function(root, component) {
|
return function(root, component) {
|
||||||
var run = autoredraw(root, renderer, pubsub, function() {
|
var run = autoredraw(root, renderer, pubsub, function() {
|
||||||
renderer.render(root, {tag: component})
|
renderer.render(root, {tag: component})
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,7 @@ var coreRenderer = require("../render/render")
|
||||||
var coreRouter = require("../router/router")
|
var coreRouter = require("../router/router")
|
||||||
var autoredraw = require("../api/autoredraw")
|
var autoredraw = require("../api/autoredraw")
|
||||||
|
|
||||||
module.exports = function($window, pubsub) {
|
module.exports = function($window, renderer, pubsub) {
|
||||||
var renderer = coreRenderer($window)
|
|
||||||
var router = coreRouter($window)
|
var router = coreRouter($window)
|
||||||
var route = function(root, defaultRoute, routes) {
|
var route = function(root, defaultRoute, routes) {
|
||||||
var replay = router.defineRoutes(routes, function(component, args) {
|
var replay = router.defineRoutes(routes, function(component, args) {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ var o = require("../../ospec/ospec")
|
||||||
var domMock = require("../../test-utils/domMock")
|
var domMock = require("../../test-utils/domMock")
|
||||||
|
|
||||||
var m = require("../../render/hyperscript")
|
var m = require("../../render/hyperscript")
|
||||||
|
var coreRenderer = require("../../render/render")
|
||||||
var apiPubSub = require("../../api/pubsub")
|
var apiPubSub = require("../../api/pubsub")
|
||||||
var apiMounter = require("../../api/mount")
|
var apiMounter = require("../../api/mount")
|
||||||
|
|
||||||
|
|
@ -17,7 +18,7 @@ o.spec("mount", function() {
|
||||||
root = $window.document.body
|
root = $window.document.body
|
||||||
|
|
||||||
redraw = apiPubSub()
|
redraw = apiPubSub()
|
||||||
mount = apiMounter($window, redraw)
|
mount = apiMounter(coreRenderer($window), redraw)
|
||||||
})
|
})
|
||||||
|
|
||||||
o("renders into `root`", function() {
|
o("renders into `root`", function() {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ var pushStateMock = require("../../test-utils/pushStateMock")
|
||||||
var domMock = require("../../test-utils/domMock")
|
var domMock = require("../../test-utils/domMock")
|
||||||
|
|
||||||
var m = require("../../render/hyperscript")
|
var m = require("../../render/hyperscript")
|
||||||
|
var coreRenderer = require("../../render/render")
|
||||||
var apiPubSub = require("../../api/pubsub")
|
var apiPubSub = require("../../api/pubsub")
|
||||||
var apiRouter = require("../../api/router")
|
var apiRouter = require("../../api/router")
|
||||||
|
|
||||||
|
|
@ -24,7 +25,7 @@ o.spec("route", function() {
|
||||||
root = $window.document.body
|
root = $window.document.body
|
||||||
|
|
||||||
redraw = apiPubSub()
|
redraw = apiPubSub()
|
||||||
route = apiRouter($window, redraw)
|
route = apiRouter($window, coreRenderer($window), redraw)
|
||||||
})
|
})
|
||||||
|
|
||||||
o("renders into `root`", function() {
|
o("renders into `root`", function() {
|
||||||
|
|
|
||||||
8
index.js
8
index.js
|
|
@ -1,14 +1,14 @@
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
var m = require("./render/hyperscript")
|
var m = require("./render/hyperscript")
|
||||||
var coreRenderer = require("./render/render")
|
var renderer = require("./render/render")(window)
|
||||||
var redraw = require("./api/pubsub")()
|
var redraw = require("./api/pubsub")()
|
||||||
|
|
||||||
m.request = require("./request/request")(window, Promise).ajax
|
m.request = require("./request/request")(window, Promise).ajax
|
||||||
m.render = coreRenderer(window).render
|
m.route = require("./api/router")(window, renderer, redraw)
|
||||||
|
m.mount = require("./api/mount")(renderer, redraw)
|
||||||
m.trust = require("./render/trust")
|
m.trust = require("./render/trust")
|
||||||
m.mount = require("./api/mount")(window, redraw)
|
m.render = renderer.render
|
||||||
m.route = require("./api/router")(window, redraw)
|
|
||||||
m.redraw = redraw.publish
|
m.redraw = redraw.publish
|
||||||
|
|
||||||
module.exports = m
|
module.exports = m
|
||||||
|
|
|
||||||
106
mithril.js
106
mithril.js
|
|
@ -84,7 +84,7 @@ function changeNS(ns, vnode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var m = hyperscript
|
var m = hyperscript
|
||||||
var coreRenderer = function($window) {
|
var renderer = function($window) {
|
||||||
var $doc = $window.document
|
var $doc = $window.document
|
||||||
var onevent
|
var onevent
|
||||||
function setEventCallback(callback) {return onevent = callback}
|
function setEventCallback(callback) {return onevent = callback}
|
||||||
|
|
@ -558,7 +558,7 @@ var coreRenderer = function($window) {
|
||||||
if ($doc.activeElement !== active) active.focus()
|
if ($doc.activeElement !== active) active.focus()
|
||||||
}
|
}
|
||||||
return {render: render, setEventCallback: setEventCallback}
|
return {render: render, setEventCallback: setEventCallback}
|
||||||
}
|
}(window)
|
||||||
var redraw = function() {
|
var redraw = function() {
|
||||||
var callbacks = []
|
var callbacks = []
|
||||||
function unsubscribe(callback) {
|
function unsubscribe(callback) {
|
||||||
|
|
@ -699,53 +699,6 @@ m.request = function($window, Promise) {
|
||||||
|
|
||||||
return {ajax: ajax, jsonp: jsonp}
|
return {ajax: ajax, jsonp: jsonp}
|
||||||
}(window, Promise).ajax
|
}(window, Promise).ajax
|
||||||
m.render = coreRenderer(window).render
|
|
||||||
m.trust = function(html) {
|
|
||||||
return Node("<", undefined, undefined, html, undefined, undefined)
|
|
||||||
}
|
|
||||||
var throttle = function(callback) {
|
|
||||||
//60fps translates to 16.6ms, round it down since setTimeout requires int
|
|
||||||
var time = 16
|
|
||||||
var last = 0, pending = null
|
|
||||||
var timeout = typeof requestAnimationFrame === "function" ? requestAnimationFrame : setTimeout
|
|
||||||
return function(synchronous) {
|
|
||||||
var now = new Date().getTime()
|
|
||||||
if (synchronous === true || last === 0 || now - last >= time) {
|
|
||||||
last = now
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
else if (pending === null) {
|
|
||||||
pending = timeout(function() {
|
|
||||||
pending = 0
|
|
||||||
callback()
|
|
||||||
last = new Date().getTime()
|
|
||||||
}, time - (now - last))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var autoredraw = function(root, renderer, pubsub, callback) {
|
|
||||||
var run = throttle(callback)
|
|
||||||
renderer.setEventCallback(function(e) {
|
|
||||||
if (e.redraw1 !== false) run()
|
|
||||||
})
|
|
||||||
|
|
||||||
if (pubsub != null) {
|
|
||||||
if (root.redraw1) pubsub.unsubscribe(root.redraw1)
|
|
||||||
pubsub.subscribe(run)
|
|
||||||
}
|
|
||||||
|
|
||||||
return root.redraw1 = run
|
|
||||||
}
|
|
||||||
m.mount = function($window, pubsub) {
|
|
||||||
var renderer = coreRenderer($window)
|
|
||||||
return function(root, component) {
|
|
||||||
var run = autoredraw(root, renderer, pubsub, function() {
|
|
||||||
renderer.render(root, {tag: component})
|
|
||||||
})
|
|
||||||
|
|
||||||
run()
|
|
||||||
}
|
|
||||||
}(window, redraw)
|
|
||||||
var parseQueryString = function(string) {
|
var parseQueryString = function(string) {
|
||||||
if (string === "" || string == null) return {}
|
if (string === "" || string == null) return {}
|
||||||
if (string.charAt(0) === "?") string = string.slice(1)
|
if (string.charAt(0) === "?") string = string.slice(1)
|
||||||
|
|
@ -887,21 +840,66 @@ var coreRouter = function($window) {
|
||||||
|
|
||||||
return {setPrefix: setPrefix, getPath: getPath, setPath: setPath, defineRoutes: defineRoutes, link: link}
|
return {setPrefix: setPrefix, getPath: getPath, setPath: setPath, defineRoutes: defineRoutes, link: link}
|
||||||
}
|
}
|
||||||
m.route = function($window, pubsub) {
|
var throttle = function(callback) {
|
||||||
var renderer = coreRenderer($window)
|
//60fps translates to 16.6ms, round it down since setTimeout requires int
|
||||||
|
var time = 16
|
||||||
|
var last = 0, pending = null
|
||||||
|
var timeout = typeof requestAnimationFrame === "function" ? requestAnimationFrame : setTimeout
|
||||||
|
return function(synchronous) {
|
||||||
|
var now = new Date().getTime()
|
||||||
|
if (synchronous === true || last === 0 || now - last >= time) {
|
||||||
|
last = now
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
else if (pending === null) {
|
||||||
|
pending = timeout(function() {
|
||||||
|
pending = 0
|
||||||
|
callback()
|
||||||
|
last = new Date().getTime()
|
||||||
|
}, time - (now - last))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var autoredraw = function(root, renderer2, pubsub, callback) {
|
||||||
|
var run = throttle(callback)
|
||||||
|
renderer2.setEventCallback(function(e) {
|
||||||
|
if (e.redraw1 !== false) run()
|
||||||
|
})
|
||||||
|
|
||||||
|
if (pubsub != null) {
|
||||||
|
if (root.redraw1) pubsub.unsubscribe(root.redraw1)
|
||||||
|
pubsub.subscribe(run)
|
||||||
|
}
|
||||||
|
|
||||||
|
return root.redraw1 = run
|
||||||
|
}
|
||||||
|
m.route = function($window, renderer1, pubsub) {
|
||||||
var router = coreRouter($window)
|
var router = coreRouter($window)
|
||||||
var route = function(root, defaultRoute, routes) {
|
var route = function(root, defaultRoute, routes) {
|
||||||
var replay = router.defineRoutes(routes, function(component, args) {
|
var replay = router.defineRoutes(routes, function(component, args) {
|
||||||
renderer.render(root, {tag: component, attrs: args})
|
renderer1.render(root, {tag: component, attrs: args})
|
||||||
}, function() {
|
}, function() {
|
||||||
router.setPath(defaultRoute)
|
router.setPath(defaultRoute)
|
||||||
})
|
})
|
||||||
autoredraw(root, renderer, pubsub, replay)
|
autoredraw(root, renderer1, pubsub, replay)
|
||||||
}
|
}
|
||||||
route.link = router.link
|
route.link = router.link
|
||||||
route.prefix = router.setPrefix
|
route.prefix = router.setPrefix
|
||||||
|
|
||||||
return route
|
return route
|
||||||
}(window, redraw)
|
}(window, renderer, redraw)
|
||||||
|
m.mount = function(renderer3, pubsub) {
|
||||||
|
return function(root, component) {
|
||||||
|
var run = autoredraw(root, renderer3, pubsub, function() {
|
||||||
|
renderer3.render(root, {tag: component})
|
||||||
|
})
|
||||||
|
|
||||||
|
run()
|
||||||
|
}
|
||||||
|
}(renderer, redraw)
|
||||||
|
m.trust = function(html) {
|
||||||
|
return Node("<", undefined, undefined, html, undefined, undefined)
|
||||||
|
}
|
||||||
|
m.render = renderer.render
|
||||||
m.redraw = redraw.publish
|
m.redraw = redraw.publish
|
||||||
module.exports = m
|
module.exports = m
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue