parse-element.js checks if the element was already parsed by
checking for the `data-pjax-click-state` attribute. However, this
attribute was not added until the link is clicked.
Originally, there was a separate attribute, `data-pjax-enabled`,
which tracked if the element was parsed already, but that was
changed in 9a86044.
This commit merges the attributes for mouse clicks and key presses
into one and adds that attribute when the element is initially
parsed.
95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
var tape = require("tape")
|
|
|
|
var on = require("../../../lib/events/on")
|
|
var trigger = require("../../../lib/events/trigger")
|
|
var attachLink = require("../../../lib/proto/attach-link")
|
|
|
|
var a = document.createElement("a")
|
|
var attr = "data-pjax-state"
|
|
var preventDefault = function(e) { e.preventDefault() }
|
|
|
|
tape("test attach link prototype method", function(t) {
|
|
t.plan(7)
|
|
|
|
attachLink.call({
|
|
options: {},
|
|
reload: function() {
|
|
t.equal(a.getAttribute(attr), "reload", "triggering exact same url reload the page")
|
|
},
|
|
loadUrl: function() {
|
|
t.equal(a.getAttribute(attr), "load", "triggering a internal link actually load the page")
|
|
}
|
|
}, a)
|
|
|
|
var internalUri = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search
|
|
|
|
a.href = internalUri
|
|
on(a, "click", preventDefault) // to avoid link to be open (break testing env)
|
|
trigger(a, "click", {metaKey: true})
|
|
t.equal(a.getAttribute(attr), "modifier", "event key modifier stop behavior")
|
|
|
|
a.href = "http://external.com/"
|
|
trigger(a, "click")
|
|
t.equal(a.getAttribute(attr), "external", "external url stop behavior")
|
|
|
|
a.href = internalUri + "#anchor"
|
|
trigger(a, "click")
|
|
t.equal(a.getAttribute(attr), "anchor-present", "internal anchor stop behavior")
|
|
|
|
window.location.hash = "#anchor"
|
|
a.href = internalUri + "#another-anchor"
|
|
trigger(a, "click")
|
|
t.notEqual(a.getAttribute(attr), "anchor", "differents anchors stop behavior")
|
|
window.location.hash = ""
|
|
|
|
a.href = internalUri + "#"
|
|
trigger(a, "click")
|
|
t.equal(a.getAttribute(attr), "anchor-empty", "empty anchor stop behavior")
|
|
|
|
a.href = internalUri
|
|
trigger(a, "click")
|
|
// see reload defined above
|
|
|
|
a.href = window.location.protocol + "//" + window.location.host + "/internal"
|
|
trigger(a, "click")
|
|
// see loadUrl defined above
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test attach link preventDefaulted events", function(t) {
|
|
var callbacked = false
|
|
var a = document.createElement("a")
|
|
|
|
attachLink.call({
|
|
options: {},
|
|
loadUrl: function() {
|
|
callbacked = true
|
|
}
|
|
}, a)
|
|
|
|
a.href = "#"
|
|
on(a, "click", preventDefault)
|
|
trigger(a, "click")
|
|
t.equal(callbacked, false, "events that are preventDefaulted should not fire callback")
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test options are not modified by attachLink", function(t) {
|
|
var a = document.createElement("a")
|
|
var options = {foo: "bar"}
|
|
var loadUrl = function() {}
|
|
|
|
attachLink.call({options: options, loadUrl: loadUrl}, a)
|
|
|
|
a.href = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search
|
|
|
|
trigger(a, "click")
|
|
|
|
t.equal(1, Object.keys(options).length, "options object that is passed in should not be modified")
|
|
t.equal("bar", options.foo, "options object that is passed in should not be modified")
|
|
|
|
t.end()
|
|
})
|