var tape = require("tape") var on = require("../../../lib/events/on") var trigger = require("../../../lib/events/trigger") var attachLink = require("../../../lib/proto/attach-link") var attr = "data-pjax-state" tape("test attach link prototype method", function(t) { var a = document.createElement("a") var loadUrlCalled = false attachLink.call({ options: {}, loadUrl: function() { loadUrlCalled = true } }, a) var internalUri = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search a.href = internalUri 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") window.location.hash = "#anchor" a.href = internalUri + "#anchor" trigger(a, "click") t.equal(a.getAttribute(attr), "anchor", "internal anchor stop behavior") a.href = internalUri + "#another-anchor" trigger(a, "click") t.equal(a.getAttribute(attr), "anchor", "different 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 = window.location.protocol + "//" + window.location.host + "/internal" trigger(a, "click") t.equals(a.getAttribute(attr), "load", "triggering an internal link sets the state attribute to 'load'") t.equals(loadUrlCalled, true, "triggering an internal link actually loads the page") t.end() }) tape("test attach link preventDefaulted events", function(t) { var loadUrlCalled = false var a = document.createElement("a") // This needs to be before the call to attachLink() on(a, "click", function(event) { event.preventDefault() }) attachLink.call({ options: {}, loadUrl: function() { loadUrlCalled = true } }, a) a.href = "#" trigger(a, "click") t.equal(loadUrlCalled, 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() })