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 autoredraw = require("../api/autoredraw")
|
||||
|
||||
module.exports = function($window, pubsub) {
|
||||
var renderer = coreRenderer($window)
|
||||
module.exports = function(renderer, pubsub) {
|
||||
return function(root, component) {
|
||||
var run = autoredraw(root, renderer, pubsub, function() {
|
||||
renderer.render(root, {tag: component})
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@ var coreRenderer = require("../render/render")
|
|||
var coreRouter = require("../router/router")
|
||||
var autoredraw = require("../api/autoredraw")
|
||||
|
||||
module.exports = function($window, pubsub) {
|
||||
var renderer = coreRenderer($window)
|
||||
module.exports = function($window, renderer, pubsub) {
|
||||
var router = coreRouter($window)
|
||||
var route = function(root, defaultRoute, routes) {
|
||||
var replay = router.defineRoutes(routes, function(component, args) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ var o = require("../../ospec/ospec")
|
|||
var domMock = require("../../test-utils/domMock")
|
||||
|
||||
var m = require("../../render/hyperscript")
|
||||
var coreRenderer = require("../../render/render")
|
||||
var apiPubSub = require("../../api/pubsub")
|
||||
var apiMounter = require("../../api/mount")
|
||||
|
||||
|
|
@ -17,7 +18,7 @@ o.spec("mount", function() {
|
|||
root = $window.document.body
|
||||
|
||||
redraw = apiPubSub()
|
||||
mount = apiMounter($window, redraw)
|
||||
mount = apiMounter(coreRenderer($window), redraw)
|
||||
})
|
||||
|
||||
o("renders into `root`", function() {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ var pushStateMock = require("../../test-utils/pushStateMock")
|
|||
var domMock = require("../../test-utils/domMock")
|
||||
|
||||
var m = require("../../render/hyperscript")
|
||||
var coreRenderer = require("../../render/render")
|
||||
var apiPubSub = require("../../api/pubsub")
|
||||
var apiRouter = require("../../api/router")
|
||||
|
||||
|
|
@ -24,7 +25,7 @@ o.spec("route", function() {
|
|||
root = $window.document.body
|
||||
|
||||
redraw = apiPubSub()
|
||||
route = apiRouter($window, redraw)
|
||||
route = apiRouter($window, coreRenderer($window), redraw)
|
||||
})
|
||||
|
||||
o("renders into `root`", function() {
|
||||
|
|
|
|||
8
index.js
8
index.js
|
|
@ -1,14 +1,14 @@
|
|||
"use strict"
|
||||
|
||||
var m = require("./render/hyperscript")
|
||||
var coreRenderer = require("./render/render")
|
||||
var renderer = require("./render/render")(window)
|
||||
var redraw = require("./api/pubsub")()
|
||||
|
||||
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.mount = require("./api/mount")(window, redraw)
|
||||
m.route = require("./api/router")(window, redraw)
|
||||
m.render = renderer.render
|
||||
m.redraw = redraw.publish
|
||||
|
||||
module.exports = m
|
||||
|
|
|
|||
106
mithril.js
106
mithril.js
|
|
@ -84,7 +84,7 @@ function changeNS(ns, vnode) {
|
|||
}
|
||||
}
|
||||
var m = hyperscript
|
||||
var coreRenderer = function($window) {
|
||||
var renderer = function($window) {
|
||||
var $doc = $window.document
|
||||
var onevent
|
||||
function setEventCallback(callback) {return onevent = callback}
|
||||
|
|
@ -558,7 +558,7 @@ var coreRenderer = function($window) {
|
|||
if ($doc.activeElement !== active) active.focus()
|
||||
}
|
||||
return {render: render, setEventCallback: setEventCallback}
|
||||
}
|
||||
}(window)
|
||||
var redraw = function() {
|
||||
var callbacks = []
|
||||
function unsubscribe(callback) {
|
||||
|
|
@ -699,53 +699,6 @@ m.request = function($window, Promise) {
|
|||
|
||||
return {ajax: ajax, jsonp: jsonp}
|
||||
}(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) {
|
||||
if (string === "" || string == null) return {}
|
||||
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}
|
||||
}
|
||||
m.route = function($window, pubsub) {
|
||||
var renderer = coreRenderer($window)
|
||||
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, 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 route = function(root, defaultRoute, routes) {
|
||||
var replay = router.defineRoutes(routes, function(component, args) {
|
||||
renderer.render(root, {tag: component, attrs: args})
|
||||
renderer1.render(root, {tag: component, attrs: args})
|
||||
}, function() {
|
||||
router.setPath(defaultRoute)
|
||||
})
|
||||
autoredraw(root, renderer, pubsub, replay)
|
||||
autoredraw(root, renderer1, pubsub, replay)
|
||||
}
|
||||
route.link = router.link
|
||||
route.prefix = router.setPrefix
|
||||
|
||||
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
|
||||
module.exports = m
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue