create only one renderer

This commit is contained in:
Leo Horie 2016-05-21 00:59:33 -04:00
parent 749b952392
commit 9b602edf4e
6 changed files with 62 additions and 64 deletions

View file

@ -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})

View file

@ -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) {

View file

@ -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() {

View file

@ -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() {

View file

@ -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

View file

@ -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