mirror of
https://github.com/KivotosRailway/website.git
synced 2026-11-03 19:07:56 +09:00
Add solitude
This commit is contained in:
@@ -0,0 +1,253 @@
|
||||
let selectTextNow = "";
|
||||
const selectText = () => {
|
||||
selectTextNow = document.selection
|
||||
? document.selection.createRange().text
|
||||
: window.getSelection() + "" || "";
|
||||
};
|
||||
document.onmouseup = document.ondbclick = selectText;
|
||||
|
||||
const rm = {
|
||||
mask: document.getElementById("rightmenu-mask"),
|
||||
menu: document.getElementById("rightMenu"),
|
||||
get width() {
|
||||
return this.menu.offsetWidth;
|
||||
},
|
||||
get height() {
|
||||
return this.menu.offsetHeight;
|
||||
},
|
||||
domhref: "",
|
||||
domsrc: "",
|
||||
globalEvent: null,
|
||||
menuItems: {
|
||||
other: document.getElementsByClassName("rightMenuOther"),
|
||||
plugin: document.getElementsByClassName("rightMenuPlugin"),
|
||||
back: document.getElementById("menu-backward"),
|
||||
forward: document.getElementById("menu-forward"),
|
||||
refresh: document.getElementById("menu-refresh"),
|
||||
top: document.getElementById("menu-top"),
|
||||
copy: document.getElementById("menu-copytext"),
|
||||
paste: document.getElementById("menu-pastetext"),
|
||||
comment: document.getElementById("menu-commenttext"),
|
||||
new: document.getElementById("menu-newwindow"),
|
||||
copyLink: document.getElementById("menu-copylink"),
|
||||
copyImg: document.getElementById("menu-copyimg"),
|
||||
downloadImg: document.getElementById("menu-downloadimg"),
|
||||
search: document.getElementById("menu-search"),
|
||||
barrage: document.getElementById("menu-commentBarrage"),
|
||||
mode: document.getElementById("menu-darkmode"),
|
||||
translate: document.getElementById("menu-translate"),
|
||||
music: [
|
||||
document.getElementById("menu-music-toggle"),
|
||||
document.getElementById("menu-music-back"),
|
||||
document.getElementById("menu-music-forward"),
|
||||
document.getElementById("menu-music-copyMusicName"),
|
||||
],
|
||||
},
|
||||
showRightMenu(e, x = 0, y = 0) {
|
||||
this.menu.style.top = y + "px";
|
||||
this.menu.style.left = x + "px";
|
||||
this.menu.style.display = e ? "block" : "none";
|
||||
e ? stopMaskScroll() : (this.mask.style.display = "none");
|
||||
},
|
||||
hideRightMenu() {
|
||||
rm.showRightMenu(false);
|
||||
rm.mask.style.display = "none";
|
||||
},
|
||||
reLoadSize() {
|
||||
this.menu.style.display = "block";
|
||||
this.menu.style.display = "none";
|
||||
},
|
||||
copyText(e) {
|
||||
navigator.clipboard && navigator.clipboard.writeText(e);
|
||||
utils.snackbarShow(GLOBAL_CONFIG.lang.copy.success, false, 2000);
|
||||
this.hideRightMenu();
|
||||
},
|
||||
async downloadImage(imageUrl = this.domsrc, filename = "photo") {
|
||||
try {
|
||||
const response = await fetch(imageUrl);
|
||||
const blob = await response.blob();
|
||||
const url = URL.createObjectURL(blob);
|
||||
const link = document.createElement("a");
|
||||
link.href = url;
|
||||
link.download = filename || "image.jpg";
|
||||
link.style.display = "none";
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
URL.revokeObjectURL(url);
|
||||
} catch (error) {
|
||||
utils.snackbarShow(GLOBAL_CONFIG.right_menu.img_error, false, 2000);
|
||||
}
|
||||
},
|
||||
copyImage(imgUrl = this.domsrc) {
|
||||
window.open(imgUrl);
|
||||
},
|
||||
mode(darkmode) {
|
||||
darkmode
|
||||
? (document.querySelector(".menu-darkmode-text").textContent =
|
||||
GLOBAL_CONFIG.right_menu.mode.light)
|
||||
: (document.querySelector(".menu-darkmode-text").textContent =
|
||||
GLOBAL_CONFIG.right_menu.mode.dark);
|
||||
this.hideRightMenu();
|
||||
},
|
||||
barrage(enable) {
|
||||
enable
|
||||
? (document.querySelector(".menu-commentBarrage-text").textContent =
|
||||
GLOBAL_CONFIG.right_menu.barrage.open)
|
||||
: (document.querySelector(".menu-commentBarrage-text").textContent =
|
||||
GLOBAL_CONFIG.right_menu.barrage.close);
|
||||
this.hideRightMenu();
|
||||
},
|
||||
};
|
||||
|
||||
function stopMaskScroll() {
|
||||
utils.addEventListenerPjax(rm.menu, "mousewheel", rm.hideRightMenu);
|
||||
utils.addEventListenerPjax(rm.mask, "mousewheel", rm.hideRightMenu);
|
||||
utils.addEventListenerPjax(rm.mask, "click", rm.hideRightMenu);
|
||||
}
|
||||
|
||||
window.oncontextmenu = (ele) => {
|
||||
if (document.body.clientWidth <= 768) return;
|
||||
let x = ele.clientX + 10;
|
||||
let y = ele.clientY;
|
||||
Array.from(rm.menuItems.other).forEach((item) => (item.style.display = "block"));
|
||||
rm.globalEvent = ele;
|
||||
|
||||
let display = false;
|
||||
let link = ele.target.href;
|
||||
let src = ele.target.currentSrc;
|
||||
|
||||
if (selectTextNow && window.getSelection()) {
|
||||
display = true;
|
||||
rm.menuItems.copy.style.display = "block";
|
||||
GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = "block");
|
||||
rm.menuItems.search && (rm.menuItems.search.style.display = "block");
|
||||
} else {
|
||||
rm.menuItems.copy.style.display = "none";
|
||||
GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = "none");
|
||||
rm.menuItems.search && (rm.menuItems.search.style.display = "none");
|
||||
}
|
||||
|
||||
if (link) {
|
||||
display = true;
|
||||
rm.menuItems.new.style.display = "block";
|
||||
rm.menuItems.copyLink.style.display = "block";
|
||||
rm.domhref = link;
|
||||
} else {
|
||||
rm.menuItems.new.style.display = "none";
|
||||
rm.menuItems.copyLink.style.display = "none";
|
||||
}
|
||||
|
||||
if (src) {
|
||||
display = true;
|
||||
rm.menuItems.copyImg.style.display = "block";
|
||||
rm.menuItems.downloadImg.style.display = "block";
|
||||
rm.domsrc = src;
|
||||
} else {
|
||||
rm.menuItems.copyImg.style.display = "none";
|
||||
rm.menuItems.downloadImg.style.display = "none";
|
||||
}
|
||||
|
||||
let tagName = ele.target.tagName.toLowerCase();
|
||||
if (tagName === "input" || tagName === "textarea") {
|
||||
display = true;
|
||||
rm.menuItems.paste.style.display = "block";
|
||||
} else {
|
||||
rm.menuItems.paste.style.display = "none";
|
||||
}
|
||||
|
||||
if (tagName === "meting-js") {
|
||||
display = true;
|
||||
rm.menuItems.music.forEach((item) => (item.style.display = "block"));
|
||||
} else {
|
||||
rm.menuItems.music[0] &&
|
||||
rm.menuItems.music.forEach((item) => (item.style.display = "none"));
|
||||
}
|
||||
|
||||
Array.from(display ? rm.menuItems.other : rm.menuItems.plugin).forEach(
|
||||
(item) => (item.style.display = "none")
|
||||
);
|
||||
Array.from(display ? rm.menuItems.plugin : rm.menuItems.other).forEach(
|
||||
(item) => (item.style.display = "block")
|
||||
);
|
||||
rm.reLoadSize();
|
||||
x + rm.width > window.innerWidth && (x -= rm.width + 10);
|
||||
y + rm.height > window.innerHeight && (y -= y + rm.height - window.innerHeight);
|
||||
rm.mask.style.display = "flex";
|
||||
rm.showRightMenu(true, x, y);
|
||||
return false;
|
||||
};
|
||||
|
||||
(function () {
|
||||
const addEventListener = (element, event, handler) =>
|
||||
element.addEventListener(event, handler);
|
||||
|
||||
addEventListener(rm.menuItems.back, "click", () =>
|
||||
window.history.back() || rm.hideRightMenu()
|
||||
);
|
||||
addEventListener(rm.menuItems.forward, "click", () =>
|
||||
window.history.forward() || rm.hideRightMenu()
|
||||
);
|
||||
addEventListener(rm.menuItems.refresh, "click", () =>
|
||||
window.location.reload()
|
||||
);
|
||||
addEventListener(rm.menuItems.top, "click", () =>
|
||||
sco.toTop() || rm.hideRightMenu()
|
||||
);
|
||||
|
||||
if (GLOBAL_CONFIG.right_menu.music) {
|
||||
addEventListener(rm.menuItems.music[0], "click", () => {
|
||||
sco.musicToggle();
|
||||
rm.hideRightMenu();
|
||||
});
|
||||
addEventListener(rm.menuItems.music[1], "click", () => {
|
||||
document.querySelector("meting-js").aplayer.skipBack();
|
||||
rm.hideRightMenu();
|
||||
});
|
||||
addEventListener(rm.menuItems.music[2], "click", () => {
|
||||
document.querySelector("meting-js").aplayer.skipForward();
|
||||
rm.hideRightMenu();
|
||||
});
|
||||
addEventListener(rm.menuItems.music[3], "click", () => {
|
||||
const title = Array.from(document.querySelectorAll(".aplayer-title")).map(
|
||||
(e) => e.innerText
|
||||
)[0];
|
||||
rm.copyText(title);
|
||||
});
|
||||
}
|
||||
|
||||
addEventListener(rm.menuItems.copy, "click", () => {
|
||||
if (GLOBAL_CONFIG.copyright) {
|
||||
const { limit, author, link, source, info } = GLOBAL_CONFIG.right_menu;
|
||||
if (selectTextNow.length > limit) {
|
||||
selectTextNow = `${selectTextNow}\n\n${author}\n${link}${window.location.href}\n${source}\n${info}`;
|
||||
}
|
||||
}
|
||||
rm.copyText(selectTextNow);
|
||||
rm.hideRightMenu();
|
||||
});
|
||||
|
||||
if (utils.saveToLocal.get("commentBarrageSwitch") !== null) {
|
||||
rm.menuItems.barrage && rm.barrage(!utils.saveToLocal.get("commentBarrageSwitch"));
|
||||
}
|
||||
|
||||
addEventListener(rm.menuItems.paste, "click", () =>
|
||||
rm.pasteText() && rm.hideRightMenu()
|
||||
);
|
||||
GLOBAL_CONFIG.comment &&
|
||||
addEventListener(rm.menuItems.comment, "click", () =>
|
||||
rm.hideRightMenu() || sco.toTalk(selectTextNow)
|
||||
);
|
||||
addEventListener(rm.menuItems.new, "click", () =>
|
||||
window.open(rm.domhref) && rm.hideRightMenu()
|
||||
);
|
||||
addEventListener(rm.menuItems.downloadImg, "click", () =>
|
||||
rm.downloadImage() && rm.hideRightMenu()
|
||||
);
|
||||
addEventListener(rm.menuItems.copyImg, "click", () =>
|
||||
rm.copyImage() && rm.hideRightMenu()
|
||||
);
|
||||
addEventListener(rm.menuItems.copyLink, "click", () =>
|
||||
rm.copyText(rm.domhref) && rm.hideRightMenu()
|
||||
);
|
||||
})();
|
||||
Reference in New Issue
Block a user