@@ -1,14 +1,13 @@
|
|||||||
var documentReady = require('document-ready')
|
var documentReady = require('document-ready')
|
||||||
|
var nanohistory = require('nanohistory')
|
||||||
var nanorouter = require('nanorouter')
|
var nanorouter = require('nanorouter')
|
||||||
var nanomount = require('nanomount')
|
var nanomount = require('nanomount')
|
||||||
var nanomorph = require('nanomorph')
|
var nanomorph = require('nanomorph')
|
||||||
|
var nanohref = require('nanohref')
|
||||||
var nanoraf = require('nanoraf')
|
var nanoraf = require('nanoraf')
|
||||||
var nanobus = require('nanobus')
|
var nanobus = require('nanobus')
|
||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
|
|
||||||
var onHistoryChange = require('./lib/history')
|
|
||||||
var onHref = require('./lib/href')
|
|
||||||
|
|
||||||
module.exports = Choo
|
module.exports = Choo
|
||||||
|
|
||||||
function Choo (opts) {
|
function Choo (opts) {
|
||||||
@@ -66,7 +65,7 @@ function Choo (opts) {
|
|||||||
bus.on('render', rerender)
|
bus.on('render', rerender)
|
||||||
|
|
||||||
if (opts.history !== false) {
|
if (opts.history !== false) {
|
||||||
onHistoryChange(function (href) {
|
nanohistory(function (href) {
|
||||||
bus.emit('pushState')
|
bus.emit('pushState')
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -79,7 +78,7 @@ function Choo (opts) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (opts.href !== false) {
|
if (opts.href !== false) {
|
||||||
onHref(function (location) {
|
nanohref(function (location) {
|
||||||
var href = location.href
|
var href = location.href
|
||||||
var currHref = window.location.href
|
var currHref = window.location.href
|
||||||
if (href === currHref) return
|
if (href === currHref) return
|
||||||
@@ -103,7 +102,7 @@ function Choo (opts) {
|
|||||||
var newTree = start()
|
var newTree = start()
|
||||||
documentReady(function () {
|
documentReady(function () {
|
||||||
var root = document.querySelector(selector)
|
var root = document.querySelector(selector)
|
||||||
assert.ok(root, 'could not query selector: ' + selector)
|
assert.ok(root, 'choo.mount: could not query selector: ' + selector)
|
||||||
nanomount(root, newTree)
|
nanomount(root, newTree)
|
||||||
tree = root
|
tree = root
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
var assert = require('assert')
|
|
||||||
|
|
||||||
module.exports = history
|
|
||||||
|
|
||||||
// listen to html5 pushstate events
|
|
||||||
// and update router accordingly
|
|
||||||
// fn(str) -> null
|
|
||||||
function history (cb) {
|
|
||||||
assert.equal(typeof cb, 'function', 'sheet-router/history: cb must be a function')
|
|
||||||
window.onpopstate = function () {
|
|
||||||
var obj = {
|
|
||||||
pathname: document.location.pathname,
|
|
||||||
search: document.location.search,
|
|
||||||
href: document.location.href,
|
|
||||||
hash: document.location.hash
|
|
||||||
}
|
|
||||||
cb(obj)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-33
@@ -1,33 +0,0 @@
|
|||||||
var assert = require('assert')
|
|
||||||
|
|
||||||
module.exports = href
|
|
||||||
|
|
||||||
var noRoutingAttrName = 'data-no-routing'
|
|
||||||
|
|
||||||
// handle a click if is anchor tag with an href
|
|
||||||
// and url lives on the same domain. Replaces
|
|
||||||
// trailing '#' so empty links work as expected.
|
|
||||||
// (fn(str), obj?) -> undefined
|
|
||||||
function href (cb, root) {
|
|
||||||
assert.equal(typeof cb, 'function', 'sheet-router/href: cb must be a function')
|
|
||||||
|
|
||||||
window.onclick = function (e) {
|
|
||||||
if ((e.button && e.button !== 0) || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) return
|
|
||||||
|
|
||||||
var node = (function traverse (node) {
|
|
||||||
if (!node || node === root) return
|
|
||||||
if (node.localName !== 'a') return traverse(node.parentNode)
|
|
||||||
if (node.href === undefined) return traverse(node.parentNode)
|
|
||||||
if (window.location.host !== node.host) return traverse(node.parentNode)
|
|
||||||
return node
|
|
||||||
})(e.target)
|
|
||||||
|
|
||||||
if (!node) return
|
|
||||||
|
|
||||||
var isRoutingDisabled = node.hasAttribute(noRoutingAttrName)
|
|
||||||
if (isRoutingDisabled) return
|
|
||||||
|
|
||||||
e.preventDefault()
|
|
||||||
cb(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -25,6 +25,8 @@
|
|||||||
"bel": "^4.5.1",
|
"bel": "^4.5.1",
|
||||||
"document-ready": "^2.0.1",
|
"document-ready": "^2.0.1",
|
||||||
"nanobus": "^3.0.0",
|
"nanobus": "^3.0.0",
|
||||||
|
"nanohistory": "^1.0.0",
|
||||||
|
"nanohref": "^1.0.0",
|
||||||
"nanomorph": "^4.0.0",
|
"nanomorph": "^4.0.0",
|
||||||
"nanomount": "^1.0.0",
|
"nanomount": "^1.0.0",
|
||||||
"nanoraf": "^3.0.0",
|
"nanoraf": "^3.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user