phenomic
Version:
Modern website generator based on the React and Webpack ecosystem.
68 lines (53 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (elements, cb) {
var eventCallback = catchLinks(cb);
elements.map(function (el) {
return el.addEventListener("click", eventCallback);
});
return function () {
elements.map(function (el) {
return el.removeEventListener("click", eventCallback);
});
};
};
var _url = require("url");
var _url2 = _interopRequireDefault(_url);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var catchLinks = function catchLinks(cb) {
return function (ev) {
if (ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.defaultPrevented) {
return;
}
var anchor = null;
for (var n = ev.target; n.parentNode; n = n.parentNode) {
if (n.nodeName === "A") {
anchor = n;
break;
}
}
if (!anchor) {
return;
}
var href = anchor.getAttribute("href");
// Don't intercerpt anchor
if (!href || href.startsWith("#")) {
return;
}
var u = _url2.default.parse(href);
// Dont catch any urls with any schemes other than http/https.
if (u.protocol && !u.protocol.startsWith("http")) {
return;
}
if (u.host && u.host !== window.location.host) {
return;
}
var finalUrl = _url2.default.resolve(window.location.pathname, u.path || "") + (u.hash || "");
if (!cb(finalUrl)) {
return;
}
ev.preventDefault();
};
};