mirror of
https://github.com/PKUFlyingPig/cs-self-learning.git
synced 2026-07-16 11:40:57 +08:00
Deployed 5665e2d5 with MkDocs version: 1.6.1
This commit is contained in:
51
js/open_in_new_tab.js
Normal file
51
js/open_in_new_tab.js
Normal file
@@ -0,0 +1,51 @@
|
||||
// Description: Open external links in a new tab and PDF links in a new tab
|
||||
// Based on: https://jekyllcodex.org/without-plugin/new-window-fix/
|
||||
|
||||
// Open external links in a new window
|
||||
function external_new_window() {
|
||||
for(let c = document.getElementsByTagName("a"), a = 0; a < c.length; a++) {
|
||||
let b = c[a];
|
||||
if(b.getAttribute("href") && b.host !== location.host) {
|
||||
b.target = "_blank";
|
||||
b.rel = "noopener";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Open PDF links in a new window
|
||||
function pdf_new_window() {
|
||||
if (!document.getElementsByTagName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const extensions = ['.pdf', '.doc', '.docx', '.json', '.xls', '.xlsx', '.ppt', '.pptx', '.zip', '.rar', '.tar', '.gz', '.7z', '.bz2', '.xz', '.tgz', '.tar.gz'];
|
||||
let links = document.getElementsByTagName("a");
|
||||
|
||||
for (let eleLink = 0; eleLink < links.length; eleLink++) {
|
||||
let href = links[eleLink].href.toLowerCase(); // Convert href to lowercase for case-insensitive matching
|
||||
|
||||
if (extensions.some(ext => href.endsWith(ext))) {
|
||||
links[eleLink].onclick = function() {
|
||||
window.open(this.href);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function apply_rules() {
|
||||
external_new_window();
|
||||
pdf_new_window();
|
||||
}
|
||||
|
||||
if (typeof document$ !== "undefined") {
|
||||
// Compatibility with mkdocs-material's instant loading feature
|
||||
document$.subscribe(function() {
|
||||
apply_rules();
|
||||
});
|
||||
} else {
|
||||
// For browsers without mkdocs-material's instant loading feature
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
apply_rules();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user