1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-03 14:59:18 +02:00
epub.js/src/replacements.js
2016-05-11 14:14:44 -05:00

114 lines
2.4 KiB
JavaScript

var URI = require('urijs');
var core = require('./core');
function base(doc, section){
var base;
var head;
if(!doc){
return;
}
// head = doc.querySelector("head");
// base = head.querySelector("base");
head = core.qs(doc, "head");
base = core.qs(head, "base");
if(!base) {
base = doc.createElement("base");
head.insertBefore(base, head.firstChild);
}
base.setAttribute("href", section.url);
}
function canonical(doc, section){
var head;
var link;
var url = section.url; // window.location.origin + window.location.pathname + "?loc=" + encodeURIComponent(section.url);
if(!doc){
return;
}
head = core.qs(doc, "head");
link = core.qs(head, "link[rel='canonical']");
if (link) {
link.setAttribute("href", url);
} else {
link = doc.createElement("link");
link.setAttribute("rel", "canonical");
link.setAttribute("href", url);
head.appendChild(link);
}
}
function links(view, renderer) {
var links = view.document.querySelectorAll("a[href]");
var replaceLinks = function(link){
var href = link.getAttribute("href");
if(href.indexOf("mailto:") === 0){
return;
}
var linkUri = URI(href);
var absolute = linkUri.absoluteTo(view.section.url);
var relative = absolute.relativeTo(this.book.baseUrl).toString();
if(linkUri.protocol()){
link.setAttribute("target", "_blank");
}else{
/*
if(baseDirectory) {
// We must ensure that the file:// protocol is preserved for
// local file links, as in certain contexts (such as under
// Titanium), file links without the file:// protocol will not
// work
if (baseUri.protocol === "file") {
relative = core.resolveUrl(baseUri.base, href);
} else {
relative = core.resolveUrl(baseDirectory, href);
}
} else {
relative = href;
}
*/
if(linkUri.fragment()) {
// do nothing with fragment yet
} else {
link.onclick = function(){
renderer.display(relative);
return false;
};
}
}
};
for (var i = 0; i < links.length; i++) {
replaceLinks(links[i]);
}
};
function substitute(content, urls, replacements) {
urls.forEach(function(url, i){
if (url && replacements[i]) {
content = content.replace(new RegExp(url, 'g'), replacements[i]);
}
});
return content;
}
module.exports = {
'base': base,
'canonical' : canonical,
'links': links,
'substitute': substitute
};